home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 9 Archive / 09-Archive.zip / unzip532.zip / msdos / doscfg.h < prev    next >
C/C++ Source or Header  |  1997-10-05  |  9KB  |  266 lines

  1. /*---------------------------------------------------------------------------
  2.     MS-DOS specific configuration section:
  3.   ---------------------------------------------------------------------------*/
  4.  
  5. #ifndef __doscfg_h
  6. #define __doscfg_h
  7.  
  8. #include <dos.h>           /* for REGS macro (TC) or _dos_setftime (MSC) */
  9.  
  10. #ifdef __TURBOC__          /* includes Power C */
  11. #  include <sys/timeb.h>   /* for structure ftime */
  12. #  ifndef __BORLANDC__     /* there appears to be a bug (?) in Borland's */
  13. #    include <mem.h>       /*  MEM.H related to __STDC__ and far poin-   */
  14. #  endif                   /*  ters. (dpk)  [mem.h included for memcpy]  */
  15. #endif
  16.  
  17. #ifdef WINDLL
  18. #  if (defined(MSC) || defined(__WATCOMC__))
  19. #    include <sys/utime.h>
  20. #  else /* !(MSC || __WATCOMC__) ==> may be BORLANDC, or GNU environment */
  21. #    include <utime.h>
  22. #  endif /* ?(MSC || __WATCOMC__) */
  23. #endif
  24.  
  25. #ifdef __WATCOMC__
  26. #  undef SSTAT
  27. #  define SSTAT stat_bandaid
  28.    int stat_bandaid(const char *path, struct stat *buf);
  29.  
  30. #  ifdef __386__
  31. #    ifndef WATCOMC_386
  32. #      define WATCOMC_386
  33. #    endif
  34. #    define __32BIT__
  35. #    undef far
  36. #    define far
  37. #    undef near
  38. #    define near
  39.  
  40. /* Get asm routines to link properly without using "__cdecl": */
  41. #    ifndef USE_ZLIB
  42. #      pragma aux crc32         "_*" parm caller [] value [eax] modify [eax]
  43. #      pragma aux get_crc_table "_*" parm caller [] value [eax] \
  44.                                       modify [eax ecx edx]
  45. #    endif /* !USE_ZLIB */
  46. #  else /* !__386__ */
  47. #    ifndef USE_ZLIB
  48. #      pragma aux crc32         "_*" parm caller [] value [ax dx] \
  49.                                       modify [ax cx dx bx]
  50. #      pragma aux get_crc_table "_*" parm caller [] value [ax] \
  51.                                       modify [ax cx dx bx]
  52. #    endif /* !USE_ZLIB */
  53. #  endif /* ?__386__ */
  54.  
  55. #  ifndef EPIPE
  56. #    define EPIPE -1
  57. #  endif
  58. #  define PIPE_ERROR (errno == EPIPE)
  59. #endif /* __WATCOMC__ */
  60.  
  61. #ifdef __EMX__
  62. #  ifndef __32BIT__
  63. #    define __32BIT__
  64. #  endif
  65. #  define far
  66. #endif
  67.  
  68. #if defined(__GO32__) || defined(__DJGPP__)    /* MS-DOS compiler, not OS/2 */
  69. #  ifndef __32BIT__
  70. #    define __32BIT__
  71. #  endif
  72. #  ifndef __GO32__
  73. #    define __GO32__
  74. #  endif
  75. #  include <sys/timeb.h>           /* for structure ftime */
  76. #  if (defined(__DJGPP__) && (__DJGPP__ > 1))
  77. #    include <unistd.h>            /* for prototypes for read/write etc. */
  78. #    include <dir.h>               /* for FA_LABEL */
  79. #    if ((__DJGPP__ == 2) && (__DJGPP_MINOR__ == 0))
  80. #      include <libc/dosio.h>      /* for _USE_LFN, djgpp 2.0 only */
  81. #    endif
  82. #    define USE_LFN _USE_LFN       /* runtime test:  support long filenames? */
  83. #  else
  84.      int setmode(int, int);        /* not in older djgpp's include files */
  85. #  endif
  86. #endif
  87.  
  88. #ifndef __32BIT__
  89. #  define __16BIT__
  90. #endif
  91.  
  92. #if (defined(M_I86CM) || defined(M_I86LM)) || defined(WINDLL)
  93. #  define MED_MEM
  94. #endif
  95. #if (defined(__COMPACT__) || defined(__LARGE__) || defined(__HUGE__))
  96. #  define MED_MEM
  97. #endif
  98. #ifdef __16BIT__
  99. #  ifndef MED_MEM
  100. #    define SMALL_MEM
  101. #  endif
  102. #endif
  103.  
  104. #define EXE_EXTENSION ".exe"  /* OS/2 has GetLoadPath() function instead */
  105.  
  106. #ifdef __16BIT__
  107. #  if defined(MSC) || defined(__WATCOMC__)
  108. #    include <malloc.h>
  109. #    define nearmalloc _nmalloc
  110. #    define nearfree _nfree
  111. #  endif
  112. #  if defined(__TURBOC__) && defined(DYNALLOC_CRCTAB)
  113. #    if defined(__COMPACT__) || defined(__LARGE__) || defined(__HUGE__)
  114. #      undef DYNALLOC_CRCTAB
  115. #    endif
  116. #  endif
  117. #  ifndef nearmalloc
  118. #    define nearmalloc malloc
  119. #    define nearfree free
  120. #  endif
  121. #  if defined(USE_ZLIB) && !defined(USE_OWN_CRCTAB)
  122. #    define USE_OWN_CRCTAB
  123. #  endif
  124. #endif
  125.  
  126.  
  127. /* another stat()/fopen() bug with some 16-bit compilers on Novell drives;
  128.  * very dangerous (silently overwrites executables in other directories)
  129.  */
  130. #define NOVELL_BUG_WORKAROUND
  131.  
  132. /* enables additional test and message code that directs UnZip to fail safely
  133.  * in case the "workaround" enabled above does not work as intended
  134.  */
  135. #define NOVELL_BUG_FAILSAFE
  136.  
  137.  
  138. /* the TIMESTAMP feature is now supported on MSDOS, enable it per default */
  139. #if (!defined(NOTIMESTAMP) && !defined(TIMESTAMP))
  140. #  define TIMESTAMP
  141. #endif
  142.  
  143. /* The optional "long filename" support available with some MSDOS compiler
  144.  * environments running under VFAT systems (Win95) is controlled with the
  145.  * help of the two preprocessor symbols USE_VFAT and USE_LFN:
  146.  *  - USE_VFAT is a compile time switch that selects the long filename
  147.  *             semantics in mapname()
  148.  *  - USE_LFN  is a macro equating to a boolean expression indicating
  149.  *             whether long filenames are supported. If available, this
  150.  *             macro should make use of a runtime function checking the
  151.  *             LFN support.
  152.  *
  153.  * The code in msdos.c distinguishes three cases:
  154.  * 1.) USE_VFAT is not defined:
  155.  *     No support of LFN is included; filenames are mapped to 8+3 plain FAT
  156.  *     syntax unconditionally.
  157.  *     This is achieved by ``#define MAYBE_PLAIN_FAT'' to include the plain
  158.  *     FAT name mapping code and by ``#undef USE_LFN'' to disable bypassing
  159.  *     of the FAT mapping at runtime.
  160.  * 2.) USE_VFAT is defined:
  161.  *     Support for LFN is enabled.
  162.  *  a) USE_LFN is undefined:
  163.  *     There is no (runtime) check available to distinguish between OS
  164.  *     environments that support VFAT extensions and those that do not.
  165.  *     In this case, filenames are mapped to the more liberal VFAT LFN
  166.  *     syntax unconditionally. The internal switch MAYBE_PLAIN_FAT remains
  167.  *     undefined to exclude to "map to plain FAT" code parts.
  168.  *  b) USE_LFN is defined (hopefully to a boolean runtime LFN check function):
  169.  *     "#define MAYBE_PLAIN_FAT" is applied to include the plain FAT mapping
  170.  *     code; the programs checks at runtime whether the OS supports LFN and
  171.  *     uses the appropiate mapping syntax.
  172.  */
  173. /* Some environments, like DJGPP v2, can support long filenames on VFAT
  174.  * systems and DOS 8.3 filenames on FAT systems in the same executable.  If
  175.  * such support is available, USE_LFN should be defined to an expression
  176.  * that will return non-zero when long filenames API should be used, zero
  177.  * otherwise.
  178.  */
  179. #ifndef USE_VFAT
  180. #  ifdef USE_LFN
  181. #    undef USE_LFN
  182. #  endif
  183. #  ifndef MAYBE_PLAIN_FAT
  184. #    define MAYBE_PLAIN_FAT
  185. #  endif
  186. #endif
  187. #ifdef USE_LFN
  188. #  define MAYBE_PLAIN_FAT
  189. #endif
  190.  
  191. /* handlers for OEM <--> ANSI string conversions */
  192. #ifdef WINDLL
  193. #  if 1
  194.      /* C RTL's file system support assumes OEM-coded strings */
  195. #    ifdef CRTL_CP_IS_ISO
  196. #      undef CRTL_CP_IS_ISO
  197. #    endif
  198. #    ifndef CRTL_CP_IS_OEM
  199. #      define CRTL_CP_IS_OEM
  200. #    endif
  201. #  else
  202.      /* C RTL's file system support assumes ISO-coded strings */
  203. #    ifndef CRTL_CP_IS_ISO
  204. #      define CRTL_CP_IS_ISO
  205. #    endif
  206. #    ifdef CRTL_CP_IS_OEM
  207. #      undef CRTL_CP_IS_OEM
  208. #    endif
  209. #  endif /* ?(code page of 16bit Windows compilers) */
  210.    /* include Win API declarations only in sources where conversion is
  211.     * actually used (skip EXTRACT_C, extract.c includes windll.h instead)
  212.     */
  213. #  if defined(ENVARGS_C) || defined(UNZIP_C) || defined(ZCRYPT_INTERNAL)
  214. #    include <windows.h>
  215. #  endif
  216.    /* use conversion functions of Windows API */
  217. #  ifdef CRTL_CP_IS_ISO
  218. #   define ISO_TO_INTERN(src, dst)  {if ((src) != (dst)) strcpy((dst), (src));}
  219. #   define OEM_TO_INTERN(src, dst)  OemToAnsi(src, dst)
  220. #   define INTERN_TO_ISO(src, dst)  {if ((src) != (dst)) strcpy((dst), (src));}
  221. #   define INTERN_TO_OEM(src, dst)  AnsiToOem(src, dst)
  222. #  endif
  223. #  ifdef CRTL_CP_IS_OEM
  224. #   define ISO_TO_INTERN(src, dst)  AnsiToOem(src, dst)
  225. #   define OEM_TO_INTERN(src, dst)  {if ((src) != (dst)) strcpy((dst), (src));}
  226. #   define INTERN_TO_ISO(src, dst)  OemToAnsi(src, dst)
  227. #   define INTERN_TO_OEM(src, dst)  {if ((src) != (dst)) strcpy((dst), (src));}
  228. #  endif
  229. #  define _OEM_INTERN(str1) OEM_TO_INTERN(str1, str1)
  230. #  define _ISO_INTERN(str1) ISO_TO_INTERN(str1, str1)
  231.    /* UzpPassword supplies ANSI-coded string regardless of C RTL's native CP */
  232. #  define STR_TO_CP2(dst, src)  (AnsiToOem(src, dst), dst)
  233.    /* dummy defines to disable these functions, they are not needed */
  234. #  define STR_TO_ISO
  235. #  define STR_TO_OEM
  236. #else
  237.    /* use home-brewed conversion functions; internal charset is OEM */
  238. #  ifdef CRTL_CP_IS_ISO
  239. #    undef CRTL_CP_IS_ISO
  240. #  endif
  241. #  ifndef CRTL_CP_IS_OEM
  242. #    define CRTL_CP_IS_OEM
  243. #  endif
  244. #endif
  245.  
  246. /* SCREENLINES macros for 16-bit and djgpp compilers */
  247. #ifdef __16BIT__
  248. #  define SCREENLINES (int)(*((unsigned char far*)0x00400084L) + 1)
  249. #  define SCREENWIDTH (int)(*(unsigned short far*)0x0040004AL)
  250. #endif
  251.  
  252. #if defined(__GO32__) || defined(__DJGPP__)    /* djgpp v1.x and v2.x */
  253. #  include <pc.h>
  254. #  define SCREENLINES ScreenRows()
  255. #  define SCREENWIDTH ScreenCols()
  256. #endif
  257.  
  258. #ifdef __EMX__
  259. #  define SCREENLINES screenlines()
  260. #  define SCREENWIDTH screencolumns()
  261.    int screenlines(void);
  262.    int screencolumns(void);
  263. #endif
  264.  
  265. #endif /* !__doscfg_h */
  266.