int loaddefinitionsfile(char *fn) { scriptfile *script; script = scriptfile_fromfile(fn); if (!script) return -1; defsparser(script); scriptfile_close(script); scriptfile_clearsymbols(); return 0; }
static void LoadList(const char * filename) { scriptfile *script = scriptfile_fromfile(filename); if (!script) return; scriptfile_addsymbolvalue("GAMEFLAG_DUKE", GAMEFLAG_DUKE); scriptfile_addsymbolvalue("GAMEFLAG_ADDON", GAMEFLAG_DUKE|GAMEFLAG_ADDON); scriptfile_addsymbolvalue("GAMEFLAG_NAM", GAMEFLAG_NAM); scriptfile_addsymbolvalue("GAMEFLAG_NAPALM", GAMEFLAG_NAM|GAMEFLAG_NAPALM); scriptfile_addsymbolvalue("GAMEFLAG_WW2GI", GAMEFLAG_NAM|GAMEFLAG_WW2GI); scriptfile_addsymbolvalue("DUKE15_CRC", DUKE15_CRC); scriptfile_addsymbolvalue("DUKEPP_CRC", DUKEPP_CRC); scriptfile_addsymbolvalue("DUKE13_CRC", DUKE13_CRC); scriptfile_addsymbolvalue("DUKEDC13_CRC", DUKEDC13_CRC); scriptfile_addsymbolvalue("DUKEDCPP_CRC", DUKEDCPP_CRC); scriptfile_addsymbolvalue("DUKEDC_CRC", DUKEDC_CRC); scriptfile_addsymbolvalue("VACA13_CRC", VACA13_CRC); scriptfile_addsymbolvalue("VACAPP_CRC", VACAPP_CRC); scriptfile_addsymbolvalue("VACA15_CRC", VACA15_CRC); scriptfile_addsymbolvalue("DUKECB_CRC", DUKECB_CRC); scriptfile_addsymbolvalue("DUKENW_CRC", DUKENW_CRC); scriptfile_addsymbolvalue("DZ2_13_CRC", DZ2_13_CRC); scriptfile_addsymbolvalue("DZ2_PP_CRC", DZ2_PP_CRC); scriptfile_addsymbolvalue("NAM_CRC", NAM_CRC); scriptfile_addsymbolvalue("NAPALM_CRC", NAPALM_CRC); scriptfile_addsymbolvalue("WW2GI_CRC", WW2GI_CRC); while (!scriptfile_eof(script)) { enum { T_GRPINFO, T_GAMENAME, T_CRC, T_SIZE, T_DEPCRC, T_SCRIPTNAME, T_DEFNAME, T_FLAGS, }; static const tokenlist profiletokens[] = { { "grpinfo", T_GRPINFO }, }; int32_t token = getatoken(script,profiletokens,ARRAY_SIZE(profiletokens)); switch (token) { case T_GRPINFO: { int32_t gsize = 0, gcrcval = 0, gflags = GAMEFLAG_DUKE, gdepcrc = DUKE15_CRC; char *gname = NULL, *gscript = NULL, *gdef = NULL; char *grpend = NULL; static const tokenlist grpinfotokens[] = { { "name", T_GAMENAME }, { "scriptname", T_SCRIPTNAME }, { "defname", T_DEFNAME }, { "crc", T_CRC }, { "dependency", T_DEPCRC }, { "size", T_SIZE }, { "flags", T_FLAGS }, }; if (scriptfile_getbraces(script,&grpend)) break; while (script->textptr < grpend) { int32_t token = getatoken(script,grpinfotokens,ARRAY_SIZE(grpinfotokens)); switch (token) { case T_GAMENAME: scriptfile_getstring(script,&gname); break; case T_SCRIPTNAME: scriptfile_getstring(script,&gscript); break; case T_DEFNAME: scriptfile_getstring(script,&gdef); break; case T_FLAGS: scriptfile_getsymbol(script,&gflags); gflags &= GAMEFLAGMASK; break; case T_DEPCRC: scriptfile_getsymbol(script,&gdepcrc); break; case T_CRC: scriptfile_getsymbol(script,&gcrcval); break; case T_SIZE: scriptfile_getnumber(script,&gsize); break; default: break; } grpinfo_t * const fg = (grpinfo_t *)Xcalloc(1, sizeof(grpinfo_t)); fg->next = listgrps; listgrps = fg; if (gname) fg->name = Xstrdup(gname); fg->size = gsize; fg->crcval = gcrcval; fg->dependency = gdepcrc; fg->game = gflags; if (gscript) fg->scriptname = dup_filename(gscript); if (gdef) fg->defname = dup_filename(gdef); } break; } default: break; } } scriptfile_close(script); scriptfile_clearsymbols(); }
int loadsetup(const char *fn) { scriptfile *cfg; char *token; int item; cfg = scriptfile_fromfile(fn); if (!cfg) { return -1; } scriptfile_clearsymbols(); option[0] = 1; // vesa all the way... option[1] = 1; // sound all the way... option[4] = 0; // no multiplayer option[5] = 0; while (1) { token = scriptfile_gettoken(cfg); if (!token) break; //EOF for (item = 0; configspec[item].name; item++) { if (!Bstrcasecmp(token, configspec[item].name)) { // Seek past any = symbol. token = scriptfile_peektoken(cfg); if (!Bstrcasecmp("=", token)) { scriptfile_gettoken(cfg); } switch (configspec[item].type) { case type_bool: { int value = 0; if (scriptfile_getnumber(cfg, &value)) break; *(int*)configspec[item].store = (value != 0); break; } case type_int: { int value = 0; if (scriptfile_getnumber(cfg, &value)) break; *(int*)configspec[item].store = value; break; } case type_hex: { int value = 0; if (scriptfile_gethex(cfg, &value)) break; *(int*)configspec[item].store = value; break; } case type_double: { double value = 0.0; if (scriptfile_getdouble(cfg, &value)) break; *(double*)configspec[item].store = value; break; } default: { buildputs("loadsetup: unhandled value type\n"); break; } } break; } } if (!configspec[item].name) { buildprintf("loadsetup: error on line %d\n", scriptfile_getlinum(cfg, cfg->ltextptr)); continue; } } #if USE_POLYMOST if (tmprenderer >= 0) { setrendermode(tmprenderer); } #endif if (tmpbrightness >= 0) { brightness = min(max(tmpbrightness,0),15); } OSD_CaptureKey(keys[19]); scriptfile_close(cfg); scriptfile_clearsymbols(); return 0; }