Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygentif_swab.c
Go to the documentation of this file.
00001 /* $Id: tif_swab.c,v 1.4.2.1 2010-06-08 18:50:43 bfriesen Exp $ */ 00002 00003 /* 00004 * Copyright (c) 1988-1997 Sam Leffler 00005 * Copyright (c) 1991-1997 Silicon Graphics, Inc. 00006 * 00007 * Permission to use, copy, modify, distribute, and sell this software and 00008 * its documentation for any purpose is hereby granted without fee, provided 00009 * that (i) the above copyright notices and this permission notice appear in 00010 * all copies of the software and related documentation, and (ii) the names of 00011 * Sam Leffler and Silicon Graphics may not be used in any advertising or 00012 * publicity relating to the software without the specific, prior written 00013 * permission of Sam Leffler and Silicon Graphics. 00014 * 00015 * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 00016 * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 00017 * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. 00018 * 00019 * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR 00020 * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, 00021 * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 00022 * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 00023 * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 00024 * OF THIS SOFTWARE. 00025 */ 00026 00027 /* 00028 * TIFF Library Bit & Byte Swapping Support. 00029 * 00030 * XXX We assume short = 16-bits and long = 32-bits XXX 00031 */ 00032 #include "tiffiop.h" 00033 00034 #ifndef TIFFSwabShort 00035 void 00036 TIFFSwabShort(uint16* wp) 00037 { 00038 register unsigned char* cp = (unsigned char*) wp; 00039 unsigned char t; 00040 00041 t = cp[1]; cp[1] = cp[0]; cp[0] = t; 00042 } 00043 #endif 00044 00045 #ifndef TIFFSwabLong 00046 void 00047 TIFFSwabLong(uint32* lp) 00048 { 00049 register unsigned char* cp = (unsigned char*) lp; 00050 unsigned char t; 00051 00052 t = cp[3]; cp[3] = cp[0]; cp[0] = t; 00053 t = cp[2]; cp[2] = cp[1]; cp[1] = t; 00054 } 00055 #endif 00056 00057 #ifndef TIFFSwabArrayOfShort 00058 void 00059 TIFFSwabArrayOfShort(uint16* wp, register unsigned long n) 00060 { 00061 register unsigned char* cp; 00062 register unsigned char t; 00063 00064 /* XXX unroll loop some */ 00065 while (n-- > 0) { 00066 cp = (unsigned char*) wp; 00067 t = cp[1]; cp[1] = cp[0]; cp[0] = t; 00068 wp++; 00069 } 00070 } 00071 #endif 00072 00073 #ifndef TIFFSwabArrayOfTriples 00074 void 00075 TIFFSwabArrayOfTriples(uint8* tp, unsigned long n) 00076 { 00077 unsigned char* cp; 00078 unsigned char t; 00079 00080 /* XXX unroll loop some */ 00081 while (n-- > 0) { 00082 cp = (unsigned char*) tp; 00083 t = cp[2]; cp[2] = cp[0]; cp[0] = t; 00084 tp += 3; 00085 } 00086 } 00087 #endif 00088 00089 #ifndef TIFFSwabArrayOfLong 00090 void 00091 TIFFSwabArrayOfLong(register uint32* lp, register unsigned long n) 00092 { 00093 register unsigned char *cp; 00094 register unsigned char t; 00095 00096 /* XXX unroll loop some */ 00097 while (n-- > 0) { 00098 cp = (unsigned char *)lp; 00099 t = cp[3]; cp[3] = cp[0]; cp[0] = t; 00100 t = cp[2]; cp[2] = cp[1]; cp[1] = t; 00101 lp++; 00102 } 00103 } 00104 #endif 00105 00106 #ifndef TIFFSwabDouble 00107 void 00108 TIFFSwabDouble(double *dp) 00109 { 00110 register uint32* lp = (uint32*) dp; 00111 uint32 t; 00112 00113 TIFFSwabArrayOfLong(lp, 2); 00114 t = lp[0]; lp[0] = lp[1]; lp[1] = t; 00115 } 00116 #endif 00117 00118 #ifndef TIFFSwabArrayOfDouble 00119 void 00120 TIFFSwabArrayOfDouble(double* dp, register unsigned long n) 00121 { 00122 register uint32* lp = (uint32*) dp; 00123 register uint32 t; 00124 00125 TIFFSwabArrayOfLong(lp, n + n); 00126 while (n-- > 0) { 00127 t = lp[0]; lp[0] = lp[1]; lp[1] = t; 00128 lp += 2; 00129 } 00130 } 00131 #endif 00132 00133 /* 00134 * Bit reversal tables. TIFFBitRevTable[<byte>] gives 00135 * the bit reversed value of <byte>. Used in various 00136 * places in the library when the FillOrder requires 00137 * bit reversal of byte values (e.g. CCITT Fax 3 00138 * encoding/decoding). TIFFNoBitRevTable is provided 00139 * for algorithms that want an equivalent table that 00140 * do not reverse bit values. 00141 */ 00142 static const unsigned char TIFFBitRevTable[256] = { 00143 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0, 00144 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0, 00145 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8, 00146 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8, 00147 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4, 00148 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4, 00149 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec, 00150 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc, 00151 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2, 00152 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2, 00153 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea, 00154 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa, 00155 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6, 00156 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6, 00157 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee, 00158 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe, 00159 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1, 00160 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1, 00161 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9, 00162 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9, 00163 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5, 00164 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5, 00165 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed, 00166 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd, 00167 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3, 00168 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3, 00169 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb, 00170 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb, 00171 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7, 00172 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7, 00173 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef, 00174 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff 00175 }; 00176 static const unsigned char TIFFNoBitRevTable[256] = { 00177 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 00178 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 00179 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 00180 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 00181 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 00182 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 00183 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 00184 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 00185 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 00186 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 00187 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 00188 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 00189 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 00190 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 00191 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 00192 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 00193 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 00194 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 00195 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 00196 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 00197 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 00198 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 00199 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 00200 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 00201 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 00202 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 00203 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 00204 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 00205 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 00206 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 00207 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 00208 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 00209 }; 00210 00211 const unsigned char* 00212 TIFFGetBitRevTable(int reversed) 00213 { 00214 return (reversed ? TIFFBitRevTable : TIFFNoBitRevTable); 00215 } 00216 00217 void 00218 TIFFReverseBits(register unsigned char* cp, register unsigned long n) 00219 { 00220 for (; n > 8; n -= 8) { 00221 cp[0] = TIFFBitRevTable[cp[0]]; 00222 cp[1] = TIFFBitRevTable[cp[1]]; 00223 cp[2] = TIFFBitRevTable[cp[2]]; 00224 cp[3] = TIFFBitRevTable[cp[3]]; 00225 cp[4] = TIFFBitRevTable[cp[4]]; 00226 cp[5] = TIFFBitRevTable[cp[5]]; 00227 cp[6] = TIFFBitRevTable[cp[6]]; 00228 cp[7] = TIFFBitRevTable[cp[7]]; 00229 cp += 8; 00230 } 00231 while (n-- > 0) 00232 *cp = TIFFBitRevTable[*cp], cp++; 00233 } 00234 00235 /* vim: set ts=8 sts=8 sw=8 noet: */ 00236 /* 00237 * Local Variables: 00238 * mode: c 00239 * c-basic-offset: 8 00240 * fill-column: 78 00241 * End: 00242 */ Generated on Sat May 26 2012 04:18:25 for ReactOS by
1.7.6.1
|