DataMuseum.dk

Presents historical artifacts from the history of:

RC4000/8000/9000

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RC4000/8000/9000

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦6b983e564⟧ TextFile

    Length: 29952 (0x7500)
    Types: TextFile
    Names: »txtktasstat«

Derivation

└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ.
    └─⟦4334b4c0b⟧ 
        └─⟦this⟧ »txtktasstat« 

TextFile


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◀