|
|
1.1 ! root 1: /* ! 2: ! 3: Copyright (C) 1990-1992 Mark Adler, Richard B. Wales, Jean-loup Gailly, ! 4: Kai Uwe Rommel and Igor Mandrichenko. ! 5: Permission is granted to any individual or institution to use, copy, or ! 6: redistribute this software so long as all of the original files are included ! 7: unmodified, that it is not sold for profit, and that this copyright notice ! 8: is retained. ! 9: ! 10: */ ! 11: ! 12: /* ! 13: * zip.h by Mark Adler. ! 14: */ ! 15: ! 16: ! 17: /* Set up portability */ ! 18: #include "tailor.h" ! 19: ! 20: #define MIN_MATCH 3 ! 21: #define MAX_MATCH 258 ! 22: /* The minimum and maximum match lengths */ ! 23: ! 24: #ifndef WSIZE ! 25: # define WSIZE ((unsigned)32768) ! 26: #endif ! 27: /* Maximum window size = 32K. If you are really short of memory, compile ! 28: * with a smaller WSIZE but this reduces the compression ratio for files ! 29: * of size > WSIZE. WSIZE must be a power of two in the current implementation. ! 30: */ ! 31: ! 32: #define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) ! 33: /* Minimum amount of lookahead, except at the end of the input file. ! 34: * See deflate.c for comments about the MIN_MATCH+1. ! 35: */ ! 36: ! 37: #define MAX_DIST (WSIZE-MIN_LOOKAHEAD) ! 38: /* In order to simplify the code, particularly on 16 bit machines, match ! 39: * distances are limited to MAX_DIST instead of WSIZE. ! 40: */ ! 41: ! 42: /* Define malloc() and string functions */ ! 43: #ifdef MODERN ! 44: # include <string.h> ! 45: #else /* !MODERN */ ! 46: voidp *malloc(); ! 47: char *getenv(); ! 48: long atol(); ! 49: char *strcpy(); ! 50: char *strcat(); ! 51: char *strchr(); ! 52: char *strrchr(); ! 53: # ifndef ZMEM ! 54: char *memset(); ! 55: char *memcpy(); ! 56: # endif /* !ZMEM */ ! 57: #endif /* ?MODERN */ ! 58: ! 59: ! 60: /* Define fseek() commands */ ! 61: #ifndef SEEK_SET ! 62: # define SEEK_SET 0 ! 63: #endif /* !SEEK_SET */ ! 64: ! 65: #ifndef SEEK_CUR ! 66: # define SEEK_CUR 1 ! 67: #endif /* !SEEK_CUR */ ! 68: ! 69: ! 70: /* Forget FILENAME_MAX (incorrectly = 14 on some System V) */ ! 71: #ifdef MSDOS ! 72: # define FNMAX 256 ! 73: #else /* !MSDOS */ ! 74: # define FNMAX 1024 ! 75: #endif /* ?MSDOS */ ! 76: ! 77: ! 78: /* For setting stdout to binary */ ! 79: #ifdef MSDOS ! 80: # include <io.h> ! 81: # include <fcntl.h> ! 82: #endif /* MSDOS */ ! 83: ! 84: ! 85: /* Types centralized here for easy modification */ ! 86: #define local static /* More meaningful outside functions */ ! 87: typedef unsigned char uch; /* unsigned 8-bit value */ ! 88: typedef unsigned short ush; /* unsigned 16-bit value */ ! 89: typedef unsigned long ulg; /* unsigned 32-bit value */ ! 90: ! 91: ! 92: /* Lengths of headers after signatures in bytes */ ! 93: #define LOCHEAD 26 ! 94: #define CENHEAD 42 ! 95: #define ENDHEAD 18 ! 96: ! 97: ! 98: /* Structures for in-memory file information */ ! 99: struct zlist { ! 100: /* See central header in zipfile.c for what vem..off are */ ! 101: ush vem, ver, flg, how; ! 102: ulg tim, crc, siz, len; ! 103: extent nam, ext, cext, com; /* offset of ext must be >= LOCHEAD */ ! 104: ush dsk, att, lflg; /* offset of lflg must be >= LOCHEAD */ ! 105: ulg atx, off; ! 106: char *name; /* File name in zip file */ ! 107: char *extra; /* Extra field (set only if ext != 0) */ ! 108: char *cextra; /* Extra in central (set only if cext != 0) */ ! 109: char *comment; /* Comment (set only if com != 0) */ ! 110: char *zname; /* Name for new zip file header */ ! 111: int mark; /* Marker for files to operate on */ ! 112: int trash; /* Marker for files to delete */ ! 113: int dosflag; /* Set to force MSDOS file attributes */ ! 114: struct zlist far *nxt; /* Pointer to next header in list */ ! 115: }; ! 116: struct flist { ! 117: char *name; /* Pointer to zero-delimited name */ ! 118: char *zname; /* Name used for zip file headers */ ! 119: int dosflag; /* Set to force MSDOS file attributes */ ! 120: struct flist far * far *lst; /* Pointer to link pointing here */ ! 121: struct flist far *nxt; /* Link to next name */ ! 122: }; ! 123: ! 124: /* internal file attribute */ ! 125: #define UNKNOWN (-1) ! 126: #define BINARY 0 ! 127: #define ASCII 1 ! 128: ! 129: /* Error return codes and PERR macro */ ! 130: #include "ziperr.h" ! 131: ! 132: ! 133: /* Public globals */ ! 134: extern uch upper[256]; /* Country dependent case map table */ ! 135: extern uch lower[256]; ! 136: extern char errbuf[]; /* Handy place to build error messages */ ! 137: extern int recurse; /* Recurse into directories encountered */ ! 138: extern int pathput; /* Store path with name */ ! 139: ! 140: #define BEST -1 /* Use best method (deflation or store) */ ! 141: #define STORE 0 /* Store method */ ! 142: #define DEFLATE 8 /* Deflation method*/ ! 143: extern int method; /* Restriction on compression method */ ! 144: ! 145: extern int dosify; /* Make new entries look like MSDOS */ ! 146: extern char *special; /* Don't compress special suffixes */ ! 147: extern int verbose; /* Report oddities in zip file structure */ ! 148: extern int level; /* Compression level */ ! 149: extern int translate_eol; /* Translate end-of-line LF -> CR LF */ ! 150: #ifdef VMS ! 151: extern int vmsver; /* Append VMS version number to file names */ ! 152: extern int vms_native; /* Store in VMS formait */ ! 153: #endif /* VMS */ ! 154: #ifdef OS2 ! 155: extern int use_longname_ea; /* use the .LONGNAME EA as the file's name */ ! 156: #endif /* OS2 */ ! 157: extern int linkput; /* Store symbolic links as such */ ! 158: extern int noisy; /* False for quiet operation */ ! 159: extern char *key; /* Scramble password or NULL */ ! 160: extern char *tempath; /* Path for temporary files */ ! 161: extern FILE *mesg; /* Where informational output goes */ ! 162: extern char *zipfile; /* New or existing zip archive (zip file) */ ! 163: extern ulg zipbeg; /* Starting offset of zip structures */ ! 164: extern ulg cenbeg; /* Starting offset of central directory */ ! 165: extern struct zlist far *zfiles;/* Pointer to list of files in zip file */ ! 166: extern extent zcount; /* Number of files in zip file */ ! 167: extern extent zcomlen; /* Length of zip file comment */ ! 168: extern char *zcomment; /* Zip file comment (not zero-terminated) */ ! 169: extern struct zlist far **zsort;/* List of files sorted by name */ ! 170: extern ulg tempzn; /* Count of bytes written to output zip file */ ! 171: extern struct flist far *found; /* List of names found */ ! 172: extern struct flist far * far *fnxt; /* Where to put next in found list */ ! 173: extern extent fcount; /* Count of names in found list */ ! 174: ! 175: ! 176: /* Diagnostic functions */ ! 177: #ifdef DEBUG ! 178: # ifdef MSDOS ! 179: # undef stderr ! 180: # define stderr stdout ! 181: # endif ! 182: # define diag(where) fprintf(stderr, "zip diagnostic: %s\n", where) ! 183: # define Assert(cond,msg) {if(!(cond)) error(msg);} ! 184: # define Trace(x) fprintf x ! 185: # define Tracev(x) {if (verbose) fprintf x ;} ! 186: # define Tracevv(x) {if (verbose>1) fprintf x ;} ! 187: # define Tracec(c,x) {if (verbose && (c)) fprintf x ;} ! 188: # define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;} ! 189: #else ! 190: # define diag(where) ! 191: # define Assert(cond,msg) ! 192: # define Trace(x) ! 193: # define Tracev(x) ! 194: # define Tracevv(x) ! 195: # define Tracec(c,x) ! 196: # define Tracecv(c,x) ! 197: #endif ! 198: ! 199: ! 200: /* Public function prototypes */ ! 201: ! 202: /* in zip.c, zipcloak.c, or zipsplit.c */ ! 203: void warn OF((char *, char *)); ! 204: void err OF((int c, char *h)); ! 205: void error OF((char *h)); ! 206: ! 207: /* in zipup.c */ ! 208: int zipcopy OF((struct zlist far *, FILE *, FILE *)); ! 209: #ifndef UTIL ! 210: int percent OF((long, long)); ! 211: int zipup OF((struct zlist far *, FILE *)); ! 212: int file_read OF((char *buf, unsigned size)); ! 213: #endif /* !UTIL */ ! 214: ! 215: /* in zipfile.c */ ! 216: #ifndef UTIL ! 217: struct zlist far *zsearch OF((char *)); ! 218: int trash OF((void)); ! 219: #endif /* !UTIL */ ! 220: char *ziptyp OF((char *)); ! 221: int readzipfile OF((void)); ! 222: int putlocal OF((struct zlist far *, FILE *)); ! 223: int putextended OF((struct zlist far *, FILE *)); ! 224: int putcentral OF((struct zlist far *, FILE *)); ! 225: int putend OF((int, ulg, ulg, extent, char *, FILE *)); ! 226: ! 227: /* in fileio.c */ ! 228: #ifndef UTIL ! 229: # ifdef MSDOS ! 230: int wild OF((char *)); ! 231: # endif /* MSDOS */ ! 232: # ifdef VMS ! 233: int wild OF((char *)); ! 234: # endif /* VMS */ ! 235: char *getnam OF((char *)); ! 236: struct flist far *fexpel OF((struct flist far *)); ! 237: char *in2ex OF((char *)); ! 238: int exclude OF((void)); ! 239: int procname OF((char *)); ! 240: void stamp OF((char *, ulg)); ! 241: ulg dostime OF((int, int, int, int, int, int)); ! 242: ulg filetime OF((char *, ulg *, long *)); ! 243: int issymlnk OF((ulg a)); ! 244: # ifdef S_IFLNK ! 245: # define rdsymlnk(p,b,n) readlink(p,b,n) ! 246: extern int readlink OF((char *, char *, int)); ! 247: # else /* !S_IFLNK */ ! 248: # define rdsymlnk(p,b,n) (0) ! 249: # endif /* !S_IFLNK */ ! 250: int deletedir OF((char *)); ! 251: #endif /* !UTIL */ ! 252: int destroy OF((char *)); ! 253: int replace OF((char *, char *)); ! 254: int getfileattr OF((char *)); ! 255: int setfileattr OF((char *, int)); ! 256: char *tempname OF((char *)); ! 257: int fcopy OF((FILE *, FILE *, ulg)); ! 258: #ifdef CRYPT ! 259: # ifndef MSVMS ! 260: void echoff OF((int)); ! 261: void echon OF((void)); ! 262: # endif /* !MSVMS */ ! 263: char *getp OF((char *, char *, int)); ! 264: #endif /* !CRYPT */ ! 265: #ifdef ZMEM ! 266: char *memset OF((char *, int, unsigned int)); ! 267: char *memcpy OF((char *, char *, unsigned int)); ! 268: int memcmp OF((char *, char *, unsigned int)); ! 269: #endif /* ZMEM */ ! 270: ! 271: /* in crypt.c */ ! 272: #ifndef CRYPT ! 273: # define zfwrite fwrite ! 274: # define zputc putc ! 275: #else /* CRYPT */ ! 276: void crypthead OF((char *, ulg, FILE *)); ! 277: # ifdef UTIL ! 278: int zipcloak OF ((struct zlist far *, FILE *, FILE *, char *)); ! 279: int zipbare OF ((struct zlist far *, FILE *, FILE *, char *)); ! 280: # else /* !UTIL */ ! 281: unsigned zfwrite OF((voidp *, extent, extent, FILE *)); ! 282: int zencode OF((int c)); ! 283: extern char *key; ! 284: # define zputc(c,f) (putc(key!=NULL? zencode(c) : (c),(f))) ! 285: # endif /* ?UTIL */ ! 286: #endif /* ?CRYPT */ ! 287: ! 288: /* in util.c */ ! 289: char *isshexp OF((char *)); ! 290: int shmatch OF((char *, char *)); ! 291: #ifdef MSDOS ! 292: int dosmatch OF((char *, char *)); ! 293: #endif /* MSDOS */ ! 294: void init_upper OF((void)); ! 295: int namecmp OF((char *string1, char *string2)); ! 296: voidp far **search OF((voidp *, voidp far **, extent, ! 297: int (*)(voidp *, voidp far *))); ! 298: ulg crc32 OF((ulg, int)); ! 299: ulg updcrc OF((char *, extent)); ! 300: ! 301: #ifndef UTIL ! 302: /* in deflate.c */ ! 303: void lm_init OF((int pack_level, ush *flags)); ! 304: ulg deflate OF((void)); ! 305: ! 306: /* in trees.c */ ! 307: void ct_init OF((ush *attr, int *method)); ! 308: int ct_tally OF((int dist, int lc)); ! 309: ulg flush_block OF((char far *buf, ulg stored_len, int eof)); ! 310: ! 311: /* in bits.c */ ! 312: void bi_init OF((FILE *zipfile)); ! 313: void send_bits OF((int value, int length)); ! 314: unsigned bi_reverse OF((unsigned value, int length)); ! 315: void bi_windup OF((void)); ! 316: void copy_block OF((char far *buf, unsigned len, int header)); ! 317: int seekable OF((void)); ! 318: extern int (*read_buf) OF((char *buf, unsigned size)); ! 319: ulg memcompress OF((char *tgt, ulg tgtsize, char *src, ulg srcsize)); ! 320: ! 321: #endif /* !UTIL */ ! 322: ! 323: ! 324: /* end of zip.h */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.