42 #ifdef WITH_FONTCONFIG
43 # include <fontconfig/fontconfig.h>
51 # include <ft2build.h>
52 # include FT_FREETYPE_H
54 #if defined(WITH_ICU_LAYOUT) || defined(WITH_ICU_SORT)
55 # include <unicode/uversion.h>
61 #include <lzo/lzo1x.h>
79 buffer +=
seprintf(buffer, last,
" Compiler: "
82 #elif defined(__ICC) && defined(__GNUC__)
83 "ICC %d (GCC %d.%d.%d mode)", __ICC, __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__
86 #elif defined(__GNUC__)
87 "GCC %d.%d.%d", __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__
88 #elif defined(__WATCOMC__)
89 "WatcomC %d", __WATCOMC__
94 #if defined(__VERSION__)
95 return buffer +
seprintf(buffer, last,
" \"" __VERSION__
"\"\n\n");
97 return buffer +
seprintf(buffer, last,
"\n\n");
121 return buffer +
seprintf(buffer, last,
123 " Version: %s (%d)\n"
124 " NewGRF ver: %08x\n"
128 " Build date: %s\n\n",
130 _openttd_revision_modified,
131 _openttd_newgrf_version,
163 " Graphics set: %s (%u)\n"
165 " Music driver: %s\n"
166 " Music set: %s (%u)\n"
168 " Sound driver: %s\n"
169 " Sound set: %s (%u)\n"
170 " Video driver: %s\n\n",
199 FOR_ALL_COMPANIES(c) {
200 if (c->ai_info == NULL) {
201 buffer +=
seprintf(buffer, last,
" %2i: Human\n", (
int)c->
index);
210 buffer +=
seprintf(buffer, last,
"\n");
223 buffer +=
seprintf(buffer, last,
"Libraries:\n");
226 buffer +=
seprintf(buffer, last,
" Allegro: %s\n", allegro_id);
229 #ifdef WITH_FONTCONFIG
230 int version = FcGetVersion();
231 buffer +=
seprintf(buffer, last,
" FontConfig: %d.%d.%d\n", version / 10000, (version / 100) % 100, version % 100);
236 int major, minor, patch;
237 FT_Init_FreeType(&library);
238 FT_Library_Version(library, &major, &minor, &patch);
239 FT_Done_FreeType(library);
240 buffer +=
seprintf(buffer, last,
" FreeType: %d.%d.%d\n", major, minor, patch);
243 #if defined(WITH_ICU_LAYOUT) || defined(WITH_ICU_SORT)
245 char buf[4 * 3 + 3 + 1];
248 u_versionToString(ver, buf);
250 buffer +=
seprintf(buffer, last,
" ICU i18n: %s\n", buf);
252 #ifdef WITH_ICU_LAYOUT
253 buffer +=
seprintf(buffer, last,
" ICU lx: %s\n", buf);
258 buffer +=
seprintf(buffer, last,
" LZMA: %s\n", lzma_version_string());
262 buffer +=
seprintf(buffer, last,
" LZO: %s\n", lzo_version_string());
266 buffer +=
seprintf(buffer, last,
" PNG: %s\n", png_get_libpng_ver(NULL));
270 #ifdef DYNAMICALLY_LOADED_SDL
271 if (SDL_CALL SDL_Linked_Version != NULL) {
275 const SDL_version *v = SDL_CALL SDL_Linked_Version();
276 buffer +=
seprintf(buffer, last,
" SDL: %d.%d.%d\n", v->major, v->minor, v->patch);
281 buffer +=
seprintf(buffer, last,
" Zlib: %s\n", zlibVersion());
284 buffer +=
seprintf(buffer, last,
"\n");
319 time_t cur_time = time(NULL);
320 buffer +=
seprintf(buffer, last,
"*** OpenTTD Crash Report ***\n\n");
321 buffer +=
seprintf(buffer, last,
"Crash at: %s", asctime(gmtime(&cur_time)));
338 buffer +=
seprintf(buffer, last,
"*** End of OpenTTD Crash Report ***\n");
356 if (file == NULL)
return false;
358 size_t len = strlen(buffer);
359 size_t written = fwrite(buffer, 1, len, file);
362 return len == written;
383 if (
_m == NULL)
return false;
408 if (_screen.width < 1 || _screen.height < 1 || _screen.dst_ptr == NULL)
return false;
424 static bool crashlogged =
false;
425 if (crashlogged)
return false;
428 char filename[MAX_PATH];
432 printf(
"Crash encountered, generating crash log...\n");
434 printf(
"%s\n", buffer);
435 printf(
"Crash log generated.\n\n");
437 printf(
"Writing crash log to disk...\n");
440 printf(
"Crash log written to %s. Please add this file to any bug reports.\n\n", filename);
442 printf(
"Writing crash log failed. Please attach the output above to any bug reports.\n\n");
449 printf(
"Writing crash dump failed.\n\n");
451 }
else if (dret > 0) {
452 printf(
"Crash dump written to %s. Please add this file to any bug reports.\n\n", filename);
455 printf(
"Writing crash savegame...\n");
458 printf(
"Crash savegame written to %s. Please add this file and the last (auto)save to any bug reports.\n\n", filename);
461 printf(
"Writing crash savegame failed. Please attach the last (auto)save to any bug reports.\n\n");
464 printf(
"Writing crash screenshot...\n");
467 printf(
"Crash screenshot written to %s. Please add this file to any bug reports.\n\n", filename);
470 printf(
"Writing crash screenshot failed.\n\n");