ReactOS 0.4.15-dev-7953-g1f49173
tif_swab.c
Go to the documentation of this file.
1/*
2 * Copyright (c) 1988-1997 Sam Leffler
3 * Copyright (c) 1991-1997 Silicon Graphics, Inc.
4 *
5 * Permission to use, copy, modify, distribute, and sell this software and
6 * its documentation for any purpose is hereby granted without fee, provided
7 * that (i) the above copyright notices and this permission notice appear in
8 * all copies of the software and related documentation, and (ii) the names of
9 * Sam Leffler and Silicon Graphics may not be used in any advertising or
10 * publicity relating to the software without the specific, prior written
11 * permission of Sam Leffler and Silicon Graphics.
12 *
13 * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
14 * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
15 * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
16 *
17 * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
18 * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
19 * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
20 * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
21 * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
22 * OF THIS SOFTWARE.
23 */
24
25/*
26 * TIFF Library Bit & Byte Swapping Support.
27 *
28 * XXX We assume short = 16-bits and long = 32-bits XXX
29 */
30#include <precomp.h>
31
32#if defined(DISABLE_CHECK_TIFFSWABMACROS) || !defined(TIFFSwabShort)
33void
35{
36 register unsigned char* cp = (unsigned char*) wp;
37 unsigned char t;
38 assert(sizeof(uint16)==2);
39 t = cp[1]; cp[1] = cp[0]; cp[0] = t;
40}
41#endif
42
43#if defined(DISABLE_CHECK_TIFFSWABMACROS) || !defined(TIFFSwabLong)
44void
46{
47 register unsigned char* cp = (unsigned char*) lp;
48 unsigned char t;
49 assert(sizeof(uint32)==4);
50 t = cp[3]; cp[3] = cp[0]; cp[0] = t;
51 t = cp[2]; cp[2] = cp[1]; cp[1] = t;
52}
53#endif
54
55#if defined(DISABLE_CHECK_TIFFSWABMACROS) || !defined(TIFFSwabLong8)
56void
58{
59 register unsigned char* cp = (unsigned char*) lp;
60 unsigned char t;
61 assert(sizeof(uint64)==8);
62 t = cp[7]; cp[7] = cp[0]; cp[0] = t;
63 t = cp[6]; cp[6] = cp[1]; cp[1] = t;
64 t = cp[5]; cp[5] = cp[2]; cp[2] = t;
65 t = cp[4]; cp[4] = cp[3]; cp[3] = t;
66}
67#endif
68
69#if defined(DISABLE_CHECK_TIFFSWABMACROS) || !defined(TIFFSwabArrayOfShort)
70void
72{
73 register unsigned char* cp;
74 register unsigned char t;
75 assert(sizeof(uint16)==2);
76 /* XXX unroll loop some */
77 while (n-- > 0) {
78 cp = (unsigned char*) wp;
79 t = cp[1]; cp[1] = cp[0]; cp[0] = t;
80 wp++;
81 }
82}
83#endif
84
85#if defined(DISABLE_CHECK_TIFFSWABMACROS) || !defined(TIFFSwabArrayOfTriples)
86void
88{
89 unsigned char* cp;
90 unsigned char t;
91
92 /* XXX unroll loop some */
93 while (n-- > 0) {
94 cp = (unsigned char*) tp;
95 t = cp[2]; cp[2] = cp[0]; cp[0] = t;
96 tp += 3;
97 }
98}
99#endif
100
101#if defined(DISABLE_CHECK_TIFFSWABMACROS) || !defined(TIFFSwabArrayOfLong)
102void
104{
105 register unsigned char *cp;
106 register unsigned char t;
107 assert(sizeof(uint32)==4);
108 /* XXX unroll loop some */
109 while (n-- > 0) {
110 cp = (unsigned char *)lp;
111 t = cp[3]; cp[3] = cp[0]; cp[0] = t;
112 t = cp[2]; cp[2] = cp[1]; cp[1] = t;
113 lp++;
114 }
115}
116#endif
117
118#if defined(DISABLE_CHECK_TIFFSWABMACROS) || !defined(TIFFSwabArrayOfLong8)
119void
121{
122 register unsigned char *cp;
123 register unsigned char t;
124 assert(sizeof(uint64)==8);
125 /* XXX unroll loop some */
126 while (n-- > 0) {
127 cp = (unsigned char *)lp;
128 t = cp[7]; cp[7] = cp[0]; cp[0] = t;
129 t = cp[6]; cp[6] = cp[1]; cp[1] = t;
130 t = cp[5]; cp[5] = cp[2]; cp[2] = t;
131 t = cp[4]; cp[4] = cp[3]; cp[3] = t;
132 lp++;
133 }
134}
135#endif
136
137#if defined(DISABLE_CHECK_TIFFSWABMACROS) || !defined(TIFFSwabFloat)
138void
140{
141 register unsigned char* cp = (unsigned char*) fp;
142 unsigned char t;
143 assert(sizeof(float)==4);
144 t = cp[3]; cp[3] = cp[0]; cp[0] = t;
145 t = cp[2]; cp[2] = cp[1]; cp[1] = t;
146}
147#endif
148
149#if defined(DISABLE_CHECK_TIFFSWABMACROS) || !defined(TIFFSwabArrayOfFloat)
150void
151TIFFSwabArrayOfFloat(register float* fp, tmsize_t n)
152{
153 register unsigned char *cp;
154 register unsigned char t;
155 assert(sizeof(float)==4);
156 /* XXX unroll loop some */
157 while (n-- > 0) {
158 cp = (unsigned char *)fp;
159 t = cp[3]; cp[3] = cp[0]; cp[0] = t;
160 t = cp[2]; cp[2] = cp[1]; cp[1] = t;
161 fp++;
162 }
163}
164#endif
165
166#if defined(DISABLE_CHECK_TIFFSWABMACROS) || !defined(TIFFSwabDouble)
167void
168TIFFSwabDouble(double *dp)
169{
170 register unsigned char* cp = (unsigned char*) dp;
171 unsigned char t;
172 assert(sizeof(double)==8);
173 t = cp[7]; cp[7] = cp[0]; cp[0] = t;
174 t = cp[6]; cp[6] = cp[1]; cp[1] = t;
175 t = cp[5]; cp[5] = cp[2]; cp[2] = t;
176 t = cp[4]; cp[4] = cp[3]; cp[3] = t;
177}
178#endif
179
180#if defined(DISABLE_CHECK_TIFFSWABMACROS) || !defined(TIFFSwabArrayOfDouble)
181void
183{
184 register unsigned char *cp;
185 register unsigned char t;
186 assert(sizeof(double)==8);
187 /* XXX unroll loop some */
188 while (n-- > 0) {
189 cp = (unsigned char *)dp;
190 t = cp[7]; cp[7] = cp[0]; cp[0] = t;
191 t = cp[6]; cp[6] = cp[1]; cp[1] = t;
192 t = cp[5]; cp[5] = cp[2]; cp[2] = t;
193 t = cp[4]; cp[4] = cp[3]; cp[3] = t;
194 dp++;
195 }
196}
197#endif
198
199/*
200 * Bit reversal tables. TIFFBitRevTable[<byte>] gives
201 * the bit reversed value of <byte>. Used in various
202 * places in the library when the FillOrder requires
203 * bit reversal of byte values (e.g. CCITT Fax 3
204 * encoding/decoding). TIFFNoBitRevTable is provided
205 * for algorithms that want an equivalent table that
206 * do not reverse bit values.
207 */
208static const unsigned char TIFFBitRevTable[256] = {
209 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
210 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
211 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
212 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
213 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
214 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
215 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
216 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
217 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
218 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
219 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
220 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
221 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
222 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
223 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
224 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
225 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
226 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
227 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
228 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
229 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
230 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
231 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
232 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
233 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
234 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
235 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
236 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
237 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
238 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
239 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
240 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff
241};
242static const unsigned char TIFFNoBitRevTable[256] = {
243 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
244 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
245 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
246 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
247 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
248 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
249 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
250 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
251 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
252 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
253 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
254 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
255 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
256 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
257 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
258 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
259 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
260 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
261 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
262 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
263 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
264 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
265 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
266 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
267 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
268 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
269 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
270 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
271 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
272 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
273 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
274 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
275};
276
277const unsigned char*
279{
280 return (reversed ? TIFFBitRevTable : TIFFNoBitRevTable);
281}
282
283void
285{
286 for (; n > 8; n -= 8) {
287 cp[0] = TIFFBitRevTable[cp[0]];
288 cp[1] = TIFFBitRevTable[cp[1]];
289 cp[2] = TIFFBitRevTable[cp[2]];
290 cp[3] = TIFFBitRevTable[cp[3]];
291 cp[4] = TIFFBitRevTable[cp[4]];
292 cp[5] = TIFFBitRevTable[cp[5]];
293 cp[6] = TIFFBitRevTable[cp[6]];
294 cp[7] = TIFFBitRevTable[cp[7]];
295 cp += 8;
296 }
297 while (n-- > 0) {
298 *cp = TIFFBitRevTable[*cp];
299 cp++;
300 }
301}
302
303/* vim: set ts=8 sts=8 sw=8 noet: */
304/*
305 * Local Variables:
306 * mode: c
307 * c-basic-offset: 8
308 * fill-column: 78
309 * End:
310 */
unsigned short uint16
Definition: types.h:30
unsigned int uint32
Definition: types.h:32
unsigned char uint8
Definition: types.h:28
#define assert(x)
Definition: debug.h:53
_In_ uint64_t _In_ uint64_t _In_ uint64_t _In_opt_ traverse_ptr * tp
Definition: btrfs.c:2996
unsigned long long uint64
Definition: platform.h:18
GLdouble GLdouble t
Definition: gl.h:2047
GLdouble n
Definition: glext.h:7729
POINT cp
Definition: magnifier.c:59
void TIFFSwabFloat(float *fp)
Definition: tif_swab.c:139
void TIFFSwabArrayOfFloat(register float *fp, tmsize_t n)
Definition: tif_swab.c:151
void TIFFSwabDouble(double *dp)
Definition: tif_swab.c:168
void TIFFSwabArrayOfShort(register uint16 *wp, tmsize_t n)
Definition: tif_swab.c:71
void TIFFSwabArrayOfDouble(double *dp, tmsize_t n)
Definition: tif_swab.c:182
void TIFFSwabLong(uint32 *lp)
Definition: tif_swab.c:45
void TIFFReverseBits(uint8 *cp, tmsize_t n)
Definition: tif_swab.c:284
void TIFFSwabShort(uint16 *wp)
Definition: tif_swab.c:34
const unsigned char * TIFFGetBitRevTable(int reversed)
Definition: tif_swab.c:278
void TIFFSwabArrayOfTriples(register uint8 *tp, tmsize_t n)
Definition: tif_swab.c:87
void TIFFSwabArrayOfLong8(register uint64 *lp, tmsize_t n)
Definition: tif_swab.c:120
static const unsigned char TIFFBitRevTable[256]
Definition: tif_swab.c:208
void TIFFSwabLong8(uint64 *lp)
Definition: tif_swab.c:57
static const unsigned char TIFFNoBitRevTable[256]
Definition: tif_swab.c:242
void TIFFSwabArrayOfLong(register uint32 *lp, tmsize_t n)
Definition: tif_swab.c:103
TIFF_SSIZE_T tmsize_t
Definition: tiffio.h:65