1 /* 2 * Copyright 2002 Keith Packard 3 * 4 * Permission to use, copy, modify, distribute, and sell this software and its 5 * documentation for any purpose is hereby granted without fee, provided that 6 * the above copyright notice appear in all copies and that both that 7 * copyright notice and this permission notice appear in supporting 8 * documentation, and that the name of Keith Packard not be used in 9 * advertising or publicity pertaining to distribution of the software without 10 * specific, written prior permission. Keith Packard makes no 11 * representations about the suitability of this software for any purpose. It 12 * is provided "as is" without express or implied warranty. 13 * 14 * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 15 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 16 * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR 17 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 18 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 19 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 20 * PERFORMANCE OF THIS SOFTWARE. 21 */ 22 23 #include "xftint.h" 24 25 _X_HIDDEN int 26 XftNativeByteOrder (void) 27 { 28 int whichbyte = 1; 29 30 if (*((char *) &whichbyte)) 31 return LSBFirst; 32 return MSBFirst; 33 } 34 35 /* byte swap a 32-bit value */ 36 #define swapl(x, n) { \ 37 n = ((char *) (x))[0];\ 38 ((char *) (x))[0] = ((char *) (x))[3];\ 39 ((char *) (x))[3] = n;\ 40 n = ((char *) (x))[1];\ 41 ((char *) (x))[1] = ((char *) (x))[2];\ 42 ((char *) (x))[2] = n; } 43 44 /* byte swap a short */ 45 #define swaps(x, n) { \ 46 n = ((char *) (x))[0];\ 47 ((char *) (x))[0] = ((char *) (x))[1];\ 48 ((char *) (x))[1] = n; } 49 50 /* byte swap a three-byte unit */ 51 #define swapt(x, n) { \ 52 n = ((char *) (x))[0];\ 53 ((char *) (x))[0] = ((char *) (x))[2];\ 54 ((char *) (x))[2] = n; } 55 56 _X_HIDDEN void 57 XftSwapCARD32 (CARD32 *data, int u) 58 { 59 char n; 60 while (u--) 61 { 62 swapl (data, n); 63 data++; 64 } 65 } 66 67 _X_HIDDEN void 68 XftSwapCARD24 (CARD8 *data, int width, int height) 69 { 70 int units, u; 71 char n; 72 CARD8 *d; 73 74 units = width / 3; 75 while (height--) 76 { 77 d = data; 78 data += width; 79 u = units; 80 while (u--) 81 { 82 swapt (d, n); 83 d += 3; 84 } 85 } 86 } 87 88 _X_HIDDEN void 89 XftSwapCARD16 (CARD16 *data, int u) 90 { 91 char n; 92 while (u--) 93 { 94 swaps (data, n); 95 data++; 96 } 97 } 98 99 _X_HIDDEN void 100 XftSwapImage (XImage *image) 101 { 102 switch (image->bits_per_pixel) { 103 case 32: 104 XftSwapCARD32 ((CARD32 *) image->data, 105 image->height * image->bytes_per_line >> 2); 106 break; 107 case 24: 108 XftSwapCARD24 ((CARD8 *) image->data, 109 image->bytes_per_line, 110 image->height); 111 break; 112 case 16: 113 XftSwapCARD16 ((CARD16 *) image->data, 114 image->height * image->bytes_per_line >> 1); 115 break; 116 default: 117 break; 118 } 119 } 120