|
|
1.1.1.6 root 1: /*---------------------------------------------------------------------------
2:
3: unzip.h
4:
5: This header file is used by all of the unzip source files. Its contents
6: were divided into seven more-or-less separate sections but have been
7: hacked to death to minimize the total size and maximize compile speed by
8: not including stuff not needed for the inflate-only compile.
9:
10: Modified 25 Jun 92 - HAJK
11: Fix support for use in PGP/VMS
12: ---------------------------------------------------------------------------*/
13:
14: /***************************/
15: /* OS-Dependent Includes */
16: /***************************/
17:
18: #include <stdlib.h>
19: #include "usuals.h"
20: #include "system.h"
21:
22: #ifndef MINIX /* Minix needs it after all the other includes (?) */
23: # include <stdio.h> /* this is your standard header for all C compiles */
24: #endif
25:
26: /*---------------------------------------------------------------------------
27: Next, a word from our Unix (mostly) sponsors:
28: ---------------------------------------------------------------------------*/
29:
30: #ifdef UNIX
31: # ifdef AMIGA
32: # include <libraries/dos.h>
33: # else /* !AMIGA */
34: # ifndef NO_PARAM_H
35: # include <sys/param.h> /* conflict with <sys/types.h>, some systems? */
36: # endif /* !NO_PARAM_H */
37: # endif /* ?AMIGA */
38:
39: # ifndef BSIZE
40: # ifdef MINIX
41: # define BSIZE 1024
42: # else /* !MINIX */
43: # define BSIZE DEV_BSIZE /* assume common for all Unix systems */
44: # endif /* ?MINIX */
45: # endif
46:
47: # ifndef BSD
48: # if !defined(AMIGA) && !defined(MINIX)
49: # define NO_MKDIR /* for mapped_name() */
50: # endif /* !AMIGA && !MINIX */
51: # include <time.h>
52: # else /* BSD */
53: # include <sys/time.h>
54: # include <sys/timeb.h>
55: # endif
56:
57: #else /* !UNIX */
58: # define BSIZE 512 /* disk block size */
59: #endif /* ?UNIX */
60:
61: /*---------------------------------------------------------------------------
62: And now, our MS-DOS and OS/2 corner:
63: ---------------------------------------------------------------------------*/
64:
65: #ifdef __TURBOC__
66: # define DOS_OS2 /* Turbo C under DOS, MSC under DOS or OS2 */
67: # ifndef __BORLANDC__ /* There appears to be a bug ?? in Borland's */
68: # include <alloc.h>
69: # endif
70: #else /* NOT Turbo C... */
71: # ifdef MSDOS /* but still MS-DOS, so we'll assume it's */
72: # ifndef MSC /* Microsoft's compiler and fake the ID, if */
73: # define MSC /* necessary (it is in 5.0; apparently not */
74: # endif /* in 5.1 and 6.0) */
75: # include <dos.h> /* _dos_setftime() */
76: # endif
77: # ifdef OS2 /* stuff for DOS and OS/2 family version */
78: # ifndef MSC
79: # define MSC
80: # endif
81: # define INCL_BASE
82: # define INCL_NOPM
83: # include <os2.h> /* DosQFileInfo(), DosSetFileInfo()? */
84: # endif
85: #endif
86:
87: #ifdef MSC /* defined for all versions of MSC now */
88: # define DOS_OS2 /* Turbo C under DOS, MSC under DOS or OS/2 */
89: # if defined(_MSC_VER) && (_MSC_VER >= 600) /* new with 5.1 or 6.0 ... */
90: # undef DECLARE_ERRNO /* errno is now a function in a dynamic link */
91: # endif /* library (or something)--incompatible with */
92: #endif /* the usual "extern int errno" declaration */
93:
94: #ifdef DOS_OS2 /* defined for both Turbo C, MSC */
95: # include <io.h> /* lseek(), open(), setftime(), dup(), creat() */
96: # include <time.h> /* localtime() */
97: #endif
98:
99: /*---------------------------------------------------------------------------
100: Followed by some VMS (mostly) stuff:
101: ---------------------------------------------------------------------------*/
102:
103: #ifdef VMS
104: # include <time.h> /* the usual non-BSD time functions */
105: # include <file.h> /* same things as fcntl.h has */
106: # include <rmsdef.h> /* RMS error codes */
107: # define UNIX /* can share most of same code from now on */
108: # define RETURN return /* Don't Fake return */
109: #else /* !VMS */
110: # define RETURN return /* only used in main() */
111: # ifdef V7
112: # define O_RDONLY 0
113: # define O_WRONLY 1
114: # define O_RDWR 2
115: # else /* !V7 */
116: # ifdef MTS
117: # include <sys/file.h> /* MTS uses this instead of fcntl.h */
118: # else /* !MTS */
119: # ifdef COHERENT /* Coherent 3.10/Mark Williams C */
120: # include <sys/fcntl.h>
121: # define SHORT_NAMES
122: # define tzset settz
123: # else /* !COHERENT */
124: # include <fcntl.h> /* #define O_BINARY 0x8000 (no CR/LF */
125: # endif /* ?COHERENT */ /* translation), as used in open() */
126: # endif /* ?MTS */
127: # endif /* ?V7 */
128: #endif /* ?VMS */
129:
130: /*---------------------------------------------------------------------------
131: And some Mac stuff for good measure:
132: ---------------------------------------------------------------------------*/
133:
134: #ifdef THINK_C
135: # define MACOS
136: # ifndef __STDC__ /* THINK_C isn't truly ANSI-standard, */
137: # define __STDC__ 1 /* but it understands prototypes...so */
138: # endif /* it's close enough for our purposes */
139: # include <time.h>
140: # include <unix.h>
141: # include "macstat.h"
142: #endif
143: #ifdef MPW /* not tested yet - should be easy enough tho */
144: # define MACOS
145: # include <time.h>
146: # include <fcntl.h>
147: # include "macstat.h"
148: #endif
149:
150: /*---------------------------------------------------------------------------
151: And finally, some random extra stuff:
152: ---------------------------------------------------------------------------*/
153:
154: #include <stdlib.h> /* standard library prototypes, malloc(), etc. */
155: #include <string.h> /* defines strcpy, strcmp, memcpy, etc. */
156:
157: #ifdef MINIX
158: # include <stdio.h>
159: #endif
160:
161:
162: /*************/
163: /* Defines */
164: /*************/
165:
166: #define INBUFSIZ BUFSIZ /* same as stdio uses */
167: #define OUTBUFSIZ 0x2000 /* unImplode needs power of 2, >= 0x2000 */
168:
169: #define MAX_BITS 13 /* used in unShrink() */
170: #define HSIZE (1 << MAX_BITS) /* size of global work area */
171:
172: #define LF 10 /* '\n' on ASCII machines. Must be 10 due to EBCDIC */
173: #define CR 13 /* '\r' on ASCII machines. Must be 13 due to EBCDIC */
174:
175: #ifdef AMIGA
176: # define FFLUSH fflush(stderr);
177: #else /* !AMIGA */
178: # define FFLUSH
179: #endif /* ?AMIGA */
180:
181: #ifndef TRUE
182: # define TRUE 1 /* sort of obvious */
183: # define FALSE 0
184: #endif
185:
186: #ifndef SEEK_SET /* These should all be declared in stdio.h! But */
187: # define SEEK_SET 0 /* since they're not (in many cases), do so here. */
188: # define SEEK_CUR 1
189: # define SEEK_END 2
190: #endif
191:
192: /**************/
193: /* Typedefs */
194: /**************/
195:
196: typedef long longint;
197: typedef unsigned short UWORD;
198: #ifndef OS2
199: typedef unsigned long ULONG;
200: #endif
201:
202: /*************************/
203: /* Function Prototypes */
204: /*************************/
205:
206: #ifdef PROTO
207:
208: /* The following is for non-ansi compilers supporting prototypes */
209: /* (e.g. old SGI compilers and Borland C in non-ansi mode */
210:
211: #define __(X) X /* Inc. Should probably give them a call and see */
212: #endif
213:
214: #ifndef __ /* This amusing little construct was swiped without */
215: # if __STDC__ /* permission from the fine folks at Cray Research, */
216: # define __(X) X /* Inc. Should probably give them a call and see */
217: # else /* if they mind, but.... Then again, I can't think */
218: # define __(X) () /* of any other way to do this, so maybe it's an */
219: # endif /* algorithm? Whatever, thanks to CRI. (Note: */
220: #endif /* keep interior stuff parenthesized.) */
221: /*
222: * Toad Hall Note: Not to worry: I've seen this somewhere else too,
223: * so obviously it's been stolen more than once.
224: * That makes it public domain, right?
225: */
226:
227: /*---------------------------------------------------------------------------
228: Functions in file_io.c and crypt.c:
229: ---------------------------------------------------------------------------*/
230:
231: int open_input_file __( (void) );
232: int readbuf __( (char *buf, register unsigned size) );
233: int create_output_file __( (void) );
234: #if 0
235: int FillBitBuffer __( (void) );
236: int ReadByte __( (UWORD *x) );
237: #else
238: int FillInBuf __( (void) );
239: #endif
240: int FlushOutput __( (void) );
241:
242: /*---------------------------------------------------------------------------
243: Uncompression functions (all internal compression routines, enclosed in
244: comments below, are prototyped in their respective files and are invisi-
245: ble to external functions):
246: ---------------------------------------------------------------------------*/
247:
248: int inflate __( (void) ); /* inflate.c */
249: int unzip __( ( FILE *inFile, FILE *outFile ) );
250:
251: /************/
252: /* Macros */
253: /************/
254:
255: #ifndef min /* MSC defines this in stdlib.h */
256: # define min(a,b) ((a) < (b) ? (a) : (b))
257: #endif
258:
259: #define OUTB(intc) {*outptr++=intc; if (++outcnt==OUTBUFSIZ) FlushOutput();}
260:
261: /*
262: * macro OUTB(intc)
263: * {
264: * *outptr++ = intc;
265: * if (++outcnt == OUTBUFSIZ)
266: * FlushOutput();
267: * }
268: *
269: */
270:
271:
272: #if 0
273:
274: #define READBIT(nbits,zdest) \
275: do \
276: { \
277: if(nbits>bits_left) \
278: FillBitBuffer(); \
279: zdest=(int)(bitbuf&mask_bits[nbits]); \
280: bitbuf>>=nbits; \
281: bits_left-=nbits; \
282: } while(0)
283:
284: /*
285: * macro READBIT(nbits,zdest)
286: * {
287: * if (nbits > bits_left)
288: * FillBitBuffer();
289: * zdest = (int)(bitbuf & mask_bits[nbits]);
290: * bitbuf >>= nbits;
291: * bits_left -= nbits;
292: * }
293: *
294: */
295:
1.1.1.7 ! root 296: #define PEEKBIT(nbits) ( nbits > bits_left ? \
! 297: (FillBitBuffer(), bitbuf & mask_bits[nbits]) : bitbuf & mask_bits[nbits] )
1.1.1.6 root 298:
299: #endif
300:
301: /*************/
302: /* Globals */
303: /*************/
304:
305: #if 0 /* FIX */
306: extern longint csize;
307: #endif
308:
309: extern ULONG mask_bits[];
310:
311: extern byte *inbuf;
312: extern byte *inptr;
313: extern int incnt;
314: extern ULONG bitbuf;
315: extern int bits_left;
316: extern boolean zipeof;
317: extern int zipfd;
318: extern char zipfn[];
319:
320: extern byte *outbuf;
321: extern byte *outptr;
322: extern byte *outout;
323: extern longint outpos;
324: extern int outcnt;
325: extern int outfd;
326: extern int disk_full;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.