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

⟦4e8b99f85⟧ TextFile

    Length: 96768 (0x17a00)
    Types: TextFile
    Names: »htio        «

Derivation

└─⟦110021343⟧ Bits:30007476 RC8000 Backup tape fra HT's bus-radio system
    └─⟦a957ba283⟧ 
        └─⟦this⟧ »htio        « 

TextFile

io.

:1: io: parametererklæringer
message io_parametererklæringer side 1 - 820301/hko;

:2: io: parameterinitialisering
message io_parameterinitialisering side 1 - 810421/hko;


:3: io: claiming
\f

message io_claiming side 1 - 810421/hko;

  max_coru:= max_coru 
              + 1  <* hovedmodul io *>
              + 1  <* io kommando *>
              + 1  <* io operatørmeddelelser *>
              + 1  <* io spontane meddelelser *>
              + 1  <* io spoolkorutine *>
              + 1  <* io tællernulstilling *>
              ;

  max_semch:= max_semch 
              + 1  <* cs_io *>
              + 1  <* cs_io_komm *>
              + 1  <* cs_io_fil  *>
              + 1  <* cs_io_medd *>
              + 1  <* cs_io_spool *>
              + 1  <* cs_io_nulstil *>
              ;

  max_sem:= max_sem
            + 1  <* ss_io_spool_fulde *>
            + 1  <* ss_io_spool_tomme *>
            + 1; <* bs_zio_adgang *>

  max_op:=max_op
          + 1; <* fil-operation *>

  max_nettoop:=max_nettoop
          + (data+18); <* fil-operation *>

:4: io: erklæringer
\f

message io_erklæringer side 1 - 810421/hko;

  integer
    cs_io,
    cs_io_komm,
    cs_io_fil,
    cs_io_spool,
    cs_io_medd,
    cs_io_nulstil,
    ss_io_spool_tomme,
    ss_io_spool_fulde,
    bs_zio_adgang,
    io_spool_fil,
    io_spool_postantal,
    io_spool_postlængde;

  integer array field
    io_spool_post;

  zone z_io(32,1,io_fejl);

  procedure io_fejl(z,s,b);
    integer           s,b;
    zone            z;
  begin
    disable begin
      integer array iz(1:20);
      integer i,j,k;
      integer array field iaf;
      real array field raf;
      if s<>(1 shift 21 + 2) then
      begin
        getzone6(z,iz);
        raf:=2;
        iaf:=0;
        k:=1;

        j:= terminal_tab.iaf.terminal_tilstand;
        if j shift(-21)<>6 then
          fejlreaktion(17<*ydre enhed status*>,s,string iz.raf(increase(k)),
                       1 shift 12 <*binært*> +1 <*fortsæt*>);
        terminal_tab.iaf.terminal_tilstand:= 6 shift 21
            + terminal_tab.iaf.terminal_tilstand extract 21;
      end;
      z(1):=real <:<'?'><'?'><'em'>:>;
      b:=2;
    end; <*disable*>
  end io_fejl;
\f

message procedure skriv_auto_spring_medd side 1 - 820301/hko;

  procedure skriv_auto_spring_medd(z,medd,tid);
    value                                 tid;
    zone                           z;
    real                                  tid;
    integer array                    medd;
    begin
      disable begin
        real t;
        integer kode,bus,linie,bogst,løb,dato,kl;
        long array indeks(1:1);
        kode:= medd(1);
        indeks(1):= extend medd(5) shift 24;
        if kode > 0 and kode < 10 then
        begin
          write(z,"nl",0,<:-<'>'>:>,case kode of(
        <*1*><:linie/løb ikke indsat    :>,<*sletning/omkodning/spring       *>
        <*2*><:linie/løb allerede indsat:>,<*omkodning/spring                *>
        <*3*><:vogn i kø:>,                <*påmindelse i forb. omkod./spring*>
        <*4*><:vogn optaget:>,             <*    -      i  -      -   /   -  *>
        <*5*><:spring annulleret:>,        <*udløb af ventetid               *>
        <*6*><::>,                         <*  -   af springliste            *>
        <*7*><::>,                         <*start af springsekvens          *>
        <*8*><::>,                         <*afvikling af springsekvens      *>
        <*9*><:område kan ikke opdateres:>,<*vt-ændring*>
        <::>));
<*        if kode = 5 then
          begin
            bogst:= medd(4);
            linie:= bogst shift(-5) extract 10;
            bogst:= bogst extract 5;
            if bogst > 0 then bogst:= bogst +'A'-1;
            write(z,"sp",1,<<z>,linie,false add bogst,1,
                  ".",1,indeks);
          end;
*>
          outchar(z,'sp');
          bus:= medd(2) extract 14;
          if bus > 0 then
            write(z,<<z>,bus,"/",1);
          løb:= medd(3);
<*+4*>    if løb shift(-22) <> 1 and løb <> 0 then
            fejlreaktion(3<*programfejl*>,løb,<:ikke linie id, spon.medd.:>,1);
<*-4*>
\f

message procedure skriv_auto_spring_medd side 2 - 810507/hko;

          linie:= løb shift(-12) extract 10;
          bogst:= løb shift(-7) extract 5;
          if bogst > 0 then bogst:= bogst +'A'-1;
          løb:= løb extract 7;
          if medd(3) <> 0 or kode <> 5 then
          begin
            write(z,<<z>,linie,false add bogst,1,"/",1,løb,"sp",1);
            if kode = 5 or kode = 6 then write(z,<:er frit :>);
          end;
          if kode = 7 or kode = 8 then
            write(z,<*indeks,"sp",1,*>
              if kode=7 then <:udtaget :> else <:indsat :>);

          dato:= systime(4,tid,t);
          kl:= t/100.0;
          løb:= replace_char(1<*space in number*>,'.');
          write(z,<<zd_dd_dd>,dato,<< zd_dd>,kl);
          replace_char(1,løb);
        end
        else <*kode < 1 or kode > 8*>
          fejlreaktion(3<*programfejl*>,kode,<:spon.medd. kode:>,1);
      end; <*disable*>
    end skriv_auto_spring_medd;
\f

message procedure h_io side 1 - 810507/hko;

  <* hovedmodulkorutine for io *>
  procedure h_io;
  begin
    integer array field op_ref;
    integer k,dest_sem;
    procedure skriv_hio(zud,omfang);
      value                     omfang;
      zone                  zud;
      integer                   omfang;
      begin

        write(zud,"nl",1,<:+++ hovedmodul io        :>);
        if omfang>0 then
        disable begin integer x;
          trap(slut);
          write(zud,"nl",1,
            <:  op_ref:    :>,op_ref,"nl",1,
            <:  k:         :>,k,"nl",1,
            <:  dest_sem:  :>,dest_sem,"nl",1,
            <::>);
          skriv_coru(zud,coru_no(100));
slut:
        end;
     end skriv_hio;

  trap(hio_trap);
  stack_claim(if cm_test then 198 else 146);

<*+2*>
  if testbit0 and overvåget or testbit28 then
    skriv_hio(out,0);
<*-2*>
\f

message procedure h_io side 2 - 810507/hko;

  repeat
    wait_ch(cs_io,op_ref,true,-1);
<*+4*>
    if (d.op_ref.optype and (io_optype or gen_optype)) extract 12 =0
    then fejlreaktion(12<*operationstype*>,op_ref,<:operation til io:>,1);
<*-4*>

    k:=d.op_ref.opkode extract 12;
    dest_sem:=
      if k =  0 <*attention*> then cs_io_komm else
      
      if k = 22 <*auto vt opdatering*>
      or k = 23 <*generel meddelelse*>
      or k = 36 <*spring meddelelse*>
      or k = 44 <*udeladt i gruppeopkald*>
      or k = 45 <*nødopkald modtaget*>
      or k = 46 <*nødopkald besvaret*> then cs_io_spool else

      if k = 38 <*meddelelse til alle skærme*> then cs_io_medd else
      0;
<*+4*>
    if dest_sem = 0 then
    begin
      fejl_reaktion(2<*operationskode*>,k,<:hovedmodul io:>,1);
      signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
    end
    else
<*-4*>
    begin
      signal_ch(dest_sem,op_ref,d.op_ref.optype);
    end;
  until false;

hio_trap:
  disable skriv_hio(zbillede,1);
  end h_io;
\f

message procedure io_komm side 1 - 810507/hko;

  procedure io_komm;
  begin
    integer array field op_ref,ref,vt_op,iaf;
    integer kode,aktion,status,opgave,dest_sem,vogn,ll,omr,
            pos,indeks,sep,sluttegn,operatør,i,j,k;
    long navn;

    procedure skriv_io_komm(zud,omfang);
      value                     omfang;
      zone                  zud;
      integer                   omfang;
      begin

    disable

        write(zud,"nl",1,<:+++ io_komm              :>);
        if omfang > 0 then
        disable begin integer x;
          trap(slut);
          write(zud,"nl",1,
            <:  op-ref:    :>,op_ref,"nl",1,
            <:  kode:      :>,kode,"nl",1,
            <:  aktion:    :>,aktion,"nl",1,
            <:  ref:       :>,ref,"nl",1,
            <:  vt_op:     :>,vt_op,"nl",1,
            <:  status:    :>,status,"nl",1,
            <:  opgave:    :>,opgave,"nl",1,
            <:  dest-sem:  :>,dest_sem,"nl",1,
            <:  iaf:       :>,iaf,"nl",1,
            <:  i:         :>,i,"nl",1,
            <:  j:         :>,j,"nl",1,
            <:  k:         :>,k,"nl",1,
            <:  navn:      :>,string navn,"nl",1,
            <:  pos:       :>,pos,"nl",1,
            <:  indeks:    :>,indeks,"nl",1,
            <:  sep:       :>,sep,"nl",1,
            <:  sluttegn:  :>,sluttegn,"nl",1,
            <:  vogn:      :>,vogn,"nl",1,
            <:  ll:        :>,ll,"nl",1,
            <:  omr:       :>,omr,"nl",1,
            <:  operatør:  :>,operatør,"nl",1,
            <::>);
          skriv_coru(zud,coru_no(101));
slut:
        end;
      end skriv_io_komm;
\f

message procedure io_komm side 2 - 810424/hko;

    trap(io_komm_trap);
    stack_claim((if cm_test then 200 else 146)+24+200);

    ref:=0;
    navn:= long<::>;
    
<*+2*>
    if testbit0 and overvåget or testbit28 then
      skriv_io_komm(out,0);
<*-2*>

    repeat

<*V*> wait_ch(cs_io_komm,
              op_ref,
              true,
              -1<*timeout*>);
<*+2*>
      if testbit1 and overvåget then
      disable begin
        skriv_io_komm(out,0);
        write(out,"nl",1,<:operation fra cs:>,<<d>,cs_io,
                         <: til io :>);
        skriv_op(out,op_ref);
      end;
<*-2*>

      kode:= d.op_ref.op_kode;
      i:= terminal_tab.ref.terminal_tilstand;
      status:= i shift(-21);
      opgave:=
        if kode=0 then 1 <* indlæs kommando *> else
        0; <* afvises *>

      aktion:= if opgave = 0 then 0 else
                 (case status +1 of(
      <* status         *>
      <* 0 klar         *>(1),
      <* 1 -            *>(-1),<* ulovlig tilstand *>
      <* 2 -            *>(-1),<* ulovlig tilstand *>
      <* 3 stoppet      *>(2),
      <* 4 noneksist    *>(-1),<* ulovlig tilstand *>
      <* 5 -            *>(-1),<* ulovlig tilstand *>
      <* 6 -            *>(-1),<* ulovlig tilstand *>
      <* 7 ej knyttet   *>(-1),<* ulovlig tilstand *>
                          -1));
\f

message procedure io_komm side 3 - 810428/hko;

      case aktion+6 of
      begin
        begin
          <*-5: terminal optaget *>

          d.op_ref.resultat:= 16;
          afslut_operation(op_ref,-1);
        end;

        begin
          <*-4: operation uden virkning *>

          afslut_operation(op_ref,-1);
        end;

        begin
          <*-3: ulovlig operationskode *>

          fejl_reaktion(2<*operationskode*>,kode,<:ulovlig:>,1);
          afslut_operation(op_ref,-1);
        end;

        begin
          <*-2: ulovlig aktion *>

          fejl_reaktion(3<*programfejl*>,-2,<: ulovlig aktion:>,0);
          afslut_operation(op_ref,-1);
        end;

        begin
          <*-1: ulovlig io_tilstand *>

          fejl_reaktion(3<*programfejl*>,status,<: ulovlig io-status:>,0);
          afslut_operation(op_ref,-1);
        end;

        begin
          <* 0: ikke implementeret *>

          fejl_reaktion(2<*operationskode*>,kode,<: ikke implementeret:>,1);
          afslut_operation(op_ref,-1);
        end;

        begin
\f

message procedure io_komm side 4 - 851001/cl;

          <* 1: indlæs kommando *>
<*V*>     wait(bs_zio_adgang);

<*V*>     læs_kommando(z_io,101,op_ref,pos,indeks,sep,sluttegn);

          if d.op_ref.resultat > 3 then
          begin
<*V*>       setposition(z_io,0,0);
            if sluttegn<>'nl' then outchar(z_io,'nl');
            skriv_kvittering(z_io,op_ref,pos,
                             d.op_ref.resultat);
          end
          else if d.op_ref.resultat>0 then
          begin <*godkendt*>
            kode:=d.op_ref.opkode;
            i:= kode extract 12;
            j:= if kode < 5 or
                   kode=7 or kode=8 or
                   kode=72 or kode=73 or kode=74 then 1 <*IN,x/EK,x*>else
                if kode=5 or kode=77 then 9             <*FO,L/FO,O*>else
                if kode = 9 or kode=10 then 3           <*VO,B/VO,L*>else
                if kode =11 or kode=12 or kode=19 or    <*VO,I/VO,U/VO,S*> 
                   kode=20 or kode=24             then 4<*VO,F/VO,R*>else
                if kode =21 then 5                      <*AU*>       else
                if kode =25 then 6                      <*GR,D*>     else
                if kode =26 then 5                      <*GR,S*>     else
                if kode =27 or kode =28 then 7          <*GR,V/GR,O*>else
                if kode =30 then 10                     <*SP,D*>     else
                if kode =31 then 5                      <*SP*>       else
                if kode =32 or kode =33 then 8          <*SP,V/SP,O*>else
                if kode =34 or kode =35 then 5          <*SP,R/SP,A*>else
                if kode=71 then 11                      <*FO,V*>     else
                if kode =75 then 12                     <*TÆ,V     *>else
                if kode =76 then 12                     <*TÆ,N     *>else
                if kode =65 then 13                     <*BE,N     *>else
                if kode =66 then 14                     <*BE,G     *>else
                if kode =67 then 15                     <*BE,V     *>else
                if kode =68 then 16                     <*ST,D     *>else
                if kode =69 then 17                     <*ST,V     *>else
                if kode =36 then 18                     <*AL       *>else
                if kode =37 then 19                     <*CC       *>else
                if kode>=80 and kode <=88 then 2        <*sys-spec.*>else
                if kode>=90 and kode <=92 then 20       <*CQF,I/U/V*>else
                0;
            if j > 0 then
            begin
              case j of
              begin
                begin
\f

message procedure io_komm side 5 - 810424/hko;

                  <* 1: inkluder/ekskluder ydre enhed *>

                  d.op_ref.retur:= cs_io_komm;
                  if kode=1 then d.opref.opkode:= 
                    ia(2) shift 12 + d.opref.opkode extract 12;
                  d.op_ref.data(1):= ia(1);
                  signal_ch(if kode < 5 or kode>=72 then cs_rad
                                        else cs_gar,
                            op_ref,gen_optype or io_optype);
                  indeks:= op_ref;
                  wait_ch(cs_io_komm,
                          op_ref,
                          true,
                          -1<*timeout*>);
<*+4*>            if op_ref <> indeks then
                    fejlreaktion(11<*fremmed post*>,op_ref,<:io_kommando:>,0);
<*-4*>
<*V*>             setposition(z_io,0,0);
                  if sluttegn<>'nl' then outchar(z_io,'nl');
                  skriv_kvittering(z_io,op_ref,-1,
                                   d.op_ref.resultat);
                end;

                begin
\f

message procedure io_komm side 6 - 810501/hko;

                  <* 2: tid/attention,ja/attention,nej
                        slut/slut med billede *>

                  case d.op_ref.opkode -79 of
                  begin

      <* 80: TI *>  begin
                      setposition(z_io,0,0);
                      if sluttegn<>'nl' then outchar(z_io,'nl');
                      if ia(1) <> 0 or ia(2) <> 0 then
                      begin real field rf;
                        rf:= 4;
                        trap(forbudt);
<*V*>                   setposition(z_io,0,0);
                        systime(3,ia.rf,0.0);
                        if false then
                        begin
                          forbudt: skriv_kvittering(z_io,0,-1,
                                     43<*ændring af dato/tid ikke lovlig*>);
                        end
                        else
                          skriv_kvittering(z_io,0,-1,3);
                      end
                      else
                      begin
                        setposition(z_io,0,0);
                        write(z_io,<<zddddd>,systime(5,0,r),".",1,r);
                      end;
                    end TI;
\f

message procedure io_komm side 7 - 810424/hko;

      <*81: AT,J*>  begin
<*V*>                 setposition(z_io,0,0);
                      if sluttegn <> 'nl' then outchar(zio,'nl');
                      monitor(10)release process:(z_io,0,ia);
                      skriv_kvittering(z_io,0,-1,3);
                    end;

      <* 82: AT,N*> begin
                      i:= monitor(8)reserve process:(z_io,0,ia);
<*V*>                 setposition(z_io,0,0);
                      if sluttegn <> 'nl' then outchar(zio,'nl');
                      skriv_kvittering(z_io,0,-1,
                        if i = 0 then 3 else 0);
                    end;

      <* 83: SL *>  begin
                      errorbits:=0; <* warning.no ok.yes *>
                      trapmode:= 1 shift 13;
                      trap(-2);
                    end;

      <* 84: SL,B *>begin
                      errorbits:=1; <* warning.no ok.no *>
                      trap(-3);
                    end;
      <* 85: SL,K *>begin
                      errorbits:=1; <* warning.no ok.no *>
                      disable sæt_bit_i(trapmode,15,0);
                      trap(-3);
                    end;
\f

message procedure io_komm side 7a - 810511/cl;

      <* 86: TE,J *>begin
                      setposition(z_io,0,0);
                      if sluttegn <> 'nl' then outchar(z_io,'nl');
                      for i:= 1 step 1 until indeks do
                      if 0<=ia(i) and ia(i)<=47 then
                      begin
                        case (ia(i)+1) of
                        begin
                          testbit0 := true;testbit1 := true;testbit2 := true;
                          testbit3 := true;testbit4 := true;testbit5 := true;
                          testbit6 := true;testbit7 := true;testbit8 := true;
                          testbit9 := true;testbit10:= true;testbit11:= true;
                          testbit12:= true;testbit13:= true;testbit14:= true;
                          testbit15:= true;testbit16:= true;testbit17:= true;
                          testbit18:= true;testbit19:= true;testbit20:= true;
                          testbit21:= true;testbit22:= true;testbit23:= true;
                          testbit24:= true;testbit25:= true;testbit26:= true;
                          testbit27:= true;testbit28:= true;testbit29:= true;
                          testbit30:= true;testbit31:= true;testbit32:= true;
                          testbit33:= true;testbit34:= true;testbit35:= true;
                          testbit36:= true;testbit37:= true;testbit38:= true;
                          testbit39:= true;testbit40:= true;testbit41:= true;
                          testbit42:= true;testbit43:= true;testbit44:= true;
                          testbit45:= true;testbit46:= true;testbit47:= true;
                        end;
                      end;
                      skriv_kvittering(z_io,0,-1,3);
                    end;
\f

message procedure io_komm side 7b - 810511/cl;

      <* 87: TE,N *>begin
                      setposition(z_io,0,0);
                      if sluttegn <> 'nl' then outchar(z_io,'nl');
                      for i:= 1 step 1 until indeks do
                      if 0<=ia(i) and ia(i)<=47 then
                      begin
                        case (ia(i)+1) of
                        begin
                          testbit0 := false;testbit1 := false;testbit2 := false;
                          testbit3 := false;testbit4 := false;testbit5 := false;
                          testbit6 := false;testbit7 := false;testbit8 := false;
                          testbit9 := false;testbit10:= false;testbit11:= false;
                          testbit12:= false;testbit13:= false;testbit14:= false;
                          testbit15:= false;testbit16:= false;testbit17:= false;
                          testbit18:= false;testbit19:= false;testbit20:= false;
                          testbit21:= false;testbit22:= false;testbit23:= false;
                          testbit24:= false;testbit25:= false;testbit26:= false;
                          testbit27:= false;testbit28:= false;testbit29:= false;
                          testbit30:= false;testbit31:= false;testbit32:= false;
                          testbit33:= false;testbit34:= false;testbit35:= false;
                          testbit36:= false;testbit37:= false;testbit38:= false;
                          testbit39:= false;testbit40:= false;testbit41:= false;
                          testbit42:= false;testbit43:= false;testbit44:= false;
                          testbit45:= false;testbit46:= false;testbit47:= false;
                        end;
                      end;
                      skriv_kvittering(z_io,0,-1,3);
                    end;

<* 88: O    *>      begin
                      integer array odescr,zdescr(1:20);
                      long array field laf;
                      integer res, i, j;

                      i:= j:= 1;
                      while læstegn(ia,i,res)<>0 do
                      begin
                        if 'A'<=res and res<='Å' then res:= res - 'A' + 'a';
                        skrivtegn(ia,j,res);
                      end;

                      laf:= 2;
                      getzone6(out,odescr);
                      getzone6(z_io,zdescr);
                      close(out,zdescr.laf(1)<>odescr.laf(1) or
                                zdescr.laf(2)<>odescr.laf(2));
                      laf:= 0;

                      if ia(1)=0 then 
                      begin
                        res:= 3;
                        j:= 0;
                      end
                      else
                      begin
                        j:= res:= openbs(out,j,ia,0);
                        if res<>0 then
                          res:= 46;
                      end;
                      if res<>0 then
                      begin
                        open(out,8,konsol_navn,0);
                        if j<>0 then
                        begin
                          i:= 1;
                          fejlreaktion(4,j,string ia.laf(increase(i)),1);
                        end;
                      end
                      else res:= 3;
                      setposition(z_io,0,0);
                      skriv_kvittering(z_io,0,-1,res);
                    end;
                  end;<*case d.op_ref.opkode -79*>
                end;<*case 2*>
                begin
\f

message procedure io_komm side 8 - 810424/hko;

                  <* 3: vogntabel,linienr/-,busnr*>

                  d.op_ref.retur:= cs_io_komm;
                  tofrom(d.op_ref.data,ia,10);
                  indeks:= op_ref;
                  signal_ch(cs_vt,op_ref,gen_optype or io_optype);
                  wait_ch(cs_io_komm,
                          op_ref,
                          io_optype,
                          -1<*timeout*>);
<*+2*>            if testbit2 and overvåget then
                  disable begin
                    skriv_io_komm(out,0);
                    write(out,"nl",1,<:io operation retur fra vt:>);
                    skriv_op(out,op_ref);
                  end;
<*-2*>
<*+4*>            if indeks <> op_ref then
                    fejlreaktion(11<*fremmed post*>,op_ref,<:io_kommando:>,0);
<*-4*>

                  i:=d.op_ref.resultat;
                  if i<1 or i>3 then
                  begin
<*V*>               setposition(z_io,0,0);
                    if sluttegn<>'nl' then outchar(z_io,'nl');
                    skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat);
                  end
                  else
                  begin
\f

message procedure io_komm side 9 - 820301/hko,cl;

                    integer antal,filref;

                    antal:= d.op_ref.data(6);
                    fil_ref:= d.op_ref.data(7);
                    pos:= 0;
<*V*>               setposition(zio,0,0);
                    if sluttegn <> 'nl' then outchar(z_io,'nl');
                    for pos:= pos +1 while pos <= antal do
                    begin
                      integer bogst,løb;

                      disable i:= læsfil(fil_ref,pos,j);
                      if i <> 0 then
                        fejlreaktion(5<*læs_fel*>,i,<:io komm., vo,l/vo,b:>,0);
                      vogn:= fil(j,1) shift (-24) extract 24;
                      løb:= fil(j,1) extract 24;
                      if d.op_ref.opkode=9 then
                        begin i:=vogn; vogn:=løb; løb:=i; end;
                      ll:= løb shift(-12) extract 10;
                      bogst:= løb shift(-7) extract 5;
                      if bogst > 0 then bogst:=  bogst+'A'-1;
                      løb:= løb extract 7;
                      vogn:= vogn extract 14;
                      i:= d.op_ref.opkode -8;
                      for i:= i,i +1 do
                      begin
                        j:= (i+1) extract 1;
                        case j+1 of
                        begin
                          write(zio,"sp",if bogst=0 then 1 else 0,<<ddd>,ll,
                              false add bogst,1,"/",1,true,3,<<d>,løb);
                          write(zio,<<dddd>,vogn,"sp",1);
                        end;
                      end;
                      if pos mod 5 = 0 then
                      begin
                        outchar(zio,'nl');
<*V*>                   setposition(zio,0,0);
                      end
                      else write(zio,"sp",3);
                    end;
                    write(zio,"*",1);
\f

message procedure io_komm side 9a - 810505/hko;

                    d.op_ref.opkode:=104;<*slet fil*>
                    d.op_ref.data(4):=filref;
                    indeks:=op_ref;
                    signal_ch(cs_slet_fil,op_ref,genoptype or iooptype);
<*V*>               wait_ch(cs_io_komm,op_ref,io_optype,-1);

<*+2*>              if testbit2 and overvåget then
                    disable begin
                      skriv_io_komm(out,0);
                      write(out,"nl",1,<:io operation retur fra sletfil:>);
                      skriv_op(out,op_ref);
                    end;
<*-2*>

<*+4*>              if op_ref<>indeks then
                      fejlreaktion(11<*fr.post*>,op_ref,<:io-komm, sletfil:>,0);
<*-4*>
                    if d.op_ref.data(9)<>0 then
                      fejlreaktion(3<*prg.fejl*>,d.op_ref.data(9),
                           <:io-komm, sletfil:>,1);
                  end;
                end;

                begin
\f

message procedure io_komm side 10 - 820301/hko;

                  <* 4 indsæt/udtag/flyt bus i vogntabel, slet vogntabel *>

                  vogn:=ia(1);
                  ll:=ia(2);
                  omr:= if kode=11 or kode=19 then ia(3) else
                        if kode=12            then ia(2) else 0;
                  if kode=19 and omr<=0 then
                  begin
                    if omr=-1 then omr:= 0
                    else omr:= 14 shift 20 + 3; <*OMR TCT*>
                  end;
<*V*>             wait_ch(cs_vt_adgang,
                          vt_op,
                          gen_optype,
                          -1<*timeout sek*>);
                  start_operation(vtop,101,cs_io_komm,
                                  kode);
                  d.vt_op.data(1):=vogn;
                  d.vt_op.data(2):=ll;
                  d.vt_op.data(if kode=19 then 3 else 4):= omr;
                  indeks:= vt_op;
                  signal_ch(cs_vt,
                            vt_op,
                            gen_optype or io_optype);

<*V*>             wait_ch(cs_io_komm,
                          vt_op,
                          io_optype,
                          -1<*timeout sek*>);
<*+2*>            if testbit2 and overvåget then
                  disable begin
                    skriv_io_komm(out,0);
                    write(out,"nl",1,
                          <:iooperation retur fra vt:>);
                    skriv_op(out,vt_op);
                  end;
<*-2*>
<*+4*>            if vt_op<>indeks then
                    fejl_reaktion(11<*fremmede op*>,op_ref,
                                  <:io-kommando:>,0);
<*-4*>
<*V*>             setposition(z_io,0,0);
                  if sluttegn<>'nl' then outchar(z_io,'nl');
                  skriv_kvittering(z_io,if d.vt_op.resultat = 11 or
                    d.vt_op.resultat = 12 then d.vt_op.data(3)
                    else vt_op,-1,d.vt_op.resultat);
                  d.vt_op.optype:= genoptype or vt_optype;
                  disable afslut_operation(vt_op,cs_vt_adgang);
                end;

                begin
\f

message procedure io_komm side 11 - 810428/hko;

                  <* 5 autofil-skift
                       gruppe,slet
                       spring  (igangsæt)
                       spring,annuler
                       spring,reserve     *>

                  tofrom(d.op_ref.data,ia,8);
                  d.op_ref.retur:=cs_io_komm;
                  indeks:=op_ref;
                  signal_ch(cs_vt,op_ref,gen_optype or io_optype);
<*V*>             wait_ch(cs_io_komm,
                          op_ref,
                          io_optype,
                          -1<*timeout*>);
<*+2*>            if testbit2 and overvåget then
                  disable begin
                    skriv_io_komm(out,0);
                    write(out,"nl",1,<:io operation retur fra vt:>);
                    skriv_op(out,op_ref);
                  end;
<*-2*>
<*+4*>            if indeks<>op_ref then
                    fejlreaktion(11<*fremmed post*>,op_ref,
                                 <:io-kommando(autofil):>,0);
<*-4*>

<*V*>             setposition(z_io,0,0);
                  if sluttegn<>'nl' then outchar(z_io,'nl');
                  skriv_kvittering(z_io,if (d.op_ref.resultat=11 or
                      d.op_ref.resultat=12) and kode=34 <*SP,R*> then
                      d.op_ref.data(4) else op_ref,-1,d.op_ref.resultat);
                end;

                begin
\f

message procedure io_komm side 12 - 820301/hko/cl;

                  <* 6 gruppedefinition *>

                  tofrom(d.op_ref.data,ia,indeks*2);
<*V*>             wait_ch(cs_io_fil,vt_op,true,-1<*timeout*>);
                  start_operation(vt_op,101,cs_io_komm,
                                  101<*opret fil*>);
                  d.vt_op.data(1):=256;<*postantal*>
                  d.vt_op.data(2):=1;  <*postlængde*>
                  d.vt_op.data(3):=1;  <*segmentantal*>
                  d.vt_op.data(4):=
                          2 shift 10;  <*spool fil*>
                  signal_ch(cs_opret_fil,vt_op,io_optype);
                  pos:=vt_op;<*variabel lånes*>
<*V*>             wait_ch(cs_io_komm,vt_op,io_optype,-1<*timeout*>);
<*+4*>            if vt_op<>pos then
                    fejlreaktion(11<*fremmed post*>,vt_op,<:gruppedef:>,0);
                  if d.vt_op.data(9)<>0 then
                    fejlreaktion(13<*opret-fil*>,d.vt_op.data(9),
                      <:io-kommando(gruppedefinition):>,0);
<*-4*>
                  iaf:=0;
                  for i:=1 step 1 until indeks-1 do
                  begin
                    disable k:=modif_fil(d.vt_op.data(4),i,j);
                    if k<>0 then
                      fejlreaktion(7<*modif-fil*>,k,
                        <:io kommando(gruppe-def):>,0);
                    fil(j).iaf(1):=d.op_ref.data(i+1);
                  end;
                  while sep = ',' do
                  begin
                    wait(bs_fortsæt_adgang);
                    pos:= 1; j:= 0;
                    while læs_store(z_io,i) < 8 do
                    begin
                      skrivtegn(fortsæt,pos,i);
                      if i = '?' or i = 'esc' then j:= 1; <* skip kommando *>
                    end;
                    skrivtegn(fortsæt,pos,'em');
                    afsluttext(fortsæt,pos);
                    sluttegn:= i;
                    if j<>0 then
                    begin
                      setposition(z_io,0,0);
                      if sluttegn <> 'nl' then outchar(z_io,'nl');
                      skriv_kvittering(zio,opref,-1,53);<*annulleret*>
                      goto gr_ann;
                    end;
\f

message procedure io_komm side 13 - 810512/hko/cl;

                    disable begin
                    integer array værdi(1:4);
                    integer a_pos,res;
                      pos:= 0;
                      repeat
                        apos:= pos;
                        læs_paramsæt(fortsæt,a_pos,0,værdi,sep,res);
                        if res >= 0 then
                        begin
                          if res=0 and (sep=',' or indeks>2) then <*ok*>
                          else if res=0 then res:= -25 <*parameter mangler*>
                          else if res=2 and (værdi(1)<1 or værdi(1)>9999) then
                                  res:= -7 <*busnr ulovligt*>
                          else if res=2 or res=6 then
                          begin
                            k:=modiffil(d.vt_op.data(4),indeks,j);
                            if k<>0 then fejlreaktion(7<*modiffil*>,k,
                               <:io kommando(gruppe-def):>,0);
                            iaf:= 0;
                            fil(j).iaf(1):= værdi(1) +
                              (if res=6 then 1 shift 22 else 0);
                            indeks:= indeks+1;
                            if sep = ',' then res:= 0;
                          end
                          else res:= -27; <*parametertype*>
                        end;
                        if res>0 then pos:= a_pos;
                      until sep<>'sp' or res<=0;

                      if res<0 then
                      begin
                        d.op_ref.resultat:= -res;
                        i:=1;
                        hægt_tekst(d.op_ref.data,i,fortsæt,1);
                        afsluttext(d.op_ref.data,i);
                      end;
                    end;
\f

message procedure io_komm side 13a - 810512/hko/cl;

                    if d.op_ref.resultat > 3 then
                    begin
                      setposition(z_io,0,0);
                      if sluttegn <> 'nl' then outchar(z_io,'nl');
                      skriv_kvittering(z_io,op_ref,pos,d.opref.resultat);
                      goto gr_ann;
                    end;
                    signalbin(bs_fortsæt_adgang);
                  end while sep = ',';
                  d.op_ref.data(2):= d.vt_op.data(1):=indeks-1;
                  k:= sætfildim(d.vt_op.data);
                  if k<>0 then fejlreaktion(9,k,<:io kommando(gruppe-def):>,0);
                  d.op_ref.data(3):= d.vt_op.data(4); <*filref*>
                  signalch(cs_io_fil,vt_op,io_optype or gen_optype);
                  d.op_ref.retur:=cs_io_komm;
                  pos:=op_ref;
                  signal_ch(cs_vt,op_ref,gen_optype or io_optype);
<*V*>             wait_ch(cs_io_komm,op_ref,io_optype,-1<*timeout*>);
<*+4*>            if pos<>op_ref then
                    fejlreaktion(11<*fremmed post*>,op_ref,
                      <:io kommando(gruppedef retur fra vt):>,0);
<*-4*>

<*V*>             setposition(z_io,0,0);
                  if sluttegn<>'nl' then outchar(z_io,'nl');
                  skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat);

                  if false then
                  begin
          gr_ann:   signalch(cs_slet_fil,vt_op,io_optype);
                    waitch(cs_io_komm,vt_op,io_optype,-1);
                    signalch(cs_io_fil,vt_op,io_optype or vt_optype);
                  end;
                    
                end;

                begin
\f

message procedure io_komm side 14 - 810525/hko/cl;

                  <* 7 gruppe(-oversigts-)rapport *>

                  d.op_ref.retur:=cs_io_komm;
                  d.op_ref.data(1):=ia(1);
                  indeks:=op_ref;
                  signal_ch(cs_vt,op_ref,gen_optype or io_optype);
<*V*>             wait_ch(cs_io_komm,op_ref,io_optype,-1<*timeout*>);

<*+4*>            if op_ref<>indeks then
                    fejlreaktion(11<*fremmed post*>,op_ref,
                      <:io-kommando(gruppe-rapport):>,0);
<*-4*>

<*V*>             setposition(z_io,0,0);
                  if sluttegn <> 'nl' then outchar(z_io,'nl');
                  if d.op_ref.resultat<>3 then
                  begin
                    skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat);
                  end
                  else
                  begin
                    integer bogst,løb;

                    if kode = 27 then <* gruppe,vis *>
                    begin
<*V*>                 write(z_io,"nl",1,"-",5,"sp",2,<:gruppe: :>,
                            "G",1,<<z>,d.op_ref.data(1) extract 7,
                            "sp",2,"-",5,"nl",1);
\f

message procedure io_komm side 15 - 820301/hko;

                      for pos:=1 step 1 until d.op_ref.data(2) do
                      begin
                        disable i:=læsfil(d.op_ref.data(3),pos,j);
                        if i<>0 then
                          fejlreaktion(5<*læsfil*>,i,
                            <:io_kommando(gruppe,vis):>,0);
                        iaf:=0;
                        vogn:=fil(j).iaf(1);
                        if vogn shift(-22) =0 then
                          write(z_io,<<ddddddd>,vogn extract 14)
                        else
                        begin
                          løb:=vogn extract 7;
                          bogst:=vogn shift(-7) extract 5;
                          if bogst>0 then bogst:=bogst+'A'-1;
                          ll:=vogn shift(-12) extract 10;
                          write(z_io,"sp",if bogst=0 then 1 else 0,<<ddd>,ll,
                                false add bogst,1,"/",1,true,3,<<d>,løb);
                        end;
                        if pos mod 8 =0 then outchar(z_io,'nl')
                        else write(z_io,"sp",2);
                      end;
                      write(z_io,"*",1);
\f

message procedure io_komm side 16 - 810512/hko/cl;

                    end
                    else if kode=28 then <* gruppe,oversigt *>
                    begin
                      write(z_io,"nl",1,"-",5,"sp",2,<:gruppe oversigt:>,
                            "sp",2,"-",5,"nl",2);
                      for pos:=1 step 1 until d.op_ref.data(1) do
                      begin
                        disable i:=læsfil(d.op_ref.data(2),pos,j);
                        if i<>0 then 
                          fejlreaktion(5<*læsfil*>,i,
                            <:io-kommando(gruppe-oversigt):>,0);
                        iaf:=0;
                        ll:=fil(j).iaf(1);
                        write(z_io,"G",1,<<z>,true,3,ll extract 7);
                        if pos mod 10 =0 then outchar(z_io,'nl')
                        else write(z_io,"sp",3);
                      end;
                      write(z_io,"*",1);
                    end;
                    <* slet fil *>
                    d.op_ref.opkode:= 104;
                    d.op_ref.data(4):= d.op_ref.data(if kode=28 then 2 else 3);
                    signalch(cs_slet_fil,op_ref,gen_optype or io_optype);
                    waitch(cs_io_komm,op_ref,io_optype or gen_optype,-1);
                  end; <* resultat=3 *>

                end;

                begin
\f

message procedure io_komm side 17 - 810525/cl;

                  <* 8 spring(-oversigts-)rapport *>

                  d.op_ref.retur:=cs_io_komm;
                  tofrom(d.op_ref.data,ia,4);
                  indeks:=op_ref;
                  signal_ch(cs_vt,op_ref,gen_optype or io_optype);
<*V*>             wait_ch(cs_io_komm,op_ref,io_optype,-1<*timeout*>);

<*+4*>            if op_ref<>indeks then
                    fejlreaktion(11<*fremmed post*>,op_ref,
                      <:io-kommando(spring-rapport):>,0);
<*-4*>

<*V*>             setposition(z_io,0,0);
                  if sluttegn <> 'nl' then outchar(z_io,'nl');
                  if d.op_ref.resultat<>3 then
                  begin
                    skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat);
                  end
                  else
                  begin
                    boolean p_skrevet;
                    integer bogst,løb;

                    if kode = 32 then <* spring,vis *>
                    begin
                      ll:= d.op_ref.data(1) shift (-5) extract 10;
                      bogst:= d.op_ref.data(1) extract 5;
                      if bogst<>0 then bogst:= bogst + 'A' - 1;
<*V*>                 write(z_io,"nl",1,"-",5,"sp",2,<:spring: :>,
                            <<d>,ll,false add bogst,(bogst<>0) extract 1,
                            <:.:>,string (extend d.op_ref.data(2) shift 24));
                      raf:= data+8;
                      if d.op_ref.raf(1)<>0.0 then
                        write(z_io,<:,  startet :>,<<zddddd>,round
                          systime(4,d.op_ref.raf(1),r),<:.:>,round r)
                      else
                        write(z_io,<:, ikke startet:>);
                      write(z_io,"sp",2,"-",5,"nl",1);
\f

message procedure io_komm side 18 - 810518/cl;

                      p_skrevet:= false;
                      for pos:=1 step 1 until d.op_ref.data(3) do
                      begin
                        disable i:=læsfil(d.op_ref.data(4),pos,j);
                        if i<>0 then
                          fejlreaktion(5<*læsfil*>,i,
                            <:io_kommando(spring,vis):>,0);
                        iaf:=0;
                        i:= fil(j).iaf(1);
                        if i < 0 and -, p_skrevet then
                        begin
                          outchar(z_io,'('); p_skrevet:= true;
                        end;
                        if i > 0 and p_skrevet then
                        begin
                          outchar(z_io,')'); p_skrevet:= false;
                        end;
                        if pos mod 2 = 0 then
                          write(z_io,<< dd>,abs i,<:.:>)
                        else
                          write(z_io,true,3,<<d>,abs i);
                        if pos mod 21 = 0 then outchar(z_io,'nl');
                      end;
                      write(z_io,"*",1);
\f

message procedure io_komm side 19 - 810525/cl;

                    end
                    else if kode=33 then <* spring,oversigt *>
                    begin
                      write(z_io,"nl",1,"-",5,"sp",2,<:spring oversigt:>,
                            "sp",2,"-",5,"nl",2);
                      for pos:=1 step 1 until d.op_ref.data(1) do
                      begin
                        disable i:=læsfil(d.op_ref.data(2),pos,j);
                        if i<>0 then 
                          fejlreaktion(5<*læsfil*>,i,
                            <:io-kommando(spring-oversigt):>,0);
                        iaf:=0;
                        ll:=fil(j).iaf(1) shift (-5) extract 10;
                        bogst:=fil(j).iaf(1) extract 5;
                        if bogst<>0 then bogst:=bogst + 'A' - 1;
                        write(z_io,"sp",(bogst=0) extract 1 + 1,<<ddd>,ll,
                          false add bogst,(bogst<>0) extract 1,<:.:>,true,4,
                          string (extend fil(j).iaf(2) shift 24));
                        if fil(j,2)<>0.0 then
                          write(z_io,<:startet :>,<<zddddd>,
                            round systime(4,fil(j,2),r),<:.:>,round r);
                        outchar(z_io,'nl');
                      end;
                      write(z_io,"*",1);
                    end;
                    <* slet fil *>
                    d.op_ref.opkode:= 104;
                    if kode=33 then d.op_ref.data(4):= d.op_ref.data(2);
                    signalch(cs_slet_fil,op_ref,gen_optype or io_optype);
                    waitch(cs_io_komm,op_ref,io_optype or gen_optype,-1);
                  end; <* resultat=3 *>

                end;

                begin
\f

message procedure io_komm side 20 - 820302/hko;

                  <* 9 fordeling af linier/områder på operatører *>

                  d.op_ref.retur:=cs_io_komm;
                  disable
                  if kode=5 then
                  begin
                    integer array io_linietabel(1:max_linienr//3+1);

                    for ref:= 0 step 512 until (max_linienr//768*512) do
                    begin
                      i:= læs_fil(1035,ref//512+1,j);
                      if i <> 0 then
                        fejlreaktion(5,i,<:liniefordelingstabel:>,0);
                      tofrom(io_linietabel.ref,fil(j),
                      if (((max_linienr+1 - (ref//2*3))+2)//3*2) > 512 then 512
                      else ((max_linienr+1 - (ref//2*3))+2)//3*2);
                    end;  
                    ref:=0;
                    operatør:=ia(1);
                    for j:=2 step 1 until indeks do
                    begin
                      ll:=ia(j);
                      if ll<>0 then
                        skrivtegn(io_linietabel,abs(ll)+1,
                            if ll>0 then operatør else 0);
                    end;
                    for ref:= 0 step 512 until (max_linienr//768*512) do
                    begin
                      i:= skriv_fil(1035,ref//512+1,j);
                      if i <> 0 then
                        fejlreaktion(6,i,<:liniefordelingstabel:>,0);
                      tofrom(fil(j),io_linietabel.ref,
                         if (((max_linienr+1 - (ref//2*3))+2)//3*2) > 512
                         then 512 else ((max_linienr+1 - (ref//2*3))+2)//3*2
                      );
                    end;  
                    ref:=0;
                  end
                  else
                  begin
                    modiffil(1034,1,i);
                    ref:=0;
                    operatør:=ia(1);
                    for j:=2 step 1 until indeks do
                    begin
                      ll:=ia(j);
                      fil(i).ref(ll):= if ll>0 then operatør else 0;
                    end;
                  end;
                  indeks:=op_ref;
                  signal_ch(cs_rad,op_ref,gen_optype or io_optype);
<*V*>             wait_ch(cs_io_komm,op_ref,io_optype,-1);

<*+4*>            if op_ref<>indeks then
                    fejlreaktion(11<*fr.post*>,op_ref,
                      <:io-komm,liniefordeling retur fra rad:>,0);
<*-4*>

<*V*>             setposition(z_io,0,0);
                  if sluttegn<>'nl' then outchar(z_io,'nl');
                  skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat);

                end;

                begin
\f

message procedure io_komm side 21 - 820301/cl;

                  <* 10 springdefinition *>

                  tofrom(d.op_ref.data,ia,indeks*2);
<*V*>             wait_ch(cs_io_fil,vt_op,true,-1<*timeout*>);
                  start_operation(vt_op,101,cs_io_komm,
                                  101<*opret fil*>);
                  d.vt_op.data(1):=128;<*postantal*>
                  d.vt_op.data(2):=2;  <*postlængde*>
                  d.vt_op.data(3):=1;  <*segmentantal*>
                  d.vt_op.data(4):=
                          2 shift 10;  <*spool fil*>
                  signal_ch(cs_opret_fil,vt_op,io_optype);
                  pos:=vt_op;<*variabel lånes*>
<*V*>             wait_ch(cs_io_komm,vt_op,io_optype,-1<*timeout*>);
<*+4*>            if vt_op<>pos then
                    fejlreaktion(11<*fremmed post*>,vt_op,<:springdef:>,0);
                  if d.vt_op.data(9)<>0 then
                    fejlreaktion(13<*opret-fil*>,d.vt_op.data(9),
                      <:io-kommando(springdefinition):>,0);
<*-4*>
                  iaf:=0;
                  for i:=1 step 1 until indeks-2 do
                  begin
                    disable k:=modif_fil(d.vt_op.data(4),i,j);
                    if k<>0 then
                      fejlreaktion(7<*modif-fil*>,k,
                        <:io kommando(spring-def):>,0);
                    fil(j).iaf(1):=d.op_ref.data(i+2);
                  end;
                  while sep = ',' do
                  begin
                    wait(bs_fortsæt_adgang);
                    pos:= 1; j:= 0;
                    while læs_store(z_io,i) < 8 do
                    begin
                      skrivtegn(fortsæt,pos,i);
                      if i = '?' or i = 'esc' then j:= 1; <* skip kommando *>
                    end;
                    skrivtegn(fortsæt,pos,'em');
                    afsluttext(fortsæt,pos);
                    sluttegn:= i;
                    if j<>0 then
                    begin
                      setposition(z_io,0,0);
                      if sluttegn <> 'nl' then outchar(z_io,'nl');
                      skriv_kvittering(z_io,opref,-1,53);<*annulleret*>
                      goto sp_ann;
                    end;
\f

message procedure io_komm side 22 - 810519/cl;

                    disable begin
                    integer array værdi(1:4);
                    integer a_pos,res;
                      pos:= 0;
                      repeat
                        apos:= pos;
                        læs_paramsæt(fortsæt,a_pos,0,værdi,sep,res);
                        if res >= 0 then
                        begin
                          if res=0 and (sep=',' or indeks>2) then <*ok*>
                          else if res=0 then res:= -25 <*parameter mangler*>
                          else if res=10 and (værdi(1)<1 or værdi(1)>99) then
                              res:= -44 <*intervalstørrelse ulovlig*>
                          else if res=10 and (værdi(2)<1 or værdi(2)>99) then
                              res:= -6  <*løbnr ulovligt*>
                          else if res=10 then
                          begin
                            k:=modiffil(d.vt_op.data(4),indeks-1,j);
                            if k<>0 then fejlreaktion(7<*modiffil*>,k,
                               <:io kommando(spring-def):>,0);
                            iaf:= 0;
                            fil(j).iaf(1):= værdi(1) shift 12 + værdi(2);
                            indeks:= indeks+1;
                            if sep = ',' then res:= 0;
                          end
                          else res:= -27; <*parametertype*>
                        end;
                        if res>0 then pos:= a_pos;
                      until sep<>'sp' or res<=0;

                      if res<0 then
                      begin
                        d.op_ref.resultat:= -res;
                        i:=1;
                        hægt_tekst(d.op_ref.data,i,fortsæt,1);
                        afsluttext(d.op_ref.data,i);
                      end;
                    end;
\f

message procedure io_komm side 23 - 810519/cl;

                    if d.op_ref.resultat > 3 then
                    begin
                      setposition(z_io,0,0);
                      if sluttegn <> 'nl' then outchar(z_io,'nl');
                      skriv_kvittering(z_io,op_ref,pos,d.opref.resultat);
                      goto sp_ann;
                    end;
                    signalbin(bs_fortsæt_adgang);
                  end while sep = ',';
                  d.vt_op.data(1):= indeks-2;
                  k:= sætfildim(d.vt_op.data);
                  if k<>0 then fejlreaktion(9,k,<:io kommando(spring-def):>,0);
                  d.op_ref.data(3):= d.vt_op.data(4); <*filref*>
                  signalch(cs_io_fil,vt_op,io_optype or gen_optype);
                  d.op_ref.retur:=cs_io_komm;
                  pos:=op_ref;
                  signal_ch(cs_vt,op_ref,gen_optype or io_optype);
<*V*>             wait_ch(cs_io_komm,op_ref,io_optype,-1<*timeout*>);
<*+4*>            if pos<>op_ref then
                    fejlreaktion(11<*fremmed post*>,op_ref,
                      <:io kommando(springdef retur fra vt):>,0);
<*-4*>

<*V*>             setposition(z_io,0,0);
                  if sluttegn<>'nl' then outchar(z_io,'nl');
                  skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat);

                  if false then
                  begin
          sp_ann:   signalch(cs_slet_fil,vt_op,io_optype);
                    waitch(cs_io_komm,vt_op,io_optype,-1);
                    signalch(cs_io_fil,vt_op,io_optype or vt_optype);
                    signalbin(bs_fortsæt_adgang);
                  end;
                    
                end;
                begin
                  integer i,j,k,opr,lin,max_lin;
                  boolean o_ud, t_ud;
\f

message procedure io_komm side 23a - 820301/cl;

                  <* 11 fordelingsrapport *>

<*V*>             setposition(z_io,0,0);
                  if sluttegn <> 'nl' then outchar(z_io,'nl');

                  max_lin:= max_linienr;
                  for opr:= 1 step 1 until max_antal_operatører, 0 do
                  begin
                    o_ud:= t_ud:= false;
                    k:= 0;

                    if opr<>0 then
                    begin
                      j:= k:= 0;
                      for lin:= 1 step 1 until max_lin do
                      begin
                        læs_tegn(radio_linietabel,lin+1,i);
                        if i<>0 then j:= lin;
                        if opr=i and opr<>0 then
                        begin
                          if -, o_ud then
                          begin
                            o_ud:= true;
                            if opr<>0 then
                              write(z_io,"nl",1,<:operatør:>,<< dd>,opr,
                                "sp",2,string bpl_navn(opr))
                            else
                              write(z_io,"nl",1,<:ikke fordelte:>);
                          end;
                          if -, t_ud then
                          begin
                            write(z_io,<:<'nl'>    linier: :>);
                            t_ud:= true;
                          end;
                          k:=k+1;
                          if k>1 and k mod 10 = 1 then
                            write(z_io,"nl",1,"sp",13);
                          write(z_io,<<ddd >,lin);
                        end;
                        if lin=max_lin then max_lin:= j;
                      end;
                    end;

                    k:= 0; t_ud:= false;
                    for i:= 1 step 1 until max_antal_områder do
                    begin
                      if radio_områdetabel(i)= opr then
                      begin
                        if -, o_ud then
                        begin
                          o_ud:= true;
                          if opr<>0 then
                            write(z_io,"nl",1,<:operatør:>,<< dd>,opr,
                              "sp",2,string bpl_navn(opr))
                          else
                            write(z_io,"nl",1,<:ikke fordelte:>);
                        end;
                        if -, t_ud then
                        begin
                          write(z_io,<:<'nl'>    områder: :>);
                          t_ud:= true;
                        end;
                        k:= k+1;
                        if k>1 and k mod 10 = 1 then
                          write(z_io,"nl",1,"sp",13);
                        write(z_io,true,4,string område_navn(i));
                      end;
                    end;
                    if o_ud then write(z_io,"nl",1);
                  end;
                  write(z_io,"*",1);
                end;

                begin
                  integer omr,typ,sum;
                  integer array ialt(1:5);
                  real r;
\f

message procedure io_komm side 24 - 810501/hko;

                  <* 12 vis/nulstil opkaldstællere *>


                  if kode=76 and indeks=1 then
                  begin <* TÆ,N <tid> *>
                    if ia(1)<(-1) or 2400<ia(1) then
                    begin
                      setposition(z_io,0,0);
                      if sluttegn<>'nl' then outchar(z_io,'nl');
                      skriv_kvittering(z_io,opref,-1,64);
                    end
                    else
                    begin
                      if ia(1)=(-1) then nulstil_systællere:= -1
                      else nulstil_systællere:= (ia(1) mod 2400)*100;
                      opdater_tf_systællere;
                      typ:= opref; <* typ lånes til gemmevariabel *>
                      d.opref.retur:= cs_io_komm;
                      signal_ch(cs_io_nulstil,opref,io_optype);
<*V*>                 wait_ch(cs_io_komm,opref,io_optype,-1);
<*+4*>                if opref <> typ then
                        fejlreaktion(11<*fremmed post*>,opref,
                          <:io_kommando:>,0);
<*-4*>
                      setposition(z_io,0,0);
                      if sluttegn<>'nl' then outchar(z_io,'nl');
                      skriv_kvittering(z_io,opref,-1,3);
                    end;
                  end
                  else
                  begin
                    setposition(z_io,0,0);
                    if sluttegn<>'nl' then outchar(z_io,'nl');
                    for typ:= 1 step 1 until 5 do ialt(typ):= 0;
  
                    write(z_io,
              <:område  udgående  alm.ind  nød ind:>,
              <: ind-ialt    total   ej forb.  optaget:>,"nl",1);
                    for omr := 1 step 1 until max_antal_områder do
                    begin
                      sum:= 0;
                      write(z_io,true,6,string område_navn(omr),":",1);
                      for typ:= 1 step 1 until 3 do
                      begin
                        write(z_io,<<  ddddddd>,opkalds_tællere((omr-1)*5+typ));
                        sum:= sum + opkalds_tællere((omr-1)*5+typ);
                        ialt(typ):= ialt(typ)+opkalds_tællere((omr-1)*5+typ);
                      end;
                      write(z_io,<<  ddddddd>,
                        sum-opkalds_tællere((omr-1)*5+1),sum,"sp",2);
                      for typ:= 4 step 1 until 5 do
                      begin
                        write(z_io,<<  ddddddd>,opkalds_tællere((omr-1)*5+typ));
                        ialt(typ):= ialt(typ)+opkalds_tællere((omr-1)*5+typ);
                      end;
                      write(z_io,"nl",1);
                    end;
                    sum:= 0;
                    write(z_io,"nl",1,<:ialt  ::>);
                    for typ:= 1 step 1 until 3 do
                    begin
                      write(z_io,<<  ddddddd>,ialt(typ));
                      sum:= sum+ialt(typ);
                    end;
                    write(z_io,<<  ddddddd>,sum-ialt(1),sum,"sp",2,
                      ialt(4), ialt(5), "nl",3);

                    for typ:= 1 step 1 until 5 do ialt(typ):= 0;
                    write(z_io,
                      <:oper.   udgående  alm.ind  nød ind:>,
                      <: ind-ialt    total   ej forb.  optaget:>,"nl",1);
                    for omr := 1 step 1 until max_antal_operatører do
                    begin
                      sum:= 0;
                      if bpl_navn(omr)=long<::> then
                        write(z_io,"sp",6-write(z_io,<:op:>,<<d>,omr),":",1)
                      else
                        write(z_io,true,6,string bpl_navn(omr),":",1);
                      for typ:= 1 step 1 until 3 do
                      begin
                        write(z_io,<<  ddddddd>,operatør_tællere((omr-1)*4+typ));
                        sum:= sum + operatør_tællere((omr-1)*5+typ);
                        ialt(typ):= ialt(typ)+operatør_tællere((omr-1)*5+typ);
                      end;
                      write(z_io,<<  ddddddd>,
                        sum-operatør_tællere((omr-1)*5+1),sum,"sp",2);
                      for typ:= 4 step 1 until 5 do
                      begin
                        write(z_io,<<  ddddddd>,operatør_tællere((omr-1)*5+typ));
                        ialt(typ):= ialt(typ)+operatør_tællere((omr-1)*5+typ);
                      end;
                      write(z_io,"nl",1);
                    end;
                    sum:= 0;
                    write(z_io,"nl",1,<:ialt  ::>);
                    for typ:= 1 step 1 until 3 do
                    begin
                      write(z_io,<<  ddddddd>,ialt(typ));
                      sum:= sum+ialt(typ);
                    end;
                    write(z_io,<<  ddddddd>,sum-ialt(1),sum,"sp",2,
                      ialt(4),ialt(5),"nl",2);

                    typ:= replacechar(1,':');
                    write(z_io,<:tællere nulstilles :>);
                    if nulstil_systællere=(-1) then
                      write(z_io,<:ikke automatisk:>,"nl",1)
                    else
                      write(z_io,<:automatisk kl. :>,<<zd dd dd>,
                        nulstil_systællere,"nl",1);
                    replacechar(1,'.');
                    write(z_io,<:sidst nulstillet d. :>,<<zd dd dd>,
                      systime(4,systællere_nulstillet,r));
                    replacechar(1,':');
                    write(z_io,<: kl. :>,<<zd dd dd>,r,"nl",1);
                    replacechar(1,typ);
                    write(z_io,"*",1,"nl",1);
                    setposition(z_io,0,0);
  
                    if kode = 76 <* nulstil tællere *> then
                    disable begin
                      for omr:= 1 step 1 until max_antal_områder*5 do
                        opkalds_tællere(omr):= 0;
                      for omr:= 1 step 1 until max_antal_operatører*5 do
                        operatør_tællere(omr):= 0;
                      systime(1,0.0,systællere_nulstillet);
                      opdater_tf_systællere;
                      typ:= replacechar(1,'.');
                      write(z_io,<:!!! tællere nulstillet d. :>,<<zd dd dd>,
                        systime(4,systællere_nulstillet,r));
                      replacechar(1,':');
                      write(z_io,<: kl. :>,<<zd dd dd>,r,"nl",1);
                      replacechar(1,typ);
                      setposition(z_io,0,0);
                    end;
                  end;
                end;

                begin
\f

message procedure io_komm side 25 - 940522/cl;

                  <* 13 navngiv betjeningsplads *>
                  boolean incl;
                  long field lf;

                  lf:=6;
                  operatør:= ia(1);
                  navn:= ia.lf;
                  incl:= false add (ia(4) extract 8);

                  if navn=long<::> then
                  begin
                    <* nedlæg navn - check for i brug *>
                    iaf:= operatør*terminal_beskr_længde;
                    if terminal_tab.iaf.terminal_tilstand shift (-21)<>7 then
                      d.opref.resultat:= 48 <*i brug*>
                    else
                    begin
                      for i:= 65 step 1 until top_bpl_gruppe do
                      begin
                        iaf:= i*op_maske_lgd;
                        if læsbit_ia(bpl_def.iaf,operatør) then
                          d.opref.resultat:= 48<*i brug*>;
                      end;
                    end;
                    if d.opref.resultat <= 3 then
                    begin
                      for i:= 1 step 1 until sidste_bus do
                        if bustabel(i) shift (-14) extract 8 = operatør then
                          d.opref.resultat:= 48<*i brug*>;
                    end;
                  end
                  else
                  begin
                    <* opret/omdøb *>
                    i:= find_bpl(navn);
                    if i<>0 and i<>operatør then 
                      d.opref.resultat:= 48 <*i brug*>;
                  end;
                  if d.opref.resultat<=3 then
                  begin
                    bpl_navn(operatør):= navn;
                    operatør_auto_include(operatør):= incl;
                    k:= modif_fil(tf_bpl_navne,operatør,ll);
                    if k<>0 then
                      fejlreaktion(7,k,<:betjeningsplads,navngiv:>,0);
                    lf:= 4;
                    fil(ll).lf:= navn add (incl extract 8);
                    setposition(fil(ll),0,0);

                    <* skriv bplnavne *>
                    disable begin
                      zone z(128,1,stderror);
                      long array field laf;
                      integer array ia(1:10);

                      open(z,4,<:bplnavne:>,0);
                      laf:= 0;
                      outrec6(z,512);
                      for i:= 1 step 1 until 127 do
                        z.laf(i):= bpl_navn(i);
                      close(z,true);
                      monitor(42,z,0,ia);
                      ia(6):= systime(7,0,0.0);
                      monitor(44,z,0,ia);
                    end;                        
                    d.opref.resultat:= 3;<*udført*>
                  end;

                  setposition(z_io,0,0);
                  if sluttegn<>'nl' then outchar(z_io,'nl');
                  skriv_kvittering(z_io,opref,-1,d.opref.resultat);
                end;

                begin
\f

message procedure io_komm side 26 - 940522/cl;

                  <* 14 betjeningsplads - gruppe *>
                  integer ant_i_gruppe;
                  long field lf;
                  integer array maske(1:op_maske_lgd//2);

                  lf:= 4; ant_i_gruppe:= 0;
                  tofrom(maske,ingen_operatører,op_maske_lgd);
                  navn:= ia.lf;
                  operatør:= find_bpl(navn);
                  for i:= 3 step 1 until indeks do
                    if sætbit_ia(maske,ia(i),1)=0 then
                      ant_i_gruppe:= ant_i_gruppe+1;
                  if ant_i_gruppe=0 then
                  begin
                    <* slet gruppe *>
                    if operatør<=64 then
                      d.opref.resultat:= (if operatør=0 then 46<*navn ukendt*>
                                                  else 62<*navn ulovligt*>)
                    else
                    begin
                      for i:= 1 step 1 until max_antal_operatører do
                        for j:= 1 step 1 until 3 do
                          if operatør_stop(i,j)=operatør then
                            d.opref.resultat:= 48<*i brug*>;
                    end;
                    navn:= long<::>;
                  end
                  else
                  begin
                    if 1<=operatør and operatør<=64 then
                      d.opref.resultat:= 62<*navn ulovligt*>
                    else
                    if operatør=0 then
                    begin
                      i:=65;
                      while i<=127 and operatør=0 do
                      begin
                        if bpl_navn(i)=long<::> then operatør:=i;
                        i:= i+1;
                      end;
                      if operatør=0 then
                        d.opref.resultat:= 32<*ikke plads*>
                      else if operatør>top_bpl_gruppe then
                        top_bpl_gruppe:= operatør;
                    end;
                  end;
                  if d.opref.resultat<=3 then
                  begin
                    bpl_navn(operatør):= navn;
                    iaf:= operatør*op_maske_lgd;
                    tofrom(bpl_def.iaf,maske,op_maske_lgd);
                    bpl_tilst(operatør,1):= bpl_tilst(operatør,2):= 0;
                    for i:= 1 step 1 until max_antal_operatører do
                    begin
                      if læsbit_ia(maske,i) then
                      begin
                        bpl_tilst(operatør,2):= bpl_tilst(operatør,2)+1;
                        if læsbit_ia(operatør_maske,i) then
                          bpl_tilst(operatør,1):= bpl_tilst(operatør,1)+1;
                      end;
                    end;
                    k:=modif_fil(tf_bplnavne,operatør,ll);
                    if k<>0 then
                      fejlreaktion(7,k,<:btj.plads,gruppenavn:>,0);
                    lf:= 4;
                    fil(ll).lf:= navn;
                    setposition(fil(ll),0,0);
                    iaf:= 0;
                    k:= modif_fil(tf_bpl_def,operatør-64,ll);
                    if k<>0 then
                      fejlreaktion(7,k,<:btj.plads,gruppedef:>,0);
                    for i:= 1 step 1 until op_maske_lgd//2 do
                      fil(ll).iaf(i):= maske(i);
                    fil(ll).iaf(4):= bpl_tilst(operatør,2);
                    setposition(fil(ll),0,0);
                    d.opref.resultat:= 3;
                  end;

                  setposition(z_io,0,0);
                  if sluttegn<>'nl' then outchar(z_io,'nl');
                  skriv_kvittering(z_io,opref,-1,d.opref.resultat);
                end;

                begin
\f

message procedure io_komm side 27 - 940522/cl;

                  <* 15 vis betjeningspladsdefinitioner *>

                  setposition(z_io,0,0);
                  if sluttegn<>'nl' then outchar(z_io,'nl');
                  write(z_io,"nl",1,<:operatørpladser::>,"nl",1);
                  for i:= 1 step 1 until max_antal_operatører do
                  begin
                    write(z_io,<<dd>,i,<:: :>,true,6,string bpl_navn(i),
                      case operatør_auto_include(i) extract 2 + 1 of(
                      <:(--):>,<:(ÅB):>,<:(??):>,<:(ST):>));
                    if i mod 4 = 0 then write(z_io,"nl",1)
                                   else write(z_io,"sp",5);
                  end;
                  if max_antal_operatører mod 4 <> 0 then write(z_io,"nl",1);
                  write(z_io,"nl",1,<:grupper::>,"nl",1);
                  for i:= 65 step 1 until top_bpl_gruppe do
                  begin
                    ll:=0; iaf:= i*op_maske_lgd;
                    if bpl_navn(i)<>long<::> then
                    begin
                      write(z_io,true,6,string bpl_navn(i),":",1);
                      for j:= 1 step 1 until max_antal_operatører do
                      begin
                        if læsbit_ia(bpl_def.iaf,j) then
                        begin
                          if ll mod 8 = 0 and ll<>0 then
                            write(z_io,"nl",1,"sp",7);
                          write(z_io,"sp",2,string bpl_navn(j));
                          ll:=ll+1;
                        end;
                      end;
                      write(z_io,"nl",1);
                    end;
                  end;
                  write(z_io,"*",1);
                end;

                begin
\f

message procedure io_komm side 28 - 940522/cl;

                  <* 16 stopniveau,definer *>

                  operatør:= ia(1);
                  iaf:= operatør*terminal_beskr_længde;
                  for i:= 1 step 1 until 3 do
                    operatør_stop(operatør,i):= ia(i+1);
                  if -,læsbit_ia(operatørmaske,operatør) then
                  begin
                    tofrom(opkaldsflag,alle_operatører,op_maske_lgd);
                    signal_bin(bs_mobilopkald);
                  end;
                  k:=modif_fil(tf_stoptabel,operatør,ll);
                  if k<>0 then
                    fejlreaktion(7,k,<:stopniveau,definer:>,0);
                  iaf:= 0;
                  for i:= 0 step 1 until 3 do
                    fil(ll).iaf(i+1):= operatør_stop(operatør,i);
                  setposition(fil(ll),0,0);
                  setposition(z_io,0,0);
                  if sluttegn<>'nl' then outchar(z_io,'nl');
                  skriv_kvittering(z_io,0,-1,3);
                end;

                begin
\f

message procedure io_komm side 29 - 940522/cl;

                  <* 17 stopniveauer,vis *>

                  setposition(z_io,0,0);
                  if sluttegn<>'nl' then outchar(z_io,'nl');

                  for operatør:= 1 step 1 until max_antal_operatører do
                  begin
                    iaf:=operatør*terminal_beskr_længde;
                    ll:=0;
                    ll:=write(z_io,<<dd>,operatør,<:: :>,true,6,
                          string bpl_navn(operatør),<:(:>,
                          case terminal_tab.iaf.terminal_tilstand shift (-21)
                          + 1 of (<:AKTIV:>,<:AKTIV:>,<:AKTIV:>,<:PAUSE:>,
                          <:EKSKL:>,<:EKSKL:>,<:EKSKL:>,<:EKSKL:>), <:) :>);
                    for i:= 1 step 1 until 3 do
                      ll:= ll+write(z_io,if i=1 then "sp" else "/",1,
                              if operatør_stop(operatør,i)=0 then <:ALLE:>
                              else string bpl_navn(operatør_stop(operatør,i)));
                    if operatør mod 2 = 1 then
                      write(z_io,"sp",40-ll)
                    else
                      write(z_io,"nl",1);
                  end;
                  if max_antal_operatører mod 2 <> 0 then write(z_io,"nl",1);
                  write(z_io,"*",1);
                end;

                begin
\f

message procedure io_komm side 30 - 941007/cl;

                  <* 18 alarmlængder *>

                  setposition(z_io,0,0);
                  if sluttegn<>'nl' then outchar(z_io,'nl');

                  for operatør:= 1 step 1 until max_antal_operatører do
                  begin
                    ll:=0;
                    ll:=write(z_io,<<dd>,operatør,<:: :>,true,6,
                          string bpl_navn(operatør));
                    iaf:=(operatør-1)*opk_alarm_tab_lgd;
                    if opk_alarm.iaf.alarm_lgd < 0 then
                      ll:= ll+write(z_io,<:uendelig:>)
                    else
                      ll:= ll+write(z_io,<<ddddddd>,
                                opk_alarm.iaf.alarm_lgd,<: sek.:>);

                    if operatør mod 2 = 1 then
                      write(z_io,"sp",40-ll)
                    else
                      write(z_io,"nl",1);
                  end;
                  if max_antal_operatører mod 2 <> 0 then write(z_io,"nl",1);
                  write(z_io,"*",1);
                end;

                begin
                  <* 19 CC *>
                  integer i, c;

                  i:= 1;
                  while læstegn(ia,i+0,c)<>0 and
                    i<(op_spool_postlgd-op_spool_text)//2*3
                  do skrivtegn(d.opref.data,i,c);
                  repeat skrivtegn(d.opref.data,i,0) until (i mod 6)=1;

                  d.opref.retur:= cs_io_komm;
                  signalch(cs_op,opref,io_optype or gen_optype);
<*V*>             waitch(cs_io_komm,opref,io_optype,-1);
                                                       
                  setposition(z_io,0,0);
                  if sluttegn<>'nl' then outchar(z_io,'nl');
                  skriv_kvittering(z_io,opref,-1,d.opref.resultat);
                end;                  
                
                begin
                  <* 20: CQF,I CQF,U CQF,V *>
                  integer kode, res, i, j;
                  integer array field iaf, iaf1;
                  long field navn;

                  kode:= d.opref.opkode extract 12;
                  navn:= 6; res:= 0;
                  if kode=90 <*CQF,I*> then
                  begin
                    if søg_omr_bus(ia(1),0,0,0,0,0) < 0 then
                      res:= 10 <*busnr ukendt*>
                    else
                    begin
                      j:= -1;
                      for i:= 1 step 1 until max_cqf do
                      begin
                        iaf:= (i-1)*cqf_lgd;
                        if ia(1) = cqf_tabel.iaf.cqf_bus or
                           ia.navn = cqf_tabel.iaf.cqf_id
                        then res:= 48; <*i brug*>
                        if j<0 and cqf_tabel.iaf.cqf_bus=0 then j:= i;
                      end;
                      if res=0 and j<0 then res:= 32; <*ingen fri plads*>
                      if res=0 then
                      begin
                        iaf:= (j-1)*cqf_lgd;
                        cqf_tabel.iaf.cqf_bus:= ia(1);
                        cqf_tabel.iaf.cqf_fejl:= 0;
                        cqf_tabel.iaf.cqf_id:= ia.navn;
                        cqf_tabel.iaf.cqf_ok_tid:= real <::>;
                        cqf_tabel.iaf.cqf_næste_tid:= d.opref.tid + 15*60.0;
                        res:= 3;
                      end;
                    end;
                    setposition(z_io,0,0);
                    if sluttegn<>'nl' then outchar(z_io,'nl');
                    skriv_kvittering(z_io,opref,-1,res);
                  end
                  else
                  if kode=91 <*CQF,U*> then
                  begin
                    j:= -1;
                    for i:= 1 step 1 until max_cqf do
                    begin
                      iaf:= (i-1)*cqf_lgd;
                      if ia(1) = cqf_tabel.iaf.cqf_bus then j:= i;
                    end;
                    if j>=0 then
                    begin
                      iaf:= (j-1)*cqf_lgd;
                      for i:= 1 step 1 until cqf_lgd//2 do
                        cqf_tabel.iaf(i):= 0;
                      res:= 3;
                    end
                    else res:= 13; <*bus ikke indsat*>
                    setposition(z_io,0,0);
                    if sluttegn<>'nl' then outchar(z_io,'nl');
                    skriv_kvittering(z_io,opref,-1,res);
                  end
                  else
                  begin
                    setposition(z_io,0,0);
                    skriv_cqf_tabel(z_io,false);
                    outchar(z_io,'*');
                    setposition(z_io,0,0);
                  end;               

                  if kode=90 or kode=91 then
                  begin
                    j:= skrivfil(1033,1,i);
                    if j<>0 then
                      fejlreaktion(6,j,<:CQF-test cqf-tabel:>,1);
                    for k:= 1 step 1 until max_cqf do
                    begin
                      iaf1:= (k-1)*cqf_lgd;
                      iaf := (k-1)*cqf_id;
                      tofrom(fil(i).iaf,cqf_tabel.iaf1,cqf_id);
                    end;
                    op_cqf_tab_ændret:= true;
                  end;
                end;<*CQF*>
                      

                begin
\f

message procedure io_komm side xx - 940522/cl;



<*+3*>            fejl_reaktion(3<*programfejl*>,j,<:case 'opkode':>,2);
<*-3*>
                end
              end;<*case j *>
            end <* j > 0 *>
            else
            begin
<*V*>         setposition(z_io,0,0);
              if sluttegn<>'nl' then outchar(z_io,'nl');
              skriv_kvittering(z_io,op_ref,-1,
                               45 <* ikke implementeret *>);
            end;
          end;<* godkendt *>

<*V*>     setposition(z_io,0,0);
          signal_bin(bs_zio_adgang);
          d.op_ref.retur:=cs_att_pulje;
          disable afslut_kommando(op_ref);
        end; <* indlæs kommando *>

        begin
\f

message procedure io_komm side xx+1 - 810428/hko;

          <* 2: aktiver efter stop *>
          terminal_tab.ref.terminal_tilstand:= 0 shift 21 +
            terminal_tab.ref.terminal_tilstand extract 21;
          afslut_operation(op_ref,-1);
          signal_bin(bs_zio_adgang);
        end;

<*+3*>  fejl_reaktion(3<*programfejl *>,aktion,<:case aktion:>,2)
<*-3*>
      end; <* case aktion+6 *>

     until false;
  io_komm_trap:
    if -,(alarmcause shift (-24) extract 24 = (-2) and
          alarmcause extract 24 = (-13)) then
      disable skriv_io_komm(zbillede,1);
  end io_komm;
\f

message procedure io_spool side 1 - 810507/hko;

  procedure io_spool;
    begin
      integer
        næste_tomme,nr;
      integer array field
        op_ref;

      procedure skriv_io_spool(zud,omfang);
        value                      omfang;
        zone                   zud;
        integer                    omfang;
        begin
          disable write(zud,"nl",1,<:+++ io_spool             :>);
          if omfang > 0 then
          disable begin integer x;
            trap(slut);
            write(zud,"nl",1,
              <:  opref:     :>,op_ref,"nl",1,
              <:  næstetomme::>,næste_tomme,"nl",1,
              <:  nr         :>,nr,"nl",1,
              <::>);
            skriv_coru(zud,coru_no(102));
slut:
          end;<*disable*>
        end skriv_io_spool;

      trap(io_spool_trap);
      næste_tomme:= 1;
      stack_claim((if cm_test then 200 else 146)+24 +48);
<*+2*>
      if testbit0 and overvåget or testbit28 then
        skriv_io_spool(out,0);
<*-2*>
\f

message procedure io_spool side 2 - 810602/hko;

      repeat

        wait_ch(cs_io_spool,
                op_ref,
                true,
                -1<*timeout*>);

        i:= d.op_ref.opkode;
        if i = 22 or i = 23 or i = 36 or i = 45 or i = 46 then
        begin
          wait(ss_io_spool_tomme);
          disable modif_fil(io_spoolfil,næste_tomme,nr);
          næste_tomme:= (næste_tomme mod io_spool_postantal) +1;

          i:= d.op_ref.opsize;
<*+4*>    if i > io_spool_postlængde*2 -io_spool_post then
          begin
<*          fejlreaktion(3,i,<:postlængde,io spool:>,1);  *>
            i:= io_spool_postlængde*2 -io_spool_post;
          end;
<*-4*>
          fil(nr,1):= real(extend d.op_ref.opsize shift 24);
          tofrom(fil(nr).io_spool_post,d.op_ref,i);
          signal(ss_io_spool_fulde);
          d.op_ref.resultat:= 1;
        end
        else
        begin
          fejlreaktion(2<*operationskode*>,d.op_ref.opkode,
                       <:io_spool_korutine:>,1);
        end;

        signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);

      until false;

io_spool_trap:

      disable skriv_io_spool(zbillede,1);
    end io_spool;
\f

message procedure io_spon side 1 - 810507/hko;

  procedure io_spon;
    begin
      integer
        næste_fulde,nr,i,dato,kl;
      real t;

      procedure skriv_io_spon(zud,omfang);
        value                     omfang;
        zone                  zud;
        integer                   omfang;
        begin
          disable write(zud,"nl",1,<:+++ io_spon              :>);
          if omfang > 0 then
          disable begin integer x;
            trap(slut);
            write(zud,"nl",1,
              <:  næste-fulde::>,næste_fulde,"nl",1,
              <:  nr          :>,nr,"nl",1,
              <::>);
            skriv_coru(zud,coru_no(103));
slut:
          end;<*disable*>
        end skriv_io_spon;

      trap(io_spon_trap);
      næste_fulde:= 1;
      stack_claim((if cm_test then 200 else 146) +24 +48);
<*+2*>
      if testbit0 and overvåget or testbit28 then
        skriv_io_spon(out,0);
<*-2*>
\f

message procedure io_spon side 2 - 810602/hko/cl;

      repeat

<*V*>   wait(ss_io_spool_fulde);
<*V*>   wait(bs_zio_adgang);

<*V*>   setposition(zio,0,0);

        disable modif_fil(io_spool_fil,næste_fulde,nr);
        næste_fulde:= (næste_fulde mod io_spool_postantal) +1;

        laf:=data;
        k:= fil(nr).io_spool_post.opkode;
        if k = 22 or k = 36 then
        disable begin
          write(z_io,"nl",1,if k=22 then <:auto:> else <:spring:>);
          if k=36 then
          begin
            i:= fil(nr).io_spool_post.data(4);
            j:= i extract 5;
            if j<>0 then j:=j+'A'-1;
            i:= i shift (-5) extract 10;
            write(z_io,"sp",(j=0) extract 1 + 1,<<ddd>,i,false add j,1,".",1,
              true,4,string(extend fil(nr).io_spool_post.data(5) shift 24));
          end;
          skriv_auto_spring_medd(zio,fil(nr).io_spool_post.data,
                                 fil(nr).io_spool_post.tid)
        end
        else if k = 23 then
        disable
        begin
          write(zio,"nl",1,<:-<'>'>:>,fil(nr).io_spool_post.laf);
          dato:= systime(4,fil(nr).io_spool_post.tid,t);
          kl:= round t;
          i:= replace_char(1<*space in number*>,'.');
          write(z_io,"sp",2,<<zd_dd_dd>,dato,<< zd_dd_dd>,kl);
          replace_char(1,i);
        end
        else if k = 45 or k = 46 then
        disable begin
          integer vogn,linie,bogst,løb,t;

          t:=fil(nr).io_spool_post.data(2);
          outchar(z_io,'nl');
          if k = 45 then
            write(zio,<<zd.dd>,t/100.0,"sp",1);

          write(zio,<:nødopkald fra :>);
          vogn:= fil(nr).io_spool_post.data(1);
          i:= vogn shift (-22);
          if i < 2 then
            skrivid(zio,vogn,9)
          else
          begin
            fejlreaktion(3<*programfejl*>,vogn,<:vogn.id, spon.medd:>,1);
            write(zio,<:!!!:>,vogn);
          end;
\f

message procedure io_spon side 3 - 810507/hko;

          if fil(nr).io_spool_post.data(3)<>0 then
            write(z_io," ",1,string område_navn(fil(nr).io_spool_post.data(3)));

          if k = 46 then
          begin
            write(zio,<: besvaret:>,<< zd.dd>,t/100.0);
          end;
        end <*disable*>
        else
          fejlreaktion(2<*operationskode*>,k,<:io_spon_medd:>,1);

        fil(nr,1):= fil(nr,1) add 1;

<*V*>   setposition(zio,0,0);

        signal_bin(bs_zio_adgang);

        signal(ss_io_spool_tomme);

      until false;

io_spon_trap:
      skriv_io_spon(zbillede,1);

    end io_spon;  
\f

message procedure io_medd side 1;

  procedure io_medd;
  begin
    integer array field opref;
    integer afs, kl, i;
    real dato, t;


      procedure skriv_io_medd(zud,omfang);
        value                     omfang;
        zone                  zud;
        integer                   omfang;
        begin
          disable write(zud,"nl",1,<:+++ io_medd              :>);
          if omfang > 0 then
          disable begin integer x;
            trap(slut);
            write(zud,"nl",1,
              <:  opref:    :>,opref,"nl",1,
              <:  afs:      :>,afs,"nl",1,
              <:  kl:       :>,kl,"nl",1,
              <:  i:        :>,i,"nl",1,
              <:  dato:     :>,<<zddddd>,dato,"nl",1,
              <:  t:        :>,t,"nl",1,
              <::>);
            skriv_coru(zud,coru_no(104));
slut:
          end;<*disable*>
        end skriv_io_medd;

      trap(io_medd_trap);
      stack_claim((if cm_test then 200 else 146) +24 +48);
<*+2*>
      if testbit0 and overvåget or testbit28 then
        skriv_io_medd(out,0);
<*-2*>
\f

message procedure io_medd side 2;

    repeat
<*V*> waitch(cs_io_medd,opref,gen_optype,-1);
<*V*> wait(bs_zio_adgang);

      afs:= d.opref.data.op_spool_kilde;
      dato:= systime(4,d.opref.data.op_spool_tid,t);
      kl:= round t;
      write(z_io,"nl",1,<:! fra op:>,<<d>,afs,"sp",1,
        if afs=0 then <:SYSOP:> else string bpl_navn(afs));
      i:= replacechar(1,'.');
      disable write(z_io,"sp",1,<<zd_dd_dd>,kl,"nl",1);
      replacechar(1,i);
      write(z_io,d.opref.data.op_spool_text);
      setposition(z_io,0,0);

      signalbin(bs_zio_adgang);
      signalch((if afs=0 then d.opref.retur else cs_op),opref,d.opref.optype);
    until false;

io_medd_trap:
    skriv_io_medd(zbillede,1);

  end io_medd;

  procedure io_nulstil_tællere;
  begin
    real nu, dato, kl, forr, næste, et_døgn, r;
    integer array field opref;
    integer ventetid, omr, typ, sum;
    integer array ialt(1:5);

      procedure skriv_io_null(zud,omfang);
        value                     omfang;
        zone                  zud;
        integer                   omfang;
        begin                            
          disable write(zud,"nl",1,<:+++ io_nulstil_tællere   :>);
          if omfang > 0 then
          disable begin real t; real array field raf;
            raf:=0;
            trap(slut);
            write(zud,"nl",1,
              <:  opref:    :>,opref,"nl",1,
              <:  ventetid: :>,ventetid,"nl",1,
              <:  omr:      :>,omr,"nl",1,
              <:  typ:      :>,typ,"nl",1,
              <:  sum:      :>,sum,"nl",1);
            write(zud,
              <:  nu:      :>,<< zddddd>,systime(4,nu,t),t,"nl",1);
            write(zud,
              <:  forr:    :>,<< zddddd>,systime(4,forr,t),t,"nl",1);
            write(zud,
              <:  næste:   :>,<< zddddd>,systime(4,næste,t),t,"nl",1);
            write(zud,
              <:  r:       :>,<< zddddd>,systime(4,r,t),t,"nl",1,
              <:  dato:    :>,dato,"nl",1,
              <:  kl:      :>,kl,"nl",1,
              <:  et-døgn: :>,<< dddddd>,et_døgn,"nl",1,
              <::>);
            write(zud,"nl",1,<:ialt: :>);
            skriv_hele(zud,ialt.raf,10,2);
            skriv_coru(zud,coru_no(105));
slut:
          end;<*disable*>
        end skriv_io_null;

      trap(io_null_trap);
      et_døgn:= 24*60*60.0;
      stack_claim(500);
<*+2*>
      if testbit0 and overvåget or testbit28 then
        skriv_io_null(out,0);
<*-2*>               
      pass;

      systime(1,0.0,nu);
      dato:= systime(4,nu,kl);
      if nulstil_systællere >= 0 then
      begin
        if kl>nulstil_systællere then næste:= systid(dato,nulstil_systællere)
                                                + et_døgn
                              else næste:= systid(dato,nulstil_systællere);
        forr:= næste - et_døgn;
        if (forr - systællere_nulstillet) > et_døgn then
          næste:= nu;
      end;

      repeat
        ventetid:= (if nulstil_systællere < 0 then (-1) else (næste - nu));
<*V*>   waitch(cs_io_nulstil,opref,io_optype,ventetid);

        if opref <= 0 then
        begin
          <* nulstil opkaldstællere *>
          wait(bs_zio_adgang);
          setposition(z_io,0,0);

          for typ:= 1 step 1 until 5 do ialt(typ):= 0;
  
          write(z_io,"nl",1,<:!TÆ,N (automatisk):>,"nl",2,
            <:område  udgående  alm.ind  nød ind:>,
            <: ind-ialt    total   ej forb.  optaget:>,"nl",1);
          for omr := 1 step 1 until max_antal_områder do
          begin
            sum:= 0;
            write(z_io,true,6,string område_navn(omr),":",1);
            for typ:= 1 step 1 until 3 do
            begin
              write(z_io,<<  ddddddd>,opkalds_tællere((omr-1)*5+typ));
              sum:= sum + opkalds_tællere((omr-1)*5+typ);
              ialt(typ):= ialt(typ)+opkalds_tællere((omr-1)*5+typ);
            end;
            write(z_io,<<  ddddddd>,
              sum-opkalds_tællere((omr-1)*5+1),sum,"sp",2);
            for typ:= 4 step 1 until 5 do
            begin
              write(z_io,<<  ddddddd>,opkalds_tællere((omr-1)*5+typ));
              ialt(typ):= ialt(typ)+opkalds_tællere((omr-1)*5+typ);
            end;
            write(z_io,"nl",1);
          end;
          sum:= 0;
          write(z_io,"nl",1,<:ialt  ::>);
          for typ:= 1 step 1 until 3 do
          begin
            write(z_io,<<  ddddddd>,ialt(typ));
            sum:= sum+ialt(typ);
          end;
          write(z_io,<<  ddddddd>,sum-ialt(1),sum,"sp",2,
            ialt(4), ialt(5), "nl",3);

          for typ:= 1 step 1 until 5 do ialt(typ):= 0;
          write(z_io,<:oper.   udgående  alm.ind  nød ind:>,
                     <: ind-ialt    total   ej forb.  optaget:>,"nl",1);
          for omr := 1 step 1 until max_antal_operatører do
          begin
            sum:= 0;
            if bpl_navn(omr)=long<::> then
              write(z_io,"sp",6-write(z_io,<:op:>,<<d>,omr),":",1)
            else
              write(z_io,true,6,string bpl_navn(omr),":",1);
            for typ:= 1 step 1 until 3 do
            begin
              write(z_io,<<  ddddddd>,operatør_tællere((omr-1)*5+typ));
              sum:= sum + operatør_tællere((omr-1)*5+typ);
              ialt(typ):= ialt(typ)+operatør_tællere((omr-1)*5+typ);
            end;
            write(z_io,<<  ddddddd>,
              sum-operatør_tællere((omr-1)*5+1),sum,"sp",2);
            for typ:= 4 step 1 until 5 do
            begin
              write(z_io,<<  ddddddd>,operatør_tællere((omr-1)*5+typ));
              ialt(typ):= ialt(typ)+operatør_tællere((omr-1)*5+typ);
            end;
            write(z_io,"nl",1);
          end;
          sum:= 0;
          write(z_io,"nl",1,<:ialt  ::>);
          for typ:= 1 step 1 until 3 do
          begin
            write(z_io,<<  ddddddd>,ialt(typ));
            sum:= sum+ialt(typ);
          end;
          write(z_io,<<  ddddddd>,sum-ialt(1),sum,"sp",2,
            ialt(4),ialt(5),"nl",2);

          typ:= replacechar(1,':');
          write(z_io,<:tællere nulstilles :>);
          if nulstil_systællere=(-1) then
            write(z_io,<:ikke automatisk:>,"nl",1)
          else
            write(z_io,<:automatisk kl. :>,<<zd dd dd>,
              nulstil_systællere,"nl",1);
          replacechar(1,'.');
          write(z_io,<:sidst nulstillet d. :>,<<zd dd dd>,
            systime(4,systællere_nulstillet,r));
          replacechar(1,':');
          write(z_io,<: kl. :>,<<zd dd dd>,r,"nl",1);
          replacechar(1,typ);
          write(z_io,"*",1,"nl",1);
          setposition(z_io,0,0);
          signal_bin(bs_zio_adgang);

          for omr:= 1 step 1 until max_antal_områder*5 do
            opkalds_tællere(omr):= 0;
          for omr:= 1 step 1 until max_antal_operatører*5 do
            operatør_tællere(omr):= 0;
          systællere_nulstillet:= næste;
          opdater_tf_systællere;
        end
        else
          signalch(d.opref.retur,opref,d.opref.optype);

        systime(1,0.0,nu);
        dato:= systime(4,nu,kl);
        if nulstil_systællere >= 0 then
        begin
          if kl>nulstil_systællere then næste:= systid(dato,nulstil_systællere)
                                                + et_døgn
                                else næste:= systid(dato,nulstil_systællere);
          forr:= næste - et_døgn;
        end;
      until false;            

io_null_trap:
    skriv_io_null(zbillede,1);
  end io_nulstil_tællere;

:5: io: initialisering
\f

message io_initialisering side 1 - 810507/hko;

  io_spoolfil:= 1028;
  begin
    integer array fdim(1:8);
    fdim(4):= io_spoolfil;
    hent_fildim(fdim);
    io_spool_postantal:= fdim(1);
    io_spool_postlængde:= fdim(2);
  end;

  io_spool_post:= 4;

    cs_io:= next_semch;
<*+3*> skriv_new_sem(out,3,cs_io,<:cs-io:>);
<*-3*>

    i:= next_coru(100,<*ident *>
                   5,<*prioritet *>
                  true<*test_maske*>);

    j:= new_activity(   i,
                        0,
                     h_io);

<*+3*>skriv_newactivity(out,i,j);
<*-3*>
  cs_io_komm:= next_semch;
<*+3*> skriv_new_sem(out,3,cs_io_komm,<:cs-io-komm:>);
<*-3*>

  i:= next_coru(101,<*ident*>
                 10,<*prioritet*>
               true <*testmaske*>);
  j:= new_activity(          i,
                             0,
                   io_komm);<*ingen parametre*>

<*+3*>skriv_newactivity(out,i,j);
<*-3*>
\f

message io_initialisering side 2 - 810520/hko/cl;

  bs_zio_adgang:= next_sem;
<*+3*> skriv_new_sem(out,1,bs_zio_adgang,<:bs-zio-adgang:>);
<*-3*>
  signal_bin(bs_zio_adgang);

  cs_io_spool:= next_semch;
<*+3*> skriv_new_sem(out,3,cs_io_spool,<:cs-io-spool:>);
<*-3*>

  cs_io_fil:=next_semch;
<*+3*> skriv_new_sem(out,3,cs_io_fil,<:cs-io-fil:>);
<*-3*>
  signal_ch(cs_io_fil,next_op(data+18),gen_optype);

  ss_io_spool_fulde:= next_sem;
<*+3*> skriv_new_sem(out,2,ss_io_spool_fulde,<:ss-io-spool-fulde:>);
<*-3*>

  ss_io_spool_tomme:= next_sem;
<*+3*> skriv_new_sem(out,2,ss_io_spool_tomme,<:ss-io-spool-tomme:>);
<*-3*>
  for i:= 1 step 1 until io_spool_postantal do
    signal(ss_io_spool_tomme);
\f

message io_initialisering side 3 - 880901/cl;

  i:= next_coru(102,
                 5,
                true);
  j:= new_activity(i,0,io_spool);

<*+3*>skriv_newactivity(out,i,j);
<*-3*>

  i:= next_coru(103,
                 10,
                true);
  j:= new_activity(i,0,io_spon);

<*+3*>skriv_newactivity(out,i,j);
<*-3*>

    cs_io_medd:= next_semch;
<*+3*> skriv_new_sem(out,3,cs_io_medd,<:cs-io-medd:>);
<*-3*>

    i:= next_coru(104,<*ident *>
                  10,<*prioritet *>
                  true<*test_maske*>);

    j:= new_activity(   i,
                        0,
                  io_medd);

<*+3*>skriv_newactivity(out,i,j);
<*-3*>

    cs_io_nulstil:= next_semch;
<*+3*> skriv_new_sem(out,3,cs_io_nulstil,<:cs-io-nulstil:>);
<*-3*>

    i:= next_coru(105,<*ident *>
                  10,<*prioritet *>
                  true<*test_maske*>);

    j:= new_activity(   i,
                        0,
                  io_nulstil_tællere);

<*+3*>skriv_newactivity(out,i,j);
<*-3*>

  open(z_io,8,konsol_navn,1 shift 21 + 1 shift 9);
  i:= monitor(8)reserve process:(z_io,0,ia);
  if i <> 0 then
  begin
    fejlreaktion(4<*monitor result*>,+i,<:io reservation:>,0);
  end
  else
  begin
    ref:= 0;
    terminal_tab.ref.terminal_tilstand:= 0;
    write(z_io,"nl",3,"sp",10,"*",15,<: busradio startet :>,
            <<zddddd>,systime(5,0.0,r),".",1,r,
            "sp",1,"*",15,"nl",1);
    setposition(z_io,0,0);
  end;
▶EOF◀