home *** CD-ROM | disk | FTP | other *** search
/ Amiga Computer Studio 1997 July & August / Amiga_Computer_studio_07-08-1998.7z / Amiga_Computer_studio_07-08-1998.iso / games / quake / qmapwos / qrip.c < prev    next >
C/C++ Source or Header  |  1998-06-04  |  1KB  |  48 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int    LittleLong (int l)
  5. {
  6.    unsigned char    b1,b2,b3,b4;
  7.  
  8.    b1 = l&255;
  9.    b2 = (l>>8)&255;
  10.    b3 = (l>>16)&255;
  11.    b4 = (l>>24)&255;
  12.  
  13.    return ((int)b1<<24) + ((int)b2<<16) + ((int)b3<<8) + b4;
  14. }
  15.  
  16. int main()
  17. {
  18.         FILE *f1,*f2;
  19.         int *mem,*mem2;
  20.         int header[3];
  21.         int hoffset,hsize;
  22.         int i;
  23.         f1=fopen("PAK0.PAK","rb");
  24.         fread(header,1,12,f1);
  25.         hoffset=LittleLong(header[1]);
  26.         hsize=LittleLong(header[2]);
  27.         mem=malloc(hsize);
  28.         printf("%x\n",mem);
  29.         fseek(f1,hoffset,SEEK_SET);
  30.         fread(mem,1,hsize,f1);
  31.         for(i=0;i<hsize/64;i++)
  32.         {
  33.                 int offset=LittleLong(*(int*)(mem+64*i+56));
  34.                 int size=LittleLong(*(int*)(mem+64*i+60));
  35.                 printf("%s  ",mem+64*i);
  36.                 printf("%d\n",size);
  37.                 f2=fopen((char *)mem+64*i,"wb");
  38.                 mem2=malloc(size);
  39.                 fseek(f1,offset,SEEK_SET);
  40.                 fread(mem2,1,size,f1);
  41.                 fwrite(mem2,1,size,f2);
  42.                 fclose(f2);
  43.                 free(mem2);
  44.         }
  45.         free(mem);
  46.         fclose(f1);
  47. }
  48.