1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned int size_t;
3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef long int wchar_t;
5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct
8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  {
9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    int quot;
10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    int rem;
11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  } div_t;
12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct
16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  {
17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    long int quot;
18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    long int rem;
19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  } ldiv_t;
20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern size_t __ctype_get_mb_cur_max (void) __attribute__ ((__nothrow__));
25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern double atof (__const char *__nptr)
30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int atoi (__const char *__nptr)
33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern long int atol (__const char *__nptr)
36ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
37ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
38ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
39ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
40ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
41ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
42ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ extern long long int atoll (__const char *__nptr)
43ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
44ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
45ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
46ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
47ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
48ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
49ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern double strtod (__const char *__restrict __nptr,
50ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        char **__restrict __endptr) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
51ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
52ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
53ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
54ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
55ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern long int strtol (__const char *__restrict __nptr,
56ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   char **__restrict __endptr, int __base)
57ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
58ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
59ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern unsigned long int strtoul (__const char *__restrict __nptr,
60ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      char **__restrict __endptr, int __base)
61ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
62ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
63ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
64ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
65ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
66ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__
67ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern long long int strtoq (__const char *__restrict __nptr,
68ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        char **__restrict __endptr, int __base)
69ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
70ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
71ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__
72ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern unsigned long long int strtouq (__const char *__restrict __nptr,
73ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown           char **__restrict __endptr, int __base)
74ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
75ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
76ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
77ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
78ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
79ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
80ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__
81ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern long long int strtoll (__const char *__restrict __nptr,
82ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         char **__restrict __endptr, int __base)
83ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
84ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
85ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__
86ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern unsigned long long int strtoull (__const char *__restrict __nptr,
87ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     char **__restrict __endptr, int __base)
88ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
89ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
90ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
91ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern double __strtod_internal (__const char *__restrict __nptr,
92ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     char **__restrict __endptr, int __group)
93ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
94ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern float __strtof_internal (__const char *__restrict __nptr,
95ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    char **__restrict __endptr, int __group)
96ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
97ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern long double __strtold_internal (__const char *__restrict __nptr,
98ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown           char **__restrict __endptr,
99ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown           int __group) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
100ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
101ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern long int __strtol_internal (__const char *__restrict __nptr,
102ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown       char **__restrict __endptr,
103ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown       int __base, int __group)
104ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
105ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
106ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
107ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
108ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern unsigned long int __strtoul_internal (__const char *__restrict __nptr,
109ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          char **__restrict __endptr,
110ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          int __base, int __group)
111ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
112ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
113ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
114ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
115ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
116ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__
117ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern long long int __strtoll_internal (__const char *__restrict __nptr,
118ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      char **__restrict __endptr,
119ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      int __base, int __group)
120ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
121ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
122ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
123ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
124ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__
125ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern unsigned long long int __strtoull_internal (__const char *
126ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         __restrict __nptr,
127ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         char **__restrict __endptr,
128ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         int __base, int __group)
129ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
130ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
131ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern char *l64a (long int __n) __attribute__ ((__nothrow__));
132ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
133ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
134ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern long int a64l (__const char *__s)
135ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
136ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
137ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
138ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
139ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
140ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
141ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
142ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned char __u_char;
143ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned short int __u_short;
144ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned int __u_int;
145ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned long int __u_long;
146ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
147ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
148ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef signed char __int8_t;
149ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned char __uint8_t;
150ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef signed short int __int16_t;
151ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned short int __uint16_t;
152ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef signed int __int32_t;
153ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned int __uint32_t;
154ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
155ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
156ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
157ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
158ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef signed long long int __int64_t;
159ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef unsigned long long int __uint64_t;
160ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
161ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
162ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
163ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
164ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
165ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
166ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
167ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef long long int __quad_t;
168ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef unsigned long long int __u_quad_t;
169ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
170ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
171ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
172ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
173ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
174ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
175ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef __u_quad_t __dev_t;
176ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef unsigned int __uid_t;
177ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef unsigned int __gid_t;
178ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef unsigned long int __ino_t;
179ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef __u_quad_t __ino64_t;
180ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef unsigned int __mode_t;
181ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef unsigned int __nlink_t;
182ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef long int __off_t;
183ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef __quad_t __off64_t;
184ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef int __pid_t;
185ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef struct { int __val[2]; } __fsid_t;
186ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef long int __clock_t;
187ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef unsigned long int __rlim_t;
188ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef __u_quad_t __rlim64_t;
189ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef unsigned int __id_t;
190ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef long int __time_t;
191ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef unsigned int __useconds_t;
192ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef long int __suseconds_t;
193ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
194ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef int __daddr_t;
195ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef long int __swblk_t;
196ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef int __key_t;
197ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
198ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
199ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef int __clockid_t;
200ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
201ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
202ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef int __timer_t;
203ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
204ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
205ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef long int __blksize_t;
206ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
207ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
208ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
209ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
210ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef long int __blkcnt_t;
211ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef __quad_t __blkcnt64_t;
212ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
213ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
214ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef unsigned long int __fsblkcnt_t;
215ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef __u_quad_t __fsblkcnt64_t;
216ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
217ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
218ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef unsigned long int __fsfilcnt_t;
219ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef __u_quad_t __fsfilcnt64_t;
220ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
221ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef int __ssize_t;
222ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
223ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
224ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
225ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __off64_t __loff_t;
226ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __quad_t *__qaddr_t;
227ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef char *__caddr_t;
228ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
229ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
230ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef int __intptr_t;
231ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
232ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
233ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef unsigned int __socklen_t;
234ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
235ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
236ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
237ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
238ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __u_char u_char;
239ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __u_short u_short;
240ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __u_int u_int;
241ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __u_long u_long;
242ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __quad_t quad_t;
243ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __u_quad_t u_quad_t;
244ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __fsid_t fsid_t;
245ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
246ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
247ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
248ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
249ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __loff_t loff_t;
250ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
251ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
252ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
253ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __ino_t ino_t;
254ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
255ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __dev_t dev_t;
256ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
257ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
258ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
259ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
260ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __gid_t gid_t;
261ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
262ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
263ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
264ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
265ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __mode_t mode_t;
266ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
267ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
268ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
269ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
270ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __nlink_t nlink_t;
271ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
272ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
273ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
274ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
275ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __uid_t uid_t;
276ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
277ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
278ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
279ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
280ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
281ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __off_t off_t;
282ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
283ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __pid_t pid_t;
284ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
285ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
286ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
287ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
288ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __id_t id_t;
289ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
290ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
291ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
292ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
293ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __ssize_t ssize_t;
294ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
295ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
296ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
297ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
298ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
299ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __daddr_t daddr_t;
300ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __caddr_t caddr_t;
301ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
302ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
303ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
304ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
305ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
306ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __key_t key_t;
307ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
308ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
309ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __time_t time_t;
310ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
311ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
312ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
313ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
314ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __clockid_t clockid_t;
315ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
316ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __timer_t timer_t;
317ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
318ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
319ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
320ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
321ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned long int ulong;
322ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned short int ushort;
323ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned int uint;
324ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
325ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef int int8_t __attribute__ ((__mode__ (__QI__)));
326ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef int int16_t __attribute__ ((__mode__ (__HI__)));
327ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef int int32_t __attribute__ ((__mode__ (__SI__)));
328ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef int int64_t __attribute__ ((__mode__ (__DI__)));
329ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
330ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
331ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned int u_int8_t __attribute__ ((__mode__ (__QI__)));
332ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned int u_int16_t __attribute__ ((__mode__ (__HI__)));
333ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned int u_int32_t __attribute__ ((__mode__ (__SI__)));
334ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned int u_int64_t __attribute__ ((__mode__ (__DI__)));
335ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
336ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef int register_t __attribute__ ((__mode__ (__word__)));
337ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
338ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef int __sig_atomic_t;
339ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
340ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
341ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
342ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
343ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct
344ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  {
345ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))];
346ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  } __sigset_t;
347ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
348ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
349ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
350ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
351ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __sigset_t sigset_t;
352ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
353ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
354ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
355ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
356ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
357ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct timespec
358ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  {
359ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    __time_t tv_sec;
360ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    long int tv_nsec;
361ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  };
362ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
363ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct timeval
364ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  {
365ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    __time_t tv_sec;
366ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    __suseconds_t tv_usec;
367ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  };
368ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
369ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
370ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
371ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __suseconds_t suseconds_t;
372ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
373ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
374ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
375ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
376ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
377ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef long int __fd_mask;
378ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
379ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct
380ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  {
381ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
382ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
383ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
384ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
385ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
386ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
387ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    __fd_mask __fds_bits[1024 / (8 * sizeof (__fd_mask))];
388ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
389ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
390ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  } fd_set;
391ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
392ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
393ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
394ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
395ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
396ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
397ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __fd_mask fd_mask;
398ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
399ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
400ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
401ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int select (int __nfds, fd_set *__restrict __readfds,
402ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     fd_set *__restrict __writefds,
403ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     fd_set *__restrict __exceptfds,
404ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     struct timeval *__restrict __timeout);
405ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
406ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__
407ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern __inline unsigned int gnu_dev_major (unsigned long long int __dev)
408ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__));
409ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__
410ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern __inline unsigned int gnu_dev_minor (unsigned long long int __dev)
411ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__));
412ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__
413ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern __inline unsigned long long int gnu_dev_makedev (unsigned int __major,
414ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown       unsigned int __minor)
415ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__));
416ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
417ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
418ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ extern __inline unsigned int
419ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__attribute__ ((__nothrow__)) gnu_dev_major (unsigned long long int __dev)
420ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
421ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  return ((__dev >> 8) & 0xfff) | ((unsigned int) (__dev >> 32) & ~0xfff);
422ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
423ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
424ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ extern __inline unsigned int
425ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__attribute__ ((__nothrow__)) gnu_dev_minor (unsigned long long int __dev)
426ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
427ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  return (__dev & 0xff) | ((unsigned int) (__dev >> 12) & ~0xff);
428ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
429ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
430ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ extern __inline unsigned long long int
431ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__attribute__ ((__nothrow__)) gnu_dev_makedev (unsigned int __major, unsigned int __minor)
432ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
433ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  return ((__minor & 0xff) | ((__major & 0xfff) << 8)
434ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   | (((unsigned long long int) (__minor & ~0xff)) << 12)
435ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   | (((unsigned long long int) (__major & ~0xfff)) << 32));
436ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
437ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
438ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __blkcnt_t blkcnt_t;
439ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
440ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
441ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
442ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __fsblkcnt_t fsblkcnt_t;
443ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
444ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
445ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
446ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __fsfilcnt_t fsfilcnt_t;
447ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
448ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct __sched_param
449ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  {
450ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    int __sched_priority;
451ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  };
452ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
453ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
454ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
455ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct _pthread_fastlock
456ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
457ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  long int __status;
458ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int __spinlock;
459ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
460ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
461ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
462ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
463ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
464ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct _pthread_descr_struct *_pthread_descr;
465ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
466ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
467ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
468ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
469ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
470ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct __pthread_attr_s
471ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
472ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int __detachstate;
473ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int __schedpolicy;
474ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  struct __sched_param __schedparam;
475ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int __inheritsched;
476ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int __scope;
477ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  size_t __guardsize;
478ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int __stackaddr_set;
479ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  void *__stackaddr;
480ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  size_t __stacksize;
481ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} pthread_attr_t;
482ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
483ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
484ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
485ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
486ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
487ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__extension__ typedef long long __pthread_cond_align_t;
488ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
489ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
490ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
491ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
492ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct
493ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
494ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  struct _pthread_fastlock __c_lock;
495ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  _pthread_descr __c_waiting;
496ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  char __padding[48 - sizeof (struct _pthread_fastlock)
497ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   - sizeof (_pthread_descr) - sizeof (__pthread_cond_align_t)];
498ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __pthread_cond_align_t __align;
499ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} pthread_cond_t;
500ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
501ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
502ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
503ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct
504ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
505ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int __dummy;
506ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} pthread_condattr_t;
507ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
508ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
509ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned int pthread_key_t;
510ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
511ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
512ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
513ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
514ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
515ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct
516ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
517ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int __m_reserved;
518ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int __m_count;
519ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  _pthread_descr __m_owner;
520ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int __m_kind;
521ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  struct _pthread_fastlock __m_lock;
522ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} pthread_mutex_t;
523ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
524ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
525ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
526ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct
527ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
528ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int __mutexkind;
529ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} pthread_mutexattr_t;
530ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
531ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
532ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
533ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef int pthread_once_t;
534ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
535ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned long int pthread_t;
536ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
537ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
538ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
539ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
540ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
541ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
542ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
543ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern long int random (void) __attribute__ ((__nothrow__));
544ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
545ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
546ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void srandom (unsigned int __seed) __attribute__ ((__nothrow__));
547ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
548ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
549ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
550ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
551ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
552ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern char *initstate (unsigned int __seed, char *__statebuf,
553ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   size_t __statelen) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));
554ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
555ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
556ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
557ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern char *setstate (char *__statebuf) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
558ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
559ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
560ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
561ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
562ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
563ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
564ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
565ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct random_data
566ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  {
567ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    int32_t *fptr;
568ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    int32_t *rptr;
569ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    int32_t *state;
570ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    int rand_type;
571ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    int rand_deg;
572ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    int rand_sep;
573ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    int32_t *end_ptr;
574ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  };
575ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
576ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int random_r (struct random_data *__restrict __buf,
577ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown       int32_t *__restrict __result) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
578ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
579ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int srandom_r (unsigned int __seed, struct random_data *__buf)
580ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));
581ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
582ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
583ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   size_t __statelen,
584ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   struct random_data *__restrict __buf)
585ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2, 4)));
586ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
587ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int setstate_r (char *__restrict __statebuf,
588ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         struct random_data *__restrict __buf)
589ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
590ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
591ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
592ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
593ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
594ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
595ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
596ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int rand (void) __attribute__ ((__nothrow__));
597ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
598ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void srand (unsigned int __seed) __attribute__ ((__nothrow__));
599ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
600ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
601ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
602ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
603ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int rand_r (unsigned int *__seed) __attribute__ ((__nothrow__));
604ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
605ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
606ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
607ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
608ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
609ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
610ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
611ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern double drand48 (void) __attribute__ ((__nothrow__));
612ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern double erand48 (unsigned short int __xsubi[3]) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
613ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
614ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
615ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern long int lrand48 (void) __attribute__ ((__nothrow__));
616ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern long int nrand48 (unsigned short int __xsubi[3])
617ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
618ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
619ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
620ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern long int mrand48 (void) __attribute__ ((__nothrow__));
621ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern long int jrand48 (unsigned short int __xsubi[3])
622ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
623ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
624ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
625ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void srand48 (long int __seedval) __attribute__ ((__nothrow__));
626ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern unsigned short int *seed48 (unsigned short int __seed16v[3])
627ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
628ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void lcong48 (unsigned short int __param[7]) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
629ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
630ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
631ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
632ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
633ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
634ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct drand48_data
635ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  {
636ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    unsigned short int __x[3];
637ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    unsigned short int __old_x[3];
638ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    unsigned short int __c;
639ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    unsigned short int __init;
640ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    unsigned long long int __a;
641ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  };
642ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
643ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
644ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int drand48_r (struct drand48_data *__restrict __buffer,
645ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        double *__restrict __result) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
646ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int erand48_r (unsigned short int __xsubi[3],
647ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        struct drand48_data *__restrict __buffer,
648ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        double *__restrict __result) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
649ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
650ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
651ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int lrand48_r (struct drand48_data *__restrict __buffer,
652ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        long int *__restrict __result)
653ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
654ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int nrand48_r (unsigned short int __xsubi[3],
655ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        struct drand48_data *__restrict __buffer,
656ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        long int *__restrict __result)
657ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
658ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
659ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
660ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int mrand48_r (struct drand48_data *__restrict __buffer,
661ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        long int *__restrict __result)
662ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
663ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int jrand48_r (unsigned short int __xsubi[3],
664ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        struct drand48_data *__restrict __buffer,
665ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        long int *__restrict __result)
666ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
667ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
668ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
669ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int srand48_r (long int __seedval, struct drand48_data *__buffer)
670ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));
671ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
672ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int seed48_r (unsigned short int __seed16v[3],
673ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown       struct drand48_data *__buffer) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
674ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
675ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int lcong48_r (unsigned short int __param[7],
676ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        struct drand48_data *__buffer)
677ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
678ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
679ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
680ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
681ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
682ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
683ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
684ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
685ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
686ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
687ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void *malloc (size_t __size) __attribute__ ((__nothrow__)) __attribute__ ((__malloc__));
688ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
689ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void *calloc (size_t __nmemb, size_t __size)
690ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__malloc__));
691ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
692ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
693ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
694ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
695ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
696ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
697ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
698ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void *realloc (void *__ptr, size_t __size) __attribute__ ((__nothrow__)) __attribute__ ((__malloc__));
699ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
700ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void free (void *__ptr) __attribute__ ((__nothrow__));
701ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
702ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
703ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
704ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
705ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void cfree (void *__ptr) __attribute__ ((__nothrow__));
706ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
707ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
708ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
709ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
710ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void *alloca (size_t __size) __attribute__ ((__nothrow__));
711ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
712ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
713ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
714ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
715ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
716ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
717ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void *valloc (size_t __size) __attribute__ ((__nothrow__)) __attribute__ ((__malloc__));
718ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
719ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void abort (void) __attribute__ ((__nothrow__)) __attribute__ ((__noreturn__));
720ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
721ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
722ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
723ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int atexit (void (*__func) (void)) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
724ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
725ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
726ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
727ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
728ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
729ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
730ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
731ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
732ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
733ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
734ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
735ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
736ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
737ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void exit (int __status) __attribute__ ((__nothrow__)) __attribute__ ((__noreturn__));
738ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
739ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern char *getenv (__const char *__name) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
740ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
741ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
742ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
743ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
744ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern char *__secure_getenv (__const char *__name) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
745ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
746ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
747ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
748ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
749ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
750ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int putenv (char *__string) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
751ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
752ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
753ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
754ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
755ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
756ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int setenv (__const char *__name, __const char *__value, int __replace)
757ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));
758ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
759ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
760ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int unsetenv (__const char *__name) __attribute__ ((__nothrow__));
761ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
762ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
763ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
764ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
765ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
766ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
767ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int clearenv (void) __attribute__ ((__nothrow__));
768ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
769ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern char *mktemp (char *__template) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
770ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
771ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int mkstemp (char *__template) __attribute__ ((__nonnull__ (1)));
772ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
773ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern char *mkdtemp (char *__template) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
774ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
775ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
776ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
777ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
778ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
779ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
780ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
781ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
782ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int system (__const char *__command);
783ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
784ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern char *realpath (__const char *__restrict __name,
785ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         char *__restrict __resolved) __attribute__ ((__nothrow__));
786ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
787ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
788ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
789ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
790ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
791ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
792ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef int (*__compar_fn_t) (__const void *, __const void *);
793ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
794ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
795ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
796ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
797ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
798ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
799ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
800ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
801ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
802ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void *bsearch (__const void *__key, __const void *__base,
803ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        size_t __nmemb, size_t __size, __compar_fn_t __compar)
804ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nonnull__ (1, 2, 5)));
805ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
806ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
807ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
808ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void qsort (void *__base, size_t __nmemb, size_t __size,
809ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __compar_fn_t __compar) __attribute__ ((__nonnull__ (1, 4)));
810ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
811ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
812ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
813ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int abs (int __x) __attribute__ ((__nothrow__)) __attribute__ ((__const__));
814ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern long int labs (long int __x) __attribute__ ((__nothrow__)) __attribute__ ((__const__));
815ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
816ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
817ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
818ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
819ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
820ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
821ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
822ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
823ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
824ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
825ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
826ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
827ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern div_t div (int __numer, int __denom)
828ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__const__));
829ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern ldiv_t ldiv (long int __numer, long int __denom)
830ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__const__));
831ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
832ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
833ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     int *__restrict __sign) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4)));
834ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
835ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
836ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
837ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
838ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
839ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     int *__restrict __sign) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4)));
840ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
841ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
842ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
843ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
844ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern char *gcvt (double __value, int __ndigit, char *__buf)
845ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3)));
846ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
847ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
848ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
849ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
850ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern char *qecvt (long double __value, int __ndigit,
851ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      int *__restrict __decpt, int *__restrict __sign)
852ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4)));
853ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern char *qfcvt (long double __value, int __ndigit,
854ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      int *__restrict __decpt, int *__restrict __sign)
855ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4)));
856ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern char *qgcvt (long double __value, int __ndigit, char *__buf)
857ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3)));
858ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
859ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
860ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
861ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
862ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
863ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     int *__restrict __sign, char *__restrict __buf,
864ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     size_t __len) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4, 5)));
865ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
866ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     int *__restrict __sign, char *__restrict __buf,
867ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     size_t __len) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4, 5)));
868ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
869ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int qecvt_r (long double __value, int __ndigit,
870ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      int *__restrict __decpt, int *__restrict __sign,
871ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      char *__restrict __buf, size_t __len)
872ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4, 5)));
873ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int qfcvt_r (long double __value, int __ndigit,
874ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      int *__restrict __decpt, int *__restrict __sign,
875ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      char *__restrict __buf, size_t __len)
876ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4, 5)));
877ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
878ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
879ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
880ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
881ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
882ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
883ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
884ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int mblen (__const char *__s, size_t __n) __attribute__ ((__nothrow__));
885ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
886ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
887ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int mbtowc (wchar_t *__restrict __pwc,
888ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __const char *__restrict __s, size_t __n) __attribute__ ((__nothrow__));
889ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
890ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
891ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int wctomb (char *__s, wchar_t __wchar) __attribute__ ((__nothrow__));
892ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
893ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
894ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
895ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern size_t mbstowcs (wchar_t *__restrict __pwcs,
896ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   __const char *__restrict __s, size_t __n) __attribute__ ((__nothrow__));
897ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
898ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern size_t wcstombs (char *__restrict __s,
899ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   __const wchar_t *__restrict __pwcs, size_t __n)
900ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__));
901ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
902ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
903ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
904ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
905ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
906ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
907ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
908ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
909ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int rpmatch (__const char *__response) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
910ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int getloadavg (double __loadavg[], int __nelem)
911ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
912ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
913ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
914ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
915ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
916ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
917ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
918ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
919ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef
920ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   struct {
921ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      char *next_in;
922ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      unsigned int avail_in;
923ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      unsigned int total_in_lo32;
924ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      unsigned int total_in_hi32;
925ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
926ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      char *next_out;
927ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      unsigned int avail_out;
928ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      unsigned int total_out_lo32;
929ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      unsigned int total_out_hi32;
930ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
931ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      void *state;
932ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
933ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      void *(*bzalloc)(void *,int,int);
934ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      void (*bzfree)(void *,void *);
935ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      void *opaque;
936ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
937ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   bz_stream;
938ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
939ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int BZ2_bzCompressInit (
940ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      bz_stream* strm,
941ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      int blockSize100k,
942ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      int verbosity,
943ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      int workFactor
944ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   );
945ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
946ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int BZ2_bzCompress (
947ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      bz_stream* strm,
948ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      int action
949ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   );
950ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
951ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int BZ2_bzCompressEnd (
952ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      bz_stream* strm
953ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   );
954ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
955ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int BZ2_bzDecompressInit (
956ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      bz_stream *strm,
957ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      int verbosity,
958ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      int small
959ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   );
960ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
961ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int BZ2_bzDecompress (
962ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      bz_stream* strm
963ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   );
964ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
965ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int BZ2_bzDecompressEnd (
966ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      bz_stream *strm
967ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   );
968ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
969ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int BZ2_bzBuffToBuffCompress (
970ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      char* dest,
971ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      unsigned int* destLen,
972ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      char* source,
973ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      unsigned int sourceLen,
974ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      int blockSize100k,
975ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      int verbosity,
976ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      int workFactor
977ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   );
978ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
979ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int BZ2_bzBuffToBuffDecompress (
980ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      char* dest,
981ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      unsigned int* destLen,
982ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      char* source,
983ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      unsigned int sourceLen,
984ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      int small,
985ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      int verbosity
986ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   );
987ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
988ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern const char * BZ2_bzlibVersion (
989ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      void
990ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   );
991ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
992ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef char Char;
993ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned char Bool;
994ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned char UChar;
995ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef int Int32;
996ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned int UInt32;
997ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef short Int16;
998ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned short UInt16;
999ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1000ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void bz_internal_error ( int errcode );
1001ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1002ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Int32 BZ2_rNums[512];
1003ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1004ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern UInt32 BZ2_crc32Table[256];
1005ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1006ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef
1007ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   struct {
1008ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1009ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      bz_stream* strm;
1010ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1011ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1012ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1013ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 mode;
1014ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 state;
1015ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1016ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1017ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UInt32 avail_in_expect;
1018ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1019ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1020ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UInt32* arr1;
1021ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UInt32* arr2;
1022ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UInt32* ftab;
1023ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 origPtr;
1024ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1025ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1026ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UInt32* ptr;
1027ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UChar* block;
1028ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UInt16* mtfv;
1029ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UChar* zbits;
1030ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1031ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1032ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 workFactor;
1033ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1034ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1035ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UInt32 state_in_ch;
1036ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 state_in_len;
1037ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 rNToGo; Int32 rTPos;
1038ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1039ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1040ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 nblock;
1041ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 nblockMAX;
1042ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 numZ;
1043ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 state_out_pos;
1044ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1045ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1046ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 nInUse;
1047ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Bool inUse[256];
1048ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UChar unseqToSeq[256];
1049ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1050ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1051ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UInt32 bsBuff;
1052ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 bsLive;
1053ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1054ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1055ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UInt32 blockCRC;
1056ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UInt32 combinedCRC;
1057ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1058ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1059ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 verbosity;
1060ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 blockNo;
1061ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 blockSize100k;
1062ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1063ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1064ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 nMTF;
1065ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 mtfFreq [258];
1066ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UChar selector [(2 + (900000 / 50))];
1067ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UChar selectorMtf[(2 + (900000 / 50))];
1068ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1069ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UChar len [6][258];
1070ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 code [6][258];
1071ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 rfreq [6][258];
1072ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1073ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UInt32 len_pack[258][4];
1074ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1075ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
1076ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   EState;
1077ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1078ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1079ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1080ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1081ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1082ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void
1083ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownBZ2_blockSort ( EState* );
1084ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1085ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void
1086ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownBZ2_compressBlock ( EState*, Bool );
1087ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1088ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void
1089ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownBZ2_bsInitWrite ( EState* );
1090ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1091ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void
1092ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownBZ2_hbAssignCodes ( Int32*, UChar*, Int32, Int32, Int32 );
1093ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1094ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void
1095ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownBZ2_hbMakeCodeLengths ( UChar*, Int32*, Int32, Int32 );
1096ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1097ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef
1098ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   struct {
1099ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1100ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      bz_stream* strm;
1101ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1102ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1103ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 state;
1104ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1105ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1106ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UChar state_out_ch;
1107ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 state_out_len;
1108ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Bool blockRandomised;
1109ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 rNToGo; Int32 rTPos;
1110ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1111ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1112ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UInt32 bsBuff;
1113ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 bsLive;
1114ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1115ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1116ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 blockSize100k;
1117ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Bool smallDecompress;
1118ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 currBlockNo;
1119ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 verbosity;
1120ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1121ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1122ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 origPtr;
1123ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UInt32 tPos;
1124ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 k0;
1125ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 unzftab[256];
1126ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 nblock_used;
1127ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 cftab[257];
1128ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 cftabCopy[257];
1129ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1130ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1131ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UInt32 *tt;
1132ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1133ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1134ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UInt16 *ll16;
1135ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UChar *ll4;
1136ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1137ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1138ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UInt32 storedBlockCRC;
1139ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UInt32 storedCombinedCRC;
1140ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UInt32 calculatedBlockCRC;
1141ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UInt32 calculatedCombinedCRC;
1142ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1143ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1144ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 nInUse;
1145ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Bool inUse[256];
1146ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Bool inUse16[16];
1147ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UChar seqToUnseq[256];
1148ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1149ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1150ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UChar mtfa [4096];
1151ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 mtfbase[256 / 16];
1152ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UChar selector [(2 + (900000 / 50))];
1153ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UChar selectorMtf[(2 + (900000 / 50))];
1154ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UChar len [6][258];
1155ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1156ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 limit [6][258];
1157ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 base [6][258];
1158ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 perm [6][258];
1159ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 minLens[6];
1160ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1161ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1162ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 save_i;
1163ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 save_j;
1164ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 save_t;
1165ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 save_alphaSize;
1166ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 save_nGroups;
1167ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 save_nSelectors;
1168ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 save_EOB;
1169ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 save_groupNo;
1170ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 save_groupPos;
1171ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 save_nextSym;
1172ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 save_nblockMAX;
1173ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 save_nblock;
1174ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 save_es;
1175ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 save_N;
1176ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 save_curr;
1177ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 save_zt;
1178ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 save_zn;
1179ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 save_zvec;
1180ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 save_zj;
1181ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 save_gSel;
1182ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 save_gMinlen;
1183ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32* save_gLimit;
1184ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32* save_gBase;
1185ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32* save_gPerm;
1186ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1187ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
1188ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   DState;
1189ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1190ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Int32
1191ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownBZ2_indexIntoF ( Int32, Int32* );
1192ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1193ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Int32
1194ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownBZ2_decompress ( DState* );
1195ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1196ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void
1197ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownBZ2_hbCreateDecodeTables ( Int32*, Int32*, Int32*, UChar*,
1198ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                           Int32, Int32, Int32 );
1199ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1200ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned long HWord;
1201ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef char HChar;
1202ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef signed int Int;
1203ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned int UInt;
1204ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1205ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef signed long long int Long;
1206ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned long long int ULong;
1207ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1208ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1209ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1210ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1211ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1212ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic HWord (*serviceFn)(HWord,HWord) = 0;
1213ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1214ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownchar* my_strcat ( char* dest, const char* src )
1215ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
1216ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   char* dest_orig = dest;
1217ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   while (*dest) dest++;
1218ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   while (*src) *dest++ = *src++;
1219ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   *dest = 0;
1220ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return dest_orig;
1221ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
1222ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1223ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1224ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1225ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1226ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void vex_log_bytes ( char* p, int n )
1227ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
1228ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   int i;
1229ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 0; i < n; i++)
1230ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      (*serviceFn)( 1, (int)p[i] );
1231ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
1232ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1233ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1234ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1235ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1236ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic HChar vex_toupper ( HChar c )
1237ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
1238ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (c >= 'a' && c <= 'z')
1239ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      return c + ('A' - 'a');
1240ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   else
1241ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      return c;
1242ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
1243ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1244ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic Int vex_strlen ( const HChar* str )
1245ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
1246ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int i = 0;
1247ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   while (str[i] != 0) i++;
1248ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return i;
1249ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
1250ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1251ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownBool vex_streq ( const HChar* s1, const HChar* s2 )
1252ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
1253ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   while (((Bool)1)) {
1254ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (*s1 == 0 && *s2 == 0)
1255ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         return ((Bool)1);
1256ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (*s1 != *s2)
1257ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         return ((Bool)0);
1258ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s1++;
1259ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s2++;
1260ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
1261ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
1262ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1263ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic UInt
1264ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownmyvprintf_str ( void(*send)(HChar), Int flags, Int width, HChar* str,
1265ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                Bool capitalise )
1266ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
1267ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1268ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   UInt ret = 0;
1269ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int i, extra;
1270ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int len = vex_strlen(str);
1271ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1272ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (width == 0) {
1273ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      ret += len;
1274ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for (i = 0; i < len; i++)
1275ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         send((capitalise ? vex_toupper(str[i]) : (str[i])));
1276ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      return ret;
1277ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
1278ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1279ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (len > width) {
1280ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      ret += width;
1281ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for (i = 0; i < width; i++)
1282ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         send((capitalise ? vex_toupper(str[i]) : (str[i])));
1283ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      return ret;
1284ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
1285ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1286ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   extra = width - len;
1287ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (flags & 4) {
1288ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      ret += extra;
1289ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for (i = 0; i < extra; i++)
1290ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         send(' ');
1291ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
1292ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   ret += len;
1293ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 0; i < len; i++)
1294ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      send((capitalise ? vex_toupper(str[i]) : (str[i])));
1295ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (!(flags & 4)) {
1296ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      ret += extra;
1297ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for (i = 0; i < extra; i++)
1298ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         send(' ');
1299ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
1300ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1301ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1302ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1303ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return ret;
1304ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
1305ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1306ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1307ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1308ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1309ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1310ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1311ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1312ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic UInt
1313ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownmyvprintf_int64 ( void(*send)(HChar), Int flags, Int base, Int width, ULong pL)
1314ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
1315ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   HChar buf[40];
1316ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int ind = 0;
1317ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int i, nc = 0;
1318ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Bool neg = ((Bool)0);
1319ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   HChar *digits = "0123456789ABCDEF";
1320ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   UInt ret = 0;
1321ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   UInt p = (UInt)pL;
1322ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1323ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (base < 2 || base > 16)
1324ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      return ret;
1325ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1326ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if ((flags & 1) && (Int)p < 0) {
1327ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      p = - (Int)p;
1328ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      neg = ((Bool)1);
1329ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
1330ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1331ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (p == 0)
1332ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      buf[ind++] = '0';
1333ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   else {
1334ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      while (p > 0) {
1335ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if ((flags & 16) && 10 == base &&
1336ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown             0 == (ind-nc) % 3 && 0 != ind)
1337ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         {
1338ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            buf[ind++] = ',';
1339ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            nc++;
1340ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
1341ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         buf[ind++] = digits[p % base];
1342ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         p /= base;
1343ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
1344ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
1345ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1346ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (neg)
1347ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      buf[ind++] = '-';
1348ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1349ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (width > 0 && !(flags & 4)) {
1350ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for(; ind < width; ind++) {
1351ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1352ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         buf[ind] = ((flags & 2) ? '0': ' ');
1353ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
1354ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
1355ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1356ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1357ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   ret += ind;
1358ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = ind -1; i >= 0; i--) {
1359ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      send(buf[i]);
1360ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
1361ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (width > 0 && (flags & 4)) {
1362ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for(; ind < width; ind++) {
1363ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  ret++;
1364ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         send(' ');
1365ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
1366ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
1367ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return ret;
1368ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
1369ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1370ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1371ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1372ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic
1373ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownUInt vprintf_wrk ( )
1374ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
1375ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  return 0;
1376ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
1377ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1378ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1379ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1380ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1381ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1382ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1383ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic HChar myprintf_buf[1000];
1384ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic Int n_myprintf_buf;
1385ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1386ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void add_to_myprintf_buf ( HChar c )
1387ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
1388ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (c == '\n' || n_myprintf_buf >= 1000-10 ) {
1389ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      vex_log_bytes( myprintf_buf, vex_strlen(myprintf_buf) );
1390ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      n_myprintf_buf = 0;
1391ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      myprintf_buf[n_myprintf_buf] = 0;
1392ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
1393ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   myprintf_buf[n_myprintf_buf++] = c;
1394ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   myprintf_buf[n_myprintf_buf] = 0;
1395ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
1396ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1397ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic UInt vex_printf ( const char *format, ... )
1398ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
1399ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  return 0;
1400ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
1401ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1402ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic
1403ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid makeMaps_d ( DState* s )
1404ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
1405ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 i;
1406ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->nInUse = 0;
1407ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 0; i < 256; i++)
1408ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s->inUse[i]) {
1409ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->seqToUnseq[s->nInUse] = i;
1410ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->nInUse++;
1411ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
1412ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
1413ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1414ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__inline__ Int32 BZ2_indexIntoF ( Int32 indx, Int32 *cftab )
1415ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
1416ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 nb, na, mid;
1417ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   nb = 0;
1418ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   na = 256;
1419ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   do {
1420ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      mid = (nb + na) >> 1;
1421ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (indx >= cftab[mid]) nb = mid; else na = mid;
1422ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
1423ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   while (na - nb != 1);
1424ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return nb;
1425ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
1426ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1427ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1428ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownInt32 BZ2_decompress ( DState* s )
1429ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
1430ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   UChar uc;
1431ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 retVal;
1432ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 minLen, maxLen;
1433ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   bz_stream* strm = s->strm;
1434ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1435ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1436ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 i;
1437ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 j;
1438ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 t;
1439ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 alphaSize;
1440ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 nGroups;
1441ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 nSelectors;
1442ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 EOB;
1443ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 groupNo;
1444ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 groupPos;
1445ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 nextSym;
1446ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 nblockMAX;
1447ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 nblock;
1448ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 es;
1449ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 N;
1450ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 curr;
1451ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 zt;
1452ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 zn;
1453ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 zvec;
1454ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 zj;
1455ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 gSel;
1456ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 gMinlen;
1457ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32* gLimit;
1458ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32* gBase;
1459ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32* gPerm;
1460ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1461ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (s->state == 10) {
1462ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1463ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->save_i = 0;
1464ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->save_j = 0;
1465ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->save_t = 0;
1466ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->save_alphaSize = 0;
1467ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->save_nGroups = 0;
1468ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->save_nSelectors = 0;
1469ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->save_EOB = 0;
1470ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->save_groupNo = 0;
1471ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->save_groupPos = 0;
1472ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->save_nextSym = 0;
1473ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->save_nblockMAX = 0;
1474ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->save_nblock = 0;
1475ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->save_es = 0;
1476ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->save_N = 0;
1477ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->save_curr = 0;
1478ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->save_zt = 0;
1479ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->save_zn = 0;
1480ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->save_zvec = 0;
1481ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->save_zj = 0;
1482ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->save_gSel = 0;
1483ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->save_gMinlen = 0;
1484ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->save_gLimit = ((void *)0);
1485ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->save_gBase = ((void *)0);
1486ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->save_gPerm = ((void *)0);
1487ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
1488ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1489ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1490ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   i = s->save_i;
1491ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   j = s->save_j;
1492ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   t = s->save_t;
1493ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   alphaSize = s->save_alphaSize;
1494ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   nGroups = s->save_nGroups;
1495ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   nSelectors = s->save_nSelectors;
1496ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   EOB = s->save_EOB;
1497ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   groupNo = s->save_groupNo;
1498ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   groupPos = s->save_groupPos;
1499ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   nextSym = s->save_nextSym;
1500ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   nblockMAX = s->save_nblockMAX;
1501ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   nblock = s->save_nblock;
1502ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   es = s->save_es;
1503ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   N = s->save_N;
1504ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   curr = s->save_curr;
1505ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   zt = s->save_zt;
1506ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   zn = s->save_zn;
1507ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   zvec = s->save_zvec;
1508ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   zj = s->save_zj;
1509ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   gSel = s->save_gSel;
1510ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   gMinlen = s->save_gMinlen;
1511ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   gLimit = s->save_gLimit;
1512ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   gBase = s->save_gBase;
1513ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   gPerm = s->save_gPerm;
1514ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1515ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   retVal = 0;
1516ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1517ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   switch (s->state) {
1518ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1519ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 10: s->state = 10; while (((Bool)1)) { if (s->bsLive >= 8) { UInt32 v; v = (s->bsBuff >> (s->bsLive-8)) & ((1 << 8)-1); s->bsLive -= 8; uc = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; };
1520ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (uc != 0x42) { retVal = (-5); goto save_state_and_return; };;
1521ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1522ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 11: s->state = 11; while (((Bool)1)) { if (s->bsLive >= 8) { UInt32 v; v = (s->bsBuff >> (s->bsLive-8)) & ((1 << 8)-1); s->bsLive -= 8; uc = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; };
1523ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (uc != 0x5a) { retVal = (-5); goto save_state_and_return; };;
1524ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1525ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 12: s->state = 12; while (((Bool)1)) { if (s->bsLive >= 8) { UInt32 v; v = (s->bsBuff >> (s->bsLive-8)) & ((1 << 8)-1); s->bsLive -= 8; uc = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; }
1526ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (uc != 0x68) { retVal = (-5); goto save_state_and_return; };;
1527ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1528ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 13: s->state = 13; while (((Bool)1)) { if (s->bsLive >= 8) { UInt32 v; v = (s->bsBuff >> (s->bsLive-8)) & ((1 << 8)-1); s->bsLive -= 8; s->blockSize100k = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; }
1529ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s->blockSize100k < (0x30 + 1) ||
1530ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          s->blockSize100k > (0x30 + 9)) { retVal = (-5); goto save_state_and_return; };;
1531ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->blockSize100k -= 0x30;
1532ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1533ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s->smallDecompress) {
1534ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->ll16 = (strm->bzalloc)(strm->opaque,(s->blockSize100k * 100000 * sizeof(UInt16)),1);
1535ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->ll4 = (strm->bzalloc)(strm->opaque,(((1 + s->blockSize100k * 100000) >> 1) * sizeof(UChar)),1);
1536ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1537ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1538ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->ll16 == ((void *)0) || s->ll4 == ((void *)0)) { retVal = (-3); goto save_state_and_return; };;
1539ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      } else {
1540ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->tt = (strm->bzalloc)(strm->opaque,(s->blockSize100k * 100000 * sizeof(Int32)),1);
1541ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->tt == ((void *)0)) { retVal = (-3); goto save_state_and_return; };;
1542ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
1543ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1544ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 14: s->state = 14; while (((Bool)1)) { if (s->bsLive >= 8) { UInt32 v; v = (s->bsBuff >> (s->bsLive-8)) & ((1 << 8)-1); s->bsLive -= 8; uc = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; };
1545ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1546ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (uc == 0x17) goto endhdr_2;
1547ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (uc != 0x31) { retVal = (-4); goto save_state_and_return; };;
1548ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 15: s->state = 15; while (((Bool)1)) { if (s->bsLive >= 8) { UInt32 v; v = (s->bsBuff >> (s->bsLive-8)) & ((1 << 8)-1); s->bsLive -= 8; uc = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; };
1549ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (uc != 0x41) { retVal = (-4); goto save_state_and_return; };;
1550ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 16: s->state = 16; while (((Bool)1)) { if (s->bsLive >= 8) { UInt32 v; v = (s->bsBuff >> (s->bsLive-8)) & ((1 << 8)-1); s->bsLive -= 8; uc = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; };
1551ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (uc != 0x59) { retVal = (-4); goto save_state_and_return; };;
1552ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 17: s->state = 17; while (((Bool)1)) { if (s->bsLive >= 8) { UInt32 v; v = (s->bsBuff >> (s->bsLive-8)) & ((1 << 8)-1); s->bsLive -= 8; uc = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; };
1553ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (uc != 0x26) { retVal = (-4); goto save_state_and_return; };;
1554ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 18: s->state = 18; while (((Bool)1)) { if (s->bsLive >= 8) { UInt32 v; v = (s->bsBuff >> (s->bsLive-8)) & ((1 << 8)-1); s->bsLive -= 8; uc = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; };
1555ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (uc != 0x53) { retVal = (-4); goto save_state_and_return; };;
1556ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 19: s->state = 19; while (((Bool)1)) { if (s->bsLive >= 8) { UInt32 v; v = (s->bsBuff >> (s->bsLive-8)) & ((1 << 8)-1); s->bsLive -= 8; uc = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; };
1557ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (uc != 0x59) { retVal = (-4); goto save_state_and_return; };;
1558ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1559ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->currBlockNo++;
1560ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s->verbosity >= 2)
1561ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         vex_printf("\n    [%d: huff+mtf ",s->currBlockNo);
1562ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1563ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->storedBlockCRC = 0;
1564ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 20: s->state = 20; while (((Bool)1)) { if (s->bsLive >= 8) { UInt32 v; v = (s->bsBuff >> (s->bsLive-8)) & ((1 << 8)-1); s->bsLive -= 8; uc = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; };
1565ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
1566ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 21: s->state = 21; while (((Bool)1)) { if (s->bsLive >= 8) { UInt32 v; v = (s->bsBuff >> (s->bsLive-8)) & ((1 << 8)-1); s->bsLive -= 8; uc = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; };
1567ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
1568ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 22: s->state = 22; while (((Bool)1)) { if (s->bsLive >= 8) { UInt32 v; v = (s->bsBuff >> (s->bsLive-8)) & ((1 << 8)-1); s->bsLive -= 8; uc = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; };
1569ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
1570ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 23: s->state = 23; while (((Bool)1)) { if (s->bsLive >= 8) { UInt32 v; v = (s->bsBuff >> (s->bsLive-8)) & ((1 << 8)-1); s->bsLive -= 8; uc = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; };
1571ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
1572ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1573ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 24: s->state = 24; while (((Bool)1)) { if (s->bsLive >= 1) { UInt32 v; v = (s->bsBuff >> (s->bsLive-1)) & ((1 << 1)-1); s->bsLive -= 1; s->blockRandomised = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; };
1574ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1575ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->origPtr = 0;
1576ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 25: s->state = 25; while (((Bool)1)) { if (s->bsLive >= 8) { UInt32 v; v = (s->bsBuff >> (s->bsLive-8)) & ((1 << 8)-1); s->bsLive -= 8; uc = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; };
1577ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->origPtr = (s->origPtr << 8) | ((Int32)uc);
1578ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 26: s->state = 26; while (((Bool)1)) { if (s->bsLive >= 8) { UInt32 v; v = (s->bsBuff >> (s->bsLive-8)) & ((1 << 8)-1); s->bsLive -= 8; uc = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; };
1579ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->origPtr = (s->origPtr << 8) | ((Int32)uc);
1580ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 27: s->state = 27; while (((Bool)1)) { if (s->bsLive >= 8) { UInt32 v; v = (s->bsBuff >> (s->bsLive-8)) & ((1 << 8)-1); s->bsLive -= 8; uc = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; };
1581ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->origPtr = (s->origPtr << 8) | ((Int32)uc);
1582ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1583ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s->origPtr < 0)
1584ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         { retVal = (-4); goto save_state_and_return; };;
1585ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s->origPtr > 10 + 100000*s->blockSize100k)
1586ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         { retVal = (-4); goto save_state_and_return; };;
1587ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1588ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1589ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for (i = 0; i < 16; i++) {
1590ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         case 28: s->state = 28; while (((Bool)1)) { if (s->bsLive >= 1) { UInt32 v; v = (s->bsBuff >> (s->bsLive-1)) & ((1 << 1)-1); s->bsLive -= 1; uc = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; };
1591ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (uc == 1)
1592ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->inUse16[i] = ((Bool)1); else
1593ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->inUse16[i] = ((Bool)0);
1594ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
1595ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1596ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for (i = 0; i < 256; i++) s->inUse[i] = ((Bool)0);
1597ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1598ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for (i = 0; i < 16; i++)
1599ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->inUse16[i])
1600ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            for (j = 0; j < 16; j++) {
1601ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               case 29: s->state = 29; while (((Bool)1)) { if (s->bsLive >= 1) { UInt32 v; v = (s->bsBuff >> (s->bsLive-1)) & ((1 << 1)-1); s->bsLive -= 1; uc = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; };
1602ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               if (uc == 1) s->inUse[i * 16 + j] = ((Bool)1);
1603ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            }
1604ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      makeMaps_d ( s );
1605ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s->nInUse == 0) { retVal = (-4); goto save_state_and_return; };;
1606ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      alphaSize = s->nInUse+2;
1607ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1608ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1609ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 30: s->state = 30; while (((Bool)1)) { if (s->bsLive >= 3) { UInt32 v; v = (s->bsBuff >> (s->bsLive-3)) & ((1 << 3)-1); s->bsLive -= 3; nGroups = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; };
1610ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (nGroups < 2 || nGroups > 6) { retVal = (-4); goto save_state_and_return; };;
1611ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 31: s->state = 31; while (((Bool)1)) { if (s->bsLive >= 15) { UInt32 v; v = (s->bsBuff >> (s->bsLive-15)) & ((1 << 15)-1); s->bsLive -= 15; nSelectors = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; };
1612ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (nSelectors < 1) { retVal = (-4); goto save_state_and_return; };;
1613ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for (i = 0; i < nSelectors; i++) {
1614ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         j = 0;
1615ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         while (((Bool)1)) {
1616ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            case 32: s->state = 32; while (((Bool)1)) { if (s->bsLive >= 1) { UInt32 v; v = (s->bsBuff >> (s->bsLive-1)) & ((1 << 1)-1); s->bsLive -= 1; uc = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; };
1617ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (uc == 0) break;
1618ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            j++;
1619ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (j >= nGroups) { retVal = (-4); goto save_state_and_return; };;
1620ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
1621ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->selectorMtf[i] = j;
1622ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
1623ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1624ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1625ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      {
1626ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         UChar pos[6], tmp, v;
1627ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         for (v = 0; v < nGroups; v++) pos[v] = v;
1628ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1629ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         for (i = 0; i < nSelectors; i++) {
1630ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            v = s->selectorMtf[i];
1631ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            tmp = pos[v];
1632ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            while (v > 0) { pos[v] = pos[v-1]; v--; }
1633ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            pos[0] = tmp;
1634ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->selector[i] = tmp;
1635ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
1636ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
1637ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1638ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1639ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for (t = 0; t < nGroups; t++) {
1640ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         case 33: s->state = 33; while (((Bool)1)) { if (s->bsLive >= 5) { UInt32 v; v = (s->bsBuff >> (s->bsLive-5)) & ((1 << 5)-1); s->bsLive -= 5; curr = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; };
1641ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         for (i = 0; i < alphaSize; i++) {
1642ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            while (((Bool)1)) {
1643ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               if (curr < 1 || curr > 20) { retVal = (-4); goto save_state_and_return; };;
1644ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               case 34: s->state = 34; while (((Bool)1)) { if (s->bsLive >= 1) { UInt32 v; v = (s->bsBuff >> (s->bsLive-1)) & ((1 << 1)-1); s->bsLive -= 1; uc = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; };
1645ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               if (uc == 0) break;
1646ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               case 35: s->state = 35; while (((Bool)1)) { if (s->bsLive >= 1) { UInt32 v; v = (s->bsBuff >> (s->bsLive-1)) & ((1 << 1)-1); s->bsLive -= 1; uc = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; };
1647ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               if (uc == 0) curr++; else curr--;
1648ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            }
1649ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->len[t][i] = curr;
1650ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
1651ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
1652ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1653ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1654ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for (t = 0; t < nGroups; t++) {
1655ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         minLen = 32;
1656ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         maxLen = 0;
1657ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         for (i = 0; i < alphaSize; i++) {
1658ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (s->len[t][i] > maxLen) maxLen = s->len[t][i];
1659ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (s->len[t][i] < minLen) minLen = s->len[t][i];
1660ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
1661ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         BZ2_hbCreateDecodeTables (
1662ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            &(s->limit[t][0]),
1663ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            &(s->base[t][0]),
1664ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            &(s->perm[t][0]),
1665ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            &(s->len[t][0]),
1666ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            minLen, maxLen, alphaSize
1667ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         );
1668ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->minLens[t] = minLen;
1669ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
1670ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1671ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1672ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1673ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      EOB = s->nInUse+1;
1674ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      nblockMAX = 100000 * s->blockSize100k;
1675ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      groupNo = -1;
1676ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      groupPos = 0;
1677ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1678ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for (i = 0; i <= 255; i++) s->unzftab[i] = 0;
1679ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1680ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1681ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      {
1682ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         Int32 ii, jj, kk;
1683ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         kk = 4096 -1;
1684ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         for (ii = 256 / 16 - 1; ii >= 0; ii--) {
1685ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            for (jj = 16 -1; jj >= 0; jj--) {
1686ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               s->mtfa[kk] = (UChar)(ii * 16 + jj);
1687ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               kk--;
1688ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            }
1689ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->mtfbase[ii] = kk + 1;
1690ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
1691ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
1692ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1693ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1694ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      nblock = 0;
1695ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      { if (groupPos == 0) { groupNo++; if (groupNo >= nSelectors) { retVal = (-4); goto save_state_and_return; };; groupPos = 50; gSel = s->selector[groupNo]; gMinlen = s->minLens[gSel]; gLimit = &(s->limit[gSel][0]); gPerm = &(s->perm[gSel][0]); gBase = &(s->base[gSel][0]); } groupPos--; zn = gMinlen; case 36: s->state = 36; while (((Bool)1)) { if (s->bsLive >= zn) { UInt32 v; v = (s->bsBuff >> (s->bsLive-zn)) & ((1 << zn)-1); s->bsLive -= zn; zvec = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; }; while (1) { if (zn > 20 ) { retVal = (-4); goto save_state_and_return; };; if (zvec <= gLimit[zn]) break; zn++; case 37: s->state = 37; while (((Bool)1)) { if (s->bsLive >= 1) { UInt32 v; v = (s->bsBuff >> (s->bsLive-1)) & ((1 << 1)-1); s->bsLive -= 1; zj = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; }; zvec = (zvec << 1) | zj; }; if (zvec - gBase[zn] < 0 || zvec - gBase[zn] >= 258) { retVal = (-4); goto save_state_and_return; };; nextSym = gPerm[zvec - gBase[zn]]; };
1696ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1697ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      while (((Bool)1)) {
1698ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1699ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (nextSym == EOB) break;
1700ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1701ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (nextSym == 0 || nextSym == 1) {
1702ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1703ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            es = -1;
1704ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            N = 1;
1705ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            do {
1706ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               if (nextSym == 0) es = es + (0+1) * N; else
1707ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               if (nextSym == 1) es = es + (1+1) * N;
1708ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               N = N * 2;
1709ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               { if (groupPos == 0) { groupNo++; if (groupNo >= nSelectors) { retVal = (-4); goto save_state_and_return; };; groupPos = 50; gSel = s->selector[groupNo]; gMinlen = s->minLens[gSel]; gLimit = &(s->limit[gSel][0]); gPerm = &(s->perm[gSel][0]); gBase = &(s->base[gSel][0]); } groupPos--; zn = gMinlen; case 38: s->state = 38; while (((Bool)1)) { if (s->bsLive >= zn) { UInt32 v; v = (s->bsBuff >> (s->bsLive-zn)) & ((1 << zn)-1); s->bsLive -= zn; zvec = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; }; while (1) { if (zn > 20 ) { retVal = (-4); goto save_state_and_return; };; if (zvec <= gLimit[zn]) break; zn++; case 39: s->state = 39; while (((Bool)1)) { if (s->bsLive >= 1) { UInt32 v; v = (s->bsBuff >> (s->bsLive-1)) & ((1 << 1)-1); s->bsLive -= 1; zj = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; }; zvec = (zvec << 1) | zj; }; if (zvec - gBase[zn] < 0 || zvec - gBase[zn] >= 258) { retVal = (-4); goto save_state_and_return; };; nextSym = gPerm[zvec - gBase[zn]]; };
1710ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            }
1711ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               while (nextSym == 0 || nextSym == 1);
1712ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1713ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            es++;
1714ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            uc = s->seqToUnseq[ s->mtfa[s->mtfbase[0]] ];
1715ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->unzftab[uc] += es;
1716ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1717ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (s->smallDecompress)
1718ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               while (es > 0) {
1719ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  if (nblock >= nblockMAX) { retVal = (-4); goto save_state_and_return; };;
1720ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  s->ll16[nblock] = (UInt16)uc;
1721ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  nblock++;
1722ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  es--;
1723ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               }
1724ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            else
1725ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               while (es > 0) {
1726ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  if (nblock >= nblockMAX) { retVal = (-4); goto save_state_and_return; };;
1727ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  s->tt[nblock] = (UInt32)uc;
1728ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  nblock++;
1729ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  es--;
1730ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               };
1731ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1732ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            continue;
1733ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1734ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         } else {
1735ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1736ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (nblock >= nblockMAX) { retVal = (-4); goto save_state_and_return; };;
1737ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1738ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1739ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            {
1740ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               Int32 ii, jj, kk, pp, lno, off;
1741ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               UInt32 nn;
1742ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               nn = (UInt32)(nextSym - 1);
1743ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1744ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               if (nn < 16) {
1745ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1746ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  pp = s->mtfbase[0];
1747ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  uc = s->mtfa[pp+nn];
1748ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  while (nn > 3) {
1749ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                     Int32 z = pp+nn;
1750ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                     s->mtfa[(z) ] = s->mtfa[(z)-1];
1751ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                     s->mtfa[(z)-1] = s->mtfa[(z)-2];
1752ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                     s->mtfa[(z)-2] = s->mtfa[(z)-3];
1753ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                     s->mtfa[(z)-3] = s->mtfa[(z)-4];
1754ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                     nn -= 4;
1755ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  }
1756ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  while (nn > 0) {
1757ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                     s->mtfa[(pp+nn)] = s->mtfa[(pp+nn)-1]; nn--;
1758ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  };
1759ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  s->mtfa[pp] = uc;
1760ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               } else {
1761ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1762ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  lno = nn / 16;
1763ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  off = nn % 16;
1764ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  pp = s->mtfbase[lno] + off;
1765ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  uc = s->mtfa[pp];
1766ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  while (pp > s->mtfbase[lno]) {
1767ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                     s->mtfa[pp] = s->mtfa[pp-1]; pp--;
1768ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  };
1769ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  s->mtfbase[lno]++;
1770ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  while (lno > 0) {
1771ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                     s->mtfbase[lno]--;
1772ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                     s->mtfa[s->mtfbase[lno]]
1773ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                        = s->mtfa[s->mtfbase[lno-1] + 16 - 1];
1774ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                     lno--;
1775ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  }
1776ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  s->mtfbase[0]--;
1777ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  s->mtfa[s->mtfbase[0]] = uc;
1778ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  if (s->mtfbase[0] == 0) {
1779ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                     kk = 4096 -1;
1780ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                     for (ii = 256 / 16 -1; ii >= 0; ii--) {
1781ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                        for (jj = 16 -1; jj >= 0; jj--) {
1782ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                           s->mtfa[kk] = s->mtfa[s->mtfbase[ii] + jj];
1783ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                           kk--;
1784ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                        }
1785ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                        s->mtfbase[ii] = kk + 1;
1786ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                     }
1787ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  }
1788ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               }
1789ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            }
1790ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1791ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1792ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->unzftab[s->seqToUnseq[uc]]++;
1793ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (s->smallDecompress)
1794ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               s->ll16[nblock] = (UInt16)(s->seqToUnseq[uc]); else
1795ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               s->tt[nblock] = (UInt32)(s->seqToUnseq[uc]);
1796ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            nblock++;
1797ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1798ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            { if (groupPos == 0) { groupNo++; if (groupNo >= nSelectors) { retVal = (-4); goto save_state_and_return; };; groupPos = 50; gSel = s->selector[groupNo]; gMinlen = s->minLens[gSel]; gLimit = &(s->limit[gSel][0]); gPerm = &(s->perm[gSel][0]); gBase = &(s->base[gSel][0]); } groupPos--; zn = gMinlen; case 40: s->state = 40; while (((Bool)1)) { if (s->bsLive >= zn) { UInt32 v; v = (s->bsBuff >> (s->bsLive-zn)) & ((1 << zn)-1); s->bsLive -= zn; zvec = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; }; while (1) { if (zn > 20 ) { retVal = (-4); goto save_state_and_return; };; if (zvec <= gLimit[zn]) break; zn++; case 41: s->state = 41; while (((Bool)1)) { if (s->bsLive >= 1) { UInt32 v; v = (s->bsBuff >> (s->bsLive-1)) & ((1 << 1)-1); s->bsLive -= 1; zj = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; }; zvec = (zvec << 1) | zj; }; if (zvec - gBase[zn] < 0 || zvec - gBase[zn] >= 258) { retVal = (-4); goto save_state_and_return; };; nextSym = gPerm[zvec - gBase[zn]]; };
1799ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            continue;
1800ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
1801ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
1802ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1803ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1804ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1805ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1806ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s->origPtr < 0 || s->origPtr >= nblock)
1807ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         { retVal = (-4); goto save_state_and_return; };;
1808ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1809ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1810ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->cftab[0] = 0;
1811ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for (i = 1; i <= 256; i++) s->cftab[i] = s->unzftab[i-1];
1812ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for (i = 1; i <= 256; i++) s->cftab[i] += s->cftab[i-1];
1813ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for (i = 0; i <= 256; i++) {
1814ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->cftab[i] < 0 || s->cftab[i] > nblock) {
1815ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1816ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            { retVal = (-4); goto save_state_and_return; };;
1817ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
1818ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
1819ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1820ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->state_out_len = 0;
1821ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->state_out_ch = 0;
1822ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      { s->calculatedBlockCRC = 0xffffffffL; };
1823ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->state = 2;
1824ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s->verbosity >= 2) vex_printf("rt+rld");
1825ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1826ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s->smallDecompress) {
1827ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1828ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1829ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         for (i = 0; i <= 256; i++) s->cftabCopy[i] = s->cftab[i];
1830ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1831ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1832ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         for (i = 0; i < nblock; i++) {
1833ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            uc = (UChar)(s->ll16[i]);
1834ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            { s->ll16[i] = (UInt16)(s->cftabCopy[uc] & 0x0000ffff); { if (((i) & 0x1) == 0) s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0xf0) | (s->cftabCopy[uc] >> 16); else s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0x0f) | ((s->cftabCopy[uc] >> 16) << 4); }; };
1835ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->cftabCopy[uc]++;
1836ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
1837ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1838ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1839ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         i = s->origPtr;
1840ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         j = (((UInt32)s->ll16[i]) | (((((UInt32)(s->ll4[(i) >> 1])) >> (((i) << 2) & 0x4)) & 0xF) << 16));
1841ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         do {
1842ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            Int32 tmp = (((UInt32)s->ll16[j]) | (((((UInt32)(s->ll4[(j) >> 1])) >> (((j) << 2) & 0x4)) & 0xF) << 16));
1843ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            { s->ll16[j] = (UInt16)(i & 0x0000ffff); { if (((j) & 0x1) == 0) s->ll4[(j) >> 1] = (s->ll4[(j) >> 1] & 0xf0) | (i >> 16); else s->ll4[(j) >> 1] = (s->ll4[(j) >> 1] & 0x0f) | ((i >> 16) << 4); }; };
1844ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            i = j;
1845ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            j = tmp;
1846ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
1847ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            while (i != s->origPtr);
1848ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1849ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->tPos = s->origPtr;
1850ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->nblock_used = 0;
1851ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->blockRandomised) {
1852ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->rNToGo = 0; s->rTPos = 0;
1853ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->k0 = BZ2_indexIntoF ( s->tPos, s->cftab ); s->tPos = (((UInt32)s->ll16[s->tPos]) | (((((UInt32)(s->ll4[(s->tPos) >> 1])) >> (((s->tPos) << 2) & 0x4)) & 0xF) << 16));; s->nblock_used++;
1854ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (s->rNToGo == 0) { s->rNToGo = BZ2_rNums[s->rTPos]; s->rTPos++; if (s->rTPos == 512) s->rTPos = 0; } s->rNToGo--;; s->k0 ^= ((s->rNToGo == 1) ? 1 : 0);
1855ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         } else {
1856ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->k0 = BZ2_indexIntoF ( s->tPos, s->cftab ); s->tPos = (((UInt32)s->ll16[s->tPos]) | (((((UInt32)(s->ll4[(s->tPos) >> 1])) >> (((s->tPos) << 2) & 0x4)) & 0xF) << 16));; s->nblock_used++;
1857ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
1858ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1859ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      } else {
1860ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1861ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1862ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         for (i = 0; i < nblock; i++) {
1863ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            uc = (UChar)(s->tt[i] & 0xff);
1864ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->tt[s->cftab[uc]] |= (i << 8);
1865ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->cftab[uc]++;
1866ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
1867ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1868ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->tPos = s->tt[s->origPtr] >> 8;
1869ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->nblock_used = 0;
1870ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->blockRandomised) {
1871ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->rNToGo = 0; s->rTPos = 0;
1872ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->tPos = s->tt[s->tPos]; s->k0 = (UChar)(s->tPos & 0xff); s->tPos >>= 8;; s->nblock_used++;
1873ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (s->rNToGo == 0) { s->rNToGo = BZ2_rNums[s->rTPos]; s->rTPos++; if (s->rTPos == 512) s->rTPos = 0; } s->rNToGo--;; s->k0 ^= ((s->rNToGo == 1) ? 1 : 0);
1874ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         } else {
1875ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->tPos = s->tt[s->tPos]; s->k0 = (UChar)(s->tPos & 0xff); s->tPos >>= 8;; s->nblock_used++;
1876ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
1877ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1878ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
1879ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1880ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      { retVal = 0; goto save_state_and_return; };;
1881ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1882ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1883ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1884ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    endhdr_2:
1885ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1886ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 42: s->state = 42; while (((Bool)1)) { if (s->bsLive >= 8) { UInt32 v; v = (s->bsBuff >> (s->bsLive-8)) & ((1 << 8)-1); s->bsLive -= 8; uc = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; };
1887ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (uc != 0x72) { retVal = (-4); goto save_state_and_return; };;
1888ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 43: s->state = 43; while (((Bool)1)) { if (s->bsLive >= 8) { UInt32 v; v = (s->bsBuff >> (s->bsLive-8)) & ((1 << 8)-1); s->bsLive -= 8; uc = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; };
1889ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (uc != 0x45) { retVal = (-4); goto save_state_and_return; };;
1890ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 44: s->state = 44; while (((Bool)1)) { if (s->bsLive >= 8) { UInt32 v; v = (s->bsBuff >> (s->bsLive-8)) & ((1 << 8)-1); s->bsLive -= 8; uc = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; };
1891ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (uc != 0x38) { retVal = (-4); goto save_state_and_return; };;
1892ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 45: s->state = 45; while (((Bool)1)) { if (s->bsLive >= 8) { UInt32 v; v = (s->bsBuff >> (s->bsLive-8)) & ((1 << 8)-1); s->bsLive -= 8; uc = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; };
1893ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (uc != 0x50) { retVal = (-4); goto save_state_and_return; };;
1894ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 46: s->state = 46; while (((Bool)1)) { if (s->bsLive >= 8) { UInt32 v; v = (s->bsBuff >> (s->bsLive-8)) & ((1 << 8)-1); s->bsLive -= 8; uc = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; };
1895ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (uc != 0x90) { retVal = (-4); goto save_state_and_return; };;
1896ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1897ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->storedCombinedCRC = 0;
1898ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 47: s->state = 47; while (((Bool)1)) { if (s->bsLive >= 8) { UInt32 v; v = (s->bsBuff >> (s->bsLive-8)) & ((1 << 8)-1); s->bsLive -= 8; uc = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; };
1899ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
1900ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 48: s->state = 48; while (((Bool)1)) { if (s->bsLive >= 8) { UInt32 v; v = (s->bsBuff >> (s->bsLive-8)) & ((1 << 8)-1); s->bsLive -= 8; uc = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; };
1901ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
1902ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 49: s->state = 49; while (((Bool)1)) { if (s->bsLive >= 8) { UInt32 v; v = (s->bsBuff >> (s->bsLive-8)) & ((1 << 8)-1); s->bsLive -= 8; uc = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; };
1903ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
1904ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 50: s->state = 50; while (((Bool)1)) { if (s->bsLive >= 8) { UInt32 v; v = (s->bsBuff >> (s->bsLive-8)) & ((1 << 8)-1); s->bsLive -= 8; uc = v; break; } if (s->strm->avail_in == 0) { retVal = 0; goto save_state_and_return; };; s->bsBuff = (s->bsBuff << 8) | ((UInt32) (*((UChar*)(s->strm->next_in)))); s->bsLive += 8; s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; };
1905ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
1906ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1907ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->state = 1;
1908ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      { retVal = 4; goto save_state_and_return; };;
1909ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1910ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      default: { if (!(((Bool)0))) bz_internal_error ( 4001 ); };
1911ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
1912ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1913ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   { if (!(((Bool)0))) bz_internal_error ( 4002 ); };
1914ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1915ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   save_state_and_return:
1916ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1917ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->save_i = i;
1918ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->save_j = j;
1919ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->save_t = t;
1920ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->save_alphaSize = alphaSize;
1921ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->save_nGroups = nGroups;
1922ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->save_nSelectors = nSelectors;
1923ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->save_EOB = EOB;
1924ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->save_groupNo = groupNo;
1925ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->save_groupPos = groupPos;
1926ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->save_nextSym = nextSym;
1927ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->save_nblockMAX = nblockMAX;
1928ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->save_nblock = nblock;
1929ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->save_es = es;
1930ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->save_N = N;
1931ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->save_curr = curr;
1932ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->save_zt = zt;
1933ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->save_zn = zn;
1934ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->save_zvec = zvec;
1935ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->save_zj = zj;
1936ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->save_gSel = gSel;
1937ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->save_gMinlen = gMinlen;
1938ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->save_gLimit = gLimit;
1939ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->save_gBase = gBase;
1940ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->save_gPerm = gPerm;
1941ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1942ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return retVal;
1943ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
1944ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1945ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic
1946ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__inline__
1947ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid fallbackSimpleSort ( UInt32* fmap,
1948ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                          UInt32* eclass,
1949ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                          Int32 lo,
1950ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                          Int32 hi )
1951ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
1952ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 i, j, tmp;
1953ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   UInt32 ec_tmp;
1954ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1955ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (lo == hi) return;
1956ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1957ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (hi - lo > 3) {
1958ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for ( i = hi-4; i >= lo; i-- ) {
1959ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         tmp = fmap[i];
1960ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         ec_tmp = eclass[tmp];
1961ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         for ( j = i+4; j <= hi && ec_tmp > eclass[fmap[j]]; j += 4 )
1962ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            fmap[j-4] = fmap[j];
1963ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         fmap[j-4] = tmp;
1964ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
1965ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
1966ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1967ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for ( i = hi-1; i >= lo; i-- ) {
1968ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      tmp = fmap[i];
1969ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      ec_tmp = eclass[tmp];
1970ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for ( j = i+1; j <= hi && ec_tmp > eclass[fmap[j]]; j++ )
1971ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         fmap[j-1] = fmap[j];
1972ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      fmap[j-1] = tmp;
1973ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
1974ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
1975ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1976ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic
1977ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid fallbackQSort3 ( UInt32* fmap,
1978ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                      UInt32* eclass,
1979ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                      Int32 loSt,
1980ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                      Int32 hiSt )
1981ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
1982ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 unLo, unHi, ltLo, gtHi, n, m;
1983ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 sp, lo, hi;
1984ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   UInt32 med, r, r3;
1985ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 stackLo[100];
1986ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 stackHi[100];
1987ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1988ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   r = 0;
1989ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1990ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   sp = 0;
1991ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   { stackLo[sp] = loSt; stackHi[sp] = hiSt; sp++; };
1992ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1993ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   while (sp > 0) {
1994ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1995ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      { if (!(sp < 100)) bz_internal_error ( 1004 ); };
1996ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
1997ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      { sp--; lo = stackLo[sp]; hi = stackHi[sp]; };
1998ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (hi - lo < 10) {
1999ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         fallbackSimpleSort ( fmap, eclass, lo, hi );
2000ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         continue;
2001ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
2002ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2003ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      r = ((r * 7621) + 1) % 32768;
2004ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      r3 = r % 3;
2005ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (r3 == 0) med = eclass[fmap[lo]]; else
2006ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (r3 == 1) med = eclass[fmap[(lo+hi)>>1]]; else
2007ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                   med = eclass[fmap[hi]];
2008ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2009ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      unLo = ltLo = lo;
2010ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      unHi = gtHi = hi;
2011ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2012ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      while (1) {
2013ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         while (1) {
2014ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (unLo > unHi) break;
2015ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            n = (Int32)eclass[fmap[unLo]] - (Int32)med;
2016ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (n == 0) {
2017ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               { Int32 zztmp = fmap[unLo]; fmap[unLo] = fmap[ltLo]; fmap[ltLo] = zztmp; };
2018ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               ltLo++; unLo++;
2019ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               continue;
2020ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            };
2021ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (n > 0) break;
2022ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            unLo++;
2023ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
2024ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         while (1) {
2025ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (unLo > unHi) break;
2026ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            n = (Int32)eclass[fmap[unHi]] - (Int32)med;
2027ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (n == 0) {
2028ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               { Int32 zztmp = fmap[unHi]; fmap[unHi] = fmap[gtHi]; fmap[gtHi] = zztmp; };
2029ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               gtHi--; unHi--;
2030ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               continue;
2031ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            };
2032ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (n < 0) break;
2033ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            unHi--;
2034ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
2035ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (unLo > unHi) break;
2036ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         { Int32 zztmp = fmap[unLo]; fmap[unLo] = fmap[unHi]; fmap[unHi] = zztmp; }; unLo++; unHi--;
2037ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
2038ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2039ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      ;
2040ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2041ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (gtHi < ltLo) continue;
2042ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2043ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      n = ((ltLo-lo) < (unLo-ltLo)) ? (ltLo-lo) : (unLo-ltLo); { Int32 yyp1 = (lo); Int32 yyp2 = (unLo-n); Int32 yyn = (n); while (yyn > 0) { { Int32 zztmp = fmap[yyp1]; fmap[yyp1] = fmap[yyp2]; fmap[yyp2] = zztmp; }; yyp1++; yyp2++; yyn--; } };
2044ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      m = ((hi-gtHi) < (gtHi-unHi)) ? (hi-gtHi) : (gtHi-unHi); { Int32 yyp1 = (unLo); Int32 yyp2 = (hi-m+1); Int32 yyn = (m); while (yyn > 0) { { Int32 zztmp = fmap[yyp1]; fmap[yyp1] = fmap[yyp2]; fmap[yyp2] = zztmp; }; yyp1++; yyp2++; yyn--; } };
2045ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2046ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      n = lo + unLo - ltLo - 1;
2047ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      m = hi - (gtHi - unHi) + 1;
2048ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2049ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (n - lo > hi - m) {
2050ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         { stackLo[sp] = lo; stackHi[sp] = n; sp++; };
2051ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         { stackLo[sp] = m; stackHi[sp] = hi; sp++; };
2052ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      } else {
2053ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         { stackLo[sp] = m; stackHi[sp] = hi; sp++; };
2054ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         { stackLo[sp] = lo; stackHi[sp] = n; sp++; };
2055ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
2056ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
2057ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
2058ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2059ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic
2060ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid fallbackSort ( UInt32* fmap,
2061ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                    UInt32* eclass,
2062ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                    UInt32* bhtab,
2063ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                    Int32 nblock,
2064ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                    Int32 verb )
2065ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
2066ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 ftab[257];
2067ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 ftabCopy[256];
2068ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 H, i, j, k, l, r, cc, cc1;
2069ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 nNotDone;
2070ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 nBhtab;
2071ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   UChar* eclass8 = (UChar*)eclass;
2072ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2073ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2074ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2075ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2076ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2077ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (verb >= 4)
2078ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      vex_printf("        bucket sorting ...\n");
2079ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 0; i < 257; i++) ftab[i] = 0;
2080ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 0; i < nblock; i++) ftab[eclass8[i]]++;
2081ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 0; i < 256; i++) ftabCopy[i] = ftab[i];
2082ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 1; i < 257; i++) ftab[i] += ftab[i-1];
2083ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2084ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 0; i < nblock; i++) {
2085ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      j = eclass8[i];
2086ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      k = ftab[j] - 1;
2087ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      ftab[j] = k;
2088ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      fmap[k] = i;
2089ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
2090ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2091ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   nBhtab = 2 + (nblock / 32);
2092ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 0; i < nBhtab; i++) bhtab[i] = 0;
2093ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 0; i < 256; i++) bhtab[(ftab[i]) >> 5] |= (1 << ((ftab[i]) & 31));
2094ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2095ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 0; i < 32; i++) {
2096ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      bhtab[(nblock + 2*i) >> 5] |= (1 << ((nblock + 2*i) & 31));
2097ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      bhtab[(nblock + 2*i + 1) >> 5] &= ~(1 << ((nblock + 2*i + 1) & 31));
2098ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
2099ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2100ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2101ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   H = 1;
2102ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   while (1) {
2103ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2104ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (verb >= 4)
2105ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         vex_printf("        depth %6d has ",H);
2106ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2107ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      j = 0;
2108ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for (i = 0; i < nblock; i++) {
2109ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if ((bhtab[(i) >> 5] & (1 << ((i) & 31)))) j = i;
2110ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         k = fmap[i] - H; if (k < 0) k += nblock;
2111ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         eclass[k] = j;
2112ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
2113ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2114ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      nNotDone = 0;
2115ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      r = -1;
2116ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      while (1) {
2117ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2118ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2119ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         k = r + 1;
2120ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         while ((bhtab[(k) >> 5] & (1 << ((k) & 31))) && ((k) & 0x01f)) k++;
2121ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if ((bhtab[(k) >> 5] & (1 << ((k) & 31)))) {
2122ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            while (bhtab[(k) >> 5] == 0xffffffff) k += 32;
2123ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            while ((bhtab[(k) >> 5] & (1 << ((k) & 31)))) k++;
2124ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
2125ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         l = k - 1;
2126ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (l >= nblock) break;
2127ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         while (!(bhtab[(k) >> 5] & (1 << ((k) & 31))) && ((k) & 0x01f)) k++;
2128ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (!(bhtab[(k) >> 5] & (1 << ((k) & 31)))) {
2129ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            while (bhtab[(k) >> 5] == 0x00000000) k += 32;
2130ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            while (!(bhtab[(k) >> 5] & (1 << ((k) & 31)))) k++;
2131ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
2132ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         r = k - 1;
2133ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (r >= nblock) break;
2134ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2135ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2136ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (r > l) {
2137ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            nNotDone += (r - l + 1);
2138ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            fallbackQSort3 ( fmap, eclass, l, r );
2139ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2140ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2141ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            cc = -1;
2142ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            for (i = l; i <= r; i++) {
2143ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               cc1 = eclass[fmap[i]];
2144ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               if (cc != cc1) { bhtab[(i) >> 5] |= (1 << ((i) & 31)); cc = cc1; };
2145ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            }
2146ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
2147ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
2148ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2149ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (verb >= 4)
2150ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         vex_printf("%6d unresolved strings\n",nNotDone);
2151ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2152ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      H *= 2;
2153ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (H > nblock || nNotDone == 0) break;
2154ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
2155ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2156ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2157ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2158ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2159ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2160ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2161ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (verb >= 4)
2162ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      vex_printf("        reconstructing block ...\n");
2163ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   j = 0;
2164ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 0; i < nblock; i++) {
2165ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      while (ftabCopy[j] == 0) j++;
2166ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      ftabCopy[j]--;
2167ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      eclass8[fmap[i]] = (UChar)j;
2168ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
2169ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   { if (!(j < 256)) bz_internal_error ( 1005 ); };
2170ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
2171ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2172ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic
2173ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__inline__
2174ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownBool mainGtU ( UInt32 i1,
2175ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               UInt32 i2,
2176ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               UChar* block,
2177ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               UInt16* quadrant,
2178ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               UInt32 nblock,
2179ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               Int32* budget )
2180ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
2181ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 k;
2182ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   UChar c1, c2;
2183ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   UInt16 s1, s2;
2184ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2185ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   ;
2186ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2187ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   c1 = block[i1]; c2 = block[i2];
2188ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (c1 != c2) return (c1 > c2);
2189ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   i1++; i2++;
2190ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2191ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   c1 = block[i1]; c2 = block[i2];
2192ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (c1 != c2) return (c1 > c2);
2193ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   i1++; i2++;
2194ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2195ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   c1 = block[i1]; c2 = block[i2];
2196ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (c1 != c2) return (c1 > c2);
2197ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   i1++; i2++;
2198ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2199ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   c1 = block[i1]; c2 = block[i2];
2200ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (c1 != c2) return (c1 > c2);
2201ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   i1++; i2++;
2202ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2203ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   c1 = block[i1]; c2 = block[i2];
2204ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (c1 != c2) return (c1 > c2);
2205ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   i1++; i2++;
2206ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2207ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   c1 = block[i1]; c2 = block[i2];
2208ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (c1 != c2) return (c1 > c2);
2209ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   i1++; i2++;
2210ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2211ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   c1 = block[i1]; c2 = block[i2];
2212ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (c1 != c2) return (c1 > c2);
2213ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   i1++; i2++;
2214ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2215ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   c1 = block[i1]; c2 = block[i2];
2216ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (c1 != c2) return (c1 > c2);
2217ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   i1++; i2++;
2218ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2219ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   c1 = block[i1]; c2 = block[i2];
2220ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (c1 != c2) return (c1 > c2);
2221ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   i1++; i2++;
2222ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2223ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   c1 = block[i1]; c2 = block[i2];
2224ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (c1 != c2) return (c1 > c2);
2225ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   i1++; i2++;
2226ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2227ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   c1 = block[i1]; c2 = block[i2];
2228ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (c1 != c2) return (c1 > c2);
2229ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   i1++; i2++;
2230ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2231ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   c1 = block[i1]; c2 = block[i2];
2232ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (c1 != c2) return (c1 > c2);
2233ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   i1++; i2++;
2234ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2235ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   k = nblock + 8;
2236ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2237ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   do {
2238ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2239ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      c1 = block[i1]; c2 = block[i2];
2240ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (c1 != c2) return (c1 > c2);
2241ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s1 = quadrant[i1]; s2 = quadrant[i2];
2242ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s1 != s2) return (s1 > s2);
2243ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      i1++; i2++;
2244ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2245ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      c1 = block[i1]; c2 = block[i2];
2246ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (c1 != c2) return (c1 > c2);
2247ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s1 = quadrant[i1]; s2 = quadrant[i2];
2248ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s1 != s2) return (s1 > s2);
2249ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      i1++; i2++;
2250ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2251ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      c1 = block[i1]; c2 = block[i2];
2252ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (c1 != c2) return (c1 > c2);
2253ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s1 = quadrant[i1]; s2 = quadrant[i2];
2254ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s1 != s2) return (s1 > s2);
2255ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      i1++; i2++;
2256ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2257ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      c1 = block[i1]; c2 = block[i2];
2258ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (c1 != c2) return (c1 > c2);
2259ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s1 = quadrant[i1]; s2 = quadrant[i2];
2260ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s1 != s2) return (s1 > s2);
2261ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      i1++; i2++;
2262ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2263ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      c1 = block[i1]; c2 = block[i2];
2264ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (c1 != c2) return (c1 > c2);
2265ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s1 = quadrant[i1]; s2 = quadrant[i2];
2266ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s1 != s2) return (s1 > s2);
2267ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      i1++; i2++;
2268ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2269ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      c1 = block[i1]; c2 = block[i2];
2270ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (c1 != c2) return (c1 > c2);
2271ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s1 = quadrant[i1]; s2 = quadrant[i2];
2272ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s1 != s2) return (s1 > s2);
2273ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      i1++; i2++;
2274ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2275ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      c1 = block[i1]; c2 = block[i2];
2276ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (c1 != c2) return (c1 > c2);
2277ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s1 = quadrant[i1]; s2 = quadrant[i2];
2278ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s1 != s2) return (s1 > s2);
2279ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      i1++; i2++;
2280ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2281ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      c1 = block[i1]; c2 = block[i2];
2282ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (c1 != c2) return (c1 > c2);
2283ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s1 = quadrant[i1]; s2 = quadrant[i2];
2284ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s1 != s2) return (s1 > s2);
2285ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      i1++; i2++;
2286ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2287ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (i1 >= nblock) i1 -= nblock;
2288ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (i2 >= nblock) i2 -= nblock;
2289ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2290ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      k -= 8;
2291ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      (*budget)--;
2292ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
2293ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      while (k >= 0);
2294ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2295ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return ((Bool)0);
2296ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
2297ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2298ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic
2299ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownInt32 incs[14] = { 1, 4, 13, 40, 121, 364, 1093, 3280,
2300ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                   9841, 29524, 88573, 265720,
2301ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                   797161, 2391484 };
2302ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2303ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic
2304ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid mainSimpleSort ( UInt32* ptr,
2305ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                      UChar* block,
2306ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                      UInt16* quadrant,
2307ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                      Int32 nblock,
2308ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                      Int32 lo,
2309ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                      Int32 hi,
2310ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                      Int32 d,
2311ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                      Int32* budget )
2312ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
2313ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 i, j, h, bigN, hp;
2314ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   UInt32 v;
2315ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2316ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   bigN = hi - lo + 1;
2317ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (bigN < 2) return;
2318ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2319ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   hp = 0;
2320ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   while (incs[hp] < bigN) hp++;
2321ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   hp--;
2322ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2323ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (; hp >= 0; hp--) {
2324ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      h = incs[hp];
2325ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2326ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      i = lo + h;
2327ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      while (((Bool)1)) {
2328ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2329ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2330ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (i > hi) break;
2331ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         v = ptr[i];
2332ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         j = i;
2333ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         while ( mainGtU (
2334ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                    ptr[j-h]+d, v+d, block, quadrant, nblock, budget
2335ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                 ) ) {
2336ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            ptr[j] = ptr[j-h];
2337ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            j = j - h;
2338ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (j <= (lo + h - 1)) break;
2339ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
2340ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         ptr[j] = v;
2341ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         i++;
2342ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2343ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2344ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (i > hi) break;
2345ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         v = ptr[i];
2346ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         j = i;
2347ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         while ( mainGtU (
2348ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                    ptr[j-h]+d, v+d, block, quadrant, nblock, budget
2349ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                 ) ) {
2350ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            ptr[j] = ptr[j-h];
2351ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            j = j - h;
2352ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (j <= (lo + h - 1)) break;
2353ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
2354ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         ptr[j] = v;
2355ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         i++;
2356ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2357ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2358ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (i > hi) break;
2359ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         v = ptr[i];
2360ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         j = i;
2361ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         while ( mainGtU (
2362ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                    ptr[j-h]+d, v+d, block, quadrant, nblock, budget
2363ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                 ) ) {
2364ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            ptr[j] = ptr[j-h];
2365ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            j = j - h;
2366ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (j <= (lo + h - 1)) break;
2367ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
2368ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         ptr[j] = v;
2369ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         i++;
2370ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2371ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (*budget < 0) return;
2372ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
2373ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
2374ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
2375ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2376ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic
2377ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__inline__
2378ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownUChar mmed3 ( UChar a, UChar b, UChar c )
2379ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
2380ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   UChar t;
2381ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (a > b) { t = a; a = b; b = t; };
2382ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (b > c) {
2383ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      b = c;
2384ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (a > b) b = a;
2385ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
2386ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return b;
2387ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
2388ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2389ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic
2390ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid mainQSort3 ( UInt32* ptr,
2391ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  UChar* block,
2392ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  UInt16* quadrant,
2393ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  Int32 nblock,
2394ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  Int32 loSt,
2395ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  Int32 hiSt,
2396ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  Int32 dSt,
2397ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  Int32* budget )
2398ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
2399ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 unLo, unHi, ltLo, gtHi, n, m, med;
2400ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 sp, lo, hi, d;
2401ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2402ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 stackLo[100];
2403ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 stackHi[100];
2404ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 stackD [100];
2405ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2406ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 nextLo[3];
2407ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 nextHi[3];
2408ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 nextD [3];
2409ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2410ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   sp = 0;
2411ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   { stackLo[sp] = loSt; stackHi[sp] = hiSt; stackD [sp] = dSt; sp++; };
2412ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2413ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   while (sp > 0) {
2414ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2415ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      { if (!(sp < 100)) bz_internal_error ( 1001 ); };
2416ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2417ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      { sp--; lo = stackLo[sp]; hi = stackHi[sp]; d = stackD [sp]; };
2418ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (hi - lo < 20 ||
2419ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          d > (2 + 12)) {
2420ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         mainSimpleSort ( ptr, block, quadrant, nblock, lo, hi, d, budget );
2421ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (*budget < 0) return;
2422ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         continue;
2423ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
2424ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2425ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      med = (Int32)
2426ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            mmed3 ( block[ptr[ lo ]+d],
2427ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                    block[ptr[ hi ]+d],
2428ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                    block[ptr[ (lo+hi)>>1 ]+d] );
2429ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2430ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      unLo = ltLo = lo;
2431ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      unHi = gtHi = hi;
2432ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2433ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      while (((Bool)1)) {
2434ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         while (((Bool)1)) {
2435ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (unLo > unHi) break;
2436ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            n = ((Int32)block[ptr[unLo]+d]) - med;
2437ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (n == 0) {
2438ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               { Int32 zztmp = ptr[unLo]; ptr[unLo] = ptr[ltLo]; ptr[ltLo] = zztmp; };
2439ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               ltLo++; unLo++; continue;
2440ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            };
2441ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (n > 0) break;
2442ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            unLo++;
2443ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
2444ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         while (((Bool)1)) {
2445ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (unLo > unHi) break;
2446ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            n = ((Int32)block[ptr[unHi]+d]) - med;
2447ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (n == 0) {
2448ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               { Int32 zztmp = ptr[unHi]; ptr[unHi] = ptr[gtHi]; ptr[gtHi] = zztmp; };
2449ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               gtHi--; unHi--; continue;
2450ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            };
2451ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (n < 0) break;
2452ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            unHi--;
2453ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
2454ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (unLo > unHi) break;
2455ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         { Int32 zztmp = ptr[unLo]; ptr[unLo] = ptr[unHi]; ptr[unHi] = zztmp; }; unLo++; unHi--;
2456ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
2457ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2458ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      ;
2459ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2460ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (gtHi < ltLo) {
2461ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         { stackLo[sp] = lo; stackHi[sp] = hi; stackD [sp] = d+1; sp++; };
2462ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         continue;
2463ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
2464ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2465ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      n = ((ltLo-lo) < (unLo-ltLo)) ? (ltLo-lo) : (unLo-ltLo); { Int32 yyp1 = (lo); Int32 yyp2 = (unLo-n); Int32 yyn = (n); while (yyn > 0) { { Int32 zztmp = ptr[yyp1]; ptr[yyp1] = ptr[yyp2]; ptr[yyp2] = zztmp; }; yyp1++; yyp2++; yyn--; } };
2466ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      m = ((hi-gtHi) < (gtHi-unHi)) ? (hi-gtHi) : (gtHi-unHi); { Int32 yyp1 = (unLo); Int32 yyp2 = (hi-m+1); Int32 yyn = (m); while (yyn > 0) { { Int32 zztmp = ptr[yyp1]; ptr[yyp1] = ptr[yyp2]; ptr[yyp2] = zztmp; }; yyp1++; yyp2++; yyn--; } };
2467ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2468ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      n = lo + unLo - ltLo - 1;
2469ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      m = hi - (gtHi - unHi) + 1;
2470ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2471ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      nextLo[0] = lo; nextHi[0] = n; nextD[0] = d;
2472ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      nextLo[1] = m; nextHi[1] = hi; nextD[1] = d;
2473ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      nextLo[2] = n+1; nextHi[2] = m-1; nextD[2] = d+1;
2474ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2475ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if ((nextHi[0]-nextLo[0]) < (nextHi[1]-nextLo[1])) { Int32 tz; tz = nextLo[0]; nextLo[0] = nextLo[1]; nextLo[1] = tz; tz = nextHi[0]; nextHi[0] = nextHi[1]; nextHi[1] = tz; tz = nextD [0]; nextD [0] = nextD [1]; nextD [1] = tz; };
2476ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if ((nextHi[1]-nextLo[1]) < (nextHi[2]-nextLo[2])) { Int32 tz; tz = nextLo[1]; nextLo[1] = nextLo[2]; nextLo[2] = tz; tz = nextHi[1]; nextHi[1] = nextHi[2]; nextHi[2] = tz; tz = nextD [1]; nextD [1] = nextD [2]; nextD [2] = tz; };
2477ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if ((nextHi[0]-nextLo[0]) < (nextHi[1]-nextLo[1])) { Int32 tz; tz = nextLo[0]; nextLo[0] = nextLo[1]; nextLo[1] = tz; tz = nextHi[0]; nextHi[0] = nextHi[1]; nextHi[1] = tz; tz = nextD [0]; nextD [0] = nextD [1]; nextD [1] = tz; };
2478ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2479ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      ;
2480ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      ;
2481ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2482ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      { stackLo[sp] = nextLo[0]; stackHi[sp] = nextHi[0]; stackD [sp] = nextD[0]; sp++; };
2483ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      { stackLo[sp] = nextLo[1]; stackHi[sp] = nextHi[1]; stackD [sp] = nextD[1]; sp++; };
2484ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      { stackLo[sp] = nextLo[2]; stackHi[sp] = nextHi[2]; stackD [sp] = nextD[2]; sp++; };
2485ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
2486ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
2487ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2488ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic
2489ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid mainSort ( UInt32* ptr,
2490ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                UChar* block,
2491ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                UInt16* quadrant,
2492ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                UInt32* ftab,
2493ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                Int32 nblock,
2494ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                Int32 verb,
2495ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                Int32* budget )
2496ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
2497ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 i, j, k, ss, sb;
2498ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 runningOrder[256];
2499ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Bool bigDone[256];
2500ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 copyStart[256];
2501ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 copyEnd [256];
2502ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   UChar c1;
2503ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 numQSorted;
2504ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   UInt16 s;
2505ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (verb >= 4) vex_printf("        main sort initialise ...\n");
2506ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2507ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2508ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 65536; i >= 0; i--) ftab[i] = 0;
2509ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2510ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   j = block[0] << 8;
2511ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   i = nblock-1;
2512ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (; i >= 3; i -= 4) {
2513ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      quadrant[i] = 0;
2514ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      j = (j >> 8) | ( ((UInt16)block[i]) << 8);
2515ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      ftab[j]++;
2516ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      quadrant[i-1] = 0;
2517ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      j = (j >> 8) | ( ((UInt16)block[i-1]) << 8);
2518ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      ftab[j]++;
2519ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      quadrant[i-2] = 0;
2520ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      j = (j >> 8) | ( ((UInt16)block[i-2]) << 8);
2521ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      ftab[j]++;
2522ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      quadrant[i-3] = 0;
2523ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      j = (j >> 8) | ( ((UInt16)block[i-3]) << 8);
2524ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      ftab[j]++;
2525ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
2526ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (; i >= 0; i--) {
2527ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      quadrant[i] = 0;
2528ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      j = (j >> 8) | ( ((UInt16)block[i]) << 8);
2529ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      ftab[j]++;
2530ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
2531ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2532ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2533ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 0; i < (2 + 12 + 18 + 2); i++) {
2534ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      block [nblock+i] = block[i];
2535ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      quadrant[nblock+i] = 0;
2536ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
2537ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2538ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (verb >= 4) vex_printf("        bucket sorting ...\n");
2539ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2540ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2541ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 1; i <= 65536; i++) ftab[i] += ftab[i-1];
2542ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2543ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s = block[0] << 8;
2544ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   i = nblock-1;
2545ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (; i >= 3; i -= 4) {
2546ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s = (s >> 8) | (block[i] << 8);
2547ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      j = ftab[s] -1;
2548ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      ftab[s] = j;
2549ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      ptr[j] = i;
2550ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s = (s >> 8) | (block[i-1] << 8);
2551ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      j = ftab[s] -1;
2552ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      ftab[s] = j;
2553ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      ptr[j] = i-1;
2554ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s = (s >> 8) | (block[i-2] << 8);
2555ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      j = ftab[s] -1;
2556ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      ftab[s] = j;
2557ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      ptr[j] = i-2;
2558ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s = (s >> 8) | (block[i-3] << 8);
2559ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      j = ftab[s] -1;
2560ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      ftab[s] = j;
2561ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      ptr[j] = i-3;
2562ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
2563ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (; i >= 0; i--) {
2564ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s = (s >> 8) | (block[i] << 8);
2565ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      j = ftab[s] -1;
2566ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      ftab[s] = j;
2567ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      ptr[j] = i;
2568ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
2569ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2570ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2571ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2572ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2573ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2574ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2575ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 0; i <= 255; i++) {
2576ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      bigDone [i] = ((Bool)0);
2577ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      runningOrder[i] = i;
2578ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
2579ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2580ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   {
2581ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 vv;
2582ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 h = 1;
2583ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      do h = 3 * h + 1; while (h <= 256);
2584ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      do {
2585ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         h = h / 3;
2586ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         for (i = h; i <= 255; i++) {
2587ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            vv = runningOrder[i];
2588ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            j = i;
2589ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            while ( (ftab[((runningOrder[j-h])+1) << 8] - ftab[(runningOrder[j-h]) << 8]) > (ftab[((vv)+1) << 8] - ftab[(vv) << 8]) ) {
2590ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               runningOrder[j] = runningOrder[j-h];
2591ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               j = j - h;
2592ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               if (j <= (h - 1)) goto zero;
2593ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            }
2594ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            zero:
2595ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            runningOrder[j] = vv;
2596ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
2597ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      } while (h != 1);
2598ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
2599ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2600ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2601ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2602ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2603ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2604ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   numQSorted = 0;
2605ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2606ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 0; i <= 255; i++) {
2607ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2608ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2609ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2610ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2611ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2612ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2613ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2614ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      ss = runningOrder[i];
2615ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2616ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for (j = 0; j <= 255; j++) {
2617ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (j != ss) {
2618ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            sb = (ss << 8) + j;
2619ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if ( ! (ftab[sb] & (1 << 21)) ) {
2620ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               Int32 lo = ftab[sb] & (~((1 << 21)));
2621ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               Int32 hi = (ftab[sb+1] & (~((1 << 21)))) - 1;
2622ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               if (hi > lo) {
2623ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  if (verb >= 4)
2624ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                     vex_printf("        qsort [0x%x, 0x%x]   " "done %d   this %d\n",ss,j,numQSorted,hi - lo + 1);
2625ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2626ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2627ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  mainQSort3 (
2628ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                     ptr, block, quadrant, nblock,
2629ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                     lo, hi, 2, budget
2630ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  );
2631ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  numQSorted += (hi - lo + 1);
2632ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  if (*budget < 0) return;
2633ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               }
2634ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            }
2635ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            ftab[sb] |= (1 << 21);
2636ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
2637ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
2638ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2639ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      { if (!(!bigDone[ss])) bz_internal_error ( 1006 ); };
2640ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2641ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      {
2642ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         for (j = 0; j <= 255; j++) {
2643ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            copyStart[j] = ftab[(j << 8) + ss] & (~((1 << 21)));
2644ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            copyEnd [j] = (ftab[(j << 8) + ss + 1] & (~((1 << 21)))) - 1;
2645ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
2646ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         for (j = ftab[ss << 8] & (~((1 << 21))); j < copyStart[ss]; j++) {
2647ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            k = ptr[j]-1; if (k < 0) k += nblock;
2648ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            c1 = block[k];
2649ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (!bigDone[c1])
2650ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               ptr[ copyStart[c1]++ ] = k;
2651ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
2652ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         for (j = (ftab[(ss+1) << 8] & (~((1 << 21)))) - 1; j > copyEnd[ss]; j--) {
2653ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            k = ptr[j]-1; if (k < 0) k += nblock;
2654ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            c1 = block[k];
2655ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (!bigDone[c1])
2656ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               ptr[ copyEnd[c1]-- ] = k;
2657ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
2658ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
2659ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2660ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      { if (!((copyStart[ss]-1 == copyEnd[ss]) || (copyStart[ss] == 0 && copyEnd[ss] == nblock-1))) bz_internal_error ( 1007 ); }
2661ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2662ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for (j = 0; j <= 255; j++) ftab[(j << 8) + ss] |= (1 << 21);
2663ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2664ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      bigDone[ss] = ((Bool)1);
2665ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2666ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (i < 255) {
2667ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         Int32 bbStart = ftab[ss << 8] & (~((1 << 21)));
2668ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         Int32 bbSize = (ftab[(ss+1) << 8] & (~((1 << 21)))) - bbStart;
2669ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         Int32 shifts = 0;
2670ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2671ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         while ((bbSize >> shifts) > 65534) shifts++;
2672ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2673ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         for (j = bbSize-1; j >= 0; j--) {
2674ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            Int32 a2update = ptr[bbStart + j];
2675ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            UInt16 qVal = (UInt16)(j >> shifts);
2676ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            quadrant[a2update] = qVal;
2677ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (a2update < (2 + 12 + 18 + 2))
2678ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               quadrant[a2update + nblock] = qVal;
2679ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
2680ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         { if (!(((bbSize-1) >> shifts) <= 65535)) bz_internal_error ( 1002 ); };
2681ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
2682ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2683ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
2684ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2685ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (verb >= 4)
2686ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      vex_printf("        %d pointers, %d sorted, %d scanned\n",nblock,numQSorted,nblock - numQSorted);
2687ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2688ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
2689ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2690ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid BZ2_blockSort ( EState* s )
2691ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
2692ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   UInt32* ptr = s->ptr;
2693ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   UChar* block = s->block;
2694ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   UInt32* ftab = s->ftab;
2695ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 nblock = s->nblock;
2696ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 verb = s->verbosity;
2697ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 wfact = s->workFactor;
2698ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   UInt16* quadrant;
2699ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 budget;
2700ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 budgetInit;
2701ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 i;
2702ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2703ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (nblock < 1000 ) {
2704ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb );
2705ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   } else {
2706ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2707ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2708ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2709ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2710ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2711ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      i = nblock+(2 + 12 + 18 + 2);
2712ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (i & 1) i++;
2713ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      quadrant = (UInt16*)(&(block[i]));
2714ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2715ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (wfact < 1 ) wfact = 1;
2716ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (wfact > 100) wfact = 100;
2717ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      budgetInit = nblock * ((wfact-1) / 3);
2718ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      budget = budgetInit;
2719ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2720ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      mainSort ( ptr, block, quadrant, ftab, nblock, verb, &budget );
2721ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (0 && verb >= 3)
2722ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         vex_printf("      %d work, %d block, ratio %5.2f\n",budgetInit - budget,nblock,(float)(budgetInit - budget) / (float)(nblock==0 ? 1 : nblock));
2723ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2724ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2725ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2726ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2727ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (budget < 0) {
2728ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (verb >= 2)
2729ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            vex_printf("    too repetitive; using fallback" " sorting algorithm\n");
2730ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2731ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb );
2732ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
2733ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
2734ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2735ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->origPtr = -1;
2736ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 0; i < s->nblock; i++)
2737ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (ptr[i] == 0)
2738ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         { s->origPtr = i; break; };
2739ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2740ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   { if (!(s->origPtr != -1)) bz_internal_error ( 1003 ); };
2741ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
2742ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2743ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid BZ2_hbMakeCodeLengths ( UChar *len,
2744ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                             Int32 *freq,
2745ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                             Int32 alphaSize,
2746ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                             Int32 maxLen )
2747ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
2748ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2749ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2750ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2751ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2752ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 nNodes, nHeap, n1, n2, i, j, k;
2753ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Bool tooLong;
2754ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2755ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 heap [ 258 + 2 ];
2756ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 weight [ 258 * 2 ];
2757ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 parent [ 258 * 2 ];
2758ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2759ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 0; i < alphaSize; i++)
2760ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      weight[i+1] = (freq[i] == 0 ? 1 : freq[i]) << 8;
2761ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2762ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   while (((Bool)1)) {
2763ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2764ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      nNodes = alphaSize;
2765ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      nHeap = 0;
2766ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2767ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      heap[0] = 0;
2768ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      weight[0] = 0;
2769ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      parent[0] = -2;
2770ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2771ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for (i = 1; i <= alphaSize; i++) {
2772ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         parent[i] = -1;
2773ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         nHeap++;
2774ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         heap[nHeap] = i;
2775ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         { Int32 zz, tmp; zz = nHeap; tmp = heap[zz]; while (weight[tmp] < weight[heap[zz >> 1]]) { heap[zz] = heap[zz >> 1]; zz >>= 1; } heap[zz] = tmp; };
2776ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
2777ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2778ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      { if (!(nHeap < (258 +2))) bz_internal_error ( 2001 ); };
2779ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2780ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      while (nHeap > 1) {
2781ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         n1 = heap[1]; heap[1] = heap[nHeap]; nHeap--; { Int32 zz, yy, tmp; zz = 1; tmp = heap[zz]; while (((Bool)1)) { yy = zz << 1; if (yy > nHeap) break; if (yy < nHeap && weight[heap[yy+1]] < weight[heap[yy]]) yy++; if (weight[tmp] < weight[heap[yy]]) break; heap[zz] = heap[yy]; zz = yy; } heap[zz] = tmp; };
2782ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         n2 = heap[1]; heap[1] = heap[nHeap]; nHeap--; { Int32 zz, yy, tmp; zz = 1; tmp = heap[zz]; while (((Bool)1)) { yy = zz << 1; if (yy > nHeap) break; if (yy < nHeap && weight[heap[yy+1]] < weight[heap[yy]]) yy++; if (weight[tmp] < weight[heap[yy]]) break; heap[zz] = heap[yy]; zz = yy; } heap[zz] = tmp; };
2783ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         nNodes++;
2784ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         parent[n1] = parent[n2] = nNodes;
2785ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         weight[nNodes] = (((weight[n1]) & 0xffffff00)+((weight[n2]) & 0xffffff00)) | (1 + ((((weight[n1]) & 0x000000ff)) > (((weight[n2]) & 0x000000ff)) ? (((weight[n1]) & 0x000000ff)) : (((weight[n2]) & 0x000000ff))));
2786ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         parent[nNodes] = -1;
2787ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         nHeap++;
2788ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         heap[nHeap] = nNodes;
2789ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         { Int32 zz, tmp; zz = nHeap; tmp = heap[zz]; while (weight[tmp] < weight[heap[zz >> 1]]) { heap[zz] = heap[zz >> 1]; zz >>= 1; } heap[zz] = tmp; };
2790ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
2791ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2792ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      { if (!(nNodes < (258 * 2))) bz_internal_error ( 2002 ); };
2793ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2794ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      tooLong = ((Bool)0);
2795ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for (i = 1; i <= alphaSize; i++) {
2796ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         j = 0;
2797ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         k = i;
2798ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         while (parent[k] >= 0) { k = parent[k]; j++; }
2799ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         len[i-1] = j;
2800ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (j > maxLen) tooLong = ((Bool)1);
2801ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
2802ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2803ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (! tooLong) break;
2804ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2805ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for (i = 1; i <= alphaSize; i++) {
2806ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         j = weight[i] >> 8;
2807ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         j = 1 + (j / 2);
2808ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         weight[i] = j << 8;
2809ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
2810ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
2811ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
2812ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2813ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2814ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2815ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid BZ2_hbAssignCodes ( Int32 *code,
2816ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                         UChar *length,
2817ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                         Int32 minLen,
2818ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                         Int32 maxLen,
2819ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                         Int32 alphaSize )
2820ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
2821ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 n, vec, i;
2822ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2823ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vec = 0;
2824ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (n = minLen; n <= maxLen; n++) {
2825ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for (i = 0; i < alphaSize; i++)
2826ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (length[i] == n) { code[i] = vec; vec++; };
2827ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      vec <<= 1;
2828ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
2829ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
2830ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2831ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2832ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2833ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid BZ2_hbCreateDecodeTables ( Int32 *limit,
2834ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                                Int32 *base,
2835ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                                Int32 *perm,
2836ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                                UChar *length,
2837ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                                Int32 minLen,
2838ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                                Int32 maxLen,
2839ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                                Int32 alphaSize )
2840ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
2841ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 pp, i, j, vec;
2842ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2843ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   pp = 0;
2844ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = minLen; i <= maxLen; i++)
2845ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for (j = 0; j < alphaSize; j++)
2846ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (length[j] == i) { perm[pp] = j; pp++; };
2847ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2848ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 0; i < 23; i++) base[i] = 0;
2849ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 0; i < alphaSize; i++) base[length[i]+1]++;
2850ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2851ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 1; i < 23; i++) base[i] += base[i-1];
2852ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2853ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 0; i < 23; i++) limit[i] = 0;
2854ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vec = 0;
2855ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2856ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = minLen; i <= maxLen; i++) {
2857ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      vec += (base[i+1] - base[i]);
2858ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      limit[i] = vec-1;
2859ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      vec <<= 1;
2860ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
2861ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = minLen + 1; i <= maxLen; i++)
2862ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      base[i] = ((limit[i-1] + 1) << 1) - base[i];
2863ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
2864ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2865ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid BZ2_bsInitWrite ( EState* s )
2866ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
2867ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->bsLive = 0;
2868ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->bsBuff = 0;
2869ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
2870ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2871ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2872ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2873ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic
2874ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid bsFinishWrite ( EState* s )
2875ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
2876ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   while (s->bsLive > 0) {
2877ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->zbits[s->numZ] = (UChar)(s->bsBuff >> 24);
2878ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->numZ++;
2879ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->bsBuff <<= 8;
2880ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->bsLive -= 8;
2881ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
2882ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
2883ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2884ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic
2885ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__inline__
2886ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid bsW ( EState* s, Int32 n, UInt32 v )
2887ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
2888ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   { while (s->bsLive >= 8) { s->zbits[s->numZ] = (UChar)(s->bsBuff >> 24); s->numZ++; s->bsBuff <<= 8; s->bsLive -= 8; } };
2889ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->bsBuff |= (v << (32 - s->bsLive - n));
2890ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->bsLive += n;
2891ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
2892ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2893ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2894ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2895ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic
2896ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid bsPutUInt32 ( EState* s, UInt32 u )
2897ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
2898ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   bsW ( s, 8, (u >> 24) & 0xffL );
2899ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   bsW ( s, 8, (u >> 16) & 0xffL );
2900ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   bsW ( s, 8, (u >> 8) & 0xffL );
2901ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   bsW ( s, 8, u & 0xffL );
2902ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
2903ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2904ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2905ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2906ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic
2907ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid bsPutUChar ( EState* s, UChar c )
2908ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
2909ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   bsW( s, 8, (UInt32)c );
2910ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
2911ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2912ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2913ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2914ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2915ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2916ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2917ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2918ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic
2919ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid makeMaps_e ( EState* s )
2920ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
2921ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 i;
2922ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->nInUse = 0;
2923ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 0; i < 256; i++)
2924ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s->inUse[i]) {
2925ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->unseqToSeq[i] = s->nInUse;
2926ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->nInUse++;
2927ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
2928ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
2929ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2930ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2931ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2932ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic
2933ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid generateMTFValues ( EState* s )
2934ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
2935ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   UChar yy[256];
2936ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 i, j;
2937ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 zPend;
2938ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 wr;
2939ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 EOB;
2940ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2941ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   UInt32* ptr = s->ptr;
2942ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   UChar* block = s->block;
2943ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   UInt16* mtfv = s->mtfv;
2944ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2945ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   makeMaps_e ( s );
2946ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   EOB = s->nInUse+1;
2947ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2948ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 0; i <= EOB; i++) s->mtfFreq[i] = 0;
2949ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2950ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   wr = 0;
2951ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   zPend = 0;
2952ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 0; i < s->nInUse; i++) yy[i] = (UChar) i;
2953ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2954ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 0; i < s->nblock; i++) {
2955ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UChar ll_i;
2956ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      ;
2957ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      j = ptr[i]-1; if (j < 0) j += s->nblock;
2958ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      ll_i = s->unseqToSeq[block[j]];
2959ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      ;
2960ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2961ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (yy[0] == ll_i) {
2962ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         zPend++;
2963ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      } else {
2964ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2965ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (zPend > 0) {
2966ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            zPend--;
2967ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            while (((Bool)1)) {
2968ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               if (zPend & 1) {
2969ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  mtfv[wr] = 1; wr++;
2970ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  s->mtfFreq[1]++;
2971ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               } else {
2972ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  mtfv[wr] = 0; wr++;
2973ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  s->mtfFreq[0]++;
2974ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               }
2975ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               if (zPend < 2) break;
2976ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               zPend = (zPend - 2) / 2;
2977ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            };
2978ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            zPend = 0;
2979ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
2980ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         {
2981ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            register UChar rtmp;
2982ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            register UChar* ryy_j;
2983ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            register UChar rll_i;
2984ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            rtmp = yy[1];
2985ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            yy[1] = yy[0];
2986ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            ryy_j = &(yy[1]);
2987ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            rll_i = ll_i;
2988ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            while ( rll_i != rtmp ) {
2989ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               register UChar rtmp2;
2990ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               ryy_j++;
2991ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               rtmp2 = rtmp;
2992ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               rtmp = *ryy_j;
2993ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               *ryy_j = rtmp2;
2994ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            };
2995ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            yy[0] = rtmp;
2996ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            j = ryy_j - &(yy[0]);
2997ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            mtfv[wr] = j+1; wr++; s->mtfFreq[j+1]++;
2998ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
2999ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3000ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
3001ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
3002ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3003ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (zPend > 0) {
3004ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      zPend--;
3005ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      while (((Bool)1)) {
3006ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (zPend & 1) {
3007ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            mtfv[wr] = 1; wr++;
3008ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->mtfFreq[1]++;
3009ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         } else {
3010ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            mtfv[wr] = 0; wr++;
3011ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->mtfFreq[0]++;
3012ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
3013ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (zPend < 2) break;
3014ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         zPend = (zPend - 2) / 2;
3015ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      };
3016ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      zPend = 0;
3017ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
3018ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3019ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   mtfv[wr] = EOB; wr++; s->mtfFreq[EOB]++;
3020ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3021ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->nMTF = wr;
3022ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
3023ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3024ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3025ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3026ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3027ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3028ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3029ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic
3030ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid sendMTFValues ( EState* s )
3031ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
3032ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 v, t, i, j, gs, ge, totc, bt, bc, iter;
3033ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 nSelectors, alphaSize, minLen, maxLen, selCtr;
3034ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 nGroups, nBytes;
3035ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3036ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   UInt16 cost[6];
3037ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 fave[6];
3038ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3039ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   UInt16* mtfv = s->mtfv;
3040ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3041ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (s->verbosity >= 3)
3042ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      vex_printf("      %d in block, %d after MTF & 1-2 coding, " "%d+2 syms in use\n",s->nblock,s->nMTF,s->nInUse);
3043ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3044ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3045ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3046ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   alphaSize = s->nInUse+2;
3047ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (t = 0; t < 6; t++)
3048ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for (v = 0; v < alphaSize; v++)
3049ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->len[t][v] = 15;
3050ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3051ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3052ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   { if (!(s->nMTF > 0)) bz_internal_error ( 3001 ); };
3053ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (s->nMTF < 200) nGroups = 2; else
3054ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (s->nMTF < 600) nGroups = 3; else
3055ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (s->nMTF < 1200) nGroups = 4; else
3056ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (s->nMTF < 2400) nGroups = 5; else
3057ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                       nGroups = 6;
3058ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3059ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3060ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   {
3061ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 nPart, remF, tFreq, aFreq;
3062ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3063ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      nPart = nGroups;
3064ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      remF = s->nMTF;
3065ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      gs = 0;
3066ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      while (nPart > 0) {
3067ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         tFreq = remF / nPart;
3068ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         ge = gs-1;
3069ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         aFreq = 0;
3070ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         while (aFreq < tFreq && ge < alphaSize-1) {
3071ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            ge++;
3072ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            aFreq += s->mtfFreq[ge];
3073ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
3074ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3075ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (ge > gs
3076ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown             && nPart != nGroups && nPart != 1
3077ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown             && ((nGroups-nPart) % 2 == 1)) {
3078ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            aFreq -= s->mtfFreq[ge];
3079ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            ge--;
3080ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
3081ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3082ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (0 && s->verbosity >= 3)
3083ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            vex_printf("      initial group %d, [%d .. %d], " "has %d syms (%4.1f%%)\n",nPart,gs,ge,aFreq,(100.0 * (float)aFreq) / (float)(s->nMTF));
3084ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3085ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3086ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3087ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3088ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         for (v = 0; v < alphaSize; v++)
3089ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (v >= gs && v <= ge)
3090ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               s->len[nPart-1][v] = 0; else
3091ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               s->len[nPart-1][v] = 15;
3092ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3093ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         nPart--;
3094ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         gs = ge+1;
3095ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         remF -= aFreq;
3096ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
3097ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
3098ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3099ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3100ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3101ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3102ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (iter = 0; iter < 4; iter++) {
3103ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3104ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for (t = 0; t < nGroups; t++) fave[t] = 0;
3105ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3106ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for (t = 0; t < nGroups; t++)
3107ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         for (v = 0; v < alphaSize; v++)
3108ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->rfreq[t][v] = 0;
3109ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3110ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3111ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3112ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3113ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3114ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (nGroups == 6) {
3115ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         for (v = 0; v < alphaSize; v++) {
3116ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->len_pack[v][0] = (s->len[1][v] << 16) | s->len[0][v];
3117ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->len_pack[v][1] = (s->len[3][v] << 16) | s->len[2][v];
3118ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->len_pack[v][2] = (s->len[5][v] << 16) | s->len[4][v];
3119ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  }
3120ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
3121ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3122ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      nSelectors = 0;
3123ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      totc = 0;
3124ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      gs = 0;
3125ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      while (((Bool)1)) {
3126ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3127ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3128ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (gs >= s->nMTF) break;
3129ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         ge = gs + 50 - 1;
3130ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (ge >= s->nMTF) ge = s->nMTF-1;
3131ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3132ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3133ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3134ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3135ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3136ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         for (t = 0; t < nGroups; t++) cost[t] = 0;
3137ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3138ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (nGroups == 6 && 50 == ge-gs+1) {
3139ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3140ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            register UInt32 cost01, cost23, cost45;
3141ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            register UInt16 icv;
3142ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            cost01 = cost23 = cost45 = 0;
3143ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3144ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3145ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3146ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3147ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3148ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3149ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3150ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            icv = mtfv[gs+(0)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(1)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(2)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(3)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(4)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];;
3151ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            icv = mtfv[gs+(5)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(6)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(7)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(8)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(9)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];;
3152ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            icv = mtfv[gs+(10)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(11)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(12)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(13)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(14)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];;
3153ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            icv = mtfv[gs+(15)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(16)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(17)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(18)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(19)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];;
3154ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            icv = mtfv[gs+(20)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(21)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(22)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(23)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(24)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];;
3155ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            icv = mtfv[gs+(25)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(26)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(27)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(28)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(29)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];;
3156ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            icv = mtfv[gs+(30)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(31)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(32)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(33)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(34)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];;
3157ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            icv = mtfv[gs+(35)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(36)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(37)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(38)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(39)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];;
3158ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            icv = mtfv[gs+(40)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(41)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(42)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(43)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(44)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];;
3159ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            icv = mtfv[gs+(45)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(46)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(47)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(48)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];; icv = mtfv[gs+(49)]; cost01 += s->len_pack[icv][0]; cost23 += s->len_pack[icv][1]; cost45 += s->len_pack[icv][2];;
3160ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3161ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3162ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3163ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            cost[0] = cost01 & 0xffff; cost[1] = cost01 >> 16;
3164ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            cost[2] = cost23 & 0xffff; cost[3] = cost23 >> 16;
3165ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            cost[4] = cost45 & 0xffff; cost[5] = cost45 >> 16;
3166ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3167ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         } else {
3168ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3169ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            for (i = gs; i <= ge; i++) {
3170ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               UInt16 icv = mtfv[i];
3171ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               for (t = 0; t < nGroups; t++) cost[t] += s->len[t][icv];
3172ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            }
3173ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
3174ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3175ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3176ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3177ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3178ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3179ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         bc = 999999999; bt = -1;
3180ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         for (t = 0; t < nGroups; t++)
3181ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (cost[t] < bc) { bc = cost[t]; bt = t; };
3182ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         totc += bc;
3183ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         fave[bt]++;
3184ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->selector[nSelectors] = bt;
3185ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         nSelectors++;
3186ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3187ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3188ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3189ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3190ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (nGroups == 6 && 50 == ge-gs+1) {
3191ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3192ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3193ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3194ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3195ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->rfreq[bt][ mtfv[gs+(0)] ]++; s->rfreq[bt][ mtfv[gs+(1)] ]++; s->rfreq[bt][ mtfv[gs+(2)] ]++; s->rfreq[bt][ mtfv[gs+(3)] ]++; s->rfreq[bt][ mtfv[gs+(4)] ]++;
3196ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->rfreq[bt][ mtfv[gs+(5)] ]++; s->rfreq[bt][ mtfv[gs+(6)] ]++; s->rfreq[bt][ mtfv[gs+(7)] ]++; s->rfreq[bt][ mtfv[gs+(8)] ]++; s->rfreq[bt][ mtfv[gs+(9)] ]++;
3197ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->rfreq[bt][ mtfv[gs+(10)] ]++; s->rfreq[bt][ mtfv[gs+(11)] ]++; s->rfreq[bt][ mtfv[gs+(12)] ]++; s->rfreq[bt][ mtfv[gs+(13)] ]++; s->rfreq[bt][ mtfv[gs+(14)] ]++;
3198ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->rfreq[bt][ mtfv[gs+(15)] ]++; s->rfreq[bt][ mtfv[gs+(16)] ]++; s->rfreq[bt][ mtfv[gs+(17)] ]++; s->rfreq[bt][ mtfv[gs+(18)] ]++; s->rfreq[bt][ mtfv[gs+(19)] ]++;
3199ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->rfreq[bt][ mtfv[gs+(20)] ]++; s->rfreq[bt][ mtfv[gs+(21)] ]++; s->rfreq[bt][ mtfv[gs+(22)] ]++; s->rfreq[bt][ mtfv[gs+(23)] ]++; s->rfreq[bt][ mtfv[gs+(24)] ]++;
3200ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->rfreq[bt][ mtfv[gs+(25)] ]++; s->rfreq[bt][ mtfv[gs+(26)] ]++; s->rfreq[bt][ mtfv[gs+(27)] ]++; s->rfreq[bt][ mtfv[gs+(28)] ]++; s->rfreq[bt][ mtfv[gs+(29)] ]++;
3201ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->rfreq[bt][ mtfv[gs+(30)] ]++; s->rfreq[bt][ mtfv[gs+(31)] ]++; s->rfreq[bt][ mtfv[gs+(32)] ]++; s->rfreq[bt][ mtfv[gs+(33)] ]++; s->rfreq[bt][ mtfv[gs+(34)] ]++;
3202ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->rfreq[bt][ mtfv[gs+(35)] ]++; s->rfreq[bt][ mtfv[gs+(36)] ]++; s->rfreq[bt][ mtfv[gs+(37)] ]++; s->rfreq[bt][ mtfv[gs+(38)] ]++; s->rfreq[bt][ mtfv[gs+(39)] ]++;
3203ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->rfreq[bt][ mtfv[gs+(40)] ]++; s->rfreq[bt][ mtfv[gs+(41)] ]++; s->rfreq[bt][ mtfv[gs+(42)] ]++; s->rfreq[bt][ mtfv[gs+(43)] ]++; s->rfreq[bt][ mtfv[gs+(44)] ]++;
3204ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->rfreq[bt][ mtfv[gs+(45)] ]++; s->rfreq[bt][ mtfv[gs+(46)] ]++; s->rfreq[bt][ mtfv[gs+(47)] ]++; s->rfreq[bt][ mtfv[gs+(48)] ]++; s->rfreq[bt][ mtfv[gs+(49)] ]++;
3205ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3206ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3207ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3208ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         } else {
3209ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3210ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            for (i = gs; i <= ge; i++)
3211ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               s->rfreq[bt][ mtfv[i] ]++;
3212ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
3213ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3214ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         gs = ge+1;
3215ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
3216ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s->verbosity >= 3) {
3217ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         vex_printf("      pass %d: size is %d, grp uses are ",iter+1,totc/8);
3218ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3219ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         for (t = 0; t < nGroups; t++)
3220ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            vex_printf("%d ",fave[t]);
3221ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         vex_printf("\n");
3222ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
3223ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3224ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3225ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3226ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3227ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3228ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3229ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for (t = 0; t < nGroups; t++)
3230ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         BZ2_hbMakeCodeLengths ( &(s->len[t][0]), &(s->rfreq[t][0]),
3231ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                                 alphaSize, 17 );
3232ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
3233ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3234ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3235ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   { if (!(nGroups < 8)) bz_internal_error ( 3002 ); };
3236ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   { if (!(nSelectors < 32768 && nSelectors <= (2 + (900000 / 50)))) bz_internal_error ( 3003 ); };
3237ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3238ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3239ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3240ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3241ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3242ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   {
3243ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UChar pos[6], ll_i, tmp2, tmp;
3244ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for (i = 0; i < nGroups; i++) pos[i] = i;
3245ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for (i = 0; i < nSelectors; i++) {
3246ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         ll_i = s->selector[i];
3247ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         j = 0;
3248ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         tmp = pos[j];
3249ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         while ( ll_i != tmp ) {
3250ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            j++;
3251ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            tmp2 = tmp;
3252ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            tmp = pos[j];
3253ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            pos[j] = tmp2;
3254ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         };
3255ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         pos[0] = tmp;
3256ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->selectorMtf[i] = j;
3257ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
3258ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   };
3259ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3260ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3261ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (t = 0; t < nGroups; t++) {
3262ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      minLen = 32;
3263ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      maxLen = 0;
3264ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for (i = 0; i < alphaSize; i++) {
3265ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->len[t][i] > maxLen) maxLen = s->len[t][i];
3266ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->len[t][i] < minLen) minLen = s->len[t][i];
3267ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
3268ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      { if (!(!(maxLen > 17 ))) bz_internal_error ( 3004 ); };
3269ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      { if (!(!(minLen < 1))) bz_internal_error ( 3005 ); };
3270ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      BZ2_hbAssignCodes ( &(s->code[t][0]), &(s->len[t][0]),
3271ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                          minLen, maxLen, alphaSize );
3272ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
3273ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3274ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3275ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   {
3276ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Bool inUse16[16];
3277ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for (i = 0; i < 16; i++) {
3278ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          inUse16[i] = ((Bool)0);
3279ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          for (j = 0; j < 16; j++)
3280ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown             if (s->inUse[i * 16 + j]) inUse16[i] = ((Bool)1);
3281ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
3282ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3283ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      nBytes = s->numZ;
3284ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for (i = 0; i < 16; i++)
3285ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (inUse16[i]) bsW(s,1,1); else bsW(s,1,0);
3286ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3287ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for (i = 0; i < 16; i++)
3288ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (inUse16[i])
3289ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            for (j = 0; j < 16; j++) {
3290ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               if (s->inUse[i * 16 + j]) bsW(s,1,1); else bsW(s,1,0);
3291ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            }
3292ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3293ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s->verbosity >= 3)
3294ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         vex_printf("      bytes: mapping %d, ",s->numZ-nBytes);
3295ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
3296ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3297ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3298ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   nBytes = s->numZ;
3299ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   bsW ( s, 3, nGroups );
3300ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   bsW ( s, 15, nSelectors );
3301ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 0; i < nSelectors; i++) {
3302ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for (j = 0; j < s->selectorMtf[i]; j++) bsW(s,1,1);
3303ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      bsW(s,1,0);
3304ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
3305ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (s->verbosity >= 3)
3306ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      vex_printf("selectors %d, ",s->numZ-nBytes);
3307ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3308ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3309ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   nBytes = s->numZ;
3310ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3311ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (t = 0; t < nGroups; t++) {
3312ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 curr = s->len[t][0];
3313ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      bsW ( s, 5, curr );
3314ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      for (i = 0; i < alphaSize; i++) {
3315ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         while (curr < s->len[t][i]) { bsW(s,2,2); curr++; };
3316ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         while (curr > s->len[t][i]) { bsW(s,2,3); curr--; };
3317ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         bsW ( s, 1, 0 );
3318ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
3319ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
3320ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3321ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (s->verbosity >= 3)
3322ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      vex_printf("code lengths %d, ",s->numZ-nBytes);
3323ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3324ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3325ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   nBytes = s->numZ;
3326ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   selCtr = 0;
3327ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   gs = 0;
3328ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   while (((Bool)1)) {
3329ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (gs >= s->nMTF) break;
3330ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      ge = gs + 50 - 1;
3331ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (ge >= s->nMTF) ge = s->nMTF-1;
3332ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      { if (!(s->selector[selCtr] < nGroups)) bz_internal_error ( 3006 ); };
3333ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3334ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (nGroups == 6 && 50 == ge-gs+1) {
3335ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3336ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            UInt16 mtfv_i;
3337ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            UChar* s_len_sel_selCtr
3338ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               = &(s->len[s->selector[selCtr]][0]);
3339ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            Int32* s_code_sel_selCtr
3340ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               = &(s->code[s->selector[selCtr]][0]);
3341ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3342ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3343ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3344ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3345ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3346ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3347ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3348ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            mtfv_i = mtfv[gs+(0)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(1)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(2)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(3)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(4)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] );
3349ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            mtfv_i = mtfv[gs+(5)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(6)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(7)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(8)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(9)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] );
3350ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            mtfv_i = mtfv[gs+(10)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(11)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(12)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(13)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(14)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] );
3351ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            mtfv_i = mtfv[gs+(15)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(16)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(17)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(18)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(19)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] );
3352ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            mtfv_i = mtfv[gs+(20)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(21)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(22)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(23)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(24)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] );
3353ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            mtfv_i = mtfv[gs+(25)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(26)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(27)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(28)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(29)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] );
3354ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            mtfv_i = mtfv[gs+(30)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(31)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(32)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(33)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(34)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] );
3355ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            mtfv_i = mtfv[gs+(35)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(36)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(37)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(38)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(39)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] );
3356ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            mtfv_i = mtfv[gs+(40)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(41)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(42)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(43)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(44)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] );
3357ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            mtfv_i = mtfv[gs+(45)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(46)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(47)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(48)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] ); mtfv_i = mtfv[gs+(49)]; bsW ( s, s_len_sel_selCtr[mtfv_i], s_code_sel_selCtr[mtfv_i] );
3358ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3359ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3360ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3361ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      } else {
3362ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3363ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         for (i = gs; i <= ge; i++) {
3364ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            bsW ( s,
3365ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  s->len [s->selector[selCtr]] [mtfv[i]],
3366ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  s->code [s->selector[selCtr]] [mtfv[i]] );
3367ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
3368ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
3369ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3370ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3371ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      gs = ge+1;
3372ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      selCtr++;
3373ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
3374ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   { if (!(selCtr == nSelectors)) bz_internal_error ( 3007 ); };
3375ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3376ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (s->verbosity >= 3)
3377ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      vex_printf("codes %d\n",s->numZ-nBytes);
3378ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
3379ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3380ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3381ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3382ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid BZ2_compressBlock ( EState* s, Bool is_last_block )
3383ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
3384ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (s->nblock > 0) {
3385ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3386ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      { s->blockCRC = ~(s->blockCRC); };
3387ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->combinedCRC = (s->combinedCRC << 1) | (s->combinedCRC >> 31);
3388ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->combinedCRC ^= s->blockCRC;
3389ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s->blockNo > 1) s->numZ = 0;
3390ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3391ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s->verbosity >= 2)
3392ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         vex_printf("    block %d: crc = 0x%08x, " "combined CRC = 0x%08x, size = %d\n",s->blockNo,s->blockCRC,s->combinedCRC,s->nblock);
3393ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3394ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3395ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3396ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      BZ2_blockSort ( s );
3397ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
3398ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3399ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->zbits = (UChar*) (&((UChar*)s->arr2)[s->nblock]);
3400ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3401ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3402ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (s->blockNo == 1) {
3403ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      BZ2_bsInitWrite ( s );
3404ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      bsPutUChar ( s, 0x42 );
3405ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      bsPutUChar ( s, 0x5a );
3406ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      bsPutUChar ( s, 0x68 );
3407ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      bsPutUChar ( s, (UChar)(0x30 + s->blockSize100k) );
3408ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
3409ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3410ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (s->nblock > 0) {
3411ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3412ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      bsPutUChar ( s, 0x31 ); bsPutUChar ( s, 0x41 );
3413ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      bsPutUChar ( s, 0x59 ); bsPutUChar ( s, 0x26 );
3414ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      bsPutUChar ( s, 0x53 ); bsPutUChar ( s, 0x59 );
3415ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3416ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3417ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      bsPutUInt32 ( s, s->blockCRC );
3418ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3419ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      bsW(s,1,0);
3420ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3421ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      bsW ( s, 24, s->origPtr );
3422ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      generateMTFValues ( s );
3423ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      sendMTFValues ( s );
3424ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
3425ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3426ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3427ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3428ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (is_last_block) {
3429ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3430ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      bsPutUChar ( s, 0x17 ); bsPutUChar ( s, 0x72 );
3431ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      bsPutUChar ( s, 0x45 ); bsPutUChar ( s, 0x38 );
3432ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      bsPutUChar ( s, 0x50 ); bsPutUChar ( s, 0x90 );
3433ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      bsPutUInt32 ( s, s->combinedCRC );
3434ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s->verbosity >= 2)
3435ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         vex_printf("    final combined CRC = 0x%08x\n   ",s->combinedCRC);
3436ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      bsFinishWrite ( s );
3437ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
3438ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
3439ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3440ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownInt32 BZ2_rNums[512] = {
3441ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   619, 720, 127, 481, 931, 816, 813, 233, 566, 247,
3442ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   985, 724, 205, 454, 863, 491, 741, 242, 949, 214,
3443ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   733, 859, 335, 708, 621, 574, 73, 654, 730, 472,
3444ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   419, 436, 278, 496, 867, 210, 399, 680, 480, 51,
3445ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   878, 465, 811, 169, 869, 675, 611, 697, 867, 561,
3446ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   862, 687, 507, 283, 482, 129, 807, 591, 733, 623,
3447ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   150, 238, 59, 379, 684, 877, 625, 169, 643, 105,
3448ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   170, 607, 520, 932, 727, 476, 693, 425, 174, 647,
3449ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   73, 122, 335, 530, 442, 853, 695, 249, 445, 515,
3450ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   909, 545, 703, 919, 874, 474, 882, 500, 594, 612,
3451ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   641, 801, 220, 162, 819, 984, 589, 513, 495, 799,
3452ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   161, 604, 958, 533, 221, 400, 386, 867, 600, 782,
3453ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   382, 596, 414, 171, 516, 375, 682, 485, 911, 276,
3454ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   98, 553, 163, 354, 666, 933, 424, 341, 533, 870,
3455ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   227, 730, 475, 186, 263, 647, 537, 686, 600, 224,
3456ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   469, 68, 770, 919, 190, 373, 294, 822, 808, 206,
3457ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   184, 943, 795, 384, 383, 461, 404, 758, 839, 887,
3458ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   715, 67, 618, 276, 204, 918, 873, 777, 604, 560,
3459ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   951, 160, 578, 722, 79, 804, 96, 409, 713, 940,
3460ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   652, 934, 970, 447, 318, 353, 859, 672, 112, 785,
3461ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   645, 863, 803, 350, 139, 93, 354, 99, 820, 908,
3462ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   609, 772, 154, 274, 580, 184, 79, 626, 630, 742,
3463ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   653, 282, 762, 623, 680, 81, 927, 626, 789, 125,
3464ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   411, 521, 938, 300, 821, 78, 343, 175, 128, 250,
3465ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   170, 774, 972, 275, 999, 639, 495, 78, 352, 126,
3466ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   857, 956, 358, 619, 580, 124, 737, 594, 701, 612,
3467ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   669, 112, 134, 694, 363, 992, 809, 743, 168, 974,
3468ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   944, 375, 748, 52, 600, 747, 642, 182, 862, 81,
3469ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   344, 805, 988, 739, 511, 655, 814, 334, 249, 515,
3470ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   897, 955, 664, 981, 649, 113, 974, 459, 893, 228,
3471ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   433, 837, 553, 268, 926, 240, 102, 654, 459, 51,
3472ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   686, 754, 806, 760, 493, 403, 415, 394, 687, 700,
3473ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   946, 670, 656, 610, 738, 392, 760, 799, 887, 653,
3474ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   978, 321, 576, 617, 626, 502, 894, 679, 243, 440,
3475ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   680, 879, 194, 572, 640, 724, 926, 56, 204, 700,
3476ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   707, 151, 457, 449, 797, 195, 791, 558, 945, 679,
3477ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   297, 59, 87, 824, 713, 663, 412, 693, 342, 606,
3478ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   134, 108, 571, 364, 631, 212, 174, 643, 304, 329,
3479ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   343, 97, 430, 751, 497, 314, 983, 374, 822, 928,
3480ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   140, 206, 73, 263, 980, 736, 876, 478, 430, 305,
3481ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   170, 514, 364, 692, 829, 82, 855, 953, 676, 246,
3482ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   369, 970, 294, 750, 807, 827, 150, 790, 288, 923,
3483ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   804, 378, 215, 828, 592, 281, 565, 555, 710, 82,
3484ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   896, 831, 547, 261, 524, 462, 293, 465, 502, 56,
3485ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   661, 821, 976, 991, 658, 869, 905, 758, 745, 193,
3486ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   768, 550, 608, 933, 378, 286, 215, 979, 792, 961,
3487ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   61, 688, 793, 644, 986, 403, 106, 366, 905, 644,
3488ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   372, 567, 466, 434, 645, 210, 389, 550, 919, 135,
3489ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   780, 773, 635, 389, 707, 100, 626, 958, 165, 504,
3490ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   920, 176, 193, 713, 857, 265, 203, 50, 668, 108,
3491ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   645, 990, 626, 197, 510, 357, 358, 850, 858, 364,
3492ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   936, 638
3493ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
3494ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3495ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownUInt32 BZ2_crc32Table[256] = {
3496ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3497ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3498ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3499ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x00000000L, 0x04c11db7L, 0x09823b6eL, 0x0d4326d9L,
3500ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x130476dcL, 0x17c56b6bL, 0x1a864db2L, 0x1e475005L,
3501ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x2608edb8L, 0x22c9f00fL, 0x2f8ad6d6L, 0x2b4bcb61L,
3502ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x350c9b64L, 0x31cd86d3L, 0x3c8ea00aL, 0x384fbdbdL,
3503ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x4c11db70L, 0x48d0c6c7L, 0x4593e01eL, 0x4152fda9L,
3504ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x5f15adacL, 0x5bd4b01bL, 0x569796c2L, 0x52568b75L,
3505ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x6a1936c8L, 0x6ed82b7fL, 0x639b0da6L, 0x675a1011L,
3506ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x791d4014L, 0x7ddc5da3L, 0x709f7b7aL, 0x745e66cdL,
3507ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x9823b6e0L, 0x9ce2ab57L, 0x91a18d8eL, 0x95609039L,
3508ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x8b27c03cL, 0x8fe6dd8bL, 0x82a5fb52L, 0x8664e6e5L,
3509ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0xbe2b5b58L, 0xbaea46efL, 0xb7a96036L, 0xb3687d81L,
3510ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0xad2f2d84L, 0xa9ee3033L, 0xa4ad16eaL, 0xa06c0b5dL,
3511ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0xd4326d90L, 0xd0f37027L, 0xddb056feL, 0xd9714b49L,
3512ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0xc7361b4cL, 0xc3f706fbL, 0xceb42022L, 0xca753d95L,
3513ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0xf23a8028L, 0xf6fb9d9fL, 0xfbb8bb46L, 0xff79a6f1L,
3514ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0xe13ef6f4L, 0xe5ffeb43L, 0xe8bccd9aL, 0xec7dd02dL,
3515ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x34867077L, 0x30476dc0L, 0x3d044b19L, 0x39c556aeL,
3516ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x278206abL, 0x23431b1cL, 0x2e003dc5L, 0x2ac12072L,
3517ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x128e9dcfL, 0x164f8078L, 0x1b0ca6a1L, 0x1fcdbb16L,
3518ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x018aeb13L, 0x054bf6a4L, 0x0808d07dL, 0x0cc9cdcaL,
3519ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x7897ab07L, 0x7c56b6b0L, 0x71159069L, 0x75d48ddeL,
3520ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x6b93dddbL, 0x6f52c06cL, 0x6211e6b5L, 0x66d0fb02L,
3521ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x5e9f46bfL, 0x5a5e5b08L, 0x571d7dd1L, 0x53dc6066L,
3522ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x4d9b3063L, 0x495a2dd4L, 0x44190b0dL, 0x40d816baL,
3523ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0xaca5c697L, 0xa864db20L, 0xa527fdf9L, 0xa1e6e04eL,
3524ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0xbfa1b04bL, 0xbb60adfcL, 0xb6238b25L, 0xb2e29692L,
3525ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x8aad2b2fL, 0x8e6c3698L, 0x832f1041L, 0x87ee0df6L,
3526ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x99a95df3L, 0x9d684044L, 0x902b669dL, 0x94ea7b2aL,
3527ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0xe0b41de7L, 0xe4750050L, 0xe9362689L, 0xedf73b3eL,
3528ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0xf3b06b3bL, 0xf771768cL, 0xfa325055L, 0xfef34de2L,
3529ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0xc6bcf05fL, 0xc27dede8L, 0xcf3ecb31L, 0xcbffd686L,
3530ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0xd5b88683L, 0xd1799b34L, 0xdc3abdedL, 0xd8fba05aL,
3531ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x690ce0eeL, 0x6dcdfd59L, 0x608edb80L, 0x644fc637L,
3532ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x7a089632L, 0x7ec98b85L, 0x738aad5cL, 0x774bb0ebL,
3533ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x4f040d56L, 0x4bc510e1L, 0x46863638L, 0x42472b8fL,
3534ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x5c007b8aL, 0x58c1663dL, 0x558240e4L, 0x51435d53L,
3535ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x251d3b9eL, 0x21dc2629L, 0x2c9f00f0L, 0x285e1d47L,
3536ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x36194d42L, 0x32d850f5L, 0x3f9b762cL, 0x3b5a6b9bL,
3537ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x0315d626L, 0x07d4cb91L, 0x0a97ed48L, 0x0e56f0ffL,
3538ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x1011a0faL, 0x14d0bd4dL, 0x19939b94L, 0x1d528623L,
3539ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0xf12f560eL, 0xf5ee4bb9L, 0xf8ad6d60L, 0xfc6c70d7L,
3540ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0xe22b20d2L, 0xe6ea3d65L, 0xeba91bbcL, 0xef68060bL,
3541ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0xd727bbb6L, 0xd3e6a601L, 0xdea580d8L, 0xda649d6fL,
3542ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0xc423cd6aL, 0xc0e2d0ddL, 0xcda1f604L, 0xc960ebb3L,
3543ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0xbd3e8d7eL, 0xb9ff90c9L, 0xb4bcb610L, 0xb07daba7L,
3544ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0xae3afba2L, 0xaafbe615L, 0xa7b8c0ccL, 0xa379dd7bL,
3545ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x9b3660c6L, 0x9ff77d71L, 0x92b45ba8L, 0x9675461fL,
3546ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x8832161aL, 0x8cf30badL, 0x81b02d74L, 0x857130c3L,
3547ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x5d8a9099L, 0x594b8d2eL, 0x5408abf7L, 0x50c9b640L,
3548ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x4e8ee645L, 0x4a4ffbf2L, 0x470cdd2bL, 0x43cdc09cL,
3549ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x7b827d21L, 0x7f436096L, 0x7200464fL, 0x76c15bf8L,
3550ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x68860bfdL, 0x6c47164aL, 0x61043093L, 0x65c52d24L,
3551ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x119b4be9L, 0x155a565eL, 0x18197087L, 0x1cd86d30L,
3552ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x029f3d35L, 0x065e2082L, 0x0b1d065bL, 0x0fdc1becL,
3553ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x3793a651L, 0x3352bbe6L, 0x3e119d3fL, 0x3ad08088L,
3554ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x2497d08dL, 0x2056cd3aL, 0x2d15ebe3L, 0x29d4f654L,
3555ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0xc5a92679L, 0xc1683bceL, 0xcc2b1d17L, 0xc8ea00a0L,
3556ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0xd6ad50a5L, 0xd26c4d12L, 0xdf2f6bcbL, 0xdbee767cL,
3557ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0xe3a1cbc1L, 0xe760d676L, 0xea23f0afL, 0xeee2ed18L,
3558ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0xf0a5bd1dL, 0xf464a0aaL, 0xf9278673L, 0xfde69bc4L,
3559ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x89b8fd09L, 0x8d79e0beL, 0x803ac667L, 0x84fbdbd0L,
3560ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0x9abc8bd5L, 0x9e7d9662L, 0x933eb0bbL, 0x97ffad0cL,
3561ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0xafb010b1L, 0xab710d06L, 0xa6322bdfL, 0xa2f33668L,
3562ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   0xbcb4666dL, 0xb8757bdaL, 0xb5365d03L, 0xb1f740b4L
3563ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
3564ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3565ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid BZ2_bz__AssertH__fail ( int errcode )
3566ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
3567ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_printf("BZ2_bz__AssertH__fail(%d) called, exiting\n", errcode);
3568ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   (*serviceFn)(0,0);
3569ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
3570ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3571ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid bz_internal_error ( int errcode )
3572ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
3573ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_printf("bz_internal_error called, exiting\n", errcode);
3574ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   (*serviceFn)(0,0);
3575ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
3576ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3577ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3578ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic
3579ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint bz_config_ok ( void )
3580ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
3581ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (sizeof(int) != 4) return 0;
3582ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (sizeof(short) != 2) return 0;
3583ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (sizeof(char) != 1) return 0;
3584ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return 1;
3585ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
3586ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3587ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3588ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3589ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic
3590ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid* default_bzalloc ( void* opaque, Int32 items, Int32 size )
3591ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
3592ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   void* v = (void*) (*serviceFn)(2, items * size );
3593ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return v;
3594ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
3595ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3596ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic
3597ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid default_bzfree ( void* opaque, void* addr )
3598ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
3599ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (addr != ((void *)0)) (*serviceFn)( 3, (HWord)addr );
3600ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
3601ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3602ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3603ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3604ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic
3605ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid prepare_new_block ( EState* s )
3606ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
3607ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 i;
3608ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->nblock = 0;
3609ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->numZ = 0;
3610ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->state_out_pos = 0;
3611ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   { s->blockCRC = 0xffffffffL; };
3612ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 0; i < 256; i++) s->inUse[i] = ((Bool)0);
3613ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->blockNo++;
3614ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
3615ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3616ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3617ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3618ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic
3619ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid init_RL ( EState* s )
3620ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
3621ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->state_in_ch = 256;
3622ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->state_in_len = 0;
3623ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
3624ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3625ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3626ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic
3627ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownBool isempty_RL ( EState* s )
3628ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
3629ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (s->state_in_ch < 256 && s->state_in_len > 0)
3630ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      return ((Bool)0); else
3631ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      return ((Bool)1);
3632ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
3633ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3634ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3635ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3636ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint BZ2_bzCompressInit
3637ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                    ( bz_stream* strm,
3638ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                     int blockSize100k,
3639ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                     int verbosity,
3640ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                     int workFactor )
3641ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
3642ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 n;
3643ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   EState* s;
3644ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3645ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (!bz_config_ok()) return (-9);
3646ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3647ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (strm == ((void *)0) ||
3648ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown       blockSize100k < 1 || blockSize100k > 9 ||
3649ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown       workFactor < 0 || workFactor > 250)
3650ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     return (-2);
3651ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3652ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (workFactor == 0) workFactor = 30;
3653ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (strm->bzalloc == ((void *)0)) strm->bzalloc = default_bzalloc;
3654ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (strm->bzfree == ((void *)0)) strm->bzfree = default_bzfree;
3655ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3656ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s = (strm->bzalloc)(strm->opaque,(sizeof(EState)),1);
3657ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (s == ((void *)0)) return (-3);
3658ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->strm = strm;
3659ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3660ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->arr1 = ((void *)0);
3661ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->arr2 = ((void *)0);
3662ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->ftab = ((void *)0);
3663ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3664ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   n = 100000 * blockSize100k;
3665ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->arr1 = (strm->bzalloc)(strm->opaque,(n * sizeof(UInt32)),1);
3666ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->arr2 = (strm->bzalloc)(strm->opaque,((n+(2 + 12 + 18 + 2)) * sizeof(UInt32)),1);
3667ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->ftab = (strm->bzalloc)(strm->opaque,(65537 * sizeof(UInt32)),1);
3668ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3669ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (s->arr1 == ((void *)0) || s->arr2 == ((void *)0) || s->ftab == ((void *)0)) {
3670ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s->arr1 != ((void *)0)) (strm->bzfree)(strm->opaque,(s->arr1));
3671ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s->arr2 != ((void *)0)) (strm->bzfree)(strm->opaque,(s->arr2));
3672ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s->ftab != ((void *)0)) (strm->bzfree)(strm->opaque,(s->ftab));
3673ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s != ((void *)0)) (strm->bzfree)(strm->opaque,(s));
3674ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      return (-3);
3675ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
3676ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3677ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->blockNo = 0;
3678ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->state = 2;
3679ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->mode = 2;
3680ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->combinedCRC = 0;
3681ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->blockSize100k = blockSize100k;
3682ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->nblockMAX = 100000 * blockSize100k - 19;
3683ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->verbosity = verbosity;
3684ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->workFactor = workFactor;
3685ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3686ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->block = (UChar*)s->arr2;
3687ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->mtfv = (UInt16*)s->arr1;
3688ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->zbits = ((void *)0);
3689ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->ptr = (UInt32*)s->arr1;
3690ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3691ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   strm->state = s;
3692ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   strm->total_in_lo32 = 0;
3693ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   strm->total_in_hi32 = 0;
3694ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   strm->total_out_lo32 = 0;
3695ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   strm->total_out_hi32 = 0;
3696ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   init_RL ( s );
3697ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   prepare_new_block ( s );
3698ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return 0;
3699ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
3700ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3701ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3702ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3703ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic
3704ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid add_pair_to_block ( EState* s )
3705ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
3706ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int32 i;
3707ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   UChar ch = (UChar)(s->state_in_ch);
3708ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 0; i < s->state_in_len; i++) {
3709ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      { s->blockCRC = (s->blockCRC << 8) ^ BZ2_crc32Table[(s->blockCRC >> 24) ^ ((UChar)ch)]; };
3710ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
3711ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->inUse[s->state_in_ch] = ((Bool)1);
3712ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   switch (s->state_in_len) {
3713ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 1:
3714ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->block[s->nblock] = (UChar)ch; s->nblock++;
3715ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         break;
3716ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 2:
3717ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->block[s->nblock] = (UChar)ch; s->nblock++;
3718ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->block[s->nblock] = (UChar)ch; s->nblock++;
3719ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         break;
3720ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 3:
3721ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->block[s->nblock] = (UChar)ch; s->nblock++;
3722ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->block[s->nblock] = (UChar)ch; s->nblock++;
3723ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->block[s->nblock] = (UChar)ch; s->nblock++;
3724ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         break;
3725ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      default:
3726ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->inUse[s->state_in_len-4] = ((Bool)1);
3727ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->block[s->nblock] = (UChar)ch; s->nblock++;
3728ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->block[s->nblock] = (UChar)ch; s->nblock++;
3729ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->block[s->nblock] = (UChar)ch; s->nblock++;
3730ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->block[s->nblock] = (UChar)ch; s->nblock++;
3731ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->block[s->nblock] = ((UChar)(s->state_in_len-4));
3732ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->nblock++;
3733ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         break;
3734ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
3735ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
3736ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3737ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3738ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3739ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic
3740ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid flush_RL ( EState* s )
3741ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
3742ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (s->state_in_ch < 256) add_pair_to_block ( s );
3743ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   init_RL ( s );
3744ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
3745ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3746ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic
3747ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownBool copy_input_until_stop ( EState* s )
3748ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
3749ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Bool progress_in = ((Bool)0);
3750ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3751ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (s->mode == 2) {
3752ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3753ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3754ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      while (((Bool)1)) {
3755ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3756ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->nblock >= s->nblockMAX) break;
3757ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3758ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->strm->avail_in == 0) break;
3759ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         progress_in = ((Bool)1);
3760ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         { UInt32 zchh = (UInt32)((UInt32)(*((UChar*)(s->strm->next_in)))); if (zchh != s->state_in_ch && s->state_in_len == 1) { UChar ch = (UChar)(s->state_in_ch); { s->blockCRC = (s->blockCRC << 8) ^ BZ2_crc32Table[(s->blockCRC >> 24) ^ ((UChar)ch)]; }; s->inUse[s->state_in_ch] = ((Bool)1); s->block[s->nblock] = (UChar)ch; s->nblock++; s->state_in_ch = zchh; } else if (zchh != s->state_in_ch || s->state_in_len == 255) { if (s->state_in_ch < 256) add_pair_to_block ( s ); s->state_in_ch = zchh; s->state_in_len = 1; } else { s->state_in_len++; } };
3761ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->strm->next_in++;
3762ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->strm->avail_in--;
3763ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->strm->total_in_lo32++;
3764ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++;
3765ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
3766ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3767ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   } else {
3768ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3769ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3770ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      while (((Bool)1)) {
3771ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3772ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->nblock >= s->nblockMAX) break;
3773ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3774ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->strm->avail_in == 0) break;
3775ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3776ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->avail_in_expect == 0) break;
3777ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         progress_in = ((Bool)1);
3778ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         { UInt32 zchh = (UInt32)((UInt32)(*((UChar*)(s->strm->next_in)))); if (zchh != s->state_in_ch && s->state_in_len == 1) { UChar ch = (UChar)(s->state_in_ch); { s->blockCRC = (s->blockCRC << 8) ^ BZ2_crc32Table[(s->blockCRC >> 24) ^ ((UChar)ch)]; }; s->inUse[s->state_in_ch] = ((Bool)1); s->block[s->nblock] = (UChar)ch; s->nblock++; s->state_in_ch = zchh; } else if (zchh != s->state_in_ch || s->state_in_len == 255) { if (s->state_in_ch < 256) add_pair_to_block ( s ); s->state_in_ch = zchh; s->state_in_len = 1; } else { s->state_in_len++; } };
3779ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->strm->next_in++;
3780ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->strm->avail_in--;
3781ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->strm->total_in_lo32++;
3782ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++;
3783ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->avail_in_expect--;
3784ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
3785ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
3786ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return progress_in;
3787ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
3788ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3789ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3790ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3791ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic
3792ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownBool copy_output_until_stop ( EState* s )
3793ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
3794ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Bool progress_out = ((Bool)0);
3795ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3796ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   while (((Bool)1)) {
3797ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3798ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3799ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s->strm->avail_out == 0) break;
3800ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3801ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3802ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s->state_out_pos >= s->numZ) break;
3803ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3804ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      progress_out = ((Bool)1);
3805ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      *(s->strm->next_out) = s->zbits[s->state_out_pos];
3806ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->state_out_pos++;
3807ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->strm->avail_out--;
3808ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->strm->next_out++;
3809ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->strm->total_out_lo32++;
3810ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;
3811ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
3812ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3813ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return progress_out;
3814ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
3815ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3816ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3817ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3818ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic
3819ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownBool handle_compress ( bz_stream* strm )
3820ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
3821ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Bool progress_in = ((Bool)0);
3822ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Bool progress_out = ((Bool)0);
3823ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   EState* s = strm->state;
3824ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3825ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   while (((Bool)1)) {
3826ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3827ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s->state == 1) {
3828ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         progress_out |= copy_output_until_stop ( s );
3829ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->state_out_pos < s->numZ) break;
3830ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->mode == 4 &&
3831ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown             s->avail_in_expect == 0 &&
3832ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown             isempty_RL(s)) break;
3833ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         prepare_new_block ( s );
3834ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->state = 2;
3835ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->mode == 3 &&
3836ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown             s->avail_in_expect == 0 &&
3837ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown             isempty_RL(s)) break;
3838ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
3839ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3840ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s->state == 2) {
3841ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         progress_in |= copy_input_until_stop ( s );
3842ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->mode != 2 && s->avail_in_expect == 0) {
3843ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            flush_RL ( s );
3844ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            BZ2_compressBlock ( s, (Bool)(s->mode == 4) );
3845ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->state = 1;
3846ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
3847ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         else
3848ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->nblock >= s->nblockMAX) {
3849ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            BZ2_compressBlock ( s, ((Bool)0) );
3850ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->state = 1;
3851ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
3852ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         else
3853ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->strm->avail_in == 0) {
3854ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            break;
3855ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
3856ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
3857ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3858ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
3859ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3860ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return progress_in || progress_out;
3861ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
3862ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3863ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3864ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3865ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint BZ2_bzCompress ( bz_stream *strm, int action )
3866ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
3867ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Bool progress;
3868ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   EState* s;
3869ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (strm == ((void *)0)) return (-2);
3870ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s = strm->state;
3871ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (s == ((void *)0)) return (-2);
3872ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (s->strm != strm) return (-2);
3873ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3874ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   preswitch:
3875ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   switch (s->mode) {
3876ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3877ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 1:
3878ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         return (-1);
3879ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3880ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 2:
3881ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (action == 0) {
3882ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            progress = handle_compress ( strm );
3883ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            return progress ? 1 : (-2);
3884ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
3885ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         else
3886ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  if (action == 1) {
3887ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->avail_in_expect = strm->avail_in;
3888ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->mode = 3;
3889ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            goto preswitch;
3890ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
3891ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         else
3892ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (action == 2) {
3893ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->avail_in_expect = strm->avail_in;
3894ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->mode = 4;
3895ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            goto preswitch;
3896ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
3897ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         else
3898ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            return (-2);
3899ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3900ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 3:
3901ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (action != 1) return (-1);
3902ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->avail_in_expect != s->strm->avail_in)
3903ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            return (-1);
3904ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         progress = handle_compress ( strm );
3905ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->avail_in_expect > 0 || !isempty_RL(s) ||
3906ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown             s->state_out_pos < s->numZ) return 2;
3907ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->mode = 2;
3908ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         return 1;
3909ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3910ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 4:
3911ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (action != 2) return (-1);
3912ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->avail_in_expect != s->strm->avail_in)
3913ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            return (-1);
3914ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         progress = handle_compress ( strm );
3915ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (!progress) return (-1);
3916ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->avail_in_expect > 0 || !isempty_RL(s) ||
3917ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown             s->state_out_pos < s->numZ) return 3;
3918ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->mode = 1;
3919ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         return 4;
3920ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
3921ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return 0;
3922ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
3923ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3924ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3925ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3926ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint BZ2_bzCompressEnd ( bz_stream *strm )
3927ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
3928ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   EState* s;
3929ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (strm == ((void *)0)) return (-2);
3930ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s = strm->state;
3931ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (s == ((void *)0)) return (-2);
3932ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (s->strm != strm) return (-2);
3933ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3934ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (s->arr1 != ((void *)0)) (strm->bzfree)(strm->opaque,(s->arr1));
3935ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (s->arr2 != ((void *)0)) (strm->bzfree)(strm->opaque,(s->arr2));
3936ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (s->ftab != ((void *)0)) (strm->bzfree)(strm->opaque,(s->ftab));
3937ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   (strm->bzfree)(strm->opaque,(strm->state));
3938ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3939ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   strm->state = ((void *)0);
3940ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3941ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return 0;
3942ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
3943ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3944ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3945ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3946ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3947ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3948ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3949ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3950ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint BZ2_bzDecompressInit
3951ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                     ( bz_stream* strm,
3952ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                       int verbosity,
3953ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                       int small )
3954ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
3955ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   DState* s;
3956ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3957ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (!bz_config_ok()) return (-9);
3958ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3959ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (strm == ((void *)0)) return (-2);
3960ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (small != 0 && small != 1) return (-2);
3961ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (verbosity < 0 || verbosity > 4) return (-2);
3962ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3963ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (strm->bzalloc == ((void *)0)) strm->bzalloc = default_bzalloc;
3964ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (strm->bzfree == ((void *)0)) strm->bzfree = default_bzfree;
3965ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3966ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s = (strm->bzalloc)(strm->opaque,(sizeof(DState)),1);
3967ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (s == ((void *)0)) return (-3);
3968ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->strm = strm;
3969ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   strm->state = s;
3970ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->state = 10;
3971ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->bsLive = 0;
3972ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->bsBuff = 0;
3973ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->calculatedCombinedCRC = 0;
3974ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   strm->total_in_lo32 = 0;
3975ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   strm->total_in_hi32 = 0;
3976ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   strm->total_out_lo32 = 0;
3977ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   strm->total_out_hi32 = 0;
3978ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->smallDecompress = (Bool)small;
3979ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->ll4 = ((void *)0);
3980ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->ll16 = ((void *)0);
3981ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->tt = ((void *)0);
3982ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->currBlockNo = 0;
3983ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s->verbosity = verbosity;
3984ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3985ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return 0;
3986ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
3987ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3988ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3989ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3990ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3991ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3992ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3993ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic
3994ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownBool unRLE_obuf_to_output_FAST ( DState* s )
3995ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
3996ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   UChar k1;
3997ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3998ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (s->blockRandomised) {
3999ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4000ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      while (((Bool)1)) {
4001ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4002ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         while (((Bool)1)) {
4003ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (s->strm->avail_out == 0) return ((Bool)0);
4004ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (s->state_out_len == 0) break;
4005ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            *( (UChar*)(s->strm->next_out) ) = s->state_out_ch;
4006ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            { s->calculatedBlockCRC = (s->calculatedBlockCRC << 8) ^ BZ2_crc32Table[(s->calculatedBlockCRC >> 24) ^ ((UChar)s->state_out_ch)]; };
4007ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->state_out_len--;
4008ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->strm->next_out++;
4009ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->strm->avail_out--;
4010ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->strm->total_out_lo32++;
4011ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;
4012ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
4013ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4014ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4015ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->nblock_used == s->save_nblock+1) return ((Bool)0);
4016ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4017ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4018ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->nblock_used > s->save_nblock+1)
4019ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            return ((Bool)1);
4020ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4021ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->state_out_len = 1;
4022ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->state_out_ch = s->k0;
4023ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->tPos = s->tt[s->tPos]; k1 = (UChar)(s->tPos & 0xff); s->tPos >>= 8;; if (s->rNToGo == 0) { s->rNToGo = BZ2_rNums[s->rTPos]; s->rTPos++; if (s->rTPos == 512) s->rTPos = 0; } s->rNToGo--;;
4024ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         k1 ^= ((s->rNToGo == 1) ? 1 : 0); s->nblock_used++;
4025ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->nblock_used == s->save_nblock+1) continue;
4026ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (k1 != s->k0) { s->k0 = k1; continue; };
4027ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4028ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->state_out_len = 2;
4029ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->tPos = s->tt[s->tPos]; k1 = (UChar)(s->tPos & 0xff); s->tPos >>= 8;; if (s->rNToGo == 0) { s->rNToGo = BZ2_rNums[s->rTPos]; s->rTPos++; if (s->rTPos == 512) s->rTPos = 0; } s->rNToGo--;;
4030ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         k1 ^= ((s->rNToGo == 1) ? 1 : 0); s->nblock_used++;
4031ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->nblock_used == s->save_nblock+1) continue;
4032ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (k1 != s->k0) { s->k0 = k1; continue; };
4033ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4034ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->state_out_len = 3;
4035ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->tPos = s->tt[s->tPos]; k1 = (UChar)(s->tPos & 0xff); s->tPos >>= 8;; if (s->rNToGo == 0) { s->rNToGo = BZ2_rNums[s->rTPos]; s->rTPos++; if (s->rTPos == 512) s->rTPos = 0; } s->rNToGo--;;
4036ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         k1 ^= ((s->rNToGo == 1) ? 1 : 0); s->nblock_used++;
4037ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->nblock_used == s->save_nblock+1) continue;
4038ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (k1 != s->k0) { s->k0 = k1; continue; };
4039ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4040ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->tPos = s->tt[s->tPos]; k1 = (UChar)(s->tPos & 0xff); s->tPos >>= 8;; if (s->rNToGo == 0) { s->rNToGo = BZ2_rNums[s->rTPos]; s->rTPos++; if (s->rTPos == 512) s->rTPos = 0; } s->rNToGo--;;
4041ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         k1 ^= ((s->rNToGo == 1) ? 1 : 0); s->nblock_used++;
4042ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->state_out_len = ((Int32)k1) + 4;
4043ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->tPos = s->tt[s->tPos]; s->k0 = (UChar)(s->tPos & 0xff); s->tPos >>= 8;; if (s->rNToGo == 0) { s->rNToGo = BZ2_rNums[s->rTPos]; s->rTPos++; if (s->rTPos == 512) s->rTPos = 0; } s->rNToGo--;;
4044ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->k0 ^= ((s->rNToGo == 1) ? 1 : 0); s->nblock_used++;
4045ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
4046ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4047ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   } else {
4048ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4049ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4050ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UInt32 c_calculatedBlockCRC = s->calculatedBlockCRC;
4051ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UChar c_state_out_ch = s->state_out_ch;
4052ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 c_state_out_len = s->state_out_len;
4053ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 c_nblock_used = s->nblock_used;
4054ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 c_k0 = s->k0;
4055ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UInt32* c_tt = s->tt;
4056ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UInt32 c_tPos = s->tPos;
4057ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      char* cs_next_out = s->strm->next_out;
4058ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      unsigned int cs_avail_out = s->strm->avail_out;
4059ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4060ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4061ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      UInt32 avail_out_INIT = cs_avail_out;
4062ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Int32 s_save_nblockPP = s->save_nblock+1;
4063ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      unsigned int total_out_lo32_old;
4064ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4065ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      while (((Bool)1)) {
4066ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4067ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4068ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (c_state_out_len > 0) {
4069ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            while (((Bool)1)) {
4070ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               if (cs_avail_out == 0) goto return_notr;
4071ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               if (c_state_out_len == 1) break;
4072ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               *( (UChar*)(cs_next_out) ) = c_state_out_ch;
4073ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               { c_calculatedBlockCRC = (c_calculatedBlockCRC << 8) ^ BZ2_crc32Table[(c_calculatedBlockCRC >> 24) ^ ((UChar)c_state_out_ch)]; };
4074ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               c_state_out_len--;
4075ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               cs_next_out++;
4076ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               cs_avail_out--;
4077ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            }
4078ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s_state_out_len_eq_one:
4079ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            {
4080ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               if (cs_avail_out == 0) {
4081ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  c_state_out_len = 1; goto return_notr;
4082ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               };
4083ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               *( (UChar*)(cs_next_out) ) = c_state_out_ch;
4084ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               { c_calculatedBlockCRC = (c_calculatedBlockCRC << 8) ^ BZ2_crc32Table[(c_calculatedBlockCRC >> 24) ^ ((UChar)c_state_out_ch)]; };
4085ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               cs_next_out++;
4086ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               cs_avail_out--;
4087ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            }
4088ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
4089ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4090ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (c_nblock_used > s_save_nblockPP)
4091ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            return ((Bool)1);
4092ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4093ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4094ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (c_nblock_used == s_save_nblockPP) {
4095ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            c_state_out_len = 0; goto return_notr;
4096ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         };
4097ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         c_state_out_ch = c_k0;
4098ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         c_tPos = c_tt[c_tPos]; k1 = (UChar)(c_tPos & 0xff); c_tPos >>= 8;; c_nblock_used++;
4099ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (k1 != c_k0) {
4100ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            c_k0 = k1; goto s_state_out_len_eq_one;
4101ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         };
4102ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (c_nblock_used == s_save_nblockPP)
4103ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            goto s_state_out_len_eq_one;
4104ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4105ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         c_state_out_len = 2;
4106ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         c_tPos = c_tt[c_tPos]; k1 = (UChar)(c_tPos & 0xff); c_tPos >>= 8;; c_nblock_used++;
4107ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (c_nblock_used == s_save_nblockPP) continue;
4108ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (k1 != c_k0) { c_k0 = k1; continue; };
4109ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4110ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         c_state_out_len = 3;
4111ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         c_tPos = c_tt[c_tPos]; k1 = (UChar)(c_tPos & 0xff); c_tPos >>= 8;; c_nblock_used++;
4112ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (c_nblock_used == s_save_nblockPP) continue;
4113ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (k1 != c_k0) { c_k0 = k1; continue; };
4114ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4115ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         c_tPos = c_tt[c_tPos]; k1 = (UChar)(c_tPos & 0xff); c_tPos >>= 8;; c_nblock_used++;
4116ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         c_state_out_len = ((Int32)k1) + 4;
4117ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         c_tPos = c_tt[c_tPos]; c_k0 = (UChar)(c_tPos & 0xff); c_tPos >>= 8;; c_nblock_used++;
4118ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
4119ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4120ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      return_notr:
4121ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      total_out_lo32_old = s->strm->total_out_lo32;
4122ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->strm->total_out_lo32 += (avail_out_INIT - cs_avail_out);
4123ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s->strm->total_out_lo32 < total_out_lo32_old)
4124ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->strm->total_out_hi32++;
4125ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4126ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4127ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->calculatedBlockCRC = c_calculatedBlockCRC;
4128ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->state_out_ch = c_state_out_ch;
4129ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->state_out_len = c_state_out_len;
4130ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->nblock_used = c_nblock_used;
4131ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->k0 = c_k0;
4132ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->tt = c_tt;
4133ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->tPos = c_tPos;
4134ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->strm->next_out = cs_next_out;
4135ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      s->strm->avail_out = cs_avail_out;
4136ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4137ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
4138ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return ((Bool)0);
4139ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
4140ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4141ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4142ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4143ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4144ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4145ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4146ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4147ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic
4148ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownBool unRLE_obuf_to_output_SMALL ( DState* s )
4149ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
4150ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   UChar k1;
4151ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4152ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (s->blockRandomised) {
4153ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4154ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      while (((Bool)1)) {
4155ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4156ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         while (((Bool)1)) {
4157ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (s->strm->avail_out == 0) return ((Bool)0);
4158ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (s->state_out_len == 0) break;
4159ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            *( (UChar*)(s->strm->next_out) ) = s->state_out_ch;
4160ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            { s->calculatedBlockCRC = (s->calculatedBlockCRC << 8) ^ BZ2_crc32Table[(s->calculatedBlockCRC >> 24) ^ ((UChar)s->state_out_ch)]; };
4161ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->state_out_len--;
4162ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->strm->next_out++;
4163ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->strm->avail_out--;
4164ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->strm->total_out_lo32++;
4165ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;
4166ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
4167ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4168ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4169ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->nblock_used == s->save_nblock+1) return ((Bool)0);
4170ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4171ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4172ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->nblock_used > s->save_nblock+1)
4173ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            return ((Bool)1);
4174ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4175ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->state_out_len = 1;
4176ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->state_out_ch = s->k0;
4177ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         k1 = BZ2_indexIntoF ( s->tPos, s->cftab ); s->tPos = (((UInt32)s->ll16[s->tPos]) | (((((UInt32)(s->ll4[(s->tPos) >> 1])) >> (((s->tPos) << 2) & 0x4)) & 0xF) << 16));; if (s->rNToGo == 0) { s->rNToGo = BZ2_rNums[s->rTPos]; s->rTPos++; if (s->rTPos == 512) s->rTPos = 0; } s->rNToGo--;;
4178ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         k1 ^= ((s->rNToGo == 1) ? 1 : 0); s->nblock_used++;
4179ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->nblock_used == s->save_nblock+1) continue;
4180ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (k1 != s->k0) { s->k0 = k1; continue; };
4181ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4182ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->state_out_len = 2;
4183ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         k1 = BZ2_indexIntoF ( s->tPos, s->cftab ); s->tPos = (((UInt32)s->ll16[s->tPos]) | (((((UInt32)(s->ll4[(s->tPos) >> 1])) >> (((s->tPos) << 2) & 0x4)) & 0xF) << 16));; if (s->rNToGo == 0) { s->rNToGo = BZ2_rNums[s->rTPos]; s->rTPos++; if (s->rTPos == 512) s->rTPos = 0; } s->rNToGo--;;
4184ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         k1 ^= ((s->rNToGo == 1) ? 1 : 0); s->nblock_used++;
4185ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->nblock_used == s->save_nblock+1) continue;
4186ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (k1 != s->k0) { s->k0 = k1; continue; };
4187ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4188ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->state_out_len = 3;
4189ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         k1 = BZ2_indexIntoF ( s->tPos, s->cftab ); s->tPos = (((UInt32)s->ll16[s->tPos]) | (((((UInt32)(s->ll4[(s->tPos) >> 1])) >> (((s->tPos) << 2) & 0x4)) & 0xF) << 16));; if (s->rNToGo == 0) { s->rNToGo = BZ2_rNums[s->rTPos]; s->rTPos++; if (s->rTPos == 512) s->rTPos = 0; } s->rNToGo--;;
4190ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         k1 ^= ((s->rNToGo == 1) ? 1 : 0); s->nblock_used++;
4191ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->nblock_used == s->save_nblock+1) continue;
4192ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (k1 != s->k0) { s->k0 = k1; continue; };
4193ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4194ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         k1 = BZ2_indexIntoF ( s->tPos, s->cftab ); s->tPos = (((UInt32)s->ll16[s->tPos]) | (((((UInt32)(s->ll4[(s->tPos) >> 1])) >> (((s->tPos) << 2) & 0x4)) & 0xF) << 16));; if (s->rNToGo == 0) { s->rNToGo = BZ2_rNums[s->rTPos]; s->rTPos++; if (s->rTPos == 512) s->rTPos = 0; } s->rNToGo--;;
4195ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         k1 ^= ((s->rNToGo == 1) ? 1 : 0); s->nblock_used++;
4196ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->state_out_len = ((Int32)k1) + 4;
4197ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->k0 = BZ2_indexIntoF ( s->tPos, s->cftab ); s->tPos = (((UInt32)s->ll16[s->tPos]) | (((((UInt32)(s->ll4[(s->tPos) >> 1])) >> (((s->tPos) << 2) & 0x4)) & 0xF) << 16));; if (s->rNToGo == 0) { s->rNToGo = BZ2_rNums[s->rTPos]; s->rTPos++; if (s->rTPos == 512) s->rTPos = 0; } s->rNToGo--;;
4198ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->k0 ^= ((s->rNToGo == 1) ? 1 : 0); s->nblock_used++;
4199ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
4200ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4201ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   } else {
4202ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4203ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      while (((Bool)1)) {
4204ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4205ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         while (((Bool)1)) {
4206ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (s->strm->avail_out == 0) return ((Bool)0);
4207ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (s->state_out_len == 0) break;
4208ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            *( (UChar*)(s->strm->next_out) ) = s->state_out_ch;
4209ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            { s->calculatedBlockCRC = (s->calculatedBlockCRC << 8) ^ BZ2_crc32Table[(s->calculatedBlockCRC >> 24) ^ ((UChar)s->state_out_ch)]; };
4210ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->state_out_len--;
4211ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->strm->next_out++;
4212ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->strm->avail_out--;
4213ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->strm->total_out_lo32++;
4214ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;
4215ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
4216ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4217ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4218ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->nblock_used == s->save_nblock+1) return ((Bool)0);
4219ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4220ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4221ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->nblock_used > s->save_nblock+1)
4222ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            return ((Bool)1);
4223ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4224ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->state_out_len = 1;
4225ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->state_out_ch = s->k0;
4226ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         k1 = BZ2_indexIntoF ( s->tPos, s->cftab ); s->tPos = (((UInt32)s->ll16[s->tPos]) | (((((UInt32)(s->ll4[(s->tPos) >> 1])) >> (((s->tPos) << 2) & 0x4)) & 0xF) << 16));; s->nblock_used++;
4227ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->nblock_used == s->save_nblock+1) continue;
4228ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (k1 != s->k0) { s->k0 = k1; continue; };
4229ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4230ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->state_out_len = 2;
4231ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         k1 = BZ2_indexIntoF ( s->tPos, s->cftab ); s->tPos = (((UInt32)s->ll16[s->tPos]) | (((((UInt32)(s->ll4[(s->tPos) >> 1])) >> (((s->tPos) << 2) & 0x4)) & 0xF) << 16));; s->nblock_used++;
4232ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->nblock_used == s->save_nblock+1) continue;
4233ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (k1 != s->k0) { s->k0 = k1; continue; };
4234ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4235ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->state_out_len = 3;
4236ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         k1 = BZ2_indexIntoF ( s->tPos, s->cftab ); s->tPos = (((UInt32)s->ll16[s->tPos]) | (((((UInt32)(s->ll4[(s->tPos) >> 1])) >> (((s->tPos) << 2) & 0x4)) & 0xF) << 16));; s->nblock_used++;
4237ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->nblock_used == s->save_nblock+1) continue;
4238ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (k1 != s->k0) { s->k0 = k1; continue; };
4239ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4240ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         k1 = BZ2_indexIntoF ( s->tPos, s->cftab ); s->tPos = (((UInt32)s->ll16[s->tPos]) | (((((UInt32)(s->ll4[(s->tPos) >> 1])) >> (((s->tPos) << 2) & 0x4)) & 0xF) << 16));; s->nblock_used++;
4241ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->state_out_len = ((Int32)k1) + 4;
4242ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         s->k0 = BZ2_indexIntoF ( s->tPos, s->cftab ); s->tPos = (((UInt32)s->ll16[s->tPos]) | (((((UInt32)(s->ll4[(s->tPos) >> 1])) >> (((s->tPos) << 2) & 0x4)) & 0xF) << 16));; s->nblock_used++;
4243ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
4244ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4245ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
4246ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
4247ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4248ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4249ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4250ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint BZ2_bzDecompress ( bz_stream *strm )
4251ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
4252ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Bool corrupt;
4253ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   DState* s;
4254ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (strm == ((void *)0)) return (-2);
4255ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s = strm->state;
4256ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (s == ((void *)0)) return (-2);
4257ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (s->strm != strm) return (-2);
4258ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4259ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   while (((Bool)1)) {
4260ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s->state == 1) return (-1);
4261ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s->state == 2) {
4262ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->smallDecompress)
4263ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            corrupt = unRLE_obuf_to_output_SMALL ( s ); else
4264ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            corrupt = unRLE_obuf_to_output_FAST ( s );
4265ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (corrupt) return (-4);
4266ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->nblock_used == s->save_nblock+1 && s->state_out_len == 0) {
4267ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            { s->calculatedBlockCRC = ~(s->calculatedBlockCRC); };
4268ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (s->verbosity >= 3)
4269ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               vex_printf(" {0x%08x, 0x%08x}",s->storedBlockCRC,s->calculatedBlockCRC);
4270ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4271ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (s->verbosity >= 2) vex_printf("]");
4272ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (s->calculatedBlockCRC != s->storedBlockCRC)
4273ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               return (-4);
4274ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->calculatedCombinedCRC
4275ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               = (s->calculatedCombinedCRC << 1) |
4276ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                    (s->calculatedCombinedCRC >> 31);
4277ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->calculatedCombinedCRC ^= s->calculatedBlockCRC;
4278ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            s->state = 14;
4279ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         } else {
4280ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            return 0;
4281ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
4282ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
4283ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (s->state >= 10) {
4284ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         Int32 r = BZ2_decompress ( s );
4285ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (r == 4) {
4286ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (s->verbosity >= 3)
4287ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               vex_printf("\n    combined CRCs: stored = 0x%08x, computed = 0x%08x",s->storedCombinedCRC,s->calculatedCombinedCRC);
4288ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4289ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            if (s->calculatedCombinedCRC != s->storedCombinedCRC)
4290ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown               return (-4);
4291ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            return r;
4292ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
4293ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (s->state != 2) return r;
4294ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
4295ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
4296ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4297ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   { if (!(0)) bz_internal_error ( 6001 ); };
4298ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4299ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return 0;
4300ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
4301ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4302ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4303ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4304ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint BZ2_bzDecompressEnd ( bz_stream *strm )
4305ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
4306ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   DState* s;
4307ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (strm == ((void *)0)) return (-2);
4308ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   s = strm->state;
4309ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (s == ((void *)0)) return (-2);
4310ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (s->strm != strm) return (-2);
4311ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4312ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (s->tt != ((void *)0)) (strm->bzfree)(strm->opaque,(s->tt));
4313ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (s->ll16 != ((void *)0)) (strm->bzfree)(strm->opaque,(s->ll16));
4314ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (s->ll4 != ((void *)0)) (strm->bzfree)(strm->opaque,(s->ll4));
4315ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4316ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   (strm->bzfree)(strm->opaque,(strm->state));
4317ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   strm->state = ((void *)0);
4318ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4319ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return 0;
4320ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
4321ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4322ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint BZ2_bzBuffToBuffCompress
4323ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                         ( char* dest,
4324ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                           unsigned int* destLen,
4325ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                           char* source,
4326ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                           unsigned int sourceLen,
4327ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                           int blockSize100k,
4328ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                           int verbosity,
4329ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                           int workFactor )
4330ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
4331ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   bz_stream strm;
4332ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   int ret;
4333ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4334ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (dest == ((void *)0) || destLen == ((void *)0) ||
4335ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown       source == ((void *)0) ||
4336ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown       blockSize100k < 1 || blockSize100k > 9 ||
4337ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown       verbosity < 0 || verbosity > 4 ||
4338ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown       workFactor < 0 || workFactor > 250)
4339ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      return (-2);
4340ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4341ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (workFactor == 0) workFactor = 30;
4342ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   strm.bzalloc = ((void *)0);
4343ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   strm.bzfree = ((void *)0);
4344ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   strm.opaque = ((void *)0);
4345ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   ret = BZ2_bzCompressInit ( &strm, blockSize100k,
4346ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                              verbosity, workFactor );
4347ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (ret != 0) return ret;
4348ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4349ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   strm.next_in = source;
4350ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   strm.next_out = dest;
4351ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   strm.avail_in = sourceLen;
4352ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   strm.avail_out = *destLen;
4353ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4354ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   ret = BZ2_bzCompress ( &strm, 2 );
4355ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (ret == 3) goto output_overflow;
4356ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (ret != 4) goto errhandler;
4357ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4358ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4359ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   *destLen -= strm.avail_out;
4360ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   BZ2_bzCompressEnd ( &strm );
4361ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return 0;
4362ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4363ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   output_overflow:
4364ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   BZ2_bzCompressEnd ( &strm );
4365ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return (-8);
4366ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4367ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   errhandler:
4368ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   BZ2_bzCompressEnd ( &strm );
4369ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return ret;
4370ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
4371ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4372ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4373ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4374ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint BZ2_bzBuffToBuffDecompress
4375ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                           ( char* dest,
4376ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                             unsigned int* destLen,
4377ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                             char* source,
4378ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                             unsigned int sourceLen,
4379ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                             int small,
4380ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                             int verbosity )
4381ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
4382ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   bz_stream strm;
4383ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   int ret;
4384ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4385ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (dest == ((void *)0) || destLen == ((void *)0) ||
4386ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown       source == ((void *)0) ||
4387ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown       (small != 0 && small != 1) ||
4388ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown       verbosity < 0 || verbosity > 4)
4389ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          return (-2);
4390ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4391ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   strm.bzalloc = ((void *)0);
4392ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   strm.bzfree = ((void *)0);
4393ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   strm.opaque = ((void *)0);
4394ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   ret = BZ2_bzDecompressInit ( &strm, verbosity, small );
4395ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (ret != 0) return ret;
4396ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4397ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   strm.next_in = source;
4398ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   strm.next_out = dest;
4399ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   strm.avail_in = sourceLen;
4400ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   strm.avail_out = *destLen;
4401ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4402ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   ret = BZ2_bzDecompress ( &strm );
4403ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (ret == 0) goto output_overflow_or_eof;
4404ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (ret != 4) goto errhandler;
4405ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4406ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4407ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   *destLen -= strm.avail_out;
4408ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   BZ2_bzDecompressEnd ( &strm );
4409ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return 0;
4410ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4411ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   output_overflow_or_eof:
4412ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (strm.avail_out > 0) {
4413ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      BZ2_bzDecompressEnd ( &strm );
4414ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      return (-7);
4415ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   } else {
4416ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      BZ2_bzDecompressEnd ( &strm );
4417ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      return (-8);
4418ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   };
4419ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4420ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   errhandler:
4421ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   BZ2_bzDecompressEnd ( &strm );
4422ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return ret;
4423ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
4424ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4425ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownconst char * BZ2_bzlibVersion(void)
4426ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
4427ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return "1.0.3, 17-Oct-2004";
4428ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
4429ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4430ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned char uchar;
4431ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4432ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4433ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown char inbuf[1000000];
4434ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown char outbuf[(1000000 + 1000000)];
4435ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown char zbuf[1000000 + 600 + (1000000 / 100)];
4436ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4437ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint nIn;
4438ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownunsigned int nOut;
4439ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownunsigned int nZ;
4440ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4441ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid flip_bit ( int bit )
4442ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
4443ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   int byteno = bit / 8;
4444ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   int bitno = bit % 8;
4445ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   uchar mask = 1 << bitno;
4446ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4447ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4448ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   zbuf[byteno] ^= mask;
4449ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
4450ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4451ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid set_inbuf ( void )
4452ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
4453ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  inbuf[0] = 0;
4454ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "At her sixtieth birthday party, Margaret Thatcher ");
4455ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "blew on the cake to light the candles.\n");
4456ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "This program, bzip2, the associated library libbzip2, and all\n");
4457ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "documentation, are copyright (C) 1996-2004 Julian R Seward.  All\n");
4458ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "rights reserved.\n");
4459ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4460ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "Redistribution and use in source and binary forms, with or without\n");
4461ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "modification, are permitted provided that the following conditions\n");
4462ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "are met:\n");
4463ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4464ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "1. Redistributions of source code must retain the above copyright\n");
4465ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "   notice, this list of conditions and the following disclaimer.\n");
4466ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4467ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "2. The origin of this software must not be misrepresented; you must\n");
4468ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "   not claim that you wrote the original software.  If you use this\n");
4469ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "   software in a product, an acknowledgment in the product\n");
4470ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "   documentation would be appreciated but is not required.\n");
4471ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4472ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "3. Altered source versions must be plainly marked as such, and must\n");
4473ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "   not be misrepresented as being the original software.\n");
4474ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4475ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "4. The name of the author may not be used to endorse or promote\n");
4476ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "   products derived from this software without specific prior written\n");
4477ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "   permission.\n");
4478ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4479ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n");
4480ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n");
4481ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n");
4482ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n");
4483ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n");
4484ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n");
4485ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n");
4486ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n");
4487ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n");
4488ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n");
4489ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n");
4490ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4491ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4492ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4493ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4494ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4495ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4496ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4497ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4498ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4499ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4500ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4501ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4502ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4503ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4504ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4505ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4506ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4507ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4508ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4509ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4510ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4511ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4512ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4513ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4514ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4515ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4516ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4517ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4518ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4519ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4520ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4521ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4522ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4523ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4524ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4525ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4526ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4527ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4528ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4529ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4530ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4531ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "ababababababababababababababababababababababababababababababab");
4532ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "		    GNU GENERAL PUBLIC LICENSE\n");
4533ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "		       Version 2, June 1991\n");
4534ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4535ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, " Copyright (C) 1989, 1991 Free Software Foundation, Inc.\n");
4536ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n");
4537ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, " Everyone is permitted to copy and distribute verbatim copies\n");
4538ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, " of this license document, but changing it is not allowed.\n");
4539ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4540ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "			    Preamble\n");
4541ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4542ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "  The licenses for most software are designed to take away your\n");
4543ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "freedom to share and change it.  By contrast, the GNU General Public\n");
4544ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "License is intended to guarantee your freedom to share and change free\n");
4545ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "software--to make sure the software is free for all its users.  This\n");
4546ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "General Public License applies to most of the Free Software\n");
4547ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "Foundation's software and to any other program whose authors commit to\n");
4548ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "using it.  (Some other Free Software Foundation software is covered by\n");
4549ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "the GNU Library General Public License instead.)  You can apply it to\n");
4550ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "your programs, too.\n");
4551ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4552ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "  When we speak of free software, we are referring to freedom, not\n");
4553ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "price.  Our General Public Licenses are designed to make sure that you\n");
4554ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "have the freedom to distribute copies of free software (and charge for\n");
4555ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "this service if you wish), that you receive source code or can get it\n");
4556ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "if you want it, that you can change the software or use pieces of it\n");
4557ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "in new free programs; and that you know you can do these things.\n");
4558ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4559ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "  To protect your rights, we need to make restrictions that forbid\n");
4560ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "anyone to deny you these rights or to ask you to surrender the rights.\n");
4561ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "These restrictions translate to certain responsibilities for you if you\n");
4562ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "distribute copies of the software, or if you modify it.\n");
4563ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4564ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "  For example, if you distribute copies of such a program, whether\n");
4565ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "gratis or for a fee, you must give the recipients all the rights that\n");
4566ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "you have.  You must make sure that they, too, receive or can get the\n");
4567ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "source code.  And you must show them these terms so they know their\n");
4568ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "rights.\n");
4569ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4570ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "  We protect your rights with two steps: (1) copyright the software, and\n");
4571ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "(2) offer you this license which gives you legal permission to copy,\n");
4572ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "distribute and/or modify the software.\n");
4573ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4574ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "  Also, for each author's protection and ours, we want to make certain\n");
4575ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "that everyone understands that there is no warranty for this free\n");
4576ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "software.  If the software is modified by someone else and passed on, we\n");
4577ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "want its recipients to know that what they have is not the original, so\n");
4578ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "that any problems introduced by others will not reflect on the original\n");
4579ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "authors' reputations.\n");
4580ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4581ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "  Finally, any free program is threatened constantly by software\n");
4582ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "patents.  We wish to avoid the danger that redistributors of a free\n");
4583ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "program will individually obtain patent licenses, in effect making the\n");
4584ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "program proprietary.  To prevent this, we have made it clear that any\n");
4585ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "patent must be licensed for everyone's free use or not licensed at all.\n");
4586ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4587ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "  The precise terms and conditions for copying, distribution and\n");
4588ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "modification follow.\n");
4589ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4590ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "		    GNU GENERAL PUBLIC LICENSE\n");
4591ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n");
4592ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4593ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "  0. This License applies to any program or other work which contains\n");
4594ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "a notice placed by the copyright holder saying it may be distributed\n");
4595ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "under the terms of this General Public License.  The Program, below,\n");
4596ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "refers to any such program or work, and a work based on the Program\n");
4597ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "means either the Program or any derivative work under copyright law:\n");
4598ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "that is to say, a work containing the Program or a portion of it,\n");
4599ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "either verbatim or with modifications and/or translated into another\n");
4600ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "language.  (Hereinafter, translation is included without limitation in\n");
4601ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "the term modification.)  Each licensee is addressed as you.\n");
4602ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4603ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "Activities other than copying, distribution and modification are not\n");
4604ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "covered by this License; they are outside its scope.  The act of\n");
4605ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "running the Program is not restricted, and the output from the Program\n");
4606ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "is covered only if its contents constitute a work based on the\n");
4607ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "Program (independent of having been made by running the Program).\n");
4608ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "Whether that is true depends on what the Program does.\n");
4609ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4610ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "  1. You may copy and distribute verbatim copies of the Program's\n");
4611ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "source code as you receive it, in any medium, provided that you\n");
4612ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "conspicuously and appropriately publish on each copy an appropriate\n");
4613ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "copyright notice and disclaimer of warranty; keep intact all the\n");
4614ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "notices that refer to this License and to the absence of any warranty;\n");
4615ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "and give any other recipients of the Program a copy of this License\n");
4616ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "along with the Program.\n");
4617ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4618ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "You may charge a fee for the physical act of transferring a copy, and\n");
4619ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "you may at your option offer warranty protection in exchange for a fee.\n");
4620ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4621ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "  2. You may modify your copy or copies of the Program or any portion\n");
4622ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "of it, thus forming a work based on the Program, and copy and\n");
4623ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "distribute such modifications or work under the terms of Section 1\n");
4624ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "above, provided that you also meet all of these conditions:\n");
4625ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4626ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    a) You must cause the modified files to carry prominent notices\n");
4627ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    stating that you changed the files and the date of any change.\n");
4628ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4629ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    b) You must cause any work that you distribute or publish, that in\n");
4630ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    whole or in part contains or is derived from the Program or any\n");
4631ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    part thereof, to be licensed as a whole at no charge to all third\n");
4632ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    parties under the terms of this License.\n");
4633ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4634ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    c) If the modified program normally reads commands interactively\n");
4635ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    when run, you must cause it, when started running for such\n");
4636ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    interactive use in the most ordinary way, to print or display an\n");
4637ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    announcement including an appropriate copyright notice and a\n");
4638ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    notice that there is no warranty (or else, saying that you provide\n");
4639ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    a warranty) and that users may redistribute the program under\n");
4640ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    these conditions, and telling the user how to view a copy of this\n");
4641ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    License.  (Exception: if the Program itself is interactive but\n");
4642ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    does not normally print such an announcement, your work based on\n");
4643ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    the Program is not required to print an announcement.)\n");
4644ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4645ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "These requirements apply to the modified work as a whole.  If\n");
4646ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "identifiable sections of that work are not derived from the Program,\n");
4647ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "and can be reasonably considered independent and separate works in\n");
4648ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "themselves, then this License, and its terms, do not apply to those\n");
4649ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "sections when you distribute them as separate works.  But when you\n");
4650ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "distribute the same sections as part of a whole which is a work based\n");
4651ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "on the Program, the distribution of the whole must be on the terms of\n");
4652ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "this License, whose permissions for other licensees extend to the\n");
4653ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "entire whole, and thus to each and every part regardless of who wrote it.\n");
4654ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4655ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "Thus, it is not the intent of this section to claim rights or contest\n");
4656ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "your rights to work written entirely by you; rather, the intent is to\n");
4657ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "exercise the right to control the distribution of derivative or\n");
4658ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "collective works based on the Program.\n");
4659ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4660ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "In addition, mere aggregation of another work not based on the Program\n");
4661ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "with the Program (or with a work based on the Program) on a volume of\n");
4662ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "a storage or distribution medium does not bring the other work under\n");
4663ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "the scope of this License.\n");
4664ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4665ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "  3. You may copy and distribute the Program (or a work based on it,\n");
4666ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "under Section 2) in object code or executable form under the terms of\n");
4667ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "Sections 1 and 2 above provided that you also do one of the following:\n");
4668ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4669ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    a) Accompany it with the complete corresponding machine-readable\n");
4670ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    source code, which must be distributed under the terms of Sections\n");
4671ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    1 and 2 above on a medium customarily used for software interchange; or,\n");
4672ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4673ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    b) Accompany it with a written offer, valid for at least three\n");
4674ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    years, to give any third party, for a charge no more than your\n");
4675ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    cost of physically performing source distribution, a complete\n");
4676ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    machine-readable copy of the corresponding source code, to be\n");
4677ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    distributed under the terms of Sections 1 and 2 above on a medium\n");
4678ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    customarily used for software interchange; or,\n");
4679ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4680ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    c) Accompany it with the information you received as to the offer\n");
4681ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    to distribute corresponding source code.  (This alternative is\n");
4682ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    allowed only for noncommercial distribution and only if you\n");
4683ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    received the program in object code or executable form with such\n");
4684ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    an offer, in accord with Subsection b above.)\n");
4685ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4686ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "The source code for a work means the preferred form of the work for\n");
4687ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "making modifications to it.  For an executable work, complete source\n");
4688ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "code means all the source code for all modules it contains, plus any\n");
4689ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "associated interface definition files, plus the scripts used to\n");
4690ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "control compilation and installation of the executable.  However, as a\n");
4691ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "special exception, the source code distributed need not include\n");
4692ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "anything that is normally distributed (in either source or binary\n");
4693ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "form) with the major components (compiler, kernel, and so on) of the\n");
4694ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "operating system on which the executable runs, unless that component\n");
4695ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "itself accompanies the executable.\n");
4696ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4697ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "If distribution of executable or object code is made by offering\n");
4698ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "access to copy from a designated place, then offering equivalent\n");
4699ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "access to copy the source code from the same place counts as\n");
4700ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "distribution of the source code, even though third parties are not\n");
4701ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "compelled to copy the source along with the object code.\n");
4702ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4703ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "  4. You may not copy, modify, sublicense, or distribute the Program\n");
4704ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "except as expressly provided under this License.  Any attempt\n");
4705ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "otherwise to copy, modify, sublicense or distribute the Program is\n");
4706ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "void, and will automatically terminate your rights under this License.\n");
4707ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "However, parties who have received copies, or rights, from you under\n");
4708ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "this License will not have their licenses terminated so long as such\n");
4709ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "parties remain in full compliance.\n");
4710ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4711ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "  5. You are not required to accept this License, since you have not\n");
4712ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "signed it.  However, nothing else grants you permission to modify or\n");
4713ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "distribute the Program or its derivative works.  These actions are\n");
4714ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "prohibited by law if you do not accept this License.  Therefore, by\n");
4715ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "modifying or distributing the Program (or any work based on the\n");
4716ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "Program), you indicate your acceptance of this License to do so, and\n");
4717ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "all its terms and conditions for copying, distributing or modifying\n");
4718ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "the Program or works based on it.\n");
4719ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4720ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "  6. Each time you redistribute the Program (or any work based on the\n");
4721ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "Program), the recipient automatically receives a license from the\n");
4722ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "original licensor to copy, distribute or modify the Program subject to\n");
4723ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "these terms and conditions.  You may not impose any further\n");
4724ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "restrictions on the recipients' exercise of the rights granted herein.\n");
4725ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "You are not responsible for enforcing compliance by third parties to\n");
4726ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "this License.\n");
4727ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4728ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "  7. If, as a consequence of a court judgment or allegation of patent\n");
4729ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "infringement or for any other reason (not limited to patent issues),\n");
4730ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "conditions are imposed on you (whether by court order, agreement or\n");
4731ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "otherwise) that contradict the conditions of this License, they do not\n");
4732ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "excuse you from the conditions of this License.  If you cannot\n");
4733ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "distribute so as to satisfy simultaneously your obligations under this\n");
4734ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "License and any other pertinent obligations, then as a consequence you\n");
4735ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "may not distribute the Program at all.  For example, if a patent\n");
4736ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "license would not permit royalty-free redistribution of the Program by\n");
4737ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "all those who receive copies directly or indirectly through you, then\n");
4738ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "the only way you could satisfy both it and this License would be to\n");
4739ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "refrain entirely from distribution of the Program.\n");
4740ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4741ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "If any portion of this section is held invalid or unenforceable under\n");
4742ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "any particular circumstance, the balance of the section is intended to\n");
4743ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "apply and the section as a whole is intended to apply in other\n");
4744ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "circumstances.\n");
4745ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4746ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "It is not the purpose of this section to induce you to infringe any\n");
4747ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "patents or other property right claims or to contest validity of any\n");
4748ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "such claims; this section has the sole purpose of protecting the\n");
4749ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "integrity of the free software distribution system, which is\n");
4750ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "implemented by public license practices.  Many people have made\n");
4751ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "generous contributions to the wide range of software distributed\n");
4752ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "through that system in reliance on consistent application of that\n");
4753ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "system; it is up to the author/donor to decide if he or she is willing\n");
4754ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "to distribute software through any other system and a licensee cannot\n");
4755ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "impose that choice.\n");
4756ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4757ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "This section is intended to make thoroughly clear what is believed to\n");
4758ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "be a consequence of the rest of this License.\n");
4759ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4760ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "  8. If the distribution and/or use of the Program is restricted in\n");
4761ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "certain countries either by patents or by copyrighted interfaces, the\n");
4762ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "original copyright holder who places the Program under this License\n");
4763ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "may add an explicit geographical distribution limitation excluding\n");
4764ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "those countries, so that distribution is permitted only in or among\n");
4765ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "countries not thus excluded.  In such case, this License incorporates\n");
4766ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "the limitation as if written in the body of this License.\n");
4767ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4768ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "  9. The Free Software Foundation may publish revised and/or new versions\n");
4769ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "of the General Public License from time to time.  Such new versions will\n");
4770ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "be similar in spirit to the present version, but may differ in detail to\n");
4771ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "address new problems or concerns.\n");
4772ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4773ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "Each version is given a distinguishing version number.  If the Program\n");
4774ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "specifies a version number of this License which applies to it and any\n");
4775ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "later version, you have the option of following the terms and conditions\n");
4776ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "either of that version or of any later version published by the Free\n");
4777ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "Software Foundation.  If the Program does not specify a version number of\n");
4778ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "this License, you may choose any version ever published by the Free Software\n");
4779ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "Foundation.\n");
4780ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4781ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "  10. If you wish to incorporate parts of the Program into other free\n");
4782ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "programs whose distribution conditions are different, write to the author\n");
4783ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "to ask for permission.  For software which is copyrighted by the Free\n");
4784ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "Software Foundation, write to the Free Software Foundation; we sometimes\n");
4785ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "make exceptions for this.  Our decision will be guided by the two goals\n");
4786ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "of preserving the free status of all derivatives of our free software and\n");
4787ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "of promoting the sharing and reuse of software generally.\n");
4788ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4789ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "			    NO WARRANTY\n");
4790ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4791ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\n");
4792ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN\n");
4793ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\n");
4794ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "PROVIDE THE PROGRAM AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\n");
4795ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n");
4796ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS\n");
4797ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE\n");
4798ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\n");
4799ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "REPAIR OR CORRECTION.\n");
4800ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4801ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\n");
4802ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\n");
4803ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\n");
4804ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\n");
4805ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\n");
4806ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\n");
4807ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\n");
4808ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\n");
4809ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "POSSIBILITY OF SUCH DAMAGES.\n");
4810ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4811ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "		     END OF TERMS AND CONDITIONS\n");
4812ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4813ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "	    How to Apply These Terms to Your New Programs\n");
4814ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4815ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "  If you develop a new program, and you want it to be of the greatest\n");
4816ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "possible use to the public, the best way to achieve this is to make it\n");
4817ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "free software which everyone can redistribute and change under these terms.\n");
4818ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4819ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "  To do so, attach the following notices to the program.  It is safest\n");
4820ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "to attach them to the start of each source file to most effectively\n");
4821ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "convey the exclusion of warranty; and each file should have at least\n");
4822ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "the copyright line and a pointer to where the full notice is found.\n");
4823ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4824ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    <one line to give the program's name and a brief idea of what it does.>\n");
4825ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    Copyright (C) <year>  <name of author>\n");
4826ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4827ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    This program is free software; you can redistribute it and/or modify\n");
4828ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    it under the terms of the GNU General Public License as published by\n");
4829ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    the Free Software Foundation; either version 2 of the License, or\n");
4830ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    (at your option) any later version.\n");
4831ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4832ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    This program is distributed in the hope that it will be useful,\n");
4833ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    but WITHOUT ANY WARRANTY; without even the implied warranty of\n");
4834ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n");
4835ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    GNU General Public License for more details.\n");
4836ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4837ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    You should have received a copy of the GNU General Public License\n");
4838ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    along with this program; if not, write to the Free Software\n");
4839ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n");
4840ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4841ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4842ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "Also add information on how to contact you by electronic and paper mail.\n");
4843ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4844ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "If the program is interactive, make it output a short notice like this\n");
4845ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "when it starts in an interactive mode:\n");
4846ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4847ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    Gnomovision version 69, Copyright (C) year  name of author\n");
4848ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n");
4849ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    This is free software, and you are welcome to redistribute it\n");
4850ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "    under certain conditions; type `show c' for details.\n");
4851ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4852ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "The hypothetical commands `show w' and `show c' should show the appropriate\n");
4853ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "parts of the General Public License.  Of course, the commands you use may\n");
4854ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "be called something other than `show w' and `show c'; they could even be\n");
4855ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "mouse-clicks or menu items--whatever suits your program.\n");
4856ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4857ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "You should also get your employer (if you work as a programmer) or your\n");
4858ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "school, if any, to sign a copyright disclaimer for the program, if\n");
4859ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "necessary.  Here is a sample; alter the names:\n");
4860ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4861ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "  Yoyodyne, Inc., hereby disclaims all copyright interest in the program\n");
4862ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "  `Gnomovision' (which makes passes at compilers) written by James Hacker.\n");
4863ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4864ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "  <signature of Ty Coon>, 1 April 1989\n");
4865ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "  Ty Coon, President of Vice\n");
4866ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4867ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "This General Public License does not permit incorporating your program into\n");
4868ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "proprietary programs.  If your program is a subroutine library, you may\n");
4869ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "consider it more useful to permit linking proprietary applications with the\n");
4870ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "library.  If this is what you want to do, use the GNU Library General\n");
4871ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "Public License instead of this License.\n");
4872ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4873ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  my_strcat(inbuf, "\n");
4874ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
4875ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4876ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4877ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct _IO_FILE FILE;
4878ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4879ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4880ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4881ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct _IO_FILE __FILE;
4882ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned int wint_t;
4883ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4884ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct
4885ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
4886ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int __count;
4887ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  union
4888ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  {
4889ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    wint_t __wch;
4890ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    char __wchb[4];
4891ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  } __value;
4892ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} __mbstate_t;
4893ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4894ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4895ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct
4896ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
4897ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __off_t __pos;
4898ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __mbstate_t __state;
4899ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} _G_fpos_t;
4900ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct
4901ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
4902ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __off64_t __pos;
4903ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __mbstate_t __state;
4904ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} _G_fpos64_t;
4905ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4906ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4907ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownenum
4908ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
4909ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __GCONV_OK = 0,
4910ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __GCONV_NOCONV,
4911ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __GCONV_NODB,
4912ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __GCONV_NOMEM,
4913ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4914ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __GCONV_EMPTY_INPUT,
4915ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __GCONV_FULL_OUTPUT,
4916ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __GCONV_ILLEGAL_INPUT,
4917ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __GCONV_INCOMPLETE_INPUT,
4918ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4919ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __GCONV_ILLEGAL_DESCRIPTOR,
4920ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __GCONV_INTERNAL_ERROR
4921ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
4922ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4923ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4924ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4925ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownenum
4926ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
4927ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __GCONV_IS_LAST = 0x0001,
4928ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __GCONV_IGNORE_ERRORS = 0x0002
4929ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
4930ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4931ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4932ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4933ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct __gconv_step;
4934ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct __gconv_step_data;
4935ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct __gconv_loaded_object;
4936ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct __gconv_trans_data;
4937ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4938ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4939ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4940ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef int (*__gconv_fct) (struct __gconv_step *, struct __gconv_step_data *,
4941ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown       __const unsigned char **, __const unsigned char *,
4942ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown       unsigned char **, size_t *, int, int);
4943ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4944ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4945ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef wint_t (*__gconv_btowc_fct) (struct __gconv_step *, unsigned char);
4946ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4947ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4948ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef int (*__gconv_init_fct) (struct __gconv_step *);
4949ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef void (*__gconv_end_fct) (struct __gconv_step *);
4950ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4951ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4952ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4953ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef int (*__gconv_trans_fct) (struct __gconv_step *,
4954ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      struct __gconv_step_data *, void *,
4955ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      __const unsigned char *,
4956ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      __const unsigned char **,
4957ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      __const unsigned char *, unsigned char **,
4958ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      size_t *);
4959ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4960ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4961ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef int (*__gconv_trans_context_fct) (void *, __const unsigned char *,
4962ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown       __const unsigned char *,
4963ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown       unsigned char *, unsigned char *);
4964ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4965ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4966ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef int (*__gconv_trans_query_fct) (__const char *, __const char ***,
4967ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     size_t *);
4968ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4969ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4970ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef int (*__gconv_trans_init_fct) (void **, const char *);
4971ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef void (*__gconv_trans_end_fct) (void *);
4972ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4973ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct __gconv_trans_data
4974ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
4975ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4976ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __gconv_trans_fct __trans_fct;
4977ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __gconv_trans_context_fct __trans_context_fct;
4978ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __gconv_trans_end_fct __trans_end_fct;
4979ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  void *__data;
4980ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  struct __gconv_trans_data *__next;
4981ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
4982ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4983ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4984ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4985ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct __gconv_step
4986ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
4987ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  struct __gconv_loaded_object *__shlib_handle;
4988ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __const char *__modname;
4989ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4990ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int __counter;
4991ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4992ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  char *__from_name;
4993ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  char *__to_name;
4994ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4995ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __gconv_fct __fct;
4996ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __gconv_btowc_fct __btowc_fct;
4997ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __gconv_init_fct __init_fct;
4998ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __gconv_end_fct __end_fct;
4999ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5000ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5001ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5002ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int __min_needed_from;
5003ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int __max_needed_from;
5004ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int __min_needed_to;
5005ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int __max_needed_to;
5006ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5007ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5008ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int __stateful;
5009ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5010ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  void *__data;
5011ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
5012ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5013ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5014ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5015ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct __gconv_step_data
5016ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
5017ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned char *__outbuf;
5018ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned char *__outbufend;
5019ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5020ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5021ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5022ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int __flags;
5023ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5024ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5025ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5026ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int __invocation_counter;
5027ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5028ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5029ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5030ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int __internal_use;
5031ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5032ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __mbstate_t *__statep;
5033ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __mbstate_t __state;
5034ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5035ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5036ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5037ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  struct __gconv_trans_data *__trans;
5038ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
5039ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5040ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5041ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5042ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct __gconv_info
5043ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
5044ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  size_t __nsteps;
5045ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  struct __gconv_step *__steps;
5046ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __extension__ struct __gconv_step_data __data [];
5047ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} *__gconv_t;
5048ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5049ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef union
5050ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
5051ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  struct __gconv_info __cd;
5052ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  struct
5053ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  {
5054ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    struct __gconv_info __cd;
5055ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    struct __gconv_step_data __data;
5056ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  } __combined;
5057ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} _G_iconv_t;
5058ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5059ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef int _G_int16_t __attribute__ ((__mode__ (__HI__)));
5060ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef int _G_int32_t __attribute__ ((__mode__ (__SI__)));
5061ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned int _G_uint16_t __attribute__ ((__mode__ (__HI__)));
5062ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned int _G_uint32_t __attribute__ ((__mode__ (__SI__)));
5063ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5064ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct _IO_jump_t; struct _IO_FILE;
5065ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5066ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef void _IO_lock_t;
5067ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5068ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5069ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5070ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5071ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5072ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct _IO_marker {
5073ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  struct _IO_marker *_next;
5074ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  struct _IO_FILE *_sbuf;
5075ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5076ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5077ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5078ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int _pos;
5079ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5080ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
5081ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5082ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5083ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownenum __codecvt_result
5084ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
5085ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __codecvt_ok,
5086ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __codecvt_partial,
5087ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __codecvt_error,
5088ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __codecvt_noconv
5089ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
5090ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5091ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct _IO_FILE {
5092ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int _flags;
5093ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5094ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5095ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5096ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5097ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  char* _IO_read_ptr;
5098ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  char* _IO_read_end;
5099ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  char* _IO_read_base;
5100ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  char* _IO_write_base;
5101ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  char* _IO_write_ptr;
5102ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  char* _IO_write_end;
5103ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  char* _IO_buf_base;
5104ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  char* _IO_buf_end;
5105ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5106ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  char *_IO_save_base;
5107ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  char *_IO_backup_base;
5108ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  char *_IO_save_end;
5109ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5110ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  struct _IO_marker *_markers;
5111ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5112ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  struct _IO_FILE *_chain;
5113ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5114ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int _fileno;
5115ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5116ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5117ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5118ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int _flags2;
5119ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5120ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __off_t _old_offset;
5121ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5122ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5123ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5124ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned short _cur_column;
5125ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  signed char _vtable_offset;
5126ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  char _shortbuf[1];
5127ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5128ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5129ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5130ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  _IO_lock_t *_lock;
5131ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5132ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __off64_t _offset;
5133ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5134ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5135ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5136ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5137ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5138ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  void *__pad1;
5139ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  void *__pad2;
5140ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5141ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int _mode;
5142ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5143ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  char _unused2[15 * sizeof (int) - 2 * sizeof (void *)];
5144ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5145ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
5146ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5147ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5148ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct _IO_FILE _IO_FILE;
5149ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5150ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5151ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct _IO_FILE_plus;
5152ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5153ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern struct _IO_FILE_plus _IO_2_1_stdin_;
5154ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern struct _IO_FILE_plus _IO_2_1_stdout_;
5155ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern struct _IO_FILE_plus _IO_2_1_stderr_;
5156ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5157ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __ssize_t __io_read_fn (void *__cookie, char *__buf, size_t __nbytes);
5158ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5159ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5160ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5161ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5162ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5163ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5164ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5165ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __ssize_t __io_write_fn (void *__cookie, __const char *__buf,
5166ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     size_t __n);
5167ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5168ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5169ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5170ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5171ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5172ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5173ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5174ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef int __io_seek_fn (void *__cookie, __off64_t *__pos, int __w);
5175ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5176ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5177ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef int __io_close_fn (void *__cookie);
5178ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5179ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int __underflow (_IO_FILE *) __attribute__ ((__nothrow__));
5180ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int __uflow (_IO_FILE *) __attribute__ ((__nothrow__));
5181ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int __overflow (_IO_FILE *, int) __attribute__ ((__nothrow__));
5182ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern wint_t __wunderflow (_IO_FILE *) __attribute__ ((__nothrow__));
5183ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern wint_t __wuflow (_IO_FILE *) __attribute__ ((__nothrow__));
5184ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern wint_t __woverflow (_IO_FILE *, wint_t) __attribute__ ((__nothrow__));
5185ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5186ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int _IO_getc (_IO_FILE *__fp) __attribute__ ((__nothrow__));
5187ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int _IO_putc (int __c, _IO_FILE *__fp) __attribute__ ((__nothrow__));
5188ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int _IO_feof (_IO_FILE *__fp) __attribute__ ((__nothrow__));
5189ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int _IO_ferror (_IO_FILE *__fp) __attribute__ ((__nothrow__));
5190ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5191ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int _IO_peekc_locked (_IO_FILE *__fp) __attribute__ ((__nothrow__));
5192ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5193ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5194ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5195ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5196ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5197ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void _IO_flockfile (_IO_FILE *) __attribute__ ((__nothrow__));
5198ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void _IO_funlockfile (_IO_FILE *) __attribute__ ((__nothrow__));
5199ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int _IO_ftrylockfile (_IO_FILE *) __attribute__ ((__nothrow__));
5200ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5201ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern __ssize_t _IO_padn (_IO_FILE *, int, __ssize_t) __attribute__ ((__nothrow__));
5202ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern size_t _IO_sgetn (_IO_FILE *, void *, size_t) __attribute__ ((__nothrow__));
5203ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5204ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern __off64_t _IO_seekoff (_IO_FILE *, __off64_t, int, int) __attribute__ ((__nothrow__));
5205ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern __off64_t _IO_seekpos (_IO_FILE *, __off64_t, int) __attribute__ ((__nothrow__));
5206ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5207ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void _IO_free_backup_area (_IO_FILE *) __attribute__ ((__nothrow__));
5208ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5209ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5210ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef _G_fpos_t fpos_t;
5211ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5212ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5213ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5214ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5215ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5216ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5217ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5218ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5219ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern struct _IO_FILE *stdin;
5220ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern struct _IO_FILE *stdout;
5221ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern struct _IO_FILE *stderr;
5222ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5223ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5224ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5225ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5226ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5227ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5228ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5229ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5230ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5231ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int remove (__const char *__filename) __attribute__ ((__nothrow__));
5232ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5233ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int rename (__const char *__old, __const char *__new) __attribute__ ((__nothrow__));
5234ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5235ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5236ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5237ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5238ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5239ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5240ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5241ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5242ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5243ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern FILE *tmpfile (void);
5244ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5245ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern char *tmpnam (char *__s) __attribute__ ((__nothrow__));
5246ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5247ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5248ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5249ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5250ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5251ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern char *tmpnam_r (char *__s) __attribute__ ((__nothrow__));
5252ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5253ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern char *tempnam (__const char *__dir, __const char *__pfx)
5254ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__malloc__));
5255ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5256ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5257ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5258ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5259ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5260ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5261ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5262ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5263ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int fclose (FILE *__stream);
5264ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5265ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5266ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5267ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5268ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int fflush (FILE *__stream);
5269ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5270ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5271ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int fflush_unlocked (FILE *__stream);
5272ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5273ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5274ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5275ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5276ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5277ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5278ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5279ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern FILE *fopen (__const char *__restrict __filename,
5280ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      __const char *__restrict __modes);
5281ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5282ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5283ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5284ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5285ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern FILE *freopen (__const char *__restrict __filename,
5286ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        __const char *__restrict __modes,
5287ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        FILE *__restrict __stream);
5288ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5289ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5290ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5291ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern FILE *fdopen (int __fd, __const char *__modes) __attribute__ ((__nothrow__));
5292ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5293ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5294ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5295ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5296ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void setbuf (FILE *__restrict __stream, char *__restrict __buf) __attribute__ ((__nothrow__));
5297ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5298ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5299ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5300ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
5301ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      int __modes, size_t __n) __attribute__ ((__nothrow__));
5302ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5303ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5304ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5305ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5306ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5307ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
5308ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         size_t __size) __attribute__ ((__nothrow__));
5309ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5310ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5311ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void setlinebuf (FILE *__stream) __attribute__ ((__nothrow__));
5312ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5313ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5314ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5315ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5316ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5317ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5318ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5319ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5320ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int fprintf (FILE *__restrict __stream,
5321ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      __const char *__restrict __format, ...);
5322ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5323ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5324ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5325ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5326ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int printf (__const char *__restrict __format, ...);
5327ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5328ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int sprintf (char *__restrict __s,
5329ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      __const char *__restrict __format, ...) __attribute__ ((__nothrow__));
5330ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5331ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5332ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5333ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5334ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5335ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5336ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5337ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5338ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5339ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5340ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5341ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5342ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5343ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5344ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5345ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5346ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int snprintf (char *__restrict __s, size_t __maxlen,
5347ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown       __const char *__restrict __format, ...)
5348ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 3, 4)));
5349ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5350ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5351ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5352ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5353ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5354ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5355ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5356ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5357ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int fscanf (FILE *__restrict __stream,
5358ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __const char *__restrict __format, ...);
5359ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5360ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5361ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5362ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5363ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int scanf (__const char *__restrict __format, ...);
5364ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5365ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int sscanf (__const char *__restrict __s,
5366ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __const char *__restrict __format, ...) __attribute__ ((__nothrow__));
5367ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5368ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5369ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5370ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5371ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5372ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5373ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5374ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int fgetc (FILE *__stream);
5375ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int getc (FILE *__stream);
5376ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5377ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5378ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5379ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5380ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5381ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int getchar (void);
5382ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5383ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5384ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int getc_unlocked (FILE *__stream);
5385ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int getchar_unlocked (void);
5386ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5387ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int fgetc_unlocked (FILE *__stream);
5388ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5389ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5390ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5391ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5392ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5393ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5394ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5395ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5396ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5397ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5398ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5399ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int fputc (int __c, FILE *__stream);
5400ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int putc (int __c, FILE *__stream);
5401ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5402ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5403ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5404ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5405ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5406ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int putchar (int __c);
5407ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5408ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5409ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int fputc_unlocked (int __c, FILE *__stream);
5410ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5411ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5412ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5413ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5414ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5415ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5416ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5417ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int putc_unlocked (int __c, FILE *__stream);
5418ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int putchar_unlocked (int __c);
5419ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5420ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5421ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5422ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5423ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5424ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5425ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int getw (FILE *__stream);
5426ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5427ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5428ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int putw (int __w, FILE *__stream);
5429ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5430ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5431ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5432ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5433ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5434ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5435ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5436ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5437ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream);
5438ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5439ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5440ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5441ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5442ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5443ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5444ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern char *gets (char *__s);
5445ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5446ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5447ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5448ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5449ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5450ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5451ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5452ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int fputs (__const char *__restrict __s, FILE *__restrict __stream);
5453ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5454ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5455ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5456ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5457ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5458ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int puts (__const char *__s);
5459ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5460ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5461ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5462ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5463ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5464ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5465ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int ungetc (int __c, FILE *__stream);
5466ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5467ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5468ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5469ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5470ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5471ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5472ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern size_t fread (void *__restrict __ptr, size_t __size,
5473ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown       size_t __n, FILE *__restrict __stream);
5474ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5475ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5476ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5477ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5478ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern size_t fwrite (__const void *__restrict __ptr, size_t __size,
5479ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        size_t __n, FILE *__restrict __s);
5480ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5481ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5482ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
5483ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         size_t __n, FILE *__restrict __stream);
5484ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern size_t fwrite_unlocked (__const void *__restrict __ptr, size_t __size,
5485ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          size_t __n, FILE *__restrict __stream);
5486ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5487ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5488ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5489ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5490ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5491ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5492ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5493ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5494ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int fseek (FILE *__stream, long int __off, int __whence);
5495ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5496ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5497ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5498ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5499ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern long int ftell (FILE *__stream);
5500ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5501ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5502ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5503ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5504ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void rewind (FILE *__stream);
5505ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5506ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5507ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5508ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5509ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5510ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5511ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5512ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5513ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos);
5514ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5515ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5516ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5517ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5518ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int fsetpos (FILE *__stream, __const fpos_t *__pos);
5519ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5520ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5521ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5522ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void clearerr (FILE *__stream) __attribute__ ((__nothrow__));
5523ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5524ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int feof (FILE *__stream) __attribute__ ((__nothrow__));
5525ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5526ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int ferror (FILE *__stream) __attribute__ ((__nothrow__));
5527ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5528ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5529ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5530ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5531ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void clearerr_unlocked (FILE *__stream) __attribute__ ((__nothrow__));
5532ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int feof_unlocked (FILE *__stream) __attribute__ ((__nothrow__));
5533ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int ferror_unlocked (FILE *__stream) __attribute__ ((__nothrow__));
5534ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5535ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5536ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5537ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5538ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5539ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5540ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5541ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5542ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void perror (__const char *__s);
5543ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5544ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5545ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5546ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5547ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5548ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5549ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int sys_nerr;
5550ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern __const char *__const sys_errlist[];
5551ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5552ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5553ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5554ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5555ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5556ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int fileno (FILE *__stream) __attribute__ ((__nothrow__));
5557ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5558ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5559ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5560ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5561ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int fileno_unlocked (FILE *__stream) __attribute__ ((__nothrow__));
5562ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5563ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern FILE *popen (__const char *__command, __const char *__modes);
5564ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5565ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5566ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5567ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5568ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5569ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int pclose (FILE *__stream);
5570ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5571ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5572ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5573ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5574ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5575ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern char *ctermid (char *__s) __attribute__ ((__nothrow__));
5576ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5577ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void flockfile (FILE *__stream) __attribute__ ((__nothrow__));
5578ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5579ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5580ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5581ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int ftrylockfile (FILE *__stream) __attribute__ ((__nothrow__));
5582ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5583ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5584ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void funlockfile (FILE *__stream) __attribute__ ((__nothrow__));
5585ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5586ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef int ptrdiff_t;
5587ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5588ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void * malloc (size_t __size) __attribute__ ((__nothrow__)) __attribute__ ((__malloc__));
5589ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5590ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5591ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void * calloc (size_t __nmemb, size_t __size) __attribute__ ((__nothrow__))
5592ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown       __attribute__ ((__malloc__));
5593ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5594ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5595ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5596ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void * realloc (void * __ptr, size_t __size) __attribute__ ((__nothrow__))
5597ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5598ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown       __attribute__ ((__malloc__));
5599ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5600ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5601ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void free (void * __ptr) __attribute__ ((__nothrow__));
5602ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5603ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5604ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void cfree (void * __ptr) __attribute__ ((__nothrow__));
5605ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5606ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5607ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void * memalign (size_t __alignment, size_t __size) __attribute__ ((__nothrow__));
5608ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5609ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5610ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void * valloc (size_t __size) __attribute__ ((__nothrow__)) __attribute__ ((__malloc__));
5611ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5612ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5613ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5614ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void * pvalloc (size_t __size) __attribute__ ((__nothrow__))
5615ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown       __attribute__ ((__malloc__));
5616ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5617ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5618ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5619ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void * (*__morecore) (ptrdiff_t __size);
5620ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5621ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5622ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void * __default_morecore (ptrdiff_t __size) __attribute__ ((__nothrow__))
5623ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown       __attribute__ ((__malloc__));
5624ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5625ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5626ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5627ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct mallinfo {
5628ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int arena;
5629ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int ordblks;
5630ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int smblks;
5631ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int hblks;
5632ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int hblkhd;
5633ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int usmblks;
5634ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int fsmblks;
5635ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int uordblks;
5636ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int fordblks;
5637ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int keepcost;
5638ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
5639ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5640ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5641ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern struct mallinfo mallinfo (void) __attribute__ ((__nothrow__));
5642ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5643ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int mallopt (int __param, int __val) __attribute__ ((__nothrow__));
5644ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5645ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5646ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5647ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int malloc_trim (size_t __pad) __attribute__ ((__nothrow__));
5648ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5649ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5650ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5651ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern size_t malloc_usable_size (void * __ptr) __attribute__ ((__nothrow__));
5652ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5653ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5654ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void malloc_stats (void) __attribute__ ((__nothrow__));
5655ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5656ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5657ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void * malloc_get_state (void) __attribute__ ((__nothrow__));
5658ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5659ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5660ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5661ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int malloc_set_state (void * __ptr) __attribute__ ((__nothrow__));
5662ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5663ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5664ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5665ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5666ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void (*__malloc_initialize_hook) (void);
5667ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5668ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void (*__free_hook) (void * __ptr, __const void *);
5669ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5670ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void * (*__malloc_hook) (size_t __size, __const void *);
5671ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5672ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void * (*__realloc_hook) (void * __ptr, size_t __size, __const void *);
5673ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5674ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5675ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void * (*__memalign_hook) (size_t __alignment, size_t __size, __const void *);
5676ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5677ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5678ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void (*__after_morecore_hook) (void);
5679ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5680ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5681ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void __malloc_check_init (void) __attribute__ ((__nothrow__));
5682ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5683ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5684ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5685ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void __assert_fail (__const char *__assertion, __const char *__file,
5686ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      unsigned int __line, __const char *__function)
5687ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__noreturn__));
5688ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5689ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5690ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void __assert_perror_fail (int __errnum, __const char *__file,
5691ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      unsigned int __line,
5692ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      __const char *__function)
5693ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__noreturn__));
5694ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5695ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5696ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5697ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5698ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void __assert (const char *__assertion, const char *__file, int __line)
5699ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     __attribute__ ((__nothrow__)) __attribute__ ((__noreturn__));
5700ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5701ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5702ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5703ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5704ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5705ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5706ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic HWord g_serviceFn ( HWord arg1, HWord arg2 )
5707ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
5708ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   switch (arg1) {
5709ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 0:
5710ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         exit(0);
5711ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 1:
5712ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         putchar(arg2);
5713ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         return 0;
5714ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 2:
5715ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         return (HWord)malloc(arg2);
5716ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      case 3:
5717ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         free((void*)arg2);
5718ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         return 0;
5719ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      default:
5720ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         ((void) ((0) ? 0 : (__assert_fail ("0", "./bz2.c", 6428, "__PRETTY_FUNCTION__"), 0)));
5721ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
5722ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
5723ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5724ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5725ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint main ( void )
5726ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
5727ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   int r;
5728ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   int bit;
5729ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   int i;
5730ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5731ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   serviceFn = g_serviceFn;
5732ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5733ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   set_inbuf();
5734ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   nIn = vex_strlen(inbuf)+1;
5735ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_printf( "%d bytes read\n", nIn );
5736ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5737ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   nZ = 1000000;
5738ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   r = BZ2_bzBuffToBuffCompress (
5739ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          zbuf, &nZ, inbuf, nIn, 9, 3 , 30 );
5740ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5741ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (r != 0) {
5742ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     vex_printf("initial compress failed!\n");
5743ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     (*serviceFn)(0,0);
5744ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
5745ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_printf( "%d after compression\n", nZ );
5746ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5747ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (bit = 0; bit < nZ*8; bit += (bit < 35 ? 1 : 137)) {
5748ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5749ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      flip_bit ( bit );
5750ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      nOut = (1000000 + 1000000);
5751ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      r = BZ2_bzBuffToBuffDecompress (
5752ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown             outbuf, &nOut, zbuf, nZ, 1 , 0 );
5753ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5754ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5755ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (r != 0) {
5756ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5757ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      } else {
5758ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         if (nOut != nIn) {
5759ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown           vex_printf( "nIn/nOut mismatch %d %d\n", nIn, nOut );
5760ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown           (*serviceFn)(0,0);
5761ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         } else {
5762ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown           for (i = 0; i < nOut; i++)
5763ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown             if (inbuf[i] != outbuf[i]) {
5764ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                vex_printf( "mismatch at %d\n", i );
5765ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                (*serviceFn)(0,0);
5766ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown           }
5767ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown           if (i == nOut) vex_printf( "really ok!\n" );
5768ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         }
5769ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      }
5770ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5771ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      flip_bit ( bit );
5772ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
5773ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5774ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_printf( "all ok\n" );
5775ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   (*serviceFn)(0,0);
5776ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5777ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return 0;
5778ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
5779