ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

tif_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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.