JPEGView/Source/C/TIFFTables.c
Aaron Giles 92bdb55672 JPEGView 3.3 for Macintosh
These are the sources for the final official release of JPEGView for the
Mac, back in 1994.
2015-02-05 00:18:10 -08:00

1 line
20 KiB
C

/*********************************************************/
/* This source code copyright (c) 1991-2001, Aaron Giles */
/* See the Read Me file for licensing information. */
/* Contact email: mac@aarongiles.com */
/*********************************************************/
typedef struct ExtractTable {
signed char leftover;
signed short count;
} ExtractTable;
// format of table is:
//
// leftover count explanation
// -------- ----- -----------
// 0-7 val val = # of bits to add; leftover = # of bits left out of 8
// <0 offset leftover = -# of bits needed; offset = address in table where
// table of those bits begins
// 0 -1 bad code
// 0 -2 EOL code
static ExtractTable whiteExtract[] = {
-4, 256, // 00000000....
-4, 272, // 00000001.... (1792+)
0, 29, // 00000010
0, 30, // 00000011
0, 45, // 00000100
0, 46, // 00000101
1, 22, // 0000011/0
1, 22, // 0000011/1
1, 23, // 0000100/0
1, 23, // 0000100/1
0, 47, // 00001010
0, 48, // 00001011
2, 13, // 000011/00
2, 13, // 000011/01
2, 13, // 000011/10
2, 13, // 000011/11
1, 20, // 0001000/0
1, 20, // 0001000/1
0, 33, // 00010010
0, 34, // 00010011
0, 35, // 00010100
0, 36, // 00010101
0, 37, // 00010110
0, 38, // 00010111
1, 19, // 0001100/0
1, 19, // 0001100/1
0, 31, // 00011010
0, 32, // 00011011
2, 1, // 000111/00
2, 1, // 000111/01
2, 1, // 000111/10
2, 1, // 000111/11
2, 12, // 001000/00
2, 12, // 001000/01
2, 12, // 001000/10
2, 12, // 001000/11
0, 53, // 00100100
0, 54, // 00100101
1, 26, // 0010011/0
1, 26, // 0010011/1
0, 39, // 00101000
0, 40, // 00101001
0, 41, // 00101010
0, 42, // 00101011
0, 43, // 00101100
0, 44, // 00101101
1, 21, // 0010111/0
1, 21, // 0010111/1
1, 28, // 0011000/0
1, 28, // 0011000/1
0, 61, // 00110010
0, 62, // 00110011
0, 63, // 00110100
0, 0, // 00110101
0, 320, // 00110110
0, 384, // 00110111
3, 10, // 00111/000
3, 10, // 00111/001
3, 10, // 00111/010
3, 10, // 00111/011
3, 10, // 00111/100
3, 10, // 00111/101
3, 10, // 00111/110
3, 10, // 00111/111
3, 11, // 01000/000
3, 11, // 01000/001
3, 11, // 01000/010
3, 11, // 01000/011
3, 11, // 01000/100
3, 11, // 01000/101
3, 11, // 01000/110
3, 11, // 01000/111
1, 27, // 0100100/0
1, 27, // 0100100/1
0, 59, // 01001010
0, 60, // 01001011
-1, 288, // 01001100.... (1472/1536)
-1, 290, // 01001101.... (1600/1728)
1, 18, // 0100111/0
1, 18, // 0100111/1
1, 24, // 0101000/0
1, 24, // 0101000/1
0, 49, // 01010010
0, 50, // 01010011
0, 51, // 01010100
0, 52, // 01010101
1, 25, // 0101011/0
1, 25, // 0101011/1
0, 55, // 01011000
0, 56, // 01011001
0, 57, // 01011010
0, 58, // 01011011
2, 192, // 010111/00
2, 192, // 010111/01
2, 192, // 010111/10
2, 192, // 010111/11
2, 1664, // 011000/00
2, 1664, // 011000/01
2, 1664, // 011000/10
2, 1664, // 011000/11
0, 448, // 01100100
0, 512, // 01100101
-1, 292, // 01100110.... (704/768)
0, 640, // 01100111
0, 576, // 01101000
-1, 294, // 01101001.... (832/896)
-1, 296, // 01101010.... (960/1024)
-1, 298, // 01101011.... (1088/1152)
-1, 300, // 01101100.... (1216/1280)
-1, 302, // 01101101.... (1344/1408)
1, 256, // 0110111/0
1, 256, // 0110111/1
4, 2, // 0111/0000
4, 2, // 0111/0001
4, 2, // 0111/0010
4, 2, // 0111/0011
4, 2, // 0111/0100
4, 2, // 0111/0101
4, 2, // 0111/0110
4, 2, // 0111/0111
4, 2, // 0111/1000
4, 2, // 0111/1001
4, 2, // 0111/1010
4, 2, // 0111/1011
4, 2, // 0111/1100
4, 2, // 0111/1101
4, 2, // 0111/1110
4, 2, // 0111/1111
4, 3, // 1000/0000
4, 3, // 1000/0001
4, 3, // 1000/0010
4, 3, // 1000/0011
4, 3, // 1000/0100
4, 3, // 1000/0101
4, 3, // 1000/0110
4, 3, // 1000/0111
4, 3, // 1000/1000
4, 3, // 1000/1001
4, 3, // 1000/1010
4, 3, // 1000/1011
4, 3, // 1000/1100
4, 3, // 1000/1101
4, 3, // 1000/1110
4, 3, // 1000/1111
3, 128, // 10010/000
3, 128, // 10010/001
3, 128, // 10010/010
3, 128, // 10010/011
3, 128, // 10010/100
3, 128, // 10010/101
3, 128, // 10010/110
3, 128, // 10010/111
3, 8, // 10011/000
3, 8, // 10011/001
3, 8, // 10011/010
3, 8, // 10011/011
3, 8, // 10011/100
3, 8, // 10011/101
3, 8, // 10011/110
3, 8, // 10011/111
3, 9, // 10100/000
3, 9, // 10100/001
3, 9, // 10100/010
3, 9, // 10100/011
3, 9, // 10100/100
3, 9, // 10100/101
3, 9, // 10100/110
3, 9, // 10100/111
2, 16, // 101010/00
2, 16, // 101010/01
2, 16, // 101010/10
2, 16, // 101010/11
2, 17, // 101011/00
2, 17, // 101011/01
2, 17, // 101011/10
2, 17, // 101011/11
4, 4, // 1011/0000
4, 4, // 1011/0001
4, 4, // 1011/0010
4, 4, // 1011/0011
4, 4, // 1011/0100
4, 4, // 1011/0101
4, 4, // 1011/0110
4, 4, // 1011/0111
4, 4, // 1011/1000
4, 4, // 1011/1001
4, 4, // 1011/1010
4, 4, // 1011/1011
4, 4, // 1011/1100
4, 4, // 1011/1101
4, 4, // 1011/1110
4, 4, // 1011/1111
4, 5, // 1100/0000
4, 5, // 1100/0001
4, 5, // 1100/0010
4, 5, // 1100/0011
4, 5, // 1100/0100
4, 5, // 1100/0101
4, 5, // 1100/0110
4, 5, // 1100/0111
4, 5, // 1100/1000
4, 5, // 1100/1001
4, 5, // 1100/1010
4, 5, // 1100/1011
4, 5, // 1100/1100
4, 5, // 1100/1101
4, 5, // 1100/1110
4, 5, // 1100/1111
2, 14, // 110100/00
2, 14, // 110100/01
2, 14, // 110100/10
2, 14, // 110100/11
2, 15, // 110101/00
2, 15, // 110101/01
2, 15, // 110101/10
2, 15, // 110101/11
3, 64, // 11011/000
3, 64, // 11011/001
3, 64, // 11011/010
3, 64, // 11011/011
3, 64, // 11011/100
3, 64, // 11011/101
3, 64, // 11011/110
3, 64, // 11011/111
4, 6, // 1110/0000
4, 6, // 1110/0001
4, 6, // 1110/0010
4, 6, // 1110/0011
4, 6, // 1110/0100
4, 6, // 1110/0101
4, 6, // 1110/0110
4, 6, // 1110/0111
4, 6, // 1110/1000
4, 6, // 1110/1001
4, 6, // 1110/1010
4, 6, // 1110/1011
4, 6, // 1110/1100
4, 6, // 1110/1101
4, 6, // 1110/1110
4, 6, // 1110/1111
4, 7, // 1111/0000
4, 7, // 1111/0001
4, 7, // 1111/0010
4, 7, // 1111/0011
4, 7, // 1111/0100
4, 7, // 1111/0101
4, 7, // 1111/0110
4, 7, // 1111/0111
4, 7, // 1111/1000
4, 7, // 1111/1001
4, 7, // 1111/1010
4, 7, // 1111/1011
4, 7, // 1111/1100
4, 7, // 1111/1101
4, 7, // 1111/1110
4, 7, // 1111/1111
// prefix: 00000000, offset 256
0, -1, // 00000000 0000
0, -2, // 00000000 0001
0, -1, // 00000000 0010
0, -1, // 00000000 0011
0, -1, // 00000000 0100
0, -1, // 00000000 0101
0, -1, // 00000000 0110
0, -1, // 00000000 0111
0, -1, // 00000000 1000
0, -1, // 00000000 1001
0, -1, // 00000000 1010
0, -1, // 00000000 1011
0, -1, // 00000000 1100
0, -1, // 00000000 1101
0, -1, // 00000000 1110
0, -1, // 00000000 1111
// prefix: 00000001, offset 272
1, 1792, // 00000001 000/0
1, 1792, // 00000001 000/1
0, 1984, // 00000001 0010
0, 2048, // 00000001 0011
0, 2112, // 00000001 0100
0, 2176, // 00000001 0101
0, 2240, // 00000001 0110
0, 2304, // 00000001 0111
1, 1856, // 00000001 100/0
1, 1856, // 00000001 100/1
1, 1920, // 00000001 101/0
1, 1920, // 00000001 101/1
0, 2368, // 00000001 1100
0, 2432, // 00000001 1101
0, 2496, // 00000001 1110
0, 2560, // 00000001 1111
// prefix: 01001100, offset 288
0, 1472, // 01001100 0
0, 1536, // 01001100 1
// prefix: 01001101, offset 290
0, 1600, // 01001101 0
0, 1728, // 01001101 1
// prefix: 01100110, offset 292
0, 704, // 01100110 0
0, 768, // 01100110 1
// prefix: 01101001, offset 294
0, 832, // 01101001 0
0, 896, // 01101001 1
// prefix: 01101010, offset 296
0, 960, // 01101010 0
0, 1024, // 01101010 1
// prefix: 01101011, offset 298
0, 1088, // 01101011 0
0, 1152, // 01101011 1
// prefix: 01101100, offset 300
0, 1216, // 01101100 0
0, 1280, // 01101100 1
// prefix: 01101101, offset 302
0, 1344, // 01101101 0
0, 1408 // 01101101 1
};
static ExtractTable blackExtract[] = {
-3, 256, // 00000000....
-4, 264, // 00000001.... (1792+)
-5, 280, // 00000010....
-5, 312, // 00000011....
0, 13, // 00000100
-4, 344, // 00000101....
-4, 360, // 00000110....
0, 14, // 00000111
1, 10, // 0000100/0
1, 10, // 0000100/1
1, 11, // 0000101/0
1, 11, // 0000101/1
-4, 376, // 00001100....
-4, 392, // 00001101....
1, 12, // 0000111/0
1, 12, // 0000111/1
2, 9, // 000100/00
2, 9, // 000100/01
2, 9, // 000100/10
2, 9, // 000100/11
2, 8, // 000101/00
2, 8, // 000101/01
2, 8, // 000101/10
2, 8, // 000101/11
3, 7, // 00011/000
3, 7, // 00011/001
3, 7, // 00011/010
3, 7, // 00011/011
3, 7, // 00011/100
3, 7, // 00011/101
3, 7, // 00011/110
3, 7, // 00011/111
4, 6, // 0010/0000
4, 6, // 0010/0001
4, 6, // 0010/0010
4, 6, // 0010/0011
4, 6, // 0010/0100
4, 6, // 0010/0101
4, 6, // 0010/0110
4, 6, // 0010/0111
4, 6, // 0010/1000
4, 6, // 0010/1001
4, 6, // 0010/1010
4, 6, // 0010/1011
4, 6, // 0010/1100
4, 6, // 0010/1101
4, 6, // 0010/1110
4, 6, // 0010/1111
4, 5, // 0011/0000
4, 5, // 0011/0001
4, 5, // 0011/0010
4, 5, // 0011/0011
4, 5, // 0011/0100
4, 5, // 0011/0101
4, 5, // 0011/0110
4, 5, // 0011/0111
4, 5, // 0011/1000
4, 5, // 0011/1001
4, 5, // 0011/1010
4, 5, // 0011/1011
4, 5, // 0011/1100
4, 5, // 0011/1101
4, 5, // 0011/1110
4, 5, // 0011/1111
5, 1, // 010/00000
5, 1, // 010/00001
5, 1, // 010/00010
5, 1, // 010/00011
5, 1, // 010/00100
5, 1, // 010/00101
5, 1, // 010/00110
5, 1, // 010/00111
5, 1, // 010/01000
5, 1, // 010/01001
5, 1, // 010/01010
5, 1, // 010/01011
5, 1, // 010/01100
5, 1, // 010/01101
5, 1, // 010/01110
5, 1, // 010/01111
5, 1, // 010/10000
5, 1, // 010/10001
5, 1, // 010/10010
5, 1, // 010/10011
5, 1, // 010/10100
5, 1, // 010/10101
5, 1, // 010/10110
5, 1, // 010/10111
5, 1, // 010/11000
5, 1, // 010/11001
5, 1, // 010/11010
5, 1, // 010/11011
5, 1, // 010/11100
5, 1, // 010/11101
5, 1, // 010/11110
5, 1, // 010/11111
5, 4, // 011/00000
5, 4, // 011/00001
5, 4, // 011/00010
5, 4, // 011/00011
5, 4, // 011/00100
5, 4, // 011/00101
5, 4, // 011/00110
5, 4, // 011/00111
5, 4, // 011/01000
5, 4, // 011/01001
5, 4, // 011/01010
5, 4, // 011/01011
5, 4, // 011/01100
5, 4, // 011/01101
5, 4, // 011/01110
5, 4, // 011/01111
5, 4, // 011/10000
5, 4, // 011/10001
5, 4, // 011/10010
5, 4, // 011/10011
5, 4, // 011/10100
5, 4, // 011/10101
5, 4, // 011/10110
5, 4, // 011/10111
5, 4, // 011/11000
5, 4, // 011/11001
5, 4, // 011/11010
5, 4, // 011/11011
5, 4, // 011/11100
5, 4, // 011/11101
5, 4, // 011/11110
5, 4, // 011/11111
6, 3, // 10/000000
6, 3, // 10/000001
6, 3, // 10/000010
6, 3, // 10/000011
6, 3, // 10/000100
6, 3, // 10/000101
6, 3, // 10/000110
6, 3, // 10/000111
6, 3, // 10/001000
6, 3, // 10/001001
6, 3, // 10/001010
6, 3, // 10/001011
6, 3, // 10/001100
6, 3, // 10/001101
6, 3, // 10/001110
6, 3, // 10/001111
6, 3, // 10/010000
6, 3, // 10/010001
6, 3, // 10/010010
6, 3, // 10/010011
6, 3, // 10/010100
6, 3, // 10/010101
6, 3, // 10/010110
6, 3, // 10/010111
6, 3, // 10/011000
6, 3, // 10/011001
6, 3, // 10/011010
6, 3, // 10/011011
6, 3, // 10/011100
6, 3, // 10/011101
6, 3, // 10/011110
6, 3, // 10/011111
6, 3, // 10/100000
6, 3, // 10/100001
6, 3, // 10/100010
6, 3, // 10/100011
6, 3, // 10/100100
6, 3, // 10/100101
6, 3, // 10/100110
6, 3, // 10/100111
6, 3, // 10/101000
6, 3, // 10/101001
6, 3, // 10/101010
6, 3, // 10/101011
6, 3, // 10/101100
6, 3, // 10/101101
6, 3, // 10/101110
6, 3, // 10/101111
6, 3, // 10/110000
6, 3, // 10/110001
6, 3, // 10/110010
6, 3, // 10/110011
6, 3, // 10/110100
6, 3, // 10/110101
6, 3, // 10/110110
6, 3, // 10/110111
6, 3, // 10/111000
6, 3, // 10/111001
6, 3, // 10/111010
6, 3, // 10/111011
6, 3, // 10/111100
6, 3, // 10/111101
6, 3, // 10/111110
6, 3, // 10/111111
6, 2, // 11/000000
6, 2, // 11/000001
6, 2, // 11/000010
6, 2, // 11/000011
6, 2, // 11/000100
6, 2, // 11/000101
6, 2, // 11/000110
6, 2, // 11/000111
6, 2, // 11/001000
6, 2, // 11/001001
6, 2, // 11/001010
6, 2, // 11/001011
6, 2, // 11/001100
6, 2, // 11/001101
6, 2, // 11/001110
6, 2, // 11/001111
6, 2, // 11/010000
6, 2, // 11/010001
6, 2, // 11/010010
6, 2, // 11/010011
6, 2, // 11/010100
6, 2, // 11/010101
6, 2, // 11/010110
6, 2, // 11/010111
6, 2, // 11/011000
6, 2, // 11/011001
6, 2, // 11/011010
6, 2, // 11/011011
6, 2, // 11/011100
6, 2, // 11/011101
6, 2, // 11/011110
6, 2, // 11/011111
6, 2, // 11/100000
6, 2, // 11/100001
6, 2, // 11/100010
6, 2, // 11/100011
6, 2, // 11/100100
6, 2, // 11/100101
6, 2, // 11/100110
6, 2, // 11/100111
6, 2, // 11/101000
6, 2, // 11/101001
6, 2, // 11/101010
6, 2, // 11/101011
6, 2, // 11/101100
6, 2, // 11/101101
6, 2, // 11/101110
6, 2, // 11/101111
6, 2, // 11/110000
6, 2, // 11/110001
6, 2, // 11/110010
6, 2, // 11/110011
6, 2, // 11/110100
6, 2, // 11/110101
6, 2, // 11/110110
6, 2, // 11/110111
6, 2, // 11/111000
6, 2, // 11/111001
6, 2, // 11/111010
6, 2, // 11/111011
6, 2, // 11/111100
6, 2, // 11/111101
6, 2, // 11/111110
6, 2, // 11/111111
// prefix: 00000000, offset 256
0, -2, // 00000000 000
0, -1, // 00000000 001
0, -1, // 00000000 010
0, -1, // 00000000 011
0, -1, // 00000000 100
0, -1, // 00000000 101
0, -1, // 00000000 110
0, -1, // 00000000 111
// prefix: 00000001, offset 264
1, 1792, // 00000001 000/0
1, 1792, // 00000001 000/1
0, 1984, // 00000001 0010
0, 2048, // 00000001 0011
0, 2112, // 00000001 0100
0, 2176, // 00000001 0101
0, 2240, // 00000001 0110
0, 2304, // 00000001 0111
1, 1856, // 00000001 100/0
1, 1856, // 00000001 100/1
1, 1920, // 00000001 101/0
1, 1920, // 00000001 101/1
0, 2368, // 00000001 1100
0, 2432, // 00000001 1101
0, 2496, // 00000001 1110
0, 2560, // 00000001 1111
// prefix: 00000010, offset 280
3, 18, // 00000010 00/000
3, 18, // 00000010 00/001
3, 18, // 00000010 00/010
3, 18, // 00000010 00/011
3, 18, // 00000010 00/100
3, 18, // 00000010 00/101
3, 18, // 00000010 00/110
3, 18, // 00000010 00/111
1, 52, // 00000010 0100/0
1, 52, // 00000010 0100/1
0, 640, // 00000010 01010
0, 704, // 00000010 01011
0, 768, // 00000010 01100
0, 832, // 00000010 01101
1, 55, // 00000010 0111/0
1, 55, // 00000010 0111/1
1, 56, // 00000010 1000/0
1, 56, // 00000010 1000/1
0, 1280, // 00000010 10010
0, 1344, // 00000010 10011
0, 1408, // 00000010 10100
0, 1472, // 00000010 10101
1, 59, // 00000010 1011/0
1, 59, // 00000010 1011/1
1, 60, // 00000010 1100/0
1, 60, // 00000010 1100/1
0, 1536, // 00000010 11010
0, 1600, // 00000010 11011
2, 24, // 00000010 111/00
2, 24, // 00000010 111/01
2, 24, // 00000010 111/10
2, 24, // 00000010 111/11
// prefix: 00000011, offset 312
2, 25, // 00000011 000/00
2, 25, // 00000011 000/01
2, 25, // 00000011 000/10
2, 25, // 00000011 000/11
0, 1664, // 00000011 00100
0, 1728, // 00000011 00101
1, 320, // 00000011 0011/0
1, 320, // 00000011 0011/1
1, 384, // 00000011 0100/0
1, 384, // 00000011 0100/1
1, 448, // 00000011 0101/0
1, 448, // 00000011 0101/1
0, 512, // 00000011 01100
0, 576, // 00000011 01101
1, 53, // 00000011 0111/0
1, 53, // 00000011 0111/1
1, 54, // 00000011 1000/0
1, 54, // 00000011 1000/1
0, 896, // 00000011 10010
0, 960, // 00000011 10011
0, 1024, // 00000011 10100
0, 1088, // 00000011 10101
0, 1152, // 00000011 10110
0, 1216, // 00000011 10111
3, 64, // 00000011 11/000
3, 64, // 00000011 11/001
3, 64, // 00000011 11/010
3, 64, // 00000011 11/011
3, 64, // 00000011 11/100
3, 64, // 00000011 11/101
3, 64, // 00000011 11/110
3, 64, // 00000011 11/111
// prefix: 00000101, offset 344
1, 23, // 00000101 000/0
1, 23, // 00000101 000/1
0, 50, // 00000101 0010
0, 51, // 00000101 0011
0, 44, // 00000101 0100
0, 45, // 00000101 0101
0, 46, // 00000101 0110
0, 47, // 00000101 0111
0, 57, // 00000101 1000
0, 58, // 00000101 1001
0, 61, // 00000101 1010
0, 256, // 00000101 1011
2, 16, // 00000101 11/00
2, 16, // 00000101 11/01
2, 16, // 00000101 11/10
2, 16, // 00000101 11/11
// prefix: 00000110, offset 360
2, 17, // 00000110 00/00
2, 17, // 00000110 00/01
2, 17, // 00000110 00/10
2, 17, // 00000110 00/11
0, 48, // 00000110 0100
0, 49, // 00000110 0101
0, 62, // 00000110 0110
0, 63, // 00000110 0111
0, 30, // 00000110 1000
0, 31, // 00000110 1001
0, 32, // 00000110 1010
0, 33, // 00000110 1011
0, 40, // 00000110 1100
0, 41, // 00000110 1101
1, 22, // 00000110 111/0
1, 22, // 00000110 111/1
// prefix: 00001100, offset 376
3, 15, // 00001100 0/000
3, 15, // 00001100 0/001
3, 15, // 00001100 0/010
3, 15, // 00001100 0/011
3, 15, // 00001100 0/100
3, 15, // 00001100 0/101
3, 15, // 00001100 0/110
3, 15, // 00001100 0/111
0, 128, // 00001100 1000
0, 192, // 00001100 1001
0, 26, // 00001100 1010
0, 27, // 00001100 1011
0, 28, // 00001100 1100
0, 29, // 00001100 1101
1, 19, // 00001100 111/0
1, 19, // 00001100 111/1
// prefix: 00001101, offset 392
1, 20, // 00001101 000/0
1, 20, // 00001101 000/1
0, 34, // 00001101 0010
0, 35, // 00001101 0011
0, 36, // 00001101 0100
0, 37, // 00001101 0101
0, 38, // 00001101 0110
0, 39, // 00001101 0111
1, 21, // 00001101 100/0
1, 21, // 00001101 100/1
0, 42, // 00001101 1010
0, 43, // 00001101 1011
2, 0, // 00001101 11/00
2, 0, // 00001101 11/01
2, 0, // 00001101 11/10
2, 0 // 00001101 11/11
};