home *** CD-ROM | disk | FTP | other *** search
/ Doom I/II Collection / DM12.ISO / edit / dmtex09b / retex.c < prev    next >
Text File  |  1994-07-21  |  3KB  |  115 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <dos.h>
  4. #include <io.h>
  5. #include <sys\types.h>
  6. #include <sys\stat.h>
  7. #include <malloc.h>
  8. #include <fcntl.h>
  9.  
  10. int    fh;
  11. FILE    *fp;
  12. long    offset;
  13.  
  14. void error(char *errstr)
  15. {    printf(errstr);
  16.     exit(1);    }
  17.  
  18. main(argc,argv)
  19. int argc;
  20. char *argv[];
  21. {
  22.     char texname[10], patname[10];
  23.     char *pnames, *pnam;
  24.     char *texgarb, *texg;
  25.     long numtexs, numpats, dummy, i;
  26.     int numpat, scuz, dummi, j, k;
  27.     
  28.     if (argc != 4)
  29.         error("Usage: retex <textfile> <pnames> <textures>\n");
  30.  
  31.     texname[8]='\0';
  32.     patname[8]='\0';
  33.     
  34.     if (!(fp=fopen(argv[1], "rt")))
  35.         error("Can't open TEXTURES.TXT.\n");
  36.     if ((pnames=(char *)malloc(8192))==NULL)
  37.         error("Can't even allocate 8K!\n");
  38.     if ((texgarb=(char *)malloc(32768))==NULL)
  39.         error("Can't allocate 32K now.\n");
  40.     pnam=pnames+4;
  41.     numpats=0;
  42.     fscanf(fp, "%s", patname);
  43.     while (strcmp(patname, "PATCHES")) fscanf(fp, "%s", patname);
  44.     fscanf(fp, "%s", texname);
  45.     while (strcmp(texname, "TEXTURES")) {
  46.         numpats++;
  47.         for (k=0; k<8; k++) patname[k]='\0';
  48.         fscanf(fp, "%s %s", patname, texname);
  49.         for (k=0; k<8; k++) *pnam++=patname[k];
  50.         }
  51.     *((long *)pnames)=numpats;
  52.  
  53.     numtexs=0;
  54.     texg=texgarb+4;
  55.     offset=0;
  56.     fscanf(fp, "%s", texname);
  57.     while (strcmp(texname, "EOF")) {
  58.         numtexs++;
  59.         *((long *)texg)=offset;
  60.         texg+=4;
  61.         for (j=0; j<7; j++) fscanf(fp, "%d", &scuz);
  62.         offset+=22+10*scuz;
  63.         for (j=0; j<scuz; j++) fscanf(fp, "%*d %*d %*d %*s %*d %*d");
  64.         fscanf(fp, "%s", texname);
  65.         }
  66.     *((long *)texgarb)=numtexs;
  67.     offset=texg-texgarb;
  68.     texg=texgarb+4;
  69.     for (i=0; i<numtexs; i++) {
  70.         *((long *)texg)+=offset;
  71.         texg+=4;
  72.         }
  73.     fclose(fp);
  74.     fp=fopen("textures.txt", "rt");
  75.     fscanf(fp, "%s", texname);
  76.     while (strcmp(texname, "TEXTURES")) fscanf(fp, "%s", texname);
  77.     for (k=0; k<8; k++) texname[k]='\0';
  78.     fscanf(fp, "%s", texname);
  79.     while (strcmp(texname, "EOF")) {
  80.         for (k=0; k<8; k++) *(texg++)=texname[k];
  81.         for (j=0; j<7; j++) {
  82.             fscanf(fp, "%d", &scuz);
  83.             *((int *)texg)=scuz;
  84.             texg+=2;
  85.             }
  86.         for (j=0; j<scuz; j++) {
  87.             for (k=0; k<3; k++) {
  88.                 fscanf(fp, "%d", &dummi);
  89.                 *((int *)texg)=dummi;
  90.                 texg+=2;
  91.                 }
  92.             fscanf(fp, "%s", patname);
  93.             for (k=0; k<2; k++) {
  94.                 fscanf(fp, "%d", &dummi);
  95.                 *((int *)texg)=dummi;
  96.                 texg+=2;
  97.                 }
  98.             }
  99.         for (k=0; k<8; k++) texname[k]='\0';
  100.         fscanf(fp, "%s", texname);
  101.         }
  102.     fclose(fp);
  103.  
  104.     fh=open(argv[2], O_CREAT|O_BINARY|O_WRONLY, S_IREAD|S_IWRITE);
  105.     write(fh, pnames, 4+8*numpats);
  106.     close(fh);
  107.     fh=open(argv[3], O_CREAT|O_BINARY|O_WRONLY, S_IREAD|S_IWRITE);
  108.     write(fh, texgarb, texg-texgarb);
  109.     close(fh);
  110.  
  111.     free(pnames);
  112.     free(texgarb);
  113.     
  114.     exit(0);
  115. }