00001 #include "debug.h"
00002
00003 using namespace irr;
00004 using namespace core;
00005
00006 Debug::Debug(IrrlichtDevice* d, c8* fileName, rect<s32> position)
00007 {
00008
00009 device = d;
00010 writeTo = DBGT_CONSOLE_AND_FILE;
00011 if (device == NULL)
00012 {
00013 fprintf(stderr, "class Debug ctor: arg is NULL.\n");
00014 return;
00015 }
00016 logFile = device->getFileSystem()->createAndWriteFile(fileName);
00017 if (logFile == NULL)
00018 {
00019 fprintf(stderr, "class Debug ctor: cannot create log file.\n");
00020 }
00021 guienv = device->getGUIEnvironment();
00022 if (guienv == NULL)
00023 {
00024 fprintf(stderr, "class Debug ctor: cannot create gui environment.\n");
00025 }
00026 else
00027 {
00028 dbgScreen = guienv->addStaticText(L"Debug:", position, true);
00029 }
00030 log("create Debug", fileName);
00031 }
00032
00033 Debug::~Debug()
00034 {
00035
00036 if (logFile)
00037 {
00038 logFile->drop();
00039 }
00040 }
00041
00042 void Debug::log(const stringc text)
00043 {
00044 stringc tmp(text);
00045 tmp.append("\r\n");
00046 write(tmp);
00047 }
00048
00049 void Debug::log(const stringw text)
00050 {
00051 stringc tmp(text.c_str(), text.size());
00052 tmp.append("\r\n");
00053 write(tmp);
00054 }
00055
00056 void Debug::log(const stringw text, const stringw value)
00057 {
00058 stringc tmp(text.c_str(), text.size());
00059 tmp.append(": ");
00060 tmp.append(stringc(value.c_str(), value.size()));
00061 tmp.append("\r\n");
00062 write(tmp);
00063 }
00064
00065 void Debug::log(const stringc text, const c8* description, const stringc value)
00066 {
00067 stringc tmp(text);
00068 tmp.append(" ");
00069 tmp.append(description);
00070 tmp.append(": ");
00071 tmp.append(value);
00072 tmp.append("\r\n");
00073 write(tmp);
00074 }
00075
00076 void Debug::log(const c8* text, const stringc description, const c8* value)
00077 {
00078 stringc tmp(text);
00079 tmp.append(" ");
00080 tmp.append(description);
00081 tmp.append(": ");
00082 tmp.append(value);
00083 tmp.append("\r\n");
00084 write(tmp);
00085 }
00086
00087 void Debug::log(const c8* text)
00088 {
00089 stringc tmp(text);
00090 tmp.append("\r\n");
00091 write(tmp);
00092 }
00093
00094 void Debug::log(const c8* text, const c8* value)
00095 {
00096 stringc tmp(text);
00097 tmp.append(": ");
00098 tmp.append(value);
00099 tmp.append("\r\n");
00100 write(tmp);
00101 }
00102
00103 void Debug::log(const c8* text, const c8* description, const c8* value)
00104 {
00105 stringc tmp(text);
00106 tmp.append(" ");
00107 tmp.append(description);
00108 tmp.append(": ");
00109 tmp.append(value);
00110 tmp.append("\r\n");
00111 write(tmp);
00112 }
00113
00114 void Debug::log(const c8* text, const s32 value)
00115 {
00116 stringc tmp(text);
00117 tmp.append(": ");
00118 c8* buf = new c8[32];
00119 sprintf(buf, "%i", value);
00120 tmp.append(buf);
00121 tmp.append("\r\n");
00122 write(tmp);
00123 delete [] buf;
00124 }
00125
00126 void Debug::log(const c8* text, const u32 value)
00127 {
00128 stringc tmp(text);
00129 tmp.append(": ");
00130 c8* buf = new c8[32];
00131 sprintf(buf, "%i", value);
00132 tmp.append(buf);
00133 tmp.append("\r\n");
00134 write(tmp);
00135 delete [] buf;
00136 }
00137
00138 void Debug::log(const c8* text, const u32 description, const u32 value)
00139 {
00140 stringc tmp(text);
00141 tmp.append(": ");
00142 c8* buf = new c8[64];
00143 sprintf(buf, "%i with %i", description, value);
00144 tmp.append(buf);
00145 tmp.append("\r\n");
00146 write(tmp);
00147 delete [] buf;
00148 }
00149
00150 void Debug::log(const c8* text, const f32 value)
00151 {
00152 stringc tmp(text);
00153 tmp.append(": ");
00154 c8* buf = new c8[32];
00155 sprintf(buf, "%.2f", value);
00156 tmp.append(buf);
00157 tmp.append("\r\n");
00158 write(tmp);
00159 delete [] buf;
00160 }
00161
00162 void Debug::log(const c8* text, const stringw value)
00163 {
00164 stringc tmp(text);
00165 tmp.append(": ");
00166 stringc tmp2(value.c_str(), value.size());
00167 tmp.append(tmp2);
00168 tmp.append("\r\n");
00169 write(tmp);
00170 }
00171
00172 void Debug::log(const c8* text, const stringc value)
00173 {
00174 stringc tmp(text);
00175 tmp.append(": ");
00176 tmp.append(value);
00177 tmp.append("\r\n");
00178 write(tmp);
00179 }
00180
00181 void Debug::log(const c8* text, const vector3d<f32> vector)
00182 {
00183 stringc tmp(text);
00184 tmp.append(": ");
00185 c8* buf = new c8[32];
00186 sprintf(buf, "x=%.2f ", vector.X);
00187 tmp.append(buf);
00188 sprintf(buf, "y=%.2f ", vector.Y);
00189 tmp.append(buf);
00190 sprintf(buf, "z=%.2f", vector.Z);
00191 tmp.append(buf);
00192 tmp.append("\r\n");
00193 write(tmp);
00194 delete [] buf;
00195 }
00196
00197 void Debug::write(stringc text)
00198 {
00199 switch (writeTo)
00200 {
00201 case DBGT_CONSOLE:
00202 {
00203 fprintf(stdout, "%s", text.c_str());
00204 }
00205 break;
00206
00207 case DBGT_FILE:
00208 {
00209 if (logFile)
00210 {
00211 logFile->write((void*) text.c_str(), text.size());
00212 }
00213 }
00214 break;
00215
00216 case DBGT_CONSOLE_AND_FILE:
00217 {
00218 fprintf(stdout, "%s", text.c_str());
00219 if (logFile)
00220 {
00221 logFile->write((void*) text.c_str(), text.size());
00222 }
00223 }
00224 break;
00225
00226 default:
00227 {
00228
00229 fprintf(stderr, "class Debug log(): do not know where to write to\n");
00230 }
00231 break;
00232 }
00233 }
00234
00235 void Debug::setOutput(DEBUG_TYPE dbgType)
00236 {
00237 writeTo = dbgType;
00238 }
00239
00240 void Debug::show(const c8* text)
00241 {
00242 stringw tmp(text);
00243
00244 dbgElements.push_back(tmp);
00245 }
00246
00247 void Debug::show(const c8* text, const u32 value)
00248 {
00249 stringw tmp(text);
00250 tmp.append(": ");
00251 c8* buf = new c8[32];
00252 sprintf(buf, "%i", value);
00253 tmp.append(buf);
00254
00255 dbgElements.push_back(tmp);
00256 delete [] buf;
00257 }
00258
00259 void Debug::show(const c8* text, const s32 value)
00260 {
00261 stringw tmp(text);
00262 tmp.append(": ");
00263 c8* buf = new c8[32];
00264 sprintf(buf, "%i", value);
00265 tmp.append(buf);
00266
00267 dbgElements.push_back(tmp);
00268 delete [] buf;
00269 }
00270
00271 void Debug::show(const c8* text, const f32 value, bool cutDecimals)
00272 {
00273 stringw tmp(text);
00274 tmp.append(": ");
00275 c8* buf = new c8[32];
00276 if (cutDecimals)
00277 {
00278 sprintf(buf, "%.2f", value);
00279 }
00280 else
00281 {
00282 sprintf(buf, "%f", value);
00283 }
00284 tmp.append(buf);
00285
00286 dbgElements.push_back(tmp);
00287 delete [] buf;
00288 }
00289
00290 void Debug::show(const c8* text, const vector3d<f32> vector)
00291 {
00292 stringw tmp(text);
00293 tmp.append(": ");
00294 c8* buf = new c8[32];
00295 sprintf(buf, "x=%.2f ", vector.X);
00296 tmp.append(buf);
00297 sprintf(buf, "y=%.2f ", vector.Y);
00298 tmp.append(buf);
00299 sprintf(buf, "z=%.2f", vector.Z);
00300 tmp.append(buf);
00301
00302 dbgElements.push_back(tmp);
00303 delete [] buf;
00304 }
00305
00306 void Debug::update()
00307 {
00308 u32 nElements = dbgElements.size();
00309 u32 i;
00310 stringw tmp;
00311 for (i=0; i<nElements; i++)
00312 {
00313 tmp.append(dbgElements[i]);
00314 tmp.append("\n");
00315 }
00316 if (dbgScreen)
00317 {
00318 dbgScreen->setText(tmp.c_str());
00319 }
00320 dbgElements.clear();
00321 }
00322
00323