Merge from vendor branch LIBSTDC++:
[dragonfly.git] / sys / i386 / boot / kzipboot / gzip.h
1 /*
2  * gzip.h -- common declarations for all gzip modules
3  * Copyright (C) 1992-1993 Jean-loup Gailly.
4  * Adapted for FreeBSD boot unpacker by Serge Vakulenko.
5  * This is free software; you can redistribute it and/or modify it under the
6  * terms of the GNU General Public License, see the file COPYING.
7  */
8
9 typedef unsigned char  uchar;
10 typedef unsigned long  ulong;
11
12 #define NULL 0
13
14 #define STORED          0               /* Compression methods */
15 #define COMPRESSED      1
16 #define PACKED          2
17 #define DEFLATED        8               /* methods 3 to 7 reserved */
18
19 #define INBUFSIZ        0x8000          /* input buffer size */
20
21 #define OUTBUFSIZ       16384           /* output buffer size */
22 #define OUTBUF_EXTRA    2048            /* required by unlzw() */
23
24 #define GZIP_MAGIC      "\037\213"      /* gzip files, 1F 8B */
25 #define OLD_GZIP_MAGIC  "\037\236"      /* gzip 0.5 = freeze 1.x */
26 #define PKZIP_MAGIC     "PK\003\004"    /* pkzip files */
27 #define PACK_MAGIC      "\037\036"      /* packed files */
28 #define LZW_MAGIC       "\037\235"      /* lzw files, 1F 9D */
29
30 /* gzip flag byte */
31 #define ASCII_FLAG      0x01            /* file probably ascii text */
32 #define CONTINUATION    0x02            /* cont. of multi-part gzip file */
33 #define EXTRA_FIELD     0x04            /* extra field present */
34 #define ORIG_NAME       0x08            /* original file name present */
35 #define COMMENT         0x10            /* file comment present */
36 #define ENCRYPTED       0x20            /* file is encrypted */
37 #define RESERVED        0xC0            /* reserved */
38
39 /* window size--must be a power of two, and */
40 /* at least 32K for zip's deflate method */
41 #define WSIZE           0x8000
42
43 extern int method;      /* compression method */
44
45 extern uchar *inbuf;   /* input buffer */
46 extern uchar *outbuf;  /* output buffer */
47 extern uchar *window;  /* Sliding window and suffix table (unlzw) */
48
49 extern unsigned insize; /* valid bytes in inbuf */
50 extern unsigned inptr;  /* index of next byte to be processed in inbuf */
51 extern unsigned outcnt; /* bytes in output buffer */
52
53 extern int pkzip;               /* set for a pkzip file */
54 extern int extended;            /* set if extended local header */
55 extern ulong crc;               /* shift register contents */
56 extern ulong output_ptr;        /* total output bytes */
57
58 extern void unzip (void);
59 extern void check_zipfile (void);
60 extern void updcrc (uchar *s, unsigned n);
61 extern void clear_bufs (void);
62 extern void fill_inbuf (void);
63 extern void flush_window (void);
64 extern void error (char *m);
65
66 static inline uchar get_byte ()
67 {
68         if (inptr >= insize)
69                 fill_inbuf ();
70         return (inbuf[inptr++]);
71 }
72
73 static inline void put_char (uchar c)
74 {
75         window[outcnt++] = c;
76         if (outcnt == WSIZE)
77                 flush_window();
78 }