home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 11 Util / 11-Util.zip / xloadimg.zip / xloadimage.4.1 / tiff / tif_swab.c < prev    next >
C/C++ Source or Header  |  1993-10-21  |  7KB  |  199 lines

  1. #ifndef lint
  2. static char rcsid[] = "$Header: /usr/people/sam/tiff/libtiff/RCS/tif_swab.c,v 1.12 92/02/10 19:06:03 sam Exp $";
  3. #endif
  4.  
  5. /*
  6.  * Copyright (c) 1988, 1989, 1990, 1991, 1992 Sam Leffler
  7.  * Copyright (c) 1991, 1992 Silicon Graphics, Inc.
  8.  *
  9.  * Permission to use, copy, modify, distribute, and sell this software and 
  10.  * its documentation for any purpose is hereby granted without fee, provided
  11.  * that (i) the above copyright notices and this permission notice appear in
  12.  * all copies of the software and related documentation, and (ii) the names of
  13.  * Sam Leffler and Silicon Graphics may not be used in any advertising or
  14.  * publicity relating to the software without the specific, prior written
  15.  * permission of Sam Leffler and Silicon Graphics.
  16.  * 
  17.  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
  18.  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
  19.  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
  20.  * 
  21.  * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
  22.  * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
  23.  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  24.  * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
  25.  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
  26.  * OF THIS SOFTWARE.
  27.  */
  28.  
  29. /*
  30.  * TIFF Library Bit & Byte Swapping Support.
  31.  *
  32.  * XXX We assume short = 16-bits and long = 32-bits XXX
  33.  */
  34.  
  35. #include "tiffio.h"
  36.  
  37. #ifndef TIFFSwabShort
  38. TIFFSwabShort(wp)
  39.     unsigned short *wp;
  40. {
  41.     register unsigned char *cp = (unsigned char *)wp;
  42.     int t;
  43.  
  44.     t = cp[1]; cp[1] = cp[0]; cp[0] = t;
  45. }
  46. #endif
  47.  
  48. #ifndef TIFFSwabLong
  49. TIFFSwabLong(lp)
  50.     unsigned long *lp;
  51. {
  52.     register unsigned char *cp = (unsigned char *)lp;
  53.     int t;
  54.  
  55.     t = cp[3]; cp[3] = cp[0]; cp[0] = t;
  56.     t = cp[2]; cp[2] = cp[1]; cp[1] = t;
  57. }
  58. #endif
  59.  
  60. #ifndef TIFFSwabArrayOfShort
  61. TIFFSwabArrayOfShort(wp, n)
  62.     unsigned short *wp;
  63.     register int n;
  64. {
  65.     register unsigned char *cp;
  66.     register int t;
  67.  
  68.     /* XXX unroll loop some */
  69.     while (n-- > 0) {
  70.         cp = (unsigned char *)wp;
  71.         t = cp[1]; cp[1] = cp[0]; cp[0] = t;
  72.         wp++;
  73.     }
  74. }
  75. #endif
  76.  
  77. #ifndef TIFFSwabArrayOfLong
  78. TIFFSwabArrayOfLong(lp, n)
  79.     register unsigned long *lp;
  80.     register int n;
  81. {
  82.     register unsigned char *cp;
  83.     register int t;
  84.  
  85.     /* XXX unroll loop some */
  86.     while (n-- > 0) {
  87.         cp = (unsigned char *)lp;
  88.         t = cp[3]; cp[3] = cp[0]; cp[0] = t;
  89.         t = cp[2]; cp[2] = cp[1]; cp[1] = t;
  90.         lp++;
  91.     }
  92. }
  93. #endif
  94.  
  95. /*
  96.  * Bit reversal tables.  TIFFBitRevTable[<byte>] gives
  97.  * the bit reversed value of <byte>.  Used in various
  98.  * places in the library when the FillOrder requires
  99.  * bit reversal of byte values (e.g. CCITT Fax 3
  100.  * encoding/decoding).  TIFFNoBitRevTable is provided
  101.  * for algorithms that want an equivalent table that
  102.  * do not reverse bit values.
  103.  */
  104. #if defined(__STDC__) || defined(__EXTENDED__) || USE_CONST
  105. const unsigned char TIFFBitRevTable[256] = {
  106. #else
  107. unsigned char TIFFBitRevTable[256] = {
  108. #endif
  109.     0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
  110.     0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
  111.     0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
  112.     0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
  113.     0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
  114.     0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
  115.     0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
  116.     0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
  117.     0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
  118.     0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
  119.     0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
  120.     0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
  121.     0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
  122.     0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
  123.     0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
  124.     0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
  125.     0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
  126.     0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
  127.     0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
  128.     0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
  129.     0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
  130.     0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
  131.     0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
  132.     0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
  133.     0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
  134.     0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
  135.     0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
  136.     0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
  137.     0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
  138.     0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
  139.     0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
  140.     0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff
  141. };
  142. #if defined(__STDC__) || defined(__EXTENDED__) || USE_CONST
  143. const unsigned char TIFFNoBitRevTable[256] = {
  144. #else
  145. unsigned char TIFFNoBitRevTable[256] = {
  146. #endif
  147.     0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 
  148.     0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 
  149.     0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 
  150.     0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 
  151.     0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 
  152.     0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 
  153.     0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 
  154.     0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 
  155.     0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 
  156.     0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 
  157.     0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 
  158.     0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 
  159.     0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 
  160.     0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 
  161.     0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 
  162.     0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 
  163.     0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 
  164.     0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 
  165.     0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 
  166.     0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 
  167.     0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 
  168.     0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 
  169.     0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 
  170.     0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 
  171.     0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 
  172.     0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 
  173.     0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 
  174.     0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 
  175.     0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 
  176.     0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 
  177.     0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 
  178.     0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 
  179. };
  180.  
  181. TIFFReverseBits(cp, n)
  182.     register unsigned char *cp;
  183.     register int n;
  184. {
  185.     for (; n > 8; n -= 8) {
  186.         cp[0] = TIFFBitRevTable[cp[0]];
  187.         cp[1] = TIFFBitRevTable[cp[1]];
  188.         cp[2] = TIFFBitRevTable[cp[2]];
  189.         cp[3] = TIFFBitRevTable[cp[3]];
  190.         cp[4] = TIFFBitRevTable[cp[4]];
  191.         cp[5] = TIFFBitRevTable[cp[5]];
  192.         cp[6] = TIFFBitRevTable[cp[6]];
  193.         cp[7] = TIFFBitRevTable[cp[7]];
  194.         cp += 8;
  195.     }
  196.     while (n-- > 0)
  197.         *cp = TIFFBitRevTable[*cp], cp++;
  198. }
  199.