static void setupgame(int i) { allocgame(i & 2); initgame(); #if !NO_MENU if (!in_menu) goto skipmenu; while (gamemenu()) { in_menu = 0; rm_invitfile(); skipmenu: #endif writeconfig(); do textgfx_entergame(); while (startgame()); #if !NO_MENU clearwin(0); in_menu = 1; textgfx_entermenu(); readoptions(); } inputdevs_player[0] = 0; # ifdef SOCKET rmsocket(); mk_invitfile(); # endif #endif game = NULL; }
_Use_decl_annotations_ void readconfig(const char* classname, Config* config) { static size_t nbufsize = 256; FILE* configfile; char* configfilepath = (char*)Batch_Get(g_batch, nbufsize); char* apilogfilepath = (char*)Batch_Get(g_batch, nbufsize); config->className = classname; if (!configfilepath) { config->configFilepath = "outofmemory"; return; } if (!apilogfilepath) { config->APIlogFilepath = "outofmemory"; return; } sprintf(configfilepath, filenameformat, g_dirpath, classname, "config"); sprintf(apilogfilepath, filenameformat, g_dirpath, config->className, "apilog"); config->configFilepath = configfilepath; config->APIlogFilepath = apilogfilepath; configfile = File_Open(configfilepath, "r"); if (!configfile) { /* create one */ config->subscribeBookmark = "."; config->providerBookmark = "."; config->dialect = "."; config->expression = "."; config->failAfterCount = MAX_UINT32; config->intervalMS = 1000; writeconfig(config); } else { config->subscribeBookmark = (char*)Batch_GetClear(g_batch, nbufsize); config->providerBookmark = (char*)Batch_GetClear(g_batch, nbufsize); config->dialect = (char*)Batch_GetClear(g_batch, nbufsize); config->expression = (char*)Batch_GetClear(g_batch, nbufsize); if (!config->subscribeBookmark || !config->providerBookmark || !config->dialect || !config->expression) { config->configFilepath = "FAILED"; File_Close(configfile); return; } /* read config from file */ fscanf(configfile, gformat1, &config->testGroup, &config->intervalMS, &config->failAfterCount, &config->failResult, &config->initBehavior, &config->initResultCode, &config->initTimeoutMS, &config->finalizeBehavior, &config->finalizeResultCode, &config->postBehavior, &config->miscTestSubGroup, &config->evalResult, &config->logLoadUnloadCall); fscanf(configfile, "subscribeBookmark=%[^\r\n]", config->subscribeBookmark); fscanf(configfile, "\r\n"); fscanf(configfile, "providerBookmark=%[^\r\n]", config->providerBookmark); fscanf(configfile, "\r\n"); fscanf(configfile, "dialect=%[^\r\n]", config->dialect); fscanf(configfile, "\r\n"); fscanf(configfile, "expression=%[^\r\n]", config->expression); File_Close(configfile); } config->apicallseqcount = readAPIlog(config, config->apicallseq); Config_Reopenlogfile(config); LOGMSG(("read config file (%s)", config->configFilepath)); }
int main(int argn, char *argc[]) { int i, j, title = 1; long int with_cfg = 1, reconfig = 0; char buffer[128]; char* load_file_name = NULL; signal(SIGFPE, my_abort); signal(SIGILL, my_abort); signal(SIGSEGV, my_abort); signal(SIGTERM, my_abort); printf("Devil %s%s\nCompiler: %s\nCompiled: %s %s\n", VERSION, LC_VERSION, SYS_COMPILER_NAME, __DATE__, __TIME__); if (sizeof(float) != 4 || sizeof(long int) != 4 || sizeof(short int) != 2 || sizeof(int) != 4 || sizeof(char) != 1) { printf("Wrong float/int size. Check your compiler flags.\n"); exit(2); } errf = stdout; for (j = 1; j < argn; j++) { sscanf(argc[j], " %s", buffer); for (i = 0; i < strlen(buffer); i++) { buffer[i] = toupper(buffer[i]); } if (buffer[0] == '/') { for (i = 0; i < num_cmdlineparams; i++) { if (strcmp(&buffer[1], cmdline_switches[i]) == 0) { switch (i) { case clp_new: with_cfg = 0; break; case clp_notitle: printf("Devil is sponsored by PC Player!\n"); title = 0; break; case clp_config: reconfig = 1; break; } break; } } if (i == num_cmdlineparams) { printf(TXT_CMDUNKNOWNPARAM, &buffer[1]); for (i = 0; i < num_cmdlineparams; i++) { printf("%s -- %s\n", cmdline_switches[i], cmdline_txts[i]); } exit(1); } } else { load_file_name = argc[j]; } } initeditor(INIFILE, title); if ( !readconfig() ) { writeconfig(0); } else if (reconfig) { writeconfig(1); } initgrph(title); ws_disablectrlc(); l = NULL; if (with_cfg) { readstatus(load_file_name); } else { printmsg(TXT_NOCFGFILE); } /* if(strlen(load_file_name)) { for(n=view.levels.head;n->next!=NULL;n=n->next) closelevel(n->d.lev,1); openlevel(load_file_name); } */ w_handleuser(0, NULL, 0, NULL, view.num_keycodes, view.ec_keycodes, do_event); return 1; }