Annotation of pgp/src/zunzip.h, revision 1.1.1.4

1.1.1.2   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: 
1.1.1.4 ! root       18: #include       <stdlib.h>
1.1.1.3   root       19: #include       "usuals.h"
                     20: #include       "system.h"
1.1.1.2   root       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: 
1.1.1.3   root      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: 
1.1.1.2   root      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: int    FillBitBuffer             __( (void) );
                    235: int    ReadByte                  __( (UWORD *x) );
                    236: int    FlushOutput               __( (void) );
                    237: 
                    238: /*---------------------------------------------------------------------------
                    239:     Uncompression functions (all internal compression routines, enclosed in
                    240:     comments below, are prototyped in their respective files and are invisi-
                    241:     ble to external functions):
                    242:   ---------------------------------------------------------------------------*/
                    243: 
                    244: void   inflate                  __( (void) );                  /* inflate.c */
                    245: int unzip                              __( ( FILE *inFile, FILE *outFile ) );
                    246: 
                    247: /************/
                    248: /*  Macros  */
                    249: /************/
                    250: 
                    251: #ifndef min    /* MSC defines this in stdlib.h */
                    252: #  define min(a,b)   ((a) < (b) ? (a) : (b))
                    253: #endif
                    254: 
                    255: #define OUTB(intc) {*outptr++=intc; if (++outcnt==OUTBUFSIZ) FlushOutput();}
                    256: 
                    257: /*
                    258:  *  macro OUTB(intc)
                    259:  *  {
                    260:  *      *outptr++ = intc;
                    261:  *      if (++outcnt == OUTBUFSIZ)
                    262:  *          FlushOutput();
                    263:  *  }
                    264:  *
                    265:  */
                    266: 
                    267: 
1.1.1.3   root      268: #define READBIT(nbits,zdest) \
                    269:        do \
                    270:        { \
                    271:                if(nbits>bits_left) \
                    272:                        FillBitBuffer(); \
                    273:                zdest=(int)(bitbuf&mask_bits[nbits]); \
                    274:                bitbuf>>=nbits; \
                    275:                bits_left-=nbits; \
                    276:        } while(0)
1.1.1.2   root      277: 
                    278: /*
                    279:  * macro READBIT(nbits,zdest)
                    280:  *  {
                    281:  *      if (nbits > bits_left)
                    282:  *          FillBitBuffer();
                    283:  *      zdest = (int)(bitbuf & mask_bits[nbits]);
                    284:  *      bitbuf >>= nbits;
                    285:  *      bits_left -= nbits;
                    286:  *  }
                    287:  *
                    288:  */
                    289: 
                    290: #define PEEKBIT(nbits) ( nbits > bits_left ? (FillBitBuffer(), bitbuf & mask_bits[nbits]) : bitbuf & mask_bits[nbits] )
                    291: 
                    292: /*************/
                    293: /*  Globals  */
                    294: /*************/
                    295: 
                    296:    extern longint   csize;
                    297: 
                    298:    extern ULONG     mask_bits[];
                    299: 
                    300:    extern byte      *inbuf;
                    301:    extern byte      *inptr;
                    302:    extern int       incnt;
                    303:    extern ULONG     bitbuf;
                    304:    extern int       bits_left;
                    305:    extern boolean   zipeof;
                    306:    extern int       zipfd;
                    307:    extern char      zipfn[];
                    308: 
                    309:    extern byte      *outbuf;
                    310:    extern byte      *outptr;
                    311:    extern byte      *outout;
                    312:    extern longint   outpos;
                    313:    extern int       outcnt;
                    314:    extern int       outfd;
                    315:    extern int       disk_full;

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.