|
Packit Service |
1b8107 |
/*
|
|
Packit Service |
1b8107 |
* Copyright © 2002 Keith Packard
|
|
Packit Service |
1b8107 |
*
|
|
Packit Service |
1b8107 |
* Permission to use, copy, modify, distribute, and sell this software and its
|
|
Packit Service |
1b8107 |
* documentation for any purpose is hereby granted without fee, provided that
|
|
Packit Service |
1b8107 |
* the above copyright notice appear in all copies and that both that
|
|
Packit Service |
1b8107 |
* copyright notice and this permission notice appear in supporting
|
|
Packit Service |
1b8107 |
* documentation, and that the name of Keith Packard not be used in
|
|
Packit Service |
1b8107 |
* advertising or publicity pertaining to distribution of the software without
|
|
Packit Service |
1b8107 |
* specific, written prior permission. Keith Packard makes no
|
|
Packit Service |
1b8107 |
* representations about the suitability of this software for any purpose. It
|
|
Packit Service |
1b8107 |
* is provided "as is" without express or implied warranty.
|
|
Packit Service |
1b8107 |
*
|
|
Packit Service |
1b8107 |
* KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
|
Packit Service |
1b8107 |
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
|
Packit Service |
1b8107 |
* EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
|
Packit Service |
1b8107 |
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
|
Packit Service |
1b8107 |
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
|
Packit Service |
1b8107 |
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
Packit Service |
1b8107 |
* PERFORMANCE OF THIS SOFTWARE.
|
|
Packit Service |
1b8107 |
*/
|
|
Packit Service |
1b8107 |
|
|
Packit Service |
1b8107 |
#include "xftint.h"
|
|
Packit Service |
1b8107 |
|
|
Packit Service |
1b8107 |
_X_HIDDEN int
|
|
Packit Service |
1b8107 |
XftNativeByteOrder (void)
|
|
Packit Service |
1b8107 |
{
|
|
Packit Service |
1b8107 |
int whichbyte = 1;
|
|
Packit Service |
1b8107 |
|
|
Packit Service |
1b8107 |
if (*((char *) &whichbyte))
|
|
Packit Service |
1b8107 |
return LSBFirst;
|
|
Packit Service |
1b8107 |
return MSBFirst;
|
|
Packit Service |
1b8107 |
}
|
|
Packit Service |
1b8107 |
|
|
Packit Service |
1b8107 |
/* byte swap a 32-bit value */
|
|
Packit Service |
1b8107 |
#define swapl(x, n) { \
|
|
Packit Service |
1b8107 |
n = ((char *) (x))[0];\
|
|
Packit Service |
1b8107 |
((char *) (x))[0] = ((char *) (x))[3];\
|
|
Packit Service |
1b8107 |
((char *) (x))[3] = n;\
|
|
Packit Service |
1b8107 |
n = ((char *) (x))[1];\
|
|
Packit Service |
1b8107 |
((char *) (x))[1] = ((char *) (x))[2];\
|
|
Packit Service |
1b8107 |
((char *) (x))[2] = n; }
|
|
Packit Service |
1b8107 |
|
|
Packit Service |
1b8107 |
/* byte swap a short */
|
|
Packit Service |
1b8107 |
#define swaps(x, n) { \
|
|
Packit Service |
1b8107 |
n = ((char *) (x))[0];\
|
|
Packit Service |
1b8107 |
((char *) (x))[0] = ((char *) (x))[1];\
|
|
Packit Service |
1b8107 |
((char *) (x))[1] = n; }
|
|
Packit Service |
1b8107 |
|
|
Packit Service |
1b8107 |
/* byte swap a three-byte unit */
|
|
Packit Service |
1b8107 |
#define swapt(x, n) { \
|
|
Packit Service |
1b8107 |
n = ((char *) (x))[0];\
|
|
Packit Service |
1b8107 |
((char *) (x))[0] = ((char *) (x))[2];\
|
|
Packit Service |
1b8107 |
((char *) (x))[2] = n; }
|
|
Packit Service |
1b8107 |
|
|
Packit Service |
1b8107 |
_X_HIDDEN void
|
|
Packit Service |
1b8107 |
XftSwapCARD32 (CARD32 *data, int u)
|
|
Packit Service |
1b8107 |
{
|
|
Packit Service |
1b8107 |
char n;
|
|
Packit Service |
1b8107 |
while (u--)
|
|
Packit Service |
1b8107 |
{
|
|
Packit Service |
1b8107 |
swapl (data, n);
|
|
Packit Service |
1b8107 |
data++;
|
|
Packit Service |
1b8107 |
}
|
|
Packit Service |
1b8107 |
}
|
|
Packit Service |
1b8107 |
|
|
Packit Service |
1b8107 |
_X_HIDDEN void
|
|
Packit Service |
1b8107 |
XftSwapCARD24 (CARD8 *data, int width, int height)
|
|
Packit Service |
1b8107 |
{
|
|
Packit Service |
1b8107 |
int units, u;
|
|
Packit Service |
1b8107 |
char n;
|
|
Packit Service |
1b8107 |
CARD8 *d;
|
|
Packit Service |
1b8107 |
|
|
Packit Service |
1b8107 |
units = width / 3;
|
|
Packit Service |
1b8107 |
while (height--)
|
|
Packit Service |
1b8107 |
{
|
|
Packit Service |
1b8107 |
d = data;
|
|
Packit Service |
1b8107 |
data += width;
|
|
Packit Service |
1b8107 |
u = units;
|
|
Packit Service |
1b8107 |
while (u--)
|
|
Packit Service |
1b8107 |
{
|
|
Packit Service |
1b8107 |
swapt (d, n);
|
|
Packit Service |
1b8107 |
d += 3;
|
|
Packit Service |
1b8107 |
}
|
|
Packit Service |
1b8107 |
}
|
|
Packit Service |
1b8107 |
}
|
|
Packit Service |
1b8107 |
|
|
Packit Service |
1b8107 |
_X_HIDDEN void
|
|
Packit Service |
1b8107 |
XftSwapCARD16 (CARD16 *data, int u)
|
|
Packit Service |
1b8107 |
{
|
|
Packit Service |
1b8107 |
char n;
|
|
Packit Service |
1b8107 |
while (u--)
|
|
Packit Service |
1b8107 |
{
|
|
Packit Service |
1b8107 |
swaps (data, n);
|
|
Packit Service |
1b8107 |
data++;
|
|
Packit Service |
1b8107 |
}
|
|
Packit Service |
1b8107 |
}
|
|
Packit Service |
1b8107 |
|
|
Packit Service |
1b8107 |
_X_HIDDEN void
|
|
Packit Service |
1b8107 |
XftSwapImage (XImage *image)
|
|
Packit Service |
1b8107 |
{
|
|
Packit Service |
1b8107 |
switch (image->bits_per_pixel) {
|
|
Packit Service |
1b8107 |
case 32:
|
|
Packit Service |
1b8107 |
XftSwapCARD32 ((CARD32 *) image->data,
|
|
Packit Service |
1b8107 |
image->height * image->bytes_per_line >> 2);
|
|
Packit Service |
1b8107 |
break;
|
|
Packit Service |
1b8107 |
case 24:
|
|
Packit Service |
1b8107 |
XftSwapCARD24 ((CARD8 *) image->data,
|
|
Packit Service |
1b8107 |
image->bytes_per_line,
|
|
Packit Service |
1b8107 |
image->height);
|
|
Packit Service |
1b8107 |
break;
|
|
Packit Service |
1b8107 |
case 16:
|
|
Packit Service |
1b8107 |
XftSwapCARD16 ((CARD16 *) image->data,
|
|
Packit Service |
1b8107 |
image->height * image->bytes_per_line >> 1);
|
|
Packit Service |
1b8107 |
break;
|
|
Packit Service |
1b8107 |
default:
|
|
Packit Service |
1b8107 |
break;
|
|
Packit Service |
1b8107 |
}
|
|
Packit Service |
1b8107 |
}
|