1 /* 2 Copyright (c) 1990-2002 Info-ZIP. All rights reserved. 3 4 See the accompanying file LICENSE, version 2000-Apr-09 or later 5 (the contents of which are also included in unzip.h) for terms of use. 6 If, for some reason, all these files are missing, the Info-ZIP license 7 also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html 8 */ 9 /* Write out a fragment of assembly source giving offsets in "Uz_Globs" 10 * and "struct huft": 11 */ 12 13 #define UNZIP_INTERNAL 14 #include "unzip.h" 15 #include "crypt.h" 16 17 #ifndef REENTRANT 18 Uz_Globs G; 19 #endif 20 21 static int asm_setflag(const char *flagname); 22 static int ccp_setflag(const char *flagname); 23 24 static int asm_setflag(const char *flagname) 25 { 26 static const char asm_flagdef[] = "%-15s EQU 1\n"; 27 return printf(asm_flagdef, flagname); 28 } 29 static int ccp_setflag(const char *flagname) 30 { 31 static const char ccp_flagdef[] = "#ifndef %s\n# define %s\n#endif\n"; 32 return printf(ccp_flagdef, flagname, flagname); 33 } 34 35 int main(argc, argv) 36 int argc; 37 char **argv; 38 { 39 #ifdef REENTRANT 40 Uz_Globs *pG = NULL; 41 #endif 42 struct huft *t = NULL; 43 static const char asm_offsdef[] = "%-15s EQU %lu\n"; 44 static const char ccp_offsdef[] = "#define %-15s %lu\n"; 45 46 const char *out_format; 47 int (*set_flag)(const char *flagname); 48 int ccp_select = 0; 49 50 if (argc > 1 && argv[1] != NULL && !strcmp(argv[1], "-ccp")) 51 ccp_select = 1; 52 53 if (ccp_select) { 54 out_format = ccp_offsdef; 55 set_flag = ccp_setflag; 56 } else { 57 out_format = asm_offsdef; 58 set_flag = asm_setflag; 59 } 60 61 printf(out_format, "h_e", (ulg)&t->e - (ulg)t); 62 printf(out_format, "h_b", (ulg)&t->b - (ulg)t); 63 printf(out_format, "h_v_n", (ulg)&t->v.n - (ulg)t); 64 printf(out_format, "h_v_t", (ulg)&t->v.t - (ulg)t); 65 printf(out_format, "SIZEOF_huft", (ulg)sizeof(struct huft)); 66 67 printf(out_format, "bb", (ulg)&G.bb - (ulg)&G); 68 printf(out_format, "bk", (ulg)&G.bk - (ulg)&G); 69 printf(out_format, "wp", (ulg)&G.wp - (ulg)&G); 70 #ifdef FUNZIP 71 printf(out_format, "in", (ulg)&G.in - (ulg)&G); 72 #else 73 printf(out_format, "incnt", (ulg)&G.incnt - (ulg)&G); 74 printf(out_format, "inptr", (ulg)&G.inptr - (ulg)&G); 75 printf(out_format, "csize", (ulg)&G.csize - (ulg)&G); 76 printf(out_format, "mem_mode", (ulg)&G.mem_mode - (ulg)&G); 77 #endif 78 printf(out_format, "redirslide", (ulg)&redirSlide - (ulg)&G); 79 printf(out_format, "SIZEOF_slide", (ulg)sizeof(redirSlide)); 80 #if (defined(DLL) && !defined(NO_SLIDE_REDIR)) 81 printf(out_format, "_wsize", (ulg)&G._wsize - (ulg)&G); 82 #endif /* DLL && !NO_SLIDE_REDIR */ 83 printf(out_format, "CRYPT", (ulg)CRYPT); 84 #ifdef FUNZIP 85 (*set_flag)("FUNZIP"); 86 #endif 87 #ifdef SFX 88 (*set_flag)("SFX"); 89 #endif 90 #ifdef REENTRANT 91 (*set_flag)("REENTRANT"); 92 #endif 93 #ifdef DLL 94 (*set_flag)("DLL"); 95 # ifdef NO_SLIDE_REDIR 96 (*set_flag)("NO_SLIDE_REDIR"); 97 # endif 98 #endif 99 #ifdef USE_DEFLATE64 100 (*set_flag)("USE_DEFLATE64"); 101 #endif 102 103 return 0; 104 } 105