1/*
2This is version 2005-Feb-10 of the Info-ZIP copyright and license.
3The definitive version of this document should be available at
4ftp://ftp.info-zip.org/pub/infozip/license.html indefinitely.
5
6
7Copyright (c) 1990-2005 Info-ZIP.  All rights reserved.
8
9For the purposes of this copyright and license, "Info-ZIP" is defined as
10the following set of individuals:
11
12   Mark Adler, John Bush, Karl Davis, Harald Denker, Jean-Michel Dubois,
13   Jean-loup Gailly, Hunter Goatley, Ed Gordon, Ian Gorman, Chris Herborth,
14   Dirk Haase, Greg Hartwig, Robert Heath, Jonathan Hudson, Paul Kienitz,
15   David Kirschbaum, Johnny Lee, Onno van der Linden, Igor Mandrichenko,
16   Steve P. Miller, Sergio Monesi, Keith Owens, George Petrov, Greg Roelofs,
17   Kai Uwe Rommel, Steve Salisbury, Dave Smith, Steven M. Schweda,
18   Christian Spieler, Cosmin Truta, Antoine Verheijen, Paul von Behren,
19   Rich Wales, Mike White
20
21This software is provided "as is," without warranty of any kind, express
22or implied.  In no event shall Info-ZIP or its contributors be held liable
23for any direct, indirect, incidental, special or consequential damages
24arising out of the use of or inability to use this software.
25
26Permission is granted to anyone to use this software for any purpose,
27including commercial applications, and to alter it and redistribute it
28freely, subject to the following restrictions:
29
30    1. Redistributions of source code must retain the above copyright notice,
31       definition, disclaimer, and this list of conditions.
32
33    2. Redistributions in binary form (compiled executables) must reproduce
34       the above copyright notice, definition, disclaimer, and this list of
35       conditions in documentation and/or other materials provided with the
36       distribution.  The sole exception to this condition is redistribution
37       of a standard UnZipSFX binary (including SFXWiz) as part of a
38       self-extracting archive; that is permitted without inclusion of this
39       license, as long as the normal SFX banner has not been removed from
40       the binary or disabled.
41
42    3. Altered versions--including, but not limited to, ports to new operating
43       systems, existing ports with new graphical interfaces, and dynamic,
44       shared, or static library versions--must be plainly marked as such
45       and must not be misrepresented as being the original source.  Such
46       altered versions also must not be misrepresented as being Info-ZIP
47       releases--including, but not limited to, labeling of the altered
48       versions with the names "Info-ZIP" (or any variation thereof, including,
49       but not limited to, different capitalizations), "Pocket UnZip," "WiZ"
50       or "MacZip" without the explicit permission of Info-ZIP.  Such altered
51       versions are further prohibited from misrepresentative use of the
52       Zip-Bugs or Info-ZIP e-mail addresses or of the Info-ZIP URL(s).
53
54    4. Info-ZIP retains the right to use the names "Info-ZIP," "Zip," "UnZip,"
55       "UnZipSFX," "WiZ," "Pocket UnZip," "Pocket Zip," and "MacZip" for its
56       own source and binary releases.
57*/
58
59/*
60 *  zip.h by Mark Adler
61 */
62#ifndef __zip_h
63#define __zip_h 1
64
65#define ZIP   /* for crypt.c:  include zip password functions, not unzip */
66
67/* Set up portability */
68#include "tailor.h"
69
70#ifdef USE_ZLIB
71#  include "zlib.h"
72#endif
73
74#define MIN_MATCH  3
75#define MAX_MATCH  258
76/* The minimum and maximum match lengths */
77
78#ifndef WSIZE
79#  define WSIZE  (0x8000)
80#endif
81/* Maximum window size = 32K. If you are really short of memory, compile
82 * with a smaller WSIZE but this reduces the compression ratio for files
83 * of size > WSIZE. WSIZE must be a power of two in the current implementation.
84 */
85
86#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
87/* Minimum amount of lookahead, except at the end of the input file.
88 * See deflate.c for comments about the MIN_MATCH+1.
89 */
90
91#define MAX_DIST  (WSIZE-MIN_LOOKAHEAD)
92/* In order to simplify the code, particularly on 16 bit machines, match
93 * distances are limited to MAX_DIST instead of WSIZE.
94 */
95
96/* Forget FILENAME_MAX (incorrectly = 14 on some System V) */
97#ifdef DOS
98#  define FNMAX 256
99#else
100#  define FNMAX 1024
101#endif
102
103#ifndef MATCH
104#  define MATCH shmatch         /* Default for pattern matching: UNIX style */
105#endif
106
107/* Types centralized here for easy modification */
108#define local static            /* More meaningful outside functions */
109typedef unsigned char uch;      /* unsigned 8-bit value */
110typedef unsigned short ush;     /* unsigned 16-bit value */
111typedef unsigned long ulg;      /* unsigned 32-bit value */
112
113
114/* Structure carrying extended timestamp information */
115typedef struct iztimes {
116   time_t atime;                /* new access time */
117   time_t mtime;                /* new modification time */
118   time_t ctime;                /* new creation time (!= Unix st.ctime) */
119} iztimes;
120
121/* Lengths of headers after signatures in bytes */
122#define LOCHEAD 26
123#define CENHEAD 42
124#define ENDHEAD 18
125
126/* Structures for in-memory file information */
127struct zlist {
128  /* See central header in zipfile.c for what vem..off are */
129  ush vem, ver, flg, how;
130  ulg tim, crc, siz, len;
131  extent nam, ext, cext, com;   /* offset of ext must be >= LOCHEAD */
132  ush dsk, att, lflg;           /* offset of lflg must be >= LOCHEAD */
133  ulg atx, off;
134  char *name;                   /* File name in zip file */
135  char *extra;                  /* Extra field (set only if ext != 0) */
136  char *cextra;                 /* Extra in central (set only if cext != 0) */
137  char *comment;                /* Comment (set only if com != 0) */
138  char *iname;                  /* Internal file name after cleanup */
139  char *zname;                  /* External version of internal name */
140  int mark;                     /* Marker for files to operate on */
141  int trash;                    /* Marker for files to delete */
142  int dosflag;                  /* Set to force MSDOS file attributes */
143  struct zlist far *nxt;        /* Pointer to next header in list */
144};
145struct flist {
146  char *name;                   /* Raw internal file name */
147  char *iname;                  /* Internal file name after cleanup */
148  char *zname;                  /* External version of internal name */
149  int dosflag;                  /* Set to force MSDOS file attributes */
150  struct flist far *far *lst;   /* Pointer to link pointing here */
151  struct flist far *nxt;        /* Link to next name */
152};
153struct plist {
154  char *zname;                  /* External version of internal name */
155  int select;                   /* Selection flag ('i' or 'x') */
156};
157
158/* internal file attribute */
159#define UNKNOWN (-1)
160#define BINARY  0
161#define ASCII   1
162#define __EBCDIC 2
163
164/* extra field definitions */
165#define EF_VMCMS     0x4704   /* VM/CMS Extra Field ID ("G")*/
166#define EF_MVS       0x470f   /* MVS Extra Field ID ("G")   */
167#define EF_IZUNIX    0x5855   /* UNIX Extra Field ID ("UX") */
168#define EF_IZUNIX2   0x7855   /* Info-ZIP's new Unix ("Ux") */
169#define EF_TIME      0x5455   /* universal timestamp ("UT") */
170#define EF_OS2EA     0x0009   /* OS/2 Extra Field ID (extended attributes) */
171#define EF_ACL       0x4C41   /* ACL Extra Field ID (access control list, "AL") */
172#define EF_NTSD      0x4453   /* NT Security Descriptor Extra Field ID, ("SD") */
173#define EF_BEOS      0x6542   /* BeOS Extra Field ID ("Be") */
174#define EF_ATHEOS    0x7441   /* AtheOS Extra Field ID ("At") */
175#define EF_QDOS      0xfb4a   /* SMS/QDOS ("J\373") */
176#define EF_AOSVS     0x5356   /* AOS/VS ("VS") */
177#define EF_SPARK     0x4341   /* David Pilling's Acorn/SparkFS ("AC") */
178#define EF_THEOS     0x6854   /* THEOS ("Th") */
179#define EF_TANDEM    0x4154   /* Tandem NSK ("TA") */
180
181/* Definitions for extra field handling: */
182#define EF_SIZE_MAX  ((unsigned)0xFFFF) /* hard limit of total e.f. length */
183#define EB_HEADSIZE       4     /* length of a extra field block header */
184#define EB_ID             0     /* offset of block ID in header */
185#define EB_LEN            2     /* offset of data length field in header */
186#define EB_MEMCMPR_HSIZ   6     /* header length for memcompressed data */
187#define EB_DEFLAT_EXTRA  10     /* overhead for 64kByte "undeflatable" data */
188
189#define EB_UX_MINLEN      8     /* minimal "UX" field contains atime, mtime */
190#define EB_UX_ATIME       0     /* offset of atime in "UX" extra field data */
191#define EB_UX_MTIME       4     /* offset of mtime in "UX" extra field data */
192
193#define EB_UX_FULLSIZE    12    /* full "UX" field (atime, mtime, uid, gid) */
194#define EB_UX_UID         8     /* byte offset of UID in "UX" field data */
195#define EB_UX_GID         10    /* byte offset of GID in "UX" field data */
196
197#define EB_UT_MINLEN      1     /* minimal UT field contains Flags byte */
198#define EB_UT_FLAGS       0     /* byte offset of Flags field */
199#define EB_UT_TIME1       1     /* byte offset of 1st time value */
200#define EB_UT_FL_MTIME    (1 << 0)      /* mtime present */
201#define EB_UT_FL_ATIME    (1 << 1)      /* atime present */
202#define EB_UT_FL_CTIME    (1 << 2)      /* ctime present */
203#define EB_UT_LEN(n)      (EB_UT_MINLEN + 4 * (n))
204
205#define EB_UX2_MINLEN     4     /* minimal Ux field contains UID/GID */
206#define EB_UX2_UID        0     /* byte offset of UID in "Ux" field data */
207#define EB_UX2_GID        2     /* byte offset of GID in "Ux" field data */
208#define EB_UX2_VALID      (1 << 8)      /* UID/GID present */
209
210/* ASCII definitions for line terminators in text files: */
211#define LF     10        /* '\n' on ASCII machines; must be 10 due to EBCDIC */
212#define CR     13        /* '\r' on ASCII machines; must be 13 due to EBCDIC */
213#define CTRLZ  26        /* DOS & OS/2 EOF marker (used in fileio.c, vms.c) */
214
215/* return codes of password fetches (negative: user abort; positive: error) */
216#define IZ_PW_ENTERED   0       /* got some PWD string, use/try it */
217#define IZ_PW_CANCEL    -1      /* no password available (for this entry) */
218#define IZ_PW_CANCELALL -2      /* no password, skip any further PWD request */
219#define IZ_PW_ERROR     5       /* = PK_MEM2 : failure (no mem, no tty, ...) */
220#define IZ_PW_SKIPVERIFY IZ_PW_CANCEL   /* skip encrypt. passwd verification */
221
222/* mode flag values of password prompting function */
223#define ZP_PW_ENTER     0       /* request for encryption password */
224#define ZP_PW_VERIFY    1       /* request for reentering password */
225
226/* Error return codes and PERR macro */
227#include "ziperr.h"
228
229#if 0            /* Optimization: use the (const) result of crc32(0L,NULL,0) */
230#  define CRCVAL_INITIAL  crc32(0L, (uch *)NULL, 0)
231#else
232#  define CRCVAL_INITIAL  0L
233#endif
234
235#define DOSTIME_MINIMUM         ((ulg)0x00210000L)
236#define DOSTIME_2038_01_18      ((ulg)0x74320000L)
237
238
239/* Public globals */
240extern uch upper[256];          /* Country dependent case map table */
241extern uch lower[256];
242#ifdef EBCDIC
243extern ZCONST uch ascii[256];   /* EBCDIC <--> ASCII translation tables */
244extern ZCONST uch ebcdic[256];
245#endif /* EBCDIC */
246#ifdef IZ_ISO2OEM_ARRAY         /* ISO 8859-1 (Win CP 1252) --> OEM CP 850 */
247extern ZCONST uch Far iso2oem[128];
248#endif
249#ifdef IZ_OEM2ISO_ARRAY         /* OEM CP 850 --> ISO 8859-1 (Win CP 1252) */
250extern ZCONST uch Far oem2iso[128];
251#endif
252extern char errbuf[FNMAX+81];   /* Handy place to build error messages */
253extern int recurse;             /* Recurse into directories encountered */
254extern int dispose;             /* Remove files after put in zip file */
255extern int pathput;             /* Store path with name */
256
257#ifdef RISCOS
258extern int scanimage;           /* Scan through image files */
259#endif
260
261#define BEST -1                 /* Use best method (deflation or store) */
262#define STORE 0                 /* Store method */
263#define DEFLATE 8               /* Deflation method*/
264extern int method;              /* Restriction on compression method */
265
266extern int dosify;              /* Make new entries look like MSDOS */
267extern char *special;           /* Don't compress special suffixes */
268extern int verbose;             /* Report oddities in zip file structure */
269extern int fix;                 /* Fix the zip file */
270extern int adjust;              /* Adjust the unzipsfx'd zip file */
271extern int level;               /* Compression level */
272extern int translate_eol;       /* Translate end-of-line LF -> CR LF */
273#ifdef VMS
274   extern int vmsver;           /* Append VMS version number to file names */
275   extern int vms_native;       /* Store in VMS format */
276#endif /* VMS */
277#if defined(OS2) || defined(WIN32)
278   extern int use_longname_ea;   /* use the .LONGNAME EA as the file's name */
279#endif
280#if defined (QDOS) || defined(QLZIP)
281extern short qlflag;
282#endif
283extern int hidden_files;        /* process hidden and system files */
284extern int volume_label;        /* add volume label */
285extern int dirnames;            /* include directory names */
286extern int linkput;             /* Store symbolic links as such */
287extern int noisy;               /* False for quiet operation */
288extern int extra_fields;        /* do not create extra fields */
289#ifdef NTSD_EAS
290    extern int use_privileges;  /* use security privilege overrides */
291#endif
292extern char *key;               /* Scramble password or NULL */
293extern char *tempath;           /* Path for temporary files */
294extern FILE *mesg;              /* Where informational output goes */
295extern char *zipfile;           /* New or existing zip archive (zip file) */
296extern ulg zipbeg;              /* Starting offset of zip structures */
297extern ulg cenbeg;              /* Starting offset of central directory */
298extern struct zlist far *zfiles;/* Pointer to list of files in zip file */
299extern extent zcount;           /* Number of files in zip file */
300extern extent zcomlen;          /* Length of zip file comment */
301extern char *zcomment;          /* Zip file comment (not zero-terminated) */
302extern struct zlist far **zsort;/* List of files sorted by name */
303extern ulg tempzn;              /* Count of bytes written to output zip file */
304extern struct flist far *found; /* List of names found */
305extern struct flist far *far *fnxt;     /* Where to put next in found list */
306extern extent fcount;           /* Count of names in found list */
307
308extern struct plist *patterns;  /* List of patterns to be matched */
309extern unsigned pcount;         /* number of patterns */
310extern unsigned icount;         /* number of include only patterns */
311extern unsigned Rcount;         /* number of -R include patterns */
312
313#ifdef IZ_CHECK_TZ
314extern int zp_tz_is_valid;      /* signals "timezone info is available" */
315#endif
316#if (defined(MACOS) || defined(WINDLL))
317extern int zipstate;            /* flag "zipfile has been stat()'ed */
318#endif
319
320/* Diagnostic functions */
321#ifdef DEBUG
322# ifdef MSDOS
323#  undef  stderr
324#  define stderr stdout
325# endif
326#  define diag(where) fprintf(stderr, "zip diagnostic: %s\n", where)
327#  define Assert(cond,msg) {if(!(cond)) error(msg);}
328# ifdef THEOS
329#  define Trace(x) _fprintf x
330#  define Tracev(x) {if (verbose) _fprintf x ;}
331#  define Tracevv(x) {if (verbose>1) _fprintf x ;}
332#  define Tracec(c,x) {if (verbose && (c)) _fprintf x ;}
333#  define Tracecv(c,x) {if (verbose>1 && (c)) _fprintf x ;}
334# else
335#  define Trace(x) fprintf x
336#  define Tracev(x) {if (verbose) fprintf x ;}
337#  define Tracevv(x) {if (verbose>1) fprintf x ;}
338#  define Tracec(c,x) {if (verbose && (c)) fprintf x ;}
339#  define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;}
340# endif
341#else
342#  define diag(where)
343#  define Assert(cond,msg)
344#  define Trace(x)
345#  define Tracev(x)
346#  define Tracevv(x)
347#  define Tracec(c,x)
348#  define Tracecv(c,x)
349#endif
350
351#ifdef DEBUGNAMES
352#  define free(x) { int *v;Free(x); v=x;*v=0xdeadbeef;x=(void *)0xdeadbeef; }
353#endif
354
355/* Public function prototypes */
356
357#ifndef UTIL
358#ifdef USE_ZIPMAIN
359int zipmain OF((int, char **));
360#else
361int main OF((int, char **));
362#endif /* USE_ZIPMAIN */
363#endif
364
365#ifdef EBCDIC
366extern int aflag;
367#endif /* EBCDIC */
368#ifdef CMS_MVS
369extern int bflag;
370#endif /* CMS_MVS */
371void zipwarn  OF((ZCONST char *, ZCONST char *));
372void ziperr   OF((int, ZCONST char *));
373#ifdef UTIL
374#  define error(msg)    ziperr(ZE_LOGIC, msg)
375#else
376   void error OF((ZCONST char *));
377#  ifdef VMSCLI
378     void help OF((void));
379#  endif
380   int encr_passwd OF((int, char *, int, ZCONST char *));
381#endif
382
383        /* in zipup.c */
384#ifndef UTIL
385   int percent OF((ulg, ulg));
386   int zipup OF((struct zlist far *, FILE *));
387#  ifdef USE_ZLIB
388     void zl_deflate_free OF((void));
389#  else
390     void flush_outbuf OF((char *, unsigned *));
391     int seekable OF((void));
392     extern unsigned (*read_buf) OF((char *, unsigned int));
393#  endif /* !USE_ZLIB */
394#  ifdef ZP_NEED_MEMCOMPR
395     ulg memcompress OF((char *, ulg, char *, ulg));
396#  endif
397#endif /* !UTIL */
398
399        /* in zipfile.c */
400#ifndef UTIL
401   struct zlist far *zsearch OF((ZCONST char *));
402#  ifdef USE_EF_UT_TIME
403     int get_ef_ut_ztime OF((struct zlist far *, iztimes *));
404#  endif /* USE_EF_UT_TIME */
405   int trash OF((void));
406#endif /* !UTIL */
407char *ziptyp OF((char *));
408int readzipfile OF((void));
409int putlocal OF((struct zlist far *, FILE *));
410int putextended OF((struct zlist far *, FILE *));
411int putcentral OF((struct zlist far *, FILE *));
412int putend OF((unsigned, ulg, ulg, extent, char *, FILE *));
413int zipcopy OF((struct zlist far *, FILE *, FILE *));
414
415        /* in fileio.c */
416#ifndef UTIL
417   char *getnam OF((char *, FILE *));
418   struct flist far *fexpel OF((struct flist far *));
419   char *last OF((char *, int));
420   char *msname OF((char *));
421   int check_dup OF((void));
422   int filter OF((char *, int));
423   int newname OF((char *, int, int));
424#endif /* !UTIL */
425#if (!defined(UTIL) || defined(W32_STATROOT_FIX))
426   time_t dos2unixtime OF((ulg));
427#endif
428#ifndef UTIL
429   ulg dostime OF((int, int, int, int, int, int));
430   ulg unix2dostime OF((time_t *));
431   int issymlnk OF((ulg a));
432#  ifdef S_IFLNK
433#    define rdsymlnk(p,b,n) readlink(p,b,n)
434/*   extern int readlink OF((char *, char *, int)); */
435#  else /* !S_IFLNK */
436#    define rdsymlnk(p,b,n) (0)
437#  endif /* !S_IFLNK */
438#endif /* !UTIL */
439
440int destroy OF((char *));
441int replace OF((char *, char *));
442int getfileattr OF((char *));
443int setfileattr OF((char *, int));
444char *tempname OF((char *));
445int fcopy OF((FILE *, FILE *, ulg));
446
447#ifdef ZMEM
448   char *memset OF((char *, int, unsigned int));
449   char *memcpy OF((char *, char *, unsigned int));
450   int memcmp OF((char *, char *, unsigned int));
451#endif /* ZMEM */
452
453        /* in system dependent fileio code (<system>.c) */
454#ifndef UTIL
455#  ifdef PROCNAME
456     int wild OF((char *));
457#  endif
458   char *in2ex OF((char *));
459   char *ex2in OF((char *, int, int *));
460   int procname OF((char *, int));
461   void stamp OF((char *, ulg));
462   ulg filetime OF((char *, ulg *, long *, iztimes *));
463#if !(defined(VMS) && defined(VMS_PK_EXTRA))
464   int set_extra_field OF((struct zlist far *, iztimes *));
465#endif /* ?(VMS && VMS_PK_EXTRA) */
466   int deletedir OF((char *));
467#ifdef MY_ZCALLOC
468     zvoid far *zcalloc OF((unsigned int, unsigned int));
469     zvoid zcfree       OF((zvoid far *));
470#endif /* MY_ZCALLOC */
471#endif /* !UTIL */
472void version_local OF((void));
473
474        /* in util.c */
475#ifndef UTIL
476int   fseekable    OF((FILE *));
477char *isshexp      OF((char *));
478int   shmatch      OF((ZCONST char *, ZCONST char *, int));
479#if defined(DOS) || defined(WIN32)
480   int dosmatch    OF((ZCONST char *, ZCONST char *, int));
481#endif /* DOS || WIN32 */
482#endif /* !UTIL */
483void init_upper    OF((void));
484int  namecmp       OF((ZCONST char *string1, ZCONST char *string2));
485
486#ifdef EBCDIC
487char *strtoasc     OF((char *str1, ZCONST char *str2));
488char *strtoebc     OF((char *str1, ZCONST char *str2));
489char *memtoasc     OF((char *mem1, ZCONST char *mem2, unsigned len));
490char *memtoebc     OF((char *mem1, ZCONST char *mem2, unsigned len));
491#endif /* EBCDIC */
492#ifdef IZ_ISO2OEM_ARRAY
493char *str_iso_to_oem    OF((char *dst, ZCONST char *src));
494#endif
495#ifdef IZ_OEM2ISO_ARRAY
496char *str_oem_to_iso    OF((char *dst, ZCONST char *src));
497#endif
498
499zvoid far **search OF((ZCONST zvoid *, ZCONST zvoid far **, extent,
500                       int (*)(ZCONST zvoid *, ZCONST zvoid far *)));
501void envargs       OF((int *, char ***, char *, char *));
502void expand_args   OF((int *, char ***));
503
504#ifndef USE_ZLIB
505#ifndef UTIL
506        /* in crc32.c */
507ulg  crc32         OF((ulg, ZCONST uch *, extent));
508#endif /* !UTIL */
509
510        /* in crctab.c */
511ZCONST ulg near *get_crc_table OF((void));
512#ifdef DYNALLOC_CRCTAB
513void free_crc_table OF((void));
514#endif
515#endif /* !USE_ZLIB */
516
517#ifndef UTIL
518#ifndef USE_ZLIB
519        /* in deflate.c */
520void lm_init OF((int, ush *));
521void lm_free OF((void));
522ulg  deflate OF((void));
523
524        /* in trees.c */
525void     ct_init      OF((ush *, int *));
526int      ct_tally     OF((int, int));
527ulg      flush_block  OF((char far *, ulg, int));
528void     bi_init      OF((char *, unsigned int, int));
529#endif /* !USE_ZLIB */
530#endif /* !UTIL */
531
532        /* in system specific assembler code, replacing C code in trees.c */
533#if defined(ASMV) && defined(RISCOS)
534  void     send_bits    OF((int, int));
535  unsigned bi_reverse   OF((unsigned int, int));
536#endif /* ASMV && RISCOS */
537
538/*---------------------------------------------------------------------------
539    VMS-only functions:
540  ---------------------------------------------------------------------------*/
541#ifdef VMS
542   int    vms_stat        OF((char *, stat_t *));              /* vms.c */
543   void   vms_exit        OF((int));                           /* vms.c */
544#ifndef UTIL
545#ifdef VMSCLI
546   ulg    vms_zip_cmdline OF((int *, char ***));                /* cmdline.c */
547   void   VMSCLI_help     OF((void));                           /* cmdline.c */
548#endif /* VMSCLI */
549#endif /* !UTIL */
550#endif /* VMS */
551
552
553/*---------------------------------------------------------------------------
554    WIN32-only functions:
555  ---------------------------------------------------------------------------*/
556#ifdef WIN32
557   int    ZipIsWinNT         OF((void));                         /* win32.c */
558#endif /* WIN32 */
559
560#if (defined(WINDLL) || defined(DLL_ZIPAPI))
561/*---------------------------------------------------------------------------
562    Prototypes for public Zip API (DLL) functions.
563  ---------------------------------------------------------------------------*/
564#include "api.h"
565#endif /* WINDLL || DLL_ZIPAPI */
566
567#endif /* !__zip_h */
568/* end of zip.h */
569