/* =============== UI_ParseInfos =============== */ int UI_ParseInfos(char *buf, int max, char *infos[]) { char *token; int count; char key[MAX_TOKEN_CHARS]; char info[MAX_INFO_STRING]; count = 0; while(1) { token = Com_Parse(&buf); if(!token[0]) { break; } if(strcmp(token, "{")) { Com_Printf("Missing { in info file\n"); break; } if(count == max) { Com_Printf("Max infos exceeded\n"); break; } info[0] = '\0'; while(1) { token = Com_ParseExt(&buf, qtrue); if(!token[0]) { Com_Printf("Unexpected end of info file\n"); break; } if(!strcmp(token, "}")) { break; } Q_strncpyz(key, token, sizeof(key)); token = Com_ParseExt(&buf, qfalse); if(!token[0]) { strcpy(token, "<NULL>"); } Info_SetValueForKey(info, key, token); } //NOTE: extra space for arena number infos[count] = UI_Alloc(strlen(info) + strlen("\\num\\") + strlen(va("%d", MAX_ARENAS)) + 1); if(infos[count]) { strcpy(infos[count], info); count++; } } return count; }
/* =============== Item_ValidateTypeData =============== */ void Item_ValidateTypeData(itemDef_t *item) { if (item->typeData) { return; } if (item->type == ITEM_TYPE_LISTBOX) { item->typeData = UI_Alloc(sizeof(listBoxDef_t)); memset(item->typeData, 0, sizeof(listBoxDef_t)); } else if (TEXTFIELD(item->type) || item->type == ITEM_TYPE_YESNO || item->type == ITEM_TYPE_BIND || item->type == ITEM_TYPE_SLIDER || item->type == ITEM_TYPE_TEXT) { item->typeData = UI_Alloc(sizeof(editFieldDef_t)); memset(item->typeData, 0, sizeof(editFieldDef_t)); if (item->type == ITEM_TYPE_EDITFIELD) { if (!((editFieldDef_t *)item->typeData)->maxPaintChars) { ((editFieldDef_t *)item->typeData)->maxPaintChars = MAX_EDITFIELD; } } } else if (item->type == ITEM_TYPE_MULTI || item->type == ITEM_TYPE_CHECKBOX || item->type == ITEM_TYPE_TRICHECKBOX || item->type == ITEM_TYPE_COMBO) { item->typeData = UI_Alloc(sizeof(multiDef_t)); } else if (item->type == ITEM_TYPE_MODEL) { item->typeData = UI_Alloc(sizeof(modelDef_t)); } else if (item->type == ITEM_TYPE_MENUMODEL) { item->typeData = UI_Alloc(sizeof(modelDef_t)); } }
/* ======================== Item_ValidateTooltipData ======================== */ qboolean Item_ValidateTooltipData(itemDef_t *item) { if (item->toolTipData != NULL) { return qtrue; } item->toolTipData = UI_Alloc(sizeof(itemDef_t)); if (item->toolTipData == NULL) { return qfalse; } Item_Init(item->toolTipData); Item_Tooltip_Initialize(item->toolTipData); return qtrue; }
/* =============== UI_LoadBots =============== */ static void UI_LoadBots( void ) { vmCvar_t botsFile; int numdirs; char filename[128]; char dirlist[1024]; char* dirptr; int i; int dirlen; char info[MAX_INFO_STRING]; ui_numBots = 0; // setup random bot option memset(info, 0, MAX_INFO_STRING); Info_SetValueForKey(info, "name", "Random"); Info_SetValueForKey(info, "model", "random"); ui_botInfos[ui_numBots] = UI_Alloc(strlen(info) + strlen("\\num\\") + strlen(va("%d", MAX_ARENAS)) + 1); if (ui_botInfos[ui_numBots]) { strcpy(ui_botInfos[ui_numBots], info); } ui_numBots++; trap_Cvar_Register( &botsFile, "g_botsFile", "", CVAR_INIT|CVAR_ROM ); if( *botsFile.string ) { UI_LoadBotsFromFile(botsFile.string); } else { UI_LoadBotsFromFile("scripts/bots.txt"); } // get all bots from .bot files numdirs = trap_FS_GetFileList("scripts", ".bot", dirlist, 1024 ); dirptr = dirlist; for (i = 0; i < numdirs; i++, dirptr += dirlen+1) { dirlen = strlen(dirptr); strcpy(filename, "scripts/"); strcat(filename, dirptr); UI_LoadBotsFromFile(filename); } Com_DPrintf("%i bots parsed\n", ui_numBots); }
/* =============== UI_ParseInfos =============== */ int UI_ParseInfos( char *buf, int max, char *infos[] ) { char *token; int count; char key[MAX_TOKEN_CHARS]; char info[MAX_INFO_STRING]; count = 0; COM_BeginParseSession ("UI_ParseInfos"); while ( 1 ) { token = COM_Parse( (const char **)&buf ); if ( !token[0] ) { break; } if ( strcmp( token, "{" ) ) { Com_Printf( "Missing { in info file\n" ); break; } if ( count == max ) { Com_Printf( "Max infos exceeded\n" ); break; } info[0] = '\0'; while ( 1 ) { token = COM_ParseExt( (const char **)&buf, qtrue ); if ( !token[0] ) { Com_Printf( "Unexpected end of info file\n" ); break; } if ( !strcmp( token, "}" ) ) { break; } Q_strncpyz( key, token, sizeof( key ) ); token = COM_ParseExt( (const char **)&buf, qfalse ); if ( !token[0] ) { strcpy( token, "<NULL>" ); } Info_SetValueForKey( info, key, token ); } //NOTE: extra space for arena number infos[count] = (char *) UI_Alloc(strlen(info) + strlen("\\num\\") + strlen(va("%d", MAX_ARENAS)) + 1); if (infos[count]) { strcpy(infos[count], info); #ifndef FINAL_BUILD if (trap->Cvar_VariableValue("com_buildScript")) { char *botFile = Info_ValueForKey(info, "personality"); if (botFile && botFile[0]) { int fh = 0; trap->FS_Open(botFile, &fh, FS_READ); if (fh) { trap->FS_Close(fh); } } } #endif count++; } } return count; }