home *** CD-ROM | disk | FTP | other *** search
/ Phenomenon / Phenomenon.iso / quake / utils / map / edq050 / code / intpak.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-07-06  |  1.3 KB  |  66 lines

  1. //internal PAK functions (.dat, .edq)
  2.  
  3. #include <stdio.h>
  4. #include "svgacc.h"
  5. #include "input.h"
  6. #include "pak.h"
  7. #include "grfx.h"
  8. #include "intpak.h"
  9.  
  10. pak_t      dat;
  11. pakentry_t datentry;
  12. config_t   config;
  13.  
  14. void opendat()
  15. {
  16.    dat.p = fopen("edquake.dat","rb+");
  17.    if (!dat.p)
  18.    {
  19.       datnew();
  20.       dat.p = fopen("edquake.dat","rb+");
  21.       if (!dat.p) return;
  22.    }
  23.    fseek(dat.p,4,0);
  24.    dat.tableloc = fgetl(dat.p);
  25.    fseek(dat.p,0,2);
  26.    dat.tablelen = (ftell(dat.p) - dat.tableloc) / 64;
  27.    fseek(dat.p,0,0);
  28. }
  29.  
  30. void datnew()
  31. {
  32.    FILE *out;
  33.    long t;
  34.    out = fopen("edquake.dat","wb");
  35.    if (!out) return; //no disk space?
  36.    fwrite("PACK",4,1,out);
  37.    t = 12;
  38.    fwrite(&t,4,1,out);
  39.    t = 0;
  40.    fwrite(&t,4,1,out);
  41.    fclose(out);
  42. }
  43.  
  44. void datadd(char *filename)
  45. {
  46.    FILE *in, *temp;
  47.    char *tempname;
  48.    long size, pos;
  49.    in = fopen(filename, "rb");
  50.    if (!in) return;
  51.    size = getfilesize(in);
  52.    tempname = mktemp("TXXXXXX");
  53.    temp = fopen(tempname,"wb+");
  54.    inputbox(299,100,501,160,"Saving...");
  55.      drwstring(SET,BLACK,LTGRAY,"Moving Directory...",308,123);
  56.    fseek(dat.p,dat.tableloc,0);
  57.    for (pos = 0; pos < dat.tablelen * 64; pos++)
  58.    {
  59.       fputc(fgetc(dat.p),temp);
  60.       statusbar(305,140,495,155,pos,size);
  61.    }
  62.    fclose(in);
  63.    fclose(temp);
  64.    remove(tempname);
  65. }
  66.