2 Copyright (C) 1998 BJ Eirich (aka vecna)
\r
3 This program is free software; you can redistribute it and/or
\r
4 modify it under the terms of the GNU General Public License
\r
5 as published by the Free Software Foundation; either version 2
\r
6 of the License, or (at your option) any later version.
\r
7 This program is distributed in the hope that it will be useful,
\r
8 but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
9 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
\r
10 See the GNU General Public Lic
\r
11 See the GNU General Public License for more details.
\r
12 You should have received a copy of the GNU General Public License
\r
13 along with this program; if not, write to the Free Software
\r
14 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
\r
21 #define byte unsigned char
\r
23 // ================================= Data ====================================
\r
28 char *strbuf,*filebuf;
\r
29 int numfiles,curofs;
\r
30 char headertag[]="VRGPACK";
\r
34 unsigned char fname[84]; // pathname thingo
\r
35 int size; // size of the file
\r
36 int packofs; // where the file can be found in PACK
\r
37 int count; // internal (engine-runtime) use
\r
38 char extractable; // can UNPACK .. unpack it?
\r
39 char override; // should the engine override it w/
\r
43 filestruct filetbl[512];
\r
46 // ================================= Code ====================================
\r
48 void CreatePackHeader()
\r
51 fwrite(&headertag, 1, 7, pack);
\r
52 a=1; fwrite(&a, 1, 1, pack); // pack version 1
\r
53 fwrite(&numfiles, 1, 4, pack); // number of files in archive
\r
55 // Hmm.. that's it. What a boring header. :)
\r
58 void EncryptHeader()
\r
59 { byte lastvalue; //, precodebyte;
\r
61 ptr=(byte *) filetbl;
\r
65 while (ptr < (byte *) (int) filetbl + (int) 5120)
\r
73 void DecryptHeader()
\r
74 { byte lastvalue, precodebyte;
\r
76 ptr=(byte *) filetbl;
\r
80 while (ptr < (byte *) (int) filetbl + (int) 5120)
\r
84 lastvalue=precodebyte;
\r
89 void BuildFileTable()
\r
92 curofs=12+(numfiles*100);
\r
93 memset(filetbl, 0, sizeof filetbl);
\r
95 for (i=0; i<numfiles; i++)
\r
97 fscanf(list,"%s",strbuf);
\r
98 if (!(src=fopen(strbuf,"rb")))
\r
100 printf("Could not open included file %s. \n",strbuf);
\r
103 memcpy(&filetbl[i].fname,strbuf,strlen(strbuf));
\r
105 filetbl[i].packofs=curofs;
\r
106 filetbl[i].size=ftell(src);
\r
107 curofs+=filetbl[i].size;
\r
108 fscanf(list,"%s",strbuf); filetbl[i].extractable=atoi(strbuf);
\r
109 fscanf(list,"%s",strbuf); filetbl[i].override=atoi(strbuf);
\r
113 fwrite(&filetbl, numfiles, 100, pack);
\r
120 for (i=0; i<numfiles; i++)
\r
122 filebuf=(char *) malloc(filetbl[i].size);
\r
123 src=fopen(filetbl[i].fname, "rb");
\r
124 printf("Packing file %s...\n", filetbl[i].fname);
\r
125 fread(filebuf, 1, filetbl[i].size, src);
\r
126 fwrite(filebuf, 1, filetbl[i].size, pack);
\r
133 int main(int argc, char *argv[])
\r
135 printf("PACK v.0.1 Copyright (C)1997 BJ Eirich \n");
\r
138 printf("USAGE: PACK <makefile> \n");
\r
142 if (!(list=fopen(argv[1],"r")))
\r
144 printf("Unable to open file %s. \n",argv[1]);
\r
148 strbuf=(char *) malloc(100);
\r
149 fscanf(list,"%s",strbuf);
\r
151 if (!(pack=fopen(strbuf,"wb")))
\r
153 printf("Unable to create file %s. \n",strbuf);
\r
156 fscanf(list,"%d",&numfiles);
\r
158 CreatePackHeader();
\r