ReactOS  0.4.14-dev-599-g2d4d3f5
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)
33 void
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)
44 void
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)
56 void
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)
70 void
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)
86 void
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)
102 void
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)
119 void
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)
138 void
139 TIFFSwabFloat(float* fp)
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)
150 void
151 TIFFSwabArrayOfFloat(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)
167 void
168 TIFFSwabDouble(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)
181 void
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  */
208 static 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 };
242 static 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 
277 const unsigned char*
278 TIFFGetBitRevTable(int reversed)
279 {
280  return (reversed ? TIFFBitRevTable : TIFFNoBitRevTable);
281 }
282 
283 void
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 long long uint64
Definition: platform.h:18
static const unsigned char TIFFNoBitRevTable[256]
Definition: tif_swab.c:242
void TIFFSwabFloat(float *fp)
Definition: tif_swab.c:139
void TIFFSwabArrayOfShort(register uint16 *wp, tmsize_t n)
Definition: tif_swab.c:71
static const unsigned char TIFFBitRevTable[256]
Definition: tif_swab.c:208
unsigned int uint32
Definition: types.h:32
void TIFFSwabDouble(double *dp)
Definition: tif_swab.c:168
GLdouble n
Definition: glext.h:7729
GLdouble GLdouble t
Definition: gl.h:2047
#define assert(x)
Definition: debug.h:53
void TIFFSwabArrayOfFloat(register float *fp, tmsize_t n)
Definition: tif_swab.c:151
TIFF_SSIZE_T tmsize_t
Definition: tiffio.h:65
_In_ uint64_t _In_ uint64_t _In_ uint64_t _In_opt_ traverse_ptr * tp
Definition: btrfs.c:2855
void TIFFSwabShort(uint16 *wp)
Definition: tif_swab.c:34
unsigned char uint8
Definition: types.h:28
void TIFFSwabArrayOfLong(register uint32 *lp, tmsize_t n)
Definition: tif_swab.c:103
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 TIFFSwabLong(uint32 *lp)
Definition: tif_swab.c:45
unsigned short uint16
Definition: types.h:30
void TIFFSwabArrayOfLong8(register uint64 *lp, tmsize_t n)
Definition: tif_swab.c:120
void TIFFSwabArrayOfDouble(double *dp, tmsize_t n)
Definition: tif_swab.c:182
void TIFFReverseBits(uint8 *cp, tmsize_t n)
Definition: tif_swab.c:284
POINT cp
Definition: magnifier.c:59
void TIFFSwabLong8(uint64 *lp)
Definition: tif_swab.c:57