Advertisement
Guest User

Untitled

a guest
Jun 22nd, 2017
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.70 KB | None | 0 0
  1. //
  2. // W_sortLevels
  3. //
  4. // Static qsort callback for W_FindAllMapsInLevelWad
  5. //
  6. static int W_sortLevels(const void *first, const void *second)
  7. {
  8.    wadlevel_t *firstLevel  = (wadlevel_t *)first;
  9.    wadlevel_t *secondLevel = (wadlevel_t *)second;
  10.  
  11.    return strncasecmp(firstLevel->header, secondLevel->header, 9);
  12. }
  13.  
  14. //
  15. // W_FindAllMapsInLevelWad
  16. //
  17. // haleyjd 10/23/10: Finds all valid maps in a wad directory and returns them
  18. // as a sorted set of wadlevel_t's.
  19. //
  20. wadlevel_t *W_FindAllMapsInLevelWad(waddir_t *dir)
  21. {
  22.    int i, format;
  23.    wadlevel_t *levels;
  24.    int numlevels;
  25.    int numlevelsalloc;
  26.  
  27.    // start out with a small set of levels
  28.    numlevels = 0;
  29.    numlevelsalloc = 8;
  30.    levels = calloc(numlevelsalloc, sizeof(wadlevel_t));
  31.  
  32.    // find all the lumps
  33.    for(i = 0; i < dir->numlumps; i++)
  34.    {
  35.       if((format = P_CheckLevel(dir, i)) != LEVEL_FORMAT_INVALID)
  36.       {
  37.          // grow the array if needed, leaving one at the end
  38.          if(numlevels + 1 >= numlevelsalloc)
  39.          {
  40.             numlevelsalloc *= 2;
  41.             levels = realloc(levels, numlevelsalloc * sizeof(wadlevel_t));
  42.          }
  43.          memset(&levels[numlevels], 0, sizeof(wadlevel_t));
  44.          levels[numlevels].dir = dir;
  45.          levels[numlevels].lumpnum = i;
  46.          strncpy(levels[numlevels].header, dir->lumpinfo[i]->name, 9);
  47.          ++numlevels;
  48.  
  49.          // skip past the level's directory entries
  50.          i += (format == LEVEL_FORMAT_HEXEN ? 11 : 10);
  51.       }
  52.    }
  53.  
  54.    // sort the levels
  55.    qsort(levels, numlevels, sizeof(wadlevel_t), W_sortLevels);
  56.  
  57.    // set the entry at numlevels to all zeroes
  58.    memset(&levels[numlevels], 0, sizeof(wadlevel_t));
  59.  
  60.    return levels;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement