Subversion Repositories Kolibri OS

Rev

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

  1. /*
  2.   Copyright (c) 1990-2008 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. /*---------------------------------------------------------------------------
  10.     MS-DOS specific configuration section:
  11.   ---------------------------------------------------------------------------*/
  12.  
  13. #ifndef __doscfg_h
  14. #define __doscfg_h
  15.  
  16. #include <dos.h>           /* for REGS macro (TC) or _dos_setftime (MSC) */
  17.  
  18. #ifdef __TURBOC__          /* includes Power C */
  19. #  include <sys/timeb.h>   /* for structure ftime */
  20. #  ifndef __BORLANDC__     /* there appears to be a bug (?) in Borland's */
  21. #    include <mem.h>       /*  MEM.H related to __STDC__ and far poin-   */
  22. #  endif                   /*  ters. (dpk)  [mem.h included for memcpy]  */
  23. #endif
  24.  
  25. #ifdef WINDLL
  26. #  if (defined(MSC) || defined(__WATCOMC__))
  27. #    include <sys/utime.h>
  28. #  else /* !(MSC || __WATCOMC__) ==> may be BORLANDC, or GNU environment */
  29. #    include <utime.h>
  30. #  endif /* ?(MSC || __WATCOMC__) */
  31. #endif
  32.  
  33. #ifdef __WATCOMC__
  34. #  define DOS_STAT_BANDAID
  35.  
  36. #  ifdef __386__
  37. #    ifndef WATCOMC_386
  38. #      define WATCOMC_386
  39. #    endif
  40. #    define __32BIT__
  41. #    undef far
  42. #    define far
  43. #    undef near
  44. #    define near
  45.  
  46. /* Get asm routines to link properly without using "__cdecl": */
  47. #    ifndef USE_ZLIB
  48. #      pragma aux crc32         "_*" parm caller [] value [eax] modify [eax]
  49. #      pragma aux get_crc_table "_*" parm caller [] value [eax] \
  50.                                       modify [eax ecx edx]
  51. #    endif /* !USE_ZLIB */
  52. #  else /* !__386__ */
  53. #    ifndef USE_ZLIB
  54. #      pragma aux crc32         "_*" parm caller [] value [ax dx] \
  55.                                       modify [ax cx dx bx]
  56. #      pragma aux get_crc_table "_*" parm caller [] value [ax] \
  57.                                       modify [ax cx dx bx]
  58. #    endif /* !USE_ZLIB */
  59. #  endif /* ?__386__ */
  60. #endif /* __WATCOMC__ */
  61.  
  62. #ifdef __EMX__
  63. #  ifndef __32BIT__
  64. #    define __32BIT__
  65. #  endif
  66. #  define far
  67. #  ifndef HAVE_MKTIME
  68. #    define HAVE_MKTIME
  69. #  endif
  70. #endif
  71.  
  72. #if defined(__GO32__) || defined(__DJGPP__)    /* MS-DOS compiler, not OS/2 */
  73. #  ifndef __32BIT__
  74. #    define __32BIT__
  75. #  endif
  76. #  ifndef __GO32__
  77. #    define __GO32__
  78. #  endif
  79. #  ifndef HAVE_MKTIME
  80. #    define HAVE_MKTIME
  81. #  endif
  82. #  include <sys/timeb.h>           /* for structure ftime and ftime() */
  83. #  if (defined(__DJGPP__) && (__DJGPP__ > 1))
  84. #    include <unistd.h>            /* for prototypes for read/write etc. */
  85. #    include <dir.h>               /* for FA_LABEL */
  86. #    if ((__DJGPP__ == 2) && (__DJGPP_MINOR__ == 0))
  87. #      include <libc/dosio.h>      /* for _USE_LFN, djgpp 2.0 only */
  88. #    endif
  89. #    define USE_LFN _USE_LFN       /* runtime test:  support long filenames? */
  90. #  else
  91.      int setmode(int, int);        /* not in older djgpp's include files */
  92. #  endif
  93. #endif
  94.  
  95. #ifndef __32BIT__
  96. #  define __16BIT__
  97. #endif
  98.  
  99. #if (defined(M_I86CM) || defined(M_I86LM)) || defined(WINDLL)
  100. #  define MED_MEM
  101. #endif
  102. #if (defined(__COMPACT__) || defined(__LARGE__) || defined(__HUGE__))
  103. #  define MED_MEM
  104. #endif
  105. #ifdef __16BIT__
  106. #  ifndef MED_MEM
  107. #    define SMALL_MEM
  108. #  endif
  109. #endif
  110.  
  111. #define EXE_EXTENSION ".exe"  /* OS/2 has GetLoadPath() function instead */
  112.  
  113. #ifdef __16BIT__
  114. #  if defined(MSC) || defined(__WATCOMC__)
  115. #    include <malloc.h>
  116. #    define nearmalloc _nmalloc
  117. #    define nearfree _nfree
  118. #  endif
  119. #  if defined(__TURBOC__) && defined(DYNALLOC_CRCTAB)
  120. #    if defined(__COMPACT__) || defined(__LARGE__) || defined(__HUGE__)
  121. #      undef DYNALLOC_CRCTAB
  122. #    endif
  123. #  endif
  124. #  ifndef nearmalloc
  125. #    define nearmalloc malloc
  126. #    define nearfree free
  127. #  endif
  128. #  if defined(DEBUG) && defined(MSC) && (!defined(_MSC_VER) || _MSC_VER < 600)
  129.      /* for MSC 5.1, prevent macro expansion space overflow in DEBUG mode */
  130. #    define NO_DEBUG_IN_MACROS
  131. #  endif
  132. #  ifdef USE_DEFLATE64
  133. #    if (defined(M_I86TM) || defined(M_I86SM) || defined(M_I86MM))
  134. #      error Deflate64(tm) requires compact or large memory model
  135. #    endif
  136. #    if (defined(__TINY__) || defined(__SMALL__) || defined(__MEDIUM__))
  137. #      error Deflate64(tm) requires compact or large memory model
  138. #    endif
  139.      /* the 64k history buffer for Deflate64 must be allocated specially */
  140. #    define MALLOC_WORK
  141. #    define MY_ZCALLOC
  142. #  endif
  143. #endif
  144.  
  145. /* 32-bit MSDOS supports the 32-bit optimized CRC-32 C code */
  146. #ifdef IZ_CRC_BE_OPTIMIZ
  147. # undef IZ_CRC_BE_OPTIMIZ
  148. #endif
  149. #ifdef __32BIT__
  150. # if !defined(IZ_CRC_LE_OPTIMIZ) && !defined(NO_CRC_OPTIMIZ)
  151. #  define IZ_CRC_LE_OPTIMIZ
  152. # endif
  153. #else /* __16BIT__ does not support optimized C crc32 code */
  154. # ifdef IZ_CRC_LE_OPTIMIZ
  155. #  undef IZ_CRC_LE_OPTIMIZ
  156. # endif
  157. #endif
  158.  
  159. /* another stat()/fopen() bug with some 16-bit compilers on Novell drives;
  160.  * very dangerous (silently overwrites executables in other directories)
  161.  */
  162. #define NOVELL_BUG_WORKAROUND
  163.  
  164. /* enables additional test and message code that directs UnZip to fail safely
  165.  * in case the "workaround" enabled above does not work as intended
  166.  */
  167. #define NOVELL_BUG_FAILSAFE
  168.  
  169. /* Some implementations of stat() tend to fail on "." in root directories
  170.  * or on remote (root) directories specified by an UNC network path. This
  171.  * patch of stat() is useful for at least the WATCOM compilers. The
  172.  * stat_bandaid() wrapper detects stat failures on root directories and
  173.  * fills in suitable values.
  174.  */
  175. #ifdef DOS_STAT_BANDAID
  176. #  ifdef SSTAT
  177. #    undef SSTAT
  178. #  endif
  179. #  ifdef WILD_STAT_BUG
  180. #    define SSTAT(path,pbuf) (iswild(path) || stat_bandaid(path,pbuf))
  181. #  else
  182. #    define SSTAT stat_bandaid
  183. #  endif
  184.    int stat_bandaid(const char *path, struct stat *buf);
  185. #endif
  186.  
  187. /* the TIMESTAMP feature is now supported on MSDOS, enable it per default */
  188. #if (!defined(NOTIMESTAMP) && !defined(TIMESTAMP))
  189. #  define TIMESTAMP
  190. #endif
  191.  
  192. /* check that TZ environment variable is defined before using UTC times */
  193. #if (!defined(NO_IZ_CHECK_TZ) && !defined(IZ_CHECK_TZ))
  194. #  define IZ_CHECK_TZ
  195. #endif
  196.  
  197. /* The optional "long filename" support available with some MSDOS compiler
  198.  * environments running under VFAT systems (Win95) is controlled with the
  199.  * help of the two preprocessor symbols USE_VFAT and USE_LFN:
  200.  *  - USE_VFAT is a compile time switch that selects the long filename
  201.  *             semantics in mapname()
  202.  *  - USE_LFN  is a macro equating to a boolean expression indicating
  203.  *             whether long filenames are supported. If available, this
  204.  *             macro should make use of a runtime function checking the
  205.  *             LFN support.
  206.  *
  207.  * The code in msdos.c distinguishes three cases:
  208.  * 1.) USE_VFAT is not defined:
  209.  *     No support of LFN is included; filenames are mapped to 8+3 plain FAT
  210.  *     syntax unconditionally.
  211.  *     This is achieved by ``#define MAYBE_PLAIN_FAT'' to include the plain
  212.  *     FAT name mapping code and by ``#undef USE_LFN'' to disable bypassing
  213.  *     of the FAT mapping at runtime.
  214.  * 2.) USE_VFAT is defined:
  215.  *     Support for LFN is enabled.
  216.  *  a) USE_LFN is undefined:
  217.  *     There is no (runtime) check available to distinguish between OS
  218.  *     environments that support VFAT extensions and those that do not.
  219.  *     In this case, filenames are mapped to the more liberal VFAT LFN
  220.  *     syntax unconditionally. The internal switch MAYBE_PLAIN_FAT remains
  221.  *     undefined to exclude to "map to plain FAT" code parts.
  222.  *  b) USE_LFN is defined (hopefully to a boolean runtime LFN check function):
  223.  *     "#define MAYBE_PLAIN_FAT" is applied to include the plain FAT mapping
  224.  *     code; the programs checks at runtime whether the OS supports LFN and
  225.  *     uses the appropiate mapping syntax.
  226.  */
  227. /* Some environments, like DJGPP v2, can support long filenames on VFAT
  228.  * systems and DOS 8.3 filenames on FAT systems in the same executable.  If
  229.  * such support is available, USE_LFN should be defined to an expression
  230.  * that will return non-zero when long filenames API should be used, zero
  231.  * otherwise.
  232.  */
  233. #ifndef USE_VFAT
  234. #  ifdef USE_LFN
  235. #    undef USE_LFN
  236. #  endif
  237. #  ifndef MAYBE_PLAIN_FAT
  238. #    define MAYBE_PLAIN_FAT
  239. #  endif
  240. #else
  241. #  ifdef USE_LFN
  242. #    define MAYBE_PLAIN_FAT
  243. #  endif
  244. #endif
  245.  
  246. #ifdef ACORN_FTYPE_NFS
  247. #  undef ACORN_FTYPE_NFS        /* no commas allowed in short filenames */
  248. #endif
  249.  
  250. /* handlers for OEM <--> ANSI string conversions */
  251. #ifdef WINDLL
  252. #  if 1
  253.      /* C RTL's file system support assumes OEM-coded strings */
  254. #    ifdef CRTL_CP_IS_ISO
  255. #      undef CRTL_CP_IS_ISO
  256. #    endif
  257. #    ifndef CRTL_CP_IS_OEM
  258. #      define CRTL_CP_IS_OEM
  259. #    endif
  260. #  else
  261.      /* C RTL's file system support assumes ISO-coded strings */
  262. #    ifndef CRTL_CP_IS_ISO
  263. #      define CRTL_CP_IS_ISO
  264. #    endif
  265. #    ifdef CRTL_CP_IS_OEM
  266. #      undef CRTL_CP_IS_OEM
  267. #    endif
  268. #  endif /* ?(code page of 16bit Windows compilers) */
  269.    /* include Win API declarations only in sources where conversion is
  270.     * actually used (skip __EXTRACT_C, extract.c includes windll.h instead)
  271.     */
  272. #  if defined(__ENVARGS_C) || defined(__UNZIP_C) || defined(ZCRYPT_INTERNAL)
  273. #    include <windows.h>
  274. #  endif
  275.    /* use conversion functions of Windows API */
  276. #  ifdef CRTL_CP_IS_ISO
  277. #   define ISO_TO_INTERN(src, dst)  {if ((src) != (dst)) strcpy((dst), (src));}
  278. #   define OEM_TO_INTERN(src, dst)  OemToAnsi(src, dst)
  279. #   define INTERN_TO_ISO(src, dst)  {if ((src) != (dst)) strcpy((dst), (src));}
  280. #   define INTERN_TO_OEM(src, dst)  AnsiToOem(src, dst)
  281. #  endif
  282. #  ifdef CRTL_CP_IS_OEM
  283. #   define ISO_TO_INTERN(src, dst)  AnsiToOem(src, dst)
  284. #   define OEM_TO_INTERN(src, dst)  {if ((src) != (dst)) strcpy((dst), (src));}
  285. #   define INTERN_TO_ISO(src, dst)  OemToAnsi(src, dst)
  286. #   define INTERN_TO_OEM(src, dst)  {if ((src) != (dst)) strcpy((dst), (src));}
  287. #  endif
  288. #  define _OEM_INTERN(str1) OEM_TO_INTERN(str1, str1)
  289. #  define _ISO_INTERN(str1) ISO_TO_INTERN(str1, str1)
  290.    /* UzpPassword supplies ANSI-coded string regardless of C RTL's native CP */
  291. #  define STR_TO_CP2(dst, src)  (AnsiToOem(src, dst), dst)
  292.    /* dummy defines to disable these functions, they are not needed */
  293. #  define STR_TO_ISO
  294. #  define STR_TO_OEM
  295. #else
  296.    /* use home-brewed conversion functions; internal charset is OEM */
  297. #  ifdef CRTL_CP_IS_ISO
  298. #    undef CRTL_CP_IS_ISO
  299. #  endif
  300. #  ifndef CRTL_CP_IS_OEM
  301. #    define CRTL_CP_IS_OEM
  302. #  endif
  303. #endif
  304. #ifndef NEED_ISO_OEM_INIT
  305. #  define NEED_ISO_OEM_INIT
  306. #endif
  307.  
  308. /* SCREENLINES macros for 16-bit and djgpp compilers */
  309. #ifdef __16BIT__
  310. #  define SCREENLINES (int)(*((unsigned char far*)0x00400084L) + 1)
  311. #  define SCREENWIDTH (int)(*(unsigned short far*)0x0040004AL)
  312. #endif
  313.  
  314. #if defined(__GO32__) || defined(__DJGPP__)    /* djgpp v1.x and v2.x */
  315. #  include <pc.h>
  316. #  define SCREENLINES ScreenRows()
  317. #  define SCREENWIDTH ScreenCols()
  318. #endif
  319.  
  320. #ifdef __EMX__
  321. #  define SCREENWIDTH 80
  322. #  define SCREENSIZE(scrrows, scrcols)  screensize(scrrows, scrcols)
  323.    int screensize(int *tt_rows, int *tt_cols);
  324. #endif
  325.  
  326. #ifdef WATCOMC_386
  327. #  define SCREENWIDTH 80
  328. #  define SCREENSIZE(scrrows, scrcols)  screensize(scrrows, scrcols)
  329.    int screensize(int *tt_rows, int *tt_cols);
  330. #endif
  331.  
  332. #ifndef SCREENSIZE
  333. #  define SCREENSIZE(scrrows, scrcols) { \
  334.         if ((scrrows) != NULL) *(scrrows) = SCREENLINES; \
  335.         if ((scrcols) != NULL) *(scrcols) = SCREENWIDTH; }
  336. #endif
  337.  
  338. /* on the DOS console screen, line-wraps are always enabled */
  339. #define SCREENLWRAP 1
  340. #define TABSIZE 8
  341.  
  342. #endif /* !__doscfg_h */
  343.