/** * Terminate Mondo in response to a signal. * @param sig The signal number received. */ void terminate_daemon(int sig) { char tmp[64]; char tmp2[MAX_STR_LEN]; // char command[512]; // pid_t pid; switch (sig) { case SIGINT: sprintf(tmp, "SIGINT"); strcpy(tmp2, "You interrupted me :-)"); break; case SIGKILL: sprintf(tmp, "SIGKILL"); strcpy(tmp2, "I seriously have no clue how this signal even got to me. Something's wrong with your system."); break; case SIGTERM: sprintf(tmp, "SIGTERM"); strcpy(tmp2, "Got terminate signal"); break; case SIGHUP: sprintf(tmp, "SIGHUP"); strcpy(tmp2, "Hangup on line"); break; case SIGSEGV: sprintf(tmp, "SIGSEGV"); strcpy(tmp2, "Internal programming error. Please send a backtrace as well as your log."); break; case SIGPIPE: sprintf(tmp, "SIGPIPE"); strcpy(tmp2, "Pipe was broken"); break; case SIGABRT: sprintf(tmp, "SIGABRT"); sprintf(tmp2, "Abort - probably failed assertion. I'm sleeping for a few seconds so you can read the message."); break; default: sprintf(tmp, "(Unknown)"); } strcat(tmp, " signal received from OS"); log_to_screen(tmp); log_to_screen(tmp2); if (sig == SIGABRT) { sleep(10); } kill_buffer(); fatal_error ("Mondoarchive is terminating in response to a signal from the OS"); finish(254); // just in case }
void mainloop(void) { buffer raw,rgb; init_buffer(&rgb,CAM_WIDTH*CAM_HEIGHT*3); int ok = start_showing(&rgb,"SDL buffer"); if(ok==-1) fprintf(stderr,"EVERYTHING IS F****D\n"); for(;;) { raw = get_frame(3); yuy2_to_rgb(&raw,&rgb); render(); } kill_buffer(&rgb); }