! EDWIN driver for the ERCC plotters (using GRAPHPACK) from Edwin include Device from Edwin include Icodes !%system %routine %spec CASCADE LOAD (%integer %name FLAG, %integer LOCLL) !%system %routine %spec LOADFILE2(%string (31) FILENAME, %integer %name FLAG, ! %integer LEVEL) !%system %integer %fn %spec CURRENTLL dynamic routine spec PLOTS (integer name ISF, INDEX, LDEV) dynamic routine spec PLOT (real name X, Y, integer name IPEN) dynamic routine spec NEW PEN (integer name PEN) !%dynamic %routine %spec SYMBOL () external routine CALCOMP alias "EDWIN___L" (integer COM, X, Y) own integer LOADED = 0, WX, WY const integer TRUE = 1, FALSE = 0 ! Plotter control own integer IPEN=2, XO=0, XS=1500, YO=0, YS=1500, SX=0, SY=0 own integer TCS = 12, ITALICS = FALSE, TEXT MODE = FALSE, NEW FRAMED = FALSE own long real DASH = 0, GAP = 0, THETA = 0, PX, PY const integer UPC = 200 long real P SIZE X, P SIZE Y real RX, RY string (31) DEVST routine SWAP (integer name A, B) integer C C = A; A = B; B = C end routine CHANGE ATTRIBUTE (integer X, Y) switch AS(0:ATT MAXIMUM) -> AS(X) AS(0): ! Colour change NEW PEN (Y) return AS(1): ! Line style change Y=0 unless 0<=Y<=4 if Y=0 then DASH=0 and GAP=0 and IPEN=2 if Y=1 then DASH=3 and GAP=3 and IPEN=0 if Y=2 then DASH=0 and GAP=0 and IPEN=2 if Y=3 then DASH=8 and GAP=3 and IPEN=0 if Y=4 then DASH=15 and GAP=3 and IPEN=0 return AS(2): ! Character size change TCS = Y return AS(3): ! Character orientation THETA = Y AS(4): ! Character quality AS(5): ! Character font return AS(6): ! Character slant if 0<Y<90 then ITALICS = TRUE else ITALICS = FALSE return AS(*): end switch SW (0:max com) return if COM>MAX COM -> SW(COM) SW(0): ! Initialise ! %if LOADED = 0 %start ! Y = 1 ! LOAD FILE 2 ("ERCLIB.GRAPHICSY_RCOGRAF13Y", Y, CURRENT LL) ! %signal 14, 1 %if Y#0 ! CASCADE LOAD (Y, CURRENT LL) ! %signal 14, 1 %if Y#0 ! LOADED = 1 ! %finish DEV DATA_NAME = "a Calcomp plotter" DEV DATA_DVX = 4000 DEV DATA_DVY = 2800 DEV DATA_MVX = 32000 DEV DATA_MVY = 32000 DEV DATA_UNITS PER CM = UPC X = X - 1000 if 1001 <= X <= 1016 { Treated as Graph-pack numbers ! } SX = 0; SY = 0 TEXT MODE = FALSE COM = 5 PLOTS (SX, SY, COM) return SW(1): ! Terminate COM = 999 PLOT (RX, RY, COM) return SW(2): ! Update (ignored for C963 as user can't see it!) return SW(3): ! New frame P SIZE X = (XS-XO)/UPC P SIZE Y = (YS-YO)/UPC RX = XS*UPC; RY = 0; COM=-3 PLOT (RX, RY, COM) SX = 0; SY = 0 TEXT MODE = FALSE NEWFRAMED = TRUE -> SW(COM) if COM#3 return SW(4): ! Move Abs SW(5): ! Line abs -> SW(3) if NEWFRAMED # TRUE if COM=5 then COM=2 else COM=3 RX = X; RY = Y PLOT (RX, RY, COM) SX = X SY = Y TEXT MODE = FALSE return SW(6): ! Character signal 14, 14 SW(7): ! Attribute change CHANGE ATTRIBUTE (x, y) TEXT MODE = FALSE return SW(8): ! Set lower limits of device window XO = X; YO = Y return SW(9): ! Set upper limits of device window XS = X; YS = Y return SW(12): ! Lower box bounds WX = X; WY = Y return SW(13): ! Upper box bounds swap (wx, x) if wx > x swap (wy, y) if wy > y return if WX > XS or X < XO or WY > YS or Y < YO WX = XO if WX < XO WY = YO if WY < YO X = XS if X > XS Y = YS if Y > YS ! Box now clipped into the screen. Calcomp (4, Wx, Wy) Calcomp (5, Wx, y) Calcomp (5, x,y) Calcomp (5, x, Wy) Calcomp (5, Wx, wy) return SW(*): end end of file