|
|
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: 10752 (0x2a00)
Types: TextFile
Names: »monareatx «
└─⟦110021343⟧ Bits:30007476 RC8000 Backup tape fra HT's bus-radio system
└─⟦a957ba283⟧
└─⟦this⟧ »monareatx «
monarea=set 1 disc1
scope user monarea
monarea=algol connect.no
begin
message monarea 891129/ho side 1a;
<* Program MONAREA udskriver areaprocesserne brugt af en given intern
proces.
Hvis udskrift sker til terminal vil den, hvis ikke stop er anført ved
kaldet, blive gentaget hver 10. sek., indtil den interne proces der
overvåges bliver fjernet, eller der bliver sendt att til den kaldende
proces efterfulgt af en stop-kommando, eller efter <max> repetitioner.
Efter attention kan der svares 'stop' eller angives et nyt procesnavn.
KALD:
=====
1
(<udfil>=) (MONAREA!MONAREAW!MONPROC!MONPROCW)
0 1 1
<procesnavn> (stop(.<max>) ) ,
0 0
*
(<indgangnavn>)
0
ÆNDRINGSHISTORIE:
=================
890803 ho: Original version.
891129 ho: Stopparameter indført o. a. småændringer.
901122 ho: Udskrift af sum af tilvækst i læst/skrevet tilføjet
910131 ho: Nyt procesnavn og stop efter max muliggjort.
910215 ho: Udskrift af (katalog-)indgange tilføjet
920327 cl: katalogindgange i wis-format (monareaw/monprocw)
udvidet katalogformat (rc9000 multipartitioner)
kun udskrift af tilgåede area's (monproc/monprocw)
*>
\f
message monarea 910215/ho side 1b;
integer proc_addr, area_size, max, nr, i, j, k, tilstand, rel,
ant_filer, kat_størrelse, antal_nøgler, partitioner, segmno,
index, første_fil,
first_area, first_internal, table_end, ant_intern,
ant_area, bit_arr_size, iwr, ird, stopcnt;
integer field proc, ant_indg;
integer array ia(1:20), c(1:1);
integer array field addr, paddr, cur, indgang;
boolean terminal, id, stop, fundet, wis, alle_ud, rsvd, wrpr;
boolean array test(1:1);
boolean array field baf;
long nøglesum;
long array procnavn, filnavn, name(1:2), linie(1:30);
long array field slaf, laf, laf0, enavn;
real r1, r, t, gl_t, ny_t, gl_c, ny_c;
zone zcat, zu(128,1,stderror), z(1,1,stderror);
procedure skriv_navn(z,navn);
zone z;
integer array field navn;
begin
boolean alfa,efter_alfa;
integer pos,tegn;
efter_alfa:=alfa:=false;
pos:=1;
repeat
alfa:=læs_tegn(c.addr.navn,pos,tegn)>96 and tegn<126
or (pos>2 and tegn>47 and tegn<58);
outchar(z,if alfa then tegn else
if -,efter_alfa and tegn=0 then 46<*.*> else
if tegn=0 then 32 else 33<*!*>);
efter_alfa:=efter_alfa or alfa;
until pos=12;
end skriv_navn;
\f
message monarea 910131/ho side 2;
reflectcore(c);
addr:=2;
replacechar(1,'.'); replacechar(4,',');
i:=system(4,1,name);
if i <> (6 shift 12 + 10) then i:=system(4,0,name);
wis:= name(2) shift (-32) extract 8 = 'w';
alle_ud:= name(1) shift 24 <> long<:pro:>;
første_fil:=2;
i:=system(4,1,procnavn);
if i = (6 shift 12 + 10) then
begin i:=system(4,2,procnavn); første_fil:=3; end;
if i<> (4 shift 12 + 10) then
begin
write(out,<:*** monarea: proces-navn mangler:>,"nl",1);
goto slut_kørsel;
end;
i:=system(4,første_fil,filnavn);
while i<>0 and (i<>(4 shift 12 +10) or filnavn(1)=long<:stop:>) do
begin
første_fil:=første_fil+1;
i:=system(4,første_fil,filnavn);
end;
ant_filer:=if i=(4 shift 12+10) then 1 else 0;
open(zcat,4,<:catalog:>,0);
monitor(42,zcat,0,ia);
katstørrelse:=ia(1);
antalnøgler:=ia(8);
partitioner:=ia(1)//ia(8);
stop:=findfpparam(<:stop:>,true,ia)>=0;
stopcnt:=ia(1);
forfra:
open(z,0,procnavn,0);
paddr:=proc_addr:=monitor(4,z,0,ia);
close(z,true);
if proc_addr=0 then
begin
write(out,<:*** monarea: processen :>,procnavn,<: findes ikke:>,"nl",1);
goto slut_kørsel;
end;
baf:=0;
rel:=c.addr.paddr.baf(11) extract 12 -4096;
id:=c.addr.paddr.baf(12);
first_area:=c.addr(76//2);
first_internal:=c.addr(78//2);
table_end:=c.addr(80//2);
ant_area:=(first_internal-first_area)//2;
ant_intern:=(table_end-first_internal)//2;
bit_arr_size:=((ant_intern+23)//24)*2*2;
i:=(first_internal-first_area)//2;
area_size:=j:=c.addr(first_area//2+1)-c.addr(first_area//2);
baf:=-1;
slaf:=18;
laf0:=laf:=0;
openfp(zu,0);
getzone6(zu,ia);
closefp(zu,false);
terminal:= ia(1) extract 12 =8;
\f
message monarea 891129/ho side 3;
begin
integer array ADR, WR, RD(1:ant_area);
boolean array set(1:ant_area);
for i:=1 step 1 until ant_area do
begin
set(i):=false;
ADR(i):=WR(i):=RD(i):=0;
end;
max:=0;
paddr:=monitor(4,z,0,ia);
systime(1,0,gl_t);
gl_c:=c.addr.paddr.laf0(14)/10000.0;
igen:
paddr:=monitor(4,z,0,ia);
k:=if paddr=0 then 0 else c.addr.paddr(5) extract 12;
tilstand:=if k=0 then 0
else if k=11<*running*> then 1
else if k=200<*w.f.CPU*> then 2
else if k=8<*running after error*> then 3
else if k=176<*w.f.stop by parent*> then 4
else if k=160<*w.f.stop by ancest*> then 5
else if k=184<*w.f.start by parent*> then 6
else if k=168<*w.f.start by ancest*> then 7
else if k=204<*w.f.procesfunction*> then 8
else if k=141<*w.f.message*> then 9
else if k=142<*w.f.answer*> then 10
else if k=143<*w.f.event*> then 11
else 12;
t:=if paddr=0 then 0.0 else c.addr.paddr.laf0(15)/10000.0;
systime(1,0,ny_t);
ny_c:=c.addr.paddr.laf0(14)/10000.0;
r:=ny_t-gl_t;
if r<0.1 then r:=0.1;
openfp(zu,0);
write(zu,"nl",1,"ff",1,
<:PROCES: :>,proc_navn,"sp",1,case tilstand+1 of (<:NEX:>,
<:RUN:>,<:WCP:>,<:RER:>,<:WSP:>,<:WSA:>,<:WsP:>,<:WsA:>,<:WPF:>,
<:WME:>,<:WAN:>,<:WEV:>,<:???:>),<< zd dd dd>,systime(5,0,r1),r1,
<: CPU::>,<<dd.ddd>,ny_c-gl_c,<: =:>,<<ddd.d>,(ny_c-gl_c)/r*100.0,
<: %:>,"nl",1,
<* <: STARTET::>,systime(4,t,r),r,"nl",1,*>
<:AREA LOW BASE HIGH BASE WRITE READ ACCESS' SEGM DOCUMENT:>);
gl_c:=ny_c; gl_t:=ny_t;
\f
message monarea 901123/ho side 4;
for i:=1 step 1 until max do set(i):=false;
proc:=first_area;
while proc<first_internal do
begin
cur:=c.addr.proc;
proc:=proc+2;
if (c.addr.cur.baf(rel) and id) extract 12<>0 then
begin
fundet:=false; j:=0;
for i:=1 step 1 until max do
begin
if ADR(i)=0 and j=0 then j:=i;
if ADR(i)=cur then
begin fundet:=true; nr:=i; i:=max+1; end;
end;
if not fundet then
begin
if j<>0 then
nr:=j
else
nr:=max:=max+1;
ADR(nr):=cur;
end;
set(nr):=true;
iwr:=c.addr.cur(14)-WR(nr);
ird:=c.addr.cur(15)-RD(nr);
WR(nr):=c.addr.cur(14);
RD(nr):=c.addr.cur(15);
rsvd:= (c.addr.cur(6) shift (-12) extract 12 -4096) = rel and
((false add (c.addr.cur(6) extract 12)) and id) extract 12 <> 0;
wrpr:= (c.addr.cur.baf(rel-2-bit_arr_size) and id) extract 12<>0;
if (iwr+ird <> 0) or alle_ud then
begin
outchar(zu,'nl');
skriv_navn(zu,cur);
j:=write(zu,<<-ddddddd>,c.addr.cur(-2),<:.:>,<<z>,c.addr.cur(-1));
write(zu,"sp",18-j,<< ddddddd>,WR(nr),RD(nr));
i:=if iwr<0 or ird<0 then -1 else iwr+ird;
if i>999 then i:=-1;
if i<0 then write(zu,<: -:>)
else write(zu,<< bdddddd>,i);
write(zu,<< ddddddd>,c.addr.cur(9),"sp",2);
write(zu,"sp",12-write(zu,c.addr.cur.slaf));
if rsvd then write(zu,<:R:>);
if wrpr then write(zu,<:W:>);
end;
end;
end;
if testbit(1) then write(zu,"nl",1,<:bi-arr-size :>,bit_arr_size,
ant_intern,table_end,first_internal);
ud(zu);
j:=0;
for i:=1 step 1 until max do
begin
if set(i) then j:=i
else ADR(i):=WR(i):=RD(i):=0;
end;
if max>j then max:=j;
\f
message monarea 910215/ho side 5a;
if ant_filer>0 then
begin
write(zu,"nl",1,"-",79);
ant_indg:=512;
enavn:=6;
index:=første_fil;
i:=1;
while i<>0 do
begin
i:=system(4,index,filnavn);
index:=index+1;
if i=(4 shift 12+10) and filnavn(1)<>long<:stop:> then
begin
integer i, j, k, nr, ant;
<* j:=hashnøgle(filnavn,katstørrelse); *>
nøglesum:= filnavn(1) + filnavn(2);
nøglesum:= nøglesum shift (-24) + nøglesum extract 24;
nøglesum:= nøglesum extract 24 +
(nøglesum shift (-12) shift 36)//(extend 1 shift 36);
nøglesum:= nøglesum shift 24 shift (-24);
segmno:= nøglesum mod katstørrelse;
j:= segmno mod antalnøgler;
setposition(zcat,0,segmno);
inrec6(zcat,512);
ant:=zcat.ant_indg;
nr:=k:=0;
while nr<ant do
begin
indgang:=k*34;
if zcat.indgang(1) shift(-3) extract 9 = j then
begin
if zcat.indgang.enavn(1)=filnavn(1) and
zcat.indgang.enavn(2)=filnavn(2) then
begin
skrivindg(linie,zcat.indgang,0,wis);
put_char(linie,81,0,6);
write(zu,"nl",1,linie);
end;
nr:=nr+1;
end;
k:=k+1;
if k>15 then
begin
k:=0;
getposition(zcat,0,i);
if i=katstørrelse-1 then setposition(zcat,0,0);
inrec6(zcat,512);
end;
end;
end;
end;
ud(zu);
end;
\f
message monarea 910131/ho side 5b;
name(1):=name(2):=0;
i:=monitor(4,z,0,ia);
if not stop_by_att(name) and i<>0 and terminal and (not stop or stopcnt>0) then
begin
stopcnt:=stopcnt-1;
closefp(zu,false);
if name(1)<>0 then
begin
tofrom(proc_navn,name,8);
goto forfra;
end;
systime(1,0,t);
ventetid(10.0+gl_t-t);
goto igen
end
else
begin
outchar(zu,'nl');
if i=0 then
write(zu,<:Processen: :>,proc_navn,<: eksisterer ikke!:>,"nl",1);
end;
end;
closefp(zu,false);
slut_kørsel:
trapmode:=1 shift 10;
message monarea 890720/ho slut;
end
lookup monarea monareatx
end
▶EOF◀