1 //========================================================================
2 //
3 // Stream-CCITT.h
4 //
5 // Tables for CCITT Fax decoding.
6 //
7 // Copyright 1996-2003 Glyph & Cog, LLC
8 //
9 //========================================================================
10 
11 //========================================================================
12 //
13 // Modified under the Poppler project - http://poppler.freedesktop.org
14 //
15 // All changes made under the Poppler project to this file are licensed
16 // under GPL version 2 or later
17 //
18 // Copyright (C) 2008 Albert Astals Cid <aacid@kde.org>
19 //
20 // To see a description of the changes please see the Changelog file that
21 // came with your tarball or type make ChangeLog if you are building from git
22 //
23 //========================================================================
24 
25 #ifndef STREAM_CCITT_H
26 #define STREAM_CCITT_H
27 
28 struct CCITTCode {
29   short bits;
30   short n;
31 };
32 
33 #define ccittEOL -2
34 
35 //------------------------------------------------------------------------
36 // 2D codes
37 //------------------------------------------------------------------------
38 
39 #define twoDimPass   0
40 #define twoDimHoriz  1
41 #define twoDimVert0  2
42 #define twoDimVertR1 3
43 #define twoDimVertL1 4
44 #define twoDimVertR2 5
45 #define twoDimVertL2 6
46 #define twoDimVertR3 7
47 #define twoDimVertL3 8
48 
49 // 1-7 bit codes
50 static const CCITTCode twoDimTab1[128] = {
51   {-1, -1}, {-1, -1},		        // 000000x
52   {7, twoDimVertL3},		        // 0000010
53   {7, twoDimVertR3},		        // 0000011
54   {6, twoDimVertL2}, {6, twoDimVertL2},	// 000010x
55   {6, twoDimVertR2}, {6, twoDimVertR2},	// 000011x
56   {4, twoDimPass}, {4, twoDimPass},     // 0001xxx
57     {4, twoDimPass}, {4, twoDimPass},
58     {4, twoDimPass}, {4, twoDimPass},
59     {4, twoDimPass}, {4, twoDimPass},
60   {3, twoDimHoriz}, {3, twoDimHoriz},	// 001xxxx
61     {3, twoDimHoriz}, {3, twoDimHoriz},
62     {3, twoDimHoriz}, {3, twoDimHoriz},
63     {3, twoDimHoriz}, {3, twoDimHoriz},
64     {3, twoDimHoriz}, {3, twoDimHoriz},
65     {3, twoDimHoriz}, {3, twoDimHoriz},
66     {3, twoDimHoriz}, {3, twoDimHoriz},
67     {3, twoDimHoriz}, {3, twoDimHoriz},
68   {3, twoDimVertL1}, {3, twoDimVertL1},	// 010xxxx
69     {3, twoDimVertL1}, {3, twoDimVertL1},
70     {3, twoDimVertL1}, {3, twoDimVertL1},
71     {3, twoDimVertL1}, {3, twoDimVertL1},
72     {3, twoDimVertL1}, {3, twoDimVertL1},
73     {3, twoDimVertL1}, {3, twoDimVertL1},
74     {3, twoDimVertL1}, {3, twoDimVertL1},
75     {3, twoDimVertL1}, {3, twoDimVertL1},
76   {3, twoDimVertR1}, {3, twoDimVertR1},	// 011xxxx
77     {3, twoDimVertR1}, {3, twoDimVertR1},
78     {3, twoDimVertR1}, {3, twoDimVertR1},
79     {3, twoDimVertR1}, {3, twoDimVertR1},
80     {3, twoDimVertR1}, {3, twoDimVertR1},
81     {3, twoDimVertR1}, {3, twoDimVertR1},
82     {3, twoDimVertR1}, {3, twoDimVertR1},
83     {3, twoDimVertR1}, {3, twoDimVertR1},
84   {1, twoDimVert0}, {1, twoDimVert0},	// 1xxxxxx
85     {1, twoDimVert0}, {1, twoDimVert0},
86     {1, twoDimVert0}, {1, twoDimVert0},
87     {1, twoDimVert0}, {1, twoDimVert0},
88     {1, twoDimVert0}, {1, twoDimVert0},
89     {1, twoDimVert0}, {1, twoDimVert0},
90     {1, twoDimVert0}, {1, twoDimVert0},
91     {1, twoDimVert0}, {1, twoDimVert0},
92     {1, twoDimVert0}, {1, twoDimVert0},
93     {1, twoDimVert0}, {1, twoDimVert0},
94     {1, twoDimVert0}, {1, twoDimVert0},
95     {1, twoDimVert0}, {1, twoDimVert0},
96     {1, twoDimVert0}, {1, twoDimVert0},
97     {1, twoDimVert0}, {1, twoDimVert0},
98     {1, twoDimVert0}, {1, twoDimVert0},
99     {1, twoDimVert0}, {1, twoDimVert0},
100     {1, twoDimVert0}, {1, twoDimVert0},
101     {1, twoDimVert0}, {1, twoDimVert0},
102     {1, twoDimVert0}, {1, twoDimVert0},
103     {1, twoDimVert0}, {1, twoDimVert0},
104     {1, twoDimVert0}, {1, twoDimVert0},
105     {1, twoDimVert0}, {1, twoDimVert0},
106     {1, twoDimVert0}, {1, twoDimVert0},
107     {1, twoDimVert0}, {1, twoDimVert0},
108     {1, twoDimVert0}, {1, twoDimVert0},
109     {1, twoDimVert0}, {1, twoDimVert0},
110     {1, twoDimVert0}, {1, twoDimVert0},
111     {1, twoDimVert0}, {1, twoDimVert0},
112     {1, twoDimVert0}, {1, twoDimVert0},
113     {1, twoDimVert0}, {1, twoDimVert0},
114     {1, twoDimVert0}, {1, twoDimVert0},
115     {1, twoDimVert0}, {1, twoDimVert0}
116 };
117 
118 //------------------------------------------------------------------------
119 // white run lengths
120 //------------------------------------------------------------------------
121 
122 // 11-12 bit codes (upper 7 bits are 0)
123 static const CCITTCode whiteTab1[32] = {
124   {-1, -1},					// 00000
125   {12, ccittEOL},				// 00001
126   {-1, -1}, {-1, -1},				// 0001x
127   {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1},	// 001xx
128   {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1},	// 010xx
129   {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1},	// 011xx
130   {11, 1792}, {11, 1792},			// 1000x
131   {12, 1984},					// 10010
132   {12, 2048},					// 10011
133   {12, 2112},					// 10100
134   {12, 2176},					// 10101
135   {12, 2240},					// 10110
136   {12, 2304},					// 10111
137   {11, 1856}, {11, 1856},			// 1100x
138   {11, 1920}, {11, 1920},			// 1101x
139   {12, 2368},					// 11100
140   {12, 2432},					// 11101
141   {12, 2496},					// 11110
142   {12, 2560}					// 11111
143 };
144 
145 // 1-9 bit codes
146 static const CCITTCode whiteTab2[512] = {
147   {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1},	// 0000000xx
148   {8, 29}, {8, 29},				// 00000010x
149   {8, 30}, {8, 30},				// 00000011x
150   {8, 45}, {8, 45},				// 00000100x
151   {8, 46}, {8, 46},				// 00000101x
152   {7, 22}, {7, 22}, {7, 22}, {7, 22},		// 0000011xx
153   {7, 23}, {7, 23}, {7, 23}, {7, 23},		// 0000100xx
154   {8, 47}, {8, 47},				// 00001010x
155   {8, 48}, {8, 48},				// 00001011x
156   {6, 13}, {6, 13}, {6, 13}, {6, 13},		// 000011xxx
157     {6, 13}, {6, 13}, {6, 13}, {6, 13},
158   {7, 20}, {7, 20}, {7, 20}, {7, 20},		// 0001000xx
159   {8, 33}, {8, 33},				// 00010010x
160   {8, 34}, {8, 34},				// 00010011x
161   {8, 35}, {8, 35},				// 00010100x
162   {8, 36}, {8, 36},				// 00010101x
163   {8, 37}, {8, 37},				// 00010110x
164   {8, 38}, {8, 38},				// 00010111x
165   {7, 19}, {7, 19}, {7, 19}, {7, 19},		// 0001100xx
166   {8, 31}, {8, 31},				// 00011010x
167   {8, 32}, {8, 32},				// 00011011x
168   {6, 1}, {6, 1}, {6, 1}, {6, 1},		// 000111xxx
169     {6, 1}, {6, 1}, {6, 1}, {6, 1},
170   {6, 12}, {6, 12}, {6, 12}, {6, 12},		// 001000xxx
171     {6, 12}, {6, 12}, {6, 12}, {6, 12},
172   {8, 53}, {8, 53},				// 00100100x
173   {8, 54}, {8, 54},				// 00100101x
174   {7, 26}, {7, 26}, {7, 26}, {7, 26},		// 0010011xx
175   {8, 39}, {8, 39},				// 00101000x
176   {8, 40}, {8, 40},				// 00101001x
177   {8, 41}, {8, 41},				// 00101010x
178   {8, 42}, {8, 42},				// 00101011x
179   {8, 43}, {8, 43},				// 00101100x
180   {8, 44}, {8, 44},				// 00101101x
181   {7, 21}, {7, 21}, {7, 21}, {7, 21},		// 0010111xx
182   {7, 28}, {7, 28}, {7, 28}, {7, 28},		// 0011000xx
183   {8, 61}, {8, 61},				// 00110010x
184   {8, 62}, {8, 62},				// 00110011x
185   {8, 63}, {8, 63},				// 00110100x
186   {8, 0}, {8, 0},				// 00110101x
187   {8, 320}, {8, 320},				// 00110110x
188   {8, 384}, {8, 384},				// 00110111x
189   {5, 10}, {5, 10}, {5, 10}, {5, 10},		// 00111xxxx
190     {5, 10}, {5, 10}, {5, 10}, {5, 10},
191     {5, 10}, {5, 10}, {5, 10}, {5, 10},
192     {5, 10}, {5, 10}, {5, 10}, {5, 10},
193   {5, 11}, {5, 11}, {5, 11}, {5, 11},		// 01000xxxx
194     {5, 11}, {5, 11}, {5, 11}, {5, 11},
195     {5, 11}, {5, 11}, {5, 11}, {5, 11},
196     {5, 11}, {5, 11}, {5, 11}, {5, 11},
197   {7, 27}, {7, 27}, {7, 27}, {7, 27},		// 0100100xx
198   {8, 59}, {8, 59},				// 01001010x
199   {8, 60}, {8, 60},				// 01001011x
200   {9, 1472},					// 010011000
201   {9, 1536},					// 010011001
202   {9, 1600},					// 010011010
203   {9, 1728},					// 010011011
204   {7, 18}, {7, 18}, {7, 18}, {7, 18},		// 0100111xx
205   {7, 24}, {7, 24}, {7, 24}, {7, 24},		// 0101000xx
206   {8, 49}, {8, 49},				// 01010010x
207   {8, 50}, {8, 50},				// 01010011x
208   {8, 51}, {8, 51},				// 01010100x
209   {8, 52}, {8, 52},				// 01010101x
210   {7, 25}, {7, 25}, {7, 25}, {7, 25},		// 0101011xx
211   {8, 55}, {8, 55},				// 01011000x
212   {8, 56}, {8, 56},				// 01011001x
213   {8, 57}, {8, 57},				// 01011010x
214   {8, 58}, {8, 58},				// 01011011x
215   {6, 192}, {6, 192}, {6, 192}, {6, 192},	// 010111xxx
216     {6, 192}, {6, 192}, {6, 192}, {6, 192},
217   {6, 1664}, {6, 1664}, {6, 1664}, {6, 1664},	// 011000xxx
218     {6, 1664}, {6, 1664}, {6, 1664}, {6, 1664},
219   {8, 448}, {8, 448},				// 01100100x
220   {8, 512}, {8, 512},				// 01100101x
221   {9, 704},					// 011001100
222   {9, 768},					// 011001101
223   {8, 640}, {8, 640},				// 01100111x
224   {8, 576}, {8, 576},				// 01101000x
225   {9, 832},					// 011010010
226   {9, 896},					// 011010011
227   {9, 960},					// 011010100
228   {9, 1024},					// 011010101
229   {9, 1088},					// 011010110
230   {9, 1152},					// 011010111
231   {9, 1216},					// 011011000
232   {9, 1280},					// 011011001
233   {9, 1344},					// 011011010
234   {9, 1408},					// 011011011
235   {7, 256}, {7, 256}, {7, 256}, {7, 256},	// 0110111xx
236   {4, 2}, {4, 2}, {4, 2}, {4, 2},		// 0111xxxxx
237     {4, 2}, {4, 2}, {4, 2}, {4, 2},
238     {4, 2}, {4, 2}, {4, 2}, {4, 2},
239     {4, 2}, {4, 2}, {4, 2}, {4, 2},
240     {4, 2}, {4, 2}, {4, 2}, {4, 2},
241     {4, 2}, {4, 2}, {4, 2}, {4, 2},
242     {4, 2}, {4, 2}, {4, 2}, {4, 2},
243     {4, 2}, {4, 2}, {4, 2}, {4, 2},
244   {4, 3}, {4, 3}, {4, 3}, {4, 3},		// 1000xxxxx
245     {4, 3}, {4, 3}, {4, 3}, {4, 3},
246     {4, 3}, {4, 3}, {4, 3}, {4, 3},
247     {4, 3}, {4, 3}, {4, 3}, {4, 3},
248     {4, 3}, {4, 3}, {4, 3}, {4, 3},
249     {4, 3}, {4, 3}, {4, 3}, {4, 3},
250     {4, 3}, {4, 3}, {4, 3}, {4, 3},
251     {4, 3}, {4, 3}, {4, 3}, {4, 3},
252   {5, 128}, {5, 128}, {5, 128}, {5, 128},	// 10010xxxx
253     {5, 128}, {5, 128}, {5, 128}, {5, 128},
254     {5, 128}, {5, 128}, {5, 128}, {5, 128},
255     {5, 128}, {5, 128}, {5, 128}, {5, 128},
256   {5, 8}, {5, 8}, {5, 8}, {5, 8},		// 10011xxxx
257     {5, 8}, {5, 8}, {5, 8}, {5, 8},
258     {5, 8}, {5, 8}, {5, 8}, {5, 8},
259     {5, 8}, {5, 8}, {5, 8}, {5, 8},
260   {5, 9}, {5, 9}, {5, 9}, {5, 9},		// 10100xxxx
261     {5, 9}, {5, 9}, {5, 9}, {5, 9},
262     {5, 9}, {5, 9}, {5, 9}, {5, 9},
263     {5, 9}, {5, 9}, {5, 9}, {5, 9},
264   {6, 16}, {6, 16}, {6, 16}, {6, 16},		// 101010xxx
265     {6, 16}, {6, 16}, {6, 16}, {6, 16},
266   {6, 17}, {6, 17}, {6, 17}, {6, 17},		// 101011xxx
267     {6, 17}, {6, 17}, {6, 17}, {6, 17},
268   {4, 4}, {4, 4}, {4, 4}, {4, 4},		// 1011xxxxx
269     {4, 4}, {4, 4}, {4, 4}, {4, 4},
270     {4, 4}, {4, 4}, {4, 4}, {4, 4},
271     {4, 4}, {4, 4}, {4, 4}, {4, 4},
272     {4, 4}, {4, 4}, {4, 4}, {4, 4},
273     {4, 4}, {4, 4}, {4, 4}, {4, 4},
274     {4, 4}, {4, 4}, {4, 4}, {4, 4},
275     {4, 4}, {4, 4}, {4, 4}, {4, 4},
276   {4, 5}, {4, 5}, {4, 5}, {4, 5},		// 1100xxxxx
277     {4, 5}, {4, 5}, {4, 5}, {4, 5},
278     {4, 5}, {4, 5}, {4, 5}, {4, 5},
279     {4, 5}, {4, 5}, {4, 5}, {4, 5},
280     {4, 5}, {4, 5}, {4, 5}, {4, 5},
281     {4, 5}, {4, 5}, {4, 5}, {4, 5},
282     {4, 5}, {4, 5}, {4, 5}, {4, 5},
283     {4, 5}, {4, 5}, {4, 5}, {4, 5},
284   {6, 14}, {6, 14}, {6, 14}, {6, 14},		// 110100xxx
285     {6, 14}, {6, 14}, {6, 14}, {6, 14},
286   {6, 15}, {6, 15}, {6, 15}, {6, 15},		// 110101xxx
287     {6, 15}, {6, 15}, {6, 15}, {6, 15},
288   {5, 64}, {5, 64}, {5, 64}, {5, 64},		// 11011xxxx
289     {5, 64}, {5, 64}, {5, 64}, {5, 64},
290     {5, 64}, {5, 64}, {5, 64}, {5, 64},
291     {5, 64}, {5, 64}, {5, 64}, {5, 64},
292   {4, 6}, {4, 6}, {4, 6}, {4, 6},		// 1110xxxxx
293     {4, 6}, {4, 6}, {4, 6}, {4, 6},
294     {4, 6}, {4, 6}, {4, 6}, {4, 6},
295     {4, 6}, {4, 6}, {4, 6}, {4, 6},
296     {4, 6}, {4, 6}, {4, 6}, {4, 6},
297     {4, 6}, {4, 6}, {4, 6}, {4, 6},
298     {4, 6}, {4, 6}, {4, 6}, {4, 6},
299     {4, 6}, {4, 6}, {4, 6}, {4, 6},
300   {4, 7}, {4, 7}, {4, 7}, {4, 7},		// 1111xxxxx
301     {4, 7}, {4, 7}, {4, 7}, {4, 7},
302     {4, 7}, {4, 7}, {4, 7}, {4, 7},
303     {4, 7}, {4, 7}, {4, 7}, {4, 7},
304     {4, 7}, {4, 7}, {4, 7}, {4, 7},
305     {4, 7}, {4, 7}, {4, 7}, {4, 7},
306     {4, 7}, {4, 7}, {4, 7}, {4, 7},
307     {4, 7}, {4, 7}, {4, 7}, {4, 7}
308 };
309 
310 //------------------------------------------------------------------------
311 // black run lengths
312 //------------------------------------------------------------------------
313 
314 // 10-13 bit codes (upper 6 bits are 0)
315 static const CCITTCode blackTab1[128] = {
316   {-1, -1}, {-1, -1},					// 000000000000x
317   {12, ccittEOL}, {12, ccittEOL},			// 000000000001x
318   {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1},		// 00000000001xx
319   {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1},		// 00000000010xx
320   {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1},		// 00000000011xx
321   {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1},		// 00000000100xx
322   {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1},		// 00000000101xx
323   {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1},		// 00000000110xx
324   {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1},		// 00000000111xx
325   {11, 1792}, {11, 1792}, {11, 1792}, {11, 1792},	// 00000001000xx
326   {12, 1984}, {12, 1984},				// 000000010010x
327   {12, 2048}, {12, 2048},				// 000000010011x
328   {12, 2112}, {12, 2112},				// 000000010100x
329   {12, 2176}, {12, 2176},				// 000000010101x
330   {12, 2240}, {12, 2240},				// 000000010110x
331   {12, 2304}, {12, 2304},				// 000000010111x
332   {11, 1856}, {11, 1856}, {11, 1856}, {11, 1856},	// 00000001100xx
333   {11, 1920}, {11, 1920}, {11, 1920}, {11, 1920},	// 00000001101xx
334   {12, 2368}, {12, 2368},				// 000000011100x
335   {12, 2432}, {12, 2432},				// 000000011101x
336   {12, 2496}, {12, 2496},				// 000000011110x
337   {12, 2560}, {12, 2560},				// 000000011111x
338   {10, 18}, {10, 18}, {10, 18}, {10, 18},		// 0000001000xxx
339     {10, 18}, {10, 18}, {10, 18}, {10, 18},
340   {12, 52}, {12, 52},					// 000000100100x
341   {13, 640},						// 0000001001010
342   {13, 704},						// 0000001001011
343   {13, 768},						// 0000001001100
344   {13, 832},						// 0000001001101
345   {12, 55}, {12, 55},					// 000000100111x
346   {12, 56}, {12, 56},					// 000000101000x
347   {13, 1280},						// 0000001010010
348   {13, 1344},						// 0000001010011
349   {13, 1408},						// 0000001010100
350   {13, 1472},						// 0000001010101
351   {12, 59}, {12, 59},					// 000000101011x
352   {12, 60}, {12, 60},					// 000000101100x
353   {13, 1536},						// 0000001011010
354   {13, 1600},						// 0000001011011
355   {11, 24}, {11, 24}, {11, 24}, {11, 24},		// 00000010111xx
356   {11, 25}, {11, 25}, {11, 25}, {11, 25},		// 00000011000xx
357   {13, 1664},						// 0000001100100
358   {13, 1728},						// 0000001100101
359   {12, 320}, {12, 320},					// 000000110011x
360   {12, 384}, {12, 384},					// 000000110100x
361   {12, 448}, {12, 448},					// 000000110101x
362   {13, 512},						// 0000001101100
363   {13, 576},						// 0000001101101
364   {12, 53}, {12, 53},					// 000000110111x
365   {12, 54}, {12, 54},					// 000000111000x
366   {13, 896},						// 0000001110010
367   {13, 960},						// 0000001110011
368   {13, 1024},						// 0000001110100
369   {13, 1088},						// 0000001110101
370   {13, 1152},						// 0000001110110
371   {13, 1216},						// 0000001110111
372   {10, 64}, {10, 64}, {10, 64}, {10, 64},		// 0000001111xxx
373     {10, 64}, {10, 64}, {10, 64}, {10, 64}
374 };
375 
376 // 7-12 bit codes (upper 4 bits are 0)
377 static const CCITTCode blackTab2[192] = {
378   {8, 13}, {8, 13}, {8, 13}, {8, 13},			// 00000100xxxx
379     {8, 13}, {8, 13}, {8, 13}, {8, 13},
380     {8, 13}, {8, 13}, {8, 13}, {8, 13},
381     {8, 13}, {8, 13}, {8, 13}, {8, 13},
382   {11, 23}, {11, 23},					// 00000101000x
383   {12, 50},						// 000001010010
384   {12, 51},						// 000001010011
385   {12, 44},						// 000001010100
386   {12, 45},						// 000001010101
387   {12, 46},						// 000001010110
388   {12, 47},						// 000001010111
389   {12, 57},						// 000001011000
390   {12, 58},						// 000001011001
391   {12, 61},						// 000001011010
392   {12, 256},						// 000001011011
393   {10, 16}, {10, 16}, {10, 16}, {10, 16},		// 0000010111xx
394   {10, 17}, {10, 17}, {10, 17}, {10, 17},		// 0000011000xx
395   {12, 48},						// 000001100100
396   {12, 49},						// 000001100101
397   {12, 62},						// 000001100110
398   {12, 63},						// 000001100111
399   {12, 30},						// 000001101000
400   {12, 31},						// 000001101001
401   {12, 32},						// 000001101010
402   {12, 33},						// 000001101011
403   {12, 40},						// 000001101100
404   {12, 41},						// 000001101101
405   {11, 22}, {11, 22},					// 00000110111x
406   {8, 14}, {8, 14}, {8, 14}, {8, 14},			// 00000111xxxx
407     {8, 14}, {8, 14}, {8, 14}, {8, 14},
408     {8, 14}, {8, 14}, {8, 14}, {8, 14},
409     {8, 14}, {8, 14}, {8, 14}, {8, 14},
410   {7, 10}, {7, 10}, {7, 10}, {7, 10},			// 0000100xxxxx
411     {7, 10}, {7, 10}, {7, 10}, {7, 10},
412     {7, 10}, {7, 10}, {7, 10}, {7, 10},
413     {7, 10}, {7, 10}, {7, 10}, {7, 10},
414     {7, 10}, {7, 10}, {7, 10}, {7, 10},
415     {7, 10}, {7, 10}, {7, 10}, {7, 10},
416     {7, 10}, {7, 10}, {7, 10}, {7, 10},
417     {7, 10}, {7, 10}, {7, 10}, {7, 10},
418   {7, 11}, {7, 11}, {7, 11}, {7, 11},			// 0000101xxxxx
419     {7, 11}, {7, 11}, {7, 11}, {7, 11},
420     {7, 11}, {7, 11}, {7, 11}, {7, 11},
421     {7, 11}, {7, 11}, {7, 11}, {7, 11},
422     {7, 11}, {7, 11}, {7, 11}, {7, 11},
423     {7, 11}, {7, 11}, {7, 11}, {7, 11},
424     {7, 11}, {7, 11}, {7, 11}, {7, 11},
425     {7, 11}, {7, 11}, {7, 11}, {7, 11},
426   {9, 15}, {9, 15}, {9, 15}, {9, 15},			// 000011000xxx
427     {9, 15}, {9, 15}, {9, 15}, {9, 15},
428   {12, 128},						// 000011001000
429   {12, 192},						// 000011001001
430   {12, 26},						// 000011001010
431   {12, 27},						// 000011001011
432   {12, 28},						// 000011001100
433   {12, 29},						// 000011001101
434   {11, 19}, {11, 19},					// 00001100111x
435   {11, 20}, {11, 20},					// 00001101000x
436   {12, 34},						// 000011010010
437   {12, 35},						// 000011010011
438   {12, 36},						// 000011010100
439   {12, 37},						// 000011010101
440   {12, 38},						// 000011010110
441   {12, 39},						// 000011010111
442   {11, 21}, {11, 21},					// 00001101100x
443   {12, 42},						// 000011011010
444   {12, 43},						// 000011011011
445   {10, 0}, {10, 0}, {10, 0}, {10, 0},			// 0000110111xx
446   {7, 12}, {7, 12}, {7, 12}, {7, 12},			// 0000111xxxxx
447     {7, 12}, {7, 12}, {7, 12}, {7, 12},
448     {7, 12}, {7, 12}, {7, 12}, {7, 12},
449     {7, 12}, {7, 12}, {7, 12}, {7, 12},
450     {7, 12}, {7, 12}, {7, 12}, {7, 12},
451     {7, 12}, {7, 12}, {7, 12}, {7, 12},
452     {7, 12}, {7, 12}, {7, 12}, {7, 12},
453     {7, 12}, {7, 12}, {7, 12}, {7, 12}
454 };
455 
456 // 2-6 bit codes
457 static const CCITTCode blackTab3[64] = {
458   {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1},		// 0000xx
459   {6, 9},						// 000100
460   {6, 8},						// 000101
461   {5, 7}, {5, 7},					// 00011x
462   {4, 6}, {4, 6}, {4, 6}, {4, 6},			// 0010xx
463   {4, 5}, {4, 5}, {4, 5}, {4, 5},			// 0011xx
464   {3, 1}, {3, 1}, {3, 1}, {3, 1},			// 010xxx
465     {3, 1}, {3, 1}, {3, 1}, {3, 1},
466   {3, 4}, {3, 4}, {3, 4}, {3, 4},			// 011xxx
467     {3, 4}, {3, 4}, {3, 4}, {3, 4},
468   {2, 3}, {2, 3}, {2, 3}, {2, 3},			// 10xxxx
469     {2, 3}, {2, 3}, {2, 3}, {2, 3},
470     {2, 3}, {2, 3}, {2, 3}, {2, 3},
471     {2, 3}, {2, 3}, {2, 3}, {2, 3},
472   {2, 2}, {2, 2}, {2, 2}, {2, 2},			// 11xxxx
473     {2, 2}, {2, 2}, {2, 2}, {2, 2},
474     {2, 2}, {2, 2}, {2, 2}, {2, 2},
475     {2, 2}, {2, 2}, {2, 2}, {2, 2}
476 };
477 
478 #endif
479