#include <X11/Xlib.h>
#include "xftint.h"
int
XftNativeByteOrder (void)
{
int whichbyte = 1;
if (*((char *) &whichbyte))
return LSBFirst;
return MSBFirst;
}
#define swapl(x, n) { \
n = ((char *) (x))[0];\
((char *) (x))[0] = ((char *) (x))[3];\
((char *) (x))[3] = n;\
n = ((char *) (x))[1];\
((char *) (x))[1] = ((char *) (x))[2];\
((char *) (x))[2] = n; }
#define swaps(x, n) { \
n = ((char *) (x))[0];\
((char *) (x))[0] = ((char *) (x))[1];\
((char *) (x))[1] = n; }
#define swapt(x, n) { \
n = ((char *) (x))[0];\
((char *) (x))[0] = ((char *) (x))[2];\
((char *) (x))[2] = n; }
void
XftSwapCARD32 (CARD32 *data, int u)
{
char n;
while (u--)
{
swapl (data, n);
data++;
}
}
void
XftSwapCARD24 (CARD8 *data, int width, int height)
{
int units, u;
char n;
CARD8 *d;
units = width / 3;
while (height--)
{
d = data;
data += width;
u = units;
while (u--)
{
swapt (d, n);
d += 3;
}
}
}
void
XftSwapCARD16 (CARD16 *data, int u)
{
char n;
while (u--)
{
swaps (data, n);
data++;
}
}
void
XftSwapImage (XImage *image)
{
switch (image->bits_per_pixel) {
case 32:
XftSwapCARD32 ((CARD32 *) image->data,
image->height * image->bytes_per_line >> 2);
break;
case 24:
XftSwapCARD24 ((CARD8 *) image->data,
image->bytes_per_line,
image->height);
break;
case 16:
XftSwapCARD16 ((CARD16 *) image->data,
image->height * image->bytes_per_line >> 1);
break;
default:
break;
}
}