1 //========================================================================
5 // Tables for CCITT Fax decoding.
7 // Copyright 1996 Derek B. Noonburg
9 //========================================================================
18 //------------------------------------------------------------------------
20 //------------------------------------------------------------------------
25 #define twoDimVertR1 3
26 #define twoDimVertL1 4
27 #define twoDimVertR2 5
28 #define twoDimVertL2 6
29 #define twoDimVertR3 7
30 #define twoDimVertL3 8
33 static CCITTCode twoDimTab1[16] = {
35 {4, twoDimPass}, // 0001
36 {3, twoDimHoriz}, {3, twoDimHoriz}, // 001x
37 {3, twoDimVertL1}, {3, twoDimVertL1}, // 010x
38 {3, twoDimVertR1}, {3, twoDimVertR1}, // 011x
39 {1, twoDimVert0}, {1, twoDimVert0}, // 1xxx
40 {1, twoDimVert0}, {1, twoDimVert0},
41 {1, twoDimVert0}, {1, twoDimVert0},
42 {1, twoDimVert0}, {1, twoDimVert0}
45 //------------------------------------------------------------------------
47 //------------------------------------------------------------------------
49 // 11-12 bit codes (upper 7 bits are 0)
50 static CCITTCode whiteTab1[32] = {
52 {12, ccittEOL}, // 00001
53 {-1, -1}, {-1, -1}, // 0001x
54 {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 001xx
55 {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 010xx
56 {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 011xx
57 {11, 1792}, {11, 1792}, // 1000x
64 {11, 1856}, {11, 1856}, // 1100x
65 {11, 1920}, {11, 1920}, // 1101x
73 static CCITTCode whiteTab2[512] = {
74 {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 0000000xx
75 {8, 29}, {8, 29}, // 00000010x
76 {8, 30}, {8, 30}, // 00000011x
77 {8, 45}, {8, 45}, // 00000100x
78 {8, 46}, {8, 46}, // 00000101x
79 {7, 22}, {7, 22}, {7, 22}, {7, 22}, // 0000011xx
80 {7, 23}, {7, 23}, {7, 23}, {7, 23}, // 0000100xx
81 {8, 47}, {8, 47}, // 00001010x
82 {8, 48}, {8, 48}, // 00001011x
83 {6, 13}, {6, 13}, {6, 13}, {6, 13}, // 000011xxx
84 {6, 13}, {6, 13}, {6, 13}, {6, 13},
85 {7, 20}, {7, 20}, {7, 20}, {7, 20}, // 0001000xx
86 {8, 33}, {8, 33}, // 00010010x
87 {8, 34}, {8, 34}, // 00010011x
88 {8, 35}, {8, 35}, // 00010100x
89 {8, 36}, {8, 36}, // 00010101x
90 {8, 37}, {8, 37}, // 00010110x
91 {8, 38}, {8, 38}, // 00010111x
92 {7, 19}, {7, 19}, {7, 19}, {7, 19}, // 0001100xx
93 {8, 31}, {8, 31}, // 00011010x
94 {8, 32}, {8, 32}, // 00011011x
95 {6, 1}, {6, 1}, {6, 1}, {6, 1}, // 000111xxx
96 {6, 1}, {6, 1}, {6, 1}, {6, 1},
97 {6, 12}, {6, 12}, {6, 12}, {6, 12}, // 001000xxx
98 {6, 12}, {6, 12}, {6, 12}, {6, 12},
99 {8, 53}, {8, 53}, // 00100100x
100 {8, 54}, {8, 54}, // 00100101x
101 {7, 26}, {7, 26}, {7, 26}, {7, 26}, // 0010011xx
102 {8, 39}, {8, 39}, // 00101000x
103 {8, 40}, {8, 40}, // 00101001x
104 {8, 41}, {8, 41}, // 00101010x
105 {8, 42}, {8, 42}, // 00101011x
106 {8, 43}, {8, 43}, // 00101100x
107 {8, 44}, {8, 44}, // 00101101x
108 {7, 21}, {7, 21}, {7, 21}, {7, 21}, // 0010111xx
109 {7, 28}, {7, 28}, {7, 28}, {7, 28}, // 0011000xx
110 {8, 61}, {8, 61}, // 00110010x
111 {8, 62}, {8, 62}, // 00110011x
112 {8, 63}, {8, 63}, // 00110100x
113 {8, 0}, {8, 0}, // 00110101x
114 {8, 320}, {8, 320}, // 00110110x
115 {8, 384}, {8, 384}, // 00110111x
116 {5, 10}, {5, 10}, {5, 10}, {5, 10}, // 00111xxxx
117 {5, 10}, {5, 10}, {5, 10}, {5, 10},
118 {5, 10}, {5, 10}, {5, 10}, {5, 10},
119 {5, 10}, {5, 10}, {5, 10}, {5, 10},
120 {5, 11}, {5, 11}, {5, 11}, {5, 11}, // 01000xxxx
121 {5, 11}, {5, 11}, {5, 11}, {5, 11},
122 {5, 11}, {5, 11}, {5, 11}, {5, 11},
123 {5, 11}, {5, 11}, {5, 11}, {5, 11},
124 {7, 27}, {7, 27}, {7, 27}, {7, 27}, // 0100100xx
125 {8, 59}, {8, 59}, // 01001010x
126 {8, 60}, {8, 60}, // 01001011x
127 {9, 1472}, // 010011000
128 {9, 1536}, // 010011001
129 {9, 1600}, // 010011010
130 {9, 1728}, // 010011011
131 {7, 18}, {7, 18}, {7, 18}, {7, 18}, // 0100111xx
132 {7, 24}, {7, 24}, {7, 24}, {7, 24}, // 0101000xx
133 {8, 49}, {8, 49}, // 01010010x
134 {8, 50}, {8, 50}, // 01010011x
135 {8, 51}, {8, 51}, // 01010100x
136 {8, 52}, {8, 52}, // 01010101x
137 {7, 25}, {7, 25}, {7, 25}, {7, 25}, // 0101011xx
138 {8, 55}, {8, 55}, // 01011000x
139 {8, 56}, {8, 56}, // 01011001x
140 {8, 57}, {8, 57}, // 01011010x
141 {8, 58}, {8, 58}, // 01011011x
142 {6, 192}, {6, 192}, {6, 192}, {6, 192}, // 010111xxx
143 {6, 192}, {6, 192}, {6, 192}, {6, 192},
144 {6, 1664}, {6, 1664}, {6, 1664}, {6, 1664}, // 011000xxx
145 {6, 1664}, {6, 1664}, {6, 1664}, {6, 1664},
146 {8, 448}, {8, 448}, // 01100100x
147 {8, 512}, {8, 512}, // 01100101x
148 {9, 704}, // 011001100
149 {9, 768}, // 011001101
150 {8, 640}, {8, 640}, // 01100111x
151 {8, 576}, {8, 576}, // 01101000x
152 {9, 832}, // 011010010
153 {9, 896}, // 011010011
154 {9, 960}, // 011010100
155 {9, 1024}, // 011010101
156 {9, 1088}, // 011010110
157 {9, 1152}, // 011010111
158 {9, 1216}, // 011011000
159 {9, 1280}, // 011011001
160 {9, 1344}, // 011011010
161 {9, 1408}, // 011011011
162 {7, 256}, {7, 256}, {7, 256}, {7, 256}, // 0110111xx
163 {4, 2}, {4, 2}, {4, 2}, {4, 2}, // 0111xxxxx
164 {4, 2}, {4, 2}, {4, 2}, {4, 2},
165 {4, 2}, {4, 2}, {4, 2}, {4, 2},
166 {4, 2}, {4, 2}, {4, 2}, {4, 2},
167 {4, 2}, {4, 2}, {4, 2}, {4, 2},
168 {4, 2}, {4, 2}, {4, 2}, {4, 2},
169 {4, 2}, {4, 2}, {4, 2}, {4, 2},
170 {4, 2}, {4, 2}, {4, 2}, {4, 2},
171 {4, 3}, {4, 3}, {4, 3}, {4, 3}, // 1000xxxxx
172 {4, 3}, {4, 3}, {4, 3}, {4, 3},
173 {4, 3}, {4, 3}, {4, 3}, {4, 3},
174 {4, 3}, {4, 3}, {4, 3}, {4, 3},
175 {4, 3}, {4, 3}, {4, 3}, {4, 3},
176 {4, 3}, {4, 3}, {4, 3}, {4, 3},
177 {4, 3}, {4, 3}, {4, 3}, {4, 3},
178 {4, 3}, {4, 3}, {4, 3}, {4, 3},
179 {5, 128}, {5, 128}, {5, 128}, {5, 128}, // 10010xxxx
180 {5, 128}, {5, 128}, {5, 128}, {5, 128},
181 {5, 128}, {5, 128}, {5, 128}, {5, 128},
182 {5, 128}, {5, 128}, {5, 128}, {5, 128},
183 {5, 8}, {5, 8}, {5, 8}, {5, 8}, // 10011xxxx
184 {5, 8}, {5, 8}, {5, 8}, {5, 8},
185 {5, 8}, {5, 8}, {5, 8}, {5, 8},
186 {5, 8}, {5, 8}, {5, 8}, {5, 8},
187 {5, 9}, {5, 9}, {5, 9}, {5, 9}, // 10100xxxx
188 {5, 9}, {5, 9}, {5, 9}, {5, 9},
189 {5, 9}, {5, 9}, {5, 9}, {5, 9},
190 {5, 9}, {5, 9}, {5, 9}, {5, 9},
191 {6, 16}, {6, 16}, {6, 16}, {6, 16}, // 101010xxx
192 {6, 16}, {6, 16}, {6, 16}, {6, 16},
193 {6, 17}, {6, 17}, {6, 17}, {6, 17}, // 101011xxx
194 {6, 17}, {6, 17}, {6, 17}, {6, 17},
195 {4, 4}, {4, 4}, {4, 4}, {4, 4}, // 1011xxxxx
196 {4, 4}, {4, 4}, {4, 4}, {4, 4},
197 {4, 4}, {4, 4}, {4, 4}, {4, 4},
198 {4, 4}, {4, 4}, {4, 4}, {4, 4},
199 {4, 4}, {4, 4}, {4, 4}, {4, 4},
200 {4, 4}, {4, 4}, {4, 4}, {4, 4},
201 {4, 4}, {4, 4}, {4, 4}, {4, 4},
202 {4, 4}, {4, 4}, {4, 4}, {4, 4},
203 {4, 5}, {4, 5}, {4, 5}, {4, 5}, // 1100xxxxx
204 {4, 5}, {4, 5}, {4, 5}, {4, 5},
205 {4, 5}, {4, 5}, {4, 5}, {4, 5},
206 {4, 5}, {4, 5}, {4, 5}, {4, 5},
207 {4, 5}, {4, 5}, {4, 5}, {4, 5},
208 {4, 5}, {4, 5}, {4, 5}, {4, 5},
209 {4, 5}, {4, 5}, {4, 5}, {4, 5},
210 {4, 5}, {4, 5}, {4, 5}, {4, 5},
211 {6, 14}, {6, 14}, {6, 14}, {6, 14}, // 110100xxx
212 {6, 14}, {6, 14}, {6, 14}, {6, 14},
213 {6, 15}, {6, 15}, {6, 15}, {6, 15}, // 110101xxx
214 {6, 15}, {6, 15}, {6, 15}, {6, 15},
215 {5, 64}, {5, 64}, {5, 64}, {5, 64}, // 11011xxxx
216 {5, 64}, {5, 64}, {5, 64}, {5, 64},
217 {5, 64}, {5, 64}, {5, 64}, {5, 64},
218 {5, 64}, {5, 64}, {5, 64}, {5, 64},
219 {4, 6}, {4, 6}, {4, 6}, {4, 6}, // 1110xxxxx
220 {4, 6}, {4, 6}, {4, 6}, {4, 6},
221 {4, 6}, {4, 6}, {4, 6}, {4, 6},
222 {4, 6}, {4, 6}, {4, 6}, {4, 6},
223 {4, 6}, {4, 6}, {4, 6}, {4, 6},
224 {4, 6}, {4, 6}, {4, 6}, {4, 6},
225 {4, 6}, {4, 6}, {4, 6}, {4, 6},
226 {4, 6}, {4, 6}, {4, 6}, {4, 6},
227 {4, 7}, {4, 7}, {4, 7}, {4, 7}, // 1111xxxxx
228 {4, 7}, {4, 7}, {4, 7}, {4, 7},
229 {4, 7}, {4, 7}, {4, 7}, {4, 7},
230 {4, 7}, {4, 7}, {4, 7}, {4, 7},
231 {4, 7}, {4, 7}, {4, 7}, {4, 7},
232 {4, 7}, {4, 7}, {4, 7}, {4, 7},
233 {4, 7}, {4, 7}, {4, 7}, {4, 7},
234 {4, 7}, {4, 7}, {4, 7}, {4, 7}
237 //------------------------------------------------------------------------
239 //------------------------------------------------------------------------
241 // 10-13 bit codes (upper 6 bits are 0)
242 static CCITTCode blackTab1[128] = {
243 {-1, -1}, {-1, -1}, // 000000000000x
244 {12, ccittEOL}, {12, ccittEOL}, // 000000000001x
245 {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 00000000001xx
246 {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 00000000010xx
247 {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 00000000011xx
248 {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 00000000100xx
249 {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 00000000101xx
250 {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 00000000110xx
251 {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 00000000111xx
252 {11, 1792}, {11, 1792}, {11, 1792}, {11, 1792}, // 00000001000xx
253 {12, 1984}, {12, 1984}, // 000000010010x
254 {12, 2048}, {12, 2048}, // 000000010011x
255 {12, 2112}, {12, 2112}, // 000000010100x
256 {12, 2176}, {12, 2176}, // 000000010101x
257 {12, 2240}, {12, 2240}, // 000000010110x
258 {12, 2304}, {12, 2304}, // 000000010111x
259 {11, 1856}, {11, 1856}, {11, 1856}, {11, 1856}, // 00000001100xx
260 {11, 1920}, {11, 1920}, {11, 1920}, {11, 1920}, // 00000001101xx
261 {12, 2368}, {12, 2368}, // 000000011100x
262 {12, 2432}, {12, 2432}, // 000000011101x
263 {12, 2496}, {12, 2496}, // 000000011110x
264 {12, 2560}, {12, 2560}, // 000000011111x
265 {10, 18}, {10, 18}, {10, 18}, {10, 18}, // 0000001000xxx
266 {10, 18}, {10, 18}, {10, 18}, {10, 18},
267 {12, 52}, {12, 52}, // 000000100100x
268 {13, 640}, // 0000001001010
269 {13, 704}, // 0000001001011
270 {13, 768}, // 0000001001100
271 {13, 832}, // 0000001001101
272 {12, 55}, {12, 55}, // 000000100111x
273 {12, 56}, {12, 56}, // 000000101000x
274 {13, 1280}, // 0000001010010
275 {13, 1344}, // 0000001010011
276 {13, 1408}, // 0000001010100
277 {13, 1472}, // 0000001010101
278 {12, 59}, {12, 59}, // 000000101011x
279 {12, 60}, {12, 60}, // 000000101100x
280 {13, 1536}, // 0000001011010
281 {13, 1600}, // 0000001011011
282 {11, 24}, {11, 24}, {11, 24}, {11, 24}, // 00000010111xx
283 {11, 25}, {11, 25}, {11, 25}, {11, 25}, // 00000011000xx
284 {13, 1664}, // 0000001100100
285 {13, 1728}, // 0000001100101
286 {12, 320}, {12, 320}, // 000000110011x
287 {12, 384}, {12, 384}, // 000000110100x
288 {12, 448}, {12, 448}, // 000000110101x
289 {13, 512}, // 0000001101100
290 {13, 576}, // 0000001101101
291 {12, 53}, {12, 53}, // 000000110111x
292 {12, 54}, {12, 54}, // 000000111000x
293 {13, 896}, // 0000001110010
294 {13, 960}, // 0000001110011
295 {13, 1024}, // 0000001110100
296 {13, 1088}, // 0000001110101
297 {13, 1152}, // 0000001110110
298 {13, 1216}, // 0000001110111
299 {10, 64}, {10, 64}, {10, 64}, {10, 64}, // 0000001111xxx
300 {10, 64}, {10, 64}, {10, 64}, {10, 64}
303 // 7-12 bit codes (upper 4 bits are 0)
304 static CCITTCode blackTab2[192] = {
305 {8, 13}, {8, 13}, {8, 13}, {8, 13}, // 00000100xxxx
306 {8, 13}, {8, 13}, {8, 13}, {8, 13},
307 {8, 13}, {8, 13}, {8, 13}, {8, 13},
308 {8, 13}, {8, 13}, {8, 13}, {8, 13},
309 {11, 23}, {11, 23}, // 00000101000x
310 {12, 50}, // 000001010010
311 {12, 51}, // 000001010011
312 {12, 44}, // 000001010100
313 {12, 45}, // 000001010101
314 {12, 46}, // 000001010110
315 {12, 47}, // 000001010111
316 {12, 57}, // 000001011000
317 {12, 58}, // 000001011001
318 {12, 61}, // 000001011010
319 {12, 256}, // 000001011011
320 {10, 16}, {10, 16}, {10, 16}, {10, 16}, // 0000010111xx
321 {10, 17}, {10, 17}, {10, 17}, {10, 17}, // 0000011000xx
322 {12, 48}, // 000001100100
323 {12, 49}, // 000001100101
324 {12, 62}, // 000001100110
325 {12, 63}, // 000001100111
326 {12, 30}, // 000001101000
327 {12, 31}, // 000001101001
328 {12, 32}, // 000001101010
329 {12, 33}, // 000001101011
330 {12, 40}, // 000001101100
331 {12, 41}, // 000001101101
332 {11, 22}, {11, 22}, // 00000110111x
333 {8, 14}, {8, 14}, {8, 14}, {8, 14}, // 00000111xxxx
334 {8, 14}, {8, 14}, {8, 14}, {8, 14},
335 {8, 14}, {8, 14}, {8, 14}, {8, 14},
336 {8, 14}, {8, 14}, {8, 14}, {8, 14},
337 {7, 10}, {7, 10}, {7, 10}, {7, 10}, // 0000100xxxxx
338 {7, 10}, {7, 10}, {7, 10}, {7, 10},
339 {7, 10}, {7, 10}, {7, 10}, {7, 10},
340 {7, 10}, {7, 10}, {7, 10}, {7, 10},
341 {7, 10}, {7, 10}, {7, 10}, {7, 10},
342 {7, 10}, {7, 10}, {7, 10}, {7, 10},
343 {7, 10}, {7, 10}, {7, 10}, {7, 10},
344 {7, 10}, {7, 10}, {7, 10}, {7, 10},
345 {7, 11}, {7, 11}, {7, 11}, {7, 11}, // 0000101xxxxx
346 {7, 11}, {7, 11}, {7, 11}, {7, 11},
347 {7, 11}, {7, 11}, {7, 11}, {7, 11},
348 {7, 11}, {7, 11}, {7, 11}, {7, 11},
349 {7, 11}, {7, 11}, {7, 11}, {7, 11},
350 {7, 11}, {7, 11}, {7, 11}, {7, 11},
351 {7, 11}, {7, 11}, {7, 11}, {7, 11},
352 {7, 11}, {7, 11}, {7, 11}, {7, 11},
353 {9, 15}, {9, 15}, {9, 15}, {9, 15}, // 000011000xxx
354 {9, 15}, {9, 15}, {9, 15}, {9, 15},
355 {12, 128}, // 000011001000
356 {12, 192}, // 000011001001
357 {12, 26}, // 000011001010
358 {12, 27}, // 000011001011
359 {12, 28}, // 000011001100
360 {12, 29}, // 000011001101
361 {11, 19}, {11, 19}, // 00001100111x
362 {11, 20}, {11, 20}, // 00001101000x
363 {12, 34}, // 000011010010
364 {12, 35}, // 000011010011
365 {12, 36}, // 000011010100
366 {12, 37}, // 000011010101
367 {12, 38}, // 000011010110
368 {12, 39}, // 000011010111
369 {11, 21}, {11, 21}, // 00001101100x
370 {12, 42}, // 000011011010
371 {12, 43}, // 000011011011
372 {10, 0}, {10, 0}, {10, 0}, {10, 0}, // 0000110111xx
373 {7, 12}, {7, 12}, {7, 12}, {7, 12}, // 0000111xxxxx
374 {7, 12}, {7, 12}, {7, 12}, {7, 12},
375 {7, 12}, {7, 12}, {7, 12}, {7, 12},
376 {7, 12}, {7, 12}, {7, 12}, {7, 12},
377 {7, 12}, {7, 12}, {7, 12}, {7, 12},
378 {7, 12}, {7, 12}, {7, 12}, {7, 12},
379 {7, 12}, {7, 12}, {7, 12}, {7, 12},
380 {7, 12}, {7, 12}, {7, 12}, {7, 12}
384 static CCITTCode blackTab3[64] = {
385 {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 0000xx
388 {5, 7}, {5, 7}, // 00011x
389 {4, 6}, {4, 6}, {4, 6}, {4, 6}, // 0010xx
390 {4, 5}, {4, 5}, {4, 5}, {4, 5}, // 0011xx
391 {3, 1}, {3, 1}, {3, 1}, {3, 1}, // 010xxx
392 {3, 1}, {3, 1}, {3, 1}, {3, 1},
393 {3, 4}, {3, 4}, {3, 4}, {3, 4}, // 011xxx
394 {3, 4}, {3, 4}, {3, 4}, {3, 4},
395 {2, 3}, {2, 3}, {2, 3}, {2, 3}, // 10xxxx
396 {2, 3}, {2, 3}, {2, 3}, {2, 3},
397 {2, 3}, {2, 3}, {2, 3}, {2, 3},
398 {2, 3}, {2, 3}, {2, 3}, {2, 3},
399 {2, 2}, {2, 2}, {2, 2}, {2, 2}, // 11xxxx
400 {2, 2}, {2, 2}, {2, 2}, {2, 2},
401 {2, 2}, {2, 2}, {2, 2}, {2, 2},
402 {2, 2}, {2, 2}, {2, 2}, {2, 2}