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

⟦6dfd97747⟧ TextFile

    Length: 121344 (0x1da00)
    Types: TextFile
    Names: »xhtoperatør «

Derivation

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

TextFile

operatør.

:1: operatør: parametererklæringer
message operatør_parametererklæringer side 1 - 810422/hko;

integer field
  alarm_kmdo, alarm_tilst, alarm_gtilst, alarm_lgd;
real field
  alarm_start;

integer  
  opk_alarm_tab_lgd;

:2: operatør: parameterinitialisering
message operatør_parameterinitialisering side 1 - 810422/hko;

<* felter i opkaldsalarmtabel *>
alarm_kmdo  := 2;
alarm_tilst := 4;
alarm_gtilst:= 6;
alarm_lgd   := 8;
alarm_start := 12;
opk_alarm_tab_lgd:= 12;

:3: operatør: claiming
\f

message operatør_claiming side 1 - 810520/hko;

  max_coru:= max_coru +1 <* h_op *>
                      +1 <* alarmur *>
                      +1 <* opkaldsalarmer *>
                      +1 <* talevejsswitch *>
                      +1 <* tv_switch_adm *>
                      +1 <* tv_switch_input *>
                      +max_antal_operatører;
  
  max_sem:=  1 <* bs_opk_alarm *>
            +max_sem;

  max_semch:= max_semch +1 <* cs_op *>
                        +1 <* cs_op_retur *> 
                        +1 <* cs_opk_alarm_ur *>
                        +1 <* cs_opk_alarm_ur_ret *>
                        +1 <* cs_opk_alarm *>
                        +1 <* cs_talevejsswitch *>
                        +1 <* cs_tv_switch_adm *>
                        +1 <* cs_tvswitch_adgang *>
                        +1 <* cs_tvswitch_input *>
                        +1 <* cs_op_iomedd *>
                        +max_antal_operatører<* cs_operatør *>
                        +max_antal_operatører<* cs_op_fil *>;

  max_op:= max_op + 1 <* talevejsoperation *>
                  + 2 <* tv_switch_input *>
                  + 1 <* op_iomedd *>
                  + 1 <* opk_alarm_ur *>
                  + max_antal_operatører;

  max_netto_op:= filoplængde*max_antal_operatører
                 + data+128 <* talevejsoperation *>
                 + 2*(data+256) <* tv_switch_input *>
                 + 60      <* op_iomedd *>
                 + data    <* opk_alarm_ur *>
                 + max_netto_op;

:4: operatør: erklæringer
\f

message operatør_erklæringer side 1 - 810602/hko;
  integer
    cs_op,cs_op_retur,cs_talevejsswitch,cs_tvswitch_adgang,cs_tv_switch_adm,
    cs_tvswitch_input, cs_op_iomedd, bs_opk_alarm, cs_opk_alarm,
    cs_opk_alarm_ur, cs_opk_alarm_ur_ret, sidste_tv_brugt;
  integer array
    operatørmaske(1:op_maske_lgd//2),
    op_talevej(0:max_antal_operatører),
    tv_operatør(0:max_antal_taleveje),
    opk_alarm(1:max_antal_operatører*(opk_alarm_tab_lgd//2)),
    ant_i_opkø,
    cs_operatør,
    cs_op_fil(1:max_antal_operatører);
  zone z_tv_in, z_tv_out(128,1,tvswitch_fejl);
  zone array z_op(max_antal_operatører,320,1,op_fejl);
\f

message procedure op_fejl side 1 - 830310/hko;

  procedure op_fejl(z,s,b);
    integer            s,b;
    zone             z;
  begin
    disable begin
      integer array iz(1:20);
      integer i,j,k,n;
      integer array field iaf,iaf1,msk;
      boolean input;
      real array field raf;

      getzone6(z,iz);
      iaf:=raf:=2;
      input:= iz(13) = 1;
      getnumber(iz.raf,9,j);
<*+2*> if testbit31 then
<**>   begin
<**>     write(out,"nl",1,<:blockprocedure: opfejl, operatørnr::>,j,"nl",1,
<**>       <:s=:>); outintbits(out,s);
<**>     write(out,"nl",1,<:b=:>,b,"sp",1,if input then <:input:>
<**>       else <:output:>,"nl",1);
<**>     setposition(out,0,0);
<**>   end;
<*-2*>
      iaf:=j*terminal_beskr_længde;
      k:=1;

      i:= terminal_tab.iaf.terminal_tilstand;
      if i shift(-21) < 4 and (s <> (1 shift 21 +2)  <*or -,input*>) then
        fejlreaktion(17<*ydre enhed status*>,s,string iz.raf(increase(k)),
                     1 shift 12 <*binært*> +1 <*fortsæt*>);
      if s <> (1 shift 21 +2) then
      begin
        terminal_tab.iaf.terminal_tilstand:= 1 shift 23
          + terminal_tab.iaf.terminal_tilstand extract 23;
        tofrom(opkaldsflag,alle_operatører,op_maske_lgd);
        sæt_bit_ia(opkaldsflag,j,0);
        if sæt_bit_ia(operatørmaske,j,0)=1 then
        for k:= j, 65 step 1 until top_bpl_gruppe do
        begin
          msk:= k*op_maske_lgd;
          if læsbit_ia(bpl_def.msk,j) then 
<**>      begin
            n:= 0;
            for i:= 1 step 1 until max_antal_operatører do
            if læsbit_ia(bpl_def.msk,i) then
            begin
              iaf1:= i*terminal_beskr_længde;
              if terminal_tab.iaf1.terminal_tilstand shift (-21) < 3 then
                n:= n+1;
            end;  
            bpl_tilst(j,1):= n;
          end;
<**> <*
            bpl_tilst(j,1):= bpl_tilst(j,1)-1;
  *>    end;
        signal_bin(bs_mobil_opkald);
      end;

      if input or -,input then
      begin
        z(1):=real <:<'?'><'?'><'em'>:>;
        b:=2;
      end;
    end; <*disable*>
  end op_fejl;
\f

message procedure tvswitch_fejl side 1 - 940426/cl;

  procedure tvswitch_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;
      boolean input;
      real array field raf;

      getzone6(z,iz);
      iaf:=raf:=2;
      input:= iz(13) = 1;
<*+2*> if testbit31 then
<**>   begin
<**>     write(out,"nl",1,<:blockprocedure: tvswitch:>,"nl",1,
<**>       <:s=:>); outintbits(out,s);
<**>     write(out,"nl",1,<:b=:>,b,"sp",1,if input then <:input:>
<**>       else <:output:>,"nl",1);
<**>     skrivhele(out,z,b,5);
<**>     setposition(out,0,0);
<**>   end;
<*-2*>
      k:=1;
      if s <> (1 shift 21 +2) then
        fejlreaktion(17<*ydre enhed status*>,s,string iz.raf(increase(k)),
                     1 shift 12 <*binært*> +1 <*fortsæt*>);

      if input or -,input then
      begin
        z(1):=real <:<'em'>:>;
        b:=2;
      end;
    end; <*disable*>
  end tvswitch_fejl;

procedure skriv_talevejs_tab(z);
  zone z;
begin
  write(z,"nl",2,<:talevejsswitch::>);
  write(z,"nl",1,<:  operatører::>,"nl",1);
  for i:= 1 step 1 until max_antal_operatører do
  begin
    write(z,<< dd>,i,":",1,op_talevej(i));
    if i mod 8=0 then outchar(z,'nl');
  end;
  write(z,"nl",1,<:  taleveje::>,"nl",1);
  for i:= 1 step 1 until max_antal_taleveje do
  begin
    write(z,<< dd>,i,":",1,tv_operatør(i));
    if i mod 8=0 then outchar(z,'nl');
  end;
  write(z,"nl",3);
end;                                                      
\f

message procedure skriv_opk_alarm_tab side 1;

procedure skriv_opk_alarm_tab(z);
zone                          z;
begin
  integer nr;
  integer array field tab;
  real t;

  write(z,"nl",2,<:opkaldsalarmtabel::>,"nl",1,
    <:operatør    kmdo tilst gl.tilst længde start:>,"nl",1);
  for nr:=1 step 1 until max_antal_operatører do
  begin
    tab:= (nr-1)*opk_alarm_tab_lgd;
    write(z,<< dd >,nr,true,6,string bpl_navn(nr),<::   :>,
      case opk_alarm.tab.alarm_kmdo+1 of ("-","B","C","F"),1,"sp",5,
      case opk_alarm.tab.alarm_tilst+1 of ("-","B","C","?"),1,"sp",8,
      case opk_alarm.tab.alarm_gtilst+1 of ("-","B","C","?"),1,"sp",2,
      <<-dddd>,opk_alarm.tab.alarm_lgd,"sp",1,
      << zddddd>,systime(4,opk_alarm.tab.alarm_start,t),t,
      "nl",1);
  end;
end;
\f

message procedure ht_symbol side 1 - 851001/cl;

procedure ht_symbol(z);
  zone              z;
write(z,"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>,<:




                    @@         @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
                   @@         @@                               @@
                  @@         @@                               @@
                 @@         @@                               @@
                @@         @@@@@@@@@@@@@         @@@@@@@@@@@@@
               @@                               @@
              @@                               @@
             @@                               @@
            @@         @@@@@@@@@@@@@         @@
           @@         @@         @@         @@
          @@         @@         @@         @@
         @@         @@         @@         @@
        @@@@@@@@@@@@@         @@@@@@@@@@@@@
:>,"esc" add 128,1,<:Æ24;1H:>);
\f

message procedure definer_taster side 1 - 891214,cl;

procedure definer_taster(nr);
  value                  nr;
  integer                nr;
begin

  setposition(z_op(nr),0,0);
  write(z_op(nr),
    "esc" add 128,1, <:P1;2;0ø58/1B4E450D:>,
    "esc" add 128,1, <:Ø:>, <* f1    = <esc>NE<cr> *>
    "esc" add 128,1, <:P1;2;0ø59/1B4F500D:>,
    "esc" add 128,1, <:Ø:>, <* f2    = <esc>OP<cr> *>
    "esc" add 128,1, <:P1;2;0ø5A/1B4F502C560D:>,
    "esc" add 128,1, <:Ø:>, <* f3    = <esc>OP,V<cr> *>
    "esc" add 128,1, <:P1;2;0ø5B/1B4F502C5420:>,
    "esc" add 128,1, <:Ø:>, <* f4    = <esc>OP,T<sp> *>
    "esc" add 128,1, <:P1;2;0ø5C/1B4F502C4120:>,
    "esc" add 128,1, <:Ø:>, <* f5    = <esc>OP,A<sp> *>
    "esc" add 128,1, <:P1;2;1ø5C/1B4F502C4120:>,
    "esc" add 128,1, <:Ø:>, <* s-f5  = <esc>OP,A<sp> *>
    "esc" add 128,1, <:P1;2;0ø5D/1B4D452C4120:>,
    "esc" add 128,1, <:Ø:>, <* f6    = <esc>ME,A<sp> *>
    "esc" add 128,1, <:P1;2;1ø5D/1B4D452C4120:>,
    "esc" add 128,1, <:Ø:>, <* s-f6  = <esc>ME,A<sp> *>
    "esc" add 128,1, <:P1;2;0ø5E/1B4F5020:>,
    "esc" add 128,1, <:Ø:>, <* f7    = <esc>OP<sp>   *>
    "esc" add 128,1, <:P1;2;0ø5F/1B56450D:>,
    "esc" add 128,1, <:Ø:>, <* f8    = <esc>VE<cr>   *>
    "esc" add 128,1, <:P1;2;0ø60/1B4D4F20:>,
    "esc" add 128,1, <:Ø:>, <* f9    = <esc>MO<sp>   *>
    "esc" add 128,1, <:P1;2;1ø60/1B520D:>,
    "esc" add 128,1, <:Ø:>, <* s-f9  = <esc>R<cr>    *>
    "esc" add 128,1, <:P1;2;0ø61/1B53540D:>,
    "esc" add 128,1, <:Ø:>, <* f10   = <esc>ST<cr>   *>
    "esc" add 128,1, <:P1;2;0ø62/1B474520:>,
    "esc" add 128,1, <:Ø:>, <* f11  = <esc>GE<sp> *>
    "esc" add 128,1, <:P1;2;1ø62/1B47452C4720:>,
    "esc" add 128,1, <:Ø:>, <* s-f11  = <esc>GE,G<sp> *>
    "esc" add 128,1, <:P1;2;0ø63/1B47452C560D:>,
    "esc" add 128,1, <:Ø:>, <* f12  = <esc>GE,V<cr> *>
    "esc" add 128,1, <:P1;2;1ø63/1B47452C540D:>,
    "esc" add 128,1, <:Ø:>, <* s-f12  = <esc>GE,T<sp> *>
    "esc" add 128,1, <:P1;2;0ø7B/1B564F2C4920:>,
    "esc" add 128,1, <:Ø:>, <* Ins   = <esc>VO,I<sp> *>
    "esc" add 128,1, <:P1;2;0ø79/1B564F2C5520:>,
    "esc" add 128,1, <:Ø:>, <* Del   = <esc>VO,U<sp> *>
    "esc" add 128,1, <:P1;2;0ø7F/1B564F2C4620:>,
    "esc" add 128,1, <:Ø:>, <* Home  = <esc>VO,F<sp> *>
    "esc" add 128,1, <:P1;2;0ø7A/1B564F2C5220:>,
    "esc" add 128,1, <:Ø:>, <* End   = <esc>VO,R<sp> *>
    "esc" add 128,1, <:P1;2;0ø6F/1B564F2C4C20:>,
    "esc" add 128,1, <:Ø:>, <* PgUp  = <esc>VO,L<sp> *>
    "esc" add 128,1, <:P1;2;0ø7E/1B564F2C4220:>,
    "esc" add 128,1, <:Ø:>, <* PgDn  = <esc>VO,B<sp> *>
    "esc" add 128,1, <:P1;2;0ø0E/082008:>,
    "esc" add 128,1, <:Ø:>, <* Back  = <bs><sp><bs> *>
    <::>);
  end;
\f

message procedure skriv_terminal_tab side 1 - 820301/hko;

  procedure skriv_terminal_tab(z);
    zone                       z;
    begin
      integer array field ref;
      integer t1,i,j,id,k;

      write(z,"ff",1,<:
      ******* terminalbeskrivelser ********

                             m m n o
                             o o ø p
nr tilst    -    vnt    -    n b d t type    ident    id i kø:>);
      for i:=1 step 1 until max_antal_operatører do
      begin
        ref:=i*terminal_beskr_længde;
        t1:=terminal_tab.ref(1);
        id:=terminal_tab.ref(2);
        k:=terminal_tab.ref(3);
        write(z,"nl",1,"sp",4,<<dd>,i,<< dddd>,t1 shift(-21),
          t1 shift(-16) extract 5,t1 shift(-12) extract 4,
          t1 shift(-6) extract 6,"sp",3);
        for j:=5 step -1 until 2 do
          write(z,if læs_bit_i(t1,j) then "X" else "sp",1,"sp",1);
        write(z,case t1 extract 2 +1 of (<:  - :>,<:OPK :>,<:MEDD:>,<:GNM :>),
          "sp",4);
        skriv_id(z,id,9);
        skriv_id(z,k,9);
      end;
      write(z,"nl",2,<:samtaleflag::>,"nl",1);
      outintbits_ia(z,samtaleflag,1,op_maske_lgd//2);
      write(z,"nl",1);
    end skriv_terminal_tab;
\f

message procedure h_operatør side 1 - 810520/hko;

  <* hovedmodulkorutine for operatørterminaler *>
  procedure h_operatør;
  begin
    integer array field op_ref;
    integer k,nr,ant,ref,dest_sem;
    procedure skriv_hoperatør(zud,omfang);
      value                     omfang;
      zone                  zud;
      integer                   omfang;
      begin

        write(zud,"nl",1,<:+++ hovedmodul operatør  :>);
        if omfang>0 then
        disable begin integer x;
          trap(slut);
          write(zud,"nl",1,
            <:  op_ref:    :>,op_ref,"nl",1,
            <:  nr:        :>,nr,"nl",1,
            <:  ant:       :>,ant,"nl",1,
            <:  ref:       :>,ref,"nl",1,
            <:  k:         :>,k,"nl",1,
            <:  dest_sem:  :>,dest_sem,"nl",1,
            <::>);
          skriv_coru(zud,coru_no(200));
slut:
        end;
     end skriv_hoperatør;

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

<*+2*>
  if testbit8 and overvåget or testbit28 then
    skriv_hoperatør(out,0);
<*-2*>
\f

message procedure h_operatør side 2 - 820304/hko;

  repeat
    wait_ch(cs_op,op_ref,true,-1);
<*+4*>
    if (d.op_ref.optype and (op_optype or gen_optype)) extract 12 =0
    then fejlreaktion(12<*operationstype*>,op_ref,<:operatør:>,1);
<*-4*>

    k:=d.op_ref.opkode extract 12;
    dest_sem:=
      if k=0 and d.opref.kilde=299 then cs_talevejsswitch else
      if k=0 then cs_operatør(d.op_ref.kilde mod 100) else
      if k=1 or k=2 or k=43 then cs_operatør(d.op_ref.data(1)) else
      if k=4 then cs_operatør(d.op_ref.data(2)) else
      if k=40 then 0
      else -1;
<*+4*>
    if dest_sem=-1 then
    begin
      fejl_reaktion(2<*operationskode*>,k,<:hovedmodul operatør:>,1);
      signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
    end
    else
<*-4*>
    if k=40 then
    begin
      dest_sem:= d.op_ref.retur;
      d.op_ref.retur:= cs_op_retur;
      for nr:= 1 step 1 until max_antal_operatører do
      begin
        inspect_ch(cs_operatør(nr),genoptype,ant);
        if ant < 0 and (læsbit_ia(opkaldsflag,nr) or læsbit_ia(kanalflag,nr)
                        or læsbit_ia(samtaleflag,nr)) 
                   and læsbit_ia(operatørmaske,nr) then
        begin
          ref:= op_ref;
          signal_ch(cs_operatør(nr),opref,d.op_ref.optype);
<*V*>     wait_ch(cs_op_retur,op_ref,true,-1);
<*+4*>    if op_ref <> ref then
            fejlreaktion(11<*fr.post*>,op_ref,
              <:opdater opkaldskø,retur:>,0);
<*-4*>
        end;
      end;
      d.op_ref.retur:= dest_sem;
      signal_ch(dest_sem,op_ref,d.op_ref.optype);
    end
    else
    begin
\f

message procedure h_operatør side 3 - 810601/hko;

      if k=8<*ekskluder*> then <*afbryd kommando v. timeout*>
      begin
        iaf:=d.op_ref.data(1)*terminal_beskr_længde;
        terminal_tab.iaf.terminal_tilstand:= 7 shift 21
          +terminal_tab.iaf.terminal_tilstand extract 21;
      end;
      signal_ch(dest_sem,op_ref,d.op_ref.optype);
    end;
  until false;

hop_trap:
  disable skriv_hoperatør(zbillede,1);
  end h_operatør;
\f

message procedure operatør side 1 - 820304/hko;

  procedure operatør(nr);
    value          nr;
    integer        nr;
  begin
    integer array field op_ref,ref,vt_op,iaf,tab;
    integer i,kode,aktion,status,tilstand,bv,bs,bs_tilst,
            kanal,opgave,pos,indeks,sep,sluttegn,rkom,
            vogn,ll,garage,skærmmåde,res,s_kanal,v_kanal;
    real kommstart,kommslut;
\f

message procedure operatør side 1a - 820301/hko;

    procedure skriv_operatør(zud,omfang);
      value                      omfang;
      zone                   zud;
      integer                    omfang;
      begin integer i;

        i:= write(zud,"nl",1,<:+++ operatør nr::>,nr);
        write(zud,"sp",26-i);
        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,
            <:  iaf:       :>,iaf,"nl",1,
            <:  status:    :>,status,"nl",1,
            <:  tilstand:  :>,tilstand,"nl",1,
            <:  bv:        :>,bv,"nl",1,
            <:  bs:        :>,bs,"nl",1,
            <:  bs-tilst:  :>,bs_tilst,"nl",1,
            <:  kanal:     :>,kanal,"nl",1,
            <:  opgave:    :>,opgave,"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,
            <:  garage:    :>,garage,"nl",1,
            <:  skærmmåde: :>,skærmmåde,"nl",1,
            <:  res:       :>,res,"nl",1,
            <:  tab:       :>,tab,"nl",1,
            <::>);
          skriv_coru(zud,coru_no(200+nr));
slut:
        end;
      end skriv_operatør;

      real procedure now;
      begin
        real f,r,r1; long l;

        systime(1,0,r); l:=r*100; f:=(l mod 100)/100;
        systime(4,r,r1);
        now:= r1+f;
      end;
\f

message procedure skærmstatus side 1 - 810518/hko;

  integer
  procedure skærmstatus(tilstand,b_v,b_s,b_s_tilst);
    integer             tilstand,b_v,b_s,b_s_tilst;
    begin
      integer i,j;

      i:= terminal_tab.ref(1);
      b_s:= terminal_tab.ref(2);
      b_s_tilst:= i extract 12;
      j:= b_s_tilst extract 3;
      b_v:= i shift (-12) extract 4;
      tilstand:= i shift (-21);

      skærmstatus:= if b_v = 0 and b_s = 0 then 0 else
                    if b_v = 0 and j = 1<*opkald*> then 1 else
                    if b_v = 0 and j = 2<*specialopkald*>  then 2 else
                    if (bv<>0) and (bs<>0) and (j=3) then 4 else 3;
    end skærmstatus;
\f

message procedure skriv_skærm side 1 - 810522/hko;

  procedure skriv_skærm(nr);
    value               nr;
    integer             nr;
    begin
      integer i;

      disable definer_taster(nr);

      skriv_skærm_maske(nr);
      skriv_skærm_opkaldskø(nr);
      skriv_skærm_b_v_s(nr);
      for i:= 1 step 1 until max_antal_kanaler do
        skriv_skærm_kanal(nr,i);
      cursor(z_op(nr),1,1);
<*V*> setposition(z_op(nr),0,0);
    end skriv_skærm;
\f

message procedure skriv_skærm_id side 1 - 830310/hko;

  procedure skriv_skærm_id(nr,id,nød);
    value                  nr,id,nød;
    integer                nr,id;
    boolean                      nød;
    begin
      integer linie,løb,bogst,i,p;

      i:= id shift (-22);

      case i+1 of
      begin
        begin <* busnr *>
          p:= write(z_op(nr),if nød then "*" else "sp",1,<<bddd>,
                (id extract 14) mod 10000);
          if id shift (-14) extract 8 > 0 then
            p:= p+write(z_op(nr),".",1,
                string bpl_navn(id shift (-14) extract 8));
          write(z_op(nr),"sp",11-p);
        end;

        begin <*linie/løb*>
          linie:= id shift (-12) extract 10;
          bogst:= id shift (-7) extract 5;
          if bogst > 0 then bogst:= bogst +'A'-1;
          løb:= id extract 7;
          write(z_op(nr),if nød then "*" else "sp",1,
            "sp",if bogst=0 then 1 else 0,<<ddd>,linie,<<d>,
            false add bogst,1,"/",1,løb,
            "sp",if løb > 9 then 3 else 4);
        end;

        begin <*gruppe*>
          write(z_op(nr),<:GRP  :>);
          if id shift (-21) extract 1 = 1 then
          begin <*specialgruppe*>
            løb:= id extract 7;
            write(z_op(nr),"sp",if løb > 9 then 1 else 2,<:G:>,
              <<d>,løb,"sp",2);
          end
          else
          begin
            linie:= id shift (-5) extract 10;
            bogst:= id extract 5;
            if bogst > 0 then bogst:= bogst +'A'-1;
            write(z_op(nr),"sp",if bogst > 0 then 1 else 0,<<ddd>,linie,
              false add bogst,1,"sp",2);
          end;
        end;

        <* kanal eller område *>
        begin
          linie:= (id shift (-20) extract 2) + 1;
          case linie of
          begin
            write(z_op(nr),"sp",11-write(z_op(nr),
              string kanal_navn(id extract 20)));
            write(z_op(nr),<:K*:>,"sp",9);
            write(z_op(nr),"sp",11-write(z_op(nr),
              <:OMR :>,string område_navn(id extract 20)));
            write(z_op(nr),<:ALLE:>,"sp",7);
          end;
        end;

      end <* case i *>
    end skriv_skærm_id;
\f

message procedure skriv_skærm_kanal side 1 - 820301/hko;

  procedure skriv_skærm_kanal(nr,kanal);
    value                     nr,kanal;
    integer                   nr,kanal;
    begin
      integer i,j,k,t,omr;
      integer array field tref,kref;
      boolean nød;

      tref:= nr*terminal_beskr_længde;
      kref:= (kanal-1)*kanal_beskr_længde;
      t:= kanaltab.kref.kanal_tilstand;
      j:= terminal_tab.tref(1) shift (-12) extract 4; <* b_v kanalnr *>
      k:= terminal_tab.tref(2); <* 3 shift 22 +kanal, hvis samtale *>
<*V*> setposition(z_op(nr),0,0);
      cursor(z_op(nr),kanal+2,28);
      write(z_op(nr),if læsbit_i(kanaltab.kref.kanal_tilstand,10) then "*" else
                     if læsbit_i(kanaltab.kref.kanal_tilstand,11) then "+" else
                     " ",1," ",1);
      write(z_op(nr),true,6,string kanal_navn(kanal));
      omr:= if kanal_id(kanal) shift (-5) extract 3 = 2 then
              pabx_id(kanal_id(kanal) extract 5)
            else
              radio_id(kanal_id(kanal) extract 5);
      for i:= -2 step 1 until 0 do
      begin
        write(z_op(nr),
          if område_id(omr,1) shift (8*i) extract 8 = 0 then " "
          else false add (område_id(omr,1) shift (8*i) extract 8),1);
      end;
      write(z_op(nr),<:: :>);
      i:= tv_operatør(kanaltab.kref.kanal_tilstand shift (-16));<*operatør*>
      if læsbit_ia(kanaltab.kref.kanal_alarm, nr) then
      begin
        sætbit_ia(kanaltab.kref.kanal_alarm, nr, 0);
        write(z_op(nr)<* ,<:ALARM !:>,"bel",1 *>,"esc" add 128,1,<:ÆK:>);
      end
      else
      if kanaltab.kref.kanal_tilstand shift (-12) extract 4 = 15 then
        write(z_op(nr),<:-:><*UDE AF DRIFT*>,"esc" add 128,1,<:ÆK:>)
      else
      if (i > 0 and i <> nr) or (j = kanal <* kanal = kanalnr for ventepos *>
        or (terminal_tab.tref.terminal_tilstand shift (-21) = 1
              <*tilst=samtale*> and k extract 22 = kanal)) then
      begin
         write(z_op(nr),<:OPT :>);
         if bpl_navn(i)=long<::> then write(z_op(nr),<:op:>,<<d>,i)
         else write(z_op(nr),string bpl_navn(i));
         write(z_op(nr),"esc" add 128,1,<:ÆK:>);
      end
      else
      if kanaltab.kref.kanal_tilstand shift (-16) = 0 then
         write(z_op(nr),"esc" add 128,1,<:ÆK:>)
      else
      begin
        i:= kanaltab.kref.kanal_id1;
        nød:= læsbit_i(kanaltab.kref.kanal_tilstand,3);
        skriv_skærm_id(nr,i,nød);
        write(z_op(nr),if t extract 2 = 3 then <:GNM :> else <:OPKALDT:>);
        i:= kanaltab.kref.kanal_id2;
        if i<>0 then skriv_skærm_id(nr,i,false);
        write(z_op(nr),"esc" add 128,1,<:ÆK:>);
      end;
<*V*> setposition(z_op(nr),0,0);
    end skriv_skærm_kanal;
\f

message procedure skriv_skærm_b_v_s side 1 - 810601/hko;

  procedure skriv_skærm_b_v_s(nr);
    value                     nr;
    integer                   nr;
    begin
      integer i,j,k,kv,ks,t;
      integer array field tref,kref;

      tref:= nr*terminal_beskr_længde;
      i:= terminal_tab.tref.terminal_tilstand;
      kv:= i shift (-12) extract 4;
      ks:= terminaltab.tref(2) extract 20;
<*V*> setposition(z_op(nr),0,0);
      cursor(z_op(nr),18,28);
      write(z_op(nr),"esc" add 128,1,<:ÆK:>);
      cursor(z_op(nr),20,28);
      write(z_op(nr),"esc" add 128,1,<:ÆK:>);
      cursor(z_op(nr),21,28);
      write(z_op(nr),"esc" add 128,1,<:ÆK:>);
      cursor(z_op(nr),20,28);
      if op_talevej(nr)<>0 then
      begin
        cursor(z_op(nr),18,28);
        write(z_op(nr),<:talevej: :>,<<d>,op_talevej(nr));
      end;
      if kv <> 0 then
      begin
        kref:= (kv-1)*kanal_beskr_længde;
        j:= if kv<>ks then kanaltab.kref.kanal_id1
            else kanaltab.kref.kanal_id2;
        k:= if kv<>ks then kanaltab.kref.kanal_alt_id1
            else kanaltab.kref.kanal_alt_id2;
        write(z_op(nr),true,6,string kanal_navn(kv));
        skriv_skærm_id(nr,j,kanaltab.kref.kanaltilstand shift(-3) extract 1=1);
        skriv_skærm_id(nr,k,false);
        write(z_op(nr),if i extract 2 = 3 then <:GNM:> else <:VNT:>);
      end;

      cursor(z_op(nr),21,28);
      j:= terminal_tab.tref(2);
      if i shift (-21) <> 0 <*ikke ledig*> then
      begin
\f

message procedure skriv_skærm_b_v_s side 2 - 841210/cl;

        if i shift (-21) = 1 <*samtale*> then
        begin
          if j shift (-20) = 12 then
          begin
            write(z_op(nr),true,6,string kanal_navn(ks));
          end
          else
          begin
            write(z_op(nr),true,6,<:K*:>);
            k:= 0;
            while ks shift (-k) extract 1 = 0 and k<max_antal_kanaler do
              k:= k+1;
            ks:= k;
          end;
          kref:= (ks-1)*kanal_beskr_længde;
          t:= kanaltab.kref.kanaltilstand;
          skriv_skærm_id(nr,kanaltab.kref.kanal_id1,
                         t shift (-3) extract 1 = 1);
          skriv_skærm_id(nr,kanaltab.kref.kanal_alt_id1,false);
          write(z_op(nr),if i shift (-11) extract 1 = 1 then <:-P-:> else
            if t shift (-5) extract 1 = 1 then <:MON :> else
            if t shift (-4) extract 1 = 1 then <:BSV :> else
            if t shift (-6) extract 1 = 1 then <:PAS :> else
            if t shift (-7) extract 1 = 1 then <:LYT :> else <:TAL :>);
          if t shift (-9) extract 1 = 1 then
            write(z_op(nr),<:ALLE :>);
          if t shift (-8) extract 1 = 1 then
            write(z_op(nr),<:KATASTROFE :>);
          k:= kanaltab.kref.kanal_spec;
          if t extract 2 <> 3 and t shift (-4) extract 1 = 1 then
            write(z_op(nr),<<zd.dd>,(k extract 12)/100);
        end
        else <* if i shift (-21) = 2 <+optaget+> then *>
        begin
          write(z_op(nr),<:K-:>,"sp",3);
          if j <> 0 then
            skriv_skærm_id(nr,j,false)
          else
          begin
            j:=terminal_tab.tref(3);
            skriv_skærm_id(nr,j,
              false add (if i shift(-4) extract 1 = 1 then 2 <* mobil opk. *>
                                                     else 0));
          end;
          write(z_op(nr),<:OPT:>);
        end;
      end;
<*V*> setposition(z_op(nr),0,0);
    end skriv_skærm_b_v_s;
\f

message procedure skriv_skærm_maske side 1 - 810511/hko;

  procedure skriv_skærm_maske(nr);
    value                     nr;
    integer                   nr;
    begin
      integer i;
<*V*> setposition(z_op(nr),0,0);
      write(z_op(nr),"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>,
       "sp",26,"*",5,<: operatør :>,<<d>,nr,"sp",1,string bpl_navn(nr),
       "sp",1,"*",5,"nl",1,"-",80);

      for i:= 3 step 1 until 21 do
      begin
        cursor(z_op(nr),i,26);
        outchar(z_op(nr),'!');
      end;
      cursor(z_op(nr),22,1);
      write(z_op(nr),"-",80);
      cursor(z_op(nr),1,1);
<*V*> setposition(z_op(nr),0,0);
    end skriv_skærm_maske;
\f

message procedure skal_udskrives side 1 - 940522/cl;

boolean procedure skal_udskrives(fordelt_til,aktuel_skærm);
  value                          fordelt_til,aktuel_skærm;
  integer                        fordelt_til,aktuel_skærm;
begin
  boolean skal_ud;
  integer n;
  integer array field iaf;

  skal_ud:= true;
  if fordelt_til > 0 and fordelt_til<>aktuel_skærm then
  begin
    for n:= 0 step 1 until 3 do
    begin
      if bpl_tilst(operatør_stop(fordelt_til,n),1) > 0 then
      begin
        iaf:= operatør_stop(fordelt_til,n)*op_maske_lgd;
        skal_ud:= læsbit_ia(bpl_def.iaf,aktuel_skærm);
        goto returner;
      end;
    end;
  end;
returner:
  skal_udskrives:= skal_ud;
end;

message procedure skriv_skærm_opkaldskø side 1 - 820301/hko;
    
  procedure skriv_skærm_opkaldskø(nr);
    value                         nr;
    integer                       nr;
    begin
      integer i,ant,vogn,type,operatør,ttmm,linie,bogst,løb,kmdo;
      integer array field ref,iaf,tab;
      boolean skal_ud;

<*V*> wait(bs_opkaldskø_adgang);
      setposition(z_op(nr),0,0);
      ant:= 0; kmdo:= 0;
      tab:= (nr-1)*opk_alarm_tab_lgd;
      ref:= første_nødopkald;
      if ref=0 then ref:=første_opkald;
      while ref <> 0 do
      begin
        i:= opkaldskø.ref(4);
        operatør:= i extract 8;
        type:=i shift (-8) extract 4;

<*      skal_ud:= operatør = nr or -,læsbit_ia(operatørmaske,operatør);
*>
        if operatør > 64 then
        begin
          <* fordelt til gruppe af betjeningspladser *>
          i:= 0; skal_ud:= true; iaf:= operatør*op_maske_lgd;
          while skal_ud and i<max_antal_operatører do
          begin
            i:=i+1;
            if læsbit_ia(bpl_def.iaf,i) then
              skal_ud:= skal_ud and skal_udskrives(i,nr);
          end;
        end
        else
          skal_ud:= skal_udskrives(operatør,nr);
        if skal_ud then
        begin
          ant:= ant +1;
          if ant < 6 then
          begin
<*V*>       cursor(z_op(nr),ant*2+1,3);
            ttmm:= i shift (-12);
            vogn:= opkaldskø.ref(3);
            if vogn = 0 then vogn:= opkaldskø.ref(2) extract 22;
            skriv_skærm_id(nr,vogn,type=2);
            write(z_op(nr),true,4,
              string område_navn(opkaldskø.ref(5) extract 4),
              <<zd.dd>,ttmm/100.0);
            if -, læsbit_ia(opkaldskø.ref.opkald_meldt,nr) then
            begin
              if opkaldskø.ref(5) extract 4 <= 2 or
                 opk_alarm.tab.alarm_lgd = 0 then
              begin
                if type=2 then
                  write(z_op(nr),"bel",1,"del",8,"bel",1,"del",8,"bel",1)
                else
                  write(z_op(nr),"bel",1);
              end
              else if type>kmdo then kmdo:= type;
              sætbit_ia(opkaldskø.ref.opkald_meldt,nr,1);
            end;
          end;<* ant < 6 *>
        end;<* operatør ok *>

        ref:= opkaldskø.ref(1) extract 12;
        if ref = 0 and type = 2<*nød*> then ref:= første_opkald;
      end;
\f

message procedure skriv_skærm_opkaldskø side 2 - 820301/hko;

      signal_bin(bs_opkaldskø_adgang);
      if kmdo > opk_alarm.tab.alarm_tilst and 
         kmdo > opk_alarm.tab.alarm_kmdo  then
      begin
        opk_alarm.tab.alarm_kmdo:= kmdo;
        signal_bin(bs_opk_alarm);
      end;
      if ant > 5 then
      begin
        cursor(z_op(nr),13,9);
        write(z_op(nr),<<+ddd>,ant-5);
      end
      else
      begin
        for i:= ant +1 step 1 until 6 do
        begin
          cursor(z_op(nr),i*2+1,1);
          write(z_op(nr),"sp",25);
        end;
      end;
      ant_i_opkø(nr):= ant;
      cursor(z_op(nr),1,1);
<*V*> setposition(z_op(nr),0,0);
    end skriv_skærm_opkaldskø;
\f

message procedure operatør side 2 - 810522/hko;

    trap(op_trap);
    stack_claim((if cm_test then 200 else 146)+24+48+80+175);

    ref:= nr*terminal_beskr_længde;
    tab:= (nr-1)*opk_alarm_tab_lgd;
    skærmmåde:= 0; <*normal*>

    if operatør_auto_include(nr) then
    begin
      waitch(cs_att_pulje,opref,true,-1);
      i:= operatør_auto_include(nr) extract 2;
      if i<>3 then i:= 0;
      start_operation(opref,101,cs_att_pulje,i shift 12 +1);
      d.opref.data(1):= nr;
      signalch(cs_rad,opref,gen_optype or io_optype);
    end;

<*+2*>
    if testbit8 and overvåget or testbit28 then
      skriv_operatør(out,0);
<*-2*>
\f

message procedure operatør side 3 - 810602/hko;

    repeat

<*V*> wait_ch(cs_operatør(nr),
              op_ref,
              true,
              -1<*timeout*>);
<*+2*>
      if testbit9 and overvåget then
      disable begin
        write(out,"nl",1,<:operation fra cs:>,<<d>,cs_operatør(nr),
                         <: til operatør :>,nr);
        skriv_op(out,op_ref);
      end;
<*-2*>
      monitor(8)reserve process:(z_op(nr),0,ia);
      kode:= d.op_ref.op_kode extract 12;
      i:= terminal_tab.ref.terminal_tilstand;
      status:= i shift(-21);
      opgave:=
        if kode=0 then 1 <* indlæs kommando *> else
        if kode=1 then 2 <* inkluder        *> else
        if kode=2 then 3 <* ekskluder       *> else
        if kode=40 then 4 <* opdater skærm  *> else
        if kode=43 then 5 <* opkald etableret *> else
        if kode=4  then 6 <* radiokanal ekskluderet *> else
        0; <* afvises *>

      aktion:= case status +1 of(
      <* status         *> <* opgave:         0   1   2   3   4   5   6 *>
      <* 0 klar         *>(case opgave+1 of(  0,  1, -4,  3,  4, -4,  6)),
      <* 1 samtale      *>(case opgave+1 of(  0,  1, -4, -5,  4, -4,  6)),
      <* 2 optaget      *>(case opgave+1 of(  0,  1, -4, -5,  4,  5,  6)),
      <* 3 stoppet      *>(case opgave+1 of(  0,  2,  2,  3, -4, -4, -4)),
      <* 4 klar (fejl)  *>(case opgave+1 of(  0, -4,  2,  3, -4, -4,  6)),
      <* 5 samt.(fejl)  *>(case opgave+1 of(  0, -4,  2,  3, -4, -4,  6)),
      <* 6 opt. (fejl)  *>(case opgave+1 of(  0, -4,  2,  3, -4,  5, -4)),
      <* 7 ej knyttet   *>(case opgave+1 of(  0, -4,  2, -4, -4, -4, -4)),
                          -1);
\f

message procedure operatør side 4 - 810424/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: ulovligt operatørterminal_nr *>

          fejl_reaktion(3<*programfejl*>,nr,<: ikke eksisterende operatør:>,1);
          afslut_operation(op_ref,-1);
        end;

        begin
          <*-1: ulovlig operatørtilstand *>

          fejl_reaktion(3<*programfejl*>,status,<: ulovlig operatør-status:>,1);
          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 operatør side 5 - 851001/cl;

          <* 1: indlæs kommando *>


<*V*>     læs_kommando(z_op(nr),200+nr,op_ref,pos,indeks,sep,sluttegn);
          if opk_alarm.tab.alarm_tilst > 0 then
          begin
            opk_alarm.tab.alarm_kmdo:= 3;
            signal_bin(bs_opk_alarm);
            pass;
          end;
          if d.op_ref.resultat > 3 then
          begin
<*V*>       setposition(z_op(nr),0,0);
            cursor(z_op(nr),24,1);
            skriv_kvittering(z_op(nr),op_ref,pos,
                             d.op_ref.resultat);
          end
          else if d.op_ref.resultat = -1 then
          begin
            skærmmåde:= 0;
            skrivskærm(nr);
          end
          else if d.op_ref.resultat>0 then
          begin <*godkendt*>
            kode:=d.op_ref.opkode;
            i:= kode extract 12;
            j:= if kode = 11 or kode = 12 then 1 <*VO,I/VO,U*> else
                if kode = 19              then 1 <*VO,S     *> else
                if kode = 20 or kode = 24 then 1 <*VO,F/VO,R*> else
                if kode =  9 or kode = 10 then 2 <*VO,L/VO,B*> else
                if kode =  6              then 4 <*STop*>      else
                if 45<=kode and kode<=63  then 3 <*radiokom.*> else
                if kode = 30              then 5 <*SP,D*>      else
                if kode = 31              then 6 <*SP*>        else
                if kode = 32 or kode = 33 then 7 <*SP,V/SP,O*> else
                if kode = 34 or kode = 35 then 6 <*SP,R/SP,A*> else
                if kode = 83              then 8 <*SL*>        else
                if kode = 68              then 9 <*ST,D*>      else
                if kode = 69              then 10 <*ST,V*>     else
                if kode = 36              then 11 <*AL*>       else
                   0;
            if j > 0 then
            begin
              case j of
              begin
                begin
\f

message procedure operatør side 6 - 851001/cl;

                  <* 1 indsæt/udtag/flyt bus i vogntabel *>

                  vogn:=ia(1);
                  ll:=ia(2);
                  kanal:= if kode=11 or kode=19 then ia(3) else
                          if kode=12 then ia(2) else 0;
<*V*>             wait_ch(cs_vt_adgang,
                          vt_op,
                          gen_optype,
                          -1<*timeout sek*>);
                  start_operation(vtop,200+nr,cs_operatør(nr),
                                  kode);
                  d.vt_op.data(1):=vogn;
                  if kode=11 or kode=19 or kode=20 or kode=24 then
                    d.vt_op.data(2):=ll;
                  if kode=19 then d.vt_op.data(3):= kanal else
                  if kode=11 or kode=12 then d.vt_op.data(4):= kanal;
                  indeks:= vt_op;
                  signal_ch(cs_vt,
                            vt_op,
                            gen_optype or op_optype);

<*V*>             wait_ch(cs_operatør(nr),
                          vt_op,
                          op_optype,
                          -1<*timeout sek*>);
<*+2*>            if testbit10 and overvåget then
                  disable begin
                    write(out,"nl",1,<:operatør :>,<<d>,nr,
                          <:: operation retur fra vt:>);
                    skriv_op(out,vt_op);
                  end;
<*-2*>
<*+4*>            if vt_op<>indeks then
                    fejl_reaktion(11<*fremmede op*>,op_ref,
                                  <:operatør-kommando:>,0);
<*-4*>
<*V*>             setposition(z_op(nr),0,0);
                  cursor(z_op(nr),24,1);
<*V*>             skriv_kvittering(z_op(nr),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:= gen_optype or vt_optype;
                  disable afslut_operation(vt_op,cs_vt_adgang);
                end;
                begin
\f

message procedure operatør side 7 - 810921/hko,cl;

                <* 2 vogntabel,linienr/-,busnr *>

                d.op_ref.retur:= cs_operatør(nr);
                tofrom(d.op_ref.data,ia,10);
                indeks:= op_ref;
                signal_ch(cs_vt,op_ref,gen_optype or op_optype);
                wait_ch(cs_operatør(nr),
                        op_ref,
                        op_optype,
                        -1<*timeout*>);
<*+2*>          if testbit10 and overvåget then
                disable begin
                  write(out,"nl",1,<:operatør operation retur fra vt:>);
                  skriv_op(out,op_ref);
                end;
<*-2*>
<*+4*>
                if indeks <> op_ref then
                  fejlreaktion(11<*fremmed post*>,op_ref,<:operatør komm:>,0);
<*-4*>
                i:= d.op_ref.resultat;
                if i = 0 or i > 3 then
                begin
<*V*>             setposition(z_op(nr),0,0);
                  cursor(z_op(nr),24,1);
                  skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat);
                end
                else
                begin
                  integer antal,fil_ref;

                  skærm_måde:= 1;
                  antal:= d.op_ref.data(6);
                  fil_ref:= d.op_ref.data(7);
<*V*>             setposition(z_op(nr),0,0);
                  write(z_op(nr),"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>,
                    "sp",14,"*",10,"sp",6,
                        <:vogntabeludskrift:>,"sp",6,"*",10,"nl",2);
<*V*>             setposition(z_op(nr),0,0);
\f

message procedure operatør side 8 - 841213/cl;

                  pos:= 1;
                  while pos <= antal do
                  begin
                    integer bogst,løb;

                    disable i:= læs_fil(fil_ref,pos,j);
                    if i <> 0 then
                      fejlreaktion(5<*læs_fil*>,i,<:operatør: vo,l/vo,b:>,0)
                    else
                    begin
                      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(z_op(nr),"sp",(bogst=0) extract 1,<<ddd>,ll,
                            false add bogst,1,"/",1,<<d__>,løb);
                          write(z_op(nr),<<dddd>,vogn,"sp",1);
                        end;
                      end;
                      if pos mod 5 = 0 then
                      begin
                        outchar(z_op(nr),'nl');
<*V*>                   setposition(z_op(nr),0,0);
                      end
                      else write(z_op(nr),"sp",3);
                    end;
                    pos:=pos+1;
                  end;
                  write(z_op(nr),"*",1,"nl",1);
\f

message procedure operatør side 8a- 810507/hko;

                  d.opref.opkode:=104; <*slet-fil*>
                  d.op_ref.data(4):=filref;
                  indeks:=op_ref;
                  signal_ch(cs_slet_fil,op_ref,gen_optype or op_optype);
<*V*>             wait_ch(cs_operatør(nr),op_ref,op_optype,-1);

<*+2*>            if testbit10 and overvåget then
                  disable begin
                    write(out,"nl",1,<:operatør, slet-fil retur:>);
                    skriv_op(out,op_ref);
                  end;
<*-2*>

<*+4*>            if op_ref<>indeks then
                    fejlreaktion(11<*fr.post*>,op_ref,<:operatør,slet-fil:>,0);
<*-4*>
                  if d.op_ref.data(9)<>0 then
                    fejl_reaktion(3<*prg.fejl*>,d.op_ref.data(9),
                        <:operatør, slet_fil:>,1);
                end;
              end;

              begin
\f

message procedure operatør side 9 - 830310/hko;

                  <* 3 radio_kommandoer *>

                  kode:= d.op_ref.opkode;
                  rkom:= kode-44;
                  disable if testbit14 then
                  begin
                    systime(1,0,kommstart);
                    write(out,<<zd dd dd.dd >,now,<:op:>,<<d__>,nr,<:":>,
                      string bpl_navn(nr),<:" kmdo: :>,case rkom of (
                      <:OP:>,<:ME:>,<:OP,G:>,<:ME,G:>,<:OP,A:>,<:ME,A:>,
                      <:KA,C:>,<:KA,P:>,<:OP,L:>,<:MO:>,<:VE:>,<:NE:>,
                      <:OP,V:>,<:OP,T:>,<:R:>,<:GE:>,<:GE,G:>,<:GE,V:>,
                      <:GE,T:>),<: start:>);
                    ud;
                  end;
                  d.op_ref.data(4):= nr; <*operatør*>
                  opgave:=
                    if kode = 45 <*OP  *> then 1 else
                    if kode = 46 <*ME  *> then 2 else
                    if kode = 47 <*OP,G*> then 3 else
                    if kode = 48 <*ME,G*> then 4 else
                    if kode = 49 <*OP,A*> then 5 else
                    if kode = 50 <*ME,A*> then 6 else
                    if kode = 51 <*KA,C*> then 7 else
                    if kode = 52 <*KA,P*> then 8 else
                    if kode = 53 <*OP,L*> then 9 else
                    if kode = 54 <*MO  *> then (if ia(1)=0 then 11 else 10) else
                    if kode = 55 <*VE  *> then 14 else
                    if kode = 56 <*NE  *> then 12 else
                    if kode = 57 <*OP,V*> then  1 else
                    if kode = 58 <*OP,T*> then  1 else
                    if kode = 59 <*R   *> then 13 else
                    if kode = 60 <*GE  *> then 15 else
                    if kode = 61 <*GE,G*> then 16 else
                    if kode = 62 <*GE,V*> then 15 else
                    if kode = 63 <*GE,T*> then 15 else
                    -1;
<*+4*>              if opgave < 0 then
                      fejlreaktion(2<*operationskode*>,kode,
                        <:operatør, radio-kommando :>,0);
<*-4*>
                    status:= skærm_status(tilstand,b_v,b_s,b_s_tilst);
                    i:= d.op_ref.data(2):= ia(1); <* ident.*>
                    if 5<=opgave and opgave<=8 then
                      d.opref.data(2):= -1;
                    if opgave=13 then d.opref.data(2):=
                      (if læsbit_i(terminaltab.ref.terminaltilstand,11)
                       then 0 else 1);
                    if opgave = 14 then d.opref.data(2):= 1;
                    if opgave=7 or opgave=8 then 
                      d.opref.data(3):= -1
                    else
                    if opgave=5 or opgave=6 then
                    begin
                      if ia(1) shift (-20) = 15 then
                      begin
                        d.opref.data(3):= 15 shift 20;
                        for j:= 1 step 1 until max_antal_kanaler do
                        begin
                          iaf:= (j-1)*kanalbeskrlængde;
                          if læsbit_i(kanaltab.iaf.kanal_tilstand,11) and
                             læsbit_i(ia(1),kanal_til_omr(j)) then
                            sætbit_i(d.opref.data(3),kanal_til_omr(j),1);
                        end;
                      end
                      else
                        d.opref.data(3):= if ia(1)=0 then 14 shift 20 + 3
                           else ia(1);
                    end
                    else
                    if kode = 57 then d.opref.data(3):= 2 else
                    if kode = 58 then d.opref.data(3):= 1 else
                    if kode = 62 then d.opref.data(3):= 2 else
                    if kode = 63 then d.opref.data(3):= 1 else
                                      d.opref.data(3):= ia(2);

                  res:=
                    if (opgave=1 or opgave=3 or opgave=15 or opgave=16) and
                       status>1 then 16 <*skærm optaget*> else
                    if (opgave=1 or opgave=3) and status=0 then 1 else
                    if (opgave=15 or opgave=16) and status=0 then 21 else
                    if (opgave=1 or opgave=3 or opgave=15 or opgave=16) then 
                       (if (d.opref.data(3)=1 or d.opref.data(3)=2) and
                          d.opref.data(3) = kanal_til_omr(bs extract 6)
                        then 52 else 1) else
                    if opgave<11 and status>0 then 16 else
                    if opgave=11 and status<2 then 21 else
                    if opgave=12 and status=0 then 22 else
                    if opgave=13 and status=0 then 49 else
                    if opgave=14 and status<>3 then 21 else 1;
                  if res=1 and (d.opref.data(3)=1 or d.opref.data(3)=2) then
                  begin <* specialbetingelser for TLF og VHF *>
                    if (1<opgave and opgave<9) or opgave=16 then res:= 51;
                  end;
                  if skærmmåde<>0 then
                    begin skærm_måde:= 0; skriv_skærm(nr); end;
                  kode:= opgave;
                  if opgave = 15 then opgave:= 1 else
                  if opgave = 16 then opgave:= 3;
\f

message procedure operatør side 10 - 810616/hko;

                  <* tilknyt talevej (om nødvendigt) *>
                  if res = 1 and op_talevej(nr)=0 then
                  begin
                    i:= sidste_tv_brugt;
                    repeat
                      i:= (i mod max_antal_taleveje)+1;
                      if tv_operatør(i)=0 then 
                      begin
                        tv_operatør(i):= nr;
                        op_talevej(nr):= i;
                      end;
                    until op_talevej(nr)<>0 or i=sidste_tv_brugt;
                    if op_talevej(nr)=0 then
                      res:=61
                    else
                    begin
                      sidste_tv_brugt:=
                        (sidste_tv_brugt mod max_antal_taleveje)+1;

<*V*>                 waitch(cs_tvswitch_adgang,iaf,op_optype,-1);
                      start_operation(iaf,200+nr,cs_operatør(nr),
                                        'A' shift 12 + 44);
                      d.iaf.data(1):= op_talevej(nr);
                      d.iaf.data(2):= nr+16;
                      ll:= 0;
                      repeat
                        signalch(cs_talevejsswitch,iaf,op_optype);
<*V*>                   waitch(cs_operatør(nr),iaf,op_optype,-1);
                        ll:= ll+1;
                      until ll=3 or d.iaf.resultat=3;
                      res:= if d.iaf.resultat=3 then 1 else 61;
<* ********* *>
                      delay(1);
                      start_operation(iaf,200+nr,cs_operatør(nr),
                                        'R' shift 12 + 44);
                      ll:= 0;
                      repeat
                        signalch(cs_talevejsswitch,iaf,op_optype);
                        waitch(cs_operatør(nr),iaf,op_optype,-1);
                        ll:= ll+1;
                      until ll=3 or d.iaf.resultat=3;
<* ********* *>
                      signalch(cs_tvswitch_adgang,iaf,op_optype);
                      if res<>1 then 
                        op_talevej(nr):=tv_operatør(op_talevej(nr)):= 0;
                    end;
                  end;
                  if op_talevej(nr)=0 then res:= 61;
                  d.op_ref.data(1):= op_talevej(nr);

                  if res <= 1 then
                  begin
til_radio:          <* send operation til radiomodul *>
                    d.op_ref.opkode:= opgave shift 12 + 41;
                    d.op_ref.data(5):= if b_v<>0 then 12 shift 20 + b_v
                                       else 0;
                    d.op_ref.data(6):= b_s;
                    d.op_ref.resultat:=0;
                    d.op_ref.retur:= cs_operatør(nr);
                    indeks:= op_ref;
<*+2*>              if testbit11 and overvåget then
                    disable begin
                      skriv_operatør(out,0);
                      write(out,<: operation til radio:>);
                      skriv_op(out,op_ref); ud;
                    end;
<*-2*>
                    signal_ch(cs_rad,op_ref,gen_optype or op_optype);
<*V*>               wait_ch(cs_operatør(nr),op_ref,op_optype,-1);

<*+2*>              if testbit12 and overvåget then
                    disable begin
                      skriv_operatør(out,0);
                      write(out,<: operation retur fra radio:>);
                      skriv_op(out,op_ref); ud;
                    end;
<*-2*>
<*+4*>              if op_ref <> indeks then
                      fejlreaktion(11<*fr.post*>,op_ref,
                        <:operatør, retur fra radio:>,0);
<*-4*>
\f

message procedure operatør side 11 - 810529/hko;

                    res:= d.op_ref.resultat;
                    if res < 2 or (res > 3 and (res<>49 or opgave<>11)) then
                    begin
<*+4*>                if res < 2 then
                        fejlreaktion(3<*prg.fejl*>,res,
                          <: operatør,radio_op,resultat:>,1);
<*-4*>
                      if res = 1 then res:= 0;
                    end
                    else
                    begin <* res = 2 eller 3 *>
                      s_kanal:= v_kanal:= 0;
                      opgave:= d.opref.opkode shift (-12);
                      bv:= d.op_ref.data(5) extract 4;
                      bs:= d.op_ref.data(6);
                      if opgave < 10 then
                      begin
                        j:= d.op_ref.data(7) <*type*>;
                        i:= terminal_tab.ref(1) shift (-12) shift 12 extract 21;
                        i:= i + (if opgave=2 or opgave>3 then 2 else 1);
                        terminal_tab.ref(1):= i
                          +(if res=2 then 4 <*optaget*> else 0)
                          +(if (opgave=1 or opgave=9) and j = 2 <*nødopkald*>
                            then 8 <*nød*> else 0)
                          +(if opgave=1 and j > 0 and j < 3 <*mobilopkald*>
                            then 16 else 0)
                          + (if opgave mod 2 = 0 then 64 <*pas*> else 0)
                          + (if opgave=9 then 128 else
                             if opgave>=7 then 256 else
                             if opgave>=5 then 512 else 0)
                          + (if res = 2 then 2 shift 21 <*tilstand = optaget *>
                             else if b_s = 0 then 0     <*tilstand = ledig *>
                                        else 1 shift 21 <*tilstand = samtale*>);
                      end
                      else if opgave=10 <*monitering*> or
                              opgave=14 <*ventepos  *> then
                      begin
<*+4*>                  if res = 2 then
                          fejlreaktion(3<*prg.fejl*>,res,
                            <: operatør,moniter,res:>,1);
<*-4*>
                        iaf:= (bs extract 4 -1)*kanal_beskr_længde;
                        i:= if bs<0 then
                          kanaltab.iaf.kanal_tilstand extract 12 else 0;
                        terminal_tab.ref(1):= i +
                          (if bs < 0 then (1 shift 21) else 0);
                        if opgave=10 then
                        begin
                          s_kanal:= bs;
                          v_kanal:= d.opref.data(5);
                        end;
\f

message procedure operatør side 12 - 810603/hko;
                      end
                      else if opgave=11 or opgave=12 then
                      begin
<*+4*>                  if res = 2 then
                          fejlreaktion(3<*prg.fejl*>,res,
                            <: operatør,ge/ne,res:>,1);
<*-4*>
                        if opgave=11 <*GE*> and res<>49 then
                        begin
                          s_kanal:= terminal_tab.ref(2);
                          v_kanal:= 12 shift 20 + 
                            (terminal_tab.ref(1) shift (-12) extract 4);
                        end;
                        terminal_tab.ref(1):= 0; <* s og v felt nedlagt *>
                      end
                      else
                      if opgave=13 then
                      begin
                        if res=2 then
                          fejlreaktion(3<*prg.fejl*>,res,
                            <:operatør,R,res:>,1);
                        sætbit_i(terminaltab.ref.terminaltilstand,11,
                          d.opref.data(2));
                      end
<*+4*>                else fejlreaktion(3,opgave,<:operatør, opgave:>,0)
<*-4*>
                      ;
                      <*indsæt kanal_nr for b_v_felt i terminalbeskr.*>

                      sæt_hex_ciffer(terminal_tab.ref,3,b_v extract 4);
                      terminal_tab.ref(2):= b_s;
                      terminal_tab.ref(3):= d.op_ref.data(11);
                      if (opgave<10 or opgave=14) and res=3 then
                        <*så henviser b_s til radiokanal*>
                      begin
                        if bs shift (-20) = 12 then
                        begin
                          iaf:= (bs extract 4 -1)*kanal_beskr_længde;
                          kanaltab.iaf.kanal_tilstand:=
                            kanaltab.iaf.kanal_tilstand shift(-10) shift 10
                            +terminal_tab.ref(1) extract 10;
                        end
                        else
                        begin
                          for i:= 1 step 1 until max_antal_kanaler do
                          begin
                            if læsbit_i(bs,i) then
                            begin
                              iaf:= (i-1)*kanal_beskr_længde;
                              kanaltab.iaf.kanaltilstand:=
                                kanaltab.iaf.kanaltilstand shift (-10) shift 10
                                + terminal_tab.ref(1) extract 10;
                            end;
                          end;
                        end;
                      end;
                      if kode=15 or kode=16 then
                      begin
                        if opgave<10 then
                        begin
                          opgave:= 11;
                          kanal:= (12 shift 20) +
                                  d.opref.data(6) extract 20;
                          goto til_radio;
                        end
                        else
                        if opgave=11 then
                        begin
                          opgave:= 10;
                          d.opref.data(2):= kanal;
                          goto til_radio;
                        end;
                      end
                      else
                      if (kode=1 or kode=3) then
                      begin
                        if opgave<10 and bv<>0 then
                        begin
                          opgave:= 14;
                          d.opref.data(2):= 2;
                          goto til_radio;
                        end;
                      end;
<*V*>                 skriv_skærm_b_v_s(nr);
<*V*>                 if sætbit_ia(opkaldsflag,nr,0) = 1 then
                        skriv_skærm_opkaldskø(nr);
                      for i:= s_kanal, v_kanal do
                        if i<0 then skriv_skærm_kanal(nr,i extract 4);
                      tofrom(kanalflag,alle_operatører,op_maske_lgd);
                      signalbin(bs_mobilopkald);
                    end; <* res = 2 eller 3 *>
                  end; <* res <= 1 *>
                  <* frigiv talevej (om nødvendigt) *>
                  if læs_hex_ciffer(terminal_tab.ref,3,b_v)=0
                     and terminal_tab.ref(2)=0 <*b_s*>
                     and op_talevej(nr)<>0
                  then
                  begin
<*V*>               waitch(cs_tvswitch_adgang,iaf,op_optype,-1);
                    start_operation(iaf,200+nr,cs_operatør(nr),
                                        'D' shift 12 + 44);
                    d.iaf.data(1):= op_talevej(nr);
                    d.iaf.data(2):= nr+16;
                    ll:= 0;
                    repeat
                      signalch(cs_talevejsswitch,iaf,op_optype);
<*V*>                 waitch(cs_operatør(nr),iaf,op_optype,-1);
                      ll:= ll+1;
                    until ll=3 or d.iaf.resultat=3;
                    ll:= d.iaf.resultat;
                    signalch(cs_tvswitch_adgang,iaf,op_optype);
                    if ll<>3 then 
                      fejlreaktion(21,op_talevej(nr)*100+nr,
                        <:frigiv operatør fejlet:>,1)
                    else
                      op_talevej(nr):= tv_operatør(op_talevej(nr)):= 0;
                    skriv_skærm_b_v_s(nr);
                  end;
                  disable if testbit14 then
                  begin
                    systime(1,0,kommslut);
                    write(out,<<zd dd dd.dd >,now,<:op:>,<<d__>,nr,<:":>,
                      string bpl_navn(nr),<:" kmdo: :>,case rkom of (
                      <:OP:>,<:ME:>,<:OP,G:>,<:ME,G:>,<:OP,A:>,<:ME,A:>,
                      <:KA,C:>,<:KA,P:>,<:OP,L:>,<:MO:>,<:VE:>,<:NE:>,
                      <:OP,V:>,<:OP,T:>,<:R:>,<:GE:>,<:GE,G:>,<:GE,V:>,
                      <:GE,T:>),<: slut; res=:>,<<d>,res,<: btid=:>,
                      <<dd.dd>,kommslut-kommstart);
                    ud;
                  end;
<*V*>             setposition(z_op(nr),0,0);
                  cursor(z_op(nr),24,1);
<*V*>             skriv_kvittering(z_op(nr),op_ref,-1,res);
                end; <* radio-kommando *>
                begin
\f

message procedure operatør side 13 - 810518/hko;

                  <* 4 stop kommando *>

                  status:= skærm_status(tilstand,b_v,b_s,b_s_tilst);
                  if tilstand <> 0 then
                  begin
                    d.op_ref.resultat:= 16; <*skærm optaget*>
                  end
                  else
                  begin
                    d.op_ref.retur:= cs_operatør(nr);
                    d.op_ref.resultat:= 0;
                    d.op_ref.data(1):= nr;
                    indeks:= op_ref;
<*+2*>              if testbit11 and overvåget then
                    disable begin
                      skriv_operatør(out,0);
                      write(out,<: stop_operation til radio:>);
                      skriv_op(out,op_ref); ud;
                    end;
<*-2*>
                    if opk_alarm.tab.alarm_tilst > 0 then
                    begin
                      opk_alarm.tab.alarm_kmdo:= 3;
                      signal_bin(bs_opk_alarm);
                    end;

                    signal_ch(cs_rad,op_ref,gen_optype or op_optype);
<*V*>               wait_ch(cs_operatør(nr),op_ref,op_optype,-1);
<*+2*>              if testbit12 and overvåget then
                    disable begin
                      skriv_operatør(out,0);
                      write(out,<: operation retur fra radio:>);
                      skriv_op(out,op_ref); ud;
                    end;
<*-2*>
<*+4*>              if indeks <> op_ref then
                      fejlreaktion(11<*fr.post*>,op_ref,
                        <: operatør, retur fra radio:>,0);
<*-4*>
\f

message procedure operatør side 14 - 810527/hko;

                    if d.op_ref.resultat = 3 then
                    begin
                      integer k,n;
                      integer array field msk,iaf1;

                      terminal_tab.ref.terminal_tilstand:= 3 shift 21
                        +terminal_tab.ref.terminal_tilstand extract 21;
                      tofrom(opkaldsflag,alle_operatører,op_maske_lgd);
                      if sæt_bit_ia(operatørmaske,nr,0)=1 then
                      for k:= nr, 65 step 1 until top_bpl_gruppe do
                      begin
                        msk:= k*op_maske_lgd;
                        if læsbit_ia(bpl_def.msk,nr) then 
<**>                    begin
                          n:= 0;
                          for i:= 1 step 1 until max_antal_operatører do
                          if læsbit_ia(bpl_def.msk,i) then
                          begin
                            iaf1:= i*terminal_beskr_længde;
                            if terminal_tab.iaf1.terminal_tilstand 
                                                         shift (-21) < 3 then
                              n:= n+1;
                          end;  
                          bpl_tilst(k,1):= n;
                        end;
<**> <*  
                          bpl_tilst(k,1):= bpl_tilst(k,1)-1;
  *>                  end;
                      signal_bin(bs_mobil_opkald);
<*V*>                 setposition(z_op(nr),0,0);
                      ht_symbol(z_op(nr));
                    end;
                  end;
<*V*>             setposition(z_op(nr),0,0);
                  cursor(z_op(nr),24,1);
                  if d.op_ref.resultat<> 3 then
                    skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat);
                end;
                begin
                  boolean l22;
\f

message procedure operatør side 15 - 810521/cl;

                  <* 5 springdefinition *>
                  l22:= false;
                  if sep=',' then
                  disable begin
                    setposition(z_op(nr),0,0);
                    cursor(z_op(nr),22,1);
                    write(z_op(nr),"esc" add 128,1,<:ÆK:>,">",1);
                    l22:= true; pos:= 1;
                    while læstegn(d.op_ref.data,pos,i)<>0 do
                      outchar(z_op(nr),i);
                  end;

                  tofrom(d.op_ref.data,ia,indeks*2);
<*V*>             wait_ch(cs_op_fil(nr),vt_op,true,-1<*timeout*>);
                  start_operation(vt_op,200+nr,cs_operatør(nr),
                                  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,op_optype);
                  pos:=vt_op;<*variabel lånes*>
<*V*>             wait_ch(cs_operatør(nr),vt_op,op_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),
                      <:op 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,
                        <:op kommando(spring-def):>,0);
                    fil(j).iaf(1):=d.op_ref.data(i+2);
                  end;
\f

message procedure operatør side 15a - 820301/cl;

                  while sep = ',' do
                  begin
                    setposition(z_op(nr),0,0);
                    cursor(z_op(nr),23,1);
                    write(z_op(nr),"esc" add 128,1,<:ÆK:>,<:+>:>);
                    setposition(z_op(nr),0,0);
                    wait(bs_fortsæt_adgang);
                    pos:= 1; j:= 0;
                    while læs_store(z_op(nr),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_op(nr),0,0);
                      cursor(z_op(nr),24,1);
                      skriv_kvittering(z_op(nr),opref,-1,53);<*annulleret*>
                      cursor(z_op(nr),1,1);
                      goto sp_ann;
                    end;
\f

message procedure operatør side 16 - 810521/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,
                               <:op 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 operatør side 17 - 810521/cl;

                    if d.op_ref.resultat > 3 then
                    begin
                      setposition(z_op(nr),0,0);
                      if l22 then
                      begin
                        cursor(z_op(nr),22,1); l22:= false;
                        write(z_op(nr),"-",80);
                      end;
                      cursor(z_op(nr),24,1);
                      skriv_kvittering(z_op(nr),op_ref,pos,d.opref.resultat);
                      goto sp_ann;
                    end;
                    if sep=',' then
                    begin
                      setposition(z_op(nr),0,0);
                      cursor(z_op(nr),22,1);
                      write(z_op(nr),"esc" add 128,1,<:ÆK:>,<:+>:>);
                      pos:= 1; l22:= true;
                      while læstegn(fortsæt,pos,i)<>0 do
                        outchar(z_op(nr),i);
                    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,<:op kommando(spring-def):>,0);
                  d.op_ref.data(3):= d.vt_op.data(4); <*filref*>
                  signalch(cs_op_fil(nr),vt_op,op_optype or gen_optype);
                  d.op_ref.retur:=cs_operatør(nr);
                  pos:=op_ref;
                  signal_ch(cs_vt,op_ref,gen_optype or op_optype);
<*V*>             wait_ch(cs_operatør(nr),op_ref,op_optype,-1<*timeout*>);
<*+4*>            if pos<>op_ref then
                    fejlreaktion(11<*fremmed post*>,op_ref,
                      <:op kommando(springdef retur fra vt):>,0);
<*-4*>
\f

message procedure operatør side 18 - 810521/cl;

<*V*>             setposition(z_op(nr),0,0);
                  if l22 then
                  begin
                    cursor(z_op(nr),22,1);
                    write(z_op(nr),"-",80);
                  end;
                  cursor(z_op(nr),24,1);
                  skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat);

                  if false then
                  begin
          sp_ann:   signalch(cs_slet_fil,vt_op,op_optype);
                    waitch(cs_operatør(nr),vt_op,op_optype,-1);
                    signalch(cs_op_fil(nr),vt_op,op_optype or vt_optype);
                    signalbin(bs_fortsæt_adgang);
                  end;
                    
                end;

                begin
\f

message procedure operatør side 19 - 810522/cl;

                  <* 6 spring  (igangsæt)
                       spring,annuler
                       spring,reserve     *>

                  tofrom(d.op_ref.data,ia,6);
                  d.op_ref.retur:=cs_operatør(nr);
                  indeks:=op_ref;
                  signal_ch(cs_vt,op_ref,gen_optype or op_optype);
<*V*>             wait_ch(cs_operatør(nr),
                          op_ref,
                          op_optype,
                          -1<*timeout*>);
<*+2*>            if testbit10 and overvåget then
                  disable begin
                    skriv_operatør(out,0);
                    write(out,"nl",1,<:op operation retur fra vt:>);
                    skriv_op(out,op_ref);
                  end;
<*-2*>
<*+4*>            if indeks<>op_ref then
                    fejlreaktion(11<*fremmed post*>,op_ref,
                                 <:op kommando(spring):>,0);
<*-4*>

<*V*>             setposition(z_op(nr),0,0);
                  cursor(z_op(nr),24,1);
                  skriv_kvittering(z_op(nr),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 operatør side 20 - 810525/cl;

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

                  d.op_ref.retur:=cs_operatør(nr);
                  tofrom(d.op_ref.data,ia,4);
                  indeks:=op_ref;
                  signal_ch(cs_vt,op_ref,gen_optype or op_optype);
<*V*>             wait_ch(cs_operatør(nr),op_ref,op_optype,-1<*timeout*>);
<*+2*>            disable if testbit10 and overvåget then
                  begin
                    write(out,"nl",1,<:operatør operation retur fra vt:>);
                    skriv_op(out,op_ref);
                  end;
<*-2*>

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

<*V*>             setposition(z_op(nr),0,0);
                  if d.op_ref.resultat<>3 then
                  begin
                    cursor(z_op(nr),24,1);
                    skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat);
                  end
                  else
                  begin
                    boolean p_skrevet;
                    integer bogst,løb;

                    skærmmåde:= 1;

                    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_op(nr),"esc" add 128,1,<:ÆH:>,
                        "esc" add 128,1,<:ÆJ:>,"sp",10,"*",5,"sp",5,
                        <: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_op(nr),<:, startet :>,<<zddddd>,
                          round systime(4,d.op_ref.raf(1),r),<:.:>,round r)
                      else write(z_op(nr),<:, ikke startet:>);
                      write(z_op(nr),"sp",5,"*",5,"nl",2);
\f

message procedure operatør side 21 - 810522/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,
                            <:op kommando(spring,vis):>,0);
                        iaf:=0;
                        i:= fil(j).iaf(1);
                        if i < 0 and -, p_skrevet then
                        begin
                          outchar(z_op(nr),'('); p_skrevet:= true;
                        end;
                        if i > 0 and p_skrevet then
                        begin
                          outchar(z_op(nr),')'); p_skrevet:= false;
                        end;
                        if pos mod 2 = 0 then
                          write(z_op(nr),<< dd>,abs i,<:.:>)
                        else
                          write(z_op(nr),true,3,<<d>,abs i);
                        if pos mod 21 = 0 then outchar(z_op(nr),'nl');
                      end;
                      write(z_op(nr),"*",1);
\f

message procedure operatør side 22 - 810522/cl;

                    end
                    else if kode=33 then <* spring,oversigt *>
                    begin
                      write(z_op(nr),"esc" add 128,1,<:ÆH:>,
                        "esc" add 128,1,<:ÆJ:>,"sp",10,"*",5,"sp",5,
                        <:spring oversigt:>,"sp",5,"*",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,
                            <:op 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_op(nr),"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_op(nr),<:startet :>,<<zddddd>,
                            round systime(4,fil(j,2),r),<:.:>,round r);
                        outchar(z_op(nr),'nl');
                      end;
                      write(z_op(nr),"*",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 op_optype);
                    waitch(cs_operatør(nr),op_ref,op_optype or gen_optype,-1);
                  end; <* resultat=3 *>

                end;

                begin
\f

message procedure operatør side 23 - 940522/cl;


                  <* 8 SLUT *>
                  trapmode:= 1 shift 13;
                  trap(-2);
                end;

                begin
                  <* 9 stopniveauer,definer *>
                  integer fno;

                  for i:= 1 step 1 until 3 do
                    operatør_stop(nr,i):= ia(i+1);
                  i:= modif_fil(tf_stoptabel,nr,fno);
                  if i<>0 then fejlreaktion(7,i,<:stoptabel:>,0);
                  iaf:=0;
                  for i:= 0,1,2,3 do
                    fil(fno).iaf(i+1):= operatør_stop(nr,i);
                  setposition(fil(fno),0,0);
                  setposition(z_op(nr),0,0);
                  cursor(z_op(nr),24,1);
                  skriv_kvittering(z_op(nr),0,-1,3);
                end;

                begin
\f

message procedure operatør side 24 - 940522/cl;

                  <* 10 stopniveauer,vis *>
                  integer bpl,j,k;

                  skærm_måde:= 1;
                  setposition(z_op(nr),0,0);
                  write(z_op(nr),"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>,
                    <:stopniveauer: :>);
                  for i:= 0 step 1 until 3 do
                  begin
                    bpl:= operatør_stop(nr,i);
                    write(z_op(nr),if i=0 then <:  :> else <: -> :>,
                      if bpl=0 then <:ALLE:> else string bpl_navn(bpl));
                  end;
                  write(z_op(nr),"nl",2,<:operatørpladser:  :>);
                  j:=0;
                  for bpl:= 1 step 1 until max_antal_operatører do
                  if bpl_navn(bpl)<>long<::> then
                  begin
                    if j mod 8 = 0 and j > 0 then
                      write(z_op(nr),"nl",1,"sp",18);
                    iaf:= bpl*terminal_beskr_længde;
                    write(z_op(nr),if bpl_tilst(bpl,1) > 0 then "*" else " ",1,
                      true,6,string bpl_navn(bpl));
                    j:=j+1;
                  end;
                  write(z_op(nr),"nl",2,<:operatørgrupper:   :>);
                  j:=0;
                  for bpl:= 65 step 1 until top_bpl_gruppe do
                  if bpl_navn(bpl)<>long<::> then
                  begin
                    if j mod 8 = 0 and j > 0 then
                      write(z_op(nr),"nl",1,"sp",19);
                    write(z_op(nr),true,7,string bpl_navn(bpl));
                    j:=j+1;
                  end;
                  write(z_op(nr),"nl",1,"*",1);
                end;

                begin
                  <* 11 alarmlængde *>
                  integer fno;

                  if indeks > 0 then
                  begin
                    opk_alarm.tab.alarm_lgd:= ia(1);
                    i:= modiffil(tf_alarmlgd,nr,fno);
                    if i<>0 then fejlreaktion(7,i,<:alarmlgd:>,0);
                    iaf:= 0;
                    fil(fno).iaf(1):= opk_alarm.tab.alarm_lgd;
                    setposition(fil(fno),0,0);
                  end;

                  setposition(z_op(nr),0,0);
                  cursor(z_op(nr),24,1);
                  skriv_kvittering(z_op(nr),opk_alarm.tab.alarm_lgd,-1,63);
                end;                  

                begin
                  d.op_ref.resultat:= 45; <*ikke implementeret*>
                  setposition(z_op(nr),0,0);
                  cursor(z_op(nr),24,1);
                  skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat);
                end;
\f

message procedure operatør side x - 810522/hko;

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

<*V*>     setposition(z_op(nr),0,0);
<*???*>
         while (læsbit_ia(samtaleflag,nr) or læsbit_ia(opkaldsflag,nr) or
           læsbit_ia(kanalflag,nr) ) and læsbit_ia(operatørmaske,nr) and
           skærmmåde = 0 do
         begin
          if sætbit_ia(samtaleflag,nr,0)=1 then
          begin
            skriv_skærm_bvs(nr);
<*940920    if op_talevej(nr)=0 then status:= 0
            else inspect(bs_talevej_udkoblet(op_talevej(nr)),status);
            if status>0 then
            begin
              for ll:= 1 step 1 until terminalbeskrlængde//2 do
                terminaltab.ref(ll):= 0;
              skriv_skærm_bvs(nr);
              wait(bs_talevej_udkoblet(op_talevej(nr)));
            end;
            for i:= 1 step 1 until max_antal_kanaler do
            begin
              iaf:= (i-1)*kanalbeskrlængde;
              inspect(ss_samtale_nedlagt(i),status);
              if status>0 and 
                tv_operatør(kanaltab.iaf.kanal_tilstand shift (-16))=nr then
              begin
                kanaltab.iaf.kanal_tilstand:=
                  kanaltab.iaf(1) shift (-10) extract 6 shift 10;
                for ll:= 2 step 1 until kanalbeskrlængde//2 do
                  kanaltab.iaf(ll):= 0;
                skriv_skærm_kanal(nr,i);
                repeat
                  wait(ss_samtale_nedlagt(i));
                  inspect(ss_samtale_nedlagt(i),status);
                until status=0;
              end;
            end;
940920*>    cursor(z_op(nr),1,1);
            setposition(z_op(nr),0,0);
          end;
          if (læsbit_ia(opkaldsflag,nr) or læsbit_ia(kanalflag,nr))
             and skærmmåde = 0
             and læsbit_ia(operatørmaske,nr) then
          begin
            if sætbit_ia(opkaldsflag,nr,0) = 1 then
              skriv_skærm_opkaldskø(nr);
            if sætbit_ia(kanalflag,nr,0) = 1 then
            begin
              for i:= 1 step 1 until max_antal_kanaler do
                skriv_skærm_kanal(nr,i);
            end;
            cursor(z_op(nr),1,1);
<*V*>       setposition(z_op(nr),0,0);
          end;
         end;
          d.op_ref.retur:=cs_att_pulje;
          disable afslut_kommando(op_ref);
        end; <* indlæs kommando *>

        begin
\f

message procedure operatør side x+1 - 810617/hko;

          <* 2: inkluder *>
          integer k,n;
          integer array field msk,iaf1;

          i:=monitor(4) process address:(z_op(nr),0,ia);
          if i=0 then
          begin
            fejlreaktion(3<*programfejl*>,nr,
                <:operatør(nr) eksisterer ikke:>,1);
            d.op_ref.resultat:=28;
          end
          else
          begin
            i:=monitor(8) reserve process:(z_op(nr),0,ia);
            d.op_ref.resultat:=if i<>0 then 16 <*skærm optaget*>
                               else if d.op_ref.opkode = 0 then 0
                               else  3;<*udført*>
            if i > 0 then
              fejlreaktion(4<*monitor res*>,nr*100 +i,
                           <:operatørskærm reservation:>,1)
            else
            begin
              i:=terminal_tab.ref.terminal_tilstand;
<*940418/cl inkluderet sættes i stop - start *>
              kode:= d.opref.opkode extract 12;
              if kode <> 0 then
                terminal_tab.ref.terminal_tilstand:=
                  (d.opref.opkode shift (-12) shift 21) + (i extract 21)
              else
<*940418/cl inkluderet sættes i stop - slut *>
                terminal_tab.ref.terminal_tilstand:= i extract 
                  (if i shift(-21) extract 2 = 3 then 21 else 23);
              for i:= 1 step 1 until max_antal_kanaler do
              begin
                iaf:= (i-1)*kanalbeskrlængde;
                sætbit_ia(kanaltab.iaf.kanal_alarm,nr,0);
              end;
              skærm_måde:= 0;
              sætbit_ia(operatørmaske,nr,
                (if terminal_tab.ref.terminal_tilstand shift (-21) = 3
                 then 0 else 1));
              for k:= nr, 65 step 1 until top_bpl_gruppe do
              begin
                msk:= k*op_maske_lgd;
                if læsbit_ia(bpl_def.msk,nr) then 
<**>            begin
                  n:= 0;
                  for i:= 1 step 1 until max_antal_operatører do
                  if læsbit_ia(bpl_def.msk,i) then
                  begin
                    iaf1:= i*terminal_beskr_længde;
                    if terminal_tab.iaf1.terminal_tilstand 
                                                 shift (-21) < 3 then
                      n:= n+1;
                  end;  
                  bpl_tilst(k,1):= n;
                end;
<**> <*  
                  bpl_tilst(k,1):= bpl_tilst(k,1) + 
                    (if læsbit_ia(operatørmaske,nr) then 1 else 0);
  *>          end;
              tofrom(opkaldsflag,alle_operatører,op_maske_lgd);
              sætbit_ia(opkaldsflag,nr,0);
              signal_bin(bs_mobil_opkald);
<*940418/cl inkluderet sættes i stop - start *>
              if terminal_tab.ref.terminal_tilstand shift (-21) = 3 then
<*V*>           ht_symbol(z_op(nr))
              else
<*940418/cl inkluderet sættes i stop - slut *>
<*V*>           skriv_skærm(nr);
              cursor(z_op(nr),24,1);
<*V*>         setposition(z_op(nr),0,0);
            end;
          end;
          if d.op_ref.opkode = 0 then
            signal_ch(cs_operatør(nr),op_ref,d.op_ref.optype)
          else
          signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
        end;

        begin
\f

message procedure operatør side x+2 - 820304/hko;

          <* 3: ekskluder *>
          integer k,n;
          integer array field iaf1,msk;

          write(z_op(nr),"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>);
<*V*>     setposition(z_op(nr),0,0);
          monitor(10) release process:(z_op(nr),0,ia);
          d.op_ref.resultat:=3;
          signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
          terminal_tab.ref.terminal_tilstand:= 7 shift 21 +
            terminal_tab.ref.terminal_tilstand extract 21;
          if sæt_bit_ia(operatørmaske,nr,0)=1 then
          for k:= nr, 65 step 1 until top_bpl_gruppe do
          begin
            msk:= k*op_maske_lgd;
            if læsbit_ia(bpl_def.msk,nr) then 
<**>        begin
              n:= 0;
              for i:= 1 step 1 until max_antal_operatører do
              if læsbit_ia(bpl_def.msk,i) then
              begin
                iaf1:= i*terminal_beskr_længde;
                if terminal_tab.iaf1.terminal_tilstand 
                                             shift (-21) < 3 then
                  n:= n+1;
              end;  
              bpl_tilst(k,1):= n;
            end;
<**> <*  
              bpl_tilst(k,1):= bpl_tilst(k,1)-1;
  *>      end;
          signal_bin(bs_mobil_opkald);
          if opk_alarm.tab.alarm_tilst > 0 then
          begin
            opk_alarm.tab.alarm_kmdo:= 3;
            signal_bin(bs_opk_alarm);
          end;
        end;
        begin

          <* 4: opdater skærm *>

          signal_ch(cs_op_retur,op_ref,d.op_ref.optype);
          while (læsbit_ia(samtaleflag,nr) or læsbit_ia(opkaldsflag,nr) or
            læsbit_ia(kanalflag,nr) ) and læsbit_ia(operatørmaske,nr) and
            skærmmåde=0 do
         begin

<*+2*>    if testbit13 and overvåget then
          disable begin
            write(out,"nl",1,<:opdater skærm(:>,<<d>,nr,
              <:) opkaldsflag::>,"nl",1);
            outintbits_ia(out,opkaldsflag,1,op_maske_lgd//2);
            write(out,<: operatørmaske::>,"nl",1);
            outintbits_ia(out,operatørmaske,1,op_maske_lgd//2);
            write(out,<: skærmmåde=:>,skærmmåde,"nl",0);
            ud;
          end;
<*-2*>
          if sætbit_ia(samtaleflag,nr,0)=1 and op_talevej(nr)<>0 then
          begin
            skriv_skærm_bvs(nr);
<*940920    inspect(bs_talevej_udkoblet(op_talevej(nr)),status);
            if status>0 then
            begin
              for ll:= 1 step 1 until terminalbeskrlængde//2 do
                terminaltab.ref(ll):= 0;
              skriv_skærm_bvs(nr);
              wait(bs_talevej_udkoblet(op_talevej(nr)));
            end;
            for i:= 1 step 1 until max_antal_kanaler do
            begin
              iaf:= (i-1)*kanalbeskrlængde;
              inspect(ss_samtale_nedlagt(i),status);
              if status>0 and
                tv_operatør(kanaltab.iaf.kanal_tilstand shift (-16))=nr then
              begin
                kanaltab.iaf.kanal_tilstand:=
                  kanaltab.iaf.kanal_tilstand shift (-10) extract 6 shift 10;
                for ll:= 2 step 1 until kanalbeskrlængde//2 do
                  kanaltab.iaf(ll):= 0;
                skriv_skærm_kanal(nr,i);
                repeat
                  wait(ss_samtale_nedlagt(i));
                  inspect(ss_samtale_nedlagt(i),status);
                until status=0;
              end;
            end;
940920*>    cursor(z_op(nr),1,1);
            setposition(z_op(nr),0,0);
          end;
          if (læsbit_ia(opkaldsflag,nr) or læsbit_ia(kanalflag,nr))
             and læsbit_ia(operatørmaske,nr) and skærmmåde = 0 then
          begin
<*V*>       setposition(z_op(nr),0,0);
            if sætbit_ia(opkaldsflag,nr,0) =1 then
              skriv_skærm_opkaldskø(nr);
            if sætbit_ia(kanalflag,nr,0) =1 then
            begin
              for i:=1 step 1 until max_antal_kanaler do
                skriv_skærm_kanal(nr,i);
            end;
            cursor(z_op(nr),1,1);
<*V*>       setposition(z_op(nr),0,0);
          end;
         end;
        end;
        begin
\f

message procedure operatør side x+3 - 830310/hko;

          <* 5: samtale etableret *>

          res:= d.op_ref.resultat;
          b_v:= d.op_ref.data(3) extract 4;
          b_s:= d.op_ref.data(4);
          signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
          if res = 3 and terminal_tab.ref(1) shift(-21) = 2 then
          begin
            sætbit_i(terminal_tab.ref(1),21,1);
            sætbit_i(terminal_tab.ref(1),22,0);
            sætbit_i(terminal_tab.ref(1),2,0);
            sæt_hex_ciffer(terminal_tab.ref,3,b_v);
            terminal_tab.ref(2):= b_s;
            sæt_bit_i(terminal_tab.ref(1),2<* opt. *>,0);
            iaf:= (b_s extract 4 - 1)*kanal_beskr_længde;
            kanaltab.iaf.kanal_tilstand:= kanaltab.iaf.kanal_tilstand
              shift (-10) shift 10 + terminal_tab.ref(1) extract 10;

            if læsbit_ia(operatørmaske,nr) and skærmmåde = 0 then
            begin
<*V*>         setposition(z_op(nr),0,0);
              skriv_skærm_b_v_s(nr);
<*V*>         setposition(z_op(nr),0,0);
            end;
          end
          else
          if terminal_tab.ref(1) shift(-21) = 2 then
          begin
            sætbit_i(terminal_tab.ref(1),22,0);
            sætbit_i(terminal_tab.ref(1),2,0);
            sæt_hex_ciffer(terminal_tab.ref,3,b_v);
            terminal_tab.ref(2):= 0;
            if læsbit_ia(operatørmaske,nr) and skærmmåde = 0 then
            begin
<*V*>         setposition(z_op(nr),0,0);
              cursor(z_op(nr),21,17);
              write(z_op(nr),<:EJ FORB:>);
<*V*>         setposition(z_op(nr),0,0);
            end;
          end
          else fejlreaktion(3<*prg.fejl*>,terminal_tab.ref(1) shift(-21),
                 <:terminal tilstand:>,1);
        end;

        begin
\f

message procedure operatør side x+4 - 810602/hko;

          <* 6: radiokanal ekskluderet *>

          læs_hex_ciffer(terminal_tab.ref,3,b_v);
          pos:= d.op_ref.data(1);
          signalch(d.op_ref.retur,op_ref,d.op_ref.optype);
          indeks:= terminal_tab.ref(2);
          b_s:= if indeks shift (-22) = 3 and indeks extract 22 = pos
                then indeks extract 4 else 0;
          if b_v = pos then
            sæt_hex_ciffer(terminal_tab.ref,3,0);
          if b_s = pos then
          begin
            terminal_tab.ref(2):= 0;
            sætbit_i(terminal_tab.ref(1),21,0);
            sætbit_i(terminal_tab.ref(1),22,0);
            sætbit_i(terminal_tab.ref(1),2,0);
          end;
          if skærmmåde=0 then
          begin
            if b_v = pos or b_s = pos then
<*V*>         skriv_skærm_b_v_s(nr);
<*V*>       skriv_skærm_kanal(nr,pos);
            cursor(z_op(nr),1,1);
            setposition(z_op(nr),0,0);
          end;
        end;

        begin

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

     until false;
  op_trap:
    skriv_operatør(zbillede,1);
  end operatør;
\f

message procedure alarmur side 1;

procedure alarmur;
begin
  integer ventetid, nr;
  integer array field opref, tab;
  real nu;
  
  procedure skriv_alarmur(zud,omfang);
    value                     omfang;
    zone                  zud;
    integer                   omfang;
  begin
    write(zud,"nl",1,<:+++ alarmur:>);
    if omfang > 0 then
    disable begin     
      real t;

      trap(slut);
      write(zud,"nl",1,
        <:  ventetid:  :>,ventetid,"nl",1,
        <:  nr:        :>,nr,"nl",1,
        <:  opref:     :>,opref,"nl",1,
        <:  tab:       :>,tab,"nl",1,
        <:  nu:       :>,<< zddddd>,systime(4,nu,t),t,"nl",1,
        <::>);
      skriv_coru(zud,coru_no(295));
slut:
    end;
  end skriv_alarmur;
    
  trap(alarmur_trap);
  stackclaim(400);

  systime(1,0.0,nu);
  ventetid:= -1;
  repeat
    waitch(cs_opk_alarm_ur,opref,op_optype,ventetid);
    if opref > 0 then
      signalch(d.opref.retur,opref,op_optype);

    ventetid:= -1;
    systime(1,0.0,nu);
    for nr:= 1 step 1 until max_antal_operatører do
    begin
      tab:= (nr-1)*opk_alarm_tab_lgd;
      if opk_alarm.tab.alarm_tilst > 0 and
         opk_alarm.tab.alarm_lgd >= 0 then
      begin
        if (nu - opk_alarm.tab.alarm_start) >= opk_alarm.tab.alarm_lgd then
        begin
          opk_alarm.tab.alarm_kmdo:= 3;
          signalbin(bs_opk_alarm);
          if ventetid > 2 or ventetid=(-1) then ventetid:= 2;
        end
        else
        if (nu - opk_alarm.tab.alarm_start) < ventetid or ventetid = (-1) then
          ventetid:= (nu - opk_alarm.tab.alarm_start);
      end;
    end;
    if ventetid=0 then ventetid:= 1;
  until false;

alarmur_trap:
  disable skriv_alarmur(zbillede,1);
end alarmur;
\f

message procedure opkaldsalarmer side 1;

procedure opkaldsalarmer;
begin
  integer nr, ny_kommando, tilst, aktion, tt;
  integer array field tab, opref, alarmop;

  procedure skriv_opkaldsalarmer(zud,omfang);
    value                            omfang;
    zone                         zud;
    integer                          omfang;
  begin
    write(zud,"nl",1,<:+++ opkaldsalarmer:>);
    if omfang>0 then
    disable begin
      real array field raf;
      trap(slut);
      raf:=0;
      write(zud,"nl",1,
          <:  nr:          :>,nr,"nl",1,
          <:  ny-kommando: :>,ny_kommando,"nl",1,
          <:  tilst:       :>,tilst,"nl",1,
          <:  aktion:      :>,aktion,"nl",1,
          <:  tt:          :>,false add tt,1,"nl",1,
          <:  tab:         :>,tab,"nl",1,
          <:  opref:       :>,opref,"nl",1,
          <:  alarmop:     :>,alarmop,"nl",1,
          <::>);
      skriv_coru(zud,coru_no(296));
slut:
    end;
  end skriv_opkaldsalarmer;

  trap(opk_alarm_trap);
  stackclaim(400);

<*+2*>if (testbit8 and overvåget) or testbit28 then
        skriv_opkaldsalarmer(out,0);
<*-2*>

  repeat
    wait(bs_opk_alarm);
    alarmop:= 0;
    for nr:= 1 step 1 until max_antal_operatører do
    begin
      tab:= (nr-1)*opk_alarm_tab_lgd;
      ny_kommando:= opk_alarm.tab.alarm_kmdo;
      tilst:= opk_alarm.tab.alarm_tilst;
      aktion:= case ny_kommando+1 of (
        <*ingenting*> case tilst+1 of (4,4,4),
        <*normal   *> case tilst+1 of (1,4,4),
        <*nød      *> case tilst+1 of (2,2,4),
        <*sluk     *> case tilst+1 of (4,3,3));
      tt:= case aktion of ('B','C','F','-');
      if tt<>'-' then
      begin
<*V*>   waitch(cs_tvswitch_adgang,opref,op_optype,-1);
        startoperation(opref,296,cs_opk_alarm,tt shift 12 + 44);
        d.opref.data(1):= nr+16;
        signalch(cs_talevejsswitch,opref,op_optype);
<*V*>   waitch(cs_opk_alarm,opref,op_optype,-1);
        if d.opref.resultat = 3 then
        begin
          opk_alarm.tab.alarm_kmdo:= 0;
          opk_alarm.tab.alarm_gtilst:= opk_alarm.tab.alarm_tilst;
          opk_alarm.tab.alarm_tilst:= case aktion of (1,2,0);
          if aktion < 3 then
          begin
            systime(1,0.0,opk_alarm.tab.alarm_start);
            if alarmop = 0 then 
              waitch(cs_opk_alarm_ur_ret,alarmop,op_optype,-1);
          end;
        end;
        signalch(cs_tvswitch_adgang,opref,op_optype or gen_optype);
      end;
    end;
    if alarmop<>0 then
    begin
      startoperation(alarmop,296,cs_opk_alarm_ur_ret,0);
      signalch(cs_opk_alarm_ur,alarmop,op_optype);
    end;
  until false;

opk_alarm_trap:
  disable skriv_opkaldsalarmer(zbillede,1);
end;  

\f

message procedure tvswitch_input side 1 - 940810/cl;

  procedure tv_switch_input;
  begin
    integer array field opref;
    integer tt,ant;
    boolean ok;
    integer array ia(1:128);

    procedure skriv_tvswitch_input(zud,omfang);
      value                            omfang;
      zone                         zud;
      integer                          omfang;
    begin
      write(zud,"nl",1,<:+++ tvswitch-input:>);
      if omfang>0 then
      disable begin
        real array field raf;
        trap(slut);
        raf:=0;
        write(zud,"nl",1,
          <:  opref:  :>,opref,"nl",1,
          <:  ok:     :>,(if ok then <:TRUE:> else <:FALSE:>),"nl",1,
          <:  ant:    :>,ant,"nl",1,
          <:  tt:     :>,tt,"nl",1,
          <::>);
        write(zud,"nl",1,<:ia: :>);
        skrivhele(zud,ia.raf,256,2);
        skriv_coru(zud,coru_no(297));
slut:
      end;
    end skriv_tvswitch_input;

    real procedure now;
    begin
      real f,r,r1; long l;

      systime(1,0,r); l:= r*100; f:= (l mod 100)/100;
      systime(4,r,r1);
      now:= r1+f;
    end;
\f

    boolean procedure læs_tlgr;
    begin
      integer kl,ch,i,pos,p;
      long field lf;
      boolean ok;

      integer procedure readch(z,c);
        zone z; integer c;
      begin
        readch:= readchar(z,c);
<*+2*>  if testbit15 and overvåget then
        disable begin
          if ' ' <= c and c <= 'ü' then outchar(out,c)
          else write(out,"<",1,<<d>,c,">",1);
          if c='em' then write(out,<: *timeout*:>);
        end;
<*-2*>
      end;

      ok:= false; tt:=' ';
      repeat
        readchar(z_tv_in,ch);
      until ch<>'em';
      repeatchar(z_tv_in);

<*+2*>if testbit15 and overvåget then
      disable write(out,<<zd dd dd.dd >,now,<:switch-ind:  :>);
<*-2*>

      for kl:=readch(z_tv_in,ch) while ch<>'%' and ch<>'nl' and ch<>'em' do ;
      if ch='%' then
      begin
        ant:= 0; pos:= 1; lf:= 4;
        ok:= true;
        for i:= 1 step 1 until 128 do ia(i):= 0;

        for kl:=readch(z_tv_in,ch) while kl = 6 do
          skrivtegn(ia,pos,ch);

        p:=pos;
        repeat afsluttext(ia,p) until p mod 6 = 1;

        if ia.lf=long<:ACK:> and ch='nl' then tt:= '+' else
        if ia.lf=long<:NACK:> and ch='nl' then tt:= '-' else
        if pos=2 and ch=' ' then tt:= ia(1) shift (-16) else ok:= false;

        if ok and ch=' ' then
          for kl:=readch(z_tv_in,ch) while ch=' ' do ;

        while kl = 2 do
        begin
          i:= ch - '0';
          for kl:=readch(z_tv_in,ch) while kl = 2 do i:= i*10 + ch-'0';
          if ant < 128 then
          begin
            ant:= ant+1;
            ia(ant):= i;
          end
          else
            ok:= false;
          while ch=' ' do kl:=readch(z_tv_in,ch);
        end;
        if ch<>'nl' then ok:= false;
        while ch<>'nl' and ch<>'em' do kl:=readch(z_tv_in,ch);
<* !!   setposition(z_tv_in,0,0); !! *>
<*+2*>  if testbit15 and overvåget then disable ud;
<*-2*>

        if tt='+' or tt='-' or tt='Q' or tt='E' then
          ok:= ok
        else if tt='C' or tt='N' or
                tt='P' or tt='U' or tt='S' or tt='Z' then
          ok:= ok and ant=1
        else if tt='X' or tt='Y' then
          ok:= ok and ant=2
        else if tt='T' or tt='W' then
          ok:= ok and ant=64
        else if tt='R' then
          ok:= ok and ant extract 1 = 0
        else
        begin
          ok:= false;
          fejlreaktion(21,tt,<:Ukendt telegramtype:>,2 shift 12 + 1);
        end;

      end; <* if ch='%' *>
      læs_tlgr:= ok;
    end læs_tlgr;
\f

    trap(tvswitch_input_trap);
    stackclaim(400);
    for ant:= 1 step 1 until 128 do ia(ant):= 0;

<*+2*>if (testbit8 and overvåget) or testbit28 then
        skriv_tvswitch_input(out,0);
<*-2*>

    repeat
      ok:= læs_tlgr;
      if ok then
      begin
<*V*>   waitch(cs_tvswitch_input,opref,op_optype,-1);
        start_operation(opref,297,cs_tvswitch_input,0);
        d.opref.resultat:= tt shift 12 + ant;
        tofrom(d.opref.data,ia,ant*2);
        signalch(cs_talevejsswitch,opref,op_optype);
      end;
    until false;

tvswitch_input_trap:

    disable skriv_tvswitch_input(zbillede,1);

  end tvswitch_input;
\f

message procedure tv_switch_adm side 1 - 940502/cl;

  procedure tv_switch_adm;
  begin
    integer array field opref;
    integer rc;

    procedure skriv_tv_switch_adm(zud,omfang);
      value                           omfang;
      zone                        zud;
      integer                         omfang;
    begin
      write(zud,"nl",1,<:+++ tv-switch-adm:>);
      if omfang>0 then
      disable begin
        trap(slut);
        write(zud,"nl",1,
          <:  opref:  :>,opref,"nl",1,
          <:  rc:     :>,rc,"nl",1,
          <::>);
        skriv_coru(zud,coru_no(298));
slut:
      end;
    end skriv_tv_switch_adm;

    trap(tv_switch_adm_trap);
    stackclaim(400);

<*+2*> if (testbit8 and overvåget) or testbit28 then
         disable skriv_tv_switch_adm(out,0);
<*-2*>



<* !!!!!!! PASSIVER KORUTINEN - cs_tvswitch_adm SIGNALERES ALDRIG !!!!!!! 
    waitch(cs_tvswitch_adm,opref,op_optype,-1);
*>

    repeat
      waitch(cs_tvswitch_adgang,opref,op_optype,-1);
      start_operation(opref,298,cs_tvswitch_adm,'R' shift 12 + 44);
      rc:= 0;
      repeat
        signalch(cs_talevejsswitch,opref,op_optype);
<*V*>   waitch(cs_tvswitch_adm,opref,op_optype,-1);
        rc:= rc+1;
      until rc=3 or d.opref.resultat=3;

      signalch(cs_tvswitch_adgang,opref,op_optype);

<*V*> delay(15*60);
    until false;
tv_switch_adm_trap:
    disable skriv_tv_switch_adm(zbillede,1);
  end;
\f

message procedure talevejsswitch side 1 -940426/cl;

  procedure talevejsswitch;
  begin
    integer tt, ant, ventetid;
    integer array field opref, gemt_op, tab;
    boolean ok;
    integer array ia(1:128);

    procedure skriv_talevejsswitch(zud,omfang);
      value                            omfang;
      zone                         zud;
      integer                          omfang;
    begin
      write(zud,"nl",1,<:+++ talevejsswitch:>);
      if omfang>0 then
      disable begin
        real array field raf;
        trap(slut);
        raf:= 0;
        write(zud,"nl",1,
          <:  tt:      :>,tt,"nl",1,
          <:  ant:     :>,ant,"nl",1,
          <:  ventetid: :>,ventetid,"nl",1,
          <:  opref:    :>,opref,"nl",1,
          <:  gemt-op:  :>,gemt_op,"nl",1,
          <:  tab:      :>,tab,"nl",1,
          <:  ok:       :>,(if ok then <:TRUE:> else <:FALSE:>),"nl",1,
          <::>);
        write(zud,"nl",1,<:ia: :>);
        skriv_hele(zud,ia.raf,256,2);
        skriv_coru(zud,coru_no(299));
slut:
      end;
    end skriv_talevejsswitch;

    real procedure now;
    begin
      real f,r,r1; long l;

      systime(1,0,r); l:= r*100; f:= (l mod 100)/100;
      systime(4,r,r1);
      now:= r1+f;
    end;
\f

    trap(tvswitch_trap);
    stackclaim(400);
    for ant:= 1 step 1 until 128 do ia(ant):= 0;

<*+2*>if (testbit8 and overvåget) or testbit28 then
        skriv_talevejsswitch(out,0);
<*-2*>

    ventetid:= -1; ant:= 0; tt:= ' ';
    repeat
      waitch(cs_talevejsswitch,opref,gen_optype or op_optype,ventetid);
      if opref > 0 then
      begin
        if d.opref.opkode extract 12 = 0 then
        begin <*input fra talevejsswitchen *>
          for ant:= 1 step 1 until 128 do ia(ant):= 0;
          tt:= d.opref.resultat shift (-12) extract 12;
          ant:= d.opref.resultat extract 12;
          tofrom(ia,d.opref.data,ant*2);
          signalch(d.opref.retur,opref,d.opref.optype);

          if tt<>'+' and tt<>'-' then
          begin
            write(z_tv_out,"%",1,<:ACK:>,"cr",1);
            setposition(z_tv_out,0,0);
<*+2*>      if testbit15 and overvåget then
            disable begin
              write(out,<<zd dd dd.dd >,now,<:switch-ud:  :>,<:%ACK:>);
              ud;
            end;
<*-2*>
          end;
          if (tt='+' or tt='-') and gemt_op<>0 then
          begin
            d.gemt_op.resultat:= (if tt='+' then 3 else 0);
            signalch(d.gemt_op.retur,gemt_op,d.gemt_op.optype);
            gemt_op:= 0;
            ventetid:= -1;
          end
          else
          if tt='R' then
          begin
            for i:= 1 step 2 until ant do
            begin
              if ia(i) <= max_antal_taleveje and
                 17 <= ia(i+1) and ia(i+1) <= max_antal_operatører+16
              then
              begin
                if op_talevej(ia(i+1)-16)<>ia(i) then
                  tv_operatør(op_talevej(ia(i+1)-16)):= 0;
                if tv_operatør(ia(i))<>ia(i+1)-16 then
                  op_talevej(tv_operatør(ia(i))):= 0;
                tv_operatør(ia(i)):= ia(i+1)-16;
                op_talevej(ia(i+1)-16):= ia(i);
                sætbit_ia(samtaleflag,ia(i+1)-16,1);
              end
              else
              if ia(i+1) <= max_antal_taleveje and
                 17 <= ia(i) and ia(i) <= max_antal_operatører+16
              then
              begin
                if op_talevej(ia(i))<>ia(i+1)-16 then
                  tv_operatør(op_talevej(ia(i))):= 0;
                if tv_operatør(ia(i+1)-16)<>ia(i) then
                  op_talevej(tv_operatør(ia(i+1)-16)):= 0;
                tv_operatør(ia(i+1)):= ia(i)-16;
                op_talevej(ia(i)-16):= ia(i+1);
                sætbit_ia(samtaleflag,ia(i)-16,1);
              end;
            end;
            signal_bin(bs_mobil_opkald);
<*+2*> if testbit15 and testbit16 and overvåget then
       disable begin
         skriv_talevejs_tab(out); ud;
       end;
<*-2*>
          end <* tt='R' and ant>0 *> 
          else
          if tt='Y' then
          begin
            if ia(1) <= max_antal_taleveje and
               17 <= ia(2) and ia(2) <= max_antal_operatører+16
            then
            begin
              if tv_operatør(ia(1))=ia(2)-16 and
                 op_talevej(ia(2)-16)=ia(1)
              then tv_operatør(ia(1)):= op_talevej(ia(2)-16):= 0;
            end
            else
            if ia(2) <= max_antal_taleveje and
               17 <= ia(1) and ia(1) <= max_antal_operatører+16
            then
            begin
              if tv_operatør(ia(2))=ia(1)-16 and
                 op_talevej(ia(1)-16)=ia(2)
              then tv_operatør(ia(2)):= op_talevej(ia(1)-16):= 0;
            end;
          end
          else
          if tt='C' or tt='N' or tt='P' or tt='U' then
          begin
            waitch(cs_op_iomedd,opref,gen_optype,-1);
            startoperation(opref,299,cs_op_iomedd,23);
            ant:= 1;
            hægtstring(d.opref.data,ant,<:switch - port :>);
            anbringtal(d.opref.data,ant,ia(1),2);
            if 17<=ia(1) and ia(1)<=16+max_antal_operatører then
            begin
              hægtstring(d.opref.data,ant,<: (:>);
              if bpl_navn(ia(1)-16)=long<::> then
              begin
                hægtstring(d.opref.data,ant,<:op:>);
                anbringtal(d.opref.data,ant,ia(1)-16,
                  if ia(1)-16 > 9 then 2 else 1);
              end
              else hægtstring(d.opref.data,ant,string bpl_navn(ia(1)-16));
              skrivtegn(d.opref.data,ant,')');
            end;
            hægtstring(d.opref.data,ant,
              if tt='C' then <: Kontakt med kontrolbox etableret:> else
              if tt='N' then <: Kontakt med kontrolbox tabt:> else
              if tt='P' then <: Tilgængelig:> else
              if tt='U' then <: Ikke tilgængelig:> else <::>);
            repeat afsluttext(d.opref.data,ant) until ant mod 6 = 1;
            signalch(cs_io,opref,gen_optype);
          end
          else
          if tt='Z' then
          begin
            tab:= (ia(1)-16-1)*opk_alarm_tab_lgd;
            opk_alarm.tab.alarm_tilst:= opk_alarm.tab.alarm_gtilst;
          end
          else
          begin
            <* ikke implementeret *>
          end;
        end
        else
        if d.opref.opkode extract 12 = 44 then
        begin
          tt:= d.opref.opkode shift (-12);
          ok:= true;
          if tt='E' or tt='Q' or tt='R' or tt='W' or tt='S' or tt='I' then
          begin
<*+2*> if testbit15 and overvåget then
       disable begin
         write(out,<<zd dd dd.dd >,now,<:switch-ud:  %:>,false add tt,1);
         ud;
       end;
<*-2*>
            write(z_tv_out,"%",1,false add tt,1,"cr",1);
            setposition(z_tv_out,0,0);
          end
          else
          if tt='B' or tt='C' or tt='F' then
          begin
<*+2*> if testbit15 and overvåget then
       disable begin
         write(out,<<zd dd dd.dd >,now,<:switch-ud:  %:>,false add tt,1,
           " ",1,<<d>,d.opref.data(1));
         ud;
       end;
<*-2*>
            write(z_tv_out,"%",1,false add tt,1," ",1,<<d>,
              d.opref.data(1),"cr",1);
            setposition(z_tv_out,0,0);
          end
          else
          if tt='A' or tt='D' or tt='T' then
          begin
<*+2*> if testbit15 and overvåget then
       disable begin
         write(out,<<zd dd dd.dd >,now,<:switch-ud:  %:>,false add tt,1,
           " ",1,<<d>,d.opref.data(1)," ",1,d.opref.data(2));
         ud;
       end;
<*-2*>
            write(z_tv_out,"%",1,false add tt,1," ",1,<<d>,
              d.opref.data(1)," ",1,d.opref.data(2),"cr",1);
            setposition(z_tv_out,0,0);
          end
          else
            ok:= false;
          if ok then
          begin
            gemt_op:= opref;
            ventetid:= 2;
          end
          else
          begin
            d.opref.resultat:= 4;
            signalch(d.opref.retur,opref,d.opref.optype);
          end;
        end;
      end
      else
      if gemt_op<>0 then
      begin <*timeout*>
        d.gemt_op.resultat:= 0;
        signalch(d.gemt_op.retur,gemt_op,d.gemt_op.optype);
        gemt_op:= 0;
        ventetid:= -1;
<*+2*> if testbit15 and overvåget then
       disable begin
         write(out,<<zd dd dd.dd >,now,<:switch:     *Operation Timeout*:>);
         ud;
       end;
<*-2*>
      end;
    until false;
tvswitch_trap:
    disable skriv_talevejsswitch(zbillede,1);
  end talevejsswitch;

:5: operatør: initialisering
\f

message operatør_initialisering side 1 - 810520/hko;

  top_bpl_gruppe:= 64;
  
  bpl_navn(0):= long<::>;
  for i:= 1 step 1 until 127 do
  begin
    k:= læsfil(tf_bpl_navne,i,j);
    if k<>0 then fejlreaktion(5,k,<:bplnavne init:>,0);
    bpl_navn(i):= (long fil(j,1)) shift (-8) shift 8;
    if i<=max_antal_operatører then
      operatør_auto_include(i):= false add (fil(j,1) extract 8);
    if i>64 and fil(j,1)<>real<::> and i>top_bpl_gruppe then
      top_bpl_gruppe:= i;
  end;

  for i:= 0 step 1 until 64 do
  begin
    iaf:= i*op_maske_lgd;
    tofrom(bpl_def.iaf,ingen_operatører,op_maske_lgd);
    bpl_tilst(i,1):= bpl_tilst(i,2):= 0;
    if 1<=i and i<= max_antal_operatører then
    begin
      bpl_tilst(i,2):= 1;
      sætbit_ia(bpl_def.iaf,i,1);
    end;
  end;
  for i:= 65 step 1 until 127 do
  begin
    k:= læsfil(tf_bpl_def,i-64,j);
    if k<>0 then fejlreaktion(5,k,<:bpldef init:>,0);
    iaf:= i*op_maske_lgd;
    tofrom(bpl_def.iaf,fil(j),op_maske_lgd);
    bpl_tilst(i,1):= 0;
    bpl_tilst(i,2):= fil(j,2) extract 24;
  end;

  for k:= 0,1,2,3 do operatør_stop(0,k):= 0;
  iaf:= 0;
  for i:= 1 step 1 until max_antal_operatører do
  begin
    k:= læsfil(tf_stoptabel,i,j);
    if k<>0 then fejlreaktion(5,k,<:stoptabel init:>,0);
    operatør_stop(i,0):= i;
    for k:= 1,2,3 do
      operatør_stop(i,k):= fil(j).iaf(k+1);
    ant_i_opkø(i):= 0;
  end;

  tofrom(operatørmaske,ingen_operatører,op_maske_lgd);
  for i:= 0 step 1 until max_antal_operatører do op_talevej(i):= 0;
  for i:= 0 step 1 until max_antal_taleveje do tv_operatør(i):= 0;
  sidste_tv_brugt:= max_antal_taleveje;

  for i:= 1 step 1 until max_antal_operatører*(opk_alarm_tab_lgd//2) do
    opk_alarm(i):= 0;
  for i:= 1 step 1 until max_antal_operatører do
  begin
    integer array field tab;

    k:= læsfil(tf_alarmlgd,i,j);
    if k<>0 then fejlreaktion(5,k,<:alarmlængde init:>,0);
    tab:= (i-1)*opk_alarm_tab_lgd;
    opk_alarm.tab.alarm_lgd:= fil(j).iaf(1);
    opk_alarm.tab.alarm_start:= 0.0;
  end;

  laf:= raf:= 0;
  open(z_tv_in,8,taleswitch_in_navn,1 shift 21 + 1 shift 9);
  i:= monitor(8)reserve_process:(z_tv_in,0,ia);
  j:= 1;
  if i<>0 then 
    fejlreaktion(4,i,string taleswitch_in_navn.raf(increase(j)),1);
  open(z_tv_out,4 shift 12 + 8,taleswitch_out_navn,1 shift 9);
  i:= monitor(8)reserve_process:(z_tv_in,0,ia);
  j:= 1;
  if i<>0 then 
    fejlreaktion(4,i,string taleswitch_out_navn.raf(increase(j)),1);

  ia(1):= 3; <*canonical*>
  ia(2):= 0; <*no echo*>
  ia(3):= 0; <*prompt*>
  ia(4):= 2; <*timeout*>
  setcspterm(taleswitch_in_navn.laf,ia);
  setcspterm(taleswitch_out_navn.laf,ia);

  cs_op:= next_semch;

<*+3*>skriv_new_sem(out,3,cs_op,<:cs-op(hovedmodul):>);
<*-3*>

  cs_op_retur:= next_semch;

<*+3*>skriv_new_sem(out,3,cs_op_retur,<:cs_op_retur:>);
<*-3*>

  i:= nextcoru(200,<*ident*>
                10,<*prioitet*>
               true<*test_maske*>);

  j:= new_activity(         i,
                            0,
                   h_operatør);

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

message operatør_initialisering side 2 - 810520/hko;

  for k:= 1 step 1 until max_antal_operatører do
  begin
    j:=9;
    if k>9 then skrivtegn(terminal_navn, j,'0'+k//10);
    skrivtegn(terminal_navn,j,'0'+k mod 10);
    open(z_op(k),8,terminal_navn,1 shift 21 +1 shift 9);
    i:= monitor(4) processaddress:(z_op(k),0,ia);
    ref:=k*terminal_beskr_længde;
    if i = 0 then
    begin
      fejlreaktion(3<*programfejl*>,k,<:skærm eksisterer ikke:>,1);
      terminal_tab.ref.terminal_tilstand:= 4 shift 21;
    end
    else
    begin
      terminal_tab.ref.terminal_tilstand:= 7 shift 21;<*ej knyttet*>
    end;

    cs_operatør(k):= next_semch;
<*+3*>skriv_new_sem(out,3,cs_operatør(k),<:cs-operatør( ):>);
<*-3*>

    cs_op_fil(k):= nextsemch;
<*+3*> skriv_new_sem(out,3,cs_op_fil(k),<:cs-op-fil( ):>);
<*-3*>
    signalch(cs_op_fil(k),nextop(filoplængde),op_optype);

    i:= next_coru(200+k,<*ident*>
                     10,<*prioitet*>
                    true<*testmaske*>);
    j:= new_activity(       i,
                            0,
                     operatør,k);

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

  cs_op_iomedd:= next_semch;
<*+3*>skriv_new_sem(out,3,cs_op_iomedd,<:cs-op-iomedd:>);
<*-3*>

  bs_opk_alarm:= next_sem;
<*+3*>skriv_new_sem(out,1,bs_opk_alarm,<:bs-opk-alarm:>);
<*-3*>

  cs_opk_alarm:= next_semch;
<*+3*>skriv_new_sem(out,3,cs_opk_alarm,<:cs-opk-alarm:>);
<*-3*>

  cs_opk_alarm_ur:= next_semch;
<*+3*>skriv_new_sem(out,3,cs_opk_alarm_ur,<:cs-opk-alarm-ur:>);
<*-3*>

  cs_opk_alarm_ur_ret:= next_semch;
<*+3*>skriv_new_sem(out,3,cs_opk_alarm_ur_ret,<:cs-opk-alarm-ur-ret:>);
<*-3*>

  cs_tvswitch_adgang:= next_semch;
<*+3*>skriv_new_sem(out,3,cs_tvswitch_adgang,<:cs-tvswitch-adgang:>);
<*-3*>

  cs_tv_switch_input:= next_semch;
<*+3*>skriv_new_sem(out,3,cs_tv_switch_input,<:cs-tvswitch-input:>);
<*-3*>

  cs_tv_switch_adm:= next_semch;
<*+3*>skriv_new_sem(out,3,cs_tv_switch_adm,<:cs-tvswitch-adm:>);
<*-3*>

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

  signalch(cs_op_iomedd,nextop(60),gen_optype);

  iaf:= nextop(data+128);
  startoperation(iaf,298,cs_tv_switch_adgang,'I' shift 12 + 44);
  signal_ch(cs_talevejsswitch,iaf,op_optype);

  i:= next_coru(295, <*ident*>
                8,   <*prioritet*>
                true <*testmaske*>);
  j:= new_activity(         i,
                            0,
                   alarmur);
<*+3*>skriv_new_activity(out,i,j);
<*-3*>

  signal_ch(cs_opk_alarm_ur_ret,nextop(data),op_optype);

  i:= next_coru(296, <*ident*>
                8,   <*prioritet*>
                true <*testmaske*>);
  j:= new_activity(         i,
                            0,
                   opkaldsalarmer);
<*+3*>skriv_new_activity(out,i,j);
<*-3*>

  i:= next_coru(297, <*ident*>
                3,  <*prioritet*>
                true <*testmaske*>);
  j:= new_activity(         i,
                            0,
                   tv_switch_input);
<*+3*>skriv_new_activity(out,i,j);
<*-3*>

  for i:= 1,2 do
    signalch(cs_tvswitch_input,nextop(data+256),op_optype);

  i:= next_coru(298, <*ident*>
                20,  <*prioritet*>
                true <*testmaske*>);
  j:= new_activity(         i,
                            0,
                   tv_switch_adm);
<*+3*>skriv_new_activity(out,i,j);
<*-3*>

  i:= next_coru(299, <*ident*>
                3,   <*prioritet*>
                true <*testmaske*>);
  j:= new_activity(         i,
                            0,
                   talevejsswitch);
<*+3*>skriv_new_activity(out,i,j);
<*-3*>
:6: operatør trapaktion1.
\f

message operatør trapaktion1 side 1 - 810521/hko;

  write(zbillede,"nl",1,<:betjeningspladsnavne::>,"nl",1);
  for i:= 1 step 1 until max_antal_operatører do
  begin
    write(zbillede,<<dd>,i,<:: :>,true,6,string bpl_navn(i),
      case operatør_auto_include(i) extract 2 + 1 of (
      <:EK    :>,<:IN(ÅB):>,<:??    :>,<:IN(ST):>),<:   :>);
    if i mod 4 = 0 then write(zbillede,"nl",1);
  end;
  write(zbillede,"nl",1);

  write(zbillede,"nl",1,<:top-bpl-gruppe: :>,<<d>,top_bpl_gruppe,"nl",1,
    <:betjeningspladsgrupper::>,"nl",1);
  for i:= 1 step 1 until 127 do
  if bpl_navn(i)<>long<::> then
  begin
    k:= write(zbillede,<<dd >,i,true,6,string bpl_navn(i),<:(:>,<<d>,
      bpl_tilst(i,1),<:/:>,bpl_tilst(i,2),<:):>);
    write(zbillede,"sp",16-k,<:= :>);
    iaf:= i*op_maske_lgd; j:=0;
    for k:= 1 step 1 until max_antal_operatører do
    begin
      if læsbit_ia(bpl_def.iaf,k) then
      begin
        if j mod 6 = 0 and j > 0 then write(zbillede,"nl",1,"sp",18);
        write(zbillede,true,6,string bpl_navn(k));
        j:= j+1;
      end;
    end;
    write(zbillede,"nl",1);
  end;

  write(zbillede,"nl",1,<:stoptabel::>,"nl",1);
  for i:= 1 step 1 until max_antal_operatører do
  begin
    write(zbillede,<<dd >,i);
    for j:= 0 step 1 until 3 do
    begin
      k:= operatør_stop(i,j);
      write(zbillede,if j=0 then <: :> else <:->:>,if k=0 then <:ALLE:>
        else string bpl_navn(k));
    end;
    write(zbillede,<:  (:>,<<d>,ant_i_opkø(i),<:):>,"nl",1);
  end;

  skriv_terminal_tab(zbillede);
  write(zbillede,"nl",1,<:operatør-maske::>,"nl",1);
  outintbits_ia(zbillede,operatørmaske,1,op_maske_lgd//2);
  skriv_opk_alarm_tab(zbillede);
  skriv_talevejs_tab(zbillede);
:7: operatør trapaktion2.
\f

message operatør_finale side 1 - 810428/hko;

goto op_trap2_slut;

  write(out,<:lukker operatører:>); ud;
  for k:= 1 step 1 until max_antal_operatører do
  begin
    close(z_op(k),true);
  end;
op_trap2_slut:
  k:=k;
▶EOF◀