home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deathday Collection
/
dday.bin
/
edit
/
dmtex09b
/
retex.c
< prev
next >
Wrap
Text File
|
1994-07-21
|
3KB
|
115 lines
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include <io.h>
#include <sys\types.h>
#include <sys\stat.h>
#include <malloc.h>
#include <fcntl.h>
int fh;
FILE *fp;
long offset;
void error(char *errstr)
{ printf(errstr);
exit(1); }
main(argc,argv)
int argc;
char *argv[];
{
char texname[10], patname[10];
char *pnames, *pnam;
char *texgarb, *texg;
long numtexs, numpats, dummy, i;
int numpat, scuz, dummi, j, k;
if (argc != 4)
error("Usage: retex <textfile> <pnames> <textures>\n");
texname[8]='\0';
patname[8]='\0';
if (!(fp=fopen(argv[1], "rt")))
error("Can't open TEXTURES.TXT.\n");
if ((pnames=(char *)malloc(8192))==NULL)
error("Can't even allocate 8K!\n");
if ((texgarb=(char *)malloc(32768))==NULL)
error("Can't allocate 32K now.\n");
pnam=pnames+4;
numpats=0;
fscanf(fp, "%s", patname);
while (strcmp(patname, "PATCHES")) fscanf(fp, "%s", patname);
fscanf(fp, "%s", texname);
while (strcmp(texname, "TEXTURES")) {
numpats++;
for (k=0; k<8; k++) patname[k]='\0';
fscanf(fp, "%s %s", patname, texname);
for (k=0; k<8; k++) *pnam++=patname[k];
}
*((long *)pnames)=numpats;
numtexs=0;
texg=texgarb+4;
offset=0;
fscanf(fp, "%s", texname);
while (strcmp(texname, "EOF")) {
numtexs++;
*((long *)texg)=offset;
texg+=4;
for (j=0; j<7; j++) fscanf(fp, "%d", &scuz);
offset+=22+10*scuz;
for (j=0; j<scuz; j++) fscanf(fp, "%*d %*d %*d %*s %*d %*d");
fscanf(fp, "%s", texname);
}
*((long *)texgarb)=numtexs;
offset=texg-texgarb;
texg=texgarb+4;
for (i=0; i<numtexs; i++) {
*((long *)texg)+=offset;
texg+=4;
}
fclose(fp);
fp=fopen("textures.txt", "rt");
fscanf(fp, "%s", texname);
while (strcmp(texname, "TEXTURES")) fscanf(fp, "%s", texname);
for (k=0; k<8; k++) texname[k]='\0';
fscanf(fp, "%s", texname);
while (strcmp(texname, "EOF")) {
for (k=0; k<8; k++) *(texg++)=texname[k];
for (j=0; j<7; j++) {
fscanf(fp, "%d", &scuz);
*((int *)texg)=scuz;
texg+=2;
}
for (j=0; j<scuz; j++) {
for (k=0; k<3; k++) {
fscanf(fp, "%d", &dummi);
*((int *)texg)=dummi;
texg+=2;
}
fscanf(fp, "%s", patname);
for (k=0; k<2; k++) {
fscanf(fp, "%d", &dummi);
*((int *)texg)=dummi;
texg+=2;
}
}
for (k=0; k<8; k++) texname[k]='\0';
fscanf(fp, "%s", texname);
}
fclose(fp);
fh=open(argv[2], O_CREAT|O_BINARY|O_WRONLY, S_IREAD|S_IWRITE);
write(fh, pnames, 4+8*numpats);
close(fh);
fh=open(argv[3], O_CREAT|O_BINARY|O_WRONLY, S_IREAD|S_IWRITE);
write(fh, texgarb, texg-texgarb);
close(fh);
free(pnames);
free(texgarb);
exit(0);
}