|
|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 11520 (0x2d00)
Types: TextFile
Names: »tplotxy«
└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ.
└─⟦b2ec5d50f⟧
└─⟦14f79e1b8⟧ »tplot1«
└─⟦this⟧
;plotxy 1982-02-17
scope temp plotxy penup pendown plotend setplotstep selectpen selectchar
clear temp plotxy penup pendown plotend setplotstep selectpen selectchar
plotxy=set 10
penup=set 1
pendown=set 1
plotend=set 1
setplotstep=set 1
selectpen=set 1
selectchar=set 1
scope user plotxy penup pendown plotend setplotstep selectpen selectchar
message plotxy in tplotxy
plotxy=algol message.no list.no
1982-02-17
external
procedure plotxy(par);
value par;
integer par;
begin
comment par = 0 : sense (ignored)
1 : clear screen
2 : vector(x,y), 16 bit
3 : setmask(down1,up,down2) (ignored)
4 : vector(x,y), 8 bit
5 : penup
6 : pendown
7 : penformat (xform,yform,draw) <*calcomp81 only*>
8 : end buffer
9 : alpha(char) (calcomp81 only)
10: steplength(step)
11: settextparam(h,w,theta)
12: select pen(pen number)
13: select charset(charset)
14: advance paper
;
integer dum,i,j,xx,yy;
own boolean pendwn,last,charmode;
own integer p,h,pb,sHX,sHY,sLY,x,y;
integer array A,M(1:20),
w(1:20),buf(1:1);
own integer bufff;
procedure setval(w,i,val);
value val; integer i,val;
integer array w;
begin
boolean f;
f:=false;
if val>=10000 then
begin
w(i):=val//10000+48; i:=i+1;
val:=val mod 10000;
f:=true;
end;
if val>=1000 or f then
begin
w(i):=val//1000+48; i:=i+1;
val:=val mod 1000;
f:=true;
end;
if val>=100 or f then
begin
w(i):=val//100+48; i:=i+1;
val:=val mod 100;
f:=true;
end;
if val>=10 or f then
begin
w(i):=val//10+48; i:=i+1;
val:=val mod 10;
f:=true;
end;
w(i):=val+48; i:=i+1;
end setval;
procedure udskriv(i); integer i;
begin write(out,i shift (-16) extract 8,
i shift (-8) extract 8,i extract 8); outendcur(32);
end;
procedure put(n);
integer n;
begin integer i;
for i:= 1 step 1 until n do
if w(i)<>0
then begin
if pb=0 then begin
if p>255 then transmit;
p:=p+1;
pb:=16;
buf(p):=0;
end
else pb:= pb-8;
buf(p):=buf(p) + w(i) shift pb;
end;
end put;
procedure transmit;
begin integer i;
if plotrelmode
then begin p:=p+1; buf(p):=25; end;
if plottstst then
for i:=1 step 1 until p do udskriv(buf(i));
h:= 2*p;
if false and plotbs
then begin
M(1):= 5 shift 12;
M(2):= firstaddr(buf);
M(3):= M(2)+512;
BSLOOP:
i:= waitanswer(sendmessage(plotbsadd,M),A);
if i<>1 then alarm(<:<10>***bs error:>,i);
if A(1)<>0 then alarm(<:<10>bs status error:>);
if A(2)<>512 then goto BSLOOP;
plotbssegm:=plotbssegm+1;
end plotbs;
if plotpl and h>0
then begin
M(1):= 5 shift 12 + 2; comment or +4;
M(2):= firstaddr(buf);
M(3):= M(2) + h - 2;
PLLOOP:
i:=waitanswer(sendmessage(plotpda,M),A);
if i<>1
then alarm(<:<10>***plotter error:>,
case i of(<::>,<: reservation:>,
<: unintelligible (contact computer department):>,
<: disconnected :>,<::>,<::>),M(2),M(3));
if A(2) <> h
then begin
pb:= A(3) mod 3;
p:= if pb=0 or p=0 then A(2) else A(2)-2;
if plottstst
then begin write(out,<:<10>break :>,p);
udskriv(buf(p));
end;
h:= h-p;
M(2):= M(2)+p;
p:= p//2 + 1;
if pb=1 then buf(p):=buf(p) extract 16 else
if pb=2 then buf(p):=buf(p) extract 8;
if plottstst
then udskriv(buf(p));
goto PLLOOP;
end;
end plotpl;
p:=pb:=0;
end transmit;
procedure vector(x0,y0);
integer x0,y0;
begin
integer x1,y1,z;
x:=x0; y:=y0;
REP:
last:=true;
if plotrelmode and abs(x)>511
then begin
x1:=sign(x)*511;
last:=false;
end
else x1:=x;
if plotrelmode and abs(y)>511
then begin
y1:=sign(y)*511;
last:=false;
end
else y1:=y;
z:= (y1 shift (-5)) extract 5 + 1 shift 5;
if z = sHY and -,plotrelmode then w(1):=0
else w(1):=sHY:= z;
z:= (x1 shift (-5)) extract 5 + 1 shift 5;
if z = sHX and -,plotrelmode then w(3):=0
else w(3):=sHX:= z;
z:= y1 extract 5 + 3 shift 5;
if z = sLY and w(3)=0 and w(1)<>0 and -,plotrelmode then w(2):=0
else w(2):=sLY:= z;
w(4):= x1 extract 5 + 2 shift 5;
if last
then begin
if -,plotrelmode then put(4)
else
begin
w(5):=22; put(5);
end;
end
else
if plotrelmode
then begin
x:=x-x1;
y:=y-y1;
put(4);
goto REP;
end;
end vector;
MAIN:
redefarray(buf,firstaddr(bufff),512);
last:=true;
if par>0 and par<15
then begin
if charmode and par<>9 then
begin
w(1):='cr'; i:=1;
if pendwn then
begin
w(2):='I'; i:=2;
end;
put(i);
charmode:=false; pendwn:=false;
end;
if par=4 then par:=2;
case par of
begin
begin
comment 1: clear/move up;
case convtype of
begin
begin <*tektronix type*>
w(1):=27; w(2):=12;
put(2);
if -,plotrelmode
then begin transmit; wait(1);
end;
w(1):=29; put(1);
if plotrelmode then transmit;
end tektronix;
begin <*calcomp 81*>
w(1):='soh'; w(2):='P';
w(3):='#' ; w(4):='4';
put(4); transmit;
end calcomp81;
end case;
end 1;
begin
comment 2: vector;
case convtype of
begin
begin <*tektronix*>
if plotrelmode
then begin
vector(plotxstep,plotystep);
end
else vector(plotposx,plotposy);
if -,pendwn then goto PNUP;
end tektronix;
begin <*calcomp81*>
if plotrelmode then
begin
xx:=plotxstep;
yy:=plotystep;
end else
begin
xx:=plotposx;
yy:=plotposy;
end;
w(1):= 'sp';
i:=2;
if xx<0 then
begin
w(i):='-'; i:=i+1;
xx:=abs xx;
end;
setval(w,i,xx);
w(i):='/'; i:=i+1;
if yy<0 then
begin
w(i):='-'; i:=i+1;
yy:=abs yy;
end;
setval(w,i,yy);
w(i):=if plotrelmode then 'J' else 'K';
put(i);
end calcomp81;
end case;
end 2;
begin
comment 3: setmask;
w(1):='L'; i:=2;
w(2):='0'+plotxstep; i:=i+1;
w(i):=','; i:=i+1;
setval(w,i,plotystep);
put(i-1); transmit;
end;
begin
comment 4;
end;
begin
comment 5: penup;
if pendwn
then begin
PNUP: w(1):=case convtype of (29,'H');
put(1);
pendwn:=false;
end;
penstatus:=0;
end 5;
begin
comment 6: pendown;
if -,pendwn
then begin
case convtype of
begin
begin <*tektronix*>
if plotrelmode
then vector(0,0)
else vector(plotposx,plotposy);
end tektronix;
begin <*calcomp81*>
w(1):='I'; put(1);
end;
end case;
pendwn:=true;
end;
penstatus:=1;
end 6;
begin
comment 7: penformat;
i:=1;
w(i):='W'; i:=i+1; w(i):='0'; i:=i+1;
w(i):=','; i:=i+1; setval(w,i,plotxstep);
w(i):=','; i:=i+1; w(i):='0'; i:=i+1;
w(i):=','; i:=i+1; setval(w,i,plotystep);
if plotdraw then begin w(i):='V'; i:=i+1; end;
put(i); transmit;
end;
begin
comment 8: plotbufout;
transmit;
end 8;
begin
comment 9: alpha;
i:=1;
if -,charmode then
begin
w(1):='B'; i:=2;
charmode:=true;
end setcharmode;
w(i):=plotxstep;
put(i);
end;
begin
comment 10;
w(1):=plotstepno;
put(1);
end 10;
begin
comment 11: settextparam(h,w,theta);
i:=1;
w(i):='Z'; i:=i+1;
setval(w,i,plotxstep);
w(i):=','; i:=i+1;
setval(w,i,plotangle);
w(i):=','; i:=i+1;
setval(w,i,plotystep);
put(i-1); transmit;
end 11;
begin
comment 12: selectpen;
w(1):='F'; w(2):='0'+plotxstep; put(2); transmit;
end 12;
begin
comment 13: select charset;
w(1):='#'; w(2):=plotxstep;
put(2); transmit;
end 13;
begin
comment 14: paper advance;
i:=1;
w(i):='U'; i:=i+1;
setval(w,i,plotxstep);
w(i):='etx';
put(i); transmit;
end 14;
end case;
end if par;
end plotxy;
end
plotxy=changeentry plotxy plotxy plotxy plotxy plotxy plotxy plotxy.550
message penup in tplotxy
penup=algol message.no list.no
external
procedure penup;
begin
plotxy(5);
end penup;
end
message pendown in tplotxy
pendown=algol message.no list.no
external
procedure pendown;
begin
plotxy(6);
end pendown;
end
message plotend in tplotxy
plotend=algol message.no list.no
external
procedure plotend;
begin
plotxy(8);
end plotnd;
end
message setplotstep in tplotxy
setplotstep=algol message.no list.no
external
boolean procedure setplotstep(stepno);
value stepno;
integer stepno;
begin
if stepno<1 or stepno>4 then setplotstep:=false
else begin
setplotstep:=true;
plotstepno:=stepno;
plotxy(10);
end;
end setplotstep;
end
message selectpen in tplotxy
selectpen=algol
external
procedure selectpen(pen);
value pen; integer pen;
if convtype=2 and pen>=0 and pen <=8 then
begin
plotxstep:=pen;
plotxy(12);
end;
end
message selectchar in tplotxy
selectchar=algol
external
procedure selectchar(charset);
value charset; integer charset;
if convtype=2 and charset>=0 and charset<=5 then
begin
plotxstep:=charset;
plotxy(13);
end;
end
▶EOF◀