// "Build Engine & Tools" Copyright (c) 1993-1997 Ken Silverman // Ken Silverman's official web site: "http://www.advsys.net/ken" // See the included license file "BUILDLIC.TXT" for license info. #include #include #include #include #include #include #include #include #define MAXFILES 4096 static char buf[65536]; static long numfiles; static char filespec[MAXFILES][128], filelist[MAXFILES][16]; static long fileleng[MAXFILES]; main(short argc, char **argv) { long i, j, k, l, fil, fil2; char stuffile[16], filename[128]; if (argc < 3) { printf("KGROUP [grouped file][@file or filespec...] by Kenneth Silverman\n"); printf(" This program collects many files into 1 big uncompressed file called a\n"); printf(" group file\n"); printf(" Ex: kgroup stuff.dat *.art *.map *.k?? palette.dat tables.dat\n"); printf(" (stuff.dat is the group file, the rest are the files to add)\n"); exit(0); } numfiles = 0; for(i=argc-1;i>1;i--) { strcpy(filename,argv[i]); if (filename[0] == '@') { if ((fil = open(&filename[1],O_BINARY|O_RDONLY,S_IREAD)) != -1) { l = read(fil,buf,65536); j = 0; while ((j < l) && (buf[j] <= 32)) j++; while (j < l) { k = j; while ((k < l) && (buf[k] > 32)) k++; buf[k] = 0; findfiles(&buf[j]); j = k+1; while ((j < l) && (buf[j] <= 32)) j++; } close(fil); } } else findfiles(filename); } strcpy(stuffile,argv[1]); if ((fil = open(stuffile,O_BINARY|O_TRUNC|O_CREAT|O_WRONLY,S_IWRITE)) == -1) { printf("Error: %s could not be opened\n",stuffile); exit(0); } strcpy(filename,"KenSilverman"); write(fil,filename,12); write(fil,&numfiles,4); write(fil,filelist,numfiles<<4); for(i=0;i 0)) daspeclen--; if (daspeclen > 0) daspec[daspeclen++] = '\\'; if (_dos_findfirst(dafilespec,_A_NORMAL,&fileinfo) != 0) return; do { strcpy(&filelist[numfiles][0],fileinfo.name); fileleng[numfiles] = fileinfo.size; filelist[numfiles][12] = (char)(fileleng[numfiles]&255); filelist[numfiles][13] = (char)((fileleng[numfiles]>>8)&255); filelist[numfiles][14] = (char)((fileleng[numfiles]>>16)&255); filelist[numfiles][15] = (char)((fileleng[numfiles]>>24)&255); strcpy(&filespec[numfiles][0],daspec); strcpy(&filespec[numfiles][daspeclen],fileinfo.name); numfiles++; if (numfiles > MAXFILES) { printf("FATAL ERROR: TOO MANY FILES SELECTED! (MAX is 4096)\n"); exit(0); } } while (_dos_findnext(&fileinfo) == 0); }