void *internal;
} writer_t;
-/* ---------------------------- file writer ------------------------------- */
-
-typedef struct
-{
- FILE*fi;
-} filewrite_t;
-static int writer_filewrite_write(writer_t*w, void* data, int len)
-{
- filewrite_t * fw= (filewrite_t*)w->internal;
- return fwrite(data, len, 1, fw->fi);
-}
-static void writer_filewrite_finish(writer_t*w)
-{
- filewrite_t *mr = (filewrite_t*)w->internal;
- fclose(mr->fi);
- free(w->internal);
- memset(w, 0, sizeof(writer_t));
-}
-writer_t*writer_init_filewriter(char*filename)
-{
- writer_t*w = malloc(sizeof(writer_t));
- FILE*fi = fopen(filename, "wb");
- filewrite_t *mr = (filewrite_t *)malloc(sizeof(filewrite_t));
- mr->fi = fi;
- memset(w, 0, sizeof(writer_t));
- w->write = writer_filewrite_write;
- w->finish = writer_filewrite_finish;
- w->internal = mr;
- return w;
-}
-
/* ---------------------------- include file filter ------------------------------- */
typedef struct _ifwrite
{
struct zlibdeflate_t*z = (struct zlibdeflate_t*)writer->internal;
int ret;
-
if(!z) {
fprintf(stderr, "zlib not initialized!\n");
return 0;
{
int t;
char buf[320];
- int num = 0;
- int fullsize = 0;
- for(t=1;t<argn;t++)
- {
- if(argv[t][0]!='-')
- {
- FILE*fi=fopen(argv[t],"rb");
- if(fi) {
- fseek(fi,0,SEEK_END);
- long l=ftell(fi);
- fclose(fi);
- fullsize += l;
- num++;
- }
- }
- }
-
-
-#ifdef ZLIB
writer_t*include_writer = writer_init_includewriter("crnfiles.c");
writer_t*zwriter = writer_init_zwriter(include_writer);
-#else //LZMA
- unlink("crnfiles.dat");
- unlink("crnfiles.7z");
- unlink("crnfiles.c");
- writer_t*zwriter = writer_init_filewriter("crnfiles.dat");
-#endif
- unsigned char n1=num;
- unsigned char n2=num>>8;
- unsigned char n3=num>>16;
- unsigned char n4=num>>24;
- zwriter->write(zwriter,&n1,1);
- zwriter->write(zwriter,&n2,1);
- zwriter->write(zwriter,&n3,1);
- zwriter->write(zwriter,&n4,1);
qsort(argv+1, argn-1, sizeof(argv[0]), compare_filenames);
char*id_end = "END";
zwriter->write(zwriter,id_end,3);
zwriter->finish(zwriter);
-
-#ifndef ZLIB
- if(system("do_lzma e crnfiles.dat crnfiles.7z")&0xff00) {
- perror("do_lzma");
- exit(1);
- }
- FILE*fi = fopen("crnfiles.7z", "rb");
- if(!fi) {
- perror("crnfiles.7z");
- exit(1);
- }
- writer_t*w = writer_init_includewriter("crnfiles.c");
- while(!feof(fi)) {
- char buf[4096];
- int len = fread(buf,1,4096,fi);
- if(!len)
- break;
- w->write(w, buf, len);
- }
- w->finish(w);
- fclose(fi);
- if(unlink("crnfiles.dat")) {
- perror("crnfiles.dat");
- exit(1);
- }
- if(unlink("crnfiles.7z")) {
- perror("crnfiles.7z");
- exit(1);
- }
-#endif
-
- fi = fopen("crnfiles.c", "ab+");
- fprintf(fi, "\nint crn_decompressed_size=%d;\n", fullsize);
- fclose(fi);
-
return 0;
}