/* ================= UI_PlayDemo_GetDemoList ================= */ static void UI_PlayDemo_GetDemoList( void ) { char comment[256]; char **filenames; int i, numFiles; filenames = FS_SEARCH( "demos/*.dem", &numFiles, TRUE ); for( i = 0; i < numFiles; i++ ) { if( i >= UI_MAXGAMES ) break; if( !GET_DEMO_COMMENT( filenames[i], comment )) { if( strlen( comment )) { // get name string even if not found - CL_GetComment can be mark demos // as <CORRUPTED> <OLD VERSION> etc StringConcat( uiPlayDemo.demoDescription[i], uiEmptyString, TITLE_LENGTH ); StringConcat( uiPlayDemo.demoDescription[i], comment, MAPNAME_LENGTH ); StringConcat( uiPlayDemo.demoDescription[i], uiEmptyString, MAXCLIENTS_LENGTH ); uiPlayDemo.demoDescriptionPtr[i] = uiPlayDemo.demoDescription[i]; COM_FileBase( filenames[i], uiPlayDemo.delName[i] ); } else uiPlayDemo.demoDescriptionPtr[i] = NULL; continue; } // strip path, leave only filename (empty slots doesn't have savename) COM_FileBase( filenames[i], uiPlayDemo.demoName[i] ); COM_FileBase( filenames[i], uiPlayDemo.delName[i] ); // fill demo desc StringConcat( uiPlayDemo.demoDescription[i], comment + CS_SIZE, TITLE_LENGTH ); StringConcat( uiPlayDemo.demoDescription[i], uiEmptyString, TITLE_LENGTH ); StringConcat( uiPlayDemo.demoDescription[i], comment, MAPNAME_LENGTH ); StringConcat( uiPlayDemo.demoDescription[i], uiEmptyString, MAPNAME_LENGTH ); // fill remaining entries StringConcat( uiPlayDemo.demoDescription[i], comment + CS_SIZE * 2, MAXCLIENTS_LENGTH ); StringConcat( uiPlayDemo.demoDescription[i], uiEmptyString, MAXCLIENTS_LENGTH ); uiPlayDemo.demoDescriptionPtr[i] = uiPlayDemo.demoDescription[i]; } for ( ; i < UI_MAXGAMES; i++ ) uiPlayDemo.demoDescriptionPtr[i] = NULL; uiPlayDemo.demosList.itemNames = (const char **)uiPlayDemo.demoDescriptionPtr; if( strlen( uiPlayDemo.demoName[0] ) == 0 ) uiPlayDemo.play.generic.flags |= QMF_GRAYED; else uiPlayDemo.play.generic.flags &= ~QMF_GRAYED; if( strlen( uiPlayDemo.delName[0] ) == 0 || !stricmp( gpGlobals->demoname, uiPlayDemo.delName[uiPlayDemo.demosList.curItem] )) uiPlayDemo.remove.generic.flags |= QMF_GRAYED; else uiPlayDemo.remove.generic.flags &= ~QMF_GRAYED; }
/* ================= UI_RecDemo_GetDemoList ================= */ static void UI_RecDemo_GetDemoList( void ) { char comment[256]; char **filenames; int i = 0, j, numFiles; filenames = FS_SEARCH( "demos/*.dem", &numFiles, TRUE ); if ( CL_IsActive () && !gpGlobals->demorecording && !gpGlobals->demoplayback ) { char maxClients[32]; sprintf( maxClients, "%i", gpGlobals->maxClients ); // create new entry for current save game strncpy( uiRecDemo.demoName[i], "new", CS_SIZE ); StringConcat( uiRecDemo.demoDescription[i], gpGlobals->maptitle, TITLE_LENGTH ); StringConcat( uiRecDemo.demoDescription[i], uiEmptyString, TITLE_LENGTH ); // fill remaining entries StringConcat( uiRecDemo.demoDescription[i], "New Demo", MAPNAME_LENGTH ); StringConcat( uiRecDemo.demoDescription[i], uiEmptyString, MAPNAME_LENGTH ); StringConcat( uiRecDemo.demoDescription[i], maxClients, MAXCLIENTS_LENGTH ); StringConcat( uiRecDemo.demoDescription[i], uiEmptyString, MAXCLIENTS_LENGTH ); uiRecDemo.demoDescriptionPtr[i] = uiRecDemo.demoDescription[i]; i++; } for( j = 0; j < numFiles; i++, j++ ) { if( i >= UI_MAXGAMES ) break; if( !GET_DEMO_COMMENT( filenames[j], comment )) { if( strlen( comment )) { // get name string even if not found - C:_GetComment can be mark demos // as <CORRUPTED> <OLD VERSION> etc // get name string even if not found - SV_GetComment can be mark saves // as <CORRUPTED> <OLD VERSION> etc StringConcat( uiRecDemo.demoDescription[i], uiEmptyString, TITLE_LENGTH ); StringConcat( uiRecDemo.demoDescription[i], comment, MAPNAME_LENGTH ); StringConcat( uiRecDemo.demoDescription[i], uiEmptyString, MAXCLIENTS_LENGTH ); uiRecDemo.demoDescriptionPtr[i] = uiRecDemo.demoDescription[i]; COM_FileBase( filenames[j], uiRecDemo.demoName[i] ); COM_FileBase( filenames[j], uiRecDemo.delName[i] ); } else uiRecDemo.demoDescriptionPtr[i] = NULL; continue; } // strip path, leave only filename (empty slots doesn't have demoname) COM_FileBase( filenames[j], uiRecDemo.demoName[i] ); COM_FileBase( filenames[j], uiRecDemo.delName[i] ); // fill demo desc StringConcat( uiRecDemo.demoDescription[i], comment + CS_SIZE, TITLE_LENGTH ); StringConcat( uiRecDemo.demoDescription[i], uiEmptyString, TITLE_LENGTH ); StringConcat( uiRecDemo.demoDescription[i], comment, MAPNAME_LENGTH ); StringConcat( uiRecDemo.demoDescription[i], uiEmptyString, MAPNAME_LENGTH ); // fill remaining entries StringConcat( uiRecDemo.demoDescription[i], comment + CS_SIZE * 2, MAXCLIENTS_LENGTH ); StringConcat( uiRecDemo.demoDescription[i], uiEmptyString, MAXCLIENTS_LENGTH ); uiRecDemo.demoDescriptionPtr[i] = uiRecDemo.demoDescription[i]; } for ( ; i < UI_MAXGAMES; i++ ) uiRecDemo.demoDescriptionPtr[i] = NULL; uiRecDemo.demosList.itemNames = (const char **)uiRecDemo.demoDescriptionPtr; if( strlen( uiRecDemo.demoName[0] ) == 0 || !CL_IsActive () || gpGlobals->demoplayback ) uiRecDemo.record.generic.flags |= QMF_GRAYED; else uiRecDemo.record.generic.flags &= ~QMF_GRAYED; if( strlen( uiRecDemo.delName[0] ) == 0 || !stricmp( gpGlobals->demoname, uiRecDemo.delName[uiRecDemo.demosList.curItem] )) uiRecDemo.remove.generic.flags |= QMF_GRAYED; else uiRecDemo.remove.generic.flags &= ~QMF_GRAYED; }