home *** CD-ROM | disk | FTP | other *** search
/ Doom 2 Explosion / Doom2Explosion.bin / doom2exp / programs / wadgc2 / wadext.c < prev    next >
C/C++ Source or Header  |  1994-07-31  |  2KB  |  91 lines

  1. /* WADEXT.C extract a lump in raw format from 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, *rawfile;
  33.   char identifier[4];
  34.   int i, j, numentries, dirstart, entrypos, entrysize;
  35.   char entryname[8];
  36.   
  37.   if (argc != 4)
  38.     {
  39.       fprintf(stderr, "Usage: %s wadfile entryname datafile\n", argv[0]);
  40.       exit(-1);
  41.     }
  42.  
  43.   rawfile = fopen(argv[3], "w");
  44.   if(rawfile == NULL)
  45.     {
  46.       fprintf(stderr, "Unable to open output file %s.\n", argv[3]);
  47.       exit(-1);
  48.     }
  49.   
  50.   wadfile = fopen(argv[1], "r");
  51.   if(wadfile == NULL)
  52.     {
  53.       fprintf(stderr, "File %s not found.\n", argv[1]);
  54.       exit(-1);
  55.     }
  56.   fread(identifier, 4, 1, wadfile);
  57.   if(strncmp("PWAD", identifier, 4) & strncmp("IWAD", identifier, 4))
  58.     {
  59.       fprintf(stderr, "File %s is not a WAD file.\n", argv[1]);
  60.       exit(-1);
  61.     }
  62.   numentries = getlong(wadfile);
  63.   dirstart = getlong(wadfile);
  64.   if(fseek(wadfile, dirstart, 0))
  65.     {
  66.       fprintf(stderr, "File seek error.\n");
  67.       exit(-1);
  68.     }
  69.  for(i=0; i<numentries; i++)
  70.    {
  71.      entrypos = getlong(wadfile);
  72.      entrysize = getlong(wadfile);
  73.      fread(entryname, 8, 1, wadfile);
  74.      if(!strncmp(entryname, argv[2], 8))
  75.        {
  76.      printf("Extracting entry %s (%d bytes)... ", entryname, entrysize);
  77.      fseek(wadfile, entrypos, 0);
  78.      for(j=0; j<entrysize; j++)
  79.        putc(getc(wadfile), rawfile);
  80.      printf("Done.\n");
  81.      fclose(wadfile);
  82.      fclose(rawfile);
  83.      exit(0);
  84.        }
  85.    }
  86.   printf("Entry %s not found!\n", argv[2]);
  87.   fclose(wadfile);
  88.   fclose(rawfile);
  89. }
  90.  
  91.