/*
 * (C) Copyright 2003-2004
 * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com
 *
 * SPDX-License-Identifier:	GPL-2.0+
 */

/*
 * Neutralize little endians.
 */
#define SWAP_LONG(data) ((unsigned long)                                  \
		         (((unsigned long)(data) >> 24)                 | \
			  ((unsigned long)(data)  << 24)                | \
			  (((unsigned long)(data) >> 8) & 0x0000ff00 )  | \
			   (((unsigned long)(data) << 8) & 0x00ff0000 )))
#define SWAP_SHORT(data) ((unsigned short)                                \
			  (((unsigned short)(data) >> 8 )  |              \
			   ((unsigned short)(data) << 8 )))
#define LOAD_LONG(data)   SWAP_LONG(data)
#define LOAD_SHORT(data)  SWAP_SHORT(data)

#define S1D_WRITE_PALETTE(p,i,r,g,b)					\
	{								\
		out_8(&((uchar*)(p))[palette_index], (uchar)(i));	\
		out_8(&((uchar*)(p))[palette_index], (uchar)(r));	\
		out_8(&((uchar*)(p))[palette_index], (uchar)(g));	\
		out_8(&((uchar*)(p))[palette_index], (uchar)(b));	\
	}

typedef struct
{
    ushort Index;
    uchar  Value;
} S1D_REGS;

typedef struct                       /**** BMP file info structure ****/
{
	unsigned int   biSize;           /* Size of info header */
	int            biWidth;          /* Width of image */
	int            biHeight;         /* Height of image */
	unsigned short biPlanes;         /* Number of color planes */
	unsigned short biBitCount;       /* Number of bits per pixel */
	unsigned int   biCompression;    /* Type of compression to use */
	unsigned int   biSizeImage;      /* Size of image data */
	int            biXPelsPerMeter;  /* X pixels per meter */
	int            biYPelsPerMeter;  /* Y pixels per meter */
	unsigned int   biClrUsed;        /* Number of colors used */
	unsigned int   biClrImportant;   /* Number of important colors */
} BITMAPINFOHEADER;
