/*                        Copyright (c) 1988 Bellcore
 *                            All Rights Reserved
 *       Permission is granted to copy or use this program, EXCEPT that it
 *       may not be sold for profit, the copyright notice must be reproduced
 *       on copies, and credit should be given to Bellcore where it is due.
 *       BELLCORE MAKES NO WARRANTY AND ACCEPTS NO LIABILITY FOR THIS PROGRAM.
 */
/*	$Header: window.h,v 4.2 88/08/12 07:41:26 sau Exp $
	$Source: /tmp/mgrsrc/lib/RCS/window.h,v $
*/
static char	h_window_[] = "$Source: /tmp/mgrsrc/lib/RCS/window.h,v $$Revision: 4.2 $";

/* defines for terminal emulator */

/* text flags - for commands with text string arguments */

#define T_INVALID	0	/* invalid command */
#define T_FONT		1	/* down load a new font */
#define T_MENU		2	/* down load a menu */
#define T_EVENT		3	/* down load an event string */
#define T_YANK		4	/* fill the yank bufffer */
#define T_BITMAP	5	/* down load a bit map */
#define T_COMMAND	6	/* start a new window & command in it */
#define T_GIMME		7	/* send me stuff */
#define T_SMAP		8	/* save a bitmap on a file */
#define T_GMAP		9	/* read a bitmap from a file */
#define T_SEND		10	/* send a message to another application */
#define T_GRUNCH	11	/* fast-draw, short vector mode */
#define T_STRING	12	/* write a text sting into an offscreen bitmap */

/* option codes for GETMODE / SETMODE  */

#define M_STANDOUT	0	/* window is in standout mode  */
#define M_WOB		1	/* window is white on black  */
#define M_AUTOEXPOSE	2	/* expose window upon shell output  */
#define M_BACKGROUND	3	/* permit obscured window to update  */
#define M_NOINPUT	4	/* don't accept keyboard input  */
#define M_NOWRAP	5	/* don't auto wrap  */
#define M_OVERSTRIKE	6	/* overstrike mode  */
#define M_ABS		7	/* use absolute coordinates  */
#define M_ACTIVATE	8	/* activate / hide window; not a mode */
#define M_STACK		12	/* permit event stacking */
#define M_DUPKEY	13	/* set keyboard escape key */
#define M_NOBUCKEY	14	/* prevent mgr processing buckey keys,
				   pass them through to the application */

/* cut/paste options */

#define M_SNARFLINES	9	/* only snarf entire lines */
#define M_SNARFTABS	10	/* change spaces to tabs in snarf */
#define M_SNARFHARD	11	/* snarf even if errors */

/* option codes for GETINFO */

#define G_MOUSE	 	0	/* mouse coordinates  */
#define G_TERMCAP 	1	/* send back termcap entry  */
#define G_WINSIZE 	2	/* cols, lines  */
#define G_FONT	 	3	/* font wide, high, #  */
#define G_COORDS 	4	/* window coords  */
#define G_STATUS 	5	/* window status  */
#define G_ALL	 	6	/* complete window status  */
#define G_SYSTEM 	7	/* system status  */
#define G_ALLFONT 	8	/* font information  */
#define G_TEXT		9	/* text region size */
#define G_ALLMINE  	10	/* window status for client windows */
#define G_CURSOR	11	/* character/ graphics cursor position */
#define G_MOUSE2	12	/* cooked mouse coordinates  */
#define G_NOTIFY	13	/* gimme info re notify windows */
#define G_ID		14	/* my client window number */
#define G_FLAGS		15	/* current window flags */
#define G_MAX		15	/* maximum GETINFO value */

/* option codes for stacking window environment */

#define P_MENU		0x001	/* push menus */
#define P_EVENT		0x002	/* push events */
#define P_FONT		0x004	/* push current font */
#define P_CURSOR	0x008	/* push current cursor position  */
#define P_BITMAP	0x010	/* push saved bitmaps */
#define P_POSITION	0x020	/* push window location */
#define P_WINDOW	0x040	/* push window contents */
#define P_FLAGS		0x080	/* push window flags */
#define P_MOUSE		0x100	/* push mouse position */
#define P_TEXT		0x200	/* push text region */


#define P_ALL		0x3ff	/* push everything */
#define P_MAX		0x400	/* end of codes marker */
#define P_DEFAULT	(P_MENU | P_EVENT | P_FONT | P_FLAGS | P_TEXT)
#define P_CLEAR		0x400	/* clear new environment */

/* menu_flags */

#define MF_SNIP		8	/* don't send action for parent of s/o menu */
#define MF_PAGE		4	/* auto-page for menus */
#define MF_AUTO		2	/* auto-right exit for menus */
#define MF_CLEAR	1	/* clear menu flags */

/* Escape codes */

#define ESC		'\033'	/* escape character */

#define E_MINUS		'-'	/* set the munus flag */
#define E_SEP1		','	/* primary field seperator */
#define E_SEP2		';'	/* secondary field seperator */
#define E_MOUSE		'?'	/* testing  -- move the mouse  */
#define E_ADDLINE	'a'	/* add a new line  */
#define E_ADDCHAR	'A'	/* add a character  */
#define E_BITBLT	'b'	/* do a bit blit  */
#define E_BITCRT	'B'	/* create a bit blit  */
#define E_CLEAREOL	'c'	/* clear  */
#define E_CLEAREOS	'C'	/* clear  */
#define E_DELETELINE	'd'	/* delete a line */
#define E_BITLOAD	'D'	/* download a bitmap  */
#define E_EVENT		'e'	/* download events  */
#define E_DELETECHAR	'E'	/* delete a char */
#define E_DOWN		'f'	/* down 1 line */
#define E_FONT		'F'	/* pick a new font  */
#define E_GO		'g'	/* Go; move graphics pointer  */
#define E_MOVE		'G'	/* move to x,y pixels  */
#define E_SETCURSOR	'h'	/* select cursor style */
#define E_BLEEP		'H'	/* blink a section of the screen */
#define E_GETINFO	'I'	/* get info from mgr */
#define E_STANDOUT	'i'	/* start standout mode */
#define E_FCOLOR	'j'	/* set forground color */
#define E_BCOLOR	'J'	/* set background color */
#define E_LINE		'l'	/* Plot a line  */
#define E_LINK		'L'	/* menu links */
#define E_MENU		'm'	/* download menus */
#define E_CUP		'M'	/* move to col, row (zero origin)  */
#define E_STANDEND	'n'	/* end standout mode */
#define E_CIRCLE	'o'	/* Plot a circle or an ellipse or an arc */
#define E_PUSH		'P'	/* push window environment */
#define E_POP		'p'	/* pop window environment */
#define E_RUBBER	'R'	/* rubber band a line/rect (obsolete) */
#define E_RIGHT		'r'	/* right 1 column  */
#define E_CLEARMODE	's'	/* clear window mode */
#define E_SETMODE	'S'	/* set a window mode */
#define E_TEXTREGION	't'	/* set the text region */
#define E_UPLINE	'u'	/* up 1 line  */
#ifdef atarist
#define E_UP		E_UPLINE  /* Some programs expect E_UP still?? */
#endif
#define E_BITGET	'U'	/* upload a bitmap  */
#define E_SHAPE		'W'	/* reshape window, make it active  */
#define E_SIZE		'w'	/* reshape window: cols,rows  */
#define E_GIMME		'x'	/* send me data */
#define E_PUTSNARF	'y'	/* put the snarf buffer  */
#define E_SNARF		'Y'	/* snarf text into the snarf buffer  */
#define E_VI		'V'	/* set vi mode */
#define E_NOVI		'v'	/* turn off vi mode */
#define E_HALFWIN	'z'	/* make a 1/2 window */
#define E_MAKEWIN	'Z'	/* make/goto a new window */
#define E_NULL		'$'	/* do nothing, force exit */
#define E_SMAP		'>'	/* save a bitmap */
#define E_GMAP		'<'	/* get a bitmap */
#define E_SEND		'|'	/* send a message to another application */
#define E_CURSOR	'%'	/* set mouse cursor */
#define E_GRUNCH	':'	/* graphics crunch mode (experimental) */
#define E_STRING	'.'	/* write characters in offscreen bitmap */
#ifdef XMENU
#define E_XMENU		'X'	/* extended menu operations */
#endif


/* misc */

#define C_NOCHAR	'?'	/* for character not in font */
#define C_EXPOSED	'e'	/* window is not obscured */
#define C_ACTIVE	'a'	/* window has input focus */
#define C_NOTACTIVE	'n'	/* window is obscured */
#define C_OBSCURED	'o'	/* window is obscured */
#define C_NAME		"px|mgr|mgr teminal emulator"

#define C_NULL		'\000'	/* null */
#define C_BS		'\b'	/* back space */
#define C_FF		'\f'	/* form feed */
#define C_BELL		'\007'	/* bell */
#define C_TAB		'\t'	/* tab */
#define C_RETURN	'\r'	/* return */
#define C_NL		'\n'	/* line feed */

/* cursor styles */
#define CS_BLOCK		0		/* standard block cursor */
#define CS_LEFT		1		/* left vertical bar */
#define CS_RIGHT		2		/* right vertical bar */
#define CS_BOX			3		/* outline */
#define CS_UNDER		4		/* underline */
#define CS_INVIS		9		/* invisible */

/* some raster op functions  (for bit_copy) */

#ifndef BIT_NOT
#define BIT_NOT(x)	(~(x))		/* from bitmap.h */
#endif
#define B_SRC		(0xc)
#define B_DST		(0xa)
#define B_OR		(B_SRC|B_DST)
#define B_COPY		(B_SRC)
#define B_COPYINVERTED	((BIT_NOT(B_SRC))&0xf)
#define B_XOR		(B_SRC^B_DST)
#define B_AND		(B_SRC&B_DST)

/* raster op functions  (for bit_write and bit_line) */

#define B_SET		(0xf)
#define B_CLEAR		(0x0)
#define B_INVERT	((BIT_NOT(B_DST))&0xf)

/* where to find icon directory */

#ifndef ICONDIR
#  define ICONDIR		"/usr/mgr/icon"	/* readable by all icons */
#endif

/* other macros */

#define Scalex(x) \
	(W(flags)&W_ABSCOORDS ?  (x) :  (x) * (int)BIT_WIDE(W(window))/GMAX)
#define Scaley(y) \
	(W(flags)&W_ABSCOORDS ?  (y) :  (y) * (int)BIT_HIGH(W(window))/GMAX)
#define Scalexy(y) \
	(W(flags)&W_ABSCOORDS ?  (y) : \
	 (y) * (int)(BIT_HIGH(W(window))+BIT_WIDE(W(window)))/(2*GMAX))

#define FSIZE(c)	((int) (W(font)->head.c))
#define WIDE	        BIT_WIDE(window)
#define HIGH	        BIT_HIGH(window)
#define T_WIDE	        BIT_WIDE(text)
#define T_HIGH	        BIT_HIGH(text)
