//CHATDIS.D - Bob Sproull - Display protocol definitions// Copyright Xerox Corporation 1979// modified: April 13, 1979  5:42 PM (E. Taft)//Note: Display dimensions defined in Chat.d, which must precede//Strike font formatstructure STRIKE[	oneBit		bit		//=1 to mean new style font	index		bit	fixed		bit	blank		bit 13	min		word		//Lowest char code	max		word		//Highest char code	maxwidth	word		//Maximum width	length		word		//Number of words in strike body	ascent		word		// above baseline	descent		word		// below baseline	xoffset		word		// for kerning	raster		word		//# words per scan line	bitmap		word		// raster*height//	xpostable	]//In-core version with pointer to xpostable:structure STRIK[	xPosTable	word		//Pointer to table of xpositions	@STRIKE				//Regular strike	]//A "window" on part of the screen:structure LIMITS[	Left		word		//0 to XMax; -1 => limits are illegal	Right		word		// ditto	Top		word		// 0 => top of screen	Bottom		word		//   	]//A "region" in which characters may be displayed:structure REG[	@BBC				//BitBlt block for displaying them//index 16:	@LIMITS				//Where the region lies	BBCValid	word		//True if BBC is believed to be set up	SimpleClip	word		//True if only left-right clipping involved//index 22:	Italic		word		//True if italic in effect	Bold		word		//1 if bold chars	Scroll		word		//Auto scroll when LF off bottom	BBCOp		word		//Operation for character BitBlt's	CurX		word		//Present X coordinate	CurY		word		//Present Y coordinate (0 => top of screen)	CrX		word		//Carriage return X	LfY		word		//Line feed DY//index 30:	Font		word		//Pointer to font structure	ClearColor	word		//Color to use (0,-1, etc.) for clearing on scrolls	spare		word	Tab		word		//Tab setting (in screen units)	]manifest lREG=size REG/16//Argument vector has logs of definitions:structure ArgSpot[	arguments word 20 =		[		argWord^1,20 word		] =		[		argByte^1,40 byte		]	]//DISV is the main display state vector, pointed to by SS:structure DISV[	Version		word		//Code = Display version for LISP	DISVLoc		word		//Address of this table (for address computation)	ScreenBuf	word		//Location of screen buffer//*** beginning of zeroed area ***	CurrentRegion	word		//Current region in use	TTYRegion	word		//Pointer to region to use for TTY output//Stuff for input events//index 5:	Event		byte		//Command code =DEvent	Buttons		byte		//Current button readings	CursorX		word		//Current cursor coordinates	CursorY		word	ChangedButtons	byte		//Buttons changed since last time	ElapsedTime	byte		//Since last event	OtherButtons	byte		//Various keyboard keys...	evSpare	byte//index 10:	EnableEvents	word		//Mask for enabled key strokes	EnableTimerStart word		// for starting the timer	EnableTimerStop	word		// for stopping the timer	TimerInterval	word		//And the length of the timer interval (27ths sec)	TimerGoing	word		//Flag true if timer going	TimerComplete	word		//Time at which timer expires	LastEventTime	word		//Time at last event	CursorDX	word		//Current offset of cursor "sensitive point"	CursorDY	word//index 19:	Blocked		word		//DIS input blocked waiting for TTY activity	EventTypeChars	word		//2 chars to type on each event	CaretRegion	word		//Which region the caret lies in	CaretRate	word	CaretDX		word	CaretDY		word	CaretPattern	word 16//index 41:	EscapeChar	word		//Character code for escape sequence	sparex		word 19//index 61:	@ArgSpot			//Place to put arguments//*** end of zeroed area ***//index 81:	nRegions	word		//So ADIS can find it....// index 82:				// curve stuff	YMax		word	CurveBbc	word	spare		word//Table of available fonts (0=> non-existent font)//index 85:	fonts		word maxNDisplayFonts//Table of set-up regions (default Typing region=0)// actual number of regions is in PARM.nRegions	regions		word 1	]manifest [	zeroDISVFirst=(offset DISV.CurrentRegion)/16	zeroDISVLength=(offset DISV.nRegions/16)-zeroDISVFirst	]//Protocol commands:// If a byte < 128 is received, it is assumed to be a character to be//  displayed in the default TTYregion.// Bytes > 127 are protocol commands, possibly followed by arguments.// There are two classes of protocol commands://	1. Special -- handled by special loops//	2. Normal -- op[1b] args[nofa b]//// If a mark is received, this resynchronizes the command interpreter to//  expect a protocol command next.//  A "region" is: xleft[2b] ytop[2b] width[2b] height[2b]manifest [// NET => Alto//Deposit/Examine class:	DDepositM=#200		//Deposit memory: first[2b] count[b] vals[2*count b]	DExamineM=#201		//Examine memory: first[2b] count[b]				//   Replies DExaminedM count[b] vals[count*2 b]	DDepositV=#202		//Deposit state vector: val[2b] index[b]	DExamineV=#203		//Examine state vector: index[b]				//	Replies DExaminedV val[2b]	DDepositR=#204		//Deposit region vector: val[2b] index[b]	DExamineR=#205		//Examine region vector: index[b]				//	Replies DExaminedR val[2b]	DInvalidate=#206	//Invalidate current region BBC	DFlushInput=#207	//Force input to be sent to NET	DSync=#210		//Replies DSync	DClose=#211		//Close display connection	DReset=#212		//Reset display to initial state//Graphics:	DLineTo=#213		//Draw a line to x[2b] y[2b] wid[b]	DRegionR=#214		//Region op: func[2b] region[8b] region[8b] gray[2b]	DRegionC=#215		//Region op: func[2b] region[8b] gray[2b]	DCursorNudge=#216	//Set cursor: dx[2b] dy[2b] saveDxDy[2b]	DPress=#217		//Write Press file: name[40b]		DReadState=#220		//Replies same as DEvent, but with DState	DCaretOff=#221		//Force caret off	DReadFont=#222		//Read font: fontNumber[2b] name[38b]	DStartTimer=#223	//Fudge starting input timer: timeout[2b]	DSyncBefore=#224	//Sync with TTY begin: syncNumber[b]	DSyncAfter=#225		//Sync with TTY end	DBackup=#226		//Backup character pointer: distance[2b]	DCurveSetup=#227	//Setup CurveTo command: op[b] brushShape[b] brushWidth[b]	DCurveTo= #230		//Draw curve: x1[2b] y1[2b] d1x[4b] d1y[4b]				// d2x[4b] d2y[4b] d3x[4b] d3y[4b] n[2b]	DAudioOut = #231	//Audio output via Diablo printer interface:				// pitch[2b] duration [2b]// Alto => NET//	DSync	DExaminedM=#201		//Examined memory: count[b] vals[2*count b]	DExaminedV=#203		//Examined state vector: val[2b]	DExaminedR=#205		//Examined region vector: val[2b]	DEvent=#240		//Event arrived: buttons[b] x[2b] y[2b]				//    buttonchanges[b] elapsedtime[b] otherbuttons[b]	DTimeout=#241		//When input timeout happens	DBlocked=#242		//When typein arrives	DState=#243		//Same as DEvent, but reply to DReadState	]manifest DLargest=#231		//Maximum protocol command to receivemanifest EscChar=#3		//Control C