|
|
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: 96768 (0x17a00)
Types: TextFile
Names: »skrivproctx «
└─⟦110021343⟧ Bits:30007476 RC8000 Backup tape fra HT's bus-radio system
└─⟦a957ba283⟧
└─⟦this⟧ »skrivproctx «
skrivproces=set 1 disc
skrivproces=algol
external
message procedure skrivproces side 1 - 790620/hko,840204/bsa;
integer procedure skrivproces(z,procadr,term,procbeskr,måde);
value procadr, måde;
integer procadr, måde;
zone z;
integer array term,procbeskr;
<* proceduren skriver en procesbeskrivelse for
en intern proces.
kald: skrivproces(z,procadr,term,procbeskr,måde);
skrivproces (retur,integer) antal linier udskrevet.
z (kald,zone) angiver hvilket
dokument der skal skrives på.
procadr (kald,integer) hvis procadr er <>0
skrives 'proces adresse; <procadr>'.
term (kald,integer array) hvis første ord
er <>0 skrives indholdet som tekst,
idet det antages at term indeholder
navnet på den terminal hvorfra
processen er startet.
procbeskr (kald,integer array) skal indeholde en
fuldstændig procesbeskrivelse for en intern
proces, startende i ord -2.
måde (kald,integer) angiver udskriftmåden.
0: normal udskrift incl. discoplysninger
1: maximal ikke-disc oplysning, status- m.v.
alene = også discoplysninger
2=1<1: normale ikke-disc oplysninger
4=1<2: komprimerede ikke-disc oplysninger
8=1<3: discoplysninger
kaldte procedurer:
afslut_text,
claimproc,
hægt_string,
slices,
ud.
fejlreaktioner:
ingen.
Ændringshistorie:
=================
871211 hko: Layout for disc ressourcer og cpu-tid ændret.
910315 ho: Måde 2, 4 og 8 tilføjet.
*>
\f
message procedure skrivproces side 2 - 790313/hko;
begin
integer array ia,tekst(1:20);
integer bsant,bsmax,monrel;
system(5,64,ia);
monrel:=ia(1) shift (-12);
system(5,92,ia);
bsant:=(ia(3)-ia(1))//2;
bsmax:=bsant-1;
begin
integer array bs(1:bsant*(4+1+1)); <* bsnavn: 4 ord
slicelængde: 1 ord
rel. adresse: 1 ord *>
integer array pnavn(1:4);
long array field doc,laf;
boolean tilstand;
integer nr,linie,pos,i,j;
integer field slicelgd,reladr;
integer array field iaf;
real r,t;
slicelgd:=10;
reladr:=12;
laf:=iaf:=0;
linie:=0;
nr:=-1;
repeat
nr:=nr+1;
doc:=nr*12;
claimproc(0,nr,bs.doc,0,0,bs.doc.slicelgd);
slices(bs.doc.iaf,0,ia,tekst);
bs.doc.reladr:=tekst(1);
until nr=bsmax;
\f
message procedure skrivproces side 3 - 790613/hko, 880822/ho;
tofrom(pnavn,procbeskr,8);
if pnavn(1)=0 then
pnavn(1):=46 shift 8 add 46 shift 8 add 46;<*...*>
if måde<2 then write(z,"nl",0,"-",80,nl,1); linie:=linie+1;
if måde=0 or måde extract 3 <> 0 then
pos:=write(z,"nl",1,pnavn.laf); linie:=linie+1;
if term(1)<>0 and false then
begin
write(z,"sp",13-pos,<:fra: :>,"sp",2,term.laf,"nl",1,"sp",12);
linie:=linie+1;
pos:=13;
end
else
begin
write(z,"sp",13-pos);
pos:=13;
end;
if måde extract 1 = 1 then
begin
write(z,"sp",13-pos,<:tilstand: :>);
tilstand:=false add (procbeskr(5) extract 12);
pos:=1;
if -,(tilstand shift (-7)) then
begin
hægt_string(tekst,pos,<:kørende:>);
if -,(tilstand shift (0)) then
hægt_string(tekst,pos,<: efter fejl:>);
end
else
begin
hægt_string(tekst,pos,<:ventende på :>);
if tilstand shift (-5) then
begin <* start/stop *>
hægt_string(tekst,pos,if tilstand shift (-3) then
<:start fra:> else <:stop fra:>);
hægt_string(tekst,pos,if tilstand shift (-4) then
<: ophav:> else <: forfader:>);
end
else
begin
if tilstand shift (-2) then
begin
i:=tilstand extract 2+1;
hægtstring(tekst,pos,case i of (<:procfunc:>,
<:message:>,
<:answer:>,
<:event:>) );
end
else hægtstring(tekst,pos,<:cpu:>);
end;
end;
<* binær udskrift af tilstand: *>
for i:= 1,2 do afslut_text(tekst,pos);
write(z,tekst.laf,"sp",6);
for i:= -11 step 1 until 0 do
begin
outchar(z,48+(tilstand shift i) extract 1);
if i mod 4 = 0 and i<>0 then outchar(z,32);
end;
write(z,"nl",1,"sp",12);
linie:=linie+1;
end;
\f
message procedure skrivproces side 4 - 790620/hko;
j:=if måde shift(-1) extract 1 = 1 then 1
else if måde=0 or måde shift(-1) extract 1 = 1 then 2 else 4;
for i:=j step 1 until 3 do
begin
boolean første_linie;
første_linie:= ((måde=0 and i=2) or (måde>0 and i=1));
if første_linie then
write(z,<:baser::>,"sp",6)
else
begin
write(z,"nl",1,"sp",24);
linie:=linie+1;
end;
j:= case i of (34,38,36);
pos:=write(z,<<-ddddddd>,procbeskr(j),<:.:>,<<d>,procbeskr(j+1));
write(z,"sp",18-pos,case i of (<:katalog:>,<:standard:>,<:max:>));
end;
if måde=0 or måde extract 2<> 0 then
begin
pos:=0;
write(z,"nl",1,"sp",12,<:function: :>); linie:=linie+1;
j:=procbeskr(14) extract 12; <* function mask *>
for i:= 0 step 1 until 11 do
begin
if (j shift (i-11) extract 1) = 1 then pos:=pos+write(z,<< dd>,i);
end;
write(z,"sp",38-pos,<:pr::>,<< ddd>,procbeskr(16) shift (-12),"sp",3,
<:pk::>,procbeskr(16) extract 12);
end;
if måde extract 1 = 1 then
begin
j:=23-round(ln(extend 0 add procbeskr(6))/ln(2.0));
for i:= 1,2,3,4 do
begin
write(z,"nl",1,"sp",12,case i of (<:første adresse::>,
<:proces adresse::>,
<:identifik. bit::>,
<:proc.prioritet::>),
case i of (procbeskr(11),
procadr,
j,
procbeskr(15)));
linie:=linie+1;
end;
t:=procbeskr.laf(15)//10000;
write(z,"nl",1,"sp",12,<:starttidspunkt::>,<< dd dd dd>,
systime(4,t,r),r); linie:=linie+1;
r:=procbeskr.laf(14)/10000.0;
write( z,"nl",1,"sp",12,<:cputidsforbrug::>,<< ddddd.00'z>,r,<: sek:>);
end;
if måde=0 or måde extract 2 <>0 then
begin
write(z,"nl",2,"sp",12,<:ressourcekrav::>,
"nl",2,"sp",15,<:hovedlager::>,<< dddddd>,
procbeskr(12)-procbeskr(11),<: halvord:>,
"nl",1,"sp",15,<:areaproc::>,<<ddd>,procbeskr(13) extract 12,
"nl",0,"sp",3,<:mess. buf::>,procbeskr(13) shift (-12),
"nl",0,"sp",3,<:int.proc::>,procbeskr(14) shift (-12),
"nl",0);
linie:=linie+2+2+2+1+0+0+0;
end
else if måde shift(-2) extract 1 = 1 then
begin
write(z,"sp",13-pos,<:area::>,<<ddd>,procbeskr(13) extract 12,
<: buf::>,procbeskr(13) shift(-12),
<: size::>,<< d>,procbeskr(12)-procbeskr(11));
end;
\f
message procedure skrivproces side 5 - 870305/hko;
if måde<2 or måde shift(-3) extract 1 = 1 then
begin
write(z,"nl",1,"sp",15,
<:baggrundslager temp login perm:>,
"nl",1,"sp",18,
<:dokument seg/sl segm entr segm entr segm entr:>);
linie:=linie+1+1;
for nr:= 0 step 1 until bsmax do
begin
doc:=nr*12;
if bs.doc.slicelgd>0 then
begin
write(z,"nl",1,"sp",18); linie:=linie+1;
pos:=write(z,bs.doc);
write(z,"sp",11-pos,<<ddddd>,bs.doc.slicelgd);
iaf:=bs.doc.reladr;
for j:=0,2,3 do
if monrel<=8 then
begin
write(z,<<dddddd>,"sp",3,
procbeskr.iaf(j) extract 12 * bs.doc.slicelgd,
procbeskr.iaf(j) shift (-12));
end
else
begin
write(z,<<dddddd>,"sp",3,
procbeskr.iaf(2*j+1) * bs.doc.slicelgd,
procbeskr.iaf(2*j));
end;
end;
end;
end;
write(z,"nl",1); linie:=linie+1; ud(z);
skrivproces:=linie;
end;
end;
end
▶EOF◀