#ifndef _QPTR_H
#define _QPTR_H
#include <stdarg.h>
/**
 *	This header file is used in conjunction with the QPTR_A library
 *	which allows C programs to exploit the facilities of the QJUMP
 *	Pointer Environment for QDOS
 *
 *	AMENDMENT HISTORY
 *	~~~~~~~~~~~~~~~~~
 *	31 Oct 93	DJW   - Widespread changes to cater for C68 Release 4
 *
 *	01 Jan 94	DJW   - Included definitions needed for the consetup_qpac
 *						routines contibuted by Eric Slagter.
 *
 *	25 May 94	DJW   - removed the ellipses from wm__mhit(), wm__pnsc() and
 *						trap15() declarations as ANSI insists on at least one
 *						parameter of known type (and C68 now enforces this)
 *
 *	13 Aug 94	DJW   - Changed the definition of iop_rspw() to make the last
 *						parameter only a single level of indirection as no
 *						value is returned (unlike iop_svpw() routine).
 *					  - Implemented 'name_hiding' for all routines accessed
 *						via this header file.
 *
 *	28 Mar 95	 JH   - Added typedefs, changed (char *) to (void *) or type
 *						where possible. Kludged wm__mhit, wm__pnsc for
 *						compatibility with existing code (c68 release 4.14e).
**/

#ifndef _SYS_TYPES_H
#include <sys_types.h>
#endif

#ifndef _QLIB_H
#include <sys/qlib.h>
#endif

/**
*	  Main window colours
**/
#define CL_MBORD	0000  /* black */
#define CL_MBACK	0007  /* white		  window attributes */
#define CL_MHIGH	0000  /* black		  item highlight */
#define CL_BBORD	0004  /* green		  button main window border */

#define CL_MFILL	0134  /* greenwhite 	  main area fill */
#define CL_MVERT	0237  /* greenwhite 	  vertical area fill */
#define CL_MSHADE	0037  /* whitegreen 	  shaded */
#define CL_MOUTL	0004  /* green		  and outline */

#define CL_MIUNAV	0004  /* green		  loose item - unavailable */
#define CL_MPUNAV	0007  /* white */
#define CL_MIAVBL	0000  /* black				 - available */
#define CL_MPAVBL	0007  /* white */
#define CL_MISLCT	0007  /* white				 - selected */
#define CL_MPSLCT	0000  /* black */
#define CL_MISLC1	0000  /* black				  (alt) */
#define CL_MPSLC1	0004  /* green */
#define CL_BIAVBL	0000  /* black		  and for buttons */
#define CL_BPAVBL	0007  /* white */
#define CL_BISLCT	0007  /* white */
#define CL_BPSLCT	0000  /* black */

/**
*	  information window colours
**/
#define CL_IBORD	0004  /* green */
#define CL_IBACK	0007  /* white */
#define CL_IINK 	0000  /* black */
#define CL_ILOW 	0002  /* red */

/**
*	  subsidiary information window colours
**/
#define CL_SBORD	0007  /* white */
#define CL_SBACK	0004  /* green */
#define CL_SINK 	0000  /* black */
#define CL_SLOW 	0007  /* white */

/**
*	  White application sub-window colours
**/
#define CL_WBORD	0004  /* green */
#define CL_WBACK	0007  /* white		  window attributes */
#define CL_WINK 	0000  /* black */
#define CL_WHIGH	0000  /* black */

#define CL_WIUNAV	0004  /* green		  item - unavailable */
#define CL_WPUNAV	0007  /* white */
#define CL_WIAVBL	0000  /* black			   - available */
#define CL_WPAVBL	0007  /* white */
#define CL_WISLCT	0000  /* black			   - selected */
#define CL_WPSLCT	0004  /* green */

#define CL_WRROW	0004  /* green		  pan / scroll */
#define CL_WBARB	0007  /* white */
#define CL_WBARS	0000  /* black */

/**
*	error colours
**/
#define CL_ERPAP	0002  /* red		  error paper */
#define CL_ERINK	0007  /* white		  error ink */


/**
*	default XY
**/
#define DEFXY		(short) -1, (short) -1	 /* x,y = -1,-1 error paper */

/*
 * Typedefs for QPTR structure
 */

typedef unsigned char qchar_t;
typedef struct WM_sprite WM_sprite_t;
typedef struct WM_sprite WM_blob_t;
typedef struct WM_sprite WM_pattern_t;
typedef struct WM_wwork  WM_wwork_t;
typedef struct WM_wstat  WM_wstat_t;
typedef struct WM_wscale WM_wscale_t;
typedef struct WM_appl	 WM_appl_t;
typedef struct WM_appw	 WM_appw_t;
typedef struct WM_info	 WM_info_t;
typedef struct WM_infw	 WM_infw_t;
typedef struct WM_litm	 WM_litm_t;
typedef struct WM_prec	 WM_prec_t;
typedef struct WM_splst  WM_splst_t;
typedef struct WM_action WM_action_t;
typedef struct WM_pwcb	 WM_pwcb_t;
typedef struct WM_mobj	 WM_mobj_t;
typedef struct WM_rowl	 WM_rowl_t;
typedef struct WM_mctrl  WM_mctrl_t;

/**
*	Text macros
**/


typedef struct QD_text {
        short len; 
        qchar_t chrs[1];
        } QD_text_t;

#define QD_TEXT(l) struct {short len; qchar_t chrs[(l)+1];}
							   /* QDOS text structure */
#define QD_TEXTN(n,l) struct n {short len; qchar_t chrs[(l)+1];}
							   /* .. with name */
#define QD_TEXTI(i,t) QD_TEXT (sizeof(t)-1) i = {(sizeof(t)-1),t}
							   /* .. initialised */
#define QD_STXT(s,t,l) strncpy ((char *)((s).chrs), t, (size_t)l); \
			   (s).chrs[l]=0; \
			   (s).len=strlen((char *)((s).chrs))
			   /* copies up to l chars from char *t to QD_text s) */

#define NO_WCLEAR	-32768 /* no clear flag in attributes */

#define TYP_TEXT	(char) 0	  /* standard object types */
#define TYP_SPRITE	(char) 2
#define TYP_BLOB	(char) 4
#define TYP_PATT	(char) 6

/*
 *	Pointer Events
 */
#define PT_KYSTK  0x01	  /* keystroke in window event */
#define PT_KYPRS  0x02	  /* key still pressed in window event	*/
#define PT_KEYUP  0x04	  /* key up in window event */
#define PT_MOVE   0x08	  /* pointer move event */
#define PT_OUTWN  0x10	  /* pointer out of window */
#define PT_INWIN  0x20	  /* pointer in window */

#define PT_WQURY  0x80	  /* window query request */
#define PT_WMOVR  0x81	  /* window move request */
#define PT_WSIZR  0x82	  /* window resize request */

#define PT_SPLIT  0x0100  /* split sub-window */
#define PT_JOIN   0x0200  /* join sub-window */
#define PT_PAN	  0x0400  /* pan sub-window */
#define PT_SCROL  0x0800  /* scroll sub-window */

#define PT_DO	 0x010000 /* do command */
#define PT_CAN	 0x020000 /* cancel command */
#define PT_HELP  0x040000 /* help!!! */
#define PT_WMOVE 0x080000 /* move */
#define PT_WSIZE 0x100000 /* size */
#define PT_ZZZZ  0x200000 /* sleep */
#define PT_WAKE  0x400000 /* wake */

/*
 *	Pointer Event Bits
 */
#define PT__KYST  0 	/* keystroke  in window event bit */
#define PT__KYPR  1 	/* keypress in window event bit */
#define PT__KYUP  2 	/* key up in window event bit */
#define PT__MOVE  3 	/* pointer move event bit */
#define PT__OUTW  4 	/* pointer out of window bit */
#define PT__INWN  5 	/* pointer in window bit */

#define PT__SPLT  8 	/* split sub-window */
#define PT__JOIN  9 	/* join sub-window */
#define PT__PAN   10	/* pan sub-window */
#define PT__SCRL  11	/* scroll sub-window */

#define PT__DO	  16	/* do command */
#define PT__CAN   17	/* cancel command */
#define PT__HELP  18	/* help!!! */
#define PT__WMOV  19	/* window move */
#define PT__WSIZ  20	/* window size */
#define PT__ZZZZ  21	/* sleep */
#define PT__WAKE  22	/* wake */

/*
 *	Event Keystrokes
 */
#define K_HIT	 1		/* single hit  */
#define K_DO	 2		/* double hit (do) */
#define K_CANCEL 3		/* cancel */
#define K_HELP	 4		/* help */
#define K_MOVE	 5		/* window move	*/
#define K_SIZE	 6		/* window size */
#define K_SLEEP  7		/* sleep */
#define K_WAKE	 8		/* ... and wake */

#define K_TAB	 9		/* next one up */

/**
*	Status values
**/

#define WSI_UNAV 0x10	/* unavailable */
#define WSI_AVBL 0x00	/* available */
#define WSI_SLCT 0x80	/* selected */
#define WSI_MKUN 0x11	/* re-draw, making unavailable */
#define WSI_MKAV 0x01	/* re-draw, making available */
#define WSI_MKSL 0x81	/* re-draw, making selected */
#define WSI__CHG 0x00	/* bit 0 set if item status changed */

/**
*	 Pan / scroll allowances (assuming border widths of 1)
**/

#define WW_XARROW 12	/* x allowance for arrows (pan) */
#define WW_YARROW 6 	/* y allowance for arrows (scroll) */
#define WW_XBAR   8 	/* x allowance for bar (scroll) */
#define WW_YBAR   5 	/* y allowance for bar (pan) */



/**
*	Window structures
**/

/*
 *	window size and position
 */
typedef struct WM_wsiz 
{
   short	xsize;		/* X size */
   short	ysize;
   short	xorg;
   short	yorg;		/* Y origin */
} WM_wsiz_t;


/*
 *	window attributes
 */
typedef struct WM_wattr
{
   short	flag;		/* -32768 if no clear + shadow */
   short	borw;		/* border width */
   short	borc;		/* border colour */
   short	papr;		/* paper colour */
} WM_wattr_t;


/*
 *	sub-window definition
 */

typedef struct WM_swdef
{
   short		 xsize; 	/* X size */
   short		 ysize;
   short		 xorg;
   short		 yorg;		/* Y origin */
   short		 flag;		/* -32768 if no clear, +256 if cursor keys + shadow */
   short		 borw;		/* border width */
   short		 borc;		/* border colour */
   short		 papr;		/* paper colour */
   WM_sprite_t * sprite;	/* pointer to sprite */
} WM_swdef_t;


/*
 *	window working definition
 */
struct WM_wwork
{
   WM_wstat_t *  wstat; 	 /* pointer to status area */
   WM_wscale_t * wscale;	 /* this was pointer to WDEF */
   long 		 chid;
   WM_prec_t *	 pprec; 	 /* pointer to pointer record */
   long 		 psave; 	 /* pointer position saved */
   long 		 spar1;
   short		 spar2;
   char 		 spar3;
   char 		 pulld; 	 /* pulldown flag */
   void *		 splst; 	 /* pointer to strite list (usually the same as pappl) */

   short		  xsize;	/* X size */
   short		  ysize;
   short		  xorg;
   short		  yorg; 	/* Y origin */
   short		  flag; 	/* -32768 if no clear + shadow */
   short		  borw; 	/* border width */
   short		  borc; 	/* border colour */
   short		  papr; 	/* paper colour */
   void *		  sprite;	/* pointer to sprite */

   short		  curw;
   short		  curc;
   short		  uback;	/* unavaliable attributes */
   short		  uink;
   WM_blob_t *	  ublob;
   WM_pattern_t * upatt;
   short		  aback;	/* available attributes */
   short		  aink;
   WM_blob_t *	  ablob;
   WM_pattern_t * apatt;
   short		  sback;	/* selected attributes */
   short		  sink;
   WM_blob_t *	  sblob;
   WM_pattern_t * spatt;

   void *		  help;

   short		  ninfo;	/* the numbers of and pointers to the bits */
   short		  ninob;
   WM_infw_t *	  pinfo;
   short		  nlitm;
   WM_litm_t *	  plitm;
   short		  nappl;
   WM_appl_t *	  pappl;
};

/*
 *	Information window
 */
struct WM_infw
{
   short		xsize;		/* X size */
   short		ysize;
   short		xorg;
   short		yorg;		/* Y origin */
   short		flag;		/* -32768 if no clear */
   short		borw;		/* border width */
   short		borc;		/* border colour */
   short		papr;		/* paper colour */
   WM_info_t *	pobl;		/* pointer to info objects */
};

/*
 *	information object
 */
struct WM_info
{
   short xsize; 		/* X size */
   short ysize;
   short xorg;
   short yorg;			/* Y origin */
   char  type;			/* item type */
   char  spar;
   union
   {  struct
	  {  short ink;     /* text ink */
		 char  cwid;	/* character width */
		 char  chgt;	/* character height */
	  } t;
	  void * comb;		/* pattern or blob to combine */
   } attr;
   void * pobj; 		/* pointer to object */
};

/*
 *	loose item
 */
struct WM_litm
{
   short xsize;    /* X size */
   short ysize;
   short xorg;
   short yorg;	   /* Y origin */

   char  xjst;	   /* justification */
   char  yjst;
   char  type;	   /* standard object types */
   char  skey;	   /* selection keystroke */
   void  *pobj; 	/* pointer to object */
   short item;	   /* item number */
   WM_action_t *pact;  /* pointer to action routine */
};

struct WM_appl
{  WM_appw_t *pappw; /* pointers to application sub-windows */
};

/*
 *	application sub-window
 */
struct WM_appw
{
   short xsize;    /* X size */
   short ysize;
   short xorg;
   short yorg;	   /* Y origin */
   short flag;	   /* -32768 if no clear */
   short borw;	   /* border width */
   short borc;	   /* border colour */
   short papr;	   /* paper colour */
   void *pspr;	   /* pointer to sprite */
   WM_action_t *draw;	/* pointer to draw routine */
   WM_action_t *hit;	/* pointer to hit routine */
   WM_action_t *ctrl;	/* pointer to control routine */
   short nxsc;	   /* maximum number of x sections */
   short nysc;	   /* .... and y */
   char  skey;	   /* selection keystroke */
   char  spr1;
   short spr2;
			/* X part control block */
   WM_pwcb_t *xpwcb;
   short xinsz; 	/* index size and spacing (not implemented) */
   short xinsp;
   short xiciw; 	/* index current item border width and colour (not imp) */
   short xicic;
   short xiback;	/* index item attributes */
   short xiink;
   WM_blob_t *xiblob;
   WM_blob_t *xipatt;
   short xpsac; 	/* pan/scroll arrow colour */
   short xpsbc; 	/* pan/scroll bar colour */
   short xpssc; 	/* pan/scroll bar section colour */
			/* Y part control block */
   WM_pwcb_t *ypwcb;
   short yinsz; 	/* index size and spacing (not implemented) */
   short yinsp;
   short yiciw; 	/* index current item border width and colour (not imp) */
   short yicic;
   short yiback;	/* index item attributes */
   short yiink;
   WM_blob_t *yiblob;
   WM_pattern_t *yipatt;
   short ypsac; 	/* pan/scroll arrow colour */
   short ypsbc; 	/* pan/scroll bar colour */
   short ypssc; 	/* pan/scroll bar section colour */
   void *pstat;    /* pointer to status area for this app sub-window (C68) */
};

/*
 *	menu window
 */
struct WM_menw
{
   short xsize;    /* X size */
   short ysize;
   short xorg;
   short yorg;	   /* Y origin */
   short flag;	   /* -32768 if no clear */
   short borw;	   /* border width */
   short borc;	   /* border colour */
   short papr;	   /* paper colour */
   void *pspr;	   /* pointer to sprite */
   WM_action_t *draw;	/* pointer to draw routine */
   WM_action_t *hit;	/* pointer to hit routine */
   WM_action_t *ctrl;	/* pointer to control routine */
   short nxsc;	   /* maximum number of x sections */
   short nysc;	   /* .... and y */
   char  skey;	   /* selection keystroke */
   char  spr1;
   short spr2;
			/* X part control block */
   WM_pwcb_t *xpwcb;
   short xinsz; 	/* index size and spacing (not implemented) */
   short xinsp;
   short xiciw; 	/* index current item border width and colour (not imp) */
   short xicic;
   short xiback;	/* index item attributes */
   short xiink;
   WM_blob_t *xiblob;
   WM_pattern_t *xipatt;
   short xpsac; 	/* pan/scroll arrow colour */
   short xpsbc; 	/* pan/scroll bar colour */
   short xpssc; 	/* pan/scroll bar section colour */
			/* Y part control block */
   WM_pwcb_t *ypwcb;
   short yinsz; 	/* index size and spacing (not implemented) */
   short yinsp;
   short yiciw; 	/* index current item border width and colour (not imp) */
   short yicic;
   short yiback;	/* index item attributes */
   short yiink;
   WM_blob_t *yiblob;
   WM_pattern_t *yipatt;
   short ypsac; 	/* pan/scroll arrow colour */
   short ypsbc; 	/* pan/scroll bar colour */
   short ypssc; 	/* pan/scroll bar section colour */

   char *mstt;	   /* pointer to menu status area */
   short curw;
   short curc;
   short uback;    /* unavaliable attributes */
   short uink;
   WM_blob_t *ublob;
   WM_pattern_t *upatt;
   short aback;    /* available attributes */
   short aink;
   WM_blob_t *ablob;
   WM_pattern_t *apatt;
   short sback;    /* selected attributes */
   short sink;
   WM_blob_t *sblob;
   WM_pattern_t *spatt;

   short ncol;	  /* number of columns */
   short nrow;	  /* number of rows */
   short xoff;	  /* x offset */
   short yoff;	  /* y offset */

   union
   {  struct
	  {  short _size;        /* minus the size */
	 short _spce;		 /* and minus spacing */
	  } c;
	  WM_splst_t *xspc;    /* or pointer to spacing list */
   }xs;
   union
   {  struct
	  {  short _size;        /* minus the size */
	 short _spce;		 /* and minus spacing */
	  } c;
	  WM_splst_t *xspc;    /* or pointer to spacing list */
   }ys;

   WM_mobj_t *xind;   /* x index list */
   WM_mobj_t *yind;   /* y index list */

   WM_rowl_t *rowl;   /* row list */
};

/*
 *	spacing list
 */
struct WM_splst
{
   short size;	  /* item size */
   short spce;	  /* and spacing */
};

/*
 *	row list
 */

struct WM_rowl
{
   WM_mobj_t *rows;  /* start of row */
   WM_mobj_t *rowe;  /* end of row */
};

/*
 *	menu object / index
 */
struct WM_mobj
{
   char xjst;	 /* x justification */
   char yjst;	 /* y justifiaction */
   char type;	 /* type of object */
   char skey;	 /* selection key */
   void *pobj;	 /* pointer to object */
   short item;	 /* item number */
   WM_action_t *pact;  /* action routine */
};

/*
 *	action routine interface structure.
 *
 *	The first (long or short depending on the processor) word
 *	must be the JSR to the appropriate interface routine
 *	in the following pointer. The second pointer points to the
 *	C routine.
 */
struct WM_action
{
	short __jsr_______;
	void *__interface_;
	void *__function__;
};

#define JSR 0x4EB9	  /* MC68000 constant for JSR */

/*
 *	window status area
 */
struct WM_wstat
{
   WM_wwork_t *wwork; /* point back to work def */
   void *wdef;		/* this was wdef */

   /* struct WM_prec */
	  long	chid;	   /* channel ID enclosing pointer */
	  short swnr;	   /* sub-window number enc pointer */
	  short xpos;	   /* pointer position in sub-window */
	  short ypos;

	  char	kstk;	   /* key stroke */
	  char	kprs;	   /* key press */
	  long	evnt;	   /* event vector */

	  short xsiz;	   /* X size of sub-window */
	  short ysiz;
	  short xorg;
	  short yorg;	   /* Y origin */

   short ptpsx; 	/* pointer position (abs) */
   short ptpsy;
   short wmode; 	/* window mode */
   short spar0;
   long  spar1;

   void *ciact; 	/* current item "action" */
   short citem; 	/* current item */
   short cibrw; 	/* current item border width */
   short cipap; 	/* current item paper colour */
   short cispr;
   short cihxs; 	/* X hit size */
   short cihys;
   short cihxo;
   short cihyo; 	/* Y hit origin */
   char  litem[40];
};

/*
 *	pointer record
 */
struct WM_prec
{
   chanid_t  chid;		 /* channel ID enclosing pointer */
   unsigned   short swnr;		/* sub-window number enc pointer */
   signed	  short xpos;		/* pointer position in sub-window */
   signed	  short ypos;

   unsigned   char	kstk;		/* key stroke */
   unsigned   char	kprs;		/* key press */
   unsigned   long	evnt;		/* event vector */

   signed	  short xsiz;		/* X size of sub-window */
   signed	  short ysiz;
   signed	  short xorg;
   signed	  short yorg;		/* Y origin */
};

#define WM_PWCB(n) struct {short nsec; struct{short pos;short stt;short siz;}s[n];}

/*
 *	part window control block - non-splitable windows
 */
struct WM_pwcb
{
   short nsec;		/* number of sections */
   struct
   {  short pos;       /* section position */
	  short stt;	   /* section start column or row */
	  short siz;	   /* section size (columns or rows */
   } s[1];
};

/*
 *	menu control structure
 */
struct WM_mctrl
{
   short psit;		/* pan scroll item */
   short hitp;		/* hit position on bar */
   short barl;		/* bar length */
   short evnt;		/* pan scroll event */
};

/*
 *	window scaling structure
 */
#define WM_WSCALE(n) struct {short xmin,ymin,xmax,ymax,xinc,yinc; char s8[n][4];}
struct WM_wscale {short xmin,ymin,xmax,ymax,xinc,yinc; char s8[1][4];};

/*
 *	Structure of sprites, blobs and patterns
 */
struct WM_sprite
{  short form;         /* form  */
   char  time;		   /* ticks for this state */
   char  adapt; 	   /* adaption = 0 */
   short xsize;
   short ysize;
   short xorg;
   short yorg;
   long  patt;		  /* rel pointers -- to pattern   (==0 for blob) */
   long  mask;		  /*   -- to mask - note bits (patt & !mask) are xored */
   long  next;		  /*   -- to next */
};


#define WM_blob    WM_sprite	  /* Sprite amd blob have same data structure */
#define WM_pattern WM_sprite	  /* Sprite and Pattern have same data structure */

#define FORM_QL4 0x0100
#define FORM_QL8 0x0101

#define SP_patt 12	/* offsets for fudge */
#define SP_mask 16
#define SP_next 20

/*
 *	Pre-defined sprites that are available
 *	in the C68 QPTR library
 */
extern WM_sprite_t wm_sprite_arrow;
extern WM_sprite_t wm_sprite_cf1;
extern WM_sprite_t wm_sprite_cf2;
extern WM_sprite_t wm_sprite_cf3;
extern WM_sprite_t wm_sprite_cf4;
extern WM_sprite_t wm_sprite_f1;
extern WM_sprite_t wm_sprite_f2;
extern WM_sprite_t wm_sprite_f3;
extern WM_sprite_t wm_sprite_f4;
extern WM_sprite_t wm_sprite_f5;
extern WM_sprite_t wm_sprite_f6;
extern WM_sprite_t wm_sprite_f7;
extern WM_sprite_t wm_sprite_f8;
extern WM_sprite_t wm_sprite_f9;
extern WM_sprite_t wm_sprite_f10;
extern WM_sprite_t wm_sprite_hand;
extern WM_sprite_t wm_sprite_insg;
extern WM_sprite_t wm_sprite_insl;
extern WM_sprite_t wm_sprite_left;
extern WM_sprite_t wm_sprite_move;
extern WM_sprite_t wm_sprite_null;
extern WM_sprite_t wm_sprite_size;
extern WM_sprite_t wm_sprite_sleep;
extern WM_sprite_t wm_sprite_wake;
extern WM_sprite_t wm_sprite_zero;

/*
 *	#defines to keep backwards compatibility
 *	with earlier releases of the QPTR library
 */
#define mes_arrow	wm_sprite_arrow
#define mes_cf1 	wm_sprite_cf1
#define mes_cf2 	wm_sprite_cf2
#define mes_cf3 	wm_sprite_cf3
#define mes_cf4 	wm_sprite_cf4
#define mes_f1		wm_sprite_f1
#define mes_f2		wm_sprite_f2
#define mes_f3		wm_sprite_f3
#define mes_f4		wm_sprite_f4
#define mes_f5		wm_sprite_f5
#define mes_f6		wm_sprite_f6
#define mes_f7		wm_sprite_f7
#define mes_f8		wm_sprite_f8
#define mes_f9		wm_sprite_f9
#define mes_f10 	wm_sprite_f10
#define mes_hand	wm_sprite_hand
#define mes_insg	wm_sprite_insg
#define mes_insl	wm_sprite_insl
#define mes_left	wm_sprite_left
#define mes_move	wm_sprite_move
#define mes_null	wm_sprite_null
#define mes_size	wm_sprite_size
#define mes_slee	wm_sprite_sleep
#define mes_wake	wm_sprite_wake
#define mes_zero	wm_sprite_zero


/*
 *	Namespace hiding definitions.
 *
 *	This protects all names in this header file that are used
 *	internally within this library. from inadvertently being
 *	replcae by ones from the user program.	It also conforms
 *	to the ANSI requirement to not unecessarily corrupt the
 *	namespace of a program.
 */
#define iop_flim	_iop_flim
#define iop_lblb	_iop_lblb
#define iop_outl	_iop_outl
#define iop_pick	_iop_pick
#define iop_pinf	_iop_pinf
#define iop_rptr	_iop_rptr
#define iop_rpxl	_iop_rpxl
#define iop_rspw	_iop_rspw
#define iop_slnk	_iop_slnk
#define iop_svpw	_iop_svpw
#define iop_spry	_iop_spry
#define iop_sptr	_iop_sptr
#define iop_swdf	_iop_swdf
#define iop_wblb	_iop_wblb
#define iop_wrst	_iop_wrst
#define iop_wsav	_iop_wsav
#define iop_wspt	_iop_wspt


#define wm_actli	_wm_actli
#define wm_actme	_wm_actme
#define wm_ctlaw	_wm_ctlaw
#define wm_drwaw	_wm_drwaw
#define wm_hitaw	_wm_hitaw

/**
 *	Function prototypes
 *
 *	Function declarations for all the routines that are
 *	in the LIBQPTR_A library.
**/

#ifdef __STDC__
#define _P_(params) params
#else
#define _P_(params) ()
#endif

/*
 *	Pointer Environment Trap Interface
 *	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 *	These are the calls that map onto the new Pointer Interface traps.
 */
int 	iop_flim	_P_((chanid_t, timeout_t, WM_wsiz_t *));
int 	iop_lblb	_P_((chanid_t, timeout_t, short, short, short, short, \
						 WM_blob_t *, WM_pattern_t *));
int 	iop_outl	_P_((chanid_t, timeout_t, short, short, short, void *));
int 	iop_pick	_P_((chanid_t, timeout_t, jobid_t));
void *	iop_pinf	_P_((chanid_t, timeout_t, long *));
int 	iop_rptr	_P_((chanid_t, timeout_t, short *, short *, unsigned char, \
						void *));
int 	iop_rpxl	_P_((chanid_t, timeout_t, short *, short *, short, short *));
int 	iop_rspw	_P_((chanid_t, timeout_t, WM_wsiz_t *, short, short, int, \
						 void *));
void *	iop_slnk	_P_((chanid_t, timeout_t, void *, short, short));
int 	iop_svpw	_P_((chanid_t, timeout_t, WM_wsiz_t *, short, short, \
						 short, short, void **));
int 	iop_spry	_P_((chanid_t, timeout_t, short, short, WM_blob_t *, \
						 WM_pattern_t *, long));
int 	iop_sptr	_P_((chanid_t, timeout_t, short *, short *, char));
int 	iop_swdf	_P_((chanid_t, timeout_t, void *));
int 	iop_wblb	_P_((chanid_t, timeout_t, short, short, WM_blob_t *, \
						 WM_pattern_t *));
int 	iop_wrst	_P_((chanid_t, timeout_t, void *, char));
int 	iop_wsav	_P_((chanid_t, timeout_t, void *, long));
int 	iop_wspt	_P_((chanid_t, timeout_t, short, short, WM_sprite_t *));

/*
 *	Window Manager Interface
 */
/*	name hiding definitions */
#define wm_chwin	_wm_chwin
#define wm_drbdr	_wm_drbdr
#define wm_ename	_wm_ename
#define wm_erstr	_wm_erstr
#define wm_fsize	_wm_fsize
#define wm_idraw	_wm_idraw
#define wm_index	_wm_index
#define wm_ldraw	_wm_ldraw
#define wm_mdraw	_wm_mdraw
#define wm_mhit 	_wm_mhit
#define wm_msect	_wm_msect
#define wm_pansc	_wm_pansc
#define wm_prpos	_wm_prpos
#define wm_pulld	_wm_pulld
#define wm_rname	_wm_rname
#define wm_rptr 	_wm_rptr
#define wm_setup	_wm_setup
#define wm_smenu	_wm_smenu
#define wm_stlob	_wm_stlob
#define wm_stiob	_wm_stiob
#define wm_swapp	_wm_swapp
#define wm_swdef	_wm_swdef
#define wm_swinf	_wm_swinf
#define wm_swlit	_wm_swlit
#define wm_swsec	_wm_swsec
#define wm_unset	_wm_unset
#define wm_upbar	_wm_upbar
#define wm_wdraw	_wm_wdraw
#define wm_wrset	_wm_wrset
#define wm_clbdr	_wm_clbdr
#define wm_cluns	_wm_cluns
#define wm_drbdr	_wm_drbdr
#define wm_findv	_wm_findv

/*
 * The real compatibility kludge
 */
 
#define wm__pnsc	(WM_action_t *)_wm__pnsc
#define wm__mhit	(WM_action_t *)_wm__mhit

/*	now the real prototypes */
int 	 wm_chwin  _P_((WM_wwork_t *, short *, short *));
int 	 wm_drbdr  _P_((WM_wwork_t *));
int 	 wm_ename  _P_((chanid_t, QD_text_t *));
int 	 wm_erstr  _P_((long, QD_text_t *));
int 	 wm_fsize  _P_((short *, short *, void *));
int 	 wm_idraw  _P_((WM_wwork_t *, long));
int 	 wm_index  _P_((WM_wwork_t *, WM_swdef_t *));
int 	 wm_ldraw  _P_((WM_wwork_t *, char));
int 	 wm_mdraw  _P_((WM_wwork_t *, WM_swdef_t *, char));
int 	 wm_mhit   _P_((WM_wwork_t *, WM_appw_t *, short, short, short, short));
int 	 wm_msect  _P_((WM_wwork_t *, WM_appw_t *, short, short, short, short, \
						WM_mctrl_t *));
int 	 wm_pansc  _P_((WM_wwork_t *, WM_appw_t *, WM_mctrl_t *));
int 	 wm_prpos  _P_((WM_wwork_t *, short, short));
int 	 wm_pulld  _P_((WM_wwork_t *, short, short));
int 	 wm_rname  _P_((chanid_t, QD_text_t *));
int 	 wm_rptr   _P_((WM_wwork_t *));
int 	 wm_setup  _P_((chanid_t, short, short, void *, WM_wstat_t *, \
						WM_wwork_t **, long));
int 	 wm_smenu  _P_((short, short, WM_wstat_t *, void **, WM_wwork_t **));
int 	 wm_stlob  _P_((WM_wwork_t *, void *, short));
int 	 wm_stiob  _P_((WM_wwork_t *, void *, short, short));
chanid_t wm_swapp  _P_((WM_wwork_t *, short, long));
chanid_t wm_swdef  _P_((WM_wwork_t *, WM_appw_t *, chanid_t));
chanid_t wm_swinf  _P_((WM_wwork_t *, short, long));
chanid_t wm_swlit  _P_((WM_wwork_t *, short, long));
chanid_t wm_swsec  _P_((WM_wwork_t *, WM_appw_t *, short, short, long));
int 	 wm_unset  _P_((WM_wwork_t *));
int 	 wm_upbar  _P_((WM_wwork_t *, WM_swdef_t *, short, short));
int 	 wm_wdraw  _P_((WM_wwork_t *));
int 	 wm_wrset  _P_((WM_wwork_t *));
/*
 *	C68 extensions to standard Window Manager set
 */
int 	 wm_clbdr  _P_((WM_wwork_t *));
int 	 wm_cluns  _P_((WM_wwork_t *));
int 	 wm_drbdr  _P_((WM_wwork_t *));
void *	 wm_findv  _P_((chanid_t));
/*
 *	Routines that cannot be called direct from C,
 *	but are are used in initialising structures.
 *	Underscores added by jh
 */
void *	_wm__mhit _P_((void));
void *	_wm__pnsc _P_((void));
/*
 *	Button Frame routines
 */
/* name hiding definitions */
#define bt_frame	_bt_frame 
#define bt_free 	_bt_free
#define bt_prpos	_bt_prpos
#define trap15		_Trap15
/* now the real prototypes */
int 	bt_frame	_P_((chanid_t, WM_swdef_t *));
int 	bt_free 	_P_((void));
int 	bt_prpos	_P_((WM_wwork_t *));
int 	trap15		_P_((void *,...));

/*
 *	Action routine wrappers
 */
int 	wm_actli	_P_((void));
int 	wm_actme	_P_((void));
int 	wm_ctlaw	_P_((void));
int 	wm_drwaw	_P_((void));
int 	wm_hitaw	_P_((void));

#define AHIT_NORMAL 65535  /* normal return from application sub-window hit */

/*
 *	Routines defined in consetup_qpac module
 */
void	consetup_qpac		_P_((chanid_t, WINDOWDEF_t *));
int consetup_qpac_move	_P_((chanid_t));
int consetup_qpac_resize	_P_((chanid_t));
int consetup_qpac_sleep _P_((chanid_t));
int consetup_qpac_poll	_P_((chanid_t));

/*
 *	Generic useful Pointer Environment routines
 */
int outlmove	_P_((chanid_t));

#undef _P_

#endif	 /* _QPTR_H */
