|
|
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: 3840 (0xf00)
Types: TextFile
Names: »fungpr1txt«
└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ. Detaljer om "HC8000" projekt.
└─⟦0364f57e3⟧
└─⟦this⟧ »fungpr1txt«
fungpr=set 50
fungpr=algol
program for listing of fungi
call: <objectfile>=fungpr <sourcefile> <fpparam>(0,n)
fpparam: linewith lw.65 linesofpage nl.65
begin
integer c,i,ic,il,iw,lw,nl,cg,cs,cy,st,st0,st1,st2,
sg,ss,sv,sf,ca,cn,cd,ci,cl,cc,ch;
boolean bpoint;
integer array ITEM,GENUS,SPECIES(0:50);
real array field raf;
long array IFILE,OFILE(1:3);
zone zi,zo(128,1,stderror);
raf:= 0;
cleararray(IFILE); readinfp(IFILE.raf,1);
open(zi,4,IFILE,0);
cleararray(OFILE); readlsfp(OFILE.raf);
open(zo,4,OFILE,0);
cg:= 35; cs:= 64; cy:= 36;
i:= 0; il:= 0; iw:= 0; ic:= 1;
readbfp(<:bpoint:>,bpoint,false);
readifp(<:lw:>,lw,65);
readifp(<:nl:>,nl,65);
begin
procedure saveitem(DEST);
integer array DEST;
begin
l:readchar(zi,c);
if c=32 or c=10 then goto l;
i:= 0;
for i:= i+1 while c<>cg and c<>cs and c<>cy and c<>25 do
begin DEST(i):= c;
l1:readchar(zi,c); if c=10 then goto l1 end;
DEST(0):= i-1; DEST(i):= 0;
end;
integer procedure printitem(ipos,SOUR,maxpos);
value ipos,maxpos;
integer ipos,maxpos;
integer array SOUR;
begin write(zo,"sp",ipos-ic); ic:= ipos-1; i:= 0;
for ic:= ic+1 while ic<ipos+SOUR(0) and ic<maxpos do
begin i:= i+1;
write(zo,false add SOUR(i),1) end;
printitem:= ic;
end;
procedure syntax;
begin write(out,<:<10>syntax error:>);
printitem(1,SPECIES,lw);
goto lend
end;
sg:= 103; ss:= 115; sv:= 118; sf:= 102;
ca:= 97; cn:= 110; cd:= 100; ci:= 105;
cl:= 108; cc:= 99; ch:= 104;
l1:readchar(zi,c);
l2:st:= st0:= st1:= st2:= 0;
if c=cg then st:= 1
else if c=cs then st:= 2
else if c=cy then st:= 3
else if c=25 then goto lend
else goto l1;
l3:readchar(zi,c);
if c=32 then goto l5
else if c=sg then st0:= 1
else if c=ss then st0:= 2
else if c=sv then st0:= 3
else if c=sf then st0:= 4
else if c=ca then st1:= 1
else if c=cn then st1:= 2
else if c=cd then st1:= 3
else if c=ci then st1:= 4
else if c=cl then st1:= 5
else if c=cc then st1:= 6
else if c=ch then st1:= 7
else syntax;
l4:readchar(zi,c);
if c=32 then goto l5
else if c>48 and c<58 then st2:= c-48
else syntax;
l5:if st1=0 and st0=0 then
begin if st=1 then saveitem(GENUS)
else if st=2 then saveitem(SPECIES);
end
else saveitem(ITEM);
if st=1 and st1=0 and st0=0 then
begin
if il+5>nl then
begin write(zo,"ff",1); il:= 0 end else write(zo,"nl",2);
printitem(1,GENUS,lw); write(zo,"nl",1);
ic:= 1; il:= il+3;
end;
if st=2 and st1=0 and st0=0 then
begin
if bpoint then
begin write(zo,"sp",40-ic); ic:= 40;
for ic:= ic+3 while ic<=lw do write(zo,<:. :>) end;
if il+1>nl then
begin write(zo,"ff",1); il:= 0 end else write(zo,"nl",1);
ic:= 1;
printitem(1,SPECIES,lw);
il:= il+1;
end;
if st=2 and (st1=1 or st0=3 or st0=4) then
begin
if st0=3 then begin write(zo,<:v.:>); ic:= ic+2 end;
if st0=4 then begin write(zo,<:f.:>); ic:= ic+2 end;
printitem(ic+1,ITEM,40);
end;
goto l2;
end;
lend:write(zo,"em",1);
close(zi,true); close(zo,true);
end
▶EOF◀