home *** CD-ROM | disk | FTP | other *** search
/ Toolkit for DOOM / DOOMTOOL.ISO / editors / wadgc2.zip / WADDIR.C < prev    next >
C/C++ Source or Header  |  1994-07-31  |  2KB  |  72 lines

  1. /* WADDIR.C list the directory of a WAD file */
  2. /* Stefan Gustavson 1994 */
  3.  
  4. #include <stdio.h>
  5.  
  6.  
  7. int getshort(filep)
  8.      FILE *filep;
  9. {
  10.   short s;
  11.   s = getc(filep) & 0xff;
  12.   s += (getc(filep) & 0xff)<<8;
  13.   return(s);
  14. }
  15.  
  16. int getlong(filep)
  17.      FILE *filep;
  18. {
  19.   int l;
  20.   l = getc(filep) & 0xff;
  21.   l += (getc(filep) & 0xff) <<8;
  22.   l += (getc(filep) & 0xff) <<16;
  23.   l += (getc(filep) & 0xff) <<24;
  24.   return(l);
  25. }
  26.  
  27.  
  28. main(argc, argv)
  29.      int argc;
  30.      char *argv[];
  31. {
  32.   FILE *wadfile;
  33.   char identifier[4];
  34.   int i, numentries, dirstart, entrypos, entrysize;
  35.   char entryname[8];
  36.   
  37.   if (argc != 2)
  38.     {
  39.       fprintf(stderr, "Usage: %s wadfile\n", argv[0]);
  40.       exit(-1);
  41.     }
  42.   wadfile = fopen(argv[1], "r");
  43.   if(wadfile == NULL)
  44.     {
  45.       fprintf(stderr, "File %s not found.\n", argv[1]);
  46.       exit(-1);
  47.     }
  48.   fread(identifier, 4, 1, wadfile);
  49.   if(strncmp("PWAD", identifier, 4) & strncmp("IWAD", identifier, 4))
  50.     {
  51.       fprintf(stderr, "File %s is not a WAD file.\n", argv[1]);
  52.       exit(-1);
  53.     }
  54.   numentries = getlong(wadfile);
  55.   dirstart = getlong(wadfile);
  56.   if(fseek(wadfile, dirstart, 0))
  57.     {
  58.       fprintf(stderr, "File seek error.\n");
  59.       exit(-1);
  60.     }
  61.  for(i=0; i<numentries; i++)
  62.    {
  63.      entrypos = getlong(wadfile);
  64.      entrysize = getlong(wadfile);
  65.      fread(entryname, 8, 1, wadfile);
  66.      printf("%07d %5d %8s\n", entrypos, entrysize, entryname);
  67.    }
  68.   printf("\n");
  69.   fclose(wadfile);
  70. }
  71.  
  72.