Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // W_sortLevels
- //
- // Static qsort callback for W_FindAllMapsInLevelWad
- //
- static int W_sortLevels(const void *first, const void *second)
- {
- wadlevel_t *firstLevel = (wadlevel_t *)first;
- wadlevel_t *secondLevel = (wadlevel_t *)second;
- return strncasecmp(firstLevel->header, secondLevel->header, 9);
- }
- //
- // W_FindAllMapsInLevelWad
- //
- // haleyjd 10/23/10: Finds all valid maps in a wad directory and returns them
- // as a sorted set of wadlevel_t's.
- //
- wadlevel_t *W_FindAllMapsInLevelWad(waddir_t *dir)
- {
- int i, format;
- wadlevel_t *levels;
- int numlevels;
- int numlevelsalloc;
- // start out with a small set of levels
- numlevels = 0;
- numlevelsalloc = 8;
- levels = calloc(numlevelsalloc, sizeof(wadlevel_t));
- // find all the lumps
- for(i = 0; i < dir->numlumps; i++)
- {
- if((format = P_CheckLevel(dir, i)) != LEVEL_FORMAT_INVALID)
- {
- // grow the array if needed, leaving one at the end
- if(numlevels + 1 >= numlevelsalloc)
- {
- numlevelsalloc *= 2;
- levels = realloc(levels, numlevelsalloc * sizeof(wadlevel_t));
- }
- memset(&levels[numlevels], 0, sizeof(wadlevel_t));
- levels[numlevels].dir = dir;
- levels[numlevels].lumpnum = i;
- strncpy(levels[numlevels].header, dir->lumpinfo[i]->name, 9);
- ++numlevels;
- // skip past the level's directory entries
- i += (format == LEVEL_FORMAT_HEXEN ? 11 : 10);
- }
- }
- // sort the levels
- qsort(levels, numlevels, sizeof(wadlevel_t), W_sortLevels);
- // set the entry at numlevels to all zeroes
- memset(&levels[numlevels], 0, sizeof(wadlevel_t));
- return levels;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement