|
|
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: 29952 (0x7500)
Types: TextFile
Names: »txtktasstat«
└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ.
└─⟦4334b4c0b⟧
└─⟦this⟧ »txtktasstat«
ktasstat=algol list.yes xref.no blocks.no
begin
message ktasstat 1981.01.25 ;
real array kitnavn(1:2);
integer init_segmnr,status,i,j,k,startsegment,topsegment,
log_bloklengde,totalantaltrans,accepttrans,søjlehøjde;
zone init(128,1,opstderror);
integer field startsegm_field,topsegm_field,log_bloklengde_field;
boolean nl,sp,ff,logslut,test;
comment erklæringer vedrørende behandling;
integer array antal_trans(0:24),terminal_ids(0:24,1:400);
integer startdag,startmd,startaar,slutdag,slutmd,slutaar,
antal_terminaler;
\f
procedure error(errno);
value errno;integer errno;
begin
write(out,nl,2,<: **** :>);
case errno of
begin
write(out,<:fejl ved montering af kit :>);
write(out,<:param fejl - trans/termi forventet:>);
write(out,<:param fejl - dato angivet forkert:>);
write(out,<:param fejl - dato mangler:>);
write(out,<:param fejl - tid angivet forkert:>);
write(out,<:param fejl - andet end tid/dato angivet:>);
write(out,<:param fejl - aar skal være dette år:>);
end;
write(out,nl,2);
goto exit;
end proc error;
\f
procedure log_bloc_proc(z,s,b);
zone z;
integer s,b;
begin
integer array sh_arr(1:12),z_arr(1:20);
if (s extract 1 = 1) then opstderror(z,s,b);
getzone6(z,z_arr);
getshare(z,sh_arr,z_arr(17));
if sh_arr(7) = topsegment then
begin
integer array field ia;
ia:=0;
z.ia(1):=8;
z.ia(3):=4;
z.ia(4):=0;
log_slut:=true;
end;
end proc log_bloc_proc;
\f
<* konstanter *>
søjle_højde:=20;
antal_terminaler:=0;
for i:= 0 step 1 until 24 do
antal_trans(i) := 0;
for i:=0 step 1 until 24 do
for j:=1 step 1 until 400 do terminal_ids(i,j):=0;
logslut:=false;
startsegm_field:=8;
topsegm_field:=10;
log_bloklengde_field:=6;
test:=true;
sp:= false add 32;
nl:= false add 10;
ff:= false add 12;
textassign(kitnavn,<:logkit:>,i);
init_segmnr:= opglobals(<:kitindexsegmadr:>);
igen:
i:=monter_kit(kitnavn,7,status,4);
if i>0 then error(1)
else if i<0 then goto igen;
i:=1;
open(init,4,string kitnavn(increase(i)),0);
setposition(init,0,init_segmnr);
inrec6(init,512);
startsegment:=init.startsegm_field;
topsegment:=init.topsegm_field;
log_bloklengde:=init.log_bloklengde_field;
close(init,opglobals(<:opkitreleasemode:>)=1);
begin
<*indreblok*>
<*dimensionering er bestemt af parametre fra logkittet*>
zone logfil((log_bloklengde//4)*2,2,log_bloc_proc);
integer array logblok(1:2048);
integer field
bloklengde,bloktype,termid,terminalens_a_omr,afg_inp,cpu_inp,
ank_søg,afg_søg,cpu_søg,ank_ops,afg_ops,cpu_ops,
ank_out,afg_out,cpu_out;
integer array antal_forsp(1:4,0:25);
integer tael,hour;
long array totaltid(0:25);
integer array antalfejl(0:25);
real snit,var;
real array svartid(0:25);
integer array svarfor(0:25,0:32);
integer array totalcputid(0:24);
integer array minsvartid,maxsvartid(0:25);
long samtid;
integer array fordelinput(7:28),
fordelsøge(2:41),
fordelopslags(1:32),
fordeloutput(5:20);
real array snit_forsp,var_forsp(1:4,1:3,0:25);
boolean termi,trans,all,single,print,allstat;
real field ank_inp;
integer startdato,starttid,slutdato,sluttid;
\f
procedure les_logfil;
begin
integer array field logrec;
integer field reclengde;
reclengde:=2;
logrec:=4;
invar(logfil);
if logfil.reclengde = 4096 then les_logfil;
tofrom(logblok,logfil.logrec,logfil.reclengde-4);
end proc les_logfil;
\f
procedure parameterlist;
begin
integer sep,paramno;
real r,time;
real array param(1:2);
sep:=system(4,1,param);
paramno:=2;
if param(1) = real <:termi:> then termi:=true
else
if param(1) = real <:trans:> then trans:=true
else
if param(1) = real <:print:> then print:=true
else error(2);
sep:=system(4,paramno,param);
if param(1) = real <:all:> then
begin
systime(1,0,time);
slutdato:= systime(4,time,r);
all:=true;
slutdag:=slutdato mod 100;
slutmd:= (slutdato mod 1000 - slutdag)//100;
slutaar:=slutdato // 10000;
end
else single:=true;
paramno:=paramno+1;
sep:=system(4,paramno,param);
if param(1) <> real <:dato:> then error(4)
else
for i:=paramno+1,i+1,i+1 do
begin
sep:=system(4,i,param);
if (sep shift (-12))extract 12 <> 8 <*punktum*> then error(3);
case i-paramno of
begin
startdato:=param(1);
startdato:=startdato +100*param(1);
startdato:=startdato + 10000*param(1);
end;
end;
paramno:=paramno+4;
if all then
begin
startdag:= startdato mod 100;
startmd:=(startdato mod 1000 - startdag)// 100;
startaar:= startdato//10000;
if startaar <> slutaar then error(7);
end;
sep:=system(4,paramno,param);
if sep = 0 then
begin
<*ingen tid angivet*>
starttid:=0;
sluttid:=2300;
end
else
if param(1) <> real <:tid:> then error(6)
else
begin
for i:= paramno+1,i+1,i+1,i+1 do
begin
sep:=system(4,i,param);
if sep shift (-12) <> 8 then error(5);
case i-paramno of
begin
starttid:=param(1);
starttid:=starttid*100+param(1);
sluttid:=param(1);
sluttid:=sluttid*100+param(1);
end;
end;
paramno:=paramno+4;
sep:=system(4,paramno,param);
if param(1) <> real <:stat:> then allstat:=false else
allstat:=true;
end;
end proc paramliste;
\f
procedure listfordeling(proc,nedre,øvre,typ);
integer proc,nedre,øvre,typ;
begin
write(out,<:<12>:>);
case proc of
begin
write(out,nl,1,<:CPU-TIDSFORDELING I INPUTPROCES:>);
write(out,nl,1,<:CPU-TIDSFORDELING I SØGEPROCES :>);
write(out,nl,1,<:CPU-TIDSFORDELING I OPSLAGSPROCES:>);
write(out,nl,1,<:CPU-TIDSFORDELING I OUTPUTPROCES:>);
end;
write(out,nl,1,<:________________________________:>);
write(out,nl,2,<:CPU-TID I MS:>,sp,5,<:antalforsp:>);
write(out,nl,2);
for i:=nedre step 1 until øvre do
begin
if i = nedre then
write(out,<: 0:>) else
write(out,<<ddd>,if typ = 1 then (i-1) else (i-1)*10);
write(out,<: - :>);
if i=øvre then
write(out,<:...:>) else
write(out,<<ddd>,if typ = 1 then i else i*10);
write(out,<: ::>);
case proc of
begin
write(out,sp,10,fordelinput(i),nl,1);
write(out,sp,10, fordelsøge(i),nl,1);
write(out,sp,10,fordelopslags(i),nl,1);
write(out,sp,10,fordeloutput(i),nl,1);
end;
end;
end;
\f
procedure akumstat;
begin
real array snit1forsp(1:10,1:4,1:3);
integer array antalobs(1:10,1:4),antal1forsp(1:10,1:4);
integer antaltusind,nrforsp;
for i:=1 step 1 until 10 do
for j:=1 step 1 until 4 do
begin
antalobs(i,j):=0;
antal1forsp(i,j):=0;
for tael:=1 step 1 until 3 do
snit1forsp(i,j,tael):=0.0;
end;
for tael:=0 step 1 until 23 do
begin
for i:=1 step 1 until 4 do
begin
nrforsp:=antal_forsp(i,tael);
antaltusind:=1;
nrforsp:=nrforsp-1000;
while nrforsp > 0 do
begin
antaltusind:=antaltusind+1;
nrforsp:=nrforsp-1000;
end;
if antaltusind < 10 then
begin
antalobs(antaltusind,i):=antalobs(antaltusind,i)+1;
antal1forsp(antaltusind,i):=antal1forsp(antaltusind,i)+
antal_forsp(i,tael);
for j:=1 step 1 until 3 do
snit1forsp(antaltusind,i,j):=snit1forsp(antaltusind,i,j)+
snit_forsp(i,j,tael);
end;
end;
end;
comment
***********************************
* *
* Udskrift af akumuleret stat *
* *
*********************************** ;
for i:=1 step 1 until 4 do
begin
write(out,<:<12>:>);
case i of
begin
write(out,<:<10>I N P U T P R O C E S:>);
write(out,<:<10>S Ø G E P R O C E S:>);
write(out,<:<10>O P S L A G S P R O C E S:>);
write(out,<:<10>O U T P U T P R O C E S:>);
end;
write(out,nl,2);
write(out,<:Antalforsp:>,sp,5,<:Antalobs:>,
sp,5 ,<:Snit :>,
sp,5,<:Procestid:>,
sp,5,<:CPU-tid:>,
sp,5,<:Køtid:>);
for tael:=1 step 1 until 10 do
begin
if antalobs(tael,i)>0 then
begin
write(out,nl,1);
write(out,sp,1,<<dddd>,(tael-1)*1000,<: - :>,tael*1000);
write(out,<: : :>,sp,4,<<dddd>,antalobs(tael,i));
write(out,sp,3,<<dddd.d>,
antal1forsp(tael,i)/antalobs(tael,i));
if antal1forsp(tael,i) > 0 then
begin
write(out,sp,7,<<dddd.dd>
,snit1forsp(tael,i,1)/antal1forsp(tael,i));
write(out,sp,4,<<dddd.dd>,
snit1forsp(tael,i,2)/antal1forsp(tael,i));
write(out,sp,3,<<dddd.dd>,
snit1forsp(tael,i,3)/antal1forsp(tael,i));
end;
end;
end;
end;
end akumstat;
\f
procedure svarfordel;
begin
real procent,accprocent;
integer i,j;
integer array antal(0:25);
for i:=0 step 1 until 25 do
antal(i):=antal_forsp(4,i);
for i:=0 step 1 until 25 do
begin
if i <> 24 and i>5 then
begin
accprocent:=0.0;
write(out,<:<12>:>);
write(out,<:<10>Svartidsfordeling.:>);
write(out,<:<10>------------------:>);
write(out,<:<10><10>:>);
if i = 25 then
write(out,<:<10>Samlet statistik :>)
else
write(out,<:<10>Statistik fra kl. :>,<<dd>,i,
<: til kl. :>,<<dd>,i+1);
write(out,<:<10>---------------------------------:>);
write(out,<:<10><10>:>);
write(out,<:<10>Svartid i ms antalforsp. procent af alle acc.procent:>);
write(out,<:<10>----------------------------------------------------------:>);
write(out,<:<10>:>);
for j:=0 step 1 until 32 do
begin
if j = 32 then
write(out,<:<10> over 7999:>)
else
write(out,<:<10> :>,<<dddd>,j*250,
<: - :>,<<dddd>,((j+1)*250)-1);
write(out,<: :>,<<ddddd>,svarfor(i,j));
if antal(i) > 0 then
procent:=(svarfor(i,j)/antal(i))*100
else
procent:=0;
accprocent:=accprocent+procent;
write(out,<: :>,<<ddd.dd>,procent);
write(out,<: :>,<<ddd.dd>,accprocent);
end for j;
end if i;
end for i;
end svarfordel;
\f
procedure listsvar;
begin
integer i,j,mindst,mindsti;
integer array antalsvar(0:23);
real array udnyt(0:23);
long udnyttelse,tottid;
for i:=0 step 1 until 23 do
antalsvar(i):=antal_forsp(4,i);
for i:=0 step 1 until 23 do
udnyt(i):=(totalcputid(i)/3600000)*100;
write(out,<:<12>:>);
write(out,<:<10>Svartidsfordeling og udnyttelsesfordeling:>);
write(out,<:<10>-----------------------------------------:>);
write(out,<:<10>:>,<:<10>:>);
write(out,<:<10>Antalfosp Svartid i ms Udnyttelses af CPU:>);
write(out,<:<10>------------------------------------------------:>);
write(out,<:<10><10>:>);
for i:=0 step 1 until 23 do
begin
mindst:=100000;
mindsti:=0;
for j:=0 step 1 until 23 do
begin
if antalsvar(j) <> -1 then
begin
if antalsvar(j) < mindst then
begin
mindst:=antalsvar(j);
mindsti:=j;
end;
end;
end;
write(out,<:<10>:>,<<dddd>,antalsvar(mindsti),
<: :>,<<dddd.d>,svartid(mindsti),
<: :>,<<dd.d>,udnyt(mindsti),<: % :>);
antalsvar(mindsti):=-1;
end;
tottid:=86400000;
udnyttelse:=(samtid/tottid)*100;
write(out,nl,2);
write(out,<:<10>Total for hele døgnet:>);
write(out,<:<10>:>,<<ddddd>,antal_forsp(4,25),
<: :>,<<dddd.d>,svartid(25),
<: :>,<<dd.d>,udnyttelse,<: % :>);
end;
\f
procedure ydertilf;
begin
write(out,<:<12>:>);
write(out,<:<10>Ydertilfælde for svartider.:>);
write(out,<:<10>--------------------------:>);
write(out,<:<10><10>:>);
write(out,<:<10> minimal maksimal :>);
for i:=0 step 1 until 23 do
begin
write(out,<:<10>mellem kl. :>,<<dd>,i,
<: og kl. :>,<<dd>,i+1);
write(out,<: :>,<<ddddd>,minsvartid(i),
<: :>,<<ddddd>,maxsvartid(i));
end;
write(out,nl,2);
write(out,<:<10>Samlet for hele døgnet:>);
write(out,<: :>,<<ddddd>,minsvartid(25),
<: :>,<<ddddd>,maxsvartid(25));
end ydertilf;
\f
procedure liststat;
begin
procedure beregnsnit(l);integer l;
begin
if antal_forsp(i,tael) <> 0 then
snit:=snit_forsp(i,l,tael)/antal_forsp(i,tael)
else snit:=0.0;
end;
procedure beregnvar(l);integer l;
begin
if antal_forsp(i,tael) <> 0 then
var:= var_forsp(i,l,tael)/(antal_forsp(i,tael))-
((snit**2))
else var:=0.0;
end;
procedure skrivproc;
begin
integer j,k;
j:=1;
k:=write(out,string procesname(increase(j)));
write(out,sp,7-k);
end;
real array procesname(1:2);
integer i;
write(out,ff,1);
write(out,nl,1,<:Udvidet statestik: :>);
write(out,nl,1,<:------------------ :>);
for tael:=0 step 1 until 25 do
begin
if tael <> 0 then write(out,<:<12>:>);
if tael <> 24 then
begin
if tael <> 25 then
write(out,<:statestik for kl. :>,tael,
<: til kl. :>,tael+1) else
write(out,<:<10> samlet statestik :>);
for i:=1 step 1 until 4 do
begin
case i of
begin
<*1*>
begin
procesname(1):= real <:input:>;
procesname(2):= real <::>;
end;
<*2*>
begin
procesname(1):=real <:søge:>;
procesname(2):=real <::>;
end;
<*3*>
begin
procesname(1):=real <:opsla:> add 103;
procesname(2):=real <:s:>;
end;
<*4*>
begin
procesname(1):=real <:outpu:> add 116;
procesname(2):=real <::>;
end;
end;
write(out,nl,2,<:Antal forespørgsler til :>);
skrivproc;
write(out,<: proces = :>,
antal_forsp(i,tael));
write(out,nl,1,<:samlet tid i :>);skrivproc;
write(out,<: process =:>,<<dddddd.dd>,snitforsp(i,1,tael));
beregnsnit(1);
write(out,nl,1,<:gennemsnitlig procestid for :>);
skrivproc;
write(out,<: process=:>,
<<dddd.dd>,snit);
beregnvar(1);
write(out,nl,1,<:variancen på procestid for :>);
skrivproc;
write(out,<: process=:>,
<<dddddd.dd>,var);
beregnsnit(2);
beregnvar(2);
write(out,nl,1,<:gennemsnitlig cputid for :>);
skrivproc;
write(out,<: process = :>,
<<dddd.dd>,snit);
write(out,nl,1,<:variancen på cputid for :>);
skrivproc;
write(out,<: process = :>,
<<dddddd.dd>,var);
beregnsnit(3);beregnvar(3);
write(out,nl,1,<:gennemsnitlig køtid for :>);
skrivproc;
write(out,<: process = :>,
<<dddd.dd>,snit);
write(out,nl,1,<:variancen på køtid for :>);
skrivproc;
write(out,<: process =:>,
<<dddddd.dd>,var);
end;
write(out,nl,2,<:total process tid = :>,totaltid(tael));
write(out,nl,2,<:antalfejl og bladninger =:>,antalfejl(tael));
if antal_forsp(4,tael) > 0 then
svartid(tael):=totaltid(tael)/antal_forsp(4,tael)
else
svartid(tael):=0;
end;
end for tael;
listfordeling(1,7,28,1);
listfordeling(2,2,41,2);
listfordeling(3,1,32,2);
listfordeling(4,5,20,1);
akumstat;
end proc list stat;
\f
procedure stat;
begin
integer i,tid,indeks,point;
integer field ankomst,afgang,cputid;
integer procestid,køtid;
ankomst:=14;afgang:=16;cputid:=18;
tid:=0;
for i:=1 step 1 until 4 do
begin
if i <> 1 then
procestid:=log_blok.afgang-log_blok.ankomst
else
procestid:=log_blok.afgang;
if i = 1 then
begin
køtid:=0;
totalcputid(hour):=
totalcputid(hour)+log_blok.cputid;
samtid:=samtid+log_blok.cputid;
end else
if i=2 then
begin
tid:=log_blok.cputid;
køtid:=log_blok.ankomst-log_blok.afg_inp;
end else
if i=3 then
begin
tid:=tid+log_blok.cputid;
if log_blok.cpu_søg > 0 then
køtid:=log_blok.ankomst-log_blok.afg_søg
else
køtid:=log_blok.ankomst-log_blok.afg_inp;
end else
if i=4 then
begin
totalcputid(hour):=
totalcputid(hour)+tid+log_blok.cputid;
samtid:=samtid+
tid+log_blok.cputid;
if log_blok.cpu_ops > 0 then
køtid:=log_blok.ankomst-log_blok.afg_ops
else
begin
if log_blok.cpu_søg > 0 then
køtid:=log_blok.ankomst-log_blok.afg_søg
else
køtid:=log_blok.ankomst-log_blok.afg_inp;
end;
end;
if log_blok.cputid > 0 then
begin
if i = 1 then
begin
indeks:= log_blok.cputid;
if indeks < 8 then fordelinput(7):=
fordelinput(7)+1 else
begin
if indeks > 27 then fordelinput(28):=
fordelinput(28)+1 else
fordelinput(indeks):=fordelinput(indeks)+1;
end;
end else
if i = 2 then
begin
indeks:= entier ( log_blok.cputid/10);
if indeks < 3 then fordelsøge(2):=
fordelsøge(2)+1 else
begin
if indeks >40 then fordelsøge(41):=
fordelsøge(41)+1 else
fordelsøge(indeks):=fordelsøge(indeks)+1;
end;
end else
if i=3 then
begin
indeks:= entier (log_blok.cputid/10);
if indeks < 2 then
fordelopslags(1):=fordelopslags(1)+1 else
begin
if indeks > 31 then
fordelopslags(32):=fordelopslags(32)+1 else
fordelopslags(indeks):=fordelopslags(indeks)+1;
end;
end else
if i= 4 then
begin
if minsvartid(hour) > log_blok.afgang then
begin
minsvartid(hour):=log_blok.afgang;
if minsvartid(25) > log_blok.afgang then
minsvartid(25):=log_blok.afgang;
end;
if maxsvartid(hour) < log_blok.afgang then
begin
maxsvartid(hour):=log_blok.afgang;
if maxsvartid(25) < log_blok.afgang then
maxsvartid(25):=log_blok.afgang;
end;
point:=log_blok.afgang//250;
if point > 32 then
begin
svarfor(hour,32):=svarfor(hour,32)+1;
svarfor(25,32):=svarfor(25,32)+1;
end
else
begin
svarfor(hour,point):=svarfor(hour,point)+1;
svarfor(25,point):=svarfor(25,point)+1;
end;
totaltid(hour):=totaltid(hour)+log_blok.afgang;
totaltid(25):=totaltid(25)+log_blok.afgang;
indeks:= log_blok.cputid;
if indeks < 6 then
fordeloutput(5):=fordeloutput(5)+1 else
begin
if indeks > 19 then
fordeloutput(20):=fordeloutput(20)+1 else
fordeloutput(indeks):=fordeloutput(indeks)+1;
end;
end;
antal_forsp(i,hour):=antal_forsp(i,hour)+1;
antal_forsp(i,25):=antal_forsp(i,25)+1;
snit_forsp(i,1,hour):=snit_forsp(i,1,hour)+procestid;
snit_forsp(i,1,25):=snit_forsp(i,1,25)+procestid;
snit_forsp(i,2,hour):=snit_forsp(i,2,hour)+
log_blok.cputid;
snit_forsp(i,2,25):=snit_forsp(i,2,25)+log_blok.cputid;
snit_forsp(i,3,hour):=snit_forsp(i,3,hour)+køtid;
snit_forsp(i,3,25):=snit_forsp(i,3,25)+køtid;
var_forsp(i,1,hour):=var_forsp(i,1,hour)+procestid**2;
var_forsp(i,1,25):=var_forsp(i,1,25)+procestid**2;
var_forsp(i,2,hour):=var_forsp(i,2,hour)+
log_blok.cputid**2;
var_forsp(i,2,25):=var_forsp(i,2,25)+log_blok.cputid**2;
var_forsp(i,3,hour):=var_forsp(i,3,hour)+køtid**2;
var_forsp(i,3,25):=var_forsp(i,3,25)+køtid**2;
end;
ankomst:=ankomst+6;afgang:=afgang+6;
cputid:=cputid+6;
end;
if tid = 0 then
begin
antalfejl(25):=antalfejl(25)+1;
antalfejl(hour):=antalfejl(hour)+1;
end;
end proc stat;
\f
procedure transaktion;
begin
integer transdato,transtid,t1,term;
boolean found;
real r;
transdato:=systime(4,log_blok.ank_inp,r);
transtid:=r/100.0;
if (transdato = startdato) and
(( transtid >= starttid) and
(transtid <= sluttid)) then
begin
<*transaktion godkendt *>
if trans then
begin
<*opsamling af transaktion *>
i:= abs(transtid/100);
hour:=i;
antal_trans(i):=antal_trans(i)+1;
stat;
accepttrans :=accepttrans+1;
end
else
if termi then
begin
<*identification af terminaler *>
term:=logfil.term_id;
t1:=transtid//100;
found:=false;
i:=1;
while -,found do
begin
if terminal_ids(t1,i) = term then
begin
<*kendt terminal*>
terminal_ids(t1,i+1):=terminal_ids(t1,i+1)+1;
found:=true;
end
else
if terminal_ids(t1,i) = 0 then
begin
<*ny terminal*>
terminal_ids(t1,i):=term;
terminal_ids(t1,i+1):=1;
terminal_ids(t1,i+2):=logblok.terminalens_a_omr;
found:=true;
antal_terminaler:=antal_terminaler+1;
end
else i:=1+3;
end
end
else
if print then
begin
<*print trans raat*>
write(out,nl,2);
for i:=1 step 1 until 50 do write(out,i*2,logblok(i),nl,1);
end;
end;
end proc transaktion;
\f
procedure nestedag;
begin
for i:=0 step 1 until 24 do antal_trans(i):=0;
for i:=0 step 1 until 24 do
for j:=1 step 1 until 400 do terminal_ids(i,j):=0;
antal_terminaler:=0;
logslut:=single:=false;
if all then
begin
startdag:= startdag+1;
if (startdag > slutdag ) and (slutmd = startmd) then
begin
all:=false;
goto endnestedag;
end;
i:= startmd;
if ((startdag = 30) and ((i=2) or (i=4) or (i = 6)
or (i=9) or (i=11))) or ((startdag=31) and
((i=1) or (i=3) or (i=5) or (i=7) or (i=8) or (i=10)
or (i=12))) then
begin
startmd:=startmd+1;
startdag:=1;
end;
startdato:=startaar*10000+startmd*100 +startdag;
end;
endnestedag:
end proc nestedag;
\f
procedure outputterminal;
begin
integer t1,t2;
t1:=starttid//100;
t2:=sluttid//100;
write(out,ff,1);
for i:= t1 step 1 until t2 do
begin
write(out,nl,3,<: aktive terminaler fra kl. :>,<<dddd>,i*100,
<: til kl. :>,(i+1)*100,<: den :>,<<dddddd>,startdato,
nl,1);
write(out,<: terminal id transaktioner :>,nl,2);
j:=1;
while terminal_ids(i,j) <> 0 do
begin
write(out,<<ddddddddddd>,terminal_ids(i,j),<: :>,
terminal_ids(i,j+1));
write(out,terminal_ids(i,j+2) shift (-12),terminal_ids(i,j+2) extract 12,
nl,1);
j:=j+3;
end;
end;
write(out,ff,1);
end proc outputterminal;
\f
procedure outputtrans;
begin
integer array a(0:25,0:75);
integer max,t1,t2,kryds,l,k;
for i:= 1 step 1 until 25 do
for j:=1 step 1 until 75 do a(i,j):=32;
for i:=1 step 1 until 25 do a(i,1):=73 <*i*>;
for i:=1 step 1 until 74 do a(25,i):=45;<*-*>
a(25,75):=62;
t1:= starttid//100;
t2:= sluttid//100;
max:= antal_trans(t1);
for i:= t1+1 step 1 until t2 do
if max < antal_trans(i) then max:=antal_trans(i);
kryds:=max//søjlehøjde;
if kryds=0 then kryds:=1;
<*udfyld diagram med krydser*>
l:=4;
for j:=t1 step 1 until t2 do
begin
i:=antal_trans(j)//kryds;
if i<>0 then
for k:=24 step -1 until 25-i do a(k,l):=120 <* X *>;
l:=l+3;
end;
<* UDSKRIV *>
write(out,ff,1,nl,5,<:tabel over transaktioner den :>,<<dddddd>,
startdato);
write(out,<: fra kl. :>,<<dddd>,starttid,<: til kl. :>,sluttid,nl,4);
if max = 0 then
begin
write(out,<: ingen transaktioner i det angivne dato interval:>,nl,2);
goto endoutput;
end;
write(out,<:antal<10>trans.:>,nl,1);
for i:=1 step 1 until 25 do
begin
if (i>1) and (i<25) then write(out,<<ddddd>,kryds*(25-i),<: :>)
else
write(out,<: :>);
for j:=1 step 1 until 75 do outchar(out,a(i,j));
write(out,nl,1);
end;
write(out,<: :>);
for i:=t1 step 1 until t2 do write(out,<<ddd>,i);
write(out,false add 32,75-(t2-t1+1)*3,<: tid :>);
write(out,nl,4,<: antal transaktioner ialt i logfilen: :>,
<<dddddd>,totalantaltrans,nl,2);
write(out,<: accepterede transaktioner ialt for denne kørsel: :>,
<<dddddd>,accepttrans,nl,2);
write(out,<:<12>:>);
endoutput:
end proc transoutput;
allstat:=true;
all:=single:=false;
termi:=trans:=false;
parameterlist;
bloklengde:=2;
bloktype:=4;
term_id:=8;
terminalens_a_omr:=10;
ank_inp:=14;
afg_inp:=16;
cpu_inp:=18;
ank_søg:=20;
afg_søg:=22;
cpu_søg:=24;
ank_ops:=26;
afg_ops:=28;
cpu_ops:=30;
ank_out:=32;
afg_out:=34;
cpu_out:=36;
comment
********************************
* *
* I N I T I A L I S E R I N G *
* *
******************************** ;
for i:=0 step 1 until 25 do
begin
for j:=0 step 1 until 32 do
svarfor(i,j):=0;
end;
for i:=0 step 1 until 25 do
svartid(i):=0.0;
for i:=0 step 1 until 25 do
begin
minsvartid(i):=10000;
maxsvartid(i):=0;
end;
samtid:=0;
for i:=0 step 1 until 24 do
totalcputid(i):=0;
for tael:=0 step 1 until 25 do
begin
antalfejl(tael):=0;
for i:=1 step 1 until 4 do antal_forsp(i,tael):=0;
for i:=1 step 1 until 4 do
for j:=1 step 1 until 3 do snit_forsp(i,j,tael):=
var_forsp(i,j,tael):=0.0;
totaltid(tael):=0;
end;
for i:=7 step 1 until 28 do fordelinput(i):=0;
for i:=2 step 1 until 41 do fordelsøge(i):=0;
for i:=1 step 1 until 32 do fordelopslags(i):=0;
for i:=5 step 1 until 20 do fordeloutput(i):=0;
i:=1;
open(logfil,4,string kitnavn(increase(i)),1 shift 1);
while single or all do
begin
setposition(logfil,0,startsegment);
<* H O V E D L Ø K K E *>
les_logfil;totalantaltrans:=1;
accepttrans:=0;
while -, logslut do
begin
if log_blok.bloktype > 0 and log_blok.bloktype <> 5 then
begin
<*behandling*>
transaktion;
totalantaltrans:=totalantaltrans+1;
end;
les_logfil;
end;
<* output fra behandlingsmoduler*>
nestedag;
end;
liststat;
listsvar;
svarfordel;
ydertilf;
close(logfil,true);
end;
exit:
system(10,0,<:ktas stat. afsluttet:>);
end;
▶EOF◀