|
|
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: 14592 (0x3900)
Types: TextFile
Names: »testout«
└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ.
└─⟦b2ec5d50f⟧
└─⟦0b92c64d5⟧ »ctb«
└─⟦this⟧
; btj 30.08.74 bossout and last ...1...
(bossout=set 15 disc
bossout=algol
scope user bossout
)
external procedure bossout(fkind, ftime, fcoruno, fthird, frecord, move, print);
integer fkind, ftime, fcoruno, fthird;
integer array frecord; comment must be declared integer array frecord(0:256);
boolean move, print;
message bossout version id: 76 10 28, 25;
begin comment standard declarations for analysis of boss testoutput;
integer kind, length, time, third, coruno, cyclestart,
cycleend, file; boolean changed;
zone z(128*2,2,eof);
own boolean stopfound, artifistop;
procedure eof(z,s,b); zone z; integer s,b;
begin own boolean eot; integer array zonedescr(1:20);
if s extract 1 = 1 and s shift (-14) extract 1 = 0 then stderror(z,s,b) else
if file >= 0 then
begin if s shift(-18) extract 1 = 1 then eot:= true;
if s shift (-14) extract 1=1 then
begin comment mode error;
getposition(z, 0, b); comment destroy b;
getzone6(z, zonedescr);
if zonedescr(1) = 4 shift 12 + 18 or b > 1 then
stderror(z, s, 0); comment called recursive, or not at start;
zonedescr(1) := 4 shift 12 + 18; comment nrz-mode;
setzone6(z, zonedescr);
for b := zonedescr(18) step -1 until 1 do
begin comment change mode in shares;
getshare6(z, zonedescr, b);
zonedescr(4) := 4;
setshare6(z, zonedescr, b);
end;
setposition(z, 0, 0); setposition(z, 0, 0); comment set mode;
setposition(z, file, 0); comment restart same file in nrz mode;
s := b := 0; comment repeat block, and skip rest of status;
end else
if eot and s shift(-16) extract 1 = 1 and b > 0 then
begin setposition(z, -1, -1); setposition(z, 0, 0);
file:= 0; b:= 0; eot:= false;
end else
if s shift (-16) extract 1=1 and b>0 then goto teststop;
end else
begin comment end of backing store;
teststop:
getposition(z,0,cycleend); setposition(z,file,cyclestart);
if -, stopfound then
begin
getzone6(z,zonedescr);
zonedescr(16) := 512; comment recordlength;
setzone6(z,zonedescr);
z(1) := real <::> add 9 shift 24;
z(2) := real <::>;
zonedescr(16) := 0;
setzone6(z,zonedescr);
b := 512;
artifistop := true;
end else artifistop := false;
end;
end;
\f
comment btj 30.08.74 testout ...2...
;
procedure nextrecord;
begin integer field f,s,t,i,k; own integer state;
own boolean after_installation_ident;
long field lf; real r;
f:=2; s:=4; t:=6;
rep: i:=inrec6(z,6); kind:=k:=z.f extract 6;
if k=0 then begin inrec6(z,i); goto rep end;
length:=z.f shift(-6); time:=z.s; third:=z.t;
if length>i then
begin comment trouble;
k:=10; write(out,<:<10>trou:>,<<-ddddddd>,z.f,time,third);
rep1: i:= inrec6(z,2);
if k<10 then k:=k+1 else
begin k:=1; write(out,<:<10>trou:>) end;
write(out,<<-ddddddd>, z.f);
if i>1 then goto rep1;
goto rep;
end;
inrec6(z,length);
if k>4 then
begin changed:= third<>coruno; coruno:=third end
else changed:=false;
if state<3 then
begin if kind=14 then state:=1 else
if kind=13 and state=0 then
begin comment ident record from pass 1;
if z(1)=real<:bos:> then
begin lf:=12; r:=z.lf/10000;
write(out,<:<10><10>start-up::>,
<< dd dd dd>,systime(2,r,r),r);
end;
i:=1; i:=write(out,<:<10>ident: :>,string z(increase(i)));
if after_installation_ident then
begin
write(out,false add 32,18-i);
for i:=10 step 2 until length do
write(out,<<-ddddddd>, z.i);
end else
after_installation_ident := true;
end else
if state=1 then
begin comment first record after ext table;
if kind=13 then state:=3 else
begin getposition(z,0,cyclestart); state:=2; goto rep;
end end;
if state=2 then
begin if kind<>9 then goto rep;
getposition(z,0,k);
if artifistop then
begin comment artificial end-record;
k := cyclestart -1;
end
else stopfound := true;
setposition(z,file,k+1);
state:=3; goto rep;
end;
end state<3;
end nextrecord;
\f
comment btj 30.08.74 testout ...3...
;
procedure bosshead(head); string head;
begin integer i, j, kind; real r; array ra(1:2);
coruno:=-1; cycleend:=cyclestart:=0; i:=1;
systime(1,0,r); system(4,1,ra);
write(out,<:<12><10>:>, head,<< dd dd dd>,systime(2,r,r),r,
<: file: :>, string ra(increase(i)) );
if system(4,2,ra) extract 12 = 4 then
begin comment file number;
file:=ra(1); kind:=18; write(out,<:.:>,<<d>,file);
end else
begin comment name, bs assumed;
file:=-1; kind:=4; write(out,<:.bs:>);
end;
j := 3;
for i := system(4,j,ra) while i <> 0 do
begin
j := j + 1;
write(out, if i shift (-12) = 4 then <: :> else <:.:>);
if i extract 12 = 4 then
begin i := ra(1);
write(out, <<d>, i)
end
else
begin
i := 1; write(out, string ra(increase(i)));
end;
end;
system(4,1,ra); i:=1;
open(z,kind,string ra(increase(i)), 1 shift 14 + 1 shift 16 + 1 shift 18);
setposition(z,file,0);
end bosshead;
comment end standard declarations;
integer field i,i2,i4,b,e; array ra(1:2);
array field name; integer k;
name:= 6;
bosshead(<:bossout:>); cycleend:= e:=1000 000;
i:=system(4,3,ra); if i shift(-12) <> 8 then goto rep;
e:=ra(1); comment e=number of blocks from end of output;
rep1: nextrecord; if kind<>9 then goto rep1;
scan: getposition(z,file,b);
b:= if e>= cycleend - cyclestart or artifistop then 0 else
if b-cyclestart < e then
(if cyclestart =0 then 0 else cycleend-cyclestart+b-e) else b-e;
setposition(z,file,b);
\f
comment btj 30.08.74 testout ...4...
;
rep: nextrecord; fkind:=kind; ftime:=time; fcoruno:=coruno; fthird := third; frecord(0) := length;
if move then for i:=2 step 2 until length do frecord.i := z.i;
if print or kind=9 then
begin if changed then write(out,<:<10>:>);
if kind=19 then
begin comment skip empty entries in tape table;
for i:=2 step 2 until 18 do
if z.i<>0 then goto exitloop;
goto rep;
end; exitloop:
if kind<10 then
write(out, case kind of(<:<10>send:>,<:<10>lock:>,
<:<10>opch:>,<:<10>open:>,<:<10>exit:>,<:<10>mess:>,
<:<10>answ:>,<:<10>jd-1:>,<:<10>stop:>))
else write(out,<:<10>:>,<<dddd>, kind);
write(out,<<-ddddddd>, time,third);
if kind<>13 and kind<15 or kind > 20 then
begin
k:=20;
if kind=5 then length:=length-2 else
if kind=9 and length > 6 then length:=length-6;
for i:=2 step 2 until length do
begin write(out,<<-ddddddd>,z.i);
if i mod k = 0 then
write(out,false add 10,1,false add 32,20);
end;
i2:=i+2; i4:=i+4;
comment last word in kind 5 record is: page ident<12 + rel exit;
if kind=5 then write(out,<<-dddd>,z.i shift (-12),z.i extract 12);
comment last 3 words in kind 9 records are:
base of corunocodepage <2 + exception reg
instruction counter
fault cause < 12 + page ident
if fault is caused by bossfault 2 - 199 then fault cause is
negative otherwise it is non-negative (i.e. interrupt cause);
if kind=9 and length > 6 then write(out,<<-ddddddd>,z.i shift (-2),z.i extract 2,
z.i2,<<-dddd>,z.i4 shift (-12) shift 12 // 4096,
z.i4 extract 12);
end else begin
if kind = 16 then
begin comment bytes, bsadjust;
for i:= 2 step 2 until 8 do
begin if i mod 14 = 0 then
write(out, false add 10, 1, false add 32, 20);
write(out, <<-ddddddd>, z.i shift(-12), z.i extract 12);
end;
if length > 8 then
begin
i:=3;
if length > 10 then write(out,<: :>,string z(increase(i)));
i:=length;
if length > 10 then write(out,z.i) else
write(out,<<-ddddddd>, z.i shift (-12), z.i extract 12);
end;
\f
comment btj 30.08.74 testout ...5...
;
end else
if kind = 17 then
begin comment catalog entry;
k:= 1; i:= 2;
write(out, <: :>, false add 32, 16-write(out,
<: :>, if k>2 then <:*:> else string z.name(increase(k))),
<<dddd>, z.i shift(-12), z.i shift(-3) extract 9,
z.i extract 3);
for i:= 4, 6 do write(out, <: :>, <<-ddddddd>, z.i);
i:= 16;
if z.i >= 0 then write(out, <<ddddd>, z.i)
else write(out, <<ddddd>, z.i shift(-12), <:.:>,
<<d>, z.i extract 12);
i:= 18; k:= 5;
write(out, <: :>, if z.i = 0 then <:0:> else if k>6 then <:*:> else
string z(increase(k)));
for i:= 26 step 2 until length do
begin write(out, <: :>);
if z.i shift(-12) <> 0 then
write(out, <<d>, z.i shift(-12), <:.:>);
write(out, <<d>, z.i extract 12);
end;
end else
if kind = 18 then
begin comment station entry in mount table;
write(out, <: :>);
for i:= 2, 4 do
write(out, <<-ddddddd>, z.i shift(-12), z.i extract 12);
for i:= 6, 8 do
write(out, <<-ddddddd>, z.i);
i:= 10;
write(out, <<-ddddddd>, z.i shift(-12), z.i extract 12);
for i:= 12 step 2 until 18 do
write(out, <<-ddddddd>, z.i);
end else
if kind = 19 then
begin comment tape entry in mount table;
write(out, <: :>);
i:= 2; k:= 3;
write(out, <<-ddddddd>, z.i shift(-12), z.i extract 12 - 4096);
for i:= 4, 6 do
write(out, <<-ddddddd>, z.i);
i:= 8;
write(out, <<-ddddddd>, z.i shift(-12), z.i extract 12);
write(out, <: :>, if k>4 then <:*:> else string z(increase(k)));
i:= 18;
write(out, <: :>, <<-ddddddd>, z.i);
end else
if kind = 20 then
begin comment terminate and prepare access;
write(out, <: :>);
for i:= 2 step 2 until 10 do
write(out, <<-ddddddd>, z.i);
k:= 2;
write(out, <: :>, if k>3 then <:*:> else string z.name(increase(k)));
end else
if kind = 15 then
begin write(out,<: :>);
for i:=2 step 2 until length do
write(out, false add (z.i shift(-16)), 1,
false add (z.i shift(-8) extract 8), 1,
false add (z.i extract 8), 1);
end end;
end;
if kind<>9 then goto rep;
stop: end; end;
\f
; btj 30.08.74 last ...7...
; call of last:
; last docname.file_or_bs.blocks_at_end first_coruno.last_coruno <any legal parameters>
(last=set 30 disc
last=algol
scope user last
)
begin integer k,c,f,j,i,l; array ra(1:2);
integer array record(0:0);
f:=0; l:=1000; i:= if system(4, 3, ra) shift(-12) = 8 then 4 else 3;
comment if the next two parameters are integers, separated by a point,
then use them as lower and upper limit of corutine numbers;
c := system(4,i+2,ra); comment separator after limits;
j := system(4,i ,ra); comment separator before limits;
k := system(4,i+1,ra); comment separator between limits;
comment evt ra(1) =last_coronu;
if j shift (-12) = 8 then write(out, <:***last param<10>:>)
else begin
if j extract 12 = 4 and k extract 12 = 4
and k shift (-12) = 8
and (c = 0 or c shift (-12) = 4 ) then
begin l:=ra(1); system(4,i,ra); f:=ra(1) end;
bossout(k,0,c,0,record,false,(f<=c and c<=l) or k=14);
comment jensens device:
the parameters k and c are set by the procedure and the last
parameter evaluated with these values;
end
end
\f
▶EOF◀