47 buffer +=
seprintf(buffer, last,
" Compiler: "
50 #elif defined(__ICC) && defined(__GNUC__)
51 "ICC %d (GCC %d.%d.%d mode)", __ICC, __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__
54 #elif defined(__GNUC__)
55 "GCC %d.%d.%d", __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__
56 #elif defined(__WATCOMC__)
57 "WatcomC %d", __WATCOMC__
62 #if defined(__VERSION__)
63 return buffer +
seprintf(buffer, last,
" \"" __VERSION__
"\"\n\n");
65 return buffer +
seprintf(buffer, last,
"\n\n");
89 return buffer +
seprintf(buffer, last,
96 " Build date: %s\n\n",
98 _openttd_revision_modified,
99 _openttd_newgrf_version,
131 " Graphics set: %s (%u)\n"
133 " Music driver: %s\n"
134 " Music set: %s (%u)\n"
136 " Sound driver: %s\n"
137 " Sound set: %s (%u)\n"
138 " Video driver: %s\n\n",
167 FOR_ALL_COMPANIES(c) {
168 if (c->ai_info == NULL) {
169 buffer +=
seprintf(buffer, last,
" %2i: Human\n", (
int)c->
index);
178 buffer +=
seprintf(buffer, last,
"\n");
185 # include <allegro.h>
187 #ifdef WITH_FONTCONFIG
188 # include <fontconfig/fontconfig.h>
196 # include <ft2build.h>
197 # include FT_FREETYPE_H
199 #if defined(WITH_ICU_LAYOUT) || defined(WITH_ICU_SORT)
200 # include <unicode/uversion.h>
206 #include <lzo/lzo1x.h>
224 buffer +=
seprintf(buffer, last,
"Libraries:\n");
227 buffer +=
seprintf(buffer, last,
" Allegro: %s\n", allegro_id);
230 #ifdef WITH_FONTCONFIG
231 int version = FcGetVersion();
232 buffer +=
seprintf(buffer, last,
" FontConfig: %d.%d.%d\n", version / 10000, (version / 100) % 100, version % 100);
237 int major, minor, patch;
238 FT_Init_FreeType(&library);
239 FT_Library_Version(library, &major, &minor, &patch);
240 FT_Done_FreeType(library);
241 buffer +=
seprintf(buffer, last,
" FreeType: %d.%d.%d\n", major, minor, patch);
244 #if defined(WITH_ICU_LAYOUT) || defined(WITH_ICU_SORT)
246 char buf[4 * 3 + 3 + 1];
249 u_versionToString(ver, buf);
251 buffer +=
seprintf(buffer, last,
" ICU i18n: %s\n", buf);
253 #ifdef WITH_ICU_LAYOUT
254 buffer +=
seprintf(buffer, last,
" ICU lx: %s\n", buf);
259 buffer +=
seprintf(buffer, last,
" LZMA: %s\n", lzma_version_string());
263 buffer +=
seprintf(buffer, last,
" LZO: %s\n", lzo_version_string());
267 buffer +=
seprintf(buffer, last,
" PNG: %s\n", png_get_libpng_ver(NULL));
271 #ifdef DYNAMICALLY_LOADED_SDL
272 if (SDL_CALL SDL_Linked_Version != NULL) {
276 const SDL_version *v = SDL_CALL SDL_Linked_Version();
277 buffer +=
seprintf(buffer, last,
" SDL: %d.%d.%d\n", v->major, v->minor, v->patch);
282 buffer +=
seprintf(buffer, last,
" Zlib: %s\n", zlibVersion());
285 buffer +=
seprintf(buffer, last,
"\n");
320 time_t cur_time = time(NULL);
321 buffer +=
seprintf(buffer, last,
"*** OpenTTD Crash Report ***\n\n");
322 buffer +=
seprintf(buffer, last,
"Crash at: %s", asctime(gmtime(&cur_time)));
339 buffer +=
seprintf(buffer, last,
"*** End of OpenTTD Crash Report ***\n");
357 if (file == NULL)
return false;
359 size_t len = strlen(buffer);
360 size_t written = fwrite(buffer, 1, len, file);
363 return len == written;
384 if (
_m == NULL)
return false;
409 if (_screen.width < 1 || _screen.height < 1 || _screen.dst_ptr == NULL)
return false;
425 static bool crashlogged =
false;
426 if (crashlogged)
return false;
429 char filename[MAX_PATH];
433 printf(
"Crash encountered, generating crash log...\n");
435 printf(
"%s\n", buffer);
436 printf(
"Crash log generated.\n\n");
438 printf(
"Writing crash log to disk...\n");
441 printf(
"Crash log written to %s. Please add this file to any bug reports.\n\n", filename);
443 printf(
"Writing crash log failed. Please attach the output above to any bug reports.\n\n");
450 printf(
"Writing crash dump failed.\n\n");
452 }
else if (dret > 0) {
453 printf(
"Crash dump written to %s. Please add this file to any bug reports.\n\n", filename);
456 printf(
"Writing crash savegame...\n");
459 printf(
"Crash savegame written to %s. Please add this file and the last (auto)save to any bug reports.\n\n", filename);
462 printf(
"Writing crash savegame failed. Please attach the last (auto)save to any bug reports.\n\n");
465 printf(
"Writing crash screenshot...\n");
468 printf(
"Crash screenshot written to %s. Please add this file to any bug reports.\n\n", filename);
471 printf(
"Writing crash screenshot failed.\n\n");