4
* Copyright (c) 1988-1997 Sam Leffler
5
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
7
* Permission to use, copy, modify, distribute, and sell this software and
8
* its documentation for any purpose is hereby granted without fee, provided
9
* that (i) the above copyright notices and this permission notice appear in
10
* all copies of the software and related documentation, and (ii) the names of
11
* Sam Leffler and Silicon Graphics may not be used in any advertising or
12
* publicity relating to the software without the specific, prior written
13
* permission of Sam Leffler and Silicon Graphics.
15
* THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
16
* EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
17
* WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
19
* IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
20
* ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
21
* OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
22
* WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
23
* LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
28
* TIFF Library Bit & Byte Swapping Support.
30
* XXX We assume short = 16-bits and long = 32-bits XXX
33
/* Headers from port.h */
34
#include <sys/types.h>
42
typedef unsigned char u_char;
43
typedef unsigned long u_long;
46
/* Local header pulled from tiff.h and tiffio.h */
50
void TIFFSwabShort(uint16 * wp)
52
register u_char *cp = (u_char *) wp;
62
void TIFFSwabLong(uint32 * lp)
64
register u_char *cp = (u_char *) lp;
76
#ifndef TIFFSwabArrayOfShort
77
void TIFFSwabArrayOfShort(uint16 * wp, register u_long n)
82
/* XXX unroll loop some */
93
#ifndef TIFFSwabArrayOfLong
94
void TIFFSwabArrayOfLong(register uint32 * lp, register u_long n)
96
register unsigned char *cp;
99
/* XXX unroll loop some */
101
cp = (unsigned char *)lp;
113
#ifndef TIFFSwabDouble
114
void TIFFSwabDouble(double *dp)
116
register uint32 *lp = (uint32 *) dp;
119
TIFFSwabArrayOfLong(lp, 2);
126
#ifndef TIFFSwabArrayOfDouble
127
void TIFFSwabArrayOfDouble(double *dp, register u_long n)
129
register uint32 *lp = (uint32 *) dp;
132
TIFFSwabArrayOfLong(lp, n + n);
143
* Bit reversal tables. TIFFBitRevTable[<byte>] gives
144
* the bit reversed value of <byte>. Used in various
145
* places in the library when the FillOrder requires
146
* bit reversal of byte values (e.g. CCITT Fax 3
147
* encoding/decoding). TIFFNoBitRevTable is provided
148
* for algorithms that want an equivalent table that
149
* do not reverse bit values.
151
static const unsigned char TIFFBitRevTable[256] = {
152
0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
153
0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
154
0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
155
0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
156
0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
157
0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
158
0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
159
0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
160
0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
161
0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
162
0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
163
0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
164
0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
165
0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
166
0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
167
0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
168
0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
169
0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
170
0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
171
0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
172
0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
173
0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
174
0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
175
0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
176
0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
177
0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
178
0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
179
0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
180
0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
181
0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
182
0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
183
0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff
185
static const unsigned char TIFFNoBitRevTable[256] = {
186
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
187
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
188
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
189
0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
190
0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
191
0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
192
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
193
0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
194
0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
195
0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
196
0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
197
0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
198
0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
199
0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
200
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
201
0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
202
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
203
0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
204
0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
205
0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
206
0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
207
0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
208
0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
209
0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
210
0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
211
0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
212
0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
213
0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
214
0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
215
0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
216
0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
217
0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
220
const unsigned char *TIFFGetBitRevTable(int reversed)
222
return (reversed ? TIFFBitRevTable : TIFFNoBitRevTable);
225
void TIFFReverseBits(register u_char * cp, register u_long n)
227
for (; n > 8; n -= 8) {
228
cp[0] = TIFFBitRevTable[cp[0]];
229
cp[1] = TIFFBitRevTable[cp[1]];
230
cp[2] = TIFFBitRevTable[cp[2]];
231
cp[3] = TIFFBitRevTable[cp[3]];
232
cp[4] = TIFFBitRevTable[cp[4]];
233
cp[5] = TIFFBitRevTable[cp[5]];
234
cp[6] = TIFFBitRevTable[cp[6]];
235
cp[7] = TIFFBitRevTable[cp[7]];
239
*cp = TIFFBitRevTable[*cp], cp++;