bool idCameraDef::load(const char *filename) { char *buf; const char *buf_p; int length = FS_ReadFile( filename, (void **)&buf ); if ( !buf ) { return false; } clear(); Com_BeginParseSession( filename ); buf_p = buf; parse(&buf_p); Com_EndParseSession(); FS_FreeFile( buf ); return true; }
AttachmentDef* BG_LoadAttachmentDef_LoadObj(const char* name) { char* fileBuffer; if (FS_ReadFile(va("weapons/attachments/%s", name), &fileBuffer) < 0) { if (!strcmp(name, "nop")) { Com_Error(0, "Could not load weapon attachment file 'nop'"); } Com_Printf(0, "Could not load weapon attachment file '%s'.\n", name); return BG_LoadAttachmentDef_LoadObj("nop"); } char* fileData = fileBuffer; std::list<AttachmentPatch> patches; Com_BeginParseSession("attachment"); char* token = Com_ParseExt(&fileData); while (fileData) { if (token[0]) { AttachmentPatch patch; if (!_stricmp(token, "multiply")) { patch.operation = APO_MULTIPLY; } else if (!_stricmp(token, "add")) { patch.operation = APO_ADD; } else if (!_stricmp(token, "set")) { patch.operation = APO_REPLACE; } else { Com_Printf(0, "Attachment error in %s: unknown operation %s\n", name, token); continue; } token = Com_ParseExt(&fileData); if (!token) { Com_Printf(0, "Attachment error in %s: premature end of file\n", name); break; } patch.fieldName = strdup(token); token = Com_ParseExt(&fileData); if (!token) { Com_Printf(0, "Attachment error in %s: premature end of file\n", name); break; } if ((token[0] == '-' || isdigit(token[0])) && (token[1] == '\0' || isdigit(token[1]) || token[1] == '.')) { if (strchr(token, '.')) { patch.value = atof(token); patch.type = APT_FLOAT; } else { patch.integer = atoi(token); patch.type = APT_INTEGER; } } else { patch.string = strdup(token); patch.type = APT_STRING; } patches.push_back(patch); } token = Com_ParseExt(&fileData); } Com_EndParseSession(); FS_FreeFile(fileBuffer); // format the file AttachmentDef* adef = new AttachmentDef; adef->name = strdup(name); adef->numPatches = patches.size(); AttachmentPatch* apatches = new AttachmentPatch[adef->numPatches]; int n = 0; for (auto i = patches.begin(); i != patches.end(); i++) { apatches[n] = *i; n++; } adef->patches = apatches; return adef; }
qboolean __cdecl Com_LoadDvarsFromBuffer(const char **inputbuf, unsigned int length, const char *data_p, const char *filename) { const char *cvar_name; int i, count; char buf[16384]; const char* line; Com_Memset(buf, 0, sizeof(buf)); for(i = 0; i < length; i++) { Cvar_Reset(inputbuf[i]); } Com_BeginParseSession(filename); count = 0; while ( (cvar_name = Com_Parse(&data_p)) && cvar_name[0]) { for(i = 0; i < length; i++) { if(!Q_stricmp(cvar_name, inputbuf[i])) break; } if(i == length) { if(com_developer && com_developer->integer) { Com_PrintWarning("WARNING: unknown cvar '%s' in file '%s'\n", cvar_name, filename); } Com_SkipRestOfLine(&data_p); }else{ line = Com_ParseOnLine(&data_p); if(com_developer && com_developer->integer) { Cvar_Set(inputbuf[i], line); }else{ if((!Q_strncmp(inputbuf[i],"bg_shock_viewKickPeriod", 23) || !Q_strncmp(inputbuf[i],"bg_shock_viewKickFadeTime", 25)) && (line[0] == '0' && line[1] == '\0')) { /* Quite this spam */ }else{ Cvar_Set(inputbuf[i], line); } } if ( !buf[i] ) { buf[i] = 1; ++count; } } } Com_EndParseSession(); if ( length == count ) { /* No Errors */ return 1; } Com_PrintError("ERROR: the following cvars were not specified in file '%s'\n", filename); for(i = 0; i < length; i++) { while ( buf[i] && i < length ) { ++i; } if(i < length) Com_PrintError(" %s\n", inputbuf[i]); } return 0; }