DataMuseum.dk

Presents historical artifacts from the history of:

RC4000/8000/9000

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RC4000/8000/9000

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦9f6894cf4⟧ TextFile

    Length: 13056 (0x3300)
    Types: TextFile
    Names: »tplf«

Derivation

└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ.
    └─⟦b2ec5d50f⟧ 
        └─⟦dd2c1b53f⟧ »tplot« 
            └─⟦this⟧ 

TextFile

(
scope temp plotform plotsubform plottext plotpoint
clear temp plotform plotsubform plottext plotpoint
 plotform=set 10
 plotsubform=set 2
 plottext=set 13
 plotpoint=set 2
 scope user plotform plotsubform plottext plotpoint
)

message plotform in tplf
plotform=algol message.no list.no
external

boolean procedure plotform (type, xstor, ystor);
value type, xstor, ystor;
real xstor, ystor;
integer type;
begin 
integer xsize, ysize, i, time;
boolean draw;
integer array M(1:10);
real timed,hour;
if plottstst
then begin
       write(out,<:<10>plotform 0:>,type,xstor,ystor);outendcur(32);
     end;

   if type>=10 then
   begin
    type:=type-10;
    draw:=false;
   end else draw:=true;

   if plotbs then
   begin integer j,k; integer array tail(1:10);
    k:=firstaddr(plotbsadd)-3;
    lookuptail(k,tail);
    i:=firstaddr(plotname1);
    for j:=2,3,4,5 do
    begin tail(j):=wordload(i); i:=i+2; end;
    tail(10):=plotbssegm - tail(7);
    changetail(k,tail);
   end;

if if type=0 then xstor>0 and ystor>0 else
   if type=1 then xstor>=0 and xstor<=7 else
   if type=2 then xstor>=1 and xstor<=7 else
   false then
begin
comment the format is allowed;
plotform:=true;
if type=0 then begin
   comment the format is xstor cm/inch times ystor cm/inch;
   xsize:=entier( xstor-.0001)+1;
   ysize:=entier( ystor-.0001)+1 end else
if type=1 or type=2 then begin
   comment the format is an a-format number round xstor
   placed along the document for type=1;
   xsize:=(case round (xstor+1) of
          (8410,5940,4200,2970,2100,1480,1050,740))/100;
   ysize:=(case round (xstor+1) of
          (11890,8410,5940,4200,2970,2100,1480,1050))/100 end;
if type=2 then begin
   comment the format is an a-format number round xstor
   placed across the document;
   i:=xsize; xsize:=ysize; ysize:=i end;
end else begin 
plotform:=false;
 alarm(<:***plotform format not allowed. type,xsize,ysize = :>,
          type,xstor,ystor,xsize,ysize,plotxstep,plotystep);
end;

if false then
begin
i:=44;
systime(1,0,timed);
systime(4,timed,hour);
hour:=hour/10000;
if minutelim>=0 and (hour>9 and hour<17) and (xsize>i or ysize>i) 
  and parent<>description(<:s:>) then
alarm(<:***plotform format too big size=:>,<<d>,xsize,<:,:>,ysize);
end;

if unitscale<>1.0 and type>0 then begin
   comment other unit format;
   xsize:=(xsize/unitscale);
   ysize:=(ysize/unitscale) end;
if autoscale then
   plotunit:=(if absymax//ysize<absxmax//xsize then
       absymax//ysize else absxmax//xsize);
   if plotunit<=0 then alarm(<:<10>***plotform :>,
      if autoscale then <:autoscale :> else <::>,
      <: plotunit = 0:>);

time:=0;

REP:
if plottstst
then begin
       write(out,<:<10>plotform 1:>,plotunit,xsize,ysize);outendcur(32);
     end;
plotxpos:=plotypos:=plotxform:=plotyform:=plotsubxmax:=
plotsubymax:=plotsubymin:=plotsubxmin:=plotxmax:=plotymax:=
plotxmin:=plotymin:=plotxcoor:=plotycoor:=0.0;
if plotoff then goto ENDF;
plotopen(true);
   i:=if (hour<9 or hour>16) then 4*60 else minutelim;
   if parent=description(<:s:>) then i:=8*60;

   if minutelim>=0 then plottimeout:=extend i*60*10000 + getclock;
   plotsettext(0.25/unitscale,0.35/unitscale,0,0,0.7/unitscale);
netsize:=plotunit/5;
plotxform:=plotxmax:=plotsubxmax:=xsize;
plotyform:=plotymax:=plotsubymax:=ysize;
if plottstst
then begin
       write(out,<:<10>plotform 2:>,netsize,plotxform,plotyform);outendcur(32);
     end;
plotmove(maxreal,plotxform*plotunit);
plotmove(plotyform*plotunit,maxreal);
deltax:=deltay:=1;
writeplot(<::>);
   if xsize*plotunit>absxmax or ysize*plotunit>absymax then 
     alarm(<:<10>***formaterror :>,plotunit,xstor,ystor);
   plotxy(1);
   if draw then
   begin
     if penstatus=1 then penup;
     plotmove(0,0);
     pendown;
     plotmove(xsize,0);  plotmove(xsize,ysize);
     plotmove(0,ysize); plotmove(0,0);
     penup;
   end;

ENDF:
if plottstst
then begin
       write(out,<:<10>plotform 9:>);outendcur(32);
     end;
end plotform;
end;
\f



message plotsubform in tplf
plotsubform=algol message.no list.no


external
boolean procedure plotsubform(xmin,xmax,ymin,ymax,draw);
value ymin, ymax, xmin, xmax, draw;
integer ymin, ymax, xmin, xmax;
boolean draw;
begin
if xmin>xmax or ymin>ymax or xmin<0 or ymin<0
   or xmax>plotxform or ymax>plotyform then 
   alarm(<:***plotsubform illegal format.:>,xmin,xmax,ymin,ymax,
         plotxform,plotyform);

plotxpos:=(plotxpos*deltax+plotxcoor)+plotsubxmin;
plotypos:=(plotypos*deltay+plotycoor)+plotsubymin;
deltax:=deltay:=1;
plotsubxmax:=plotxmax:=plotxform;
plotsubymax:=plotymax:=plotyform;
plotxcoor:=plotsubxmin:=plotsubymin:=plotycoor:=
plotxmin:=plotymin:=0;
plotmove(xmin,ymin);
plotsubxmin:=xmin; plotsubymin:=ymin;
plotsubxmax:=xmax; plotsubymax:=ymax;
plotxmax:=xmax-xmin; plotymax:=ymax-ymin;
plotxpos:=plotypos:=0.0;
if draw then begin
  pendown;
  plotmove(0,plotymax); plotmove(plotxmax,plotymax);
  plotmove(plotxmax,0); plotmove(0,0);
  penup;
  end;

end plotsubform;

end;
\f



message plottext in tplf
plottext=algol message.no list.no
21 05 73
1977 11 22
external
procedure plottext(z,s,b);
zone z;
integer s, b;
begin
  comment blockprocedure to plotz,
          takes care of the characteroutput;
  real zidx,curx,cury,xpos,ypos;
  own integer adr,displ;
  boolean array field IDX, P;
  integer shifts, sh2, idx, charval, segno, segin,
  point, n, n1, i, j, fit, nextfit, xdis, ydis,
  cellno, xval, yval, zonelast,zd, res;
  boolean draw;
  array X, Y(-1:20);
  integer array XI,YI(0:20),SLOPES(1:4);
  if charname1=real <::> then
  begin
    charname1:=real <:charr:> add 111;
    charname2:=real <:man:>;
  end;
  zd:=zonedes(z);
  if adr=0 then adr:=owndescr;
  i:=wordload(zd-34)-wordload(zd-36)+2;
  wordstore(zd+4, i);
  zonelast:=i shift (-2);
  i:=1;
  if byteload(adr+26)<2 then alarm(<:bufferclaim:>,0);
  if byteload(adr+27)<1 then alarm(<:areaclaim:>,0);
  if charoff then goto NO_CHAR;
  res:=connectcuri(firstaddr(charname1)-4);
  i:=1;
  if res<>0 then alarm(<:<10>***character set :>,string
  (if i=1 then charname1+(increase(i)-1) else charname2),
  <: missing:>);
  segin:=-1; 
  n:=0;
  IDX:=0; P:=0;
  shifts:=-40; idx:=1; zidx:=z(idx);
REP:
  fit:=-1;
  curx:=plotxpos; cury:=plotypos;
  xpos:=ypos:=0.0;
  charval:=zidx shift shifts extract 8;
  if charval>0 and (charval<8 or charval>15) then charval:=charval+displ;
  if charval=0 or(idx=zonelast and shifts=0) then goto END;
  if shifts=0 then
  begin
    shifts:=-40; idx:=idx+1; zidx:=z(idx); 
  end
  else shifts:=shifts+8;
  if charval-displ>126 then goto REP;
  if charval=15 then
  begin
    displ:=0;
    goto REP;
  end; 
  if charval=14 then
  begin
    displ:=128;
    goto REP;
  end;
  if charval=12 then
  begin
    penup;
    plotmove((marginx-plotxcoor)/deltax,
    (marginy-plotycoor)/deltay);
    goto REP;
  end;
  if charval=10 or charval=13 then
  begin
    real mx,my;
    mx:=(marginx-plotxcoor)/deltax; my:=(marginy-plotycoor)/deltay;
    penup;
    plotmove(mx*costhetax*costhetax+
    plotxpos*sinthetax*sinthetax+
    (my-plotypos)*sinthetax*costhetax+
    (if charval=10 then linediff/deltax*sinthetax else 0),
    plotypos*costhetax*costhetax+
    my*sinthetax*sinthetax+
    (mx-plotxpos)*sinthetax*costhetax+
    (if charval=10 then -costhetax*linediff/deltay else 0));
    goto REP;
  end;

  if plotalpha then
  begin
    plotxstep:=charval; plotxy(9); goto REP; 
  end;

  if segin<>0 then
  begin
    setposition(in,0,0); segin:=0; inrec6(in,512); 
  end;
  cellno:= in.IDX(charval+1) extract 12;
  if cellno=0 then cellno:=in.IDX(33) extract 12;
  segno:=cellno//512;
  if segno<>segin then
  begin
    setposition(in,0,segno);
    inrec6(in,512);
    segin:=segno;
  end;
  cellno:=cellno extract 9;
  xdis:=ydis:=0;
  draw:=false;
  sh2:=-6;
  n1:=0;

READ:
  point:= in.P(cellno) shift sh2 extract 6;
  if sh2=0 then
  begin
    sh2:=-6; cellno:=cellno+1 
  end
  else sh2:=sh2+6;
  xval:=point shift (-3) extract 3;
  yval:=point extract 3;
  if xval<0 or xval>7 or yval<0 or yval>7 then goto READ;
  if xval=5 then ydis:=ydis+yval
  else
  if xval=6 then ydis:=ydis-yval
  else
  if xval=7 then
  begin
    case yval+1 of
    begin
      draw:=false;
      xdis:=xdis-1;
      xdis:=xdis+1;
      begin
        draw:=true; n1:=-2;
        nextfit:=if plotspline then 1 else 2; 
      end;
      draw:=true;
      begin
        draw:=true; nextfit:=2; 
      end;
      begin
        nextfit:=4; draw:=true; 
      end;
      begin
        nextfit:=3; draw:=true;  
      end;
    end case;
  end
  else
  if -,draw then
  begin
    if n1<0 then
    begin
      n1:=n1+1;
      X(n1):=xval*plotsize/5;
      Y(n1):=yval*plotheight/7;
    end
    else
    begin
      n:=n+1;
      X(n):=(xval+xdis)*plotsize/5;
      Y(n):=(yval+ydis)*plotheight/7;
    end read a point;
  end;
  if -, draw then goto READ;
  if draw and fit<3 and n<=0 then 
  begin
    fit:=nextfit; draw:=false; goto READ; 
  end;
  draw:=false;

  if fit=1 or fit=2 and (X(1)<>xpos or Y(1)<>ypos) then 
  begin
    penup;
    plotmove(curx+(X(1)*costhetax-Y(1)*sinthetay)/deltax,
    cury+(X(1)*sinthetax+Y(1)*costhetay)/deltay);
  end;
  if fit=1 and -,plotspline1 then

  begin
    comment splinefit;
    real z, stepp, x, y;
    real array UX(1:n),UY(1:n),W(1:n-1);
    real xi1, xi, uxi1, uxi, yi1, yi, uyi1, uyi;
    W(1):=UX(1):=UY(1):=UX(n):=UY(n):=0;
    for i:=2 step 1 until n-1 do
    begin
      W(i):=1/(4-W(i-1));
      UX(i):=( (X(i+1)-2*X(i)+X(i-1))*6-UX(i-1))*W(i);
      UY(i):=( (Y(i+1)-2*Y(i)+Y(i-1))*6-UY(i-1))*W(i);
    end i;
    for i:=n-1 step -1 until 2 do
    begin
      UX(i):=UX(i)-W(i)*UX(i+1);
      UY(i):=UY(i)-W(i)*UY(i+1);
    end;
    pendown; penstatus:=1;
    for i:=1 step 1 until n-1 do
    begin
      xi1:=X(i+1); xi:=X(i);
      uxi1:=UX(i+1); uxi:=UX(i);
      yi1:=Y(i+1); yi:=Y(i);
      uyi1:=UY(i+1); uyi:=UY(i);
      z:=(if abs(xi1-xi)<abs(yi1-yi) then abs(yi1-yi) 
      else abs(xi1-xi))*netsize;
      stepp:= if z<1 then 1 else 1/z;
      for z:=stepp step stepp until 1,1 do
      begin
        x:=xi+(xi1-xi+(z-1)*(2*uxi+uxi1+(uxi1-uxi)*z)/6)*z;
        y:=yi+(yi1-yi+(z-1)*(2*uyi+uyi1+(uyi1-uyi)*z)/6)*z;
        plotmove(curx+(x*costhetax-y*sinthetay)/deltax,
        cury+(x*sinthetax+y*costhetay)/deltay)
      end;
    end;
  end splinefit else
  if false and fit=1 and plotspline1 then 
  begin
    comment splinefit of characters unpacked in plotsteps; 
    pendown;
    for i:=1 step 1 until n-1 do 
    begin
      XI(i):=(X(i+1)-X(i))*netsize;
      YI(i):=(Y(i+1)-Y(i))*netsize 
    end;
    SLOPES(1):=(if XI(1)<0 then -X(-1) else X(-1))*netsize;
    SLOPES(2):=(if XI(n-1)<0 then -X(0) else X(0))*netsize;
    SLOPES(3):=(if YI(1)<0 then -Y(-1) else Y(-1))*netsize;
    SLOPES(4):=(if YI(0)<0 then -Y(0) else Y(0))*netsize;
    comment
    spln3step(n,XI,YI,SLOPES,(plotsize/4+plotheight/7)*netsize,netsize);
  end splinefit1 else
  if fit=2 then 
  begin
    pendown;
    for i:=2 step 1 until n do
    plotmove(curx+(X(i)*costhetax-Y(i)*sinthetay)/deltax,
    cury+(X(i)*sinthetax+Y(i)*costhetay)/deltay)
  end;
  if fit=1 or fit=2 then
  begin
    xpos:=X(n); ypos:=Y(n)
  end;

  fit:=nextfit;
  n:=0;
  if fit=3 or fit=4 then 
  begin
    penup;
    plotmove(curx+(7-2*fit)*plotsize/deltax*costhetax,
    cury+(7-2*fit)*plotsize/deltay*sinthetax); 
  end;
  goto (if fit=3 or fit=4 then REP else READ);
END:
NO_CHAR:
  cleararray(z);
  wordstore(zd,wordload(18+zd));
  wordstore(zd+2,wordload(zd-34));
  unstackcuri;
  pda:=firstaddr(charname1)-2;
  if description(pda)>0 then removeproc(pda);
end plottext;
end;
\f



message plotpoint in tplf
plotpoint=algol message.no list.no
external
boolean procedure plotpoint(x,y,type);
value x,y, type;
real x, y;
integer type;
begin
real dx,dy,sq2;
integer acpoint, sh, point,
        ptype, sht,px,py;
sq2:=sqrt(2);
sht:=0;
plotpoint:=plotmove(x,y);
if ptype=0 and autoscale then begin pendown; penup end;
for ptype:=type shift sht extract 4 while
     ptype>0  do
begin
sht:=sht-4;

acpoint:=case ptype of (338010,6576414,75433,
                        174094,1479710,1737198,
                        6817518,-7329298,4367598,
                        2428654,2469614,-5927186,
                        364270,6614766,1699566);
sh:=-24;
penup;

REP:
sh:=sh+4;
if ptype=3 and sh=4 then begin
  sh:=-20; acpoint:=-8122642;
  end;
point:=acpoint shift sh extract 4;
if sh>0 or point=14 then goto END;
px:=point shift (-2) extract 2-1;
py:=point extract 2-1;
dx:=px/2*pointsize; dy:=py/2*pointsize;
if px<>0 and py<>0 then begin dx:=dx/sq2; dy:=dy/sq2; end;
plotmove(x+dx/deltax,y+dy/deltay);
pendown;
goto REP;

END:
penup;  plotmove(x,y);
end ptype;


end plotpoint;
end

▶EOF◀