! EDWIN driver for the DEC GIGI Colour Graphics terminal from Edwin include Device from Edwin include Icodes ! Screen information own integer SX = 0 { Current device position own integer SY = 0 own integer XL = 0 own integer XR = 511 { Right hand side of device window own integer YB = 0 own integer YT = 511 external routine SET COLOUR MAP alias "EDWIN___G_MAP" (integer ADR, RED, BLUE, GREEN) ! red, blue, green combination for this address in color map end external routine GIGI alias "EDWIN___G" (integer COM, X, Y) own integer WX, WY switch SW(0:MAX COM) routine SWAP (integer name A, B) integer C C = A; A = B; B = C end routine CHANGE ATTRIBUTE (integer WHAT, TO) switch AS (0:ATT MAXIMUM) -> AS (WHAT) AS(att colour): return AS(att char size): return AS(att colour mode): return AS(*): ! All other attributes ignored end -> SW(COM) SW(0): ! Initialise DEV DATA_NAME = "a DEC GIGI terminal" DEV DATA_DVX = 767 DEV DATA_DVY = 479 DEV DATA_MVX = 767 DEV DATA_MVY = 479 TTMODE (1) return SW(1): !Terminate TTMODE (0) return SW(2): ! Update return SW(3): ! New frame return SW(4): ! Move Abs return SW(5): ! Line Abs return SW(6): ! Character return SW(7): ! Attribute Change CHANGE ATTRIBUTE (X, Y) return SW(8): ! Set lower window settings XL = X; YB = Y return SW(9): ! Set upper window bounds XR = X; YT = Y return SW(10): ! Mode change return SW(11): ! Set Colour replacement mode (old entry point) change attribute (att colour mode, X) return SW(12): ! Lower box bounds WX = X; WY = Y return SW(13): ! Upper box bounds, and do box SWAP (WX, X) if WX > X SWAP (WY, Y) if WY > Y return if WX > XR or X < XL or WY > YT or Y < YB WX = XL if WX < XL WY = YB if WY < YB X = XR if X > XR Y = YT if Y > YT ! Box now clipped into the screen. return SW(*): end external routine G SAM alias "EDWIN___G_SAM" (integer name BUT, X, Y) signal 14, 8 end external routine G REQ alias "EDWIN___G_REQ" (integer name BUT, X, Y) signal 14, 8 end end of file