|
|
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: 31560 (0x7b48)
Types: TextFile
Notes: flxfile
Names: »s28101:1.testout main «, »testout main «
└─⟦2c579b2cd⟧ Bits:30004129/s28101.imd SW8101/2 BOSS v.2 rel. 2.0
└─⟦4fb120d20⟧
└─⟦this⟧ »s28101:1.testout main «
; btj 30.08.74 bossout and last boss2, testout ...1...
(bossout=set 15 1
bossout=algol
scope user bossout
)
external procedure bossout(fkind, ftime, fcoruno, fthird, frecord, fmove, fprint);
<*<----assigned by bossout----> <-jensen device->*>
integer fkind, ftime, fcoruno, fthird;
integer array frecord; comment must be declared integer array frecord(0:256);
<* in order to use frecord, you can:
code a boolean procedure, working on frecord, and name it as
parameter fprint to bossout (result value may be false)
*>
boolean fmove, fprint;
message bossout version id: 84 07 18, 29;
begin
<* most of the procedure is re-coded. jan 1982, chd.
in every testoutput segment, the first 2 words contains the monitor clock,
corresponding to the first record on the segment, or =0 if segment is not used.
ps: the term 'type' is used instead of the term 'kind' in bossout,
(first word = tail length <6 + type).
*>
zone z(128*2,2,eof);
<* the blockproc eof is only relevant for magtape *>
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);
write(out,<:<10><10>*change tape:>);
file:= 0; b:= 0; eot:= false;
end else
if s shift (-16) extract 1=1 and b>0 then
begin
write(out,<:<10><10>*end of tape file:>);
goto stop;
end;
end;
end procedure eof;
\f
comment btj 30.08.74 bossout boss2, testout ...2...
;
procedure bosshead;
<*****************>
begin
integer i, j,k, l;
real r;
real array ra, prog (1:2);
j:= l:= 0; write(out,<:<12><10>:>);
for i:= system(4,j,ra) while i<>0 do
begin
if l>90 then l:= write(out, <:,:>, nl,1, sp,6);
l:= l + write(out, if j = 0 then <::>
else if i shift(-12) = 8 then <:.:> else <: :>);
k:= ra(1);
if i extract 12 =4 then l:= l+ write(out, <<d>, k)
else l:= l+ write(out, ra.rtol);
j:= j+1;
end;
system(4,0,prog);
if system(4,2,ra) extract 12 =4 then
begin <*file no, mt*>
file:= ra(1); kind:= 18;
end
else
begin <*name, bs assumed*>
kind:= 4;
end;
system(4,1,ra);
open(z, kind, ra, if kind=4 then 0
else (1 shift 14 + 1 shift 16 + 1 shift 18) );
setposition(z,file,0);
end procedure bosshead;
procedure bsclaims(boss);
<***********************>
boolean boss;
if hws <> 6+26 then print(z,0,0,0) else
begin
real array field raf;
hws:= 6;
print(z,0,0,0);
hws:= 6+26;
for w:= 8 step 4 until 20 do
begin
wa:= w + 2;
write(out, << -dddddd>, z.w, <<-dddd>, z.wa);
end;
write(out, sp,2);
raf:= 22;
outtext(out, 12, z.raf, 1);
wa:= 32;
if boss then write(out, << dddddd>, z.wa)
else write(out, << dd>, z.wa shift (-12), z.wa extract 12);
end;
\f
comment chd 82.01.20 bossout boss2, testout ...3...
;
procedure secclock(wno); value wno;
<*********************>
integer wno;
begin
<* write word no wno as seconds in same notation as head-time, supposing the word
contains a boss-shortclock in the form: montime shift(-13) extract 24.
*>
integer field wx; integer t;
wx:= wno shift 1;
if wx <= hws then
begin
t:= z.w2 - swtime;
if t<0 then t:= t+ 5 368 709;
<* t= time from segm start to 'now', units of 0.01 secs*>
write(out, << ddddddd>,
z.w2 / 100 <*head-time*>
+ ((extend 0 add z.wx) shift 13) / 10 000 <*time in wno in seconds*>
- (stime shift 11 shift(-11)) / 10 000 <* - segm start time *>
- t /100 );
t:= (((( stime shift (-(48-11)) <* most significant 11 bits *>
shift 24) add z.wx) <* next 24 bits *>
shift 13) // 10000) mod (24*60*60); <* time of day *>
write(out, << zd dd dd>,
(t // 3600) * 10000
+ ((t mod 3600) // 60) * 100
+ (t mod 60));
end;
end procedure secclock;
procedure sec(wno); value wno;
<*****************>
integer wno;
begin
<* write word no wno of zone z as seconds, converting from units of 0.8 seconds *>
integer field wx;
wx:= wno shift 1;
if wx<= hws then write(out,<< -ddddddd>, z.wx*0.8192);
end procedure sec;
procedure dump;
<*************>
if hws < 8 then print(z,0,0,0) else
begin
integer oldvalue;
oldvalue:= hws;
hws:= 6;
print(z,0,0,0);
hws:= oldvalue;
writeall(z, 8, hws, z.w3);
end;
\f
comment chd 82.01.20 bossout boss2, testout ...3a...
;
procedure writeall(z, first, top, ic);
<****************>
value first, top, ic;
integer first, top, ic;
zone z;
begin
integer i, word, char, lefthalf, righthalf,
function, wreg, xreg, pos;
boolean relative, indirect;
integer field ifield;
write(out, sp, 2,
<:address text characters abshalf halfwords integer code:>);
for ifield:= first step 2 until top do
begin
word:= z.ifield;
<* address *>
write(out, nl, 1, sp, 21,
<< -ddddddd>, ic);
<* text *>
write(out, sp, 3);
for i:= -16, -8, 0 do
begin
char:= word shift i extract 8;
if char<32 or char>126 then char:= 32;
write(out, false add char, 1);
end;
<* characters (8-bit values) *>
write(out, sp, 1);
for i:= -16, -8, 0 do
write(out, << ddd>, word shift i extract 8);
<* abshalf (unsigned halfwords) *>
lefthalf:= word shift (-12);
righthalf:= word extract 12;
write(out, sp, 1, << dddd>, lefthalf, righthalf);
<* halfwords (with sign) *>
if lefthalf > 2047 then lefthalf:= lefthalf - 4096;
if righthalf > 2047 then righthalf:= righthalf - 4096;
write(out, sp, 1, << -dddd>, lefthalf, righthalf);
<* integer (with sign) *>
write(out, << -ddddddd>, word);
<* code *>
function:= word shift (-18); <* bits 0-5 *>
wreg:= word shift (-16) extract 2; <* bits 6-7 *>
relative:= (word shift (-15) extract 1) = 1; <* bit 8 *>
indirect:= (word shift (-14) extract 1) = 1; <* bit 9 *>
xreg:= word shift (-12) extract 2; <* bits 10-11 *>
write(out, sp, 2, case function+1 of
(<:aw:>,<:do:>,<:el:>,<:hl:>,<:la:>,<:lo:>,<:lx:>,<:wa:>,<:ws:>,<:am:>,
<:wm:>,<:al:>,<:ri:>,<:jl:>,<:jd:>,<:je:>,<:xl:>,<:es:>,<:ea:>,<:zl:>,
<:rl:>,<:sp:>,<:re:>,<:rs:>,<:wd:>,<:rx:>,<:hs:>,<:xs:>,<:gg:>,<:di:>,
<:ms:>,<:is:>,<:ci:>,<:ac:>,<:ns:>,<:nd:>,<:as:>,<:ad:>,<:ls:>,<:ld:>,
<:sh:>,<:sl:>,<:se:>,<:sn:>,<:so:>,<:sz:>,<:sx:>,<:gp:>,<:fa:>,<:fs:>,
<:fm:>,<:ks:>,<:fd:>,<:cf:>,<:dl:>,<:ds:>,<:aa:>,<:ss:>,<:58:>,<:59:>,
<:60:>,<:61:>,<:62:>,<:63:>));
write(out, if relative then <:. :> else <: :>);
write(out, if wreg > 0 then (case wreg of (<:w1:>, <:w2:>, <:w3:>))
else case function+1 of
(<: :>,<:w0:>,<:w0:>,<:w0:>,<:w0:>,<:w0:>,<:w0:>,<:w0:>,<:w0:>,<: :>,
<:w0:>,<:w0:>,<: :>,<: :>,<: :>,<: :>,<: :>,<:w0:>,<:w0:>,<:w0:>,
<:w0:>,<: :>,<: :>,<:w0:>,<:w0:>,<:w0:>,<:w0:>,<: :>,<:w0:>,<:w0:>,
<: :>,<: :>,<:w0:>,<:w0:>,<:w0:>,<:w0:>,<:w0:>,<:w0:>,<:w0:>,<:w0:>,
<:w0:>,<:w0:>,<:w0:>,<:w0:>,<:w0:>,<:w0:>,<: :>,<:w0:>,<:w0:>,<:w0:>,
<:w0:>,<: :>,<:w0:>,<:w0:>,<:w0:>,<:w0:>,<:w0:>,<:w0:>,<: :>,<: :>,
<: :>,<: :>,<: :>,<: :>));
write(out, if indirect then <: (:> else <: :>);
write(out, case xreg+1 of (<: :>, <:x1:>, <:x2:>, <:x3:>));
write(out, sp, 8-
write(out, if relative or xreg>0 then <<+d> else <<-d>, righthalf,
if indirect then <:) :> else <: :>) );
if relative then write(out, <<-d>, ic + righthalf);
<* prepare next *>
ic:= ic + 2;
end;
end;
\f
comment chd 82.01.20 bossout boss2, testout ...3b...
;
procedure print (z, textstart, hwform, nameform);
<**************>
value textstart, hwform, nameform;
integer textstart, hwform, nameform;
zone z;
begin
<* this procedure can print most of the record types used in testoutput
zone z contains the record, including head <- note <-
global variables that must be set before call:
hws : length of whole record.
type : type from head, or =0 (troubles)
changed: coruno changed, extra nl output.
call parameters:
textstart: word no. from here and on, the rest of record is text.
hwform : a bit for each word in record (1<5 means word 5),
if a bit =1, the word is printed as 2 positive hws.
nameform : bit mask as above, if a bit =1, this word and the next 3
contains a name (in rc8000 name format).
*>
integer pos, firstf, f, i, k, l, npos, ch;
integer field int, name;
if textstart=0 then textstart:= hws; <* no text*>
pos:= 1; <* next pos for a field (a word). max 10 fields in one print line*>
firstf:= if type=0<*troubles*> then 2 else 8;
write(out, nl, if changed then 2 else 1);
if type > 42 then write(out,<<dddd>, type)
else
write(out, case (type+1) of ( <:trou:>,
<* 1*> <:send:>,<:lock:>,<:opch:>,<:open:>,<:exit:>,
<* 6*> <:mess:>,<:answ:>,<:jd-1:>,<:stop:>,<:op :>,
<*11*> <: 11:>,<: 12:>,<:load:>,<:ext :>,<:line:>,
<*16*> <: 16:>,<: 17:>,<: 18:>,<: 19:>,<: 20:>,
<*21*> <: 21:>,<:code:>,<:requ:>,<: 24:>,<:psj1:>,
<*26*> <:psj2:>,<:psj3:>,<:psj4:>,<: 29:>,<: 30:>,
<*31*> <: 31:>,<: 32:>,<: 33:>,<: 34:>,<: 35:>,
<*36*> <: 36:>,<:cl :>,<:p0 :>,<:p1 :>,<:p2 :>,
<*41*> <:p3 :>,<:p4 :>,
<:xxxx:>));
if type>0 then write(out,<<-ddddd.dd>, z.w2/100 <*time*>, <<-ddddddd>, z.w3);
\f
comment chd 82.01.20 bossout boss2, testout ...4...
;
<* special format for exit record *>
if type=5 then write(out, sp, 36);
for int:= firstf step 2 until hws do
begin
f:= int shift(-1); <* word no *>
if pos>10 then
begin
pos:= 1;
write(out,nl,1, sp,21);
end;
if hwform shift(-f) extract 1 =1 then
begin <* print word as 2 positive hws *>
write(out,<<dddd>, z.int shift (-12), << dddd>, z.int extract 12);
pos:= pos + 1;
end
else
\f
<* chd 82.01.20 bossout boss2, testout ...5...
*>
if nameform shift(-f) extract 1 =1 then
begin <*print name (=4 words)*>
npos:= write(out, sp, 1);
l:= int+6;
if l>hws then l:= hws;
for name:= int step 2 until l do
for i:= -16, -8, 0 do
begin
ch:= z.name shift i extract 8;
if ch=0 then npos:= npos + write(out,sp,1)
else
if (ch>47 and ch<58) or (ch>96 and ch<126) <*legal char*>
then npos:= npos + write(out, false add ch, 1)
else
npos:= npos + write(out,<:<60>:>, <<d>, ch, <:<62>:>);
end two loops;
write(out, sp, 18-npos);
pos:= pos+2;
int:= int+6; <*note*>
end
else
if f >= textstart then
begin <*rest of record is text. null-chars are skipped *>
if f=textstart then write(out, sp, 1);
for i:= -16, -8, 0 do
begin
ch:= z.int shift i extract 8;
if ch=0 or ch=127 then <*nothing*>
else
if ch<32 or ch>125 then write(out, <:<60>:>, <<d>, ch, <:<62>:>)
else
outchar(out, ch);
end;
end
else
begin <*print word as integer*>
write(out, << -ddddddd>, z.int);
pos:= pos+1;
end;
end for-do;
end procedure print;
\f
comment fb 1984.07.18 bossout boss2, testout ...5b...
;
procedure writecore (z, first, top, address, wordsline);
value first, top, address, wordsline ;
integer first, top, address, wordsline ;
zone z ;
begin
integer start_address;
integer field contents;
start_address:= first;
write (out, <:<10> (core):>);
for contents:= first step 2 until top do
begin
if (contents-first) mod (wordsline*2) = 0 then
write (out, <:<10> :>, << -ddddddd>, contents-first+address, <:.:>);
write (out, << -ddddddd>, z.contents);
end;
end;
procedure dumpchain;
begin
integer shw;
shw:= hws;
hws:= 6;
print (z, 0, 0, 0);
hws:= shw;
writecore (z, 8, hws, z.w3, 4);
end;
procedure dumpcore;
begin
integer shw;
shw:= hws;
hws:=6;
print (z, 0, 0, 0);
hws:= shw;
writecore (z, 8, hws, z.w3, 10);
end;
\f
comment chd 82.01.20 bossout boss2, testout ...6...
;
<* declaration of variables for bossout *>
integer b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,
b17,b18,b19,b20,b21,b22,b23; <*bit-vars, for call of print*>
integer field w1,w2,w3,w4,w5,w6,w7,w8,w9,w10,w11,w12, w,wa; <*fielding words of record*>
integer array field iaf;
integer x13,x19,x23; <*work, for specific record types*>
integer i,j,k,l,d,t; <*work*>
integer file, kind, filesize, cyclestart, <*file control*>
sno, segmcount, lasts, old, usedsegs;
integer type, coruno, hws, rest; <*record control*>
boolean changed;
long oldtime, stime;
integer swtime;
integer array ia(1:20); <*work*>
real array ra(1:2);
long field montime;
long array field laf, rtol;
real r;
boolean nl, sp; <*for write*>
zone c(10, 1, stderror); <*work, for write*>
<* initialize variables *>
begin
integer procedure p; <*help procedure*>
begin
p:= 1 shift i;
i:= i+1;
end;
i:= 1;
b1:=p; b2:=p; b3:=p; b4:=p; b5:=p; b6:=p; b7:=p; b8:=p; b9:=p;b10:=p;
b11:=p;b12:=p;b13:=p;b14:=p;b15:=p;b16:=p;b17:=p;b18:=p;b19:=p;b20:=p;
b21:=p;b22:=p;b23:=p;
end;
w1:= 2; w2:= 4; w3:= 6; w4:= 8; w5:= 10; w6:=12; w7:=14; w8:=16; w9:=18; w10:=20; w11:= 22;
w12:= 24; montime:= 4;
nl:= false add 10;
sp:= false add 32;
iaf:= 0;
rtol:= 0;
open(c,0,<::>,0);
\f
comment chd 82.01.20 bossout boss2, testout ...6a...
;
<* start up *>
bosshead;
if kind=4 then
begin
monitor(42<*lookupentry*>, z,0,ia);
filesize:= usedsegs:= ia(1);
write(out, <:<10>size of testoutput file =:>, filesize, <: segments.:>);
end
else filesize:= usedsegs:= (-1) shift(-1); <*biggest pos integer*>
i:= system(4,3,ra);
lasts:= if i=(8 shift 12 +4) and kind=4 then round(ra(1))
else filesize;
<*only print out the last 'lasts' segments out of 'usedsegs' in cycle part*>
<*-usedsegs reduced after fixed part, so that empty segments do not count*>
cyclestart:= 0; <*=not def. yet*>
coruno:= -1;
sno:= -1; <*segm no of current segm. count from 0 to (filesize-1)*>
x13:= x19:= 0;
\f
comment chd 82.01.20 bossout boss2, testout ...7...
;
<* read file *>
for segmcount:= 1 step 1 until filesize do
begin
<* this loop is executed once for each segment of the file *>
sno:= sno+1;
if sno=filesize then
begin
setposition(z,0,cyclestart);
sno:= cyclestart;
end;
inrec6(z,512); <*new segment*>
if z.montime=extend 0 then goto nextsegm;
stime:= z.montime;
swtime:= z.w4; <*time value in head of first record on segm*>
if cyclestart>0 <*after type24 record*>
and segmcount <= usedsegs-lasts then goto nextsegm;
r:= z.montime // 10000; d:= systime(4,r,r); t:= r;
write(out,<:<10><10>segm:>, <<dddd>, sno,
if sno = 0 then <: start-up time::> else <::>,
<: 19:>, <<zd>, d // 10000, <:.:>, (d mod 10000) // 100,
<:.:>, d mod 100, <: :>, t//10000, <:.:>,
(t//100) mod 100, <:.:>, t mod 100);
rest:= changerec6(z,4);
while rest>0 do
begin <*take the records of a segment*>
rest:= inrec6(z,2);
if z.w1=0 then goto nextsegm;
l:= z.w1 shift(-6); <*tail length*>
type:= z.w1 extract 6;
rest:= changerec6(z,0);
if l+6 > rest or rest<6 then
begin <*troubles*>
inrec6(z,rest);
hws:= if rest < 20 then rest else 20;
type:= 0;
changed:= false;
print(z,0,0,0);
goto nextsegm;
end;
hws:= l+6;
rest:= inrec6(z,hws);
if type>4 and type<61 and type<>47 then
begin
changed:= coruno <> z.w3;
coruno:= if z.w3<0 or z.w3>511 then 0 else z.w3;
end
else changed:= false;
if changed then x19:= 0;
\f
comment chd 82.01.20 bossout boss2, testout ...8...
;
<*set params for jensen-device*>
fkind := type;
ftime := z.w2;
fthird := z.w3;
fcoruno:= coruno;
frecord(0):= hws;
if fmove then
for w:= 2 step 2 until hws do frecord.w:= z.w;
if fprint or type=9 or type=13 or type=24 then
begin <*print the record*>
if type > 60 then dumpcore
else if type > 57 then dump
else if type > 47 then print (z, 0, 0, 0)
else
case type of
begin
<* 1*>print(z,0,b4,0);
<* 2*>print(z,0,0,0);
<* 3*>print(z,0,b5,0);
<* 4*>print(z,0,0,0);
<* 5*>print(z,0, b9,0);
<* 6*>begin
print(z,0, b6, 0);
if z.w6 shift(-12) extract 1=0 and z.w6 shift(-12) >1 then
begin <* it looks like a parent message *>
integer npos;
write(out, nl, 1, sp, 24, <:parent message: :>);
i:= z.w6 shift(-5) extract 7; <* format bits *>
npos:= write(out, <<d>, z.w6 shift(-12), <:.:>,
i, <:.:>, z.w6 extract 5, sp, 1);
write(out, sp, 8-npos);
i:= z.w6 shift 12; <* first bit of i is now sign-bit*>
for wa:= 14 step 2 until 26 do
begin
j:= z.wa;
npos:= 0;
if i < 0 <* integer *>
then npos:= npos + write(out, << -ddddddd>, j)
else if j = 0 <* empty text portion *>
then npos:= npos + write(out, sp, 9)
else
for j:= -16, -8, 0 do
begin <*text portion*>
k:= z.wa shift j extract 8;
npos:= npos
+ (if k<33 or k>125
then write(out, <:<60>:>, <<d>, k, <:<62>:>)
else write(out, false add k, 1));
end;
write(out, sp, 9-npos);
i:= i shift 1;
end;
end;
end;
\f
comment chd 82.01.20 bossout boss2, testout ...8a...
;
<* 7*>print(z,0,0,0);
<* 8*>print(z,0,0,0);
<* 9 stop-record *>
begin
print(z,0,b15,0);
if hws >= 16 then
begin
write(out, nl, 1, sp, 21);
writeall(z, 8, 14, 0);
end;
end;
<*10*>print(z,0, b5, 0);
<*11*>begin
print(z,0,0,0);
if hws=10 then write(out,<: in core a::>,
if z.w4=0 then 0 else (z.w4//62 +198),
<: b::>, if z.w5=0 then 0 else (z.w5//62 +198));
end;
<*12*>print(z,0,0,0);
<*13*>if x13=0 then
begin
laf:= 6;
write(out, nl, 2, sp, 9, <:installation name: :>, z.laf, nl,1);
x13:= 1;
end
else if hws = 6+56 then
begin <* start-up record, bos *>
hws:= 6+22;
print(z,0,0,b4);
hws:= 6+56;
iaf:= 0;
write(out, <<-ddddddd>,
nl,2,sp,9,<:first logical address of boss-process: :>,
z.iaf(15),
nl,1,sp,9,<:top logical address of boss-process: :>,
z.iaf(16),
nl,1,sp,9,<: size of boss-process (hw): :>,
z.iaf(16) - z.iaf(15),
nl,1,sp,9,<:first logical address actually used: :>,
z.iaf(17),
nl,1,sp,9,<:last logical address actually used: :>,
z.iaf(18),
nl,1,sp,9,<: size of process actually used (hw): :>,
(z.iaf(18) + 2) - z.iaf(17),
nl,1,sp,9,<:cpa (read-only limit): :>,
z.iaf(19),
nl,1,sp,9,<:base (address displacement): :>,
z.iaf(20),
nl,1,sp,9,<:total size of primary storage (hw): :>,
z.iaf(21),
nl,1,sp,9,<:monitor release: :>,
<< dd>, z.iaf(22) shift(-12) extract 12,
<:.:>, <<zd>, z.iaf(22) extract 12, <: (actual):>,
nl,2,sp,9,<:option values::>,
nl,1,sp,9,<:e78 boss release: :>,
<< dd>, z.iaf(23) shift(-12) extract 12,
<:.:>, <<zd>, z.iaf(23) extract 12,
nl,1,sp,9,<:e79 monitor release: :>,
<<-ddddddd>, z.iaf(24), <: (compare with actual, above):>,
nl,1,sp,9,<:e80 jobhost computer: :>,
if z.iaf(25) < 0 then <: rc4000:> else <: rc8000:>,
nl,1,sp,9,<:i4 number of terminals: :>,
z.iaf(26),
nl,1,sp,9,<:i29 number of drum and disc bs-devices: :>,
z.iaf(27),
nl,1,sp,9,<:e23 number of private bs-devices: :>,
z.iaf(28),
nl,1,sp,9,<:i71 number of standard printers: :>,
z.iaf(29),
nl,1,sp,9,<:i190 number of remote printers: :>,
z.iaf(30),
nl,1,sp,9,<:i45 number of psjob coroutines: :>,
z.iaf(31),
nl,1);
end
else print(z,0,b22+b23, b4);
\f
comment chd 82.01.20 bossout boss2, testout ...9...
;
<*14*>print(z,0,0,0);
<*15*>print(z,4,0,0);
<* 16 bsclaims, only before release 19.00 *>
if hws = 10+6 then print(z, 0, b4+b5+b6+b7+b8, 0)
else
if hws = 18+6 then print(z, 0, b4+b5+b6+b7, b8)
else
print(z,0,0,0);
<* 17 catalog entries (hws=6+34), and chaintable heads (hws=6+36) *>
if hws <> 6+34 and hws <> 6+36 then print(z,0,0,0)
else
begin
integer i;
i:= hws; hws:= 6; print(z,0,0,0); hws:= i;
wa:= 8;
if hws = 6+34 then write(out, <: entry::>) else
begin
write(out,<: chain::>, z.wa);
wa:= wa + 2;
end;
write(out, sp,2, z.wa shift (-12),
<:.:>, <<d>, z.wa shift (-3) extract 9,
<:.:>, z.wa extract 3);
wa:= wa + 2; w:= wa + 2;
write(out, z.wa, z.w);
wa:= wa + 4; laf:= wa - 2;
if z.wa = 0 then write(out, z.wa)
else write(out, sp,1, z.laf);
wa:= wa + 8;
if z.wa > 0 then write(out, z.wa)
else write(out, z.wa shift (-12),
<:.:>, <<d>, z.wa extract 12);
wa:= wa + 2; laf:= wa - 2;
if z.wa = 0 or z.wa = 1 then write(out, z.wa)
else write(out, sp,1, z.laf);
for wa:= wa + 8 step 2 until hws do
write(out, z.wa shift (-12),
<:.:>, <<d>, z.wa extract 12);
end;
<*18*>print(z,0, b4+b5+b8, 0);
<*19*>begin
i:= 0; <*skip empty entries in tape table*>
for w:= 8 step 2 until hws do if z.w<>0 then i:= 1;
x19:= x19+1; <*x19:= 0 when changed = true*>
if i=1 then
begin
print(z, 0, b4+b7, b8);
write(out,<: no=:>, <<d>, x19);
end;
end;
<*20*>print(z, 0, 0, b9);
<*21*>print(z, 0, 0, b7+b16);
<* 22 dumped code *>
dump;
<* 23 request lines *>
if hws<10 then print(z,0,0,0)
else
begin
if z.w4=1 then
begin
print(z,0,0,0);
write(out,<: (remove request):>);
end
else
begin
k:= z.w5; <*text length in hws*>
if k<0 then k:= 0;
if hws>k+10 and z.w4=6 then
begin <*remote req.line*>
x23:= hws;
hws:= k+10; <*print until text end*>
print(z, 6, 0, 0);
hws:= x23;
w:= hws-2;
wa:= hws;
write(out,<: (remote) :>, z.w, z.wa);
end
else
print(z, 6, 0, 0); <*other req.lines*>
end;
end;
\f
comment chd 82.01.20 bossout boss2, testout ...10...
;
<*24*>begin
print(z,0,0,0);
write(out,<:<10><10>*end of fixed part<10><12>:>);
<*now, scan the rest of the file, find oldest segm and start there*>
if kind=4 and cyclestart=0 then
begin
old:= cyclestart:= sno+1;
oldtime:= (extend(-1)) shift(-1); <*biggest positive long*>
for i:= cyclestart step 1 until filesize-1 do
begin
inrec6(z,512);
if z.montime<> extend 0 and z.montime<oldtime then
begin
oldtime:= z.montime;
old:= i;
end;
if z.montime = extend 0 then usedsegs:= usedsegs -1;
end;
setposition(z,0,old);
sno:= old-1;
goto nextsegm;
end scan;
end;
<*25*>begin
print(z, 0, b9, b4);
write(out, nl, 1, sp, 21+9*3, <: seconds::>);
sec(10); sec(11); secclock(12);
end;
<*26*>begin
print(z, 0, b5, 0);
write(out, nl, 1, sp, 21+9*1, <: seconds::>);
sec(6); sec(7); secclock(8); sec(9);
end;
<*27*>print(z, 0, b4+b5+b6+b7+b8+b9+b10+b11, 0);
<*28*>print(z, 0, -1<*all*>, 0);
\f
comment chd 82.01.20 bossout boss2, testout ...10a...
;
<* 29 call parameters, lookup host *>
print(z,0,0,0);
<* 30 return parameters, lookup host *>
print(z,0,0,0);
<* 31 call parameters, lookup device and link-up remote *>
if hws < 10 then print(z,0,0,0) else
if z.w5 > 96 shift 16 <* w5 and on contains a name *>
then print(z,0,b11,b5)
else print(z,0,b11,0); <* telex or remote by default-printer *>
<* 32 host message, lookup device and link-up remote *>
print(z,0,b4+b7+b9,0);
<* 33 host output data, lookup device and link-up remote *>
if hws < 14 then print(z,0,0,0) else
if z.w7 > 96 shift 16 <* w7 and on contains a name *>
then print(z,0,b4+b5+b13,b7)
else print(z,0,b4+b5+b13,0); <* probably telex *>
<* 34 host answer, all host operations *>
print(z,0,b4+b7+b9,0);
<* 35 host input data, all host operations (if answer result = 1) *>
if hws < 14 then print(z,0,0,0) else
if z.w7 > 96 shift 16 <* w7 and on contains a name *>
then print(z,0,b4+b5+b13,b7)
else print(z,0,b4+b5+b13,0); <* probably telex *>
<* 36 return parameters, lookup device and link-up remote *>
if hws < 10 then print(z,0,0,0) else
if z.w5 > 96 shift 15 <* w5 and on contains a name *>
then print(z,0,b11,b5)
else print(z,0,b11,0); <* telex or remote by default-printer *>
<* 37 central variables *>
dump;
<* 38 current page0 *>
dump;
<* 39 current page1 *>
dump;
<* 40 current page2 *>
dump;
<* 41 current page3 *>
dump;
<* 42 current page4 *>
dump;
<* 43 backing storage claims, boss, from monitor table *>
bsclaims( <* boss = *> true);
<* 44 bsclaims, boss, difference between new and old *>
bsclaims(true);
<* 45 bsclaims, user, before adjust key3 *>
bsclaims(false);
<* 46 bsclaims, user, after adjust key3 *>
bsclaims(false);
<* 47 core picture dump *>
dumpchain;
end case type;
end printing;
end take records of a segment;
nextsegm:
end take all segment of file;
stop:
end; end;
\f
; btj 30.08.74 last boss2, testout ...11...
; call of last:
; last docname.file_or_bs.blocks_at_end first_coruno.last_coruno <any legal parameters>
; **optional*** **optional** **optional*
(last=set 30 1
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
or k=22 or (37<=k and k<=42) );
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◀