/* ========== S_OGG_LoadFileList Load list of Ogg Vorbis files in /music/ ========== */ static void S_OGG_LoadFileList (void) { char *p, *path = NULL; char **list; char findname[MAX_OSPATH]; char lastPath[MAX_OSPATH]; int i, numfiles = 0; extern char **FS_ListFiles( char *, int *, unsigned, unsigned ); extern qboolean FS_ItemInList (char *check, int num, char **list); if (!sound_started) return; ogg_filelist = malloc(sizeof(char *) * MAX_OGGLIST); memset(ogg_filelist, 0, sizeof( char * ) * MAX_OGGLIST ); lastPath[0] = 0; // set search path path = FS_NextPath(path); while (path) { // catch repeated paths if ( strlen(lastPath) > 0 && !strcmp (path, lastPath) ) { path = FS_NextPath( path ); continue; } // get file list Com_sprintf( findname, sizeof(findname), "%s/music/*.ogg", path ); list = FS_ListFiles(findname, &numfiles, 0, SFF_SUBDIR | SFF_HIDDEN | SFF_SYSTEM); // add valid Ogg Vorbis files to the list for (i=0; i<numfiles && ogg_numfiles<MAX_OGGLIST; i++) { if (!list || !list[i]) continue; p = list[i]; if (!strstr(p, ".ogg")) continue; // check if already in list if (!FS_ItemInList(p, ogg_numfiles, ogg_filelist)) { ogg_filelist[ogg_numfiles] = malloc(strlen(p)+1); sprintf(ogg_filelist[ogg_numfiles], "%s\0", p); ogg_numfiles++; } } // Free the file list if (numfiles) FS_FreeFileList(list, numfiles); // copy to lastPath strncpy (lastPath, path, sizeof(lastPath)); path = FS_NextPath( path ); } // check pak after if (list = FS_ListPak("music/", &numfiles)) { // add valid Ogg Vorbis file to the list for (i=0; i<numfiles && ogg_numfiles<MAX_OGGLIST; i++) { if (!list || !list[i]) continue; p = list[i]; if (!strstr(p, ".ogg")) continue; // check if already in list if (!FS_ItemInList(p, ogg_numfiles, ogg_filelist)) { ogg_filelist[ogg_numfiles] = malloc(strlen(p)+1); sprintf(ogg_filelist[ogg_numfiles], "%s\0", p); ogg_numfiles++; } } } if (numfiles) FS_FreeFileList(list, numfiles); }
/* ========== S_OGG_LoadFileList Load list of Ogg Vorbis files in music/ Based on code by QuDos ========== */ void S_OGG_LoadFileList (void) { char *p, *path = NULL; char **list; // List of .ogg files char findname[MAX_OSPATH]; char lastPath[MAX_OSPATH]; // Knightmare added int i, numfiles = 0; ogg_filelist = malloc(sizeof(char *) * MAX_OGGLIST); memset( ogg_filelist, 0, sizeof( char * ) * MAX_OGGLIST ); lastPath[0] = 0; // Knightmare added // Set search path path = FS_NextPath(path); while (path) { // Knightmare- catch repeated paths if ( strlen(lastPath) > 0 && !strcmp (path, lastPath) ) { path = FS_NextPath( path ); continue; } // Get file list Com_sprintf( findname, sizeof(findname), "%s/music/*.ogg", path ); list = FS_ListFiles(findname, &numfiles, 0, SFF_SUBDIR | SFF_HIDDEN | SFF_SYSTEM); // Add valid Ogg Vorbis file to the list for (i=0; i<numfiles && ogg_numfiles<MAX_OGGLIST; i++) { if (!list || !list[i]) continue; p = list[i]; if (!strstr(p, ".ogg")) continue; // if (!S_OGG_Check(p)) // continue; if (!FS_ItemInList(p, ogg_numfiles, ogg_filelist)) // check if already in list { ogg_filelist[ogg_numfiles] = malloc(strlen(p)+1); sprintf(ogg_filelist[ogg_numfiles], "%s\0", p); ogg_numfiles++; } } if (numfiles) // Free the file list FS_FreeFileList(list, numfiles); strncpy (lastPath, path, sizeof(lastPath)); // Knightmare- copy to lastPath path = FS_NextPath( path ); } #ifndef OGG_DIRECT_FILE // check pak after if (list = FS_ListPak("music/", &numfiles)) { // Add valid Ogg Vorbis file to the list for (i=0; i<numfiles && ogg_numfiles<MAX_OGGLIST; i++) { if (!list || !list[i]) continue; p = list[i]; if (!strstr(p, ".ogg")) continue; // if (!S_OGG_Check(p)) // continue; if (!FS_ItemInList(p, ogg_numfiles, ogg_filelist)) // check if already in list { ogg_filelist[ogg_numfiles] = malloc(strlen(p)+1); sprintf(ogg_filelist[ogg_numfiles], "%s\0", p); ogg_numfiles++; } } } if (numfiles) FS_FreeFileList(list, numfiles); #endif // OGG_DIRECT_FILE }
void SetCrosshairNames (void) { char *curCrosshair; char *p; int32_t ncrosshairs = 0, ncrosshairnames; int32_t i; sset_t crosshairs; if (!crosshair_names[0]) crosshair_names[0] = (char*)Z_TagStrdup("none",TAG_MENU); //was default ncrosshairnames = 1; Q_SSetInit(&crosshairs, 100, MAX_OSPATH, TAG_MENU); ncrosshairs = FS_ListFilesWithPaks( "pics/ch*.*", &crosshairs, 0, SFF_SUBDIR | SFF_HIDDEN | SFF_SYSTEM ); for (i=0; i < ncrosshairs && ncrosshairnames < MAX_CROSSHAIRS; i++) { int32_t num, namelen; char *e; p = strstr(Q_SSetGetString(&crosshairs, i), "/"); p++; namelen = strlen(p); e = p + namelen - 4; if (!R_IsSupportedImageType(e)) continue; // filename must be chxxx if (strncmp(p, "ch", 2)) continue; if (namelen < 7 || namelen > 9) continue; if (!isNumeric(p[2])) continue; if (namelen >= 8 && !isNumeric(p[3])) continue; // ch100 is only valid 5-char name if (namelen == 9 && (p[2] != '1' || p[3] != '0' || p[4] != '0')) continue; num = namelen-4; p[num] = 0; //NULL; curCrosshair = p; if (!FS_ItemInList(curCrosshair, ncrosshairnames, crosshair_names)) { FS_InsertInList(crosshair_names, curCrosshair, ncrosshairnames, 1); //i=1 so none stays first! ncrosshairnames++; } p[num] = '.'; } Q_SSetFree(&crosshairs); // sort the list sortCrosshairs (crosshair_names, ncrosshairnames); numcrosshairs = ncrosshairnames; }