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");