-/* mkarchive.c
-
- Part of the rfx installer (Main program).
-
- Copyright (c) 2004-2008 Matthias Kramm <kramm@quiss.org>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
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);
else if(strstr(argv[t],".jpeg")) id="PIC";
else if(strstr(argv[t],".jpg")) id="PIC";
else if(strstr(argv[t],".tif")) id="PIC";
- else if(strstr(argv[t],".ico")) id="PIC";
else if(strstr(argv[t],".c")) id="SRC";
else if(strstr(argv[t],".cc")) id="SRC";
else if(strstr(argv[t],".cpp")) id="SRC";
else if(strstr(argv[t],".afm")) id="FON";
else if(strstr(argv[t],".1")) id="DOC";
else if(strstr(argv[t],".doc")) id="DOC";
- else if(strstr(argv[t],".txt")) id="TXT";
else if(strstr(argv[t],".hlp")) id="DOC";
else if(strstr(argv[t],".dll")) id="DLL";
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;
}