/* $Id: t4.h,v 1.3 2010-03-10 18:56:48 bfriesen Exp $ */12/*3* Copyright (c) 1988-1997 Sam Leffler4* Copyright (c) 1991-1997 Silicon Graphics, Inc.5*6* Permission to use, copy, modify, distribute, and sell this software and7* its documentation for any purpose is hereby granted without fee, provided8* that (i) the above copyright notices and this permission notice appear in9* all copies of the software and related documentation, and (ii) the names of10* Sam Leffler and Silicon Graphics may not be used in any advertising or11* publicity relating to the software without the specific, prior written12* permission of Sam Leffler and Silicon Graphics.13*14* THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,15* EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY16* WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.17*18* IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR19* ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,20* OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,21* WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF22* LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE23* OF THIS SOFTWARE.24*/2526#ifndef _T4_27#define _T4_28/*29* CCITT T.4 1D Huffman runlength codes and30* related definitions. Given the small sizes31* of these tables it does not seem32* worthwhile to make code & length 8 bits.33*/34typedef struct tableentry {35unsigned short length; /* bit length of g3 code */36unsigned short code; /* g3 code */37short runlen; /* run length in bits */38} tableentry;3940#define EOL 0x001 /* EOL code value - 0000 0000 0000 1 */4142/* status values returned instead of a run length */43#define G3CODE_EOL -1 /* NB: ACT_EOL - ACT_WRUNT */44#define G3CODE_INVALID -2 /* NB: ACT_INVALID - ACT_WRUNT */45#define G3CODE_EOF -3 /* end of input data */46#define G3CODE_INCOMP -4 /* incomplete run code */4748/*49* Note that these tables are ordered such that the50* index into the table is known to be either the51* run length, or (run length / 64) + a fixed offset.52*53* NB: The G3CODE_INVALID entries are only used54* during state generation (see mkg3states.c).55*/56#ifdef G3CODES57const tableentry TIFFFaxWhiteCodes[] = {58{ 8, 0x35, 0 }, /* 0011 0101 */59{ 6, 0x7, 1 }, /* 0001 11 */60{ 4, 0x7, 2 }, /* 0111 */61{ 4, 0x8, 3 }, /* 1000 */62{ 4, 0xB, 4 }, /* 1011 */63{ 4, 0xC, 5 }, /* 1100 */64{ 4, 0xE, 6 }, /* 1110 */65{ 4, 0xF, 7 }, /* 1111 */66{ 5, 0x13, 8 }, /* 1001 1 */67{ 5, 0x14, 9 }, /* 1010 0 */68{ 5, 0x7, 10 }, /* 0011 1 */69{ 5, 0x8, 11 }, /* 0100 0 */70{ 6, 0x8, 12 }, /* 0010 00 */71{ 6, 0x3, 13 }, /* 0000 11 */72{ 6, 0x34, 14 }, /* 1101 00 */73{ 6, 0x35, 15 }, /* 1101 01 */74{ 6, 0x2A, 16 }, /* 1010 10 */75{ 6, 0x2B, 17 }, /* 1010 11 */76{ 7, 0x27, 18 }, /* 0100 111 */77{ 7, 0xC, 19 }, /* 0001 100 */78{ 7, 0x8, 20 }, /* 0001 000 */79{ 7, 0x17, 21 }, /* 0010 111 */80{ 7, 0x3, 22 }, /* 0000 011 */81{ 7, 0x4, 23 }, /* 0000 100 */82{ 7, 0x28, 24 }, /* 0101 000 */83{ 7, 0x2B, 25 }, /* 0101 011 */84{ 7, 0x13, 26 }, /* 0010 011 */85{ 7, 0x24, 27 }, /* 0100 100 */86{ 7, 0x18, 28 }, /* 0011 000 */87{ 8, 0x2, 29 }, /* 0000 0010 */88{ 8, 0x3, 30 }, /* 0000 0011 */89{ 8, 0x1A, 31 }, /* 0001 1010 */90{ 8, 0x1B, 32 }, /* 0001 1011 */91{ 8, 0x12, 33 }, /* 0001 0010 */92{ 8, 0x13, 34 }, /* 0001 0011 */93{ 8, 0x14, 35 }, /* 0001 0100 */94{ 8, 0x15, 36 }, /* 0001 0101 */95{ 8, 0x16, 37 }, /* 0001 0110 */96{ 8, 0x17, 38 }, /* 0001 0111 */97{ 8, 0x28, 39 }, /* 0010 1000 */98{ 8, 0x29, 40 }, /* 0010 1001 */99{ 8, 0x2A, 41 }, /* 0010 1010 */100{ 8, 0x2B, 42 }, /* 0010 1011 */101{ 8, 0x2C, 43 }, /* 0010 1100 */102{ 8, 0x2D, 44 }, /* 0010 1101 */103{ 8, 0x4, 45 }, /* 0000 0100 */104{ 8, 0x5, 46 }, /* 0000 0101 */105{ 8, 0xA, 47 }, /* 0000 1010 */106{ 8, 0xB, 48 }, /* 0000 1011 */107{ 8, 0x52, 49 }, /* 0101 0010 */108{ 8, 0x53, 50 }, /* 0101 0011 */109{ 8, 0x54, 51 }, /* 0101 0100 */110{ 8, 0x55, 52 }, /* 0101 0101 */111{ 8, 0x24, 53 }, /* 0010 0100 */112{ 8, 0x25, 54 }, /* 0010 0101 */113{ 8, 0x58, 55 }, /* 0101 1000 */114{ 8, 0x59, 56 }, /* 0101 1001 */115{ 8, 0x5A, 57 }, /* 0101 1010 */116{ 8, 0x5B, 58 }, /* 0101 1011 */117{ 8, 0x4A, 59 }, /* 0100 1010 */118{ 8, 0x4B, 60 }, /* 0100 1011 */119{ 8, 0x32, 61 }, /* 0011 0010 */120{ 8, 0x33, 62 }, /* 0011 0011 */121{ 8, 0x34, 63 }, /* 0011 0100 */122{ 5, 0x1B, 64 }, /* 1101 1 */123{ 5, 0x12, 128 }, /* 1001 0 */124{ 6, 0x17, 192 }, /* 0101 11 */125{ 7, 0x37, 256 }, /* 0110 111 */126{ 8, 0x36, 320 }, /* 0011 0110 */127{ 8, 0x37, 384 }, /* 0011 0111 */128{ 8, 0x64, 448 }, /* 0110 0100 */129{ 8, 0x65, 512 }, /* 0110 0101 */130{ 8, 0x68, 576 }, /* 0110 1000 */131{ 8, 0x67, 640 }, /* 0110 0111 */132{ 9, 0xCC, 704 }, /* 0110 0110 0 */133{ 9, 0xCD, 768 }, /* 0110 0110 1 */134{ 9, 0xD2, 832 }, /* 0110 1001 0 */135{ 9, 0xD3, 896 }, /* 0110 1001 1 */136{ 9, 0xD4, 960 }, /* 0110 1010 0 */137{ 9, 0xD5, 1024 }, /* 0110 1010 1 */138{ 9, 0xD6, 1088 }, /* 0110 1011 0 */139{ 9, 0xD7, 1152 }, /* 0110 1011 1 */140{ 9, 0xD8, 1216 }, /* 0110 1100 0 */141{ 9, 0xD9, 1280 }, /* 0110 1100 1 */142{ 9, 0xDA, 1344 }, /* 0110 1101 0 */143{ 9, 0xDB, 1408 }, /* 0110 1101 1 */144{ 9, 0x98, 1472 }, /* 0100 1100 0 */145{ 9, 0x99, 1536 }, /* 0100 1100 1 */146{ 9, 0x9A, 1600 }, /* 0100 1101 0 */147{ 6, 0x18, 1664 }, /* 0110 00 */148{ 9, 0x9B, 1728 }, /* 0100 1101 1 */149{ 11, 0x8, 1792 }, /* 0000 0001 000 */150{ 11, 0xC, 1856 }, /* 0000 0001 100 */151{ 11, 0xD, 1920 }, /* 0000 0001 101 */152{ 12, 0x12, 1984 }, /* 0000 0001 0010 */153{ 12, 0x13, 2048 }, /* 0000 0001 0011 */154{ 12, 0x14, 2112 }, /* 0000 0001 0100 */155{ 12, 0x15, 2176 }, /* 0000 0001 0101 */156{ 12, 0x16, 2240 }, /* 0000 0001 0110 */157{ 12, 0x17, 2304 }, /* 0000 0001 0111 */158{ 12, 0x1C, 2368 }, /* 0000 0001 1100 */159{ 12, 0x1D, 2432 }, /* 0000 0001 1101 */160{ 12, 0x1E, 2496 }, /* 0000 0001 1110 */161{ 12, 0x1F, 2560 }, /* 0000 0001 1111 */162{ 12, 0x1, G3CODE_EOL }, /* 0000 0000 0001 */163{ 9, 0x1, G3CODE_INVALID }, /* 0000 0000 1 */164{ 10, 0x1, G3CODE_INVALID }, /* 0000 0000 01 */165{ 11, 0x1, G3CODE_INVALID }, /* 0000 0000 001 */166{ 12, 0x0, G3CODE_INVALID }, /* 0000 0000 0000 */167};168169const tableentry TIFFFaxBlackCodes[] = {170{ 10, 0x37, 0 }, /* 0000 1101 11 */171{ 3, 0x2, 1 }, /* 010 */172{ 2, 0x3, 2 }, /* 11 */173{ 2, 0x2, 3 }, /* 10 */174{ 3, 0x3, 4 }, /* 011 */175{ 4, 0x3, 5 }, /* 0011 */176{ 4, 0x2, 6 }, /* 0010 */177{ 5, 0x3, 7 }, /* 0001 1 */178{ 6, 0x5, 8 }, /* 0001 01 */179{ 6, 0x4, 9 }, /* 0001 00 */180{ 7, 0x4, 10 }, /* 0000 100 */181{ 7, 0x5, 11 }, /* 0000 101 */182{ 7, 0x7, 12 }, /* 0000 111 */183{ 8, 0x4, 13 }, /* 0000 0100 */184{ 8, 0x7, 14 }, /* 0000 0111 */185{ 9, 0x18, 15 }, /* 0000 1100 0 */186{ 10, 0x17, 16 }, /* 0000 0101 11 */187{ 10, 0x18, 17 }, /* 0000 0110 00 */188{ 10, 0x8, 18 }, /* 0000 0010 00 */189{ 11, 0x67, 19 }, /* 0000 1100 111 */190{ 11, 0x68, 20 }, /* 0000 1101 000 */191{ 11, 0x6C, 21 }, /* 0000 1101 100 */192{ 11, 0x37, 22 }, /* 0000 0110 111 */193{ 11, 0x28, 23 }, /* 0000 0101 000 */194{ 11, 0x17, 24 }, /* 0000 0010 111 */195{ 11, 0x18, 25 }, /* 0000 0011 000 */196{ 12, 0xCA, 26 }, /* 0000 1100 1010 */197{ 12, 0xCB, 27 }, /* 0000 1100 1011 */198{ 12, 0xCC, 28 }, /* 0000 1100 1100 */199{ 12, 0xCD, 29 }, /* 0000 1100 1101 */200{ 12, 0x68, 30 }, /* 0000 0110 1000 */201{ 12, 0x69, 31 }, /* 0000 0110 1001 */202{ 12, 0x6A, 32 }, /* 0000 0110 1010 */203{ 12, 0x6B, 33 }, /* 0000 0110 1011 */204{ 12, 0xD2, 34 }, /* 0000 1101 0010 */205{ 12, 0xD3, 35 }, /* 0000 1101 0011 */206{ 12, 0xD4, 36 }, /* 0000 1101 0100 */207{ 12, 0xD5, 37 }, /* 0000 1101 0101 */208{ 12, 0xD6, 38 }, /* 0000 1101 0110 */209{ 12, 0xD7, 39 }, /* 0000 1101 0111 */210{ 12, 0x6C, 40 }, /* 0000 0110 1100 */211{ 12, 0x6D, 41 }, /* 0000 0110 1101 */212{ 12, 0xDA, 42 }, /* 0000 1101 1010 */213{ 12, 0xDB, 43 }, /* 0000 1101 1011 */214{ 12, 0x54, 44 }, /* 0000 0101 0100 */215{ 12, 0x55, 45 }, /* 0000 0101 0101 */216{ 12, 0x56, 46 }, /* 0000 0101 0110 */217{ 12, 0x57, 47 }, /* 0000 0101 0111 */218{ 12, 0x64, 48 }, /* 0000 0110 0100 */219{ 12, 0x65, 49 }, /* 0000 0110 0101 */220{ 12, 0x52, 50 }, /* 0000 0101 0010 */221{ 12, 0x53, 51 }, /* 0000 0101 0011 */222{ 12, 0x24, 52 }, /* 0000 0010 0100 */223{ 12, 0x37, 53 }, /* 0000 0011 0111 */224{ 12, 0x38, 54 }, /* 0000 0011 1000 */225{ 12, 0x27, 55 }, /* 0000 0010 0111 */226{ 12, 0x28, 56 }, /* 0000 0010 1000 */227{ 12, 0x58, 57 }, /* 0000 0101 1000 */228{ 12, 0x59, 58 }, /* 0000 0101 1001 */229{ 12, 0x2B, 59 }, /* 0000 0010 1011 */230{ 12, 0x2C, 60 }, /* 0000 0010 1100 */231{ 12, 0x5A, 61 }, /* 0000 0101 1010 */232{ 12, 0x66, 62 }, /* 0000 0110 0110 */233{ 12, 0x67, 63 }, /* 0000 0110 0111 */234{ 10, 0xF, 64 }, /* 0000 0011 11 */235{ 12, 0xC8, 128 }, /* 0000 1100 1000 */236{ 12, 0xC9, 192 }, /* 0000 1100 1001 */237{ 12, 0x5B, 256 }, /* 0000 0101 1011 */238{ 12, 0x33, 320 }, /* 0000 0011 0011 */239{ 12, 0x34, 384 }, /* 0000 0011 0100 */240{ 12, 0x35, 448 }, /* 0000 0011 0101 */241{ 13, 0x6C, 512 }, /* 0000 0011 0110 0 */242{ 13, 0x6D, 576 }, /* 0000 0011 0110 1 */243{ 13, 0x4A, 640 }, /* 0000 0010 0101 0 */244{ 13, 0x4B, 704 }, /* 0000 0010 0101 1 */245{ 13, 0x4C, 768 }, /* 0000 0010 0110 0 */246{ 13, 0x4D, 832 }, /* 0000 0010 0110 1 */247{ 13, 0x72, 896 }, /* 0000 0011 1001 0 */248{ 13, 0x73, 960 }, /* 0000 0011 1001 1 */249{ 13, 0x74, 1024 }, /* 0000 0011 1010 0 */250{ 13, 0x75, 1088 }, /* 0000 0011 1010 1 */251{ 13, 0x76, 1152 }, /* 0000 0011 1011 0 */252{ 13, 0x77, 1216 }, /* 0000 0011 1011 1 */253{ 13, 0x52, 1280 }, /* 0000 0010 1001 0 */254{ 13, 0x53, 1344 }, /* 0000 0010 1001 1 */255{ 13, 0x54, 1408 }, /* 0000 0010 1010 0 */256{ 13, 0x55, 1472 }, /* 0000 0010 1010 1 */257{ 13, 0x5A, 1536 }, /* 0000 0010 1101 0 */258{ 13, 0x5B, 1600 }, /* 0000 0010 1101 1 */259{ 13, 0x64, 1664 }, /* 0000 0011 0010 0 */260{ 13, 0x65, 1728 }, /* 0000 0011 0010 1 */261{ 11, 0x8, 1792 }, /* 0000 0001 000 */262{ 11, 0xC, 1856 }, /* 0000 0001 100 */263{ 11, 0xD, 1920 }, /* 0000 0001 101 */264{ 12, 0x12, 1984 }, /* 0000 0001 0010 */265{ 12, 0x13, 2048 }, /* 0000 0001 0011 */266{ 12, 0x14, 2112 }, /* 0000 0001 0100 */267{ 12, 0x15, 2176 }, /* 0000 0001 0101 */268{ 12, 0x16, 2240 }, /* 0000 0001 0110 */269{ 12, 0x17, 2304 }, /* 0000 0001 0111 */270{ 12, 0x1C, 2368 }, /* 0000 0001 1100 */271{ 12, 0x1D, 2432 }, /* 0000 0001 1101 */272{ 12, 0x1E, 2496 }, /* 0000 0001 1110 */273{ 12, 0x1F, 2560 }, /* 0000 0001 1111 */274{ 12, 0x1, G3CODE_EOL }, /* 0000 0000 0001 */275{ 9, 0x1, G3CODE_INVALID }, /* 0000 0000 1 */276{ 10, 0x1, G3CODE_INVALID }, /* 0000 0000 01 */277{ 11, 0x1, G3CODE_INVALID }, /* 0000 0000 001 */278{ 12, 0x0, G3CODE_INVALID }, /* 0000 0000 0000 */279};280#else281extern const tableentry TIFFFaxWhiteCodes[];282extern const tableentry TIFFFaxBlackCodes[];283#endif284#endif /* _T4_ */285/*286* Local Variables:287* mode: c288* c-basic-offset: 8289* fill-column: 78290* End:291*/292293294