Trailing-Edge
-
PDP-10 Archives
-
decuslib20-03
-
decus/20-0078/libsim/graphi.sim
There is 1 other file named graphi.sim in the archive. Click here to see a list.
OPTIONS(/E);
EXTERNAL CHARACTER PROCEDURE getch;
CLASS graphics; COMMENT: Version 3, April 1977, $ke Blomberg;
BEGIN
CHARACTER amode,gmode,enq,esc,cursor_char,hx,lx,hy,ly,bs,ht;
CHARACTER oldhy,oldly,oldhx,oldlx,oldex;
BOOLEAN after_cursor; INTEGER savei,savej;
procedure chooseandsend;
begin
if hy\=oldhy then
begin
outchar(hy); oldhy:=hy;
end;
if hx\=oldhx then
begin
outchar(ly); oldly:=ly;
outchar(hx); oldhx:=hx;
end
else if ly\=oldly then
begin
outchar(ly); oldly:=ly;
end;
outchar(lx); oldlx:=lx;
end***chooseandsend***;
PROCEDURE reset_tty;
BEGIN Outchar(amode); Breakoutimage;
END***RESET_TTY***;
PROCEDURE transform(i,j); INTEGER i,j;
BEGIN INTEGER a,b;
a:=i//32; b:=i-32*a; hx:=Char(32+a); lx:=Char(64+b);
a:=j//32; b:=j-32*a; hy:=Char(32+a); ly:=Char(96+b);
END***TRANSFORM***;
PROCEDURE move(i,j); INTEGER i,j;
BEGIN transform(i,j); Outchar(gmode);
chooseandsend; Breakoutimage;
savei:=i; savej:=j; after_cursor:=false;
END***MOVE***;
PROCEDURE Draw(i,j); INTEGER i,j;
BEGIN
If after_cursor then move(savei,savej);
transform(i,j); chooseandsend;
Breakoutimage;
savei:=i; savej:=j; after_cursor:=false;
END***DRAW***;
PROCEDURE point(i,j);
INTEGER i,j;
BEGIN transform(i,j); outchar(gmode);
chooseandsend; outchar(oldlx); breakoutimage;
savei:=i; savej:=j; after_cursor:=false;
END***POINT***;
PROCEDURE cursor (c,x,y);
NAME c,x,y; CHARACTER c; INTEGER x,y;
BEGIN Outchar(esc); Outchar(cursor_char); Breakoutimage;
c:=getch;
hx:=Inchar; lx:=Inchar;
hy:=Inchar; ly:=Inchar;
x:=32*(Rank(hx)-33)+Rank(lx);
y:=32*(Rank(hy)-33)+Rank(ly);
reset_tty; after_cursor:=true;
END***CURSOR***;
PROCEDURE getpos(x,y);
NAME x,y; INTEGER x,y;
BEGIN CHARACTER c;
Outchar(esc); Outchar(enq); Breakoutimage;
c:=getch; COMMENT:c is the terminal status byte and not used;
hx:=getch; lx:=getch;
hy:=getch; ly:=getch;
x:=32*(Rank(hx)-33)+Rank(lx);
y:=32*(Rank(hy)-33)+Rank(ly);
reset_tty;
END***getpos***;
COMMENT: Ascii character definitions;
amode:=Char(31); gmode:=Char(29); esc:=Char(27);
cursor_char:=Char(26); enq:=Char(5);
END***GRAPHICS***