1cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
2cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project/*-------------------------------------------------------------*/
3cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project/*--- Private header file for the library.                  ---*/
4cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project/*---                                       bzlib_private.h ---*/
5cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project/*-------------------------------------------------------------*/
6cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
7cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project/* ------------------------------------------------------------------
8cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   This file is part of bzip2/libbzip2, a program and library for
9cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   lossless, block-sorting data compression.
10cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
11172b266ed7845eac2edc7e7f8a72371356a9a277Nick Kralevich   bzip2/libbzip2 version 1.0.6 of 6 September 2010
12172b266ed7845eac2edc7e7f8a72371356a9a277Nick Kralevich   Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>
13cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
14cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   Please read the WARNING, DISCLAIMER and PATENTS sections in the
15cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   README file.
16cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
17cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   This program is released under the terms of the license contained
18cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   in the file LICENSE.
19cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   ------------------------------------------------------------------ */
20cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
21cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
22cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#ifndef _BZLIB_PRIVATE_H
23cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define _BZLIB_PRIVATE_H
24cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
25cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#include <stdlib.h>
26cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
27cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#ifndef BZ_NO_STDIO
28cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#include <stdio.h>
29cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#include <ctype.h>
30cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#include <string.h>
31cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#endif
32cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
33cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#include "bzlib.h"
34cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
35cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
36cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
37cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project/*-- General stuff. --*/
38cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
39172b266ed7845eac2edc7e7f8a72371356a9a277Nick Kralevich#define BZ_VERSION  "1.0.6, 6-Sept-2010"
40cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
41cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projecttypedef char            Char;
42cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projecttypedef unsigned char   Bool;
43cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projecttypedef unsigned char   UChar;
44cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projecttypedef int             Int32;
45cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projecttypedef unsigned int    UInt32;
46cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projecttypedef short           Int16;
47cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projecttypedef unsigned short  UInt16;
48cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
49cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define True  ((Bool)1)
50cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define False ((Bool)0)
51cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
52cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#ifndef __GNUC__
53cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define __inline__  /* */
54cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#endif
55cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
56cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#ifndef BZ_NO_STDIO
57cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
58cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectextern void BZ2_bz__AssertH__fail ( int errcode );
59cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define AssertH(cond,errcode) \
60cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   { if (!(cond)) BZ2_bz__AssertH__fail ( errcode ); }
61cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
62cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#if BZ_DEBUG
63cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define AssertD(cond,msg) \
64cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   { if (!(cond)) {       \
65cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      fprintf ( stderr,   \
66cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project        "\n\nlibbzip2(debug build): internal error\n\t%s\n", msg );\
67cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      exit(1); \
68cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   }}
69cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#else
70cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define AssertD(cond,msg) /* */
71cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#endif
72cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
73cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define VPrintf0(zf) \
74cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   fprintf(stderr,zf)
75cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define VPrintf1(zf,za1) \
76cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   fprintf(stderr,zf,za1)
77cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define VPrintf2(zf,za1,za2) \
78cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   fprintf(stderr,zf,za1,za2)
79cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define VPrintf3(zf,za1,za2,za3) \
80cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   fprintf(stderr,zf,za1,za2,za3)
81cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define VPrintf4(zf,za1,za2,za3,za4) \
82cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   fprintf(stderr,zf,za1,za2,za3,za4)
83cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define VPrintf5(zf,za1,za2,za3,za4,za5) \
84cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   fprintf(stderr,zf,za1,za2,za3,za4,za5)
85cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
86cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#else
87cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
88cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectextern void bz_internal_error ( int errcode );
89cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define AssertH(cond,errcode) \
90cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   { if (!(cond)) bz_internal_error ( errcode ); }
91cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define AssertD(cond,msg)                do { } while (0)
92cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define VPrintf0(zf)                     do { } while (0)
93cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define VPrintf1(zf,za1)                 do { } while (0)
94cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define VPrintf2(zf,za1,za2)             do { } while (0)
95cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define VPrintf3(zf,za1,za2,za3)         do { } while (0)
96cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define VPrintf4(zf,za1,za2,za3,za4)     do { } while (0)
97cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define VPrintf5(zf,za1,za2,za3,za4,za5) do { } while (0)
98cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
99cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#endif
100cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
101cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
102cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZALLOC(nnn) (strm->bzalloc)(strm->opaque,(nnn),1)
103cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZFREE(ppp)  (strm->bzfree)(strm->opaque,(ppp))
104cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
105cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
106cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project/*-- Header bytes. --*/
107cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
108cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_HDR_B 0x42   /* 'B' */
109cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_HDR_Z 0x5a   /* 'Z' */
110cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_HDR_h 0x68   /* 'h' */
111cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_HDR_0 0x30   /* '0' */
112cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
113cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project/*-- Constants for the back end. --*/
114cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
115cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_MAX_ALPHA_SIZE 258
116cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_MAX_CODE_LEN    23
117cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
118cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_RUNA 0
119cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_RUNB 1
120cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
121cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_N_GROUPS 6
122cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_G_SIZE   50
123cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_N_ITERS  4
124cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
125cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_MAX_SELECTORS (2 + (900000 / BZ_G_SIZE))
126cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
127cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
128cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
129cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project/*-- Stuff for randomising repetitive blocks. --*/
130cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
131cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectextern Int32 BZ2_rNums[512];
132cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
133cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_RAND_DECLS                          \
134cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   Int32 rNToGo;                               \
135cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   Int32 rTPos                                 \
136cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
137cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_RAND_INIT_MASK                      \
138cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   s->rNToGo = 0;                              \
139cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   s->rTPos  = 0                               \
140cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
141cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_RAND_MASK ((s->rNToGo == 1) ? 1 : 0)
142cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
143cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_RAND_UPD_MASK                       \
144cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   if (s->rNToGo == 0) {                       \
145cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      s->rNToGo = BZ2_rNums[s->rTPos];         \
146cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      s->rTPos++;                              \
147cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      if (s->rTPos == 512) s->rTPos = 0;       \
148cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   }                                           \
149cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   s->rNToGo--;
150cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
151cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
152cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
153cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project/*-- Stuff for doing CRCs. --*/
154cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
155cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectextern UInt32 BZ2_crc32Table[256];
156cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
157cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_INITIALISE_CRC(crcVar)              \
158cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project{                                              \
159cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   crcVar = 0xffffffffL;                       \
160cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project}
161cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
162cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_FINALISE_CRC(crcVar)                \
163cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project{                                              \
164cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   crcVar = ~(crcVar);                         \
165cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project}
166cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
167cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_UPDATE_CRC(crcVar,cha)              \
168cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project{                                              \
169cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   crcVar = (crcVar << 8) ^                    \
170cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project            BZ2_crc32Table[(crcVar >> 24) ^    \
171cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project                           ((UChar)cha)];      \
172cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project}
173cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
174cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
175cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
176cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project/*-- States and modes for compression. --*/
177cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
178cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_M_IDLE      1
179cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_M_RUNNING   2
180cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_M_FLUSHING  3
181cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_M_FINISHING 4
182cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
183cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_S_OUTPUT    1
184cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_S_INPUT     2
185cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
186cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_N_RADIX 2
187cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_N_QSORT 12
188cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_N_SHELL 18
189cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_N_OVERSHOOT (BZ_N_RADIX + BZ_N_QSORT + BZ_N_SHELL + 2)
190cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
191cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
192cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
193cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
194cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project/*-- Structure holding all the compression-side stuff. --*/
195cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
196cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projecttypedef
197cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   struct {
198cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      /* pointer back to the struct bz_stream */
199cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      bz_stream* strm;
200cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
201cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      /* mode this stream is in, and whether inputting */
202cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      /* or outputting data */
203cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    mode;
204cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    state;
205cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
206cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      /* remembers avail_in when flush/finish requested */
207cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      UInt32   avail_in_expect;
208cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
209cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      /* for doing the block sorting */
210cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      UInt32*  arr1;
211cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      UInt32*  arr2;
212cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      UInt32*  ftab;
213cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    origPtr;
214cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
215cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      /* aliases for arr1 and arr2 */
216cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      UInt32*  ptr;
217cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      UChar*   block;
218cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      UInt16*  mtfv;
219cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      UChar*   zbits;
220cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
221cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      /* for deciding when to use the fallback sorting algorithm */
222cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    workFactor;
223cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
224cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      /* run-length-encoding of the input */
225cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      UInt32   state_in_ch;
226cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    state_in_len;
227cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      BZ_RAND_DECLS;
228cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
229cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      /* input and output limits and current posns */
230cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    nblock;
231cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    nblockMAX;
232cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    numZ;
233cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    state_out_pos;
234cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
235cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      /* map of bytes used in block */
236cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    nInUse;
237cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Bool     inUse[256];
238cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      UChar    unseqToSeq[256];
239cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
240cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      /* the buffer for bit stream creation */
241cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      UInt32   bsBuff;
242cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    bsLive;
243cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
244cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      /* block and combined CRCs */
245cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      UInt32   blockCRC;
246cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      UInt32   combinedCRC;
247cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
248cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      /* misc administratium */
249cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    verbosity;
250cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    blockNo;
251cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    blockSize100k;
252cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
253cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      /* stuff for coding the MTF values */
254cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    nMTF;
255cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    mtfFreq    [BZ_MAX_ALPHA_SIZE];
256cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      UChar    selector   [BZ_MAX_SELECTORS];
257cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      UChar    selectorMtf[BZ_MAX_SELECTORS];
258cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
259cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      UChar    len     [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
260cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    code    [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
261cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    rfreq   [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
262cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      /* second dimension: only 3 needed; 4 makes index calculations faster */
263cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      UInt32   len_pack[BZ_MAX_ALPHA_SIZE][4];
264cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
265cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   }
266cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   EState;
267cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
268cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
269cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
270cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project/*-- externs for compression. --*/
271cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
272cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectextern void
273cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source ProjectBZ2_blockSort ( EState* );
274cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
275cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectextern void
276cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source ProjectBZ2_compressBlock ( EState*, Bool );
277cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
278cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectextern void
279cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source ProjectBZ2_bsInitWrite ( EState* );
280cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
281cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectextern void
282cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source ProjectBZ2_hbAssignCodes ( Int32*, UChar*, Int32, Int32, Int32 );
283cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
284cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectextern void
285cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source ProjectBZ2_hbMakeCodeLengths ( UChar*, Int32*, Int32, Int32 );
286cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
287cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
288cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
289cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project/*-- states for decompression. --*/
290cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
291cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_IDLE        1
292cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_OUTPUT      2
293cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
294cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_MAGIC_1     10
295cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_MAGIC_2     11
296cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_MAGIC_3     12
297cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_MAGIC_4     13
298cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_BLKHDR_1    14
299cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_BLKHDR_2    15
300cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_BLKHDR_3    16
301cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_BLKHDR_4    17
302cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_BLKHDR_5    18
303cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_BLKHDR_6    19
304cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_BCRC_1      20
305cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_BCRC_2      21
306cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_BCRC_3      22
307cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_BCRC_4      23
308cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_RANDBIT     24
309cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_ORIGPTR_1   25
310cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_ORIGPTR_2   26
311cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_ORIGPTR_3   27
312cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_MAPPING_1   28
313cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_MAPPING_2   29
314cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_SELECTOR_1  30
315cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_SELECTOR_2  31
316cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_SELECTOR_3  32
317cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_CODING_1    33
318cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_CODING_2    34
319cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_CODING_3    35
320cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_MTF_1       36
321cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_MTF_2       37
322cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_MTF_3       38
323cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_MTF_4       39
324cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_MTF_5       40
325cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_MTF_6       41
326cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_ENDHDR_2    42
327cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_ENDHDR_3    43
328cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_ENDHDR_4    44
329cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_ENDHDR_5    45
330cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_ENDHDR_6    46
331cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_CCRC_1      47
332cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_CCRC_2      48
333cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_CCRC_3      49
334cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_X_CCRC_4      50
335cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
336cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
337cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
338cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project/*-- Constants for the fast MTF decoder. --*/
339cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
340cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define MTFA_SIZE 4096
341cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define MTFL_SIZE 16
342cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
343cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
344cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
345cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project/*-- Structure holding all the decompression-side stuff. --*/
346cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
347cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projecttypedef
348cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   struct {
349cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      /* pointer back to the struct bz_stream */
350cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      bz_stream* strm;
351cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
352cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      /* state indicator for this stream */
353cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    state;
354cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
355cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      /* for doing the final run-length decoding */
356cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      UChar    state_out_ch;
357cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    state_out_len;
358cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Bool     blockRandomised;
359cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      BZ_RAND_DECLS;
360cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
361cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      /* the buffer for bit stream reading */
362cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      UInt32   bsBuff;
363cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    bsLive;
364cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
365cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      /* misc administratium */
366cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    blockSize100k;
367cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Bool     smallDecompress;
368cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    currBlockNo;
369cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    verbosity;
370cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
371cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      /* for undoing the Burrows-Wheeler transform */
372cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    origPtr;
373cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      UInt32   tPos;
374cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    k0;
375cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    unzftab[256];
376cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    nblock_used;
377cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    cftab[257];
378cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    cftabCopy[257];
379cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
380cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      /* for undoing the Burrows-Wheeler transform (FAST) */
381cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      UInt32   *tt;
382cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
383cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      /* for undoing the Burrows-Wheeler transform (SMALL) */
384cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      UInt16   *ll16;
385cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      UChar    *ll4;
386cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
387cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      /* stored and calculated CRCs */
388cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      UInt32   storedBlockCRC;
389cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      UInt32   storedCombinedCRC;
390cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      UInt32   calculatedBlockCRC;
391cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      UInt32   calculatedCombinedCRC;
392cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
393cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      /* map of bytes used in block */
394cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    nInUse;
395cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Bool     inUse[256];
396cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Bool     inUse16[16];
397cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      UChar    seqToUnseq[256];
398cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
399cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      /* for decoding the MTF values */
400cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      UChar    mtfa   [MTFA_SIZE];
401cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    mtfbase[256 / MTFL_SIZE];
402cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      UChar    selector   [BZ_MAX_SELECTORS];
403cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      UChar    selectorMtf[BZ_MAX_SELECTORS];
404cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      UChar    len  [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
405cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
406cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    limit  [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
407cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    base   [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
408cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    perm   [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
409cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    minLens[BZ_N_GROUPS];
410cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
411cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      /* save area for scalars in the main decompress code */
412cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    save_i;
413cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    save_j;
414cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    save_t;
415cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    save_alphaSize;
416cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    save_nGroups;
417cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    save_nSelectors;
418cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    save_EOB;
419cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    save_groupNo;
420cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    save_groupPos;
421cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    save_nextSym;
422cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    save_nblockMAX;
423cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    save_nblock;
424cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    save_es;
425cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    save_N;
426cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    save_curr;
427cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    save_zt;
428cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    save_zn;
429cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    save_zvec;
430cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    save_zj;
431cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    save_gSel;
432cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32    save_gMinlen;
433cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32*   save_gLimit;
434cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32*   save_gBase;
435cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project      Int32*   save_gPerm;
436cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
437cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   }
438cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   DState;
439cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
440cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
441cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
442cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project/*-- Macros for decompression. --*/
443cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
444cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_GET_FAST(cccc)                     \
445cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project    /* c_tPos is unsigned, hence test < 0 is pointless. */ \
446cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project    if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \
447cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project    s->tPos = s->tt[s->tPos];                 \
448cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project    cccc = (UChar)(s->tPos & 0xff);           \
449cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project    s->tPos >>= 8;
450cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
451cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_GET_FAST_C(cccc)                   \
452cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project    /* c_tPos is unsigned, hence test < 0 is pointless. */ \
453cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project    if (c_tPos >= (UInt32)100000 * (UInt32)ro_blockSize100k) return True; \
454cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project    c_tPos = c_tt[c_tPos];                    \
455cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project    cccc = (UChar)(c_tPos & 0xff);            \
456cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project    c_tPos >>= 8;
457cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
458cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define SET_LL4(i,n)                                          \
459cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   { if (((i) & 0x1) == 0)                                    \
460cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project        s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0xf0) | (n); else    \
461cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project        s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0x0f) | ((n) << 4);  \
462cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   }
463cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
464cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define GET_LL4(i)                             \
465cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   ((((UInt32)(s->ll4[(i) >> 1])) >> (((i) << 2) & 0x4)) & 0xF)
466cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
467cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define SET_LL(i,n)                          \
468cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   { s->ll16[i] = (UInt16)(n & 0x0000ffff);  \
469cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project     SET_LL4(i, n >> 16);                    \
470cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   }
471cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
472cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define GET_LL(i) \
473cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   (((UInt32)s->ll16[i]) | (GET_LL4(i) << 16))
474cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
475cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define BZ_GET_SMALL(cccc)                            \
476cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project    /* c_tPos is unsigned, hence test < 0 is pointless. */ \
477cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project    if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \
478cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project    cccc = BZ2_indexIntoF ( s->tPos, s->cftab );    \
479cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project    s->tPos = GET_LL(s->tPos);
480cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
481cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
482cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project/*-- externs for decompression. --*/
483cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
484cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectextern Int32
485cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source ProjectBZ2_indexIntoF ( Int32, Int32* );
486cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
487cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectextern Int32
488cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source ProjectBZ2_decompress ( DState* );
489cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
490cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectextern void
491cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source ProjectBZ2_hbCreateDecodeTables ( Int32*, Int32*, Int32*, UChar*,
492cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project                           Int32,  Int32, Int32 );
493cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
494cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
495cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#endif
496cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
497cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
498cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project/*-- BZ_NO_STDIO seems to make NULL disappear on some platforms. --*/
499cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
500cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#ifdef BZ_NO_STDIO
501cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#ifndef NULL
502cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#define NULL 0
503cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#endif
504cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#endif
505cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
506cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
507cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project/*-------------------------------------------------------------*/
508cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project/*--- end                                   bzlib_private.h ---*/
509cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project/*-------------------------------------------------------------*/
510