void fatal(const char *s, ...) // failure exit { static int errors = 0; errors++; if(errors <= 2) // print up to one extra recursive error { defvformatstring(msg,s,s); logoutf("%s", msg); if(errors <= 1) // avoid recursion { if(SDL_WasInit(SDL_INIT_VIDEO)) { SDL_ShowCursor(1); SDL_WM_GrabInput(SDL_GRAB_OFF); cleargamma(); } #ifdef WIN32 MessageBox(NULL, msg, "Cube 2: Sauerbraten fatal error", MB_OK|MB_SYSTEMMODAL); #endif SDL_Quit(); } } exit(EXIT_FAILURE); }
void fatal(const char *s, ...) // failure exit { if(++errors <= 2) // print up to one extra recursive error { defvformatstring(msg, s, s); if(logfile) logoutf("%s", msg); #ifndef WIN32 fprintf(stderr, "%s\n", msg); #endif if(errors <= 1) // avoid recursion { setscreensaver(true); if(SDL_WasInit(SDL_INIT_VIDEO)) { showcursor(true); SDL_WM_GrabInput(SDL_GRAB_OFF); cleargamma(); } #ifdef WIN32 defformatstring(cap)("%s: Error", versionname); MessageBox(NULL, msg, cap, MB_OK|MB_SYSTEMMODAL); #endif SDL_Quit(); } } exit(EXIT_FAILURE); }
/// failure crash void fatal(const char *s, ...) { static int errors = 0; errors++; if(errors <= 2) /// print up to one extra recursive error { defvformatstring(msg,s,s); logoutf("%s", msg); if(errors <= 1) /// avoid recursion { if(SDL_WasInit(SDL_INIT_VIDEO)) { /// free SDL context if(screen) SDL_SetWindowGrab(screen, SDL_FALSE); SDL_SetRelativeMouseMode(SDL_FALSE); SDL_ShowCursor(SDL_TRUE); cleargamma(); } #ifdef WIN32 MessageBox(NULL, msg, "Inexor fatal error", MB_OK|MB_SYSTEMMODAL); #endif SDL_Quit(); } } exit(EXIT_FAILURE); }
bool logline(int level, const char *msg, ...) { if(!enabled) return false; if(level < 0 || level >= ACLOG_NUM) return false; defvformatstring(sf, msg, msg); filtertext(sf, sf, 2); const char *ts = timestamp ? timestring(true, "%b %d %H:%M:%S ") : "", *ld = levelprefix[level]; char *p, *l = sf; do { // break into single lines first if((p = strchr(l, '\n'))) *p = '\0'; if(consolethreshold <= level) printf("%s%s%s\n", ts, ld, l); if(fp && filethreshold <= level) fprintf(fp, "%s%s%s\n", ts, ld, l); if(syslogthreshold <= level) #ifdef AC_USE_SYSLOG syslog(levels[level], "%s", l); #else { defformatstring(text)("<%d>%s: %s", (16 + facility) * 8 + levels[level], ident, l); // no TIMESTAMP, no hostname: syslog will add this ENetBuffer buf; buf.data = text; buf.dataLength = strlen(text); enet_socket_send(logsock, &logdest, &buf, 1); } #endif l = p + 1; } while(p); if(consolethreshold <= level) fflush(stdout); if(fp && filethreshold <= level) fflush(fp); return consolethreshold <= level; }
void fatal(const char *fmt, ...) { void cleanupserver(); cleanupserver(); defvformatstring(msg,fmt,fmt); if(logfile) logoutf("%s", msg); #ifdef WIN32 MessageBox(NULL, msg, "Cube 2: Sauerbraten fatal error", MB_OK|MB_SYSTEMMODAL); #else fprintf(stderr, "server error: %s\n", msg); #endif closelogfile(); exit(EXIT_FAILURE); }
Shader *generateshader(const char *name, const char *fmt, ...) { if(!loadedshaders) return NULL; Shader *s = name ? lookupshaderbyname(name) : NULL; if(!s) { defvformatstring(cmd, fmt, fmt); standardshaders = true; execute(cmd); standardshaders = false; s = name ? lookupshaderbyname(name) : NULL; if(!s) s = nullshader; } return s; }
void draw_textf(const char *fstr, int left, int top, ...) { defvformatstring(str, top, fstr); draw_text(str, left, top); }
// debug message void dbgoutf(const char *format, ...) { defvformatstring(d, format, format); printf("%s\n", d); }