#ifndef XEMU_H
#define XEMU_H

/************************************************************************/

typedef struct
{
  struct Layer_Info *LayerInfo;
  struct Layer *Layer;
  struct BitMap *BitMap;
} Pixmap;

typedef struct
{
  char *Description;
  struct InputXpression InputXpression;
} KeySym;

typedef struct Window *Window;

typedef ULONG Pixel;

typedef int Boolean;

typedef struct TextFont *Font;

/************************************************************************/

void MyXCopyArea(void *, void *, UBYTE, WORD, WORD, WORD, WORD, WORD, WORD);
void MyXFillRectangle(void *, UBYTE, WORD, WORD, WORD, WORD);
void MyXDrawLine(void *, UBYTE, WORD, WORD, WORD, WORD);
void MyXDrawRectangle(Pixmap *, UBYTE, WORD, WORD, WORD, WORD);

#define XCopyArea(Display,From,To,Minterm,SrcX,SrcY,Width,Height,DstX,DstY) \
  MyXCopyArea(&(From),&(To),(UBYTE)(Minterm),(WORD)(SrcX),(WORD)(SrcY),(WORD)(Width),(WORD)(Height),(WORD)(DstX),(WORD)(DstY))

#define XFillRectangle(Display,Dst,Minterm,DstX,DstY,Width,Height) \
  MyXFillRectangle(&(Dst),(UBYTE)(Minterm),(WORD)(DstX),(WORD)(DstY),(WORD)((DstX)+(Width)-1),(WORD)((DstY)+(Height)-1))

#define XDrawLine(Display,Dst,Minterm,FromX,FromY,ToX,ToY) \
  MyXDrawLine(&(Dst),(UBYTE)(Minterm),(WORD)(FromX),(WORD)(FromY),(WORD)(ToX),(WORD)(ToY))

#define XDrawPoint(Display,Dst,Minterm,X,Y) XDrawLine(Display,Dst,Minterm,X,Y,X,Y)

#define XDrawRectangle(Display,Dst,Minterm,FromX,FromY,Width,Height) \
  MyXDrawRectangle(&(Dst),(UBYTE)(Minterm),(WORD)(FromX),(WORD)(FromY),(WORD)(Width+1),(WORD)(Height+1))

#define XSync(a,b) ((void)0)

#define XtNumber(x) ARRAYSIZE(x)

/************************************************************************/

void FillBack(unsigned, unsigned, WORD, WORD, WORD, WORD);

/************************************************************************/

#endif /* XEMU_H */
