1 /*
2   Copyright (c) 1990-1999 Info-ZIP.  All rights reserved.
3 
4   See the accompanying file LICENSE, version 1999-Oct-05 or later
5   (the contents of which are also included in zip.h) for terms of use.
6   If, for some reason, both of these files are missing, the Info-ZIP license
7   also may be found at:  ftp://ftp.cdrom.com/pub/infozip/license.html
8 */
9 #if defined(__OS2__) && !defined(OS2)
10 #  define OS2
11 #endif
12 
13 /* Automatic setting of the common Microsoft C idenfifier MSC.
14  * NOTE: Watcom also defines M_I*86 !
15  */
16 #if defined(_MSC_VER) || (defined(M_I86) && !defined(__WATCOMC__))
17 #  ifndef MSC
18 #    define MSC                 /* This should work for older MSC, too!  */
19 #  endif
20 #endif
21 
22 #if defined(__WATCOMC__) && defined(__386__)
23 #  define WATCOMC_386
24 #endif
25 
26 #if defined(__EMX__) || defined(WATCOMC_386) || defined(__BORLANDC__)
27 #  if (defined(OS2) && !defined(__32BIT__))
28 #    define __32BIT__
29 #  endif
30 #endif
31 
32 #if defined(OS2) && !defined(__32BIT__)
33 #  define MEMORY16
34 #endif
35 
36 #ifndef NO_ASM
37 #  define ASMV
38 /* #  define ASM_CRC */
39 #endif
40 
41 /* enable creation of UTC time fields unless explicitely suppressed */
42 #if (!defined(NO_EF_UT_TIME) && !defined(USE_EF_UT_TIME))
43 #  define USE_EF_UT_TIME
44 #endif
45 
46 /* check that TZ environment variable is defined before using UTC times */
47 #if (!defined(NO_IZ_CHECK_TZ) && !defined(IZ_CHECK_TZ))
48 #  define IZ_CHECK_TZ
49 #endif
50 
51 #ifndef ZP_NEED_MEMCOMPR
52 #  define ZP_NEED_MEMCOMPR
53 #endif
54 
55 #ifdef MEMORY16
56 #  ifdef __TURBOC__
57 #    include <alloc.h>
58 #    if defined(__COMPACT__) || defined(__LARGE__) || defined(__HUGE__)
59 #      if defined(DYNAMIC_CRC_TABLE) && defined(DYNALLOC_CRCTAB)
60         error: No dynamic CRC table allocation with Borland C far data models.
61 #      endif /* DYNAMIC_CRC_TABLE */
62 #    endif /* Turbo/Borland C far data memory models */
63 #    define nearmalloc malloc
64 #    define nearfree   free
65 #    define DYN_ALLOC
66 #  else /* !__TURBOC__ */
67 #    include <malloc.h>
68 #    define nearmalloc _nmalloc
69 #    define nearfree   _nfree
70 #    define farmalloc  _fmalloc
71 #    define farfree    _ffree
72 #  endif /* ?__TURBOC__ */
73 #  define MY_ZCALLOC 1
74 #endif /* MEMORY16 */
75 
76 
77 /* The symbol MSDOS is consistently used in the generic source files
78  * to identify code to support for MSDOS (and MSDOS related) stuff.
79  * e.g: FAT or (FAT like) file systems,
80  *      '\\' as directory separator in paths,
81  *      "\r\n" as record (line) terminator in text files, ...
82  *
83  * MSDOS is defined anyway with MS C 16-bit. So the block above works.
84  * For the 32-bit compilers, MSDOS must not be defined in the block above.
85  */
86 #if (defined(OS2) && !defined(MSDOS))
87 #  define MSDOS
88 /* inherit MS-DOS file system etc. stuff */
89 #endif
90 
91 #define USE_CASE_MAP
92 #define PROCNAME(n) (action == ADD || action == UPDATE ? wild(n) : \
93                      procname(n, 1))
94 
95 /* time stamp resolution of file system is 2 seconds */
96 #define ROUNDED_TIME(time)  ((time_t)(((unsigned long)(time) + 1) & (~1)))
97 
98 #define FOPR "rb"
99 #define FOPM "r+b"
100 #define FOPW "wb"
101 
102 #ifdef __32BIT__
103 #  define CBSZ 0x40000
104 #  define ZBSZ 0x40000
105 #else
106 #  define CBSZ 0xE000
107 #  define ZBSZ 0x7F00 /* Some libraries do not allow a buffer size > 32K */
108 #endif
109 
110 #include <sys/types.h>
111 #include <sys/stat.h>
112 #include <io.h>
113 
114 #ifdef ZCRYPT_INTERNAL
115 #  ifndef __GO32__
116 #    include <process.h>        /* getpid() declaration for srand seed */
117 #  endif
118 #endif
119 
120 /* for some (all ?) versions of IBM C Set/2 and IBM C Set++ */
121 #ifndef S_IFMT
122 #  define S_IFMT 0xF000
123 #endif /* !S_IFMT */
124 
125 #ifdef MSC
126 #  define NO_UNISTD_H
127 #endif
128 
129 #ifdef __WATCOMC__
130 #  define NO_MKTEMP
131 /* Get asm routines to link properly without using "__cdecl": */
132 #  ifdef __386__
133 #    ifdef ASMV
134 #      pragma aux window "*";
135 #      pragma aux prev "*";
136 #      pragma aux prev_length "*";
137 #      pragma aux strstart "*";
138 #      pragma aux match_start "*";
139 #      pragma aux max_chain_length "*";
140 #      pragma aux good_match "*";
141 #      pragma aux nice_match "*";
142 #      pragma aux match_init "*";
143 #      pragma aux longest_match "*";
144 #    endif
145 #    ifndef USE_ZLIB
146 #      pragma aux crc32         "_*" parm caller [] value [eax] modify [eax]
147 #      pragma aux get_crc_table "_*" parm caller [] value [eax] \
148                                       modify [eax ecx edx]
149 #    endif /* !USE_ZLIB */
150 #  else /* !__386__ */
151 #    if defined(ASMV) || defined(ASM_CRC)
152 /*#      error 16 bit assembly modules currently DO NOT WORK with Watcom C. */
153 #    endif
154 #    ifdef ASMV
155 #      pragma aux match_init    "_*" parm caller [] loadds modify [ax bx]
156 #      pragma aux longest_match "_*" parm caller [] loadds value [ax] \
157                                       modify [ax bx cx dx es]
158 #    endif
159 #    ifndef USE_ZLIB
160 #      pragma aux crc32         "_*" parm caller [] value [ax dx] \
161                                       modify [ax bx cx dx es]
162 #      pragma aux get_crc_table "_*" parm caller [] value [ax] \
163                                       modify [ax bx cx dx]
164 #    endif /* !USE_ZLIB */
165 #  endif /* ?__386__ */
166 #endif
167 
168 #ifdef __IBMC__
169 #  define NO_UNISTD_H
170 #  define NO_MKTEMP
171 #  define timezone _timezone            /* (underscore names work with    */
172 #  define tzset _tzset                  /*  all versions of C Set)        */
173 #endif
174