Magellan Linux

Annotation of /trunk/mkinitrd-magellan/busybox/archival/bz/bzlib_private.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 816 - (hide annotations) (download)
Fri Apr 24 18:33:46 2009 UTC (15 years ago) by niro
File MIME type: text/plain
File size: 5364 byte(s)
-updated to busybox-1.13.4
1 niro 816 /*
2     * bzip2 is written by Julian Seward <jseward@bzip.org>.
3     * Adapted for busybox by Denys Vlasenko <vda.linux@googlemail.com>.
4     * See README and LICENSE files in this directory for more information.
5     */
6    
7     /*-------------------------------------------------------------*/
8     /*--- Private header file for the library. ---*/
9     /*--- bzlib_private.h ---*/
10     /*-------------------------------------------------------------*/
11    
12     /* ------------------------------------------------------------------
13     This file is part of bzip2/libbzip2, a program and library for
14     lossless, block-sorting data compression.
15    
16     bzip2/libbzip2 version 1.0.4 of 20 December 2006
17     Copyright (C) 1996-2006 Julian Seward <jseward@bzip.org>
18    
19     Please read the WARNING, DISCLAIMER and PATENTS sections in the
20     README file.
21    
22     This program is released under the terms of the license contained
23     in the file LICENSE.
24     ------------------------------------------------------------------ */
25    
26     /* #include "bzlib.h" */
27    
28     /*-- General stuff. --*/
29    
30     typedef unsigned char Bool;
31    
32     #define True ((Bool)1)
33     #define False ((Bool)0)
34    
35     #if BZ_LIGHT_DEBUG
36     static void bz_assert_fail(int errcode) NORETURN;
37     #define AssertH(cond, errcode) \
38     do { \
39     if (!(cond)) \
40     bz_assert_fail(errcode); \
41     } while (0)
42     #else
43     #define AssertH(cond, msg) do { } while (0)
44     #endif
45    
46     #if BZ_DEBUG
47     #define AssertD(cond, msg) \
48     do { \
49     if (!(cond)) \
50     bb_error_msg_and_die("(debug build): internal error %s", msg); \
51     } while (0)
52     #else
53     #define AssertD(cond, msg) do { } while (0)
54     #endif
55    
56    
57     /*-- Header bytes. --*/
58    
59     #define BZ_HDR_B 0x42 /* 'B' */
60     #define BZ_HDR_Z 0x5a /* 'Z' */
61     #define BZ_HDR_h 0x68 /* 'h' */
62     #define BZ_HDR_0 0x30 /* '0' */
63    
64     #define BZ_HDR_BZh0 0x425a6830
65    
66     /*-- Constants for the back end. --*/
67    
68     #define BZ_MAX_ALPHA_SIZE 258
69     #define BZ_MAX_CODE_LEN 23
70    
71     #define BZ_RUNA 0
72     #define BZ_RUNB 1
73    
74     #define BZ_N_GROUPS 6
75     #define BZ_G_SIZE 50
76     #define BZ_N_ITERS 4
77    
78     #define BZ_MAX_SELECTORS (2 + (900000 / BZ_G_SIZE))
79    
80    
81     /*-- Stuff for doing CRCs. --*/
82    
83     #define BZ_INITIALISE_CRC(crcVar) \
84     { \
85     crcVar = 0xffffffffL; \
86     }
87    
88     #define BZ_FINALISE_CRC(crcVar) \
89     { \
90     crcVar = ~(crcVar); \
91     }
92    
93     #define BZ_UPDATE_CRC(s, crcVar, cha) \
94     { \
95     crcVar = (crcVar << 8) ^ s->crc32table[(crcVar >> 24) ^ ((uint8_t)cha)]; \
96     }
97    
98    
99     /*-- States and modes for compression. --*/
100    
101     #define BZ_M_IDLE 1
102     #define BZ_M_RUNNING 2
103     #define BZ_M_FLUSHING 3
104     #define BZ_M_FINISHING 4
105    
106     #define BZ_S_OUTPUT 1
107     #define BZ_S_INPUT 2
108    
109     #define BZ_N_RADIX 2
110     #define BZ_N_QSORT 12
111     #define BZ_N_SHELL 18
112     #define BZ_N_OVERSHOOT (BZ_N_RADIX + BZ_N_QSORT + BZ_N_SHELL + 2)
113    
114    
115     /*-- Structure holding all the compression-side stuff. --*/
116    
117     typedef struct EState {
118     /* pointer back to the struct bz_stream */
119     bz_stream *strm;
120    
121     /* mode this stream is in, and whether inputting */
122     /* or outputting data */
123     int32_t mode;
124     int32_t state;
125    
126     /* remembers avail_in when flush/finish requested */
127     /* bbox: not needed, strm->avail_in always has the same value */
128     /* commented out with '//#' throughout the code */
129     /* uint32_t avail_in_expect; */
130    
131     /* for doing the block sorting */
132     int32_t origPtr;
133     uint32_t *arr1;
134     uint32_t *arr2;
135     uint32_t *ftab;
136    
137     /* aliases for arr1 and arr2 */
138     uint32_t *ptr;
139     uint8_t *block;
140     uint16_t *mtfv;
141     uint8_t *zbits;
142    
143     /* guess what */
144     uint32_t *crc32table;
145    
146     /* run-length-encoding of the input */
147     uint32_t state_in_ch;
148     int32_t state_in_len;
149    
150     /* input and output limits and current posns */
151     int32_t nblock;
152     int32_t nblockMAX;
153     int32_t numZ;
154     int32_t state_out_pos;
155    
156     /* the buffer for bit stream creation */
157     uint32_t bsBuff;
158     int32_t bsLive;
159    
160     /* block and combined CRCs */
161     uint32_t blockCRC;
162     uint32_t combinedCRC;
163    
164     /* misc administratium */
165     int32_t blockNo;
166     int32_t blockSize100k;
167    
168     /* stuff for coding the MTF values */
169     int32_t nMTF;
170    
171     /* map of bytes used in block */
172     int32_t nInUse;
173     Bool inUse[256] ALIGNED(sizeof(long));
174     uint8_t unseqToSeq[256];
175    
176     /* stuff for coding the MTF values */
177     int32_t mtfFreq [BZ_MAX_ALPHA_SIZE];
178     uint8_t selector [BZ_MAX_SELECTORS];
179     uint8_t selectorMtf[BZ_MAX_SELECTORS];
180    
181     uint8_t len[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
182    
183     /* stack-saving measures: these can be local, but they are too big */
184     int32_t sendMTFValues__code [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
185     int32_t sendMTFValues__rfreq[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
186     #if CONFIG_BZIP2_FEATURE_SPEED >= 5
187     /* second dimension: only 3 needed; 4 makes index calculations faster */
188     uint32_t sendMTFValues__len_pack[BZ_MAX_ALPHA_SIZE][4];
189     #endif
190     int32_t BZ2_hbMakeCodeLengths__heap [BZ_MAX_ALPHA_SIZE + 2];
191     int32_t BZ2_hbMakeCodeLengths__weight[BZ_MAX_ALPHA_SIZE * 2];
192     int32_t BZ2_hbMakeCodeLengths__parent[BZ_MAX_ALPHA_SIZE * 2];
193    
194     int32_t mainSort__runningOrder[256];
195     int32_t mainSort__copyStart[256];
196     int32_t mainSort__copyEnd[256];
197     } EState;
198    
199    
200     /*-- compression. --*/
201    
202     static void
203     BZ2_blockSort(EState*);
204    
205     static void
206     BZ2_compressBlock(EState*, int);
207    
208     static void
209     BZ2_bsInitWrite(EState*);
210    
211     static void
212     BZ2_hbAssignCodes(int32_t*, uint8_t*, int32_t, int32_t, int32_t);
213    
214     static void
215     BZ2_hbMakeCodeLengths(EState*, uint8_t*, int32_t*, int32_t, int32_t);
216    
217     /*-------------------------------------------------------------*/
218     /*--- end bzlib_private.h ---*/
219     /*-------------------------------------------------------------*/