Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  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 or C preprocessor source giving offsets
  10.  * in "Uz_Globs" and "struct huft".  Used by Amiga and Human68k ports.
  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[] = "   IFND %s\n%-15s EQU     1\n   ENDC\n";
  27.     return printf(asm_flagdef, flagname, 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.