home *** CD-ROM | disk | FTP | other *** search
/ Qu-ake / Qu-ake.iso / qu_ke / editor / 008 / ADDPAK.C next >
Encoding:
C/C++ Source or Header  |  1996-07-05  |  2.3 KB  |  105 lines

  1. #include <stdio.h>
  2.  
  3. long fgetl(FILE *f)
  4. {
  5.    long t,
  6.     l;
  7.    l  = fgetc(f);
  8.    t  = fgetc(f);
  9.    l += t << 8;
  10.    t  = fgetc(f);
  11.    l += t << 16;
  12.    t  = fgetc(f);
  13.    l += t << 24;
  14.    return l;
  15. }
  16.  
  17. int fgeti(FILE *f)
  18. {
  19.    long t,
  20.     l;
  21.    l  = fgetc(f);
  22.    t  = fgetc(f);
  23.    l += t << 8;
  24.    return l;
  25. }
  26.  
  27. int main()
  28. {
  29.    char file1[101], file2[50];
  30.    char finalname[56];
  31.    FILE *fin, *fout, *ftemp;
  32.    long filesize, t, filesize2, diroffset;
  33.    long entry, fileoff;
  34.    int def;
  35.    for (t = 0; t < 101; t++)
  36.      file1[t] = 0;
  37.    printf("addpak for EdQuake [.map beta test file]\n");
  38.    printf("by Scott Mitting (smitting@netusa1.net)\n");
  39.    printf("free for public use. enjoy Quake\n");
  40.    printf("bsp file: ");
  41.    gets(file1);
  42.    printf("pak file: ");
  43.    gets(file2);
  44.    printf("%s+=%s\n",file2,file1);
  45.    fin = fopen(file1, "rb");
  46.    fout = fopen(file2, "rb+");
  47.    ftemp = fopen("bs23s232.123","wb+");
  48.    if (!fin) return 0;
  49.    if (!fout) return 0;
  50.    if (!ftemp) return 0;
  51.    //get filesize
  52.    fseek(fin,0,2);
  53.    filesize = ftell(fin);
  54.    fseek(fin,0,0);
  55.    fseek(fout,0,2);
  56.    filesize2 = ftell(fout);
  57.    fseek(fout,4,0);
  58.    fseek(ftemp,0,0);
  59.    printf("moving table data\n");
  60.    //move table data
  61.    fileoff = diroffset = fgetl(fout);
  62.    entry = fgetl(fout);
  63.    fseek(fout,diroffset,0);
  64.    for (t = 0; t < entry; t++)
  65.       fputc(fgetc(fout),ftemp);
  66.    fseek(fout,diroffset,0);
  67.    for (t = 0; t < filesize; t++)
  68.     fputc(fgetc(fin),fout);
  69.    printf("move old entries\n");
  70.    //move old entries back
  71.    fseek(ftemp,0,0);
  72.    diroffset = ftell(fout);
  73.    fseek(fout,4,0);
  74.    fwrite(&diroffset,4,1,fout);
  75.    entry+=64;
  76.    fwrite(&entry,4,1,fout);
  77.    fseek(fout,diroffset,0);
  78.    for (t = 0; t < entry - 64; t++)
  79.       fputc(fgetc(ftemp),fout);
  80.    printf("create entry\n");
  81.    //create entry
  82.    def = 50;
  83.    while (def > 0)
  84.    {
  85.       if (file1[def] == '\\') def=-def;
  86.      else def--;
  87.    }
  88.    def=-def;
  89.    def++;
  90.    finalname[0] = 'm';
  91.    finalname[1] = 'a';
  92.    finalname[2] = 'p';
  93.    finalname[3] = 's';
  94.    finalname[4] = '/';
  95.    for (t = 0; t < 51; t++)
  96.      finalname[t+5] = file1[t + def -1];
  97.    fwrite(finalname,56,1,fout);
  98.    fwrite(&fileoff,4,1,fout);
  99.    fwrite(&filesize,4,1,fout);
  100.    printf("ok\n");
  101.    fclose(fin);
  102.    fclose(fout);
  103.    return 0;
  104. }
  105.