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 - download

⟦54887f214⟧ TextFile

    Length: 994560 (0xf2d00)
    Types: TextFile
    Names: »buskomudx00 «

Derivation

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

TextFile

*mode 8.no 9.no
*buskom1=algol buskom1text list.yes blocks.yes xref.no details,
* .8.9 message.yes

buskom1text d.15464443.0334
  0     1 begin algol list.off;
  1     2 
  1     2   <* variables for claiming (accumulating) basic entities *>
  1     3   integer maxsem, maxsemch, maxop, maxcoru, maxmessext, maxprocext, maxnettoop;
  1     4 
  1     4   <* fields defining current position in pools af basic entities
  1     5      during initialization *>
  1     6   integer array field firstsem, firstsim, firstcoru, firstop, optop;
  1     7 
  1     7   <* variables used as pointers to 'current object' (work variables) *>
  1     8   integer messext, procext, timeinterval, testbuffering;
  1     9   integer array field timermessage, coru, sem, op, receiver, currevent,
  1    10     baseevent, prevevent;
  1    11 
  1    11   <* variables defining the size of basic entities (descriptors) *>
  1    12   integer corusize, semsize, simsize, opheadsize;
  1    13   integer array clockmess(1:2);
  1    14   real array clock(1:3);
  1    15   boolean eventqueueempty;
  1    16 algol list.on;
  1    17 
  1    17   \f

  1    17   message sys_parametererklæringer side 1 - 810127/cl;
  1    18   
  1    18   boolean testbit0 ,testbit1 ,testbit2 ,testbit3 ,testbit4 ,testbit5 ,
  1    19           testbit6 ,testbit7 ,testbit8 ,testbit9 ,testbit10,testbit11,
  1    20           testbit12,testbit13,testbit14,testbit15,testbit16,testbit17,
  1    21           testbit18,testbit19,testbit20,testbit21,testbit22,testbit23,
  1    22           testbit24,testbit25,testbit26,testbit27,testbit28,testbit29,
  1    23           testbit30,testbit31,testbit32,testbit33,testbit34,testbit35,
  1    24           testbit36,testbit37,testbit38,testbit39,testbit40,testbit41,
  1    25           testbit42,testbit43,testbit44,testbit45,testbit46,testbit47;
  1    26   boolean cl_overvåget,out_tw_lp,
  1    27           cm_test;
  1    28   
  1    28   integer låsning;
  1    29   \f

  1    29   message sys_parametererklæringer side 2 - 810310.hko;
  1    30   
  1    30   <* hjælpevariable *>
  1    31   
  1    31   integer i,j,k;
  1    32   integer array ia(1:32);
  1    33   integer array field iaf,ref;
  1    34   
  1    34   real r;
  1    35   real array ra(1:3);
  1    36   real array field raf;
  1    37   real field rf;
  1    38   
  1    38   long array la(1:2);
  1    39   long array field laf;
  1    40   
  1    40   procedure ud;
  1    41   begin
  2    42   <*
  2    43     outchar(out,'nl');
  2    44     if out_tw_lp then setposition(out,0,0);
  2    45   *>
  2    46     flushout('nl');
  2    47   end;
  1    48   \f

  1    48   message sys_parametererklæringer side 3 - 810310/hko;
  1    49   
  1    49   <* hovedmodul_parametre *>
  1    50   
  1    50   integer
  1    51     sys_mod,
  1    52     io_mod,
  1    53     op_mod,
  1    54     gar_mod,
  1    55     rad_mod,
  1    56     vt_mod;
  1    57   
  1    57   <* operations_parametre *>
  1    58   
  1    58   integer field
  1    59     kilde,
  1    60     retur,
  1    61     resultat,
  1    62     opkode;
  1    63   
  1    63   real field
  1    64     tid;
  1    65   
  1    65   integer array field
  1    66     data;
  1    67   
  1    67   boolean
  1    68     sys_optype,
  1    69     io_optype,
  1    70     op_optype,
  1    71     gar_optype,
  1    72     rad_optype,
  1    73     vt_optype,
  1    74     gen_optype;
  1    75   \f

  1    75   message sys_parametererklæringer side 4 - 820301/hko,cl;
  1    76   
  1    76   <* trimme-variable *>
  1    77   
  1    77   integer
  1    78     max_antal_operatører,
  1    79     max_antal_taleveje,
  1    80     max_antal_garageterminaler,
  1    81     max_antal_garager,
  1    82     max_antal_områder,
  1    83     max_antal_radiokanaler,
  1    84     max_antal_pabx,
  1    85     max_antal_kanaler,
  1    86     max_antal_mobilopkald,
  1    87     min_antal_nødopkald,
  1    88     max_antal_grupper,
  1    89     max_antal_gruppeopkald,
  1    90     max_antal_spring,
  1    91     max_antal_busser,
  1    92     max_antal_linie_løb,
  1    93     max_antal_fejltekster,
  1    94     max_linienr,
  1    95     op_maske_lgd,
  1    96     tv_maske_lgd;
  1    97   
  1    97   integer array
  1    98     konsol_navn,
  1    99     taleswitch_in_navn,
  1   100     taleswitch_out_navn,
  1   101     radio_fr_navn,
  1   102     radio_rf_navn(1:4),
  1   103     alfabet(0:255);
  1   104   
  1   104   integer 
  1   105     tf_systællere,
  1   106     tf_stoptabel,
  1   107     tf_bplnavne,
  1   108     tf_bpldef,
  1   109     tf_alarmlgd;
  1   110   \f

  1   110   message filparm side 1 - 800529/jg/cl;
  1   111   
  1   111   integer
  1   112     fil_op_længde,
  1   113     dbantez,dbantsz,dbanttz,
  1   114     dbmaxtf, dbmaxsf, dbblokt,
  1   115     dbmaxb,dbbidlængde,dbbidmax,
  1   116     dbmaxef;
  1   117   long array
  1   118     dbsnavn, dbtnavn(1:2);
  1   119   
  1   119   message attention parametererklæringer side 1 - 810318/hko;
  1   120   
  1   120     integer
  1   121       att_op_længde,
  1   122       att_maske_lgd,
  1   123       terminal_beskr_længde;
  1   124     integer field
  1   125       terminal_tilstand,
  1   126       terminal_suppl;
  1   127   
  1   127   message io_parametererklæringer side 1 - 820301/hko;
  1   128   
  1   128   message operatør_parametererklæringer side 1 - 810422/hko;
  1   129   
  1   129   integer field
  1   130     cqf_bus, cqf_fejl,
  1   131     alarm_kmdo, alarm_tilst, alarm_gtilst, alarm_lgd;
  1   132   real field
  1   133     cqf_ok_tid, cqf_næste_tid,
  1   134     alarm_start;
  1   135   long field
  1   136     cqf_id;
  1   137   
  1   137   integer  
  1   138     max_cqf, cqf_lgd,
  1   139     op_spool_postlgd, 
  1   140     op_spool_postantal,
  1   141     opk_alarm_tab_lgd;
  1   142   
  1   142   
  1   142   \f

  1   142   message procedure radio_parametererklæringer side 1 - 810524/hko;
  1   143   
  1   143     integer
  1   144       radio_giveup,
  1   145       opkaldskø_postlængde,
  1   146       kanal_beskr_længde,
  1   147       radio_op_længde,
  1   148       radio_pulje_størrelse;
  1   149   
  1   149   
  1   149   \f

  1   149   message vogntabel parametererklæringer side 1 - 810309/cl;
  1   150   
  1   150   integer vt_op_længde, vt_logskift;
  1   151   boolean vt_log_aktiv;
  1   152   
  1   152 \f

  1   152 
  1   152 algol list.off;
  1   153 message coroutinemonitor - 2 ;
  1   154 
  1   154   maxsem:= maxsemch:= maxop:= maxcoru:= maxnettoop:= 0;
  1   155   maxmessext:= maxprocext:= 1;
  1   156   corusize:= 20;
  1   157   simsize:= 6;
  1   158   semsize:= 8;
  1   159   opheadsize:= 8;
  1   160   testbuffering:= 1;
  1   161   timeinterval:= 5;
  1   162 algol list.on;
  1   163 algol list.on;
  1   164 
  1   164   \f

  1   164   message sys_parameterinitialisering side 1 - 810305/hko;
  1   165   
  1   165   copyout;
  1   166   
  1   166   cl_overvåget:= false;
  1   167     getzone6(out,ia);
  1   168     out_tw_lp:= ia(1) extract 12 = 8 or ia(1) extract 12 = 14;
  1   169   
  1   169   testbit0 :=testbit( 0);
  1   170   testbit1 :=testbit( 1);
  1   171   testbit2 :=testbit( 2);
  1   172   testbit3 :=testbit( 3);
  1   173   testbit4 :=testbit( 4);
  1   174   testbit5 :=testbit( 5);
  1   175   testbit6 :=testbit( 6);
  1   176   testbit7 :=testbit( 7);
  1   177   testbit8 :=testbit( 8);
  1   178   testbit9 :=testbit( 9);
  1   179   testbit10:=testbit(10);
  1   180   testbit11:=testbit(11);
  1   181   testbit12:=testbit(12);
  1   182   testbit13:=testbit(13);
  1   183   testbit14:=testbit(14);
  1   184   testbit15:=testbit(15);
  1   185   testbit16:=testbit(16);
  1   186   testbit17:=testbit(17);
  1   187   testbit18:=testbit(18);
  1   188   testbit19:=testbit(19);
  1   189   testbit20:=testbit(20);
  1   190   testbit21:=testbit(21);
  1   191   testbit22:=testbit(22);
  1   192   testbit23:=testbit(23);
  1   193   \f

  1   193   message sys_parameterinitialisering side 2 - 810316/cl;
  1   194   
  1   194   testbit24:=testbit(24);
  1   195   testbit25:=testbit(25);
  1   196   testbit26:=testbit(26);
  1   197   testbit27:=testbit(27);
  1   198   testbit28:=testbit(28);
  1   199   testbit29:=testbit(29);
  1   200   testbit30:=testbit(30);
  1   201   testbit31:=testbit(31);
  1   202   testbit32:=testbit(32);
  1   203   testbit33:=testbit(33);
  1   204   testbit34:=testbit(34);
  1   205   testbit35:=testbit(35);
  1   206   testbit36:=testbit(36);
  1   207   testbit37:=testbit(37);
  1   208   testbit38:=testbit(38);
  1   209   testbit39:=testbit(39);
  1   210   testbit40:=testbit(40);
  1   211   testbit41:=testbit(41);
  1   212   testbit42:=testbit(42);
  1   213   testbit43:=testbit(43);
  1   214   testbit44:=testbit(44);
  1   215   testbit45:=testbit(45);
  1   216   testbit46:=testbit(46);
  1   217   testbit47:=testbit(47);
  1   218   cm_test:= false;
  1   219   \f

  1   219   message sys_parameterinitialisering side 3 - 810409/cl,hko;
  1   220   
  1   220     timeinterval:=1; <* tidsinterval for cmon's timeoutinspection *>
  1   221   
  1   221     if findfpparam(<:låsning:>,true,ia) > 0 then låsning:= ia(1)
  1   222     else låsning:= 0;
  1   223   \f

  1   223   message sys_parameterinitialisering side 4 - 820301/hko/cl;
  1   224   
  1   224   <* initialisering af hovedmodul_parametre *>
  1   225   
  1   225     i:=0;   sys_mod:=i;
  1   226     i:=i+1; io_mod:=i;
  1   227     i:=i+1; op_mod:=i;
  1   228     i:=i+1; gar_mod:=i;
  1   229     i:=i+1; rad_mod:=i;
  1   230     i:=i+1; vt_mod:=i;
  1   231   
  1   231   <* initialisering af operationstyper *>
  1   232   
  1   232     sys_optype:=false add (1 shift sys_mod);
  1   233     io_optype:= false add (1 shift io_mod);
  1   234     op_optype:= false add (1 shift op_mod);
  1   235     gar_optype:=false add (1 shift gar_mod);
  1   236     rad_optype:=false add (1 shift rad_mod);
  1   237     vt_optype:= false add (1 shift vt_mod);
  1   238     gen_optype:=false add (1 shift 11);
  1   239   
  1   239   <* initialisering af fieldvariable for operationer *>
  1   240   
  1   240     i:=2;    kilde:=i;
  1   241     i:=i+4;  tid:=i;
  1   242     i:=i+2;  retur:=i;
  1   243     i:=i+2;  opkode:=i;
  1   244     i:=i+2;  resultat:=i;
  1   245     i:=i+0;  data:=i;
  1   246   
  1   246   <* initialisering af trimme-variable *>
  1   247   
  1   247     max_antal_operatører:=28; <* hvis > 32 skal tf_systællere udvides *>
  1   248     max_antal_taleveje:=12;
  1   249     max_antal_garageterminaler:=3;
  1   250     max_antal_garager:=99;
  1   251     max_antal_radiokanaler:=16;
  1   252     max_antal_pabx:=2;
  1   253     max_antal_kanaler:=14; <* 1 pabx + 13 radio *>
  1   254     max_antal_områder:=11;    <* hvis > 16 skal tf_systællere udvides *>
  1   255     max_antal_mobilopkald:=100;
  1   256     min_antal_nødopkald:=20;
  1   257     max_antal_grupper:=16;
  1   258     max_antal_gruppeopkald:=16;
  1   259     max_antal_spring:=16;
  1   260     max_antal_busser:=2000;
  1   261     max_antal_linie_løb:=2000;
  1   262     max_antal_fejltekster:=21;
  1   263     max_linienr:=999; <*<=999*>
  1   264   
  1   264     op_maske_lgd:= ((1+max_antal_operatører+23)//24)*2;
  1   265     tv_maske_lgd:= ((1+max_antal_taleveje+23)//24)*2;
  1   266   \f

  1   266   message sys_parameterinitialisering side 5 - 880901/cl;
  1   267   
  1   267   <* initialisering af konsol-navn *>
  1   268     raf:= 0;
  1   269     if findfpparam(<:io:>,false,ia)>0 then
  1   270     begin
  2   271       for i:= 1 step 1 until 4 do konsol_navn(i):= ia(i);
  2   272     end
  1   273     else
  1   274       system(7,0,konsol_navn);
  1   275   <*
  1   276       movestring(konsol_navn.raf,1,<:console1:>);
  1   277   *>
  1   278   
  1   278     raf:= 0;
  1   279   
  1   279   <* intialiserning af talevejsswitchens navn *>
  1   280   
  1   280     movestring(taleswitch_in_navn.raf,1,<:taleswitchi:>);
  1   281     movestring(taleswitch_out_navn.raf,1,<:taleswitch:>);
  1   282   
  1   282   <* initialisering af radiokanalnavne *>
  1   283   
  1   283     movestring(radio_fr_navn.raf,1,<:radiofr:>);
  1   284     movestring(radio_rf_navn.raf,1,<:radiorf:>);
  1   285   
  1   285   <* initialisering af 'input'-alfabet *>
  1   286   
  1   286     isotable(alfabet);
  1   287     alfabet('esc'):= 8 shift 12 + 'esc';
  1   288     <* for i:='a' step 1 until 'å' do alfabet(i):=alfabet(i)-32; *>
  1   289     for i:= 128 step 1 until 255 do alfabet(i):= 0 shift 12 + i;
  1   290     intable(alfabet);
  1   291   
  1   291   <* initialsering af tf_systællere *>
  1   292   
  1   292   tf_systællere:= 1024<*tabelfil*> + 8;
  1   293   tf_stoptabel := 1024<*tabelfil*> + 5;
  1   294   tf_bpl_navne := 1024<*tabelfil*> + 12;
  1   295   tf_bpl_def   := 1024<*tabelfil*> + 13;
  1   296   tf_alarmlgd  := 1024<*tabelfil*> + 14;
  1   297   
  1   297   \f

  1   297   message filparminit side 1 - 801030/jg;
  1   298   
  1   298   fil_op_længde:= data + 18 <*halvord*>;
  1   299   
  1   299   
  1   299   dbantez:=        1;
  1   300   dbantsz:=        2;
  1   301   dbanttz:=        3;  <* >=2 aht. samtidig tilgang*>
  1   302   dbblokt:=        8;
  1   303   dbmaxsf:=        7;
  1   304   dbbidlængde:=    3;
  1   305   dbbidmax:=       5;
  1   306   dbmaxb:=   dbmaxsf * dbbidmax;
  1   307   dbmaxef:=       12;
  1   308   movestring(dbsnavn,1,<:spoolfil:>);
  1   309   movestring(dbtnavn,1,<:tabelfil:>);
  1   310   if findfpparam(<:tabelfil:>,false,ia)>0 then
  1   311     tofrom(dbtnavn,ia,8);
  1   312   \f

  1   312   message filparminit side 2 - 801030/jg;
  1   313   
  1   313   
  1   313   <* reserver og check spoolfil og tabelfil *>
  1   314   begin integer s,i,funk,f;
  2   315    zone z(128,1,stderror); integer array tail(1:10);
  2   316   
  2   316   for f:=1,2 do
  2   317   begin
  3   318     <*open(z,4,string (case f of(dbsnavn,dbtnavn)),0);*>
  3   319     case f of
  3   320     begin
  4   321       open(z,4,dbsnavn,0);
  4   322       open(z,4,dbtnavn,0);
  4   323     end;
  3   324     for funk:=52<*create*>,8<*reserve*>,42<*lookup*> do
  3   325     begin
  4   326       s:=monitor(funk,z,i,tail);
  4   327       if s<>0 then system(9,funk*100+s,
  4   328         case f of(<:<10>spoolfil:>,<:<10>tabelfil:>));
  4   329     end;
  3   330     case f of begin
  4   331       begin integer antseg; <*spoolfil*>
  5   332         antseg:=dbmaxb * dbbidlængde;
  5   333         if tail(1) < antseg then
  5   334         begin
  6   335           tail(1):=antseg;
  6   336           s:=monitor(44<*change*>,z,i,tail);
  6   337           if s<>0 then
  6   338             system(9,44*100+s,<:<10>spoolfil:>);
  6   339         end;
  5   340       end;
  4   341       begin <*tabelfil*>
  5   342         dbmaxtf:=tail(10);
  5   343         if dbmaxtf<1 or dbmaxtf>1023 then 
  5   344           system(9,dbmaxtf,<:<10>tabelfil:>);
  5   345       end
  4   346     end case;
  3   347     close(z,false);
  3   348   end for;
  2   349   end;
  1   350   \f

  1   350   message attention parameterinitialisering side 1 - 810318/hko;
  1   351   
  1   351     att_op_længde:= 40;
  1   352     att_maske_lgd:=
  1   353        (1+max_antal_operatører+max_antal_garageterminaler+1+23)//24*2;
  1   354     terminal_beskr_længde:=6;
  1   355     terminal_tilstand:= 2;
  1   356     terminal_suppl:=4;
  1   357   
  1   357   message io_parameterinitialisering side 1 - 810421/hko;
  1   358   
  1   358   
  1   358   message operatør_parameterinitialisering side 1 - 810422/hko;
  1   359   
  1   359   <* felter i cqf_tabel *>
  1   360   cqf_lgd:=
  1   361   cqf_næste_tid:= 16;
  1   362   cqf_ok_tid   := 12;
  1   363   cqf_id       :=  8;
  1   364   cqf_fejl     :=  4;
  1   365   cqf_bus      :=  2;
  1   366   
  1   366   max_cqf:= 64;
  1   367   
  1   367   <* felter i opkaldsalarmtabel *>
  1   368   alarm_kmdo  := 2;
  1   369   alarm_tilst := 4;
  1   370   alarm_gtilst:= 6;
  1   371   alarm_lgd   := 8;
  1   372   alarm_start := 12;
  1   373   
  1   373   opk_alarm_tab_lgd:= 12;
  1   374   op_spool_postantal:= 16;
  1   375   op_spool_postlgd:= 64;
  1   376   
  1   376   
  1   376   \f

  1   376   message procedure radio_parameterinitialisering side 1 - 810601/hko;
  1   377   
  1   377       radio_giveup:= 1 shift 21 + 1 shift 9;
  1   378       opkaldskø_postlængde:= 10+op_maske_lgd;
  1   379       kanal_beskr_længde:= 12+op_maske_lgd+tv_maske_lgd;
  1   380       radio_op_længde:= 30*2;
  1   381       radio_pulje_størrelse:= 1+max_antal_taleveje;
  1   382   
  1   382   \f

  1   382   message vogntabel parameterinitialisering side 1 - 810309/cl;
  1   383   
  1   383   vt_op_længde:= data + 16; <* halvord *>
  1   384   
  1   384   if findfpparam(<:vtlogskift:>,true,ia) > 0 then
  1   385     vt_logskift:= ia(1) else vt_logskift:= -1;
  1   386   
  1   386   vt_log_aktiv:= (vt_logskift >= 0) and (vt_logskift < 240000);
  1   387   
  1   387 
  1   387     \f

  1   387     message filclaim, side 1 - 810202/cl;
  1   388     
  1   388     maxcoru:= maxcoru+6;
  1   389     maxsem:= maxsem+2;
  1   390     maxsemch:= maxsemch+6;
  1   391     \f

  1   391     message attention_claiming side 1 - 810318/hko;
  1   392     
  1   392     
  1   392         maxcoru:=maxcoru+1;
  1   393     
  1   393         max_op:=max_op +1
  1   394                        +max_antal_operatører
  1   395                        +max_antal_garageterminaler;
  1   396     
  1   396         max_nettoop:=maxnettoop+(data+att_op_længde)
  1   397                                 *(1+max_antal_operatører
  1   398                                    +max_antal_garageterminaler);
  1   399     
  1   399         max_procext:=max_procext+1;
  1   400     
  1   400         max_sem:= max_sem+1;
  1   401     
  1   401         max_semch:=maxsemch+1;
  1   402     
  1   402     
  1   402     \f

  1   402     message io_claiming side 1 - 810421/hko;
  1   403     
  1   403       max_coru:= max_coru 
  1   404                   + 1  <* hovedmodul io *>
  1   405                   + 1  <* io kommando *>
  1   406                   + 1  <* io operatørmeddelelser *>
  1   407                   + 1  <* io spontane meddelelser *>
  1   408                   + 1  <* io spoolkorutine *>
  1   409                   + 1  <* io tællernulstilling *>
  1   410                   ;
  1   411     
  1   411       max_semch:= max_semch 
  1   412                   + 1  <* cs_io *>
  1   413                   + 1  <* cs_io_komm *>
  1   414                   + 1  <* cs_io_fil  *>
  1   415                   + 1  <* cs_io_medd *>
  1   416                   + 1  <* cs_io_spool *>
  1   417                   + 1  <* cs_io_nulstil *>
  1   418                   ;
  1   419     
  1   419       max_sem:= max_sem
  1   420                 + 1  <* ss_io_spool_fulde *>
  1   421                 + 1  <* ss_io_spool_tomme *>
  1   422                 + 1; <* bs_zio_adgang *>
  1   423     
  1   423       max_op:=max_op
  1   424               + 1; <* fil-operation *>
  1   425     
  1   425       max_nettoop:=max_nettoop
  1   426               + (data+18); <* fil-operation *>
  1   427     
  1   427     \f

  1   427     message operatør_claiming side 1 - 810520/hko;
  1   428     
  1   428       max_coru:= max_coru +1 <* h_op *>
  1   429                           +1 <* alarmur *>
  1   430                           +1 <* opkaldsalarmer *>
  1   431                           +1 <* talevejsswitch *>
  1   432                           +1 <* tv_switch_adm *>
  1   433                           +1 <* tv_switch_input *>
  1   434                           +1 <* op_spool *>
  1   435                           +1 <* op_medd  *>
  1   436                           +1 <* op_cqftest *>
  1   437                           +max_antal_operatører;
  1   438       
  1   438       max_sem:=  1 <* bs_opk_alarm *>
  1   439                 +1 <* ss_op_spool_tomme *>
  1   440                 +1 <* ss_op_spool_fulde *>
  1   441                 +max_sem;
  1   442     
  1   442       max_semch:= max_semch +1 <* cs_op *>
  1   443                             +1 <* cs_op_retur *> 
  1   444                             +1 <* cs_opk_alarm_ur *>
  1   445                             +1 <* cs_opk_alarm_ur_ret *>
  1   446                             +1 <* cs_opk_alarm *>
  1   447                             +1 <* cs_talevejsswitch *>
  1   448                             +1 <* cs_tv_switch_adm *>
  1   449                             +1 <* cs_tvswitch_adgang *>
  1   450                             +1 <* cs_tvswitch_input *>
  1   451                             +1 <* cs_op_iomedd *>
  1   452                             +1 <* cs_op_spool *>
  1   453                             +1 <* cs_op_medd *>
  1   454                             +1 <* cs_cqf *>
  1   455                             +max_antal_operatører<* cs_operatør *>
  1   456                             +max_antal_operatører<* cs_op_fil *>;
  1   457     
  1   457       max_op:= max_op + 1 <* talevejsoperation *>
  1   458                       + 2 <* tv_switch_input *>
  1   459                       + 1 <* op_iomedd *>
  1   460                       + 1 <* opk_alarm_ur *>
  1   461                       + 1 <* op_spool_medd *>
  1   462                       + 1 <* op_cqftest *>
  1   463                       + max_antal_operatører;
  1   464     
  1   464       max_netto_op:= filoplængde*max_antal_operatører
  1   465                      + data+128 <* talevejsoperation *>
  1   466                      + 2*(data+256) <* tv_switch_input *>
  1   467                      + 60      <* op_iomedd *>
  1   468                      + data    <* opk_alarm_ur *>
  1   469                      + data+op_spool_postlgd <* op_spool_med *>
  1   470                      + 60      <* op_cqftest *>
  1   471                      + max_netto_op;
  1   472     
  1   472     \f

  1   472     message garage_claiming side 1 -810226/hko;
  1   473     
  1   473       max_coru:= max_coru +1
  1   474                           +max_antal_garageterminaler;
  1   475     
  1   475       max_semch:= max_semch +1
  1   476                             +max_antal_garageterminaler;
  1   477     
  1   477     \f

  1   477     message procedure radio_claiming side 1 - 810526/hko;
  1   478     
  1   478       max_coru:= max_coru
  1   479                    +1                         <* hovedmodul radio *>
  1   480                    +1                         <* opkaldskø_meddelelse *>
  1   481                    +1                         <* radio_adm *>
  1   482                    +max_antal_taleveje        <* radio *>
  1   483                    +2;                        <* radio ind/-ud*>
  1   484     
  1   484       max_semch:= max_semch
  1   485                    +1                         <* cs_rad *>
  1   486                    +max_antal_taleveje        <* cs_radio *>
  1   487                    +1                         <* cs_radio_pulje *>
  1   488                    +1                         <* cs_radio_kø *>
  1   489                    +1                         <* cs_radio_medd *>
  1   490                    +1                         <* cs_radio_adm *>
  1   491                    +2   ;                     <* cs_radio_ind/-ud *>
  1   492     
  1   492       max_sem:=
  1   493         +1  <* bs_mobil_opkald *>
  1   494         +1  <* bs_opkaldskø_adgang *>
  1   495         +max_antal_kanaler  <* ss_radio_aktiver *>
  1   496         +max_antal_kanaler  <* ss_samtale_nedlagt *>
  1   497         +max_antal_taleveje   <* bs_talevej_udkoblet *>
  1   498         +max_sem;
  1   499     
  1   499       max_op:=
  1   500          + radio_pulje_størrelse   <* radio_pulje_operationer *>
  1   501          + 1                       <* radio_medd *>
  1   502          + 1                       <* radio_adm *>
  1   503          + max_antal_taleveje      <* operationer for radio *>
  1   504          + 2                       <* operationer for radio_ind/-ud *>
  1   505          + max_op;
  1   506     
  1   506       max_netto_op:=
  1   507          + radio_pulje_størrelse * 60      <* radio_pulje_operationer *>
  1   508          + data + 6                        <* radio_medd *>
  1   509          + max_antal_taleveje              <* operationer for radio *>
  1   510            * (data + radio_op_længde)
  1   511          + data + radio_op_længde          <* operation for radio_adm *>
  1   512          + 2*(data + 64)                   <* operationer for radio_ind/-ud *>
  1   513          + max_netto_op;
  1   514     \f

  1   514     message vogntabel_claiming side 1 - 810413/cl;
  1   515     
  1   515     maxcoru:=  1          <* coroutine h_vogntabel (hovedmodulcoroutine) *>
  1   516              + 1          <* coroutine vt_opdater *>
  1   517              + 1          <* coroutine vt_tilstand *>
  1   518              + 1          <* coroutine vt_rapport *>
  1   519              + 1          <* coroutine vt_gruppe *>
  1   520              + 1          <* coroutine vt_spring *>
  1   521              + 1          <* coroutine vt_auto *>
  1   522              + 1          <* coroutine vt_log *>
  1   523              + maxcoru;
  1   524     
  1   524     maxsemch:= 1          <* cs_vt *>
  1   525              + 1          <* cs_vt_adgang *>
  1   526              + 1          <* cs_vt_logpool *>
  1   527              + 1          <* cs_vt_opd *>
  1   528              + 1          <* cs_vt_rap *>
  1   529              + 1          <* cs_vt_tilst *>
  1   530              + 1          <* cs_vtt_auto *>
  1   531              + 1          <* cs_vt_grp *>
  1   532              + 1          <* cs_vt_spring *>
  1   533              + 1          <* cs_vt_log *>
  1   534              + 5          <* cs_vt_filretur(coru) *>
  1   535              + maxsemch;
  1   536     
  1   536     maxop:=    1          <* vt_op *>
  1   537              + 2          <* vt_log_op *>
  1   538              + 6          <* vt_fil_op + radop *>
  1   539              + maxop;
  1   540     
  1   540     maxnettoop:= vt_op_længde * 3    <* vt_op + vt_log_op *>
  1   541                + 5*fil_op_længde
  1   542                + (if fil_op_længde>(data+20) then fil_op_længde else (data+20))
  1   543                + maxnettoop;
  1   544     
  1   544 \f

  1   544 
  1   544 algol list.off;
  1   545 message coroutinemonitor - 3 ;
  1   546 
  1   546   begin
  2   547 
  2   547     <* work variables - primarily used during initialization *>
  2   548     integer array field simref, semref, coruref, opref;
  2   549     integer proccount, corucount, messcount, cmi, cmj;
  2   550     integer array zoneia(1:20);
  2   551 
  2   551     <* field variables describing the format of basic entities *>
  2   552     integer field
  2   553       <* chain head *>
  2   554       next, prev,
  2   555       <* simple semaphore *>
  2   556       simvalue, simcoru,
  2   557       <* chained semaphore *>
  2   558       semop, semcoru,
  2   559       <* coroutine *>
  2   560       coruop, corutimerchain, corutimer, corupriority, coruident,
  2   561       <* operation head *>
  2   562       opnext, opsize;
  2   563 
  2   563 \f

  2   563 
  2   563 message coroutinemonitor - 4 ;
  2   564 
  2   564     boolean field
  2   565       corutypeset, corutestmask, optype;
  2   566     real starttime;
  2   567     long corustate;
  2   568 
  2   568     <* field variables used as queue identifiers (addresses) *>
  2   569     integer array field current, readyqueue, idlequeue, timerqueue;
  2   570 
  2   570     <* extensions (message- and process- extensions) *>
  2   571     integer array messref, messcode, messop (1:maxmessext);
  2   572     integer array procref, proccode, procop (1:maxprocext);
  2   573 
  2   573     <* core array used for accessing the core using addresses as field 
  2   574        variables (as delivered by the monitor functions)
  2   575     -  descriptor array 'd' in which all basic entities are allocated
  2   576        (except for extensions) *>
  2   577     integer array core (1:1), d (1:(4 <* readyqueue *> +
  2   578                                     4 <* idlequeue *> +
  2   579                                     4 <* timerqueue *> +
  2   580                                     maxcoru * corusize +
  2   581                                     maxsem * simsize +
  2   582                                     maxsemch * semsize +
  2   583                                     maxop * opheadsize +
  2   584                                     maxnettoop)/2);
  2   585 \f

  2   585 
  2   585 message coroutinemonitor - 5 ;
  2   586 
  2   586 
  2   586 
  2   586       <*************** initialization procedures ***************>
  2   587 
  2   587 
  2   587   
  2   587       procedure initchain (chainref);
  2   588       value chainref;
  2   589       integer array field chainref;
  2   590       begin
  3   591         integer array field cref;
  3   592         cref:= chainref;
  3   593         d.cref.next:= d.cref.prev:= cref;
  3   594       end;
  2   595 \f

  2   595 
  2   595 message coroutinemonitor - 6 ;
  2   596 
  2   596 
  2   596       <***** nextsem *****
  2   597 
  2   597       this procedure allocates and initializes the next simple semaphore in the
  2   598       pool of claimed semaphores.
  2   599       the procedure returns the identification (the address) of the semaphore to
  2   600       be used when calling 'signal', 'wait' and 'inspect'. *>
  2   601   
  2   601       integer procedure nextsem;
  2   602       begin
  3   603         nextsem:= simref;
  3   604         if simref >= firstsem then initerror(1, true);
  3   605         initchain(simref + simcoru);
  3   606         d.simref.simvalue:= 0;
  3   607         simref:= simref + simsize;
  3   608       end;
  2   609 
  2   609 
  2   609       <***** nextsemch *****
  2   610    
  2   610       this procedure allocates and initializes the next simple semaphore in the
  2   611       pool of claimed semaphores.
  2   612       the procedure returns the identification (the address) of the semaphore to
  2   613       be used when calling 'signalch', 'waitch' and 'inspectch'. *>
  2   614   
  2   614       integer procedure nextsemch;
  2   615       begin
  3   616         nextsemch:= semref;
  3   617         if semref >= firstop-4 then initerror(2, true);
  3   618         initchain(semref + semcoru);
  3   619         initchain(semref + semop);
  3   620         semref:= semref + semsize;
  3   621       end;
  2   622 \f

  2   622 
  2   622 message coroutinemonitor - 7 ;
  2   623 
  2   623 
  2   623       <***** nextcoru *****
  2   624 
  2   624       this procedure initializes the next coroutine description in the pool of
  2   625       claimed coroutine descriptions.
  2   626       at initialization is defined the priority (an integer value), an identi-
  2   627       fication (an integer value 0..8000) and a test pattern (a boolean). *>
  2   628   
  2   628       integer procedure nextcoru(ident, priority, testmask);
  2   629       value ident, priority, testmask;
  2   630       integer ident, priority;
  2   631       boolean testmask;
  2   632       begin
  3   633         corucount:= corucount + 1;
  3   634         if corucount > maxcoru then initerror(3, true);
  3   635         nextcoru:= corucount;
  3   636         initchain(coruref + next);
  3   637         initchain(coruref + corutimerchain);
  3   638         initchain(coruref + coruop);
  3   639         d.coruref.corupriority:= priority;
  3   640         d.coruref.coruident:= ident * 1000 + corucount;
  3   641         d.coruref.corutypeset:= false;
  3   642         d.coruref.corutimer:= 0;
  3   643         d.coruref.corutestmask:= testmask;
  3   644         linkprio(coruref, readyqueue);
  3   645         current:= coruref;
  3   646         coruref:= coruref + corusize;
  3   647       end;
  2   648 \f

  2   648 
  2   648 message coroutinemonitor - 8 ;
  2   649 
  2   649 
  2   649       <***** nextop *****
  2   650 
  2   650       this procedure initializes the next operation in the pool of claimed ope-
  2   651       rations (heads and buffers).
  2   652       the head is allocated and immediately following the head is allocated 'size'
  2   653       halfwords forming the operation buffer.
  2   654       the procedure returns an identification of the operation (an address) and
  2   655       in case this address is held in a field variable 'op', the buffer area may
  2   656       be accessed as:  d.op(1), d.op(2), d.op(3) ...  *>
  2   657   
  2   657       integer procedure nextop (size);
  2   658       value size;
  2   659       integer size;
  2   660       begin
  3   661         nextop:= opref;
  3   662         if opref >= optop then initerror(4, true);
  3   663         initchain(opref + next);
  3   664         d.opref.opsize:= size;
  3   665         opref:= opref + size + opheadsize;
  3   666       end;
  2   667 \f

  2   667 
  2   667 message coroutinemonitor - 9 ;
  2   668 
  2   668 
  2   668       <***** nextprocext *****
  2   669 
  2   669       this procedure initializes the next process extension in the series of
  2   670       claimed process extensions.
  2   671       the process description address is put into the process extension and the
  2   672       state of the extension is initialized to be closed. *>
  2   673   
  2   673       integer procedure nextprocext (processref);
  2   674       value processref;
  2   675       integer processref;
  2   676       begin
  3   677         proccount:= proccount + 1;
  3   678         if proccount >= maxprocext then initerror(5, true);
  3   679         nextprocext:= proccount;
  3   680         procref(proccount):= processref;
  3   681         proccode(proccount):= 1 shift 12;
  3   682       end;
  2   683 \f

  2   683 
  2   683 message coroutinemonitor - 10 ;
  2   684 
  2   684 
  2   684       <***** initerror *****
  2   685 
  2   685       this procedure is activated in case the initialized set of resources does
  2   686       not match the claimed set.
  2   687       in case more resources are claimed than used, a warning is written,
  2   688       in case too few resources are claimed, an error message is written and
  2   689       the execution is terminated. *>
  2   690 
  2   690       procedure initerror (resource, exceeded);
  2   691       value resource, exceeded;
  2   692       integer resource; boolean exceeded;
  2   693       begin
  3   694         write(out, false add 10, 1,
  3   695            if exceeded then <:more :> else <:less :>,
  3   696            case resource of (
  3   697              <:simple semaphores:>,
  3   698              <:chained semaphores:>,
  3   699              <:coroutines:>,
  3   700              <:operations:>, 
  3   701              <:process extensions:>),
  3   702              <: initialized than claimed:>,
  3   703            false add 10, 1);
  3   704         if exceeded then goto dump;
  3   705       end;
  2   706 
  2   706 
  2   706       <***** stackclaim *****
  2   707 
  2   707       this procedure is used by a coroutine from its first activation to it
  2   708       arrives its first waiting point. the procedure is used to claim an addi-
  2   709       tional amount of stack space. this must be done because the maximum
  2   710       stack space for a coroutine is set to be the max amount used during its
  2   711       very first activation. *>
  2   712 
  2   712 
  2   712       procedure stackclaim (size);
  2   713       value size; integer size;
  2   714       begin
  3   715         boolean array stackspace (1:size);
  3   716       end;
  2   717 algol list.on;
  2   718   
  2   718     \f

  2   718     message sys_erklæringer side 1 - 810406/cl,hko;
  2   719     
  2   719     zone
  2   720       zdummy(1,1,stderror),
  2   721       zrl(128,1,stderror),
  2   722       zbillede(128,1,stderror);
  2   723     
  2   723     real array 
  2   724       fejltekst(1:max_antal_fejltekster);
  2   725     
  2   725     real 
  2   726       systællere_nulstillet;
  2   727     
  2   727     integer
  2   728       nulstil_systællere,
  2   729       top_bpl_gruppe;
  2   730     
  2   730     integer array
  2   731       ingen_operatører, alle_operatører(1:(op_maske_lgd//2)),
  2   732       ingen_taleveje, alle_taleveje(1:(tv_maske_lgd//2)),
  2   733       bpl_def(1:(128*(op_maske_lgd//2))),
  2   734       bpl_tilst(0:127,1:2),
  2   735       operatør_stop(0:max_antal_operatører,0:3),
  2   736       område_id(1:max_antal_områder,1:2),
  2   737       pabx_id(1:max_antal_pabx),
  2   738       radio_id(1:max_antal_radiokanaler),
  2   739       kanal_id(1:max_antal_kanaler),
  2   740       opkalds_tællere(1:(max_antal_områder*5)),     <* maxantal <= 16 *>
  2   741       operatør_tællere(1:(max_antal_operatører*5)); <* maxantal <= 32 *>
  2   742     
  2   742     boolean array
  2   743       operatør_auto_include(1:max_antal_operatører),
  2   744       garage_auto_include(1:max_antal_garageterminaler);
  2   745     
  2   745     long array
  2   746       terminal_navn(1:(2*max_antal_operatører)),
  2   747       garage_terminal_navn(1:(2*max_antal_garageterminaler)),
  2   748       bpl_navn(0:127),
  2   749       område_navn(1:max_antal_områder),
  2   750       kanal_navn(1:max_antal_kanaler);
  2   751     \f

  2   751     message procedure findområde side 1 - 880901/cl;
  2   752     
  2   752     integer procedure find_bpl(navn);
  2   753       value                    navn;
  2   754       long                     navn;
  2   755     begin
  3   756       integer i;
  3   757     
  3   757       find_bpl:= 0;
  3   758       for i:= 0 step 1 until 127 do
  3   759         if navn = bpl_navn(i) then find_bpl:= i;
  3   760     end;
  2   761     
  2   761     integer procedure findområde(omr);
  2   762       value                      omr;
  2   763       integer                    omr;
  2   764     begin
  3   765       integer i;
  3   766     
  3   766       if omr = '*' shift 16 then findområde:= -1 else
  3   767       begin
  4   768         findområde:= 0;
  4   769         for i:= 1 step 1 until max_antal_områder do
  4   770           if (extend omr) shift 24=område_navn(i) then findområde:= i;
  4   771       end;
  3   772     end;
  2   773     \f

  2   773     message procedure tæl_opkald side 1 - 880926/cl;
  2   774     
  2   774     procedure opdater_tf_systællere;
  2   775     begin
  3   776       integer zi;
  3   777       integer array field iaf;
  3   778       real field rf;
  3   779     
  3   779       disable begin
  4   780         skrivfil(tf_systællere,1,zi);
  4   781         rf:= iaf:= 4;
  4   782         fil(zi).rf:= systællere_nulstillet;
  4   783         fil(zi).iaf(1):= nulstil_systællere;
  4   784         iaf:= 32;
  4   785         tofrom(fil(zi).iaf,opkalds_tællere,max_antal_områder*10);
  4   786         iaf:= 192;
  4   787         tofrom(fil(zi).iaf,operatør_tællere,max_antal_operatører*10);
  4   788         setposition(fil(zi),0,0);
  4   789       end;
  3   790     end;
  2   791     
  2   791     procedure tæl_opkald(område,type);
  2   792       value              område,type;
  2   793       integer            område,type;
  2   794     begin
  3   795       increase(opkalds_tællere((område-1)*5+type));
  3   796       disable opdater_tf_systællere;
  3   797     end;
  2   798                    
  2   798     procedure tæl_opkald_pr_operatør(operatør,type);
  2   799       value                          operatør,type;
  2   800       integer                        operatør,type;
  2   801     begin
  3   802       increase(operatør_tællere((operatør-1)*5+type));
  3   803       disable opdater_tf_systællere;
  3   804     end;
  2   805     
  2   805     procedure skriv_opkaldstællere(z);
  2   806       zone                         z;
  2   807     begin
  3   808       integer omr,typ,rpc;
  3   809       integer array ialt(1:5);
  3   810       real r;
  3   811     
  3   811       for typ:= 1 step 1 until 5 do ialt(typ):= 0;
  3   812       write(z,"nl",2,<:+++++ opkaldstællere +++++:>,"nl",2,
  3   813         <:omr          ud ind-alm ind-nød ej.forb optaget:>,"nl",1);
  3   814       for omr:= 1 step 1 until max_antal_områder do
  3   815       begin
  4   816         write(z,true,6,string område_navn(omr),":",1);
  4   817         for typ:= 1 step 1 until 5 do
  4   818         begin
  5   819           write(z,<< ddddddd>,opkalds_tællere((omr-1)*5+typ));
  5   820           ialt(typ):= ialt(typ)+opkalds_tællere((omr-1)*5+typ);
  5   821         end;
  4   822         outchar(z,'nl');
  4   823       end;
  3   824       write(z,"-",47,"nl",1,<:I ALT ::>);
  3   825       for typ:= 1 step 1 until 5 do
  3   826         write(z,<< ddddddd>,ialt(typ));
  3   827       outchar(z,'nl');
  3   828     
  3   828       for typ:= 1 step 1 until 5 do ialt(typ):= 0;
  3   829       write(z,"nl",1,        
  3   830         <:oper.        ud ind-alm ind-nød ej.forb optaget:>,"nl",1);
  3   831       for omr:= 1 step 1 until max_antal_operatører do
  3   832       begin
  4   833         if bpl_navn(omr)=long<::> then 
  4   834           write(z,"sp",6-write(z,<:op:>,<<d>,omr),":",1)
  4   835         else
  4   836           write(z,true,6,string bpl_navn(omr),":",1);
  4   837         for typ:= 1 step 1 until 5 do
  4   838         begin
  5   839           write(z,<< ddddddd>,operatør_tællere((omr-1)*5+typ));
  5   840           ialt(typ):= ialt(typ)+operatør_tællere((omr-1)*5+typ);
  5   841         end;
  4   842         outchar(z,'nl');
  4   843       end;
  3   844       write(z,"-",47,"nl",1,<:I ALT ::>);
  3   845       for typ:= 1 step 1 until 5 do
  3   846         write(z,<< ddddddd>,ialt(typ));
  3   847       outchar(z,'nl');
  3   848       
  3   848       rpc:= replace_char(1,':');
  3   849       write(z,"nl",1,<:nulstilles :>);
  3   850       if nulstil_systællere = (-1) then write(z,<:ikke automatisk:>,"nl",1)
  3   851       else write(z,<:automatisk kl. :>,<<zd dd dd>,nulstil_systællere,"nl",1);
  3   852       replace_char(1,'.');
  3   853       write(z,<:nulstillet  d. :>,<<zd dd dd>,
  3   854         systime(4,systællere_nulstillet,r)," ",1);
  3   855       replace_char(1,':');
  3   856       write(z,<<zd dd dd>,r,"nl",1);
  3   857       replace_char(1,rpc);
  3   858     end;
  2   859     \f

  2   859     message procedure start_operation side 1 - 810521/hko;
  2   860     
  2   860       procedure start_operation(op_ref,kor,ret_sem,kode);
  2   861         value                          kor,ret_sem,kode;
  2   862         integer array field     op_ref;
  2   863         integer                        kor,ret_sem,kode;
  2   864     <*
  2   865           op_ref:  kald, reference til operation
  2   866     
  2   866           kor:     kald, kilde= hovedmodulnr*100 +løbenr
  2   867                               = korutineident.
  2   868           ret_sem: kald, retursemafor
  2   869     
  2   869           kode:    kald, suppl shift 12 + operationskode
  2   870     
  2   870           proceduren initialiserer  en operations hoved med
  2   871           parameterværdierne samt tidfeltet med aktueltid.
  2   872           resultatfelt og datafelter nulstilles.
  2   873     
  2   873     *>
  2   874         begin
  3   875           integer i;
  3   876           d.op_ref.kilde:= kor;
  3   877           systime(1,0,d.op_ref.tid);
  3   878           d.op_ref.retur:=ret_sem;
  3   879           d.op_ref.op_kode:=kode;
  3   880           d.op_ref.resultat:=0;
  3   881           for i:=(d.op_ref.opsize-data)//2 step -1 until 1 do
  3   882             d.op_ref.data(i):=0;
  3   883         end start_operation;
  2   884     \f

  2   884     message procedure afslut_operation  side 1 - 810331/hko;
  2   885     
  2   885     procedure afslut_operation(op_ref,sem);
  2   886       value                    op_ref,sem;
  2   887       integer                  op_ref,sem;
  2   888       begin
  3   889         integer array field op;
  3   890         op:=op_ref;
  3   891         if sem>0 then signal_ch(sem,op,d.op.optype) else
  3   892         if sem=-1 then signal_ch(d.op.retur,op,d.op.optype) else
  3   893         ;
  3   894       end afslut_operation;
  2   895     \f

  2   895     message procedure fejlreaktion - side 1 - 810424/cl,hko;
  2   896     
  2   896     procedure fejlreaktion(nr,værdi,str,måde);
  2   897       value nr,værdi,måde;
  2   898       integer nr,værdi,måde;
  2   899       string str;
  2   900     begin
  3   901     disable begin
  4   902       write(out,<:<10>!!! :>);
  4   903       if nr>0 and nr <=max_antal_fejltekster then
  4   904           write(out,string fejltekst(nr))
  4   905       else write(out,<:fejl nr.:>,nr);
  4   906       outchar(out,'sp');
  4   907       if måde shift (-12) extract 2=1 then
  4   908         outintbits(out,værdi)
  4   909       else
  4   910       if måde shift (-12) extract 2=2 then
  4   911         write(out,<:":>,false add værdi,1,<:":>)
  4   912       else
  4   913         write(out,værdi);
  4   914       write(out,"sp",1,str,"nl",1,<< zddddd>,systime(5,0,r),r,
  4   915                 <: korutine nr=:>,<<d>, abs curr_coruno,
  4   916                 <: ident=:>,curr_coruid,"nl",0);
  4   917       if testbit27 and måde extract 12=1 then
  4   918         trace(1);
  4   919       ud;
  4   920     end;<*disable*>
  3   921       if måde extract 12 =2 then trapmode:=1 shift 13;
  3   922       if måde extract 12= 0 then trap(-1)
  3   923       else if måde extract 12 = 2 then trap(-2);
  3   924     end fejlreaktion;
  2   925     
  2   925     procedure trace(n);
  2   926       value         n;
  2   927       integer       n;
  2   928       begin
  3   929         trap(finis);
  3   930         trap(n);
  3   931     finis:
  3   932       end trace;
  2   933     \f

  2   933     message procedure overvåget side 1 - 810413/cl;
  2   934     
  2   934     boolean procedure overvåget;
  2   935     begin
  3   936       disable begin
  4   937         integer i,måde;
  4   938         integer array field cor;
  4   939         integer array ia(1:12);
  4   940     
  4   940         i:= system(12,0,ia);
  4   941         if i > 0 then
  4   942         begin
  5   943           i:= system(12,1,ia);
  5   944           måde:= ia(3);
  5   945         end
  4   946         else måde:= 0;
  4   947     
  4   947         if måde<>0 then
  4   948         begin
  5   949           cor:= coroutine(abs ia(3));
  5   950           overvåget:= d.cor.corutestmask shift (-11);
  5   951         end
  4   952         else overvåget:= cl_overvåget;
  4   953       end;
  3   954     end;
  2   955     \f

  2   955     message procedure antal_bits_ia side 1 - 940424/cl;
  2   956     
  2   956     integer procedure antal_bits_ia(ia,n,ø);
  2   957       value                            n,ø;
  2   958       integer array                 ia;
  2   959       integer                          n,ø;
  2   960     begin
  3   961       integer i, ant;
  3   962     
  3   962       ant:= 0;
  3   963       for i:= n step 1 until ø do
  3   964         if læsbit_ia(ia,i) then ant:= ant+1;
  3   965     end;
  2   966     
  2   966     message procedure trunk_til_omr side 1 - 881006/cl;
  2   967     
  2   967     integer procedure trunk_til_omr(trunk);
  2   968       value trunk; integer trunk;
  2   969     begin
  3   970       integer i,j;
  3   971     
  3   971       j:=0;
  3   972       for i:= 1 step 1 until max_antal_områder do
  3   973         if område_id(i,2) extract 12 = trunk extract 12 then j:=i;
  3   974       trunk_til_omr:=j;
  3   975     end;
  2   976     
  2   976     integer procedure omr_til_trunk(omr);
  2   977       value omr; integer omr;
  2   978     begin
  3   979       omr_til_trunk:= område_id(omr,2) extract 12;
  3   980     end;
  2   981     
  2   981     integer procedure port_til_omr(port);
  2   982       value port; integer port;
  2   983     begin
  3   984       if port shift (-6) extract 6 = 2 then
  3   985         port_til_omr:= pabx_id(port extract 6)
  3   986       else
  3   987       if port shift (-6) extract 6 = 3 then
  3   988         port_til_omr:= radio_id(port extract 6)
  3   989       else
  3   990         port_til_omr:= 0;
  3   991     end;
  2   992     
  2   992     integer procedure kanal_til_port(kanal);
  2   993       value kanal; integer kanal;
  2   994     begin
  3   995       kanal_til_port:= kanal_id(kanal) shift (-5) extract 3 shift 6 +
  3   996                        kanal_id(kanal) extract 5;
  3   997     end;
  2   998     
  2   998     integer procedure port_til_kanal(port);
  2   999       value port; integer port;
  2  1000     begin
  3  1001       integer i,j;
  3  1002     
  3  1002       j:=0;
  3  1003       for i:= 1 step 1 until max_antal_kanaler do
  3  1004         if kanal_id(i) = port shift (-6) shift 5 + port extract 5 then j:=i;
  3  1005       port_til_kanal:= j;
  3  1006     end;
  2  1007     
  2  1007     integer procedure kanal_til_omr(kanal);
  2  1008       value kanal; integer kanal;
  2  1009     begin
  3  1010       kanal_til_omr:= port_til_omr( kanal_til_port(kanal) );
  3  1011     end;
  2  1012     
  2  1012     \f

  2  1012     message procedure out_xxx_bits side 1 - 810406/cl;
  2  1013     
  2  1013     procedure outboolbits(zud,b);
  2  1014       value                   b;
  2  1015       zone                zud;
  2  1016       boolean                 b;
  2  1017     begin
  3  1018       integer i;
  3  1019     
  3  1019       for i:= -11 step 1 until 0 do
  3  1020       outchar(zud,if b shift i then '1' else '.');
  3  1021     end;
  2  1022     
  2  1022     procedure outintbits(zud,j);
  2  1023       value                  j;
  2  1024       zone               zud;
  2  1025       integer                j;
  2  1026     begin
  3  1027       integer i;
  3  1028     
  3  1028       for i:= -23 step 1 until 0 do
  3  1029       begin
  4  1030         outchar(zud,if j shift i extract 1 = 1 then '1' else '.');
  4  1031         if i<>0 and abs(i) mod 6 = 0 then outchar(zud,'sp');
  4  1032       end;
  3  1033     end;
  2  1034     
  2  1034     procedure outintbits_ia(zud,ia,n,ø);
  2  1035       value                        n,ø;
  2  1036       zone                  zud;
  2  1037       integer array             ia;
  2  1038       integer                      n,ø;
  2  1039     begin
  3  1040       integer i;
  3  1041     
  3  1041       for i:= n step 1 until ø do
  3  1042       begin
  4  1043         outintbits(zud,ia(i));
  4  1044         outchar(zud,'nl');
  4  1045       end;
  3  1046     end;
  2  1047                          
  2  1047     real procedure now;
  2  1048     begin
  3  1049       real f,r,r1; long l;
  3  1050     
  3  1050       systime(1,0,r); l:=r*100; f:=(l mod 100)/100;
  3  1051       systime(4,r,r1);
  3  1052       now:= r1+f;
  3  1053     end;
  2  1054     \f

  2  1054     message procedure skriv_id side 1 - 820301/cl;
  2  1055     
  2  1055     procedure skriv_id(z,id,lgd);
  2  1056       value              id,lgd;
  2  1057       integer            id,lgd;
  2  1058       zone             z;
  2  1059     begin
  3  1060       integer type,p,li,lø,bo;
  3  1061     
  3  1061       type:= id shift (-22);
  3  1062       case type+1 of
  3  1063       begin
  4  1064         <* 1: bus *>
  4  1065         begin
  5  1066           p:= write(z,<<d>,id extract 14);
  5  1067           if id shift (-14) <> 0 then
  5  1068             p:= p + write(z,".",1,string bpl_navn(id shift (-14)));
  5  1069         end;
  4  1070     
  4  1070         <* 2: linie/løb *>
  4  1071         begin
  5  1072           li:= id shift (-12) extract 10;
  5  1073           bo:= id shift (-7) extract 5;
  5  1074           if bo<>0 then bo:= bo + 'A' - 1;
  5  1075           lø:= id extract 7;
  5  1076           p:= write(z,<<d>,li,false add bo,(bo<>0) extract 1,"/",1,lø);
  5  1077         end;
  4  1078     
  4  1078         <* 3: gruppe *>
  4  1079         begin
  5  1080           if id shift (-21) = 4 <* linie-gruppe *> then
  5  1081           begin
  6  1082             li:= id shift (-5) extract 10;
  6  1083             bo:= id extract 5;
  6  1084             if bo<>0 then bo:= bo + 'A' - 1;
  6  1085             p:= write(z,<<d>,li,false add bo,(bo<>0) extract 1);
  6  1086           end
  5  1087           else <* special-gruppe *>
  5  1088             p:= write(z,"G",1,<<d>,id extract 7);
  5  1089         end;
  4  1090     
  4  1090         <* 4: telefon *>
  4  1091         begin
  5  1092           bo:= id shift (-20) extract 2;
  5  1093           li:= id extract 20;
  5  1094           case bo+1 of
  5  1095           begin
  6  1096             p:= write(z,string kanalnavn(li));
  6  1097             p:= write(z,<:K*:>);
  6  1098             p:= write(z,<:OMR :>,string områdenavn(li));
  6  1099             p:= write(z,<:OMR*:>);
  6  1100           end;
  5  1101         end;
  4  1102       end case;
  3  1103       write(z,"sp",lgd-p);
  3  1104     end skriv_id;
  2  1105     <*+3*>
  2  1106     \f

  2  1106     message skriv_new_sem side 1 - 810520/cl;
  2  1107     
  2  1107     procedure skriv_new_sem(z,type,ref,navn);
  2  1108       value                   type,ref;
  2  1109       zone                  z;
  2  1110       integer                 type,ref;
  2  1111       string                           navn;
  2  1112     <* skriver en identifikation af en semafor 'ref' i zonen z.
  2  1113     
  2  1113         type:       1=binær sem
  2  1114                     2=simpel sem
  2  1115                     3=kædet sem
  2  1116     
  2  1116         ref:        semaforreference
  2  1117     
  2  1117         navn:       semafornavn, max 18 tegn
  2  1118     *>
  2  1119     begin
  3  1120       disable if testbit29 then
  3  1121         write(z,"nl",1,"sp",26*(type-1),case type of(<:bs:>,<:ss:>,<:cs:>),
  3  1122           true,5,<<zddd>,ref,true,19,navn);
  3  1123     end;
  2  1124     \f

  2  1124     message procedure skriv_newactivity  side 1 - 810520/hko/cl;
  2  1125     
  2  1125     <**>  procedure skriv_newactivity(zud,actno,cause);
  2  1126     <**>    value                         actno,cause;
  2  1127     <**>    zone                      zud;
  2  1128     <**>    integer                       actno,cause;
  2  1129     <**>    begin
  3  1130     <*+2*>
  3  1131     <**>      if testbit28 then
  3  1132     <**>      begin integer array field cor;
  4  1133     <**>        cor:= coroutine(actno);
  4  1134     <**>        write(zud,<:  coroutine::>,<< dd>,actno,<:  ident::>,
  4  1135     <**>          << zdd>,d.cor.coruident//1000);
  4  1136     <**>      end;
  3  1137     <**>      if -, testbit23 then goto skriv_newact_slut;
  3  1138     <*-2*>
  3  1139     <**>      write(zud,"nl",1,<:newactivity(:>,<<d>,actno,
  3  1140     <**>                <:) cause=:>,<<-d>,cause);
  3  1141     <**>      if cause<1 then write(zud,<: !!!:>);
  3  1142     <**>      skriv_coru(zud,actno);
  3  1143     <**> skriv_newact_slut:
  3  1144     <**>    end skriv_newactivity;
  2  1145     <*-3*>
  2  1146     <*+99*>
  2  1147     \f

  2  1147     message procedure skriv_activity  side 1 - 810313/hko;
  2  1148     
  2  1148     <**> procedure skriv_activity(zud,actno);
  2  1149     <**>    value                     actno;
  2  1150     <**>    zone                  zud;
  2  1151     <**>    integer                     actno;
  2  1152     <**>    begin
  3  1153     <**>      integer i;
  3  1154     <**>      integer array iact(1:12);
  3  1155     <**>
  3  1156     <**>      i:=system(12,actno,iact);
  3  1157     <**>      write(zud,"nl",1,<:  activity(:>,<<d>,actno,<:) af :>,i,"sp",1,
  3  1158     <**>                if i=0 then <:neutral:> else (case sign(iact(3))+2 of
  3  1159     <**>                (<:disable:>,<:monitor:>,<:activity:>)),<: mode:>);
  3  1160     <**>      if i>0 and actno>0 and actno<=i then
  3  1161     <**>      begin
  4  1162     <**>        write(zud,"nl",1,"sp",4,<:tilstand= :>,case iact(8)+1 of
  4  1163     <**>                  (<:tom:>,<:passivate:>,
  4  1164     <**>                   <:implicit passivate:>,<:activate:>));
  4  1165     <**>        if iact(1)<>0 then
  4  1166     <**>         write(zud,<: ventende på message:>,iact(1));
  4  1167     <**>        if iact(7)>0 then
  4  1168     <**>          write(zud,"nl",1,"sp",4,<:virtuel stak::>,iact(7),"sp",2,
  4  1169     <**>                    <:hovedlager stak benyttes af activity(:>,<<d>,
  4  1170     <**>                    iact(2));
  4  1171     <**>        write(zud,"nl",1,"sp",4,<:stak(top,bund,sidst,csr,cza)=:>,
  4  1172     <**>                  iact(4),iact(5),iact(6),iact(10),iact(11));
  4  1173     <**>        if iact(9)<> 1 shift 22 then
  4  1174     <**>           write(zud,"nl",1,"sp",4,<:'head of zonechain'=:>,iact(9));
  4  1175     <**>         write(zud,"nl",1,"sp",4,<:'trap chain'=:>,iact(12));
  4  1176     <**>       end;
  3  1177     <**>     end skriv_activity
  2  1178     <*-99*>
  2  1179     <*+98*>
  2  1180     \f

  2  1180     message procedure identificer side 1 - 810520/cl;
  2  1181     
  2  1181     procedure identificer(z);
  2  1182       zone                z;
  2  1183     begin
  3  1184     disable write(z,<:coroutine::>,<< dd>,curr_coruno,
  3  1185               <:  ident::>,<< zdd >,curr_coruid);
  3  1186     end;
  2  1187     \f

  2  1187     message procedure skriv_coru  side 1 - 810317/cl;
  2  1188     
  2  1188     <**> procedure skriv_coru(zud,cor_no);
  2  1189     <**>   value                  cor_no;
  2  1190     <**>   zone               zud;
  2  1191     <**>   integer                cor_no;
  2  1192     <**> begin
  3  1193     <**>   integer i;
  3  1194     <**>   integer array field cor;
  3  1195     <**>
  3  1196     <**>
  3  1197     <**>   write(zud,"nl",1,<:  coroutine: :>,<<d>,cor_no);
  3  1198     <**>
  3  1199     <**>   cor:= coroutine(cor_no);
  3  1200     <**>   if cor = -1 then
  3  1201     <**>     write(zud,<: eksisterer ikke !!!:>)
  3  1202     <**>   else
  3  1203     <**>   begin
  4  1204     <**>     write(zud,<:;      ident = :>,<<zdd>,d.cor.coruident//1000,
  4  1205     <**>       <:      refbyte: :>,<<d>,cor,"nl",1,
  4  1206     <**>       <:    prev:             :>,<<dddd>,d.cor.prev,"nl",1,
  4  1207     <**>       <:    next:             :>,d.cor.next,"nl",1,
  4  1208     <**>       <:    timerchain.prev:  :>,d.cor(corutimerchain//2-1),"nl",1,
  4  1209     <**>       <:    timerchain.next:  :>,d.cor.corutimerchain,"nl",1,
  4  1210     <**>       <:    opchain.prev:     :>,d.cor(coruop//2-1),"nl",1,
  4  1211     <**>       <:    opchain.next:     :>,d.cor.coruop,"nl",1,
  4  1212     <**>       <:    timer:            :>,d.cor.corutimer,"nl",1,
  4  1213     <**>       <:    priority:         :>,d.cor.corupriority,"nl",1,
  4  1214     <**>       <:    typeset:          :>);
  4  1215     <**>     for i:= -11 step 1 until 0 do
  4  1216     <**>       write(zud,if d.cor.corutypeset shift i then <:1:> else <:.:>);
  4  1217     <**>     write(zud,"nl",1,<:    testmask:         :>);
  4  1218     <**>     for i:= -11 step 1 until 0 do
  4  1219     <**>       write(zud,if d.cor.corutestmask shift i then <:1:> else <:.:>);
  4  1220     <*+99*>
  4  1221     <**>     skriv_activity(zud,cor_no);
  4  1222     <*-99*>
  4  1223     <**>   end;
  3  1224     <**> end skriv_coru;
  2  1225     <*-98*>
  2  1226     <*+98*>
  2  1227     \f

  2  1227     message procedure skriv_op side 1 - 810409/cl;
  2  1228     
  2  1228     <**> procedure skriv_op(zud,opref);
  2  1229     <**>   value                opref;
  2  1230     <**>   integer              opref;
  2  1231     <**>   zone             zud;
  2  1232     <**> begin
  3  1233     <**>   integer array field op;
  3  1234     <**>   real array field raf;
  3  1235     <**>   integer lgd,i;
  3  1236     <**>   real t;
  3  1237     <**>
  3  1238     <**>   raf:= data;
  3  1239     <**>   op:= opref;
  3  1240     <**>   write(zud,"nl",1,<:op:>,<<d>,opref,<:::>);
  3  1241     <**>   if opref<first_op ! optop<=opref then
  3  1242     <**>   begin
  4  1243     <**>     write(zud,<:  !!! illegal reference !!!:>,"nl",1);
  4  1244     <**>     goto slut_skriv_op;
  4  1245     <**>   end;
  3  1246     <**>
  3  1247     <**>   lgd:= d.op.opsize;
  3  1248     <**>   write(zud,"nl",1,<<d>,
  3  1249     <**>     <:  opsize     :>,d.op.opsize,"nl",1,
  3  1250     <**>     <:  optype     :>);
  3  1251     <**>   for i:= -11 step 1 until 0 do
  3  1252     <**>     write(zud,if d.op.optype shift i then <:1:> else <:.:>);
  3  1253     <**>   write(zud,"nl",1,<<d>,
  3  1254     <**>     <:  prev       :>,d.op.prev,"nl",1,
  3  1255     <**>     <:  next       :>,d.op.next);
  3  1256     <**>   if lgd=0 then goto slut_skriv_op;
  3  1257     <**>   write(zud,"nl",1,<<d>,
  3  1258     <**>     <:  kilde      :>,d.op.kilde extract 10,"nl",1,
  3  1259     <**>     <:  tid        :>,<<zddddd>,systime(4,d.op.tid,t),<:.:>,t,"nl",1,<<d>,
  3  1260     <**>     <:  retur-sem  :>,if d.op.retur<>0 then <:cs:> else <:--:>,<<b>,
  3  1261                                d.op.retur,"nl",1,
  3  1262     <**>     <:  opkode     :>,<<b>,d.op.opkode shift (-12),"sp",1,<<d>,
  3  1263     <**>                       d.op.opkode extract 12,"nl",1,
  3  1264     <**>     <:  resultat   :>,d.op.resultat,"nl",2,
  3  1265     <**>     <:data::>);
  3  1266     <**>   skriv_hele(zud,d.op.raf,lgd-data,1278);
  3  1267     <**>slut_skriv_op:
  3  1268     <**> end skriv_op;
  2  1269     <*-98*>
  2  1270     \f

  2  1270     message procedure corutable side 1 - 810406/cl;
  2  1271     
  2  1271     procedure corutable(zud);
  2  1272       zone              zud;
  2  1273     begin
  3  1274       integer i;
  3  1275       integer array field cor;
  3  1276     
  3  1276       write(zud,"ff",1,<:***** coroutines *****:>,"nl",2,
  3  1277         <:no  id  ref   chain    timerch   opchain  timer pr:>,
  3  1278         <:    typeset    testmask:>,"nl",2);
  3  1279       for i:= 1 step 1 until maxcoru do
  3  1280       begin
  4  1281         cor:= coroutine(i);
  4  1282         write(zud,<<zd>,i,<< zdd>,d.cor.coruident//1000,<< dddd>,cor,
  4  1283           d.cor.prev,d.cor.next,d.cor(corutimerchain//2-1),
  4  1284           d.cor.corutimerchain,d.cor(coruop//2-1),d.cor.coruop,<< ddddd>,
  4  1285           d.cor.corutimer,<< dd>,d.cor.corupriority);
  4  1286         outchar(zud,'sp');
  4  1287         outboolbits(zud,d.cor.corutypeset);
  4  1288         outchar(zud,'sp');
  4  1289         outboolbits(zud,d.cor.corutestmask);
  4  1290         outchar(zud,'nl');
  4  1291       end;
  3  1292     end;
  2  1293     \f

  2  1293     message filglobal side 1 - 790302/jg;
  2  1294     
  2  1294     integer
  2  1295       dbantsf,dbkatsfri,
  2  1296       dbantb,dbkatbfri,
  2  1297       dbantef,dbkatefri,
  2  1298       dbsidstesz,dbsidstetz,
  2  1299       dbsegmax,
  2  1300       filskrevet,fillæst;
  2  1301     integer
  2  1302       bs_kats_fri, bs_kate_fri,
  2  1303       cs_opret_fil, cs_tilknyt_fil,
  2  1304       cs_frigiv_fil, cs_slet_fil,
  2  1305       cs_opret_spoolfil, cs_opret_eksternfil;
  2  1306     integer array
  2  1307       dbkatt(1:dbmaxtf,1:2),
  2  1308       dbkats(1:dbmaxsf,1:2),
  2  1309       dbkate(1:dbmaxef,1:6),
  2  1310       dbkatz(1:dbantez+dbantsz+dbanttz,1:2);
  2  1311     boolean array
  2  1312       dbkatb(1:dbmaxb);
  2  1313     zone array
  2  1314       fil(dbantez+dbantsz+dbanttz,128,1,stderror);
  2  1315     \f

  2  1315     message hentfildim side 1 - 781120/jg;
  2  1316     
  2  1316     
  2  1316     integer procedure hentfildim(fdim);
  2  1317     integer array fdim;
  2  1318     <*inddata filref i fdim(4),uddata fdim(1:8)*>
  2  1319     
  2  1319     begin integer ftype,fno,katf,i,s;
  3  1320       ftype:=fdim(4) shift (-10);
  3  1321       fno:=fdim(4) extract 10;
  3  1322       if ftype>3 or ftype=0 or fno=0 then
  3  1323         begin s:=1; goto udgang; end;
  3  1324       if fno>(case ftype of(dbmaxtf,dbmaxsf,dbmaxef)) then
  3  1325         begin s:=1; goto udgang end; <*paramfejl*>
  3  1326       katf:=case ftype of(dbkatt(fno,1),dbkats(fno,1),dbkate(fno,1));
  3  1327       if katf extract 9 = 0 then
  3  1328         begin s:=2; goto udgang end; <*tom indgang*>
  3  1329     
  3  1329       fdim(1):=katf shift (-9); <*post antal*>
  3  1330       fdim(2):=katf extract 9;  <*post længde*>
  3  1331       fdim(3):=case ftype of(   <*seg antal*>
  3  1332         dbkatt(fno,2) extract 18 - (if fno=1 then dbblokt else dbkatt(fno-1,2)
  3  1333         extract 18), dbkats(fno,2) shift (-12) extract 6 * dbbidlængde,
  3  1334         dbkate(fno,2) extract 18);
  3  1335       for i:=5 step 1 until 8 do <*externt filnavn*>
  3  1336         fdim(i):=if ftype=3 then dbkate(fno,i-2) else 0;
  3  1337       s:=0;
  3  1338     udgang:
  3  1339       hentfildim:=s;
  3  1340     <*+2*>
  3  1341     <*tz*> if testbit24 and overvåget then                         <*zt*>
  3  1342     <*tz*>   begin                                                 <*zt*>
  4  1343     <*tz*>     write(out,<:<10>hentfildim::>,s,<: :>);             <*zt*>
  4  1344     <*tz*>     pfdim(fdim);                                        <*zt*>
  4  1345     <*tz*>     ud;                                                 <*zt*>
  4  1346     <*tz*>   end;                                                  <*zt*>
  3  1347     <*-2*>
  3  1348     end hentfildim;
  2  1349     \f

  2  1349     message sætfildim side 1 - 780916/jg;
  2  1350     
  2  1350     integer procedure sætfildim(fdim);
  2  1351     integer array fdim;
  2  1352     <*inddata fdim(1:4), segant ingen effekt for tabel- og spoolfil*>
  2  1353     
  2  1353     begin
  3  1354       integer ftype,fno,katf,s,pl;
  3  1355       integer array gdim(1:8);
  3  1356       gdim(4):=fdim(4);
  3  1357       s:=hentfildim(gdim);
  3  1358       if s>0 then
  3  1359         goto udgang;
  3  1360       fno:=fdim(4) extract 10;
  3  1361       ftype:=fdim(4) shift (-10);
  3  1362       pl:= fdim(2) extract 12;
  3  1363       if fdim(1)<0 or pl<1 or pl>256 or fdim(3)<0 then
  3  1364         begin
  4  1365           s:=1; <*parameter fejl*>
  4  1366           goto udgang
  4  1367         end;
  3  1368       if fdim(1)>256//pl*fdim(3) then
  3  1369         begin
  4  1370           s:=1;
  4  1371           goto udgang;
  4  1372         end;
  3  1373     
  3  1373       <*segant*>
  3  1374       if ftype=3 then
  3  1375         begin integer segant;
  4  1376           segant:= fdim(3);
  4  1377           if segant > dbsegmax then
  4  1378             begin
  5  1379               s:=4; <*ingen plads*>
  5  1380               goto udgang
  5  1381             end;
  4  1382     \f

  4  1382     message sætfildim side 2 - 780916/jg;
  4  1383     
  4  1383     
  4  1383           if segant<>gdim(3) then
  4  1384             begin integer i,z,s; array field enavn; integer array tail(1:10);
  5  1385               z:=dbkate(fno,2) shift (-19); if z>0 then begin
  6  1386               if dbkatz(z,1) extract 12=fdim(4) then <*zone tilknyttet*>
  6  1387                 begin integer array zd(1:20);
  7  1388                   getzone6(fil(z),zd);
  7  1389                   if zd(13)>5 and zd(9)>=segant then
  7  1390                     begin <*dødt segment skal ikke udskrives*>
  8  1391                       zd(13):=5;
  8  1392                       setzone6(fil(z),zd)
  8  1393                     end
  7  1394                 end end;
  5  1395     \f

  5  1395     message sætfildim side 3 - 801031/jg;
  5  1396     
  5  1396     
  5  1396               enavn:=8;  <*ændr fil størrelse*>
  5  1397               i:=1;
  5  1398               open(zdummy,0,string gdim.enavn(increase(i)),0);
  5  1399               s:=monitor(42,zdummy,0,tail); <*lookup*>
  5  1400               if s>0 then
  5  1401                 fejlreaktion(1,s,<:lookup entry:>,0);
  5  1402               tail(1):=segant;
  5  1403               s:=monitor(44,zdummy,0,tail); <*change entry*>
  5  1404               close(zdummy,false);
  5  1405               if s<>0 then
  5  1406                 begin
  6  1407                 if s=6 then
  6  1408                   begin  <*ingen plads*>
  7  1409                     s:=4; goto udgang
  7  1410                   end
  6  1411                 else fejlreaktion(1,s,<:change entry:>,0);
  6  1412                 end;
  5  1413               dbkate(fno,2):=dbkate(fno,2) shift (-18) shift (18)
  5  1414                 add segant;
  5  1415     \f

  5  1415     message sætfildim side 4 - 801013/jg;
  5  1416     
  5  1416     
  5  1416             end;
  4  1417           fdim(3):=segant
  4  1418         end
  3  1419       else
  3  1420         if fdim(3)>gdim(3) then
  3  1421           begin
  4  1422             s:=4; <*altid ingen plads*>
  4  1423             goto udgang
  4  1424           end
  3  1425         else fdim(3):=gdim(3); <*samme længde*>
  3  1426       <*postantal,postlængde*>
  3  1427       katf:=fdim(1) shift 9  add pl;
  3  1428       case ftype of begin
  4  1429         dbkatt(fno,1):=katf;
  4  1430         dbkats(fno,1):=katf;
  4  1431         dbkate(fno,1):=katf end;
  3  1432     udgang:
  3  1433       sætfildim:=s;
  3  1434     <*+2*>
  3  1435     <*tz*> if testbit24 and overvåget then                          <*zt*>
  3  1436     <*tz*>   begin integer i;                                       <*zt*>
  4  1437     <*tz*>     write(out,<:<10>sætfildim::>,s,<: :>);               <*zt*>
  4  1438     <*tz*>     for i:=1 step 1 until 3 do gdim(i):=fdim(i);         <*zt*>
  4  1439     <*tz*>     pfdim(gdim);                                         <*zt*>
  4  1440     <*tz*>     ud;                                                  <*zt*>
  4  1441     <*tz*>   end;                                                   <*zt*>
  3  1442     <*-2*>
  3  1443     end sætfildim;
  2  1444     \f

  2  1444     message findfilenavn side 1 - 780916/jg;
  2  1445     
  2  1445     integer procedure findfilenavn(navn);
  2  1446     real array navn;
  2  1447     
  2  1447     begin
  3  1448       integer fno; array field enavn;
  3  1449       for fno:=1 step 1 until dbmaxef do
  3  1450        if dbkate(fno,1) extract 9>0 then <*optaget indgang*>
  3  1451           begin
  4  1452             enavn:=fno*12+4;
  4  1453             if navn(1)=dbkate.enavn(1) and
  4  1454                navn(2)=dbkate.enavn(2) then
  4  1455               begin
  5  1456                 findfilenavn:=fno;
  5  1457                 goto udgang
  5  1458               end
  4  1459           end;
  3  1460       findfilenavn:=0;
  3  1461     udgang:
  3  1462     end findfilenavn;
  2  1463     \f

  2  1463     message læsfil side 1 - 781120/jg;
  2  1464     
  2  1464     integer procedure læsfil(filref,postindex,zoneno);
  2  1465     value filref,postindex;
  2  1466     integer filref,postindex,zoneno;
  2  1467     <*+2*>
  2  1468     <*tz*> begin integer i,o,s;                                       <*zt*>
  3  1469     <*tz*> i:=fillæst;o:=filskrevet; s:=                              <*zt*>
  3  1470     <*-2*>
  3  1471     
  3  1471     læsfil:=tilgangfil(filref,postindex,zoneno,5);
  3  1472     
  3  1472     <*+2*>
  3  1473     <*tz*> if testbit24 and overvåget then                            <*zt*>
  3  1474     <*tz*>   begin                                                    <*zt*>
  4  1475     <*tz*>     write(out,<:<10>læsfil::>,s,filref,postindex,zoneno,   <*zt*>
  4  1476     <*tz*>     <: io::>,fillæst-i,filskrevet-o);ud;                   <*zt*>
  4  1477     <*tz*>   end;                                                     <*zt*>
  3  1478     <*tz*> end procedure;                                             <*zt*>
  2  1479     <*-2*>
  2  1480     \f

  2  1480     message skrivfil side 1 - 781120/jg;
  2  1481     
  2  1481     integer procedure skrivfil(filref,postindex,zoneno);
  2  1482     value filref,postindex;
  2  1483     integer filref,postindex,zoneno;
  2  1484     <*+2*>
  2  1485     <*tz*> begin integer i,o,s;                                       <*zt*>
  3  1486     <*tz*> i:=fillæst;o:=filskrevet; s:=                              <*zt*>
  3  1487     <*-2*>
  3  1488     
  3  1488     skrivfil:=tilgangfil(filref,postindex,zoneno,6);
  3  1489     
  3  1489     <*+2*>
  3  1490     <*tz*> if testbit24 and overvåget then                            <*zt*>
  3  1491     <*tz*>   begin                                                    <*zt*>
  4  1492     <*tz*>     write(out,<:<10>skrivfil::>,s,filref,postindex,zoneno, <*zt*>
  4  1493     <*tz*>     <: io::>,fillæst-i,filskrevet-o);ud;                   <*zt*>
  4  1494     <*tz*>   end;                                                     <*zt*>
  3  1495     <*tz*> end procedure;                                             <*zt*>
  2  1496     <*-2*>
  2  1497     \f

  2  1497     message modiffil side 1 - 781120/jg;
  2  1498     
  2  1498     integer procedure modiffil(filref,postindex,zoneno);
  2  1499     value filref,postindex;
  2  1500     integer filref,postindex,zoneno;
  2  1501     <*+2*>
  2  1502     <*tz*> begin integer i,o,s;                                       <*zt*>
  3  1503     <*tz*> i:=fillæst;o:=filskrevet; s:=                              <*zt*>
  3  1504     <*-2*>
  3  1505     
  3  1505     modiffil:=tilgangfil(filref,postindex,zoneno,7);
  3  1506     
  3  1506     <*+2*>
  3  1507     <*tz*> if testbit24 and overvåget then                            <*zt*>
  3  1508     <*tz*>   begin                                                    <*zt*>
  4  1509     <*tz*>     write(out,<:<10>modiffil::>,s,filref,postindex,zoneno, <*zt*>
  4  1510     <*tz*>     <: io::>,fillæst-i,filskrevet-o);ud;                   <*zt*>
  4  1511     <*tz*>   end;                                                     <*zt*>
  3  1512     <*tz*> end procedure;                                             <*zt*>
  2  1513     <*-2*>
  2  1514     \f

  2  1514     message tilgangfil side 1 - 781003/jg;
  2  1515     
  2  1515     integer procedure tilgangfil(filref,postindex,zoneno,operation);
  2  1516     value filref,postindex,operation;
  2  1517     integer filref,postindex,zoneno,operation;
  2  1518     <*proceduren kaldes fra læsfil,skrivfil og modiffil*>
  2  1519     
  2  1519     begin
  3  1520       integer ftype,fno,f,pl,pr,pps,seg,zno,zstate,katf,st;
  3  1521       integer array zd(1:20),fdim(1:8);
  3  1522     
  3  1522     
  3  1522     
  3  1522                 <*hent katalog*>
  3  1523     
  3  1523       fdim(4):=filref;
  3  1524       st:=hentfildim(fdim);
  3  1525       if st<>0 then
  3  1526         goto udgang; <*parameter fejl eller fil findes ikke*>
  3  1527       fno:=filref extract 10;
  3  1528       ftype:=filref shift (-10);
  3  1529       pl:=fdim(2);
  3  1530       katf:=case ftype of(dbkatt(fno,2),dbkats(fno,2),dbkate(fno,2));
  3  1531     \f

  3  1531     message tilgangfil side 2 - 781003/jg;
  3  1532     
  3  1532     
  3  1532     
  3  1532                 <*find segment adr og check postindex*>
  3  1533     
  3  1533       pps:=256//pl; <*poster pr segment*>
  3  1534       seg:=(postindex-1)//pps; <*relativt segment*>
  3  1535       pr:=(postindex-1) mod pps; <*post relativ til seg*>
  3  1536       if postindex <1 then
  3  1537         begin <*parameter fejl*>
  4  1538           st:=1;
  4  1539           goto udgang
  4  1540         end;
  3  1541       if seg>=fdim(3) then
  3  1542         begin <*post findes ikke*>
  4  1543           st:=3;
  4  1544           goto udgang
  4  1545         end;
  3  1546       case ftype of
  3  1547         begin <*find absolut segment*>
  4  1548     
  4  1548           <*tabelfil*>
  4  1549           seg:=seg+(if fno=1 then dbblokt else dbkatt(fno-1,2) extract 18);
  4  1550     
  4  1550           begin <*spoolfil*>
  5  1551             integer i,bidno;
  5  1552             bidno:=katf extract 12;
  5  1553             for i:=seg//dbbidlængde step -1 until 1 do
  5  1554               bidno:=dbkatb(bidno) extract 12;
  5  1555             seg:=(bidno-1)*dbbidlængde+seg mod dbbidlængde
  5  1556           end;
  4  1557     
  4  1557           <*extern fil,seg ok*>
  4  1558     
  4  1558         end case find abs seg;
  3  1559     \f

  3  1559     message tilgangfil side 3 - 801030/jg;
  3  1560     
  3  1560                 <*alloker zone*>
  3  1561     
  3  1561       zno:=katf shift(-19);
  3  1562       case ftype of begin
  4  1563     
  4  1563         begin <*tabelfil*>
  5  1564           integer førstetz;
  5  1565           førstetz:=dbkatz(dbsidstetz,2);
  5  1566           if zno=0 then
  5  1567             zno:=førstetz
  5  1568           else if dbkatz(zno,1)<>filref then
  5  1569             zno:=førstetz
  5  1570           else if zno <> førstetz and zno <> dbsidstetz then
  5  1571             begin integer z;
  6  1572               for z:=zno,dbkatz(z,2) while dbkatz(z,2)<>zno do;
  6  1573               dbkatz(z,2):=dbkatz(zno,2);
  6  1574               dbkatz(zno,2):=førstetz;
  6  1575               dbkatz(dbsidstetz,2):=zno;
  6  1576             end;
  5  1577           dbsidstetz:=zno
  5  1578         end;
  4  1579     \f

  4  1579     message tilgangfil side 4 - 801030/jg;
  4  1580     
  4  1580     
  4  1580         begin <*spoolfil*>
  5  1581           integer p,zslut,z;
  5  1582           if zno>0 then begin if dbkatz(zno,1) =filref then
  6  1583             goto udgangs end; <*strategi 1*>
  5  1584           p:=0;
  5  1585           zno:=dbsidstesz; <*strategi 4 hvis bedre ikke findes*>
  5  1586           zslut:= <*if dbantez>dbantef then 1 else*> dbantez+1;
  5  1587           for z:=dbantez+dbantsz step -1 until zslut do
  5  1588           begin integer zfref;
  6  1589             zfref:=dbkatz(z,1);
  6  1590             if zfref extract 10=0 then <*fri zone*>
  6  1591               begin <*strategi 2*>
  7  1592                 zno:=z;
  7  1593                 goto udgangs
  7  1594               end
  6  1595             else
  6  1596               if zfref shift (-10)=2 then
  6  1597                 begin <*zone tilknyttet spoolfil*>
  7  1598                   integer q;
  7  1599                   q:=dbkatz(z,2); <*prioritet*>
  7  1600                   if q>p then
  7  1601                     begin <*strategi 3*>
  8  1602                       p:=q;
  8  1603                       zno:=z
  8  1604                     end
  7  1605                 end;
  6  1606           end z;
  5  1607         udgangs:
  5  1608           if zno> dbantez then dbsidstesz:=zno;
  5  1609         end;
  4  1610     \f

  4  1610     message tilgangfil side 5 - 780916/jg;
  4  1611     
  4  1611         begin <*extern fil*>
  5  1612           integer z;
  5  1613           if zno=0 then
  5  1614             zno:=1 
  5  1615           else if dbkatz(zno,1) = filref then
  5  1616                  goto udgange; <*strategi  1*>
  5  1617           for z:=1 step 1 until dbantez do
  5  1618           begin integer zfref;
  6  1619             zfref:=dbkatz(z,1);
  6  1620             if zfref=0 then <*zone fri*>
  6  1621               begin zno:=z; goto udgange end <*strategi 2*>
  6  1622             else if zfref shift (-10) =2 then <*spoolfil*>
  6  1623                    zno:=z; <*strategi 3*>  <*else strategi 4-5*>
  6  1624           end z;
  5  1625         udgange:
  5  1626         end
  4  1627       end case alloker zone;
  3  1628     
  3  1628     
  3  1628     
  3  1628              <*åbn zone*>
  3  1629     
  3  1629       if zno<=dbantez then
  3  1630         begin <*extern zone;spool og tabel zoner altid åbne*>
  4  1631           integer zfref;
  4  1632           zfref:=dbkatz(zno,1);
  4  1633           if zfref<>0 and zfref<>filref and ftype=3 then
  4  1634                 begin <*luk hvis ny extern fil*>
  5  1635                   getzone6(fil(zno),zd);
  5  1636                   if zd(13)>5 then filskrevet:=filskrevet+1;
  5  1637                   zfref:=0;
  5  1638                   close(fil(zno),false); 
  5  1639                 end;
  4  1640           if zfref=0 then
  4  1641             begin <*åbn zone*>
  5  1642               array field enavn; integer i;
  5  1643               enavn:=4*2; i:=1;
  5  1644               open(fil(zno),4,case ftype-1 of(string dbsnavn(increase(i)),
  5  1645                 string fdim.enavn(increase(i))),0)
  5  1646             end
  4  1647         end;
  3  1648     \f

  3  1648     message tilgangfil side 6 - 780916/jg;
  3  1649     
  3  1649     
  3  1649     
  3  1649                 <*hent segment og sæt zone descriptor*>
  3  1650     
  3  1650       getzone6(fil(zno),zd);
  3  1651       zstate:=zd(13);
  3  1652       if zstate=0 or zd(9)<>seg then
  3  1653         begin <*positioner*>
  4  1654           if zstate>5 then
  4  1655             filskrevet:=filskrevet+1;
  4  1656           setposition(fil(zno),0,seg);
  4  1657           if -,(operation=6 and pr=0) then
  4  1658             begin <*læs seg medmindre op er skriv første post*>
  5  1659               inrec6(fil(zno),512);
  5  1660               fillæst:=fillæst+1
  5  1661             end;
  4  1662           zstate:=operation
  4  1663         end
  3  1664       else <*zstate:=max(operation,zone state)*>
  3  1665         if operation>zstate then
  3  1666           zstate:=operation;
  3  1667       zd(9):=seg;
  3  1668       zd(13):=zstate;
  3  1669       zd(16):=pl shift 1;
  3  1670       zd(14):=zd(19)+pr*zd(16);
  3  1671       setzone6(fil(zno),zd);
  3  1672     \f

  3  1672     message tilgangfil side 7 - 780916/jg;
  3  1673     
  3  1673     
  3  1673     
  3  1673              <*opdater kataloger*>
  3  1674     
  3  1674       katf:=zno shift 19 add (katf extract 19);
  3  1675       case ftype of
  3  1676         begin
  4  1677           dbkatt(fno,2):=katf;
  4  1678           dbkats(fno,2):=katf;
  4  1679           dbkate(fno,2):=katf
  4  1680         end;
  3  1681       dbkatz(zno,1):= filref;
  3  1682      if ftype=3 then dbkatz(zno,2):=0 else
  3  1683       <*if ftype=1 then allerede opd under zoneallokering*>
  3  1684       if ftype=2 then dbkatz(zno,2):= <*prioritet spoolfil*>
  3  1685         if zstate=5 then (if pr=pps-1 then 2 else 1)
  3  1686         else if zstate=6 and pr=pps-1 then 3 else 0;
  3  1687     
  3  1687     
  3  1687     
  3  1687                 <*udgang*>
  3  1688     
  3  1688     udgang:
  3  1689       if st=0 then
  3  1690         zoneno:=zno
  3  1691       else zoneno:=0; <*fejl*>
  3  1692       tilgangfil:=st;
  3  1693     end tilgangfil;
  2  1694     \f

  2  1694     
  2  1694     message pfilsystem side 1 - 781003/jg;
  2  1695     
  2  1695     procedure pfilparm(z);
  2  1696       zone z;
  2  1697     write(z,<:<10>dbantez=:>,dbantez,<: dbantsz=:>,dbantsz,<: dbanttz=:>,
  2  1698       dbanttz,<:<10>dbmaxtf=:>,dbmaxtf,<: dbblokt=:>,dbblokt,<: dbmaxsf=:>,dbmaxsf,
  2  1699       <:<10>dbmaxb=:>,dbmaxb,<:  dbbidlængde=:>,dbbidlængde,<:   dbbidmax=:>,
  2  1700       dbbidmax,<:<10>dbmaxef=:>,dbmaxef);
  2  1701     
  2  1701     procedure pfilglobal(z);
  2  1702       zone z;
  2  1703     write(z,<:<10>dbantsf=:>,dbantsf,<: dbkatsfri=:>,dbkatsfri,
  2  1704       <:<10>dbantb=:>,dbantb,<:  dbkatbfri=:>,dbkatbfri,
  2  1705       <:<10>dbantef=:>,dbantef,<: dbkatefri=:>,dbkatefri,
  2  1706       <:<10>dbsidstesz=:>,dbsidstesz,<: dbsidstetz=:>,dbsidstetz,
  2  1707       <:<10>filskrevet=:>,filskrevet,<: fillæst=:>,fillæst,
  2  1708       <:<10>dbsnavn=:>,dbsnavn,<: dbtnavn=:>,dbtnavn);
  2  1709     
  2  1709     
  2  1709     procedure pdbkate(z,i);
  2  1710     value i; integer i;
  2  1711       zone z;
  2  1712     begin integer j; array field navn;
  3  1713       navn:=i*12+4; j:=1;
  3  1714       write(z,<:<10>dbkate(:>,i,<:)=:>,
  3  1715       dbkate(i,1) shift (-9),
  3  1716       dbkate(i,1) extract 9,
  3  1717       dbkate(i,2) shift (-19),
  3  1718       dbkate(i,2) shift (-18) extract 1,
  3  1719       dbkate(i,2) extract 18,
  3  1720       <: :>,string dbkate.navn(increase(j)));
  3  1721     end;
  2  1722     \f

  2  1722     message pfilsystem side 2 - 781003/jg;
  2  1723     
  2  1723     
  2  1723     
  2  1723     procedure pdbkats(z,i);
  2  1724     value i; integer i;
  2  1725       zone z;
  2  1726     write(z,<:<10>dbkats(:>,i,<:)=:>,
  2  1727       dbkats(i,1) shift (-9),
  2  1728       dbkats(i,1) extract 9,
  2  1729       dbkats(i,2) shift (-19),
  2  1730       dbkats(i,2) shift (-18) extract 1,
  2  1731       dbkats(i,2) shift (-12) extract 6,
  2  1732       dbkats(i,2) extract 12);
  2  1733     
  2  1733     procedure pdbkatb(z,i);
  2  1734     value i;integer i;
  2  1735       zone z;
  2  1736     write(z,<:<10>dbkatb(:>,i,<:)=:>,
  2  1737       dbkatb(i) extract 12);
  2  1738     
  2  1738     procedure pdbkatt(z,i);
  2  1739     value i; integer i;
  2  1740       zone z;
  2  1741     write(z,<:<10>dbkatt(:>,i,<:)=:>,
  2  1742       dbkatt(i,1) shift (-9),
  2  1743       dbkatt(i,1) extract 9,
  2  1744       dbkatt(i,2) shift (-19),
  2  1745       dbkatt(i,2) shift (-18) extract 1,
  2  1746       dbkatt(i,2) extract 18);
  2  1747     
  2  1747     procedure pdbkatz(z,i);
  2  1748     value i; integer i;
  2  1749       zone z;
  2  1750     write(z,<:<10>dbkatz(:>,i,<:)=:>,
  2  1751       dbkatz(i,1),dbkatz(i,2));
  2  1752     \f

  2  1752     message pfilsystem side 3 - 781003/jg;
  2  1753     
  2  1753     
  2  1753     
  2  1753     procedure pfil(z,i);
  2  1754     value i; integer i;
  2  1755       zone z;
  2  1756     begin integer j,k; array field navn; integer array zd(1:20);
  3  1757       navn:=2; k:=1;
  3  1758       getzone6(fil(i),zd);
  3  1759       write(z,<:<10>fil(:>,i,<:)=:>,
  3  1760       zd(1) shift (-12),<:+:>,zd(1) extract 12,<: :>,
  3  1761       string zd.navn(increase(k)));
  3  1762       for j:=6 step 1 until 10 do write(z,zd(j));
  3  1763       write(z,<:<10>:>);
  3  1764       for j:=11 step 1 until 20 do write(z,zd(j));
  3  1765     end;
  2  1766     
  2  1766     procedure pfilsystem(z);
  2  1767       zone z;
  2  1768     begin integer i;
  3  1769     
  3  1769       write(z,<:<12>udskrift af variable i filsystem:>);
  3  1770           write(z,<:<10><10>filparm::>);
  3  1771           pfilparm(z);
  3  1772           write(z,<:<10><10>filglobal::>);
  3  1773           pfilglobal(z);
  3  1774           write(z,<:<10><10>fil: zone descriptor:>);
  3  1775       for i:=1 step 1 until dbantez+dbantsz+dbanttz do pfil(z,i);
  3  1776       write(z,<:<10><10>dbkatz: filref ezdis/szprioritet/tzref:>);
  3  1777           for i:=1 step 1 until dbantez+dbantsz+dbanttz do pdbkatz(z,i);
  3  1778           write(z,<:<10><10>dbkate: pa pl zref dis stot/kateref enavn:>);
  3  1779           for i :=1 step 1 until dbmaxef do pdbkate(z,i);
  3  1780           write(z,<:<10><10>dbkats: pa pl zref dis bant bref/katsref:>);
  3  1781           for i:=1 step 1 until dbmaxsf do pdbkats(z,i);
  3  1782           write(z,<:<10><10>dbkatb: katbref:>);
  3  1783           for i:=1 step 1 until dbmaxb do pdbkatb(z,i);
  3  1784           write(z,<:<10><10>dbkatt: pa pl zref dis stot:>);
  3  1785           for i:=1 step 1 until dbmaxtf do pdbkatt(z,i);
  3  1786     end pfilsystem;
  2  1787     \f

  2  1787     message pfilsystem side 4 - 781003/jg;
  2  1788     
  2  1788     
  2  1788     
  2  1788     procedure pfdim(fdim);
  2  1789     integer array fdim;
  2  1790     begin
  3  1791       integer i;
  3  1792       array field navn;
  3  1793       i:=1;navn:=8;
  3  1794       write(out,<:fdim::>,fdim(1),fdim(2),fdim(3),fdim(4),<: :>,
  3  1795       string fdim.navn(increase(i)));
  3  1796     end pfdim;
  2  1797     \f

  2  1797     message opretfil side 0 - 810529/cl;
  2  1798     
  2  1798     procedure opretfil;
  2  1799       <* checker parametre og vidresender operation
  2  1800          til opret_spoolfil eller opret_eksternfil *>
  2  1801     
  2  1801     begin
  3  1802       integer array field op;
  3  1803       integer status,pant,pl,segant,p_nøgle,fno,ftype;
  3  1804     
  3  1804       procedure skriv_opret_fil(z,omfang);
  3  1805         value                    omfang;
  3  1806         zone                   z;
  3  1807         integer                  omfang;
  3  1808       begin
  4  1809         write(z,"nl",1,<:+++ opret fil            :>);
  4  1810         if omfang > 0 then
  4  1811         disable
  4  1812         begin
  5  1813           skriv_coru(z,abs curr_coruno);
  5  1814           write(z,"nl",1,<<d>,
  5  1815             <:op     :>,op,"nl",1,
  5  1816             <:status :>,status,"nl",1,
  5  1817             <:pant   :>,pant,"nl",1,
  5  1818             <:pl     :>,pl,"nl",1,
  5  1819             <:segant :>,segant,"nl",1,
  5  1820             <:p-nøgle:>,p_nøgle,"nl",1,
  5  1821             <:fno    :>,fno,"nl",1,
  5  1822             <:ftype  :>,ftype,"nl",1,
  5  1823             <::>);
  5  1824         end;
  4  1825       end skriv_opret_fil;
  3  1826     \f

  3  1826     message opretfil side 1 - 810526/cl;
  3  1827     
  3  1827       trap(opretfil_trap);
  3  1828     <*+2*>
  3  1829     <**>  disable if testbit28 then
  3  1830     <**>    skriv_opret_fil(out,0);
  3  1831     <*-2*>
  3  1832     
  3  1832       stack_claim(if cm_test then 200 else 150);
  3  1833     
  3  1833     <*+2*>
  3  1834     <**> if testbit28 then write(out,"nl",1,<:+++ opret fil            :>);
  3  1835     <*-2*>
  3  1836     
  3  1836     trin1:
  3  1837       waitch(cs_opret_fil,op,true,-1);
  3  1838     
  3  1838     trin2: <* check parametre *>
  3  1839       disable begin
  4  1840     
  4  1840         ftype:= d.op.data(4) shift (-10);
  4  1841         fno:= d.op.data(4) extract 10;
  4  1842         if ftype<2 or ftype>3 or fno<>0 then
  4  1843         begin
  5  1844           status:= 1; <*parameterfejl*>
  5  1845           goto returner;
  5  1846         end;
  4  1847     
  4  1847         pant:= d.op.data(1);
  4  1848         pl:= d.op.data(2);
  4  1849         segant:= d.op.data(3);
  4  1850         p_nøgle:= d.op.opkode shift (-12);
  4  1851         if pant<0 or pl<1 or pl>256 or segant<(case ftype-1 of(1,0))
  4  1852           or p_nøgle<>0 and p_nøgle<>2 and p_nøgle<>3 then
  4  1853             status:= 1 <*parameterfejl *>
  4  1854         else
  4  1855         if pant>256//pl*segant then status:= 1 else
  4  1856         if segant>(case ftype-1 of(dbbidmax*dbbidlængde,dbsegmax)) then
  4  1857           status:= 4 <*ingen plads*>
  4  1858         else
  4  1859           status:=0;
  4  1860     \f

  4  1860     message opretfil side 2 - 810526/cl;
  4  1861     
  4  1861     
  4  1861     returner:
  4  1862     
  4  1862         d.op.data(9):= status;
  4  1863     
  4  1863     <*+2*>
  4  1864     <*tz*> if testbit24 and overvåget and status<>0 then    <*zt*>
  4  1865     <*tz*> begin                                            <*zt*>
  5  1866     <*tz*>   write(out,<:<10>opretfil::>,status,<: :>);     <*zt*>
  5  1867     <*tz*>   pfdim(d.op.data);                              <*zt*>
  5  1868     <*tz*>   write(out,<: op::>,op,d.op.retur); ud;         <*zt*>
  5  1869     <*tz*> end;                                             <*zt*>
  4  1870     <*-2*>
  4  1871     
  4  1871         <*returner eller vidresend operation*>
  4  1872         signalch(if status>0 then d.op.retur else
  4  1873           case ftype-1 of(cs_opret_spoolfil,cs_opret_eksternfil),
  4  1874           op,d.op.optype);
  4  1875       end;
  3  1876       goto trin1;
  3  1877     opretfil_trap:
  3  1878       disable skriv_opret_fil(zbillede,1);
  3  1879     
  3  1879     end opretfil;
  2  1880     \f

  2  1880     message tilknytfil side 0 - 810526/cl;
  2  1881     
  2  1881     procedure tilknytfil;
  2  1882       <* tilknytter ekstern fil og returnerer intern filid *>
  2  1883     
  2  1883     begin
  3  1884       integer array field op;
  3  1885       integer status,i,fno,segant,pa,pl,sliceant,s;
  3  1886       array field enavn;
  3  1887       integer array tail(1:10);
  3  1888     
  3  1888       procedure skriv_tilknyt_fil(z,omfang);
  3  1889         value                       omfang;
  3  1890         zone                      z;
  3  1891         integer                     omfang;
  3  1892       begin
  4  1893         write(z,"nl",1,<:+++ tilknyt fil          :>);
  4  1894         if omfang > 0 then
  4  1895         disable
  4  1896         begin real array field raf;
  5  1897           skriv_coru(z,abs curr_coruno);
  5  1898           write(z,"nl",1,<<d>,
  5  1899             <:op      :>,op,"nl",1,
  5  1900             <:status  :>,status,"nl",1,
  5  1901             <:i       :>,i,"nl",1,
  5  1902             <:fno     :>,fno,"nl",1,
  5  1903             <:segant  :>,segant,"nl",1,
  5  1904             <:pa      :>,pa,"nl",1,
  5  1905             <:pl      :>,pl,"nl",1,
  5  1906             <:sliceant:>,sliceant,"nl",1,
  5  1907             <:s       :>,s,"nl",1,
  5  1908             <::>);
  5  1909           raf:= 0;
  5  1910           write(z,<:tail::>); skriv_hele(z,tail.raf,20,128);
  5  1911           write(z,<:ia::>); skriv_hele(z,ia.raf,20,128);
  5  1912         end;
  4  1913       end skriv_tilknyt_fil;
  3  1914     \f

  3  1914     message tilknytfil side 1 - 810529/cl;
  3  1915     
  3  1915       stack_claim(if cm_test then 200 else 150);
  3  1916       trap(tilknytfil_trap);
  3  1917     
  3  1917     <*+2*>
  3  1918     <**> if testbit28 then
  3  1919     <**>   skriv_tilknyt_fil(out,0);
  3  1920     <*-2*>
  3  1921     
  3  1921     trin1:
  3  1922       waitch(cs_tilknyt_fil,op,true,-1);
  3  1923     
  3  1923     trin2:
  3  1924       wait(bs_kate_fri);
  3  1925     
  3  1925     trin3:
  3  1926       disable begin
  4  1927     
  4  1927         <* find ekstern rapportfil *>
  4  1928         enavn:= 8;
  4  1929         if find_fil_enavn(d.op.data.enavn)>0 then
  4  1930         begin
  5  1931           status:= 6; <* fil i brug *>
  5  1932           goto returner;
  5  1933         end;
  4  1934         open(zdummy,0,d.op.data.enavn,0);
  4  1935         s:= monitor(42)lookup entry:(zdummy,0,tail);
  4  1936         if s<>0 then
  4  1937         begin
  5  1938           if s=3 then status:= 2 <* fil findes ikke *>
  5  1939          else if s=6 then status:= 1 <* parameterfejl, navn *>
  5  1940          else fejlreaktion(1,s,<:lookup entry:>,0);
  5  1941           goto returner;
  5  1942         end;
  4  1943         if tail(9)<>d.op.data(4) <* contentskey,subno *> then
  4  1944         begin
  5  1945           status:= 5; <* forkert indhold *> goto returner;
  5  1946         end;
  4  1947         segant:= tail(1);
  4  1948         if segant>db_seg_max then
  4  1949           segant:= db_seg_max;
  4  1950         pa:= tail(10);
  4  1951         pl:= tail(7) extract 12;
  4  1952         if pl < 1 or pl > 256 then
  4  1953         begin status:= 7; goto returner; end;
  4  1954     \f

  4  1954     message tilknytfil side 2 - 810529/cl;
  4  1955         if pa>256//pl*segant then
  4  1956         begin status:= 7; goto returner; end;
  4  1957     
  4  1957         <* reserver *>
  4  1958         s:= monitor(52)create area:(zdummy,0,ia);
  4  1959         if s<>0 then
  4  1960         begin
  5  1961           if s=3 then status:= 2 <* fil findes ikke *>
  5  1962           else if s=1 <* areaclaims exeeded *> then
  5  1963           begin
  6  1964             status:= 4;
  6  1965             fejlreaktion(1,s,<:create area:>,1);
  6  1966           end
  5  1967           else fejlreaktion(1,s,<:create area:>,0);
  5  1968           goto returner;
  5  1969         end;
  4  1970     
  4  1970         s:= monitor(8)reserve:(zdummy,0,ia);
  4  1971         if s<>0 then
  4  1972         begin
  5  1973           if s<3 then status:= 6 <* i brug *>
  5  1974           else fejlreaktion(1,s,<:reserve:>,0);
  5  1975           monitor(64)remove area:(zdummy,0,ia);
  5  1976           goto returner;
  5  1977         end;
  4  1978     
  4  1978         tail(7):= 1 shift 12 +pl; <* tilknyttet *>
  4  1979         s:= monitor(44)change entry:(zdummy,0,tail);
  4  1980         if s<>0 then fejlreaktion(1,s,<:change entry:>,0);
  4  1981     
  4  1981         <* opdater katalog *>
  4  1982         dbantef:= dbantef+1;
  4  1983         fno:= dbkatefri;
  4  1984         dbkatefri:= dbkate(fno,2);
  4  1985         dbkate(fno,1):= pa shift 9 add pl; <* postantal,postlængde *>
  4  1986         dbkate(fno,2):= segant;
  4  1987         for i:= 5 step 1 until 8 do
  4  1988           dbkate(fno,i-2):= d.op.data(i);
  4  1989     
  4  1989         <* returparametre *>
  4  1990         d.op.data(1):= pa;
  4  1991         d.op.data(2):= pl;
  4  1992         d.op.data(3):= segant;
  4  1993         d.op.data(4):= 3 shift 10 +fno;
  4  1994         status:= 0;
  4  1995     \f

  4  1995     message tilknytfil side 3 - 810526/cl;
  4  1996     
  4  1996     
  4  1996     returner:
  4  1997         close(zdummy,false);
  4  1998         d.op.data(9):= status;
  4  1999     
  4  1999     
  4  1999     <*+2*>
  4  2000     <*tz*> if testbit24 and overvåget then                 <*zt*>
  4  2001     <*tz*> begin                                           <*zt*>
  5  2002     <*tz*>   write(out,<:<10>tilknytfil::>,status,<: :>);  <*zt*>
  5  2003     <*tz*>   pfdim(d.op.data);                             <*zt*>
  5  2004     <*tz*>   write(out,<: op::>,op,d.op.retur); ud;        <*zt*>
  5  2005     <*tz*> end;                                            <*zt*>
  4  2006     <*-2*>
  4  2007     
  4  2007         signalch(d.op.retur,op,d.op.optype);
  4  2008         if dbantef < dbmaxef then
  4  2009           signalbin(bs_kate_fri);
  4  2010       end;
  3  2011       goto trin1;
  3  2012     tilknytfil_trap:
  3  2013       disable skriv_tilknyt_fil(zbillede,1);
  3  2014     end tilknyt_fil;
  2  2015     \f

  2  2015     message frigivfil side 0 - 810529/cl;
  2  2016     
  2  2016     procedure frigivfil;
  2  2017       <* frigiver en tilknyttet ekstern fil *>
  2  2018     
  2  2018     begin
  3  2019       integer array field op;
  3  2020       integer status,fref,ftype,fno,s,i,z;
  3  2021       array field enavn;
  3  2022       integer array tail(1:10);
  3  2023     
  3  2023       procedure skriv_frigiv_fil(zud,omfang);
  3  2024         value                        omfang;
  3  2025         zone                     zud;
  3  2026         integer                      omfang;
  3  2027       begin
  4  2028         write(zud,"nl",1,<:+++ frigiv fil           :>);
  4  2029         if omfang > 0 then
  4  2030         disable
  4  2031         begin real array field raf;
  5  2032           skriv_coru(zud,abs curr_coruno);
  5  2033           write(zud,"nl",1,<<d>,
  5  2034             <:op    :>,op,"nl",1,
  5  2035             <:status:>,status,"nl",1,
  5  2036             <:fref  :>,fref,"nl",1,
  5  2037             <:ftype :>,ftype,"nl",1,
  5  2038             <:fno   :>,fno,"nl",1,
  5  2039             <:s     :>,s,"nl",1,
  5  2040             <:i     :>,i,"nl",1,
  5  2041             <:z     :>,z,"nl",1,
  5  2042             <::>);
  5  2043           raf:= 0;
  5  2044           write(zud,<:tail::>); skriv_hele(zud,tail.raf,20,128);
  5  2045         end;
  4  2046       end skriv_frigiv_fil;
  3  2047     \f

  3  2047     message frigivfil side 1 - 810526/cl;
  3  2048     
  3  2048     
  3  2048       stack_claim(if cm_test then 200 else 150);
  3  2049       trap(frigivfil_trap);
  3  2050     
  3  2050     <*+2*>
  3  2051     <**>  disable if testbit28 then
  3  2052     <**>    skriv_frigiv_fil(out,0);
  3  2053     <*-2*>
  3  2054     
  3  2054     trin1:
  3  2055       waitch(cs_frigiv_fil,op,true,-1);
  3  2056     
  3  2056     trin2:
  3  2057       disable begin
  4  2058     
  4  2058         <* find fil *>
  4  2059         fref:= d.op.data(4);
  4  2060         ftype:= fref shift (-10);
  4  2061         fno:= fref extract 10;
  4  2062         if ftype=0 or ftype>3 or fno=0 then
  4  2063         begin status:= 1; goto returner; end;
  4  2064         if fno>(case ftype of(dbmaxtf,dbmaxsf,dbmaxef)) then
  4  2065         begin status:= 1; goto returner; end;
  4  2066         if case ftype of(dbkatt(fno,1),dbkats(fno,1),dbkate(fno,1))
  4  2067            extract 9 = 0 then
  4  2068         begin
  5  2069          status:= 2; <* fil findes ikke *>
  5  2070          goto returner;
  5  2071         end;
  4  2072         if ftype <> 3 then
  4  2073         begin status:= 5; goto returner; end;
  4  2074     
  4  2074         <* frigiv evt. tilknyttet zone og areaprocess *>
  4  2075         z:= dbkate(fno,2) shift (-19);
  4  2076         if z > 0 then
  4  2077         begin
  5  2078           if dbkatz(z,1)=fref then
  5  2079           begin integer array zd(1:20);
  6  2080             getzone6(fil(z),zd);
  6  2081             if zd(13)>5 then filskrevet:= filskrevet +1;
  6  2082             close(fil(z),true);
  6  2083             dbkatz(z,1):= 0;
  6  2084           end;
  5  2085         end;
  4  2086     \f

  4  2086     message frigivfil side 2 - 810526/cl;
  4  2087     
  4  2087         <* opdater tail *>
  4  2088         enavn:= fno*12+4;
  4  2089         open(zdummy,0,dbkate.enavn,0);
  4  2090         s:= monitor(42)lookup entry:(zdummy,0,tail);
  4  2091         if s<>0 then fejlreaktion(1,s,<:lookup entry:>,0);
  4  2092         tail(7):= dbkate(fno,1) extract 9; <* ej tilknyttet,postlængde *>
  4  2093         tail(10):=dbkate(fno,1) shift (-9);<* postantal *>
  4  2094         s:= monitor(44)change entry:(zdummy,0,tail);
  4  2095         if s<>0 then fejlreaktion(1,s,<:change entry:>,0);
  4  2096         monitor(64)remove process:(zdummy,0,tail);
  4  2097         close(zdummy,true);
  4  2098     
  4  2098         <* frigiv indgang *>
  4  2099         for i:= 1, 3 step 1 until 6 do
  4  2100           dbkate(fno,1):= 0;
  4  2101         dbkate(fno,2):= dbkatefri;
  4  2102         dbkatefri:= fno;
  4  2103         dbantef:= dbantef -1;
  4  2104         signalbin(bs_kate_fri);
  4  2105         d.op.data(4):= 0; <* filref null *>
  4  2106         status:= 0;
  4  2107     
  4  2107     returner:
  4  2108         d.op.data(9):= status;
  4  2109     <*+2*>
  4  2110     <*tz*> if testbit24 and overvåget then                  <*zt*>
  4  2111     <*tz*> begin                                            <*zt*>
  5  2112     <*tz*>   write(out,<:<10>frigivfil::>,status,<: :>);    <*zt*>
  5  2113     <*tz*>   pfdim(d.op.data);                              <*zt*>
  5  2114     <*tz*>   write(out,<: op::>,op,d.op.retur); ud;         <*zt*>
  5  2115     <*tz*> end;                                             <*zt*>
  4  2116     <*-2*>
  4  2117     
  4  2117         signalch(d.op.retur,op,d.op.optype);
  4  2118       end;
  3  2119       goto trin1;
  3  2120     frigiv_fil_trap:
  3  2121        disable skriv_frigiv_fil(zbillede,1);
  3  2122     end frigivfil;
  2  2123     \f

  2  2123     message sletfil side 0 - 810526/cl;
  2  2124     
  2  2124     procedure sletfil;
  2  2125       <* sletter en spool- eller ekstern fil *>
  2  2126     
  2  2126     begin
  3  2127       integer array field op;
  3  2128       integer fref,fno,ftype,status;
  3  2129     
  3  2129       procedure skriv_slet_fil(z,omfang);
  3  2130         value                    omfang;
  3  2131         zone                   z;
  3  2132         integer                  omfang;
  3  2133       begin
  4  2134         write(z,"nl",1,<:+++ slet fil             :>);
  4  2135         if omfang > 0 then
  4  2136         disable
  4  2137         begin
  5  2138           skriv_coru(z,abs curr_coruno);
  5  2139           write(z,"nl",1,<<d>,
  5  2140             <:op    :>,op,"nl",1,
  5  2141             <:fref  :>,fref,"nl",1,
  5  2142             <:fno   :>,fno,"nl",1,
  5  2143             <:ftype :>,ftype,"nl",1,
  5  2144             <:status:>,status,"nl",1,
  5  2145             <::>);
  5  2146         end;
  4  2147       end skriv_slet_fil;
  3  2148     \f

  3  2148     message sletfil side 1 - 810526/cl;
  3  2149     
  3  2149       stack_claim(if cm_test then 200 else 150);
  3  2150     
  3  2150       trap(sletfil_trap);
  3  2151     <*+2*>
  3  2152     <**>  disable if testbit28 then
  3  2153     <**>    skriv_slet_fil(out,0);
  3  2154     <*-2*>
  3  2155     
  3  2155     trin1:
  3  2156       waitch(cs_slet_fil,op,true,-1);
  3  2157     
  3  2157     trin2:
  3  2158       disable begin
  4  2159     
  4  2159         <* find fil *>
  4  2160         fref:= d.op.data(4);
  4  2161         ftype:= fref shift (-10);
  4  2162         fno:= fref extract 10;
  4  2163         if ftype=0 or ftype>3 or fno=0 then
  4  2164         begin status:= 1; goto returner; end;
  4  2165         if fno>(case ftype of(dbmaxtf,dbmaxsf,dbmaxef)) then
  4  2166         begin status:= 1; goto returner; end;
  4  2167         if case ftype of(dbkatt(fno,1),dbkats(fno,1),dbkate(fno,1))
  4  2168           extract 9 = 0 then
  4  2169         begin
  5  2170           status:= 2; <* fil findes ikke *>
  5  2171           goto returner;
  5  2172         end;
  4  2173     
  4  2173     
  4  2173         <* slet spool- eller ekstern fil *>
  4  2174         case ftype of
  4  2175         begin
  5  2176     
  5  2176           <* tabelfil - ingen aktion *>
  5  2177           ;
  5  2178     \f

  5  2178     message sletfil side 2 - 810203/cl;
  5  2179     
  5  2179           <* spoolfil *>
  5  2180           begin
  6  2181             integer z,bidno,bf,bidant,i;
  6  2182     
  6  2182             <* hvis tilknyttet så frigiv *>
  6  2183             z:= dbkats(fno,2) shift (-19);
  6  2184             if z>0 then
  6  2185             begin
  7  2186               if dbkatz(z,1)=fref then
  7  2187               begin integer array zd(1:20);
  8  2188                 dbkatz(z,1):= 2 shift 10;
  8  2189                 getzone6(fil(z),zd); <*annuler evt. udskrivning*>
  8  2190                 if zd(13)>5 then
  8  2191                 begin zd(13):= 0; setzone6(fil(z),zd); end;
  8  2192               end;
  7  2193             end;
  6  2194     
  6  2194             <* frigiv bidder *>
  6  2195             bidno:= bf:= dbkats(fno,2) extract 12; <*bid start*>
  6  2196             bidant:= dbkats(fno,2) shift (-12) extract 6;
  6  2197             for i:= bidant -1 step -1 until 1 do
  6  2198               bidno:= dbkatb(bidno) extract 12;
  6  2199             dbkatb(bidno):= false add dbkatbfri;
  6  2200             dbkatbfri:= bf;
  6  2201             dbantb:= dbantb-bidant;
  6  2202     
  6  2202             <* frigiv indgang *>
  6  2203             dbkats(fno,1):= 0;
  6  2204             dbkats(fno,2):= dbkatsfri;
  6  2205             dbkatsfri:= fno;
  6  2206             dbantsf:= dbantsf -1;
  6  2207             signalbin(bs_kats_fri);
  6  2208           end spoolfil;
  5  2209     \f

  5  2209     message sletfil side 3 - 810203/cl;
  5  2210     
  5  2210           <* extern fil *>
  5  2211           begin
  6  2212             integer i,s,z;
  6  2213             real array field enavn;
  6  2214             integer array tail(1:10);
  6  2215     
  6  2215             <* find head and tail *>
  6  2216             enavn:= fno*12+4;
  6  2217             open(zdummy,0,dbkate.enavn,0);
  6  2218             s:= monitor(42)lookup entry:(zdummy,0,tail);
  6  2219             if s<>0 then fejlreaktion(1,s,<:lookup entry:>,0);
  6  2220     
  6  2220             <*frigiv evt. tilknyttet zone og areaprocess*>
  6  2221             z:=dbkate(fno,2) shift (-19);
  6  2222             if z>0 then
  6  2223             begin
  7  2224               if dbkatz(z,1)=fref then
  7  2225               begin integer array zd(1:20);
  8  2226                 getzone6(fil(z),zd);
  8  2227                 if zd(13)>5 then <* udskrivning *>
  8  2228                 begin <*annuler*>
  9  2229                   zd(13):= 0;
  9  2230                   setzone6(fil(z),zd);
  9  2231                 end;
  8  2232                 close(fil(z),true);
  8  2233                 dbkatz(z,1):= 0;
  8  2234               end;
  7  2235             end;
  6  2236     
  6  2236             <* fjern entry *>
  6  2237             s:= monitor(48)remove entry:(zdummy,0,tail);
  6  2238             if s<>0 then fejlreaktion(1,s,<:remove entry:>,0);
  6  2239             close(zdummy,true);
  6  2240     
  6  2240             <* frigiv indgang *>
  6  2241             for i:=1, 3 step 1 until 6 do
  6  2242               dbkate(fno,i):= 0;
  6  2243             dbkate(fno,2):= dbkatefri;
  6  2244             dbkatefri:= fno;
  6  2245             dbantef:= dbantef -1;
  6  2246             signalbin(bs_kate_fri);
  6  2247           end eksternfil;
  5  2248     
  5  2248         end ftype;
  4  2249     \f

  4  2249     message sletfil side 4 - 810526/cl;
  4  2250     
  4  2250     
  4  2250         status:= 0;
  4  2251         if ftype > 1 then
  4  2252           d.op.data(4):= 0; <*filref null*>
  4  2253     
  4  2253     returner:
  4  2254         d.op.data(9):= status;
  4  2255     
  4  2255     <*+2*>
  4  2256     <*tz*> if testbit24 and overvåget then                  <*zt*>
  4  2257     <*tz*> begin                                            <*zt*>
  5  2258     <*tz*>   write(out,<:<10>sletfil::>,status,<: :>);      <*zt*>
  5  2259     <*tz*>   pfdim(d.op.data);                              <*zt*>
  5  2260     <*tz*>   write(out,<: op::>,op,d.op.retur); ud;         <*zt*>
  5  2261     <*tz*> end;                                             <*zt*>
  4  2262     <*-2*>
  4  2263         
  4  2263          signalch(d.op.retur,op,d.op.optype);
  4  2264       end;
  3  2265       goto trin1;
  3  2266     sletfil_trap:
  3  2267         disable skriv_slet_fil(zbillede,1);
  3  2268     end sletfil;
  2  2269     \f

  2  2269     message opretspoolfil side 0 - 810526/cl;
  2  2270     
  2  2270     procedure opretspoolfil;
  2  2271       <* opretter en spoolfil og returnerer intern filid *>
  2  2272     
  2  2272     begin
  3  2273       integer array field op;
  3  2274       integer bidantal,fno,i,bs,bidstart;
  3  2275     
  3  2275       procedure skriv_opret_spoolfil(z,omfang);
  3  2276         value                          omfang;
  3  2277         zone                         z;
  3  2278         integer                        omfang;
  3  2279       begin
  4  2280         write(z,"nl",1,<:+++ opret spoolfil       :>);
  4  2281         if omfang > 0 then
  4  2282         disable
  4  2283         begin
  5  2284           skriv_coru(z,abs curr_coruno);
  5  2285           write(z,"nl",1,<<d>,
  5  2286             <:op      :>,op,"nl",1,
  5  2287             <:bidantal:>,bidantal,"nl",1,
  5  2288             <:fno     :>,fno,"nl",1,
  5  2289             <:i       :>,i,"nl",1,
  5  2290             <:bs      :>,bs,"nl",1,
  5  2291             <:bidstart:>,bidstart,"nl",1,
  5  2292             <::>);
  5  2293           end;
  4  2294         end skriv_opret_spoolfil;
  3  2295     \f

  3  2295     message opretspoolfil side 1 - 810526/cl;
  3  2296     
  3  2296       stack_claim(if cm_test then 200 else 150);
  3  2297     
  3  2297       signalbin(bs_kats_fri); <*initialiseres til åben*>
  3  2298     
  3  2298       trap(opretspool_trap);
  3  2299     <*+2*>
  3  2300     <**>  disable if testbit28 then
  3  2301     <**>    skriv_opret_spoolfil(out,0);
  3  2302     <*-2*>
  3  2303     trin1:
  3  2304       waitch(cs_opret_spoolfil,op,true,-1);
  3  2305     
  3  2305     trin2:
  3  2306       bidantal:= (d.op.data(3)<*segant*> - 1)//dbbidlængde +1;
  3  2307       wait(bs_kats_fri);
  3  2308     
  3  2308     trin3:
  3  2309       if bidantal>dbmaxb-dbantb then <*ikke plads,vent*>
  3  2310       begin
  4  2311         wait(bs_kats_fri);
  4  2312         goto trin3;
  4  2313       end;
  3  2314       disable begin
  4  2315     
  4  2315         <*alloker bidder*>
  4  2316         bs:= bidstart:= dbkatbfri;
  4  2317         for i:= bidantal-1 step -1 until 1 do
  4  2318           bs:= dbkatb(bs) extract 12;
  4  2319         dbkatbfri:= dbkatb(bs) extract 12;
  4  2320         dbkatb(bs):= false; <*sidste ref null*>
  4  2321         dbantb:= dbantb+bidantal;
  4  2322     
  4  2322         <*alloker indgang*>
  4  2323         fno:= dbkatsfri;
  4  2324         dbkatsfri:= dbkats(fno,2);
  4  2325         dbantsf:= dbantsf +1;
  4  2326         dbkats(fno,1):= d.op.data(1) shift 9 <*postantal*> add
  4  2327                         d.op.data(2) extract 9; <*postlængde*>
  4  2328         dbkats(fno,2):= bidantal shift 12 add bidstart; <*zone null*>
  4  2329     \f

  4  2329     message opretspoolfil side 2 - 810526/cl;
  4  2330     
  4  2330         <*returner*>
  4  2331         d.op.data(3):= bidantal*dbbidlængde; <*segantal*>
  4  2332         d.op.data(4):= 2 shift 10 add fno; <*filref*>
  4  2333         for i:= 5 step 1 until 8 do <*filnavn null*>
  4  2334           d.op.data(i):= 0;
  4  2335         d.op.data(9):= 0; <*status ok*>
  4  2336     
  4  2336     <*+2*>
  4  2337     <*tz*> if testbit24 and overvåget then                  <*zt*>
  4  2338     <*tz*> begin                                            <*zt*>
  5  2339     <*tz*>   write(out,<:<10>opretfil::>,0,<: :>);          <*zt*>
  5  2340     <*tz*>   pfdim(d.op.data);                              <*zt*>
  5  2341     <*tz*>   write(out,<: op:>,op,d.op.retur); ud;          <*zt*>
  5  2342     <*tz*> end;                                             <*zt*>
  4  2343     <*-2*>
  4  2344     
  4  2344         signalch(d.op.retur,op,d.op.optype);
  4  2345         if dbantsf<dbmaxsf then signalbin(bs_kats_fri);
  4  2346       end;
  3  2347       goto trin1;
  3  2348     
  3  2348     opretspool_trap:
  3  2349         disable skriv_opret_spoolfil(zbillede,1);
  3  2350     
  3  2350     end opretspoolfil;
  2  2351     \f

  2  2351     message opreteksternfil side 0 - 810526/cl;
  2  2352     
  2  2352     procedure opreteksternfil;
  2  2353       <* opretter og knytter en ekstern fil *>
  2  2354     
  2  2354     begin
  3  2355       integer array field op;
  3  2356       integer status,s,i,fno,p_nøgle;
  3  2357       integer array tail(1:10),zd(1:20);
  3  2358       real r;
  3  2359       real array field enavn;
  3  2360     
  3  2360       procedure skriv_opret_ekstfil(z,omfang);
  3  2361         value                         omfang;
  3  2362         zone                        z;
  3  2363         integer                       omfang;
  3  2364       begin
  4  2365         write(z,"nl",1,<:+++ opret ekstern fil    :>);
  4  2366         if omfang > 0 then
  4  2367         disable
  4  2368         begin real array field raf;
  5  2369           skriv_coru(z,abs curr_coruno);
  5  2370           write(z,"nl",1,<<d>,
  5  2371             <:op     :>,op,"nl",1,
  5  2372             <:status :>,status,"nl",1,
  5  2373             <:s      :>,s,"nl",1,
  5  2374             <:i      :>,i,"nl",1,
  5  2375             <:fno    :>,fno,"nl",1,
  5  2376             <:p-nøgle:>,p_nøgle,"nl",1,
  5  2377             <::>);
  5  2378           raf:= 0;
  5  2379           write(z,<:tail::>); skriv_hele(z,tail.raf,20,128);
  5  2380           write(z,<:zd::>); skriv_hele(z,zd.raf,40,28);
  5  2381         end;
  4  2382       end skriv_opret_ekstfil;
  3  2383     \f

  3  2383     message opreteksternfil side 1 - 810526/cl;
  3  2384     
  3  2384       stack_claim(if cm_test then 200 else 150);
  3  2385     
  3  2385       signalbin(bs_kate_fri); <*initialiseres til åben*>
  3  2386     
  3  2386       trap(opretekst_trap);
  3  2387     <*+2*>
  3  2388     <**>  disable if testbit28 then
  3  2389     <**>    skriv_opret_ekstfil(out,0);
  3  2390     <*-2*>
  3  2391     trin1:
  3  2392       waitch(cs_opret_eksternfil,op,true,-1);
  3  2393     
  3  2393     trin2:
  3  2394       wait(bs_kate_fri);
  3  2395     
  3  2395     trin3:
  3  2396       <*opret temporær fil og tilknyt den*>
  3  2397       disable begin
  4  2398     
  4  2398         enavn:= 8;
  4  2399         <*opret*>
  4  2400         open(zdummy,0,d.op.data.enavn,0);
  4  2401         tail(1):= d.op.data(3); <*segant*>
  4  2402         tail(2):= 1;
  4  2403         tail(6):= systime(7,0,r); <*shortclock*>
  4  2404         tail(7):= 1 shift 12 +d.op.data(2) extract 12; <*tilknyttet,postlgd*>
  4  2405         tail(8):= 0;
  4  2406         tail(9):= 31 shift 12; <*contentskey=ekstern fil,subnr=0*>
  4  2407         tail(10):= d.op.data(1); <*postantal*>
  4  2408         s:= monitor(40)create entry:(zdummy,0,tail);
  4  2409         if s<>0 then
  4  2410         begin
  5  2411           if s=4 <*claims exeeded*> then
  5  2412           begin
  6  2413             status:= 4;
  6  2414             fejlreaktion(1,s,<:create entry:>,1);
  6  2415             goto returner;
  6  2416           end;
  5  2417           if s=3 <*navn ikke unikt*> then
  5  2418           begin status:= 6; goto returner; end;
  5  2419           fejlreaktion(1,s,<:create entry:>,0);
  5  2420         end;
  4  2421     \f

  4  2421     message opreteksternfil side 2 - 810203/cl;
  4  2422     
  4  2422         p_nøgle:= d.op.opkode shift (-12);
  4  2423         s:= monitor(50)permanent_entry:(zdummy,p_nøgle,tail);
  4  2424         if s<>0 then
  4  2425         begin
  5  2426           if s=6 then
  5  2427           begin <*claims exeeded*>
  6  2428             status:= 4;
  6  2429             fejlreaktion(1,s,<:permanent entry:>,1);
  6  2430             monitor(48)remove entry:(zdummy,0,tail);
  6  2431             goto returner;
  6  2432           end
  5  2433           else fejlreaktion(1,s,<:permanent entry:>,0);
  5  2434         end;
  4  2435     
  4  2435         <*reserver*>
  4  2436         s:= monitor(52)create areaprocess:(zdummy,0,zd);
  4  2437         if s<>0 then
  4  2438         begin
  5  2439           fejlreaktion(1,s,<:create area:>,if s=1 then 1 else 0);
  5  2440           status:= 4;
  5  2441           monitor(48)remove entry:(zdummy,0,zd);
  5  2442           goto returner;
  5  2443         end;
  4  2444     
  4  2444         s:= monitor(8)reserve:(zdummy,0,zd);
  4  2445         if s<>0 then fejlreaktion(1,s,<:reserve:>,0);
  4  2446     
  4  2446         <*tilknyt*>
  4  2447         dbantef:= dbantef +1;
  4  2448         fno:= dbkatefri;
  4  2449         dbkatefri:= dbkate(fno,2);
  4  2450         dbkate(fno,1):= tail(10) shift 9 add (tail(7) extract 12);
  4  2451         dbkate(fno,2):= tail(1);
  4  2452         getzone6(zdummy,zd);
  4  2453         for i:= 2 step 1 until 5 do
  4  2454           dbkate(fno,i+1):= d.op.data(3+i):= zd(i); <*navn*>
  4  2455         d.op.data(3):= tail(1);
  4  2456         d.op.data(4):= 3 shift 10 +fno;
  4  2457         status:= 0;
  4  2458     \f

  4  2458     message opreteksternfil side 3 - 810526/cl;
  4  2459     
  4  2459     returner:
  4  2460     
  4  2460         close(zdummy,false);
  4  2461         d.op.data(9):= status;
  4  2462     
  4  2462     <*+2*>
  4  2463     <*tz*> if testbit24 and overvåget then                  <*zt*>
  4  2464     <*tz*> begin                                            <*zt*>
  5  2465     <*tz*>   write(out,<:<10>opretfil::>,status,<: :>);     <*zt*>
  5  2466     <*tz*>   pfdim(d.op.data);                              <*zt*>
  5  2467     <*tz*>   write(out,<: op::>,op,d.op.retur); ud;         <*zt*>
  5  2468     <*tz*> end;                                             <*zt*>
  4  2469     <*-2*>
  4  2470     
  4  2470         signalch(d.op.retur,op,d.op.optype);
  4  2471         if dbantef<dbmaxef then signalbin(bs_kate_fri);
  4  2472       end;
  3  2473       goto trin1;
  3  2474     
  3  2474     opretekst_trap:
  3  2475         disable skriv_opret_ekstfil(zbillede,1);
  3  2476     
  3  2476     end opreteksternfil;
  2  2477     
  2  2477     \f

  2  2477     message attention_erklæringer side 1 - 850820/cl;
  2  2478     
  2  2478       integer
  2  2479         tf_kommandotabel,
  2  2480         cs_att_pulje,
  2  2481         bs_fortsæt_adgang,
  2  2482         att_proc_ref;
  2  2483     
  2  2483       integer array
  2  2484         att_flag,
  2  2485         att_signal(1:att_maske_lgd//2);
  2  2486     
  2  2486       integer array
  2  2487        terminal_tab(1:terminal_beskr_længde//2*(1<*io*>+
  2  2488                             max_antal_operatører+max_antal_garageterminaler)),
  2  2489        fortsæt(1:32);
  2  2490     \f

  2  2490     message procedure afslut_kommando side 1 - 810507/hko;
  2  2491     
  2  2491       procedure afslut_kommando(op_ref);
  2  2492         integer array field     op_ref;
  2  2493         begin integer nr,i,sem;
  3  2494           i:= d.op_ref.kilde;
  3  2495           nr:= if i=299 then max_antal_operatører+max_antal_garageterminaler+1
  3  2496                else case i//100 of (0,i mod 100,max_antal_operatører+(i mod 100));
  3  2497           sætbit_ia(att_flag,nr,0);
  3  2498           d.op_ref.optype:=gen_optype;
  3  2499     <* "husket" attention disabled ****************
  3  2500           if sætbit_ia(att_signal,nr,0)=1 then
  3  2501           begin
  3  2502             sem:=if i=299 then cs_talevejsswitch else
  3  2503                  case i//100 of (cs_io_komm,cs_operatør(i mod 100),
  3  2504                                  cs_garage(i mod 100));
  3  2505             afslut_operation(op_ref,0);
  3  2506             start_operation(op_ref,i,cs_att_pulje,0);
  3  2507             signal_ch(sem,op_ref,gen_optype);
  3  2508          end
  3  2509          else
  3  2510     ********************* disable "husket" attention *>
  3  2511             afslut_operation(op_ref,cs_att_pulje);
  3  2512         end;
  2  2513     \f

  2  2513     message procedure læs_store side 1 - 880919/cl;
  2  2514     
  2  2514     integer procedure læs_store(z,c);
  2  2515       zone                      z;
  2  2516       integer                     c;
  2  2517     begin
  3  2518       læs_store:= readchar(z,c);
  3  2519       if 'a' <= c and c <= 'å' then c:= c - 'a' + 'A';
  3  2520     end;
  2  2521     \f

  2  2521     message procedure param side 1 - 810226/cl;
  2  2522     
  2  2522     
  2  2522     
  2  2522     integer procedure param(txt,pos,spec,tabel_id,type,værdi,sep);
  2  2523     value tabel_id;
  2  2524     integer pos, tabel_id, type, sep;
  2  2525     integer array txt, spec, værdi;
  2  2526     
  2  2526     
  2  2526     
  2  2526            <*************************************>
  2  2527            <*                                   *>
  2  2528            <*   CLAUS LARSEN:  15.07.77         *>
  2  2529            <*                                   *>
  2  2530            <*************************************>
  2  2531     
  2  2531     
  2  2531     
  2  2531     
  2  2531     <*   param syntax-analyserer en parameterliste, og   *>
  2  2532     <*   bestemmer næste parameter og den separator der  *>
  2  2533     <*   afslutter parameteren                           *>
  2  2534     
  2  2534     
  2  2534     
  2  2534     begin
  3  2535        integer array klasse(0:127), aktuel_param(1:4), fdim(1:8);
  3  2536        real array indgang(1:2);
  3  2537        integer i, j, tegn, tegn_pos, tal, hashnøgle,
  3  2538           zone_nr, top, max_segm, start_segm, lpos;
  3  2539        boolean  minus, separator;
  3  2540        lpos := pos;
  3  2541        type:=-1;
  3  2542        for i:=1 step 1 until 4 do værdi(i):=0;
  3  2543     \f

  3  2543     message procedure param side 2 - 810428/cl,hko;
  3  2544     
  3  2544     
  3  2544     
  3  2544        <* grænsecheck for pos *>
  3  2545        begin
  4  2546           integer nedre, øvre;
  4  2547     
  4  2547           nedre := system(3,øvre,txt);
  4  2548           nedre := nedre * 3 - 2;
  4  2549           øvre  := øvre  * 3;
  4  2550           if lpos < (nedre - 1) or øvre < lpos then
  4  2551           begin
  5  2552             sep:= -1;
  5  2553             param:= 5;
  5  2554             goto slut;
  5  2555           end;
  4  2556     
  4  2556           <* er parameterlisten slut *>
  4  2557           lpos:= lpos+1;
  4  2558           læs_tegn(txt,lpos,tegn);
  4  2559           if tegn = 'em' or tegn = 'nl' or tegn = 'nul' then
  4  2560           begin
  5  2561              lpos := lpos - 2;
  5  2562              sep := tegn;
  5  2563              param := 5;
  5  2564     
  5  2564              goto slut;
  5  2565           end else lpos:= lpos-1;
  4  2566        end;
  3  2567     \f

  3  2567     message procedure param side 3 - 810428/cl;
  3  2568     
  3  2568     
  3  2568        <* initialisering *>
  3  2569        for i := 1 step 1 until 4 do
  3  2570           aktuel_param(i) := 0;
  3  2571        minus := separator := false;
  3  2572     
  3  2572        <* initialiser klassetabel *>
  3  2573        for i := 65 step 1 until 93,
  3  2574                 97 step 1 until 125 do klasse(i) := 1;
  3  2575        for i := 48 step 1 until 57 do klasse(i) := 2;
  3  2576        for i := 0 step 1 until 47, 58 step 1 until 64, 
  3  2577                 94, 95, 96, 126, 127 do klasse(i) := 4;
  3  2578     
  3  2578     
  3  2578        <* sæt specialtegn *>
  3  2579        i := 1;
  3  2580        læs_tegn(spec,i,tegn);
  3  2581        while tegn <> 0 do
  3  2582        begin
  4  2583           if klasse(tegn) = 4 and tegn <> 'sp' and tegn <> 'nl' then
  4  2584              klasse(tegn) := 3;
  4  2585           læs_tegn(spec,i,tegn);
  4  2586        end;
  3  2587     \f

  3  2587     message procedure param side 4 - 810226/cl;
  3  2588     
  3  2588     
  3  2588        <* læs første tegn i ny parameter og bestem typen *>
  3  2589        læs_tegn(txt,lpos,tegn);
  3  2590     
  3  2590        case klasse(tegn) of 
  3  2591        begin
  4  2592     
  4  2592           <* case 1 - bogstav *>
  4  2593           begin
  5  2594              type := 0;
  5  2595              param := 0;
  5  2596              tegn_pos := 1;
  5  2597              hashnøgle := 0;
  5  2598     
  5  2598              <* læs parameter *>
  5  2599              while tegn_pos < 12 and klasse(tegn) <> 4 do
  5  2600              begin
  6  2601                 hashnøgle := hashnøgle + tegn;
  6  2602                 skriv_tegn(aktuel_param,tegn_pos,tegn);
  6  2603                 læs_tegn(txt,lpos,tegn);
  6  2604              end;
  5  2605     
  5  2605              <* find separator *>
  5  2606              while klasse(tegn) <> 4 do læs_tegn(txt,lpos,tegn);
  5  2607              sep := tegn;
  5  2608     \f

  5  2608     message procedure param side 5 - 810226/cl;
  5  2609     
  5  2609              <* tabelopslag *>
  5  2610              if tabel_id <> 0 then
  5  2611              begin
  6  2612                 <* hent max_segm *>
  6  2613     
  6  2613                 fdim(4) := tabel_id;
  6  2614                 j := hent_fil_dim(fdim);
  6  2615                 if j > 0 then
  6  2616                 begin
  7  2617                    param := 4;
  7  2618                    for i := 1 step 1 until 4 do 
  7  2619                       værdi(i) := aktuel_param(i);
  7  2620                    goto slut;
  7  2621                 end;
  6  2622                 max_segm := fdim(3);
  6  2623     
  6  2623                 <* forbered opslag *>
  6  2624                 start_segm := (hashnøgle mod max_segm) + 1;
  6  2625                 indgang(1) := 0.0 shift 48 add aktuel_param(1)
  6  2626                    shift 24 add aktuel_param(2);
  6  2627                 indgang(2) := 0.0 shift 48 add aktuel_param(3)
  6  2628                    shift 24 add aktuel_param(4);
  6  2629                 hashnøgle := start_segm;
  6  2630     \f

  6  2630     message procedure param side 6 - 810226/cl;
  6  2631     
  6  2631                 <* søg navn *>
  6  2632                 repeat
  6  2633                    <* læs segment *>
  6  2634                    læs_fil(tabel_id,hashnøgle,zone_nr);
  6  2635     
  6  2635                    <* beregn sidste element *>
  6  2636                    top := fil(zone_nr,1) extract 24;
  6  2637                    top := (top - 1) * 4 + 2;
  6  2638     
  6  2638                    <* søg *>
  6  2639                    for i := 2 step 4 until top do
  6  2640                       if fil(zone_nr,i) = indgang(1) and
  6  2641                          fil(zone_nr,i+1) = indgang(2) then
  6  2642                       begin
  7  2643                          <* fundet *>
  7  2644                          værdi(1) := fil(zone_nr,i+2) shift (-24)
  7  2645                                        extract 24;
  7  2646                          værdi(2) := fil(zone_nr,i+2) extract 24;
  7  2647                          værdi(3) := fil(zone_nr,i+3) shift (-24)
  7  2648                                      extract 24;
  7  2649                          værdi(4) := fil(zone_nr,i+3) extract 24;
  7  2650                          goto fundet;
  7  2651                       end;
  6  2652     
  6  2652                    if top = 122 then <*overløb *>
  6  2653                       hashnøgle := (hashnøgle mod max_segm) + 1;
  6  2654                 until top < 122 or hashnøgle = start_segm;
  6  2655     
  6  2655                 <* navn findes ikke *>
  6  2656                 param := 2;
  6  2657                 for j := 1 step 1 until 4 do
  6  2658                    værdi(j) := aktuel_param(j);
  6  2659     fundet: ;
  6  2660              end <*tabel_id <> 0 *>
  5  2661              else
  5  2662                 for i := 1 step 1 until 4 do
  5  2663                    værdi(i) := aktuel_param(i);
  5  2664           end <* case 1 *>;
  4  2665     \f

  4  2665     message procedure param side 7 - 810310/cl,hko;
  4  2666     
  4  2666           <* case 2 - ciffer *>
  4  2667     cif:  begin
  5  2668                type:=tal := 0;
  5  2669              while klasse(tegn) = 2 do
  5  2670              begin
  6  2671                 type:=type+1;
  6  2672                 tal := tal * 10 + (tegn - 48);
  6  2673                 læs_tegn(txt,lpos,tegn);
  6  2674              end;
  5  2675              if minus then tal := -tal;
  5  2676              værdi(1) := tal;
  5  2677              sep := tegn;
  5  2678              param := 0;
  5  2679           end <* case 2 *>;
  4  2680     \f

  4  2680     message procedure param side 8 - 810428/cl;
  4  2681     
  4  2681           <* case 3 - specialtegn *>
  4  2682     spc:  begin
  5  2683              if tegn = '-' then
  5  2684              begin
  6  2685                 læs_tegn(txt,lpos,tegn);
  6  2686                 if klasse(tegn) = 2 then
  6  2687                 begin
  7  2688                    minus := true;
  7  2689                    goto cif;
  7  2690                 end
  6  2691                 else
  6  2692                 begin
  7  2693                    tegn := '-';
  7  2694                    lpos := lpos - 1;
  7  2695                 end;
  6  2696              end;
  5  2697              <* syntaxfejl *>
  5  2698              param := if separator then 1 else 3;
  5  2699              sep := tegn;
  5  2700           end <* case 3 *>;
  4  2701     
  4  2701           <* case 4 - separator *>
  4  2702           begin
  5  2703              separator := true;
  5  2704              goto spc;
  5  2705           end <* case 4 *>;
  4  2706     
  4  2706        end <* case *>;
  3  2707     
  3  2707        lpos := lpos - 1;
  3  2708     slut: 
  3  2709        pos := lpos;
  3  2710     end;
  2  2711     \f

  2  2711     message procedure læs_param_sæt side 1 - 830310/cl;
  2  2712     
  2  2712     integer procedure læs_param_sæt(tekst,pos,ant,parm,term,res);
  2  2713       integer array             tekst,        parm;
  2  2714       integer                         pos,ant,     term,res;
  2  2715     
  2  2715     <* proceduren læser et sammenhørende sæt parametre
  2  2716        afsluttet med (sp),(nl),(;),(,) eller (nul)
  2  2717     
  2  2717        læs_param_sæt      returstatus eller 'typen' af det læste parametersæt
  2  2718        (retur,int)
  2  2719                          type ant  parm indeholder:
  2  2720                          <0:   x  (ingenting) 'læs_param_sæt= nr på fejlkvit.'
  2  2721                           0:   0  (ingenting) 'rest kommando er tom'
  2  2722                           1:   1  (tekst)  'indtil 11 tegn'
  2  2723                           2:   1  (pos.tal)
  2  2724                           3:   1  (neg.tal)
  2  2725                           4:   1  (pos.tal<1000)(bogstav) 'linienummer'
  2  2726                           5:   1  G(pos.tal<100) 'gruppe_ident'
  2  2727                           6:   2  (linie)/(løb) 'vogn_ident'
  2  2728                           7:   3  (bus)/(linie)/(løb)
  2  2729                           8:   3  (linie).(indeks):(løb)
  2  2730                           9:   2  (linie).(indeks)
  2  2731                          10:   2  (pos.tal).(pos.tal)
  2  2732                          11: 2-3  G(pos.tal<100):(vogn) '(vogn)::=(bus)!(linie)/(løb)'
  2  2733                          12:   3  D.(dato).(tid)
  2  2734     
  2  2734        tekst             indeholder teksten hvori parametersættet
  2  2735        (kald,int.arr.)   skal søges.
  2  2736     
  2  2736        pos
  2  2737        (kald/retur,int.)  position efter hvilken søgningen starter, og
  2  2738                           ved retur positionen for afsluttende tegn.
  2  2739                             (ikke ændret ved fejl)
  2  2740     
  2  2740        ant               hvis kaldeværdien er >0 skal parametersættet
  2  2741        (kald/retur,int)  indeholde det angivne antal enkeltparametre,
  2  2742                          i modsat fald returneres med fejltype -26
  2  2743                          (skilletegn) eller -25 (parameter mangler).
  2  2744                          ellers læses op til 3 enkeltparametre. retur-
  2  2745                          værdien afhænger af det læste parametersæts 
  2  2746                          type, se ovenfor under læs_param_sæt.
  2  2747     \f

  2  2747     message procedure læs_param_sæt side 2 - 810428/hko;
  2  2748     
  2  2748        parm              skal omfatte elementerne 1 til 4.
  2  2749        (retur,int.arr.)  ved returstatus<=0 indeholder alle elemen-
  2  2750                          terne værdien 0.
  2  2751     
  2  2751                          type (element,indhold)
  2  2752                            1: 1-4,teksten
  2  2753                          2-3: 1, talværdien
  2  2754                            4: 1, tal shift 5 +tegnværdi (A=1,B=2,--,Å=29)
  2  2755                            5: 1, talværdi (uden G)
  2  2756                            6: 1, (som'4') shift 7 + løb
  2  2757                            7: 1, bus
  2  2758                               2, linie/løb som '6'
  2  2759                            8: 1, tal shift 5 eller som '4'
  2  2760                               2, tekst (1-3 bogstaver)
  2  2761                               3, løb
  2  2762                            9: 1 og 2, som '8'
  2  2763                           10: 1, talværdi
  2  2764                               2, talværdi
  2  2765                           11: 1, som '5'
  2  2766                               2, vogn (bus eller linie/løb)
  2  2767                           12: 1, dato
  2  2768                               2, tid
  2  2769     
  2  2769        term              iso-tegnværdien for tegnet der afslutter
  2  2770        (retur,int)       parameter_sættet.
  2  2771     
  2  2771        res               som læs_param_sæt.
  2  2772        (retur,int)
  2  2773     
  2  2773     *>
  2  2774     \f

  2  2774     message procedure læs_param_sæt side 3 - 810310/hko;
  2  2775     
  2  2775       begin
  3  2776         integer max_ant;
  3  2777     
  3  2777         max_ant:= 3;
  3  2778     
  3  2778         begin
  4  2779           integer
  4  2780             i,j,k,              <* hjælpe variable *>
  4  2781             nr,                 <* nummer på parameter i sættet *>
  4  2782             apos,               <* aktuel tegnposition *>
  4  2783             cifre,             <* parametertype (param: 0=tekst, >1=tal) *>
  4  2784             sep;                <* afsluttende skilletegn ved param *>
  4  2785     
  4  2785           integer array field
  4  2786             iaf;                <* hjælpe variabel *>
  4  2787     
  4  2787           integer array
  4  2788             par(1:4*max_ant),   <* 4 elementer for hver aktuel parameter *>
  4  2789             s,                  <* 1 element med separator for hver parameter *>
  4  2790             t(1:max_ant),       <* 1 element med typen for hver parameter *>
  4  2791             værdi(1:4),         <* værdi af aktuel parameter jvf. param *>
  4  2792             spec(1:1);          <* specialtegn i navne jvf. param *>
  4  2793     
  4  2793     <*          de interne typer af enkeltparametre er
  4  2794     
  4  2794                 type  parameter
  4  2795     
  4  2795                   1:  1-3 tegn tekst (1 ord)
  4  2796                   2:  4-6 tegn       (2 ord)
  4  2797                   3:  7-9 tegn       (3 ord)
  4  2798                   4:10-11 tegn       (4 ord)
  4  2799                   5:  positivt heltal
  4  2800                   6:  negativt heltal
  4  2801                   7:  positivt heltal<1000 efterfulgt af stort bogstav
  4  2802                   8:  G efterfulgt af positivt heltal<100
  4  2803     
  4  2803     *>
  4  2804     \f

  4  2804     message procedure læs_param_sæt side 4 - 810408/hko;
  4  2805     
  4  2805           nr:= 0;
  4  2806           res:= -1;
  4  2807           spec(1):= 0; <* ingen specialtegn *>
  4  2808           apos:= pos;
  4  2809           for i:= 1 step 1 until 4 do parm(i):= 0;
  4  2810           for i:= 1 step 1 until max_ant do
  4  2811           begin
  5  2812             s(i):= t(i):= 0;
  5  2813             for j:= 1 step 1 until 4 do par((i-1)*4+j):= 0;
  5  2814           end;
  4  2815           repeat
  4  2816             <* skip foranstillede sp-tegn *>
  4  2817             for i:= param(tekst,apos,spec,0<*intet tabelopslag*>,cifre,værdi,sep)
  4  2818                 while i=1 and sep='sp' do;
  4  2819     <*+2*>    
  4  2820             begin
  5  2821               if testbit25 and testbit26 then
  5  2822               disable begin
  6  2823                 write(out,"nl",1,<:param (apos,cifre,sep):>,<< -dddd>,
  6  2824                       i,apos,cifre,sep);
  6  2825                 laf:=0;
  6  2826                 if cifre<>0 then
  6  2827                    write(out,<:  værdi(1-4)::>,
  6  2828                          << -dddd>,værdi(1),værdi(2),værdi(3),værdi(4))
  6  2829                 else write(out,<:  værdi::>,værdi.laf);
  6  2830                 ud;
  6  2831               end;
  5  2832             end;
  4  2833     <*-2*>
  4  2834             ;
  4  2835             if i<>0 then <* ikke ok *>
  4  2836             begin
  5  2837               if i=1 and (sep=',' or sep=';') then <* slut_tegn*>
  5  2838               begin
  6  2839                 apos:= apos -1;
  6  2840                 res:= 0;
  6  2841               end
  5  2842               else if i=1 then res:=-26 <* skilletegn *>
  5  2843               else <* i=5 *> res:= -25 <* parameter mangler *>
  5  2844             end
  4  2845             else <* i=0 *>
  4  2846             begin
  5  2847               if sep=',' or sep=';' then apos:=apos-1;
  5  2848               iaf:= nr*8;
  5  2849               nr:= nr +1;
  5  2850     \f

  5  2850     message procedure læs_param_sæt side 5 - 810520/hko/cl;
  5  2851     
  5  2851               if cifre=0 <* navne_parameter *> then
  5  2852               begin
  6  2853                 if værdi(2)=0
  6  2854                    and læstegn(værdi,1,i)='G'
  6  2855                    and læstegn(værdi,2,j)>'0' and j<='9'
  6  2856                    and (læstegn(værdi,3,k)=0 or (k>='0' and k<='9'))
  6  2857                 then
  6  2858                 begin <* gruppenavn, repræsenteres som tal *>
  7  2859                   t(nr):= 8;
  7  2860                   j:= j -'0';
  7  2861                   par.iaf(1):= if k=0 then j else (j*10+(k-'0'));
  7  2862                   s(nr):= sep;
  7  2863                 end
  6  2864                 else
  6  2865                 begin <* generel tekst *>
  7  2866                   i:= 0;
  7  2867                   for i:= i +1 while i<=4 do
  7  2868                   begin
  8  2869                     if værdi(i)<>0 then
  8  2870                     begin
  9  2871                       t(nr):= i;
  9  2872                       par.iaf(i):= værdi(i);
  9  2873                     end
  8  2874                     else i:= 4;
  8  2875                   end;
  7  2876                   s(nr):= sep;
  7  2877                 end <* generel tekst *>
  6  2878               end <* navne_parameter *>
  5  2879               else
  5  2880               begin <* talparameter *>
  6  2881                 i:= if værdi(1)<0 then 6 <* neg.tal *>
  6  2882                   else if værdi(1)>0 and værdi(1)<1000
  6  2883                           and sep>='A' and sep<='Å' then 7
  6  2884                   else 5 <* positivt tal *>;
  6  2885                 t(nr):= i;
  6  2886                 par.iaf(1):= if i<>7 then værdi(1)
  6  2887                              else værdi(1) shift 5 +(sep+1-'A');
  6  2888                 par.iaf(2):= cifre;
  6  2889                 apos:= apos+1;
  6  2890                 s(nr):= if i=7 then læstegn(tekst,apos,sep) else sep;
  6  2891                 apos:= apos-1;
  6  2892               end;
  5  2893             end;<* i=0 *>
  4  2894           until (ant>0 and nr=ant)
  4  2895                 or nr=max_ant
  4  2896                 or res<> -1
  4  2897                 or sep='sp' or sep=';' or sep='em'
  4  2898                 or sep=',' or sep='nl' or sep='nul';
  4  2899     \f

  4  2899     message procedure læs_param_sæt side 6 - 810508/hko;
  4  2900     
  4  2900           if ant>nr then res:= -25 <*parameter mangler*>
  4  2901           else
  4  2902           if nr=0 or t(1)=0 then
  4  2903           begin  <* ingen parameter før skilletegn *>
  5  2904             if res=-25 then res:= 0;
  5  2905           end
  4  2906           else if sep<>'sp' and sep<>'nl' and sep <> 'em'
  4  2907                   and sep<>';' and sep<>',' then
  4  2908           begin <* ulovligt afsluttende skilletegn *>
  5  2909             res:= -26;
  5  2910           end
  4  2911           else
  4  2912           begin <* en eller flere lovligt afsluttede parametre *>
  5  2913             if t(1)<5 and nr=1 then
  5  2914     
  5  2914     <* 1 navne_parameter *>
  5  2915     
  5  2915             begin
  6  2916               res:= 1;
  6  2917               tofrom(parm,par,8);
  6  2918             end
  5  2919             else if <*t(1)<9 and *> nr=1 then
  5  2920     
  5  2920     <* 1 parameter af anden type *>
  5  2921     
  5  2921             begin <*tal,linie eller gruppe *>
  6  2922               res:= t(1) -3;
  6  2923               parm(1):= par(1);
  6  2924             end
  5  2925             else if t(1)=5 <* pos.tal *> or t(1)=7 <*linie*> then
  5  2926     
  5  2926     <* mere end 1 parameter, hvoraf 1. er pos.tal eller linienr *>
  5  2927     
  5  2927             begin
  6  2928               i:= par(1); <* lovlige parametre er alle repræsenteret i et ord *>
  6  2929               j:= par(5); <* internt                                          *>
  6  2930               k:= par(9); <*                                                  *>
  6  2931               if nr=2 then
  6  2932               <* 2 parametre i sættet *>
  6  2933               begin
  7  2934                 res:= if (s(1)='/' or s(1)='.') and t(2)=5 <*pos.tal*> then 6
  7  2935                       else if s(1)='.' and t(2)=1 then 9
  7  2936                       else if s(1)='-' and t(1)=5 and t(2)=5 then 10
  7  2937                       else if s(1)<>'/' and s(1)<>'.'
  7  2938                                         and s(1)<>'-' then -26 <* skilletegn *>
  7  2939                       else -27;<* parametertype*>
  7  2940     \f

  7  2940     message procedure læs_param_sæt side 7 - 810501/hko;
  7  2941     
  7  2941     <* mere end 1 parameter, hvoraf 1. er pos.tal eller linienr *>
  7  2942     
  7  2942                 <* 2 parametre i sættet *>
  7  2943                 if res=6 then
  7  2944                 begin
  8  2945                   if (i<1 or i>999) and t(1)=5 then
  8  2946                     res:= -5 <* ulovligt linienr *>
  8  2947                   else if (j<1 or j>99) then
  8  2948                     res:= -6 <* ulovligt løbsnr *>
  8  2949                   else
  8  2950                   begin
  9  2951                     if t(1)=5 then i:= i shift 5;
  9  2952                     parm(1):= i shift 7 +j;
  9  2953                   end;
  8  2954                 end <* res=6 *>
  7  2955                 else if res=9 then
  7  2956                 begin
  8  2957                   if t(1)=5 and (i<1 or 999<i) then
  8  2958                     res:= -5 <*ulovligt linienr*>
  8  2959                   else
  8  2960                   begin
  9  2961                     if t(1)=5 then i:=i shift 5;
  9  2962                     parm(1):= i;
  9  2963                     parm(2):= j;
  9  2964                   end;
  8  2965                 end <* res=9 *>
  7  2966                 else if res=10 then
  7  2967                 begin
  8  2968                   begin
  9  2969                     parm(1):= i;
  9  2970                     parm(2):= j;
  9  2971                   end;
  8  2972                 end; <* res=10 *>
  7  2973               end <* nr=2 *>
  6  2974               else
  6  2975               if nr=3 then
  6  2976               <* 3 paramtre i sættet *>
  6  2977               begin
  7  2978                 res:= if (s(1)='/' or s(1)='.') and
  7  2979                          (s(2)='/' or s(2)='.') then 7
  7  2980                       else if s(1)='.' and s(2)=':' then 8
  7  2981                       else -26; <* skilletegn *>
  7  2982     \f

  7  2982     message procedure læs_param_sæt side 8 - 810501/hko;
  7  2983     
  7  2983     <* mere end 1 parameter, hvoraf 1. er pos.tal eller linienr *>
  7  2984                 <* 3 parametre i sættet *>
  7  2985                 if res=7 then
  7  2986                 begin
  8  2987                   if t(1)<>5 or (t(2)<>5 and t(2)<>7)
  8  2988                      or t(3)<>5 then
  8  2989                     res:= -27 <* parametertype *>
  8  2990                   else
  8  2991                   if i<1 or i>9999 then res:= -7 <* ulovligt busnr *>
  8  2992                   else if t(2)=5 and (j<1 or j>999) then res:=-5 <* linie *>
  8  2993                   else if k<1 or k>99 then res:= -6 <* løb *>
  8  2994                   else
  8  2995                   begin <* ok *>
  9  2996                     parm(1):= i;
  9  2997                     if t(2)=5 then j:= j shift 5;
  9  2998                     parm(2):= j shift 7 +k;
  9  2999                   end;
  8  3000                 end
  7  3001                 else if res=8 then
  7  3002                 begin
  8  3003                   if t(2)<>1 or t(3)<>5 then res:= -27
  8  3004                   else if t(1)=5 and (i<1 or i>999) then res:= -5
  8  3005                   else if k<1 or k>99 then res:= -6
  8  3006                   else
  8  3007                   begin
  9  3008                     if t(1)=5 then i:= i shift 5;
  9  3009                     parm(1):= i;
  9  3010                     parm(2):= j;
  9  3011                     parm(3):= k;
  9  3012                   end;
  8  3013                 end;
  7  3014               end <* nr=3 *>
  6  3015               else res:=-24; <* syntaks *>
  6  3016     \f

  6  3016     message procedure læs_param_sæt side 9 - 810428/hko;
  6  3017     
  6  3017             end <* mere end 1 parameter,hvoraf 1. er pos.tal eller linienr *>
  5  3018             else if t(1)=8 <* gruppe_id *> then
  5  3019             begin
  6  3020     <* mere end 1 parameter , hvoraf den første
  6  3021        er en gruppe_identifikation ved navn.
  6  3022        lovlige parametre er alle internt repræsenteret i et ord *>
  6  3023     
  6  3023               i:=par(1);
  6  3024               j:=par(5);
  6  3025               k:=par(9);
  6  3026     
  6  3026               if nr=2 then
  6  3027               <* 2 parametre *>
  6  3028               begin
  7  3029                 res:=if s(1)=':' and t(2)=5 then 11
  7  3030                      else if s(1)<>':' then -26 <* skilletegn *>
  7  3031                      else -27; <*param.type *>
  7  3032                 if res=11 then
  7  3033                 begin
  8  3034                   if j<1 or j>9999 then res:=-7 <* ulovligt busnr *>
  8  3035                   else
  8  3036                   begin
  9  3037                     parm(1):=i;
  9  3038                     parm(2):=j;
  9  3039                   end;
  8  3040                 end;
  7  3041     \f

  7  3041     message procedure læs_param_sæt side 10 - 810428/hko;
  7  3042     
  7  3042     <* mere end 1 parameter, hvoraf 1. er en gruppeidentifikation ved navn *>
  7  3043     
  7  3043               end <*nr=2*>
  6  3044               else if nr=3 then
  6  3045               <* 3 parametre *>
  6  3046               begin
  7  3047                 res:=if s(1)=':' and s(2)='/' then 11
  7  3048                      else -26; <* skilletegn *>
  7  3049                 if res=11 then
  7  3050                 begin
  8  3051                   if (t(2)<>5 and t(2)<>7) or t(3)<>5 then res:=-27 <*param.type*>
  8  3052                   else
  8  3053                   begin
  9  3054                     if t(2)=5 and (j<1 or j>999) then res:=-5 <* linie *>
  9  3055                     else
  9  3056                     begin
 10  3057                       parm(1):=i;
 10  3058                       if t(2)=5 then j:=j shift 5;
 10  3059                       parm(2):= 1 shift 22 +j shift 7 +k;
 10  3060                     end;
  9  3061                   end;
  8  3062                 end;
  7  3063               end <* nr=3 *>
  6  3064               else res:=-24; <* syntaks *>
  6  3065     \f

  6  3065     message procedure læs_param_sæt side 11 - 810501/hko;
  6  3066     
  6  3066             end <* t(1)=8 *>
  5  3067             else if t(1)=1 and par(1)= 'D' shift 16 then
  5  3068             begin
  6  3069     <* mere end 1 parameter i sættet og 1. parameter er et 'D'.
  6  3070                  lovlige parametre er alle internt repræsenteret i et ord. *>
  6  3071               i:=par(1);
  6  3072               j:=par(5);
  6  3073               k:=par(9);
  6  3074     
  6  3074               if nr=3 then
  6  3075               begin
  7  3076                 res:=if s(1)='.' and s(2)='.' then 12
  7  3077                      else -26; <* skilletegn *>
  7  3078                 if res=12 then
  7  3079                 begin
  8  3080                   if t(2)<>5 or t(3)<>5 then res:=-27 <* param. type *>
  8  3081                   else
  8  3082                   begin
  9  3083                     integer år,md,dg,tt,mm,ss;
  9  3084                     real dato,tid;
  9  3085                     år:=j//10000;
  9  3086                     md:=(j//100) mod 100;
  9  3087                     dg:=j mod 100;
  9  3088                     cifre:= par(10);
  9  3089                     tt:=if cifre>4 then k//10000 else if cifre>2 then k//100
  9  3090                            else k;
  9  3091                     mm:=if cifre>4 then (k//100) mod 100
  9  3092                            else if cifre>2 then k mod 100 else 0;
  9  3093                     ss:=if cifre>4 then k mod 100 else 0;
  9  3094     \f

  9  3094     message procedure læs_param_sæt side 12 - 810501/hko;
  9  3095     
  9  3095                     dato:=systime(5,0.0,tid);
  9  3096                     if j=0 then dg:=round dato mod 100;
  9  3097                     if år=0 and md=0 then md:=(round dato//100) mod 100;
  9  3098                     if år=0 then år:=round dato//10000;
  9  3099                     if år>99 or md<1 or md>12 or tt>23 or mm>59 or ss>59 then
  9  3100                       res:=-24 <* syntaks *>
  9  3101                     else if dg<1 or dg > (case md of (
  9  3102                            31,(if år mod 4=0 then 29 else 28),31, 30,31,30,
  9  3103                            31,31,30, 31,30,31)) then res:=-24
  9  3104                     else
  9  3105                     begin
 10  3106                       parm(1):=år*10000+md*100+dg;
 10  3107                       parm(2):=tt*10000+mm*100+ss;
 10  3108                     end;
  9  3109                   end;
  8  3110     
  8  3110                 end; <* res=12 *>
  7  3111               end <* nr=3 *>
  6  3112               else res:=-24; <*syntaks*>
  6  3113             end <* t(1)=1 and par(1)='D' shift 16 *>
  5  3114     
  5  3114             else res:=-27;<*parametertype*>
  5  3115           end; <* en eller flere parametre *>
  4  3116     
  4  3116           læs_param_sæt:= res;
  4  3117           term:= sep;
  4  3118           if res>= 0 then pos:= apos;
  4  3119         end;
  3  3120       end læs_param_sæt;
  2  3121     \f

  2  3121     message procedure læs_kommando side 1 - 810428/hko;
  2  3122     
  2  3122     integer procedure læs_kommando(z,kilde,op_ref,pos,indeks,sep,slut_tegn);
  2  3123       value                           kilde;
  2  3124       zone                          z;
  2  3125       integer                         kilde,       pos,indeks,sep,slut_tegn;
  2  3126       integer array field                   op_ref;
  2  3127     
  2  3127     <* proceduren indlæser er kommmando fra en terminal (telex,
  2  3128        skærm eller skrivemaskine). ved indlæsning fra skærm eller
  2  3129        skrivemaskine inviteres først ved udskrivning af '>'-tegn.
  2  3130        for terminalers vedkommendeslettes linie 23 og 24 og 'cursor' positioneres til
  2  3131        23'ende linie inden invitation.
  2  3132     *>
  2  3133     \f

  2  3133     message procedure læs_kommando side 2 - 810428/hko;
  2  3134     
  2  3134     begin
  3  3135       integer
  3  3136         a_pos,
  3  3137         a_res,res,
  3  3138         i,j,k;
  3  3139       boolean
  3  3140         skip;
  3  3141     
  3  3141     <*V*>setposition(z,0,0);
  3  3142     
  3  3142       case kilde//100 of
  3  3143       begin
  4  3144         begin <* io *>
  5  3145           write(z,"nl",1,">",1);
  5  3146         end;
  4  3147     
  4  3147         begin <* operatør *>
  5  3148           cursor(z,24,1);
  5  3149           write(z,"esc" add 128,1,<:ÆK:>);
  5  3150           cursor(z,23,1);
  5  3151           write(z,"esc" add 128,1,<:ÆK:>);
  5  3152           outchar(z,'>');
  5  3153         end;
  4  3154     
  4  3154         begin <* garageterminal *> ;
  5  3155           outchar(z,'nl');
  5  3156         end
  4  3157       end;
  3  3158     
  3  3158     <*V*>setposition(z,0,0);
  3  3159     \f

  3  3159     message procedure læs_kommando side 3 - 810921/hko,cl;
  3  3160     
  3  3160         res:=0;
  3  3161         skip:= false;
  3  3162     <*V*>
  3  3163         k:=læs_store(z,i);
  3  3164     
  3  3164         apos:= 1;
  3  3165         while k<=6 <*klasse=bogstav*> do
  3  3166         begin
  4  3167           if a_pos<3 then skriv_tegn(d.op_ref.data,apos,i);
  4  3168     <*V*> k:= læs_store(z,i);
  4  3169         end;
  3  3170     
  3  3170         skip:= skip or i='?' or (a_pos=1 and (i=',' or i=';'));
  3  3171     
  3  3171         if i=',' and a_pos>1 then
  3  3172         begin
  4  3173           skrivtegn(d.op_ref.data,a_pos,i);
  4  3174           repeat
  4  3175       <*V*> k:= læs_store(z,i);
  4  3176             if a_pos=4 and k=6 then skriv_tegn(d.op_ref.data,a_pos,i);
  4  3177           until k>=7;
  4  3178         end;
  3  3179     
  3  3179         pos:=a_pos;
  3  3180         while k<8 do
  3  3181         begin
  4  3182           if a_pos< (att_op_længde//2*3-2) then
  4  3183             skriv_tegn(d.op_ref.data,a_pos,i);
  4  3184           skip:= skip or i='?';
  4  3185     <*V*> k:= læs_store(z,i);
  4  3186           pos:=pos+1;
  4  3187         end;
  3  3188     
  3  3188         skip:= skip or i='?' or i='esc';
  3  3189         slut_tegn:= i;
  3  3190         skrivtegn(d.op_ref.data,apos,'em');
  3  3191         afslut_text(d.op_ref.data,apos);
  3  3192     \f

  3  3192     message procedure læs_kommando side 4 - 820301/hko/cl;
  3  3193     
  3  3193       disable
  3  3194       begin
  4  3195         integer
  4  3196           i1,
  4  3197           nr,
  4  3198           partype,
  4  3199           cifre;
  4  3200         integer array
  4  3201           spec(1:1),
  4  3202           værdi(1:4);
  4  3203     
  4  3203     <*+2*>
  4  3204         if testbit25 and overvåget then
  4  3205         disable begin
  5  3206           real array field raf;
  5  3207           write(out,"nl",1,<:kommando læst::>);
  5  3208           laf:=data;
  5  3209           write(out,d.op_ref.laf,<:<'<'>sluttegn<'>'>=:>,<<d>,sluttegn,
  5  3210                     <: skip=:>,if skip then <:true:> else <:false:>);
  5  3211           ud;
  5  3212         end;
  4  3213     <*-2*>
  4  3214     
  4  3214         for i:=1 step 1 until 32 do ia(i):=0;
  4  3215     
  4  3215         if skip then
  4  3216         begin
  5  3217           res:=53; <*annulleret*>
  5  3218           pos:= -1;
  5  3219           goto slut_læskommando;
  5  3220         end;
  4  3221     \f

  4  3221     message procedure læs_kommando side 5 - 850820/cl;
  4  3222     
  4  3222         i:= kilde//100; <* hovedmodul *>
  4  3223         k:= kilde mod 100; <* løbenr *>
  4  3224     <*  if pos>79 then linieoverløb; *>
  4  3225         pos:=a_pos:=0;
  4  3226         spec(1):= ',' shift 16;
  4  3227     
  4  3227     <*+4*>
  4  3228         if k<1 or k>(case i of (1,max_antal_operatører,
  4  3229                                   max_antal_garageterminaler)) then
  4  3230         begin
  5  3231           fejlreaktion(3<*programfejl*>,kilde,<:ukendt kilde til kommando:>,1);
  5  3232           res:=31;
  5  3233         end
  4  3234         else
  4  3235     <*-4*>
  4  3236         if i>0 and i<4 then <* io, operatør eller garageterminal *>
  4  3237         begin
  5  3238           <* læs operationskode *>
  5  3239           j:=param(d.op_ref.data,apos,spec,tf_kommandotabel,cifre,værdi,sep);
  5  3240     
  5  3240           res:= if j=1 and sep='.' and i=2<*operatør*> then -1 <* skærmopdatering *>
  5  3241                 else if cifre>0 or j=1 or j=3 or j=5 then  24 <* syntaks *>
  5  3242                 else if j=2 then 4 <*ukendt kommando*>
  5  3243                 else if j=4 then 31 <*systemfejl: ukendt tabelfil*>
  5  3244                 else if sep<>'sp' and sep<>','
  5  3245                         and sep<>'nl' and sep<>';'
  5  3246                         and sep<>'nul' and sep<>'em' then 26
  5  3247                                                            <*skilletegn*>
  5  3248                 else if -, læsbit_i(værdi(4),i-1) then 4 
  5  3249     <*                  logand(extend 0 add værdi(4)
  5  3250                                extend 1 shift (case i of (0,k,8+k)))=0 then 4
  5  3251     *>                                                   <*ukendt kommando*>
  5  3252                 else 1;
  5  3253     \f

  5  3253     message procedure læs_kommando side 5a- 810409/hko;
  5  3254     
  5  3254     <*+2*>if testbit25 and overvåget then
  5  3255           begin
  6  3256             write(out,"nl",0,<:funk opslag: param,apos,cifre,sep,res::>,
  6  3257                   << -dddd>,j,apos,cifre,sep,res,
  6  3258                   <:   værdi(1-4)::>,værdi(1),værdi(2),værdi(3),værdi(4),
  6  3259                   "nl",0);
  6  3260             if j<>0 then skriv_op(out,op_ref);
  6  3261             ud;
  6  3262           end;
  5  3263     <*-2*>
  5  3264     
  5  3264           if res=31 then fejlreaktion(18<*tabelfil*>,j,
  5  3265                                       <:=res, filnr 1025, læskommando:>,0);
  5  3266     
  5  3266           if res=1 then <* operationskode ok *>
  5  3267           begin
  6  3268             if sep<>'sp' then apos:=apos-1;
  6  3269             d.op_ref.opkode:=værdi(1);
  6  3270             indeks:=værdi(2);
  6  3271             partype:= værdi(3);
  6  3272             nr:= 0;
  6  3273             pos:= apos;
  6  3274     \f

  6  3274     message procedure læs_kommando side 6 - 810409/hko;
  6  3275     
  6  3275             while res=1 do
  6  3276             begin
  7  3277               læs_param_sæt(d.op_ref.data,apos,0<*indtil 3 enkeltparametre*>,
  7  3278                             værdi,sep,a_res);
  7  3279               nr:= nr +1;
  7  3280               i1:= værdi(1);
  7  3281     <*+2*>  if testbit25 and overvåget then
  7  3282             begin
  8  3283               write(out,"nl",1,<:param sæt: apos,sep,ares::>,<< -dddddd>,
  8  3284                     apos,sep,ares,<:   værdi(1-4)::>,
  8  3285                     værdi(1),værdi(2),værdi(3),værdi(4),
  8  3286                     "nl",0);
  8  3287               ud;
  8  3288            end;
  7  3289     <*-2*>
  7  3290               case par_type of
  7  3291               begin
  8  3292     
  8  3292     <*1: (<ingenting>!<busnr> (<omr>)!<linienr>/<løbnr> (<omr>)) *>
  8  3293     
  8  3293                 begin
  9  3294                   if nr=1 then
  9  3295                   begin
 10  3296                     if a_res=0 then res:=2 <*godkendt*>
 10  3297                     else if a_res=2 and (i1<1 or i1>9999)
 10  3298                          then res:=7 <*busnr ulovligt*>
 10  3299                     else if a_res=2 or a_res=6 then
 10  3300                     begin
 11  3301                       ia(1):= if a_res=2 then i1
 11  3302                                          else 1 shift 22 +i1;
 11  3303                     end
 10  3304                     else res:= 27; <*parametertype*>
 10  3305                     if res<4 then pos:= apos;
 10  3306                   end <*nr=1*>
  9  3307                   else
  9  3308                   if nr=2 then
  9  3309                   begin
 10  3310                     if ares=0 then res:= 2 <*godkendt*>
 10  3311                     else if ares=1 then
 10  3312                     begin
 11  3313                       ia(2):= find_område(i1);
 11  3314                       if ia(2)=0 then res:= 17; <* kanal-nr ukendt *>
 11  3315                     end
 10  3316                     else res:= 27; <* syntaks, parametertype *>
 10  3317                   end
  9  3318                   else
  9  3319                   if ares=0 then res:= 2<*godkendt*> else res:= 24 <* syntaks *>;
  9  3320                 end;
  8  3321     \f

  8  3321     message procedure læs_kommando side 7 - 810226/hko;
  8  3322     
  8  3322     <*2: (<busnr> (<område>)!<linie>/<løbnr>) *>
  8  3323     
  8  3323                 begin
  9  3324                   if nr=1 then
  9  3325                   begin
 10  3326                     if a_res=0 then res:=25 <*parameter mangler*>
 10  3327                     else if a_res=2 and (i1<1 or i1>9999)
 10  3328                          then res:=7 <*busnr ulovligt*>
 10  3329                     else if a_res=2 or a_res=6 then
 10  3330                     begin
 11  3331                       ia(1):=if a_res=2 then i1
 11  3332                                         else 1 shift 22 +i1;
 11  3333                     end
 10  3334                     else res:= 27; <*parametertype*>
 10  3335                     if res<4 then pos:=a_pos;
 10  3336                   end
  9  3337                   else
  9  3338                   if nr=2 then
  9  3339                   begin
 10  3340                     if ares=0 then res:= 2 <*godkendt*> else
 10  3341                     if ares=1 and ia(1) shift (-21) = 0 then
 10  3342                     begin
 11  3343                       ia(2):= findområde(i1);
 11  3344                       if ia(2)=0 then res:= 56; <*område ukendt*>
 11  3345                     end
 10  3346                     else res:= 27;
 10  3347                     if res<4 then pos:= apos;
 10  3348                   end
  9  3349                   else
  9  3350                   if ares=0 then res:= 2 else res:= 24<*syntaks*>;
  9  3351                 end;
  8  3352     \f

  8  3352     message procedure læs_kommando side 8 - 810223/hko;
  8  3353     
  8  3353     <*3: (<linie>!G<nr>) *>
  8  3354     
  8  3354                 begin
  9  3355                   if nr=1 then
  9  3356                   begin
 10  3357                     if a_res=0 then res:=25 <*parameter mangler*>
 10  3358                     else if a_res=2 and (i1<1 or i1>999) then res:=5
 10  3359                                                         <*linienr ulovligt*>
 10  3360                     else if a_res=2 or a_res=4 or a_res=5 then
 10  3361                     begin
 11  3362                       ia(1):=
 11  3363                         if a_res=2 then      4 shift 21 +i1 shift 5
 11  3364                         else if a_res=4 then 4 shift 21 +i1
 11  3365                         else <* a_res=5 *>   5 shift 21 +i1;
 11  3366                     end
 10  3367                     else res:=27; <* parametertype *>
 10  3368                     if res<4 then pos:= a_pos;
 10  3369                   end
  9  3370                   else
  9  3371                   res:= if nr=2 and a_res<>0 then 24<*syntaks*>
  9  3372                                              else 2;<*godkendt*>
  9  3373                 end;
  8  3374     
  8  3374     <*4:  <ingenting> *>
  8  3375     
  8  3375                 begin
  9  3376                   res:= if a_res<>0 then 24<*syntaks*>
  9  3377                                     else 2;<*godkendt*>
  9  3378                 end;
  8  3379     \f

  8  3379     message procedure læs_kommando side 9 - 810226/hko;
  8  3380     
  8  3380     <*5: (<kanalnr>) *>
  8  3381     
  8  3381                 begin
  9  3382                   long field lf;
  9  3383     
  9  3383                   if nr=1 then
  9  3384                   begin
 10  3385                     if a_res=0 then res:= 25
 10  3386                     else if a_res<>1 then res:=27<*parametertype*>
 10  3387                     else
 10  3388                     begin
 11  3389                       j:= 0; lf:= 4;
 11  3390                       for i:= 1 step 1 until max_antal_kanaler do
 11  3391                         if kanal_navn(i)=værdi.lf then j:= i;
 11  3392                       if j<>0 then
 11  3393                       begin
 12  3394                         ia(1):= 3 shift 22 + j;
 12  3395                         res:= 2;
 12  3396                       end
 11  3397                       else
 11  3398                         res:= 17; <* kanal ukendt *>
 11  3399                     end;
 10  3400                     if res<4 then pos:= a_pos;
 10  3401                   end
  9  3402                   else
  9  3403                   res:=if nr=2 and a_res<>0 then 24<*syntaks*>
  9  3404                                             else 2;<*godkendt*>
  9  3405                 end;
  8  3406     \f

  8  3406     message procedure læs_kommando side 10 - 810415/hko;
  8  3407     
  8  3407     <*6:  <busnr>/<linie>/<løb> (<område>) *>
  8  3408     
  8  3408                 begin
  9  3409                   if nr=1 then
  9  3410                   begin
 10  3411                     if a_res=0 then res:=25<*parameter mangler*>
 10  3412                     else if a_res=7 then
 10  3413                     begin
 11  3414                       ia(1):= i1;
 11  3415                       ia(2):= 1 shift 22 + værdi(2);
 11  3416                     end
 10  3417                     else res:=27;<*parametertype*>
 10  3418                     if res<4 then pos:= apos;
 10  3419                   end
  9  3420                   else
  9  3421                   if nr=2 then
  9  3422                   begin
 10  3423                     if ares=0 then res:= 2 <*godkendt*> else
 10  3424                     if ares=1 then
 10  3425                     begin
 11  3426                       ia(3):= findområde(i1);
 11  3427                       if ia(3)=0 then res:= 56; <* område ukendt *>
 11  3428                     end
 10  3429                     else res:= 27; <*parametertype*>
 10  3430                     if res<4 then pos:= apos;
 10  3431                   end
  9  3432                   else
  9  3433                   if ares=0 then res:= 2 else res:= 24;
  9  3434                 end;
  8  3435     \f

  8  3435     message procedure læs_kommando side 11 - 810512/hko/cl;
  8  3436     
  8  3436     
  8  3436     <*                                                 att_op_længde//2-2 *>
  8  3437     <*7:  <linienr>.<indeks>:<løbnr> (<interval>.<løb>)                   *>
  8  3438     <*                                                  1                 *>
  8  3439     
  8  3439                 begin
  9  3440                   if nr=1 then
  9  3441                   begin
 10  3442                     if a_res=0 then res:=25 <*parameter mangler*>
 10  3443                     else if a_res=8 then
 10  3444                     begin
 11  3445                       ia(1):= 4 shift 21 + i1;
 11  3446                       ia(2):= værdi(2);
 11  3447                       ia(3):= værdi(3);
 11  3448                       indeks:= 3;
 11  3449                     end
 10  3450                     else res:=27;<*parametertype*>
 10  3451                   end
  9  3452                   else if nr<=att_op_længde//2-2 then
  9  3453                   begin
 10  3454                     if a_res=0 and (sep=',' or nr>2) then res:=2<*godkendt*>
 10  3455                     else if a_res=0 then res:=25 <* parameter mangler *>
 10  3456                     else if a_res=10 then
 10  3457                     begin
 11  3458                       if i1>0 and i1<100 and værdi(2)>0 and værdi(2)<100 then
 11  3459                       begin
 12  3460                         ia(nr+2):= i1 shift 12 + værdi(2);
 12  3461                         indeks:= nr +2;
 12  3462                       end
 11  3463                       else if i1<1 or i1>99 then res:=44 <*intervalstr. ulovlig*>
 11  3464                       else res:=6; <*løb-nr ulovligt*>
 11  3465                     end
 10  3466                     else res:=27;<*parametertype*>
 10  3467                   end
  9  3468                   else
  9  3469                     res:= if a_res=0 then 2 else 24;<* syntaks *>
  9  3470                   if res<4 then pos:=a_pos;
  9  3471                 end;
  8  3472     \f

  8  3472     message procedure læs_kommando side 12 - 810306/hko;
  8  3473     
  8  3473     <*8: (<operatør>!<radiokanal>!<garageterminal>) *>
  8  3474     
  8  3474                 begin
  9  3475                   if nr=1 then
  9  3476                   begin
 10  3477                     if a_res=0 then res:=25 <* parameter mangler *>
 10  3478                     else if a_res=2 then
 10  3479                     begin
 11  3480                       j:=d.op_ref.opkode;
 11  3481                       ia(1):=i1;
 11  3482                       k:=(j+1)//2;
 11  3483                       if k<1 or k=3 or k>4 then
 11  3484                         fejlreaktion(3<*programfejl*>,j,<:opkode, partype=8:>,1)
 11  3485                       else
 11  3486                       begin
 12  3487                         if k=4 then k:=3;
 12  3488                         if i1<1 or i1> (case k of
 12  3489                           (max_antal_operatører,max_antal_radiokanaler,
 12  3490                            max_antal_garageterminaler))
 12  3491                         then res:=case k of (28,29,17);
 12  3492                       end;
 11  3493                     end
 10  3494                     else if a_res=1 and (d.op_ref.opkode+1)//2=1 then
 10  3495                     begin
 11  3496                       laf:= 0;
 11  3497                       ia(1):= find_bpl(værdi.laf(1));
 11  3498                       if ia(1)<1 or ia(1)>max_antal_operatører then res:=28;
 11  3499                     end
 10  3500                     else res:=27; <*parametertype*>
 10  3501                   end
  9  3502                   else
  9  3503                   if nr=2 and d.opref.opkode=1 then
  9  3504                   begin
 10  3505                     <* åbningstilstand for operatørplads *>
 10  3506                     if a_res=0 then res:= 2 <*godkendt*>
 10  3507                     else if a_res<>1 then res:= 27 <*parametertype*>
 10  3508                     else begin
 11  3509                       res:= 2<*godkendt*>;
 11  3510                       j:= værdi(1) shift (-16);
 11  3511                       if j='S' then ia(2):= 3 else
 11  3512                       if j<>'Å' then res:= 24; <*syntaks*>
 11  3513                     end;
 10  3514                   end
  9  3515                   else 
  9  3516                   begin
 10  3517                     res:=if a_res=0 then  2 <* godkendt *>
 10  3518                                     else 24;<* syntaks *>
 10  3519                   end;
  9  3520                   if res<4 then pos:=a_pos;
  9  3521                 end; <* partype 8 *>
  8  3522     \f

  8  3522     message procedure læs_kommando side 13 - 810306/hko;
  8  3523     
  8  3523     
  8  3523     <*                              att_op_længde//2 *>
  8  3524     <*9:  <operatør>((+!-)<linienr>)                 *>
  8  3525     <*                              1                *>
  8  3526     
  8  3526                 begin
  9  3527                   if nr=1 then
  9  3528                   begin
 10  3529                     if a_res=0 then res:=25 <* parameter mangler *>
 10  3530                     else if a_res=2 then
 10  3531                     begin
 11  3532                       ia(1):=i1;
 11  3533                       if i1<1 or i1>max_antal_operatører then res:=28;
 11  3534                     end
 10  3535                     else if a_res=1 then
 10  3536                     begin
 11  3537                       laf:= 0;
 11  3538                       ia(1):= find_bpl(værdi.laf(1));
 11  3539                       if ia(1)<1 or ia(1)>max_antal_operatører then res:=28;
 11  3540                     end
 10  3541                     else res:=27; <* parametertype *>
 10  3542                   end
  9  3543                   else if nr<=att_op_længde//2 then
  9  3544                   begin <* nr>1 *>
 10  3545                     if a_res=0 then res:=(if nr>2 then 2 else 25)
 10  3546                     else if a_res=2 or a_res=3 then
 10  3547                     begin
 11  3548                       ia(nr):=i1; indeks:= nr;
 11  3549                       if i1=0 or abs(i1)>999 then res:=5;
 11  3550                     end
 10  3551                     else res:=27; <* parametertype *>
 10  3552                     if res<4 then pos:=a_pos;
 10  3553                   end
  9  3554                   else
  9  3555                     res:=if a_res<>0 then 24 <* syntaks (for mange parametre) *>
  9  3556                                      else 2;
  9  3557                 end; <* partype 9 *>
  8  3558     \f

  8  3558     message procedure læs_kommando side 14 - 810428/hko;
  8  3559     
  8  3559     <*         2 *>
  8  3560     <*10: (bus)  *>
  8  3561     <*         1 *>
  8  3562     
  8  3562                 begin
  9  3563                   if a_res=0 and nr=1 then res:=25 <* parameter mangler *>
  9  3564                   else if a_res<>0 and nr>2 then res:=24 <* syntaks (for mange) *>
  9  3565                   else if a_res=0 then res:=2 <* godkendt *>
  9  3566                   else if a_res<>2 then res:=27 <* parametertype *>
  9  3567                   else if i1<1 or i1>9999 then res:=7 <*ulovligt busnr *>
  9  3568                   else
  9  3569                     ia(nr):=i1;
  9  3570                 end;
  8  3571     
  8  3571     <*             5 *>
  8  3572     <*11: (<linie>)  *>
  8  3573     <*             1 *>
  8  3574     
  8  3574                 begin
  9  3575                   if a_res=0 and nr=1 then res:=25
  9  3576                   else if a_res<>0 and nr>5 then res:=24
  9  3577                   else if a_res=0 then res:=2
  9  3578                   else if a_res<>2 and a_res<>4 then res:=27
  9  3579                   else if a_res=2 and (i1<1 or i1>999) then res:=5 <* ulovl.linie *>
  9  3580                   else
  9  3581                     ia(nr):=
  9  3582                       (if a_res=4 then i1 else i1 shift 5) + 4 shift 21;
  9  3583                 end;
  8  3584     \f

  8  3584     message procedure læs_kommando side 15 - 810306/hko;
  8  3585     
  8  3585     <*12: (<ingenting>!<navn>) *>
  8  3586     
  8  3586                 begin
  9  3587                   if nr=1 then
  9  3588                   begin
 10  3589                     if a_res=0 then res:=2 <*godkendt*>
 10  3590                     else if a_res=1 then
 10  3591                       tofrom(ia,værdi,8)
 10  3592                     else res:=27; <* parametertype *>
 10  3593                   end
  9  3594                   else
  9  3595                     res:=if a_res<>0 then 24 <* syntaks (for mange) *>
  9  3596                                      else  2;
  9  3597                 end; <* partype 12 *>
  8  3598     \f

  8  3598     message procedure læs_kommando side 16 - 810512/hko/cl;
  8  3599     
  8  3599     <*                                                         15 *>
  8  3600     <*13: G<grp.nr>:(<bus>!<linie>/<løb>) (<bus>!<linie>/<løb>)   *>
  8  3601     <*                                                         1  *>
  8  3602     
  8  3602                 begin
  9  3603                   if nr=1 then
  9  3604                   begin
 10  3605                     if a_res=0 then res:=25 <* parameter mangler *>
 10  3606                     else
 10  3607                     if a_res=11 then
 10  3608                     begin
 11  3609                       ia(1):= 5 shift 21 + i1;
 11  3610                       ia(2):=værdi(2);
 11  3611                       indeks:= 2;
 11  3612                     end
 10  3613                     else res:=27; <* parametertype *>
 10  3614                   end
  9  3615                   else if nr<= att_op_længde//2-1 then
  9  3616                   begin
 10  3617                     if a_res=0 and(sep=',' or nr>2)then res:=2 <* godkendt *>
 10  3618                     else if a_res=0 then res:=25 <* parameter mangler *>
 10  3619                     else if ares=2 and (i1<1 or i1>9999) then
 10  3620                             res:= 7 <*busnr ulovligt*>
 10  3621                     else if a_res=2 or a_res=6 then
 10  3622                     begin
 11  3623                       ia(nr+1):=i1+ (if a_res=6 then 1 shift 22 else 0);
 11  3624                       indeks:= nr+1;
 11  3625                     end
 10  3626                     else res:=27; <* parametertype *>
 10  3627                   end
  9  3628                   else
  9  3629                     res:=if a_res=0 then  2 <*godkendt *>
  9  3630                                     else 24;<* syntaks *>
  9  3631                   if res<4 then pos:=a_pos;
  9  3632                 end; <* partype 13 *>
  8  3633     \f

  8  3633     message procedure læs_kommando side 17 - 810311/hko;
  8  3634     
  8  3634     <*14: <linie>.<indeks> *>
  8  3635     
  8  3635                 begin
  9  3636                   if nr=1 then
  9  3637                   begin
 10  3638                     if a_res=0 then res:=25 <* parameter mangler *>
 10  3639                     else if a_res=9 then
 10  3640                     begin
 11  3641                       ia(1):= 1 shift 23 +i1;
 11  3642                       ia(2):= værdi(2);
 11  3643                     end
 10  3644                     else res:=27; <* parametertype *>
 10  3645                   end
  9  3646                   else <* nr>1 *>
  9  3647                     res:= if a_res=0 then  2 <* godkendt *>
  9  3648                                      else 24;<* syntaks *>
  9  3649                 end; <* partype 14 *>
  8  3650     \f

  8  3650     message procedure læs_kommando side 18 - 810313/hko;
  8  3651     
  8  3651     <*15: <linie>.<indeks> <bus> *>
  8  3652     
  8  3652                 begin
  9  3653                   if nr=1 then
  9  3654                   begin
 10  3655                     if a_res=0 then res:= 25 <* parameter mangler *>
 10  3656                     else if a_res=9 then
 10  3657                     begin
 11  3658                       ia(1):= 1 shift 23 +i1;
 11  3659                       ia(2):= værdi(2);
 11  3660                     end
 10  3661                     else res:=27; <* parametertype *>
 10  3662                   end
  9  3663                   else if nr=2 then
  9  3664                   begin
 10  3665                     if a_res=0 then res:=25
 10  3666                     else if a_res=2 then
 10  3667                     begin
 11  3668                       if i1<1 or i1>9999 then res:=7 <* ulovligt busnr *>
 11  3669                       else ia(3):= i1;
 11  3670                     end
 10  3671                     else res:=27; <*parametertype *>
 10  3672                   end
  9  3673                   else
  9  3674                     res:=if a_res=0 then  2 <* godkendt *>
  9  3675                                     else 24;<* syntaks *>
  9  3676                   if res<4 then pos:=a_pos;
  9  3677                 end; <* partype 15 *>
  8  3678     \f

  8  3678     message procedure læs_kommando side 19 - 810311/hko;
  8  3679     
  8  3679     <*16: (<ingenting>!D.<dato>.<klokkeslet> *>
  8  3680     
  8  3680                 begin
  9  3681                   if nr=1 then
  9  3682                   begin
 10  3683                     if a_res=0 then res:=2 <* godkendt *>
 10  3684                     else if a_res=12 then
 10  3685                     begin
 11  3686                       raf:=0;
 11  3687                       ia.raf(1):= systid(i1,værdi(2));
 11  3688                     end
 10  3689                     else res:=27; <* parametertype *>
 10  3690                   end
  9  3691                   else
  9  3692                     res:= if a_res=0 then  2 <* godkendt *>
  9  3693                                      else 24;<* syntaks *>
  9  3694                   if res<4 then pos:=a_pos;
  9  3695                 end; <* partype 16 *>
  8  3696     \f

  8  3696     message procedure læs_kommando side 20 - 810511/hko;
  8  3697     
  8  3697     <*17: G<grp.nr> *>
  8  3698     
  8  3698                 begin
  9  3699                   if nr=1 then
  9  3700                   begin
 10  3701                     if a_res=0 then res:=25 <*parameter mangler *>
 10  3702                     else if a_res=5 then
 10  3703                     begin
 11  3704                       ia(1):= 5 shift 21 +i1;
 11  3705                     end
 10  3706                     else res:=27; <* parametertype *>
 10  3707                   end
  9  3708                   else
  9  3709                     res:= if a_res=0 then  2 <* godkendt *>
  9  3710                                      else 24;<* syntaks *>
  9  3711                 end; <* partype 17 *>
  8  3712     
  8  3712     <*               att_op_længde//2 *>
  8  3713     <*18: (<heltal>)                  *>
  8  3714     <*               1                *>
  8  3715     
  8  3715                 begin
  9  3716                   if nr=1 and a_res=0 then res:= 25 <*parameter mangler*>
  9  3717                   else
  9  3718                   if nr<=att_op_længde//2 then
  9  3719                   begin
 10  3720                     if a_res=2 or a_res=3 <* pos/neg heltal *> then
 10  3721                     begin
 11  3722                       ia(nr):= i1; indeks:= nr;
 11  3723                     end
 10  3724                     else if a_res=0 then res:= 2
 10  3725                     else res:= 27; <*parametertype*>
 10  3726                   end
  9  3727                   else
  9  3728                   res:= if a_res=0 then 2 else 24;<*syntaks (for mange)*>
  9  3729                 end;
  8  3730     \f

  8  3730     message procedure læs_kommando side 21 - 820302/cl;
  8  3731     
  8  3731     <*19: <linie>/<løb>  <linie>/<løb> *>
  8  3732     
  8  3732                 begin
  9  3733                   if nr<3 and a_res=0 then res:= 25 <*parameter mangler*>
  9  3734                   else if nr<3 and a_res<>6 then res:= 27 <*parametertype*>
  9  3735                   else if nr<3 then
  9  3736                   begin
 10  3737                     ia(nr):=i1 + 1 shift 22;
 10  3738                   end
  9  3739                   else
  9  3740                     res:= if a_res=0 then 2 <*godkendt*>
  9  3741                                     else 24;<*syntaks (for mange)*>
  9  3742                   if res<4 then pos:= a_pos;
  9  3743                 end; <* partype 19 *>
  8  3744     
  8  3744     <*20: <busnr> <kortnavn> *>
  8  3745                 begin
  9  3746                   if nr=1 then
  9  3747                   begin
 10  3748                     if ares=0 then res:= 25 else
 10  3749                     if ares=2 and (i1<1 or 9999<i1) then res:= 24 else
 10  3750                     if ares<>2 then res:= 27 else ia(1):= i1;
 10  3751                   end
  9  3752                   else
  9  3753                   if nr=2 then
  9  3754                   begin
 10  3755                     if ares=1 and værdi(2) extract 8 = 0 then
 10  3756                     begin
 11  3757                       ia(2):= værdi(1); ia(3):= værdi(2);
 11  3758                     end
 10  3759                     else res:= if ares=0 then 25 else if ares=1 then 62 else 27;
 10  3760                   end
  9  3761                   else
  9  3762                   if ares=0 then res:= 2 else res:= 24;
  9  3763                 end; <* partype 20 *>
  8  3764     \f

  8  3764     message procedure læs_kommando side 22 - 851001/cl;
  8  3765     
  8  3765     <*                2                                     *>
  8  3766     <*21:  ( <linie> )    (<garage> ! OMR (ALL ! <område>)) *>
  8  3767     <*                0                                     *>
  8  3768     
  8  3768                 begin
  9  3769                   laf:= 0;
  9  3770                   if nr=1 and a_res=0 then res:= 25 <*parameter mangler*>
  9  3771                   else if a_res=0 and (ia(3)=-2 or ia(3)=0) then res:= 25
  9  3772                   else if a_res<>0 and nr>4 then res:= 24 <*syntaks (for mange)*>
  9  3773                   else if a_res=0 then res:= 2 <*godkendt*>
  9  3774                   else if a_res=2 and (i1<1 or i1>999) then res:= 5 <*ulovligt*>
  9  3775                   else if (a_res=2 or a_res=4) and nr<=2 then
  9  3776                   begin
 10  3777                     if ia(3)<>0 then res:= 27 else
 10  3778                     ia(nr):= (4 shift 21) + (if a_res=2 then i1 shift 5 else i1);
 10  3779                   end
  9  3780                   else
  9  3781                   if ares=1 then
  9  3782                   begin
 10  3783                     if nr=1 then
 10  3784                     begin
 11  3785                       ia(1):= (4 shift 21) + (1 shift 5);
 11  3786                       ia(2):= (4 shift 21) + (999 shift 5);
 11  3787                     end;
 10  3788                     if ia(3)=-2 then
 10  3789                     begin
 11  3790                       if i1=long<:ALL:> shift (-24) extract 24 then
 11  3791                         ia(3):= -1
 11  3792                       else
 11  3793                       begin
 12  3794                         ia(3):= findområde(i1);
 12  3795                         if ia(3)=0 then res:= 56 else
 12  3796                         ia(3):= 14 shift 20 + ia(3);
 12  3797                       end;
 11  3798                     end
 10  3799                     else
 10  3800                     if ia(3) = 0 then
 10  3801                     begin
 11  3802                       if i1 = long<:OMR:> shift (-24) extract (24) then 
 11  3803                         ia(3):= -2
 11  3804                       else
 11  3805                         ia(3):= find_bpl(værdi.laf(1));
 11  3806                       if ia(3)=0 then res:= 55;
 11  3807                     end
 10  3808                     else res:= 24;
 10  3809                   end
  9  3810                   else res:= 27; <*parametertype*>
  9  3811                   if res<4 then pos:= apos;
  9  3812                 end;
  8  3813     
  8  3813     <*22: (<busnr> (<område) ! <linie>/<løb> (<område>) ) *>
  8  3814     
  8  3814                 begin
  9  3815                   if nr=1 then
  9  3816                   begin
 10  3817                     if ares=0 then res:= 25 <*parameter mangler*>
 10  3818                     else if ares=2 and (i1<1 or i1>9999) 
 10  3819                          then res:= 7 <* busnr ulovligt *>
 10  3820                     else if ares=2 or ares=6 then
 10  3821                     begin
 11  3822                       ia(1):= if ares=2 then i1 else 1 shift 22 + i1;
 11  3823                     end
 10  3824                     else res:= 27 <* parametertype *>
 10  3825                   end
  9  3826                   else
  9  3827                   if nr=2 then
  9  3828                   begin
 10  3829                     if ares=0 then res:= 2 <* godkendt *>
 10  3830                     else if ares=1 then
 10  3831                     begin
 11  3832                       ia(2):= findområde(i1);
 11  3833                       if ia(2)=0 then res:= 17 <*kanal ukendt*>
 11  3834                     end
 10  3835                     else
 10  3836                       res:= 27; <* parametertype *>
 10  3837                   end
  9  3838                   else if ares=0 then res:= 2 <*godkendt*>
  9  3839                                  else res:= 24; <*syntaks*>
  9  3840                   if res < 4 then pos:= apos;
  9  3841                 end;
  8  3842     
  8  3842     <*23: ( <linie> (<område>) ! G<nr> (<område>) ) *>
  8  3843     
  8  3843                 begin
  9  3844                   if nr=1 then
  9  3845                   begin
 10  3846                     if ares=0 then res:= 25 else
 10  3847                     if ares=2 and (i1<1 or i1>999) then res:= 5 else
 10  3848                     if ares=2 or ares=4 or ares=5 then
 10  3849                     begin
 11  3850                       ia(1):=
 11  3851                         if ares=2 then 4 shift 21 + i1 shift 5 else
 11  3852                         if ares=4 then 4 shift 21 + i1         else
 11  3853                                        5 shift 21 + i1;
 11  3854                     end
 10  3855                     else res:= 27;
 10  3856                     if res < 4 then pos:= apos;
 10  3857                   end
  9  3858                   else
  9  3859                   if nr=2 then
  9  3860                   begin
 10  3861                     if ares=0 then res:= 2 else
 10  3862                     if ares=1 then
 10  3863                     begin
 11  3864                       ia(2):= findområde(i1);
 11  3865                       if ia(2)=0 then res:= 17;
 11  3866                     end
 10  3867                     else res:= 27;
 10  3868                   end
  9  3869                   else
  9  3870                   if ares=0 then res:= 2 else res:= 24;
  9  3871                 end;
  8  3872     
  8  3872     <*24: ( <ingenting> ! <område> ! * ) *>
  8  3873     
  8  3873                 begin
  9  3874                   if nr=1 then
  9  3875                   begin
 10  3876                     if ares=0 then res:= 2 else
 10  3877                     if ares=1 then
 10  3878                     begin
 11  3879                       if i1=long<:ALL:> shift (-24) extract 24 then
 11  3880                         ia(1):= (-1) shift (-3) shift 3
 11  3881                       else
 11  3882                       begin
 12  3883                         k:= findområde(i1);
 12  3884                         if k=0 then res:= 17 else
 12  3885                            ia(1):= 14 shift 20 + k;
 12  3886                       end;
 11  3887                     end
 10  3888                     else res:= 27;
 10  3889                   end
  9  3890                   else
  9  3891                   if ares=0 then res:= 2 else res:= 24;
  9  3892                   if res < 4 then pos:= apos;
  9  3893                 end;
  8  3894     
  8  3894     <*25: <område> *>
  8  3895     
  8  3895                 begin
  9  3896                   if nr=1 then
  9  3897                   begin
 10  3898                     if ares=0 then res:= 25 else
 10  3899                     if ares=1 then
 10  3900                     begin
 11  3901                       if i1 = '*' shift 16 then ia(1):= -1 else
 11  3902                          ia(1):= findområde(i1);
 11  3903                       if ia(1)=0 then res:= 17;
 11  3904                     end
 10  3905                     else res:= 27;
 10  3906                   end
  9  3907                   else
  9  3908                   if ares=0 then res:= 2 else res:= 24;
  9  3909                   if res < 4 then pos:= apos;
  9  3910                 end;
  8  3911     
  8  3911     <*26: <busnr> *>
  8  3912                 begin
  9  3913                   if nr=1 then
  9  3914                   begin
 10  3915                     if ares=0 then res:= 25 else
 10  3916                     if ares=2 and (i1<1 or 9999<i1) then res:= 24 else
 10  3917                     if ares<>2 then res:= 27 else ia(1):= i1;
 10  3918                   end
  9  3919                   else
  9  3920                   if ares=0 then res:= 2 else res:= 24;
  9  3921                 end;
  8  3922     
  8  3922     <*                           8 *>
  8  3923     <*27: <operatørnr> (<område>)  *>
  8  3924     <*                           1 *>
  8  3925                 begin
  9  3926                   if nr < 3 and a_res=0 then res:= 25 <*parameter mangler*>
  9  3927                   else if nr=1 then
  9  3928                   begin
 10  3929                     if a_res=2 then
 10  3930                     begin
 11  3931                       ia(1):= i1;
 11  3932                       if i1 < 0 or max_antal_operatører < i1 then res:= 28;
 11  3933                     end
 10  3934                     else if a_res=1 then
 10  3935                     begin
 11  3936                       laf:= 0;
 11  3937                       ia(1):= find_bpl(værdi.laf(1));
 11  3938                       if ia(1)<1 or ia(1)>max_antal_operatører then res:=28;
 11  3939                     end
 10  3940                     else res:= 27; <*parametertype*>
 10  3941                   end
  9  3942                   else
  9  3943                   begin
 10  3944                     if a_res=0 then res:= (if nr > 2 then 2 else 25)
 10  3945                     else if nr > 9 then res:= 24
 10  3946                     else if a_res=1 then
 10  3947                     begin
 11  3948                       ia(nr):= find_område(i1);
 11  3949                       indeks:= nr;
 11  3950                       if ia(nr)=0 then res:= 56;
 11  3951                     end
 10  3952                     else res:= 27;
 10  3953                   end;
  9  3954                   if res < 4 then pos:= a_pos;
  9  3955                 end <* partype 27 *>;
  8  3956     
  8  3956     <*28: (<ingenting>!<kanalnr>) *>
  8  3957                 begin
  9  3958                   long field lf;
  9  3959     
  9  3959                   if nr=1 then
  9  3960                   begin
 10  3961                     if ares=0 then res:= 2 else
 10  3962                     if ares=1 then
 10  3963                     begin
 11  3964                       j:= 0; lf:= 4;
 11  3965                       for i:= 1 step 1 until max_antal_kanaler do
 11  3966                         if kanal_navn(i)=værdi.lf then j:= i;
 11  3967                       if j<>0 then
 11  3968                       begin
 12  3969                         ia(1):= 3 shift 22 + j;
 12  3970                         res:= 2;
 12  3971                       end
 11  3972                       else
 11  3973                         res:= 17; <*kanal ukendt*>
 11  3974                     end
 10  3975                     else
 10  3976                       res:= 27; <*parametertype*>
 10  3977                     if res < 4 then pos:= apos;
 10  3978                   end
  9  3979                   else
  9  3980                     res:= if nr=2 and ares<>0 then 24 <*syntaks*> else 2 <*ok*>;
  9  3981                 end;
  8  3982     
  8  3982     <*                                    n  *>
  8  3983     <*29:  <btj.pl.navn> ( <operatørnavn>)   *>
  8  3984     <*                                    0  *>
  8  3985                 begin
  9  3986                   laf:= 0;
  9  3987                   if nr=1 then
  9  3988                   begin
 10  3989                     if a_res=0 then res:= 25 <*parameter mangler*>
 10  3990                     else if a_res<>1 or værdi(2) extract 8 <>0 then res:= 27
 10  3991                     else begin
 11  3992                       indeks:= 2;
 11  3993                       ia(1):= værdi(1); ia(2):= værdi(2);
 11  3994                       j:= find_bpl(værdi.laf(1));
 11  3995                       if 0<j and j<=max_antal_operatører then
 11  3996                         res:= 62; <*ulovligt navn*>
 11  3997                     end;
 10  3998                   end
  9  3999                   else
  9  4000                   begin
 10  4001                     if a_res=0 then res:= 2 <*godkendt*>
 10  4002                     else if a_res<>1 then res:= 27 <*parametertype*>
 10  4003                     else begin
 11  4004                       indeks:= indeks+1;
 11  4005                       ia(indeks):= find_bpl(værdi.laf(1));
 11  4006                       if ia(indeks)=0 or ia(indeks)>max_antal_operatører then
 11  4007                         res:= 28; <*ukendt operatør*>
 11  4008                     end;
 10  4009                   end;
  9  4010                   if res<4 then pos:= a_pos;
  9  4011                 end;
  8  4012                 
  8  4012     <*                                        3  *>
  8  4013     <*30:  (<operatørnavn>)   ( <btj.pl.navn>)   *>
  8  4014     <*                     io                 0  *>
  8  4015           
  8  4015                 begin
  9  4016                   boolean io;
  9  4017     
  9  4017                   io:= (kilde//100 = 1);
  9  4018                   laf:= 0;
  9  4019                   if -,io and nr=1 then
  9  4020                   begin
 10  4021                     indeks:= 1;
 10  4022                     ia(1):= kilde mod 100; <*egen operatørplads*>
 10  4023                   end;
  9  4024     
  9  4024                   if io and nr=1 then
  9  4025                   begin
 10  4026                     if a_res=0 then res:= 25 <*parameter mangler*>
 10  4027                     else if a_res<>1 then res:= 27 <*parametertype*>
 10  4028                     else begin
 11  4029                       indeks:= nr;
 11  4030                       ia(indeks):= find_bpl(værdi.laf(1));
 11  4031                       if ia(indeks)=0 or ia(indeks)>max_antal_operatører then
 11  4032                         res:= 28; <*ukendt operatør*>
 11  4033                     end;
 10  4034                   end
  9  4035                   else
  9  4036                   begin
 10  4037                     if a_res=0 then res:= 2<*godkendt*> 
 10  4038                     else if indeks=4 then res:= 24 <*syntaks, for mange*>
 10  4039                     else if a_res<>1 then res:= 27 <*parametertype*>
 10  4040                     else begin
 11  4041                       indeks:= indeks+1;
 11  4042                       ia(indeks):= find_bpl(værdi.laf(1));
 11  4043                       if ia(indeks)=0 then res:= 46 <*navn ukendt*>
 11  4044                       else if ia(indeks)=ia(1) then res:= 62; <*ulovligt navn*>
 11  4045                     end;
 10  4046                   end;
  9  4047                   if res<4 then pos:= a_pos;
  9  4048                 end;
  8  4049                     
  8  4049     <*                                               *>
  8  4050     <*31:  <operatørnr> ( <navn> (<ingenting>!Å!S) ) *>
  8  4051     <*                                               *>
  8  4052     
  8  4052                 begin
  9  4053                   laf:= 0;
  9  4054                   if nr<2 and a_res=0 then res:= 25 <*parameter mangler*>
  9  4055                   else
  9  4056                   if nr=1 then
  9  4057                   begin
 10  4058                     if a_res=2 then
 10  4059                     begin
 11  4060                       ia(1):= i1;
 11  4061                       if i1<=0 or max_antal_operatører<i1 then res:= 28; <*ukendt*>
 11  4062                     end else res:= 27; <*parametertype*>
 10  4063                   end
  9  4064                   else
  9  4065                   if nr=2 then
  9  4066                   begin
 10  4067                     if a_res=1 and værdi(2) extract 8 = 0 then
 10  4068                     begin
 11  4069                       ia(2):= værdi(1); ia(3):= værdi(2);
 11  4070                       j:= find_bpl(værdi.laf(1));
 11  4071                       if j>0 and j<>ia(1) then res:= 48 <*i brug*>;
 11  4072                     end
 10  4073                     else res:= if a_res=0 then 2 <*godkendt*> 
 10  4074                                           else 27 <*parametertype*>;
 10  4075                   end 
  9  4076                   else
  9  4077                   if nr=3 then
  9  4078                   begin
 10  4079                     if a_res=0 then res:=2 <*godkendt*>
 10  4080                     else if a_res<>1 then res:= 27 <*parametertype*>
 10  4081                     else begin
 11  4082                       j:= værdi(1) shift (-16);
 11  4083                       if j='Å' then ia(4):=  1 else
 11  4084                       if j='S' then ia(4):=  3 else res:= 24 <*syntaks*>;
 11  4085                     end;
 10  4086                   end
  9  4087                   else res:= if a_res=0 then 2 <*godkendt*> else 24 <*syntaks*>;
  9  4088                   if res<4 then pos:= a_pos;
  9  4089                 end;
  8  4090     
  8  4090     <*            1   *>
  8  4091     <*32: (heltal)    *>
  8  4092     <*            0   *>
  8  4093                 begin
  9  4094                   if nr=1 then
  9  4095                   begin
 10  4096                     if ares=0 then
 10  4097                     begin
 11  4098                       indeks:= 0; res:= 2;
 11  4099                     end
 10  4100                     else
 10  4101                     if ares=2 or ares=3 then
 10  4102                     begin
 11  4103                       ia(nr):= i1; indeks:= nr;
 11  4104                     end
 10  4105                     else res:=27; <*parametertype*>
 10  4106                   end
  9  4107                   else
  9  4108                     res:= (if ares<>0 then 24 <*syntaks, for mange*> else 2);
  9  4109                   if res < 4 then pos:= a_pos;
  9  4110                 end;
  8  4111     
  8  4111     <*33 generel tekst*>
  8  4112                 begin 
  9  4113                   integer p,p1,ch,lgd;
  9  4114     
  9  4114                   if nr=1 and a_res<>0 then
  9  4115                   begin
 10  4116                     p:=pos; p1:=1;
 10  4117                     lgd:= (op_spool_postlgd-op_spool_text)//2*3-1;
 10  4118                     if 95<lgd then lgd:=95;
 10  4119                     repeat læstegn(d.opref.data,p,ch) until ch<>' ';
 10  4120                     while ch<>'nl' and ch<>'em' and ch<>0 and p1<lgd do
 10  4121                     begin
 11  4122                       skrivtegn(ia,p1,ch);
 11  4123                       læstegn(d.opref.data,p,ch);
 11  4124                     end;
 10  4125                     if p1=1 then res:= 25 else res:= 2;
 10  4126                     repeat skrivtegn(ia,p1,0) until (p1 mod 6)=1;
 10  4127                   end
  9  4128                   else
  9  4129                   if a_res=0 then res:= 25 else res:= 24;
  9  4130                 end;
  8  4131     
  8  4131     <*34: (heltal)    *>
  8  4132                 begin
  9  4133                   if nr=1 then
  9  4134                   begin
 10  4135                     if ares=0 then res:= 25 else
 10  4136                     if ares=2 or ares=3 then
 10  4137                     begin
 11  4138                       ia(nr):= i1; indeks:= nr;
 11  4139                     end
 10  4140                     else res:=27; <*parametertype*>
 10  4141                   end
  9  4142                   else
  9  4143                     res:= (if ares<>0 then 24 <*syntaks, for mange*> else 2);
  9  4144                   if res < 4 then pos:= a_pos;
  9  4145                 end;
  8  4146                 
  8  4146     <*+4*>      begin
  9  4147                   fejlreaktion(4<*systemfejl*>,partype,
  9  4148                                <:parametertype fejl i kommandofil:>,1);
  9  4149                   res:=31;
  9  4150                 end
  8  4151     <*-4*>
  8  4152               end;<*case partype*>
  7  4153             end;<* while læs_param_sæt *>
  6  4154           end; <* operationskode ok *>
  5  4155         end
  4  4156         else
  4  4157         begin
  5  4158           fejlreaktion(3<*programfejl*>,kilde,<:kilde:>,1);
  5  4159         end;
  4  4160     
  4  4160         if a_res<0 then res:= -a_res;
  4  4161     slut_læskommando:
  4  4162     
  4  4162         læs_kommando:=d.op_ref.resultat:= res;
  4  4163       end;<* disable-blok*>
  3  4164     end læs_kommando;
  2  4165     \f

  2  4165     message procedure skriv_kvittering side 1 - 820301/hko/cl;
  2  4166     
  2  4166     procedure skriv_kvittering(z,ref,pos,res);
  2  4167       value                      ref,pos,res;
  2  4168       zone                     z;
  2  4169       integer                    ref,pos,res;
  2  4170       begin
  3  4171         integer array field op;
  3  4172         integer pos1,tegn;
  3  4173         op:=ref;
  3  4174         if res<1 or res>3 then write(z,<:*** :>);
  3  4175         write(z,case res+1 of (
  3  4176     <* 0*><:ubehandlet:>,
  3  4177     <* 1*><:ok:>,
  3  4178     <* 2*><:godkendt:>,
  3  4179     <* 3*><:udført:>,
  3  4180     <* 4*><:kommando ukendt:>,
  3  4181     
  3  4181     <* 5*><:linie-nr ulovligt:>,
  3  4182     <* 6*><:løb-nr ulovligt:>,
  3  4183     <* 7*><:bus-nr ulovligt:>,
  3  4184     <* 8*><:gruppe ukendt:>,
  3  4185     <* 9*><:linie/løb ukendt:>,
  3  4186     
  3  4186     <*10*><:bus-nr ukendt:>,
  3  4187     <*11*><:bus allerede indsat på :>,
  3  4188     <*12*><:linie/løb allerede besat af :>,
  3  4189     <*13*><:bus ikke indsat:>,
  3  4190     <*14*><:bus optaget:>,
  3  4191     
  3  4191     <*15*><:gruppe optaget:>,
  3  4192     <*16*><:skærm optaget:>,
  3  4193     <*17*><:kanal ukendt:>,
  3  4194     <*18*><:bus i kø:>,
  3  4195     <*19*><:kø er tom:>,
  3  4196     
  3  4196     <*20*><:ej forbindelse :>,
  3  4197     <*21*><:ingen at gennemstille til:>,
  3  4198     <*22*><:ingen samtale at nedlægge:>,
  3  4199     <*23*><:ingen samtale at monitere:>,
  3  4200     <*24*><:syntaks:>,
  3  4201     
  3  4201     <*25*><:syntaks, parameter mangler:>,
  3  4202     <*26*><:syntaks, skilletegn:>,
  3  4203     <*27*><:syntaks, parametertype:>,
  3  4204     <*28*><:operatør ukendt:>,
  3  4205     <*29*><:garageterminal ukendt:>,
  3  4206     \f

  3  4206     
  3  4206     <*30*><:rapport kan ikke dannes:>,
  3  4207     <*31*><:systemfejl:>,
  3  4208     <*32*><:ingen fri plads:>,
  3  4209     <*33*><:gruppe for stor:>,
  3  4210     <*34*><:gruppe allerede defineret:>,
  3  4211     
  3  4211     <*35*><:springsekvens for stor:>,
  3  4212     <*36*><:spring allerede defineret:>,
  3  4213     <*37*><:spring ukendt:>,
  3  4214     <*38*><:spring allerede igangsat:>,
  3  4215     <*39*><:bus ikke reserveret:>,
  3  4216     
  3  4216     <*40*><:gruppe ikke reserveret:>,
  3  4217     <*41*><:spring ikke igangsat:>,
  3  4218     <*42*><:intet frit linie/løb:>,
  3  4219     <*43*><:ændring af dato/tid ikke lovlig:>,
  3  4220     <*44*><:interval-størrelse ulovlig:>,
  3  4221     
  3  4221     <*45*><:ikke implementeret:>,
  3  4222     <*46*><:navn ukendt:>,
  3  4223     <*47*><:forkert indhold:>,
  3  4224     <*48*><:i brug:>,
  3  4225     <*49*><:ingen samtale igang:>,
  3  4226     
  3  4226     <*50*><:kanal:>,
  3  4227     <*51*><:afvist:>,
  3  4228     <*52*><:kanal optaget :>,
  3  4229     <*53*><:annulleret:>,
  3  4230     <*54*><:ingen busser at kalde op:>,
  3  4231     
  3  4231     <*55*><:garagenavn ukendt:>,
  3  4232     <*56*><:område ukendt:>,
  3  4233     <*57*><:område nødvendigt:>,
  3  4234     <*58*><:ulovligt område for bus:>,
  3  4235     <*59*><:radiofejl :>,
  3  4236     
  3  4236     <*60*><:område kan ikke opdateres:>,
  3  4237     <*61*><:ingen talevej:>,
  3  4238     <*62*><:ulovligt navn:>,
  3  4239     <*63*><:alarmlængde: :>,
  3  4240     <*64*><:ulovligt tal:>,
  3  4241     
  3  4241     <*99*><:- <'?'> -:>));
  3  4242     \f

  3  4242     message procedure skriv_kvittering side 3 - 820301/hko;
  3  4243        if res=3 and op<>0 then
  3  4244         begin
  4  4245           if d.op.opkode=20 or d.op.opkode=11 then <*vogntabel,flyt -,indsæt*>
  4  4246           begin
  5  4247             i:= d.op.data(if d.op.opkode=20 then 4 else 3) extract 14;
  5  4248             if i<>0 then write(z,i,<: udtaget:>);
  5  4249           end;
  4  4250         end;
  3  4251         if res = 11 or res = 12 then
  3  4252           i:=ref;
  3  4253         if res=11 then write(z,i shift(-12) extract 10,
  3  4254                                if i shift(-7) extract 5 =0 then false
  3  4255                                else "A" add (i shift(-7) extract 5 -1),1,
  3  4256                                <:/:>,<<d>,i extract 7) else
  3  4257         if res=12 then write(z,i extract 14) else
  3  4258         if res = 20 or res = 52 or res = 59 then
  3  4259         begin
  4  4260           i:= d.op.data(12);
  4  4261           if i <> 0 then skriv_id(z,i,8);
  4  4262           i:=d.op.data(2);
  4  4263           if i=0 then i:=d.op.data(9);
  4  4264           if i=0 then i:=d.op.data(8);
  4  4265           skriv_id(z,i,8);
  4  4266         end;
  3  4267         if res=63 then
  3  4268         begin
  4  4269           i:= ref;
  4  4270           if i<0 then write(z,<:uendelig:>) else write(z,<<d>,i,<: sek.:>);
  4  4271         end;
  3  4272     
  3  4272         if pos>=0 then
  3  4273         begin
  4  4274           pos:=pos+1;
  4  4275           outchar(z,':');
  4  4276           tegn:=-1;
  4  4277           while tegn<>10 and tegn<>0 do
  4  4278             outchar(z,læs_tegn(d.op.data,pos,tegn));
  4  4279         end;
  3  4280     <*V*>setposition(z,0,0);
  3  4281       end skriv_kvittering;
  2  4282     \f

  2  4282     message procedure cursor, side 1 - 810213/hko;
  2  4283     
  2  4283     procedure cursor(z,linie,pos);
  2  4284       value            linie,pos;
  2  4285       zone           z;
  2  4286       integer          linie,pos;
  2  4287       begin
  3  4288         if linie>0 and linie<25
  3  4289            and pos>0 and pos<81 then
  3  4290         begin
  4  4291           write(z,"esc" add 128,1,<:Æ:>,
  4  4292             <<d>,linie,<:;:>,pos,<:H:>);
  4  4293         end;
  3  4294       end cursor;
  2  4295     \f

  2  4295     message procedure attention side 1 - 810529/hko;
  2  4296     
  2  4296       procedure attention;
  2  4297       begin
  3  4298         integer i, j, k;
  3  4299         integer array field op_ref,mess_ref;
  3  4300         integer array att_message(1:9);
  3  4301         long array field laf1, laf2;
  3  4302         boolean optaget;
  3  4303       procedure skriv_attention(zud,omfang);
  3  4304         integer                     omfang;
  3  4305         zone                    zud;
  3  4306       begin
  4  4307         write(zud,"nl",1,<:+++ attention            :>);
  4  4308         if omfang <> 0 then
  4  4309         disable begin integer x;
  5  4310           trap(slut);
  5  4311           write(zud,"nl",1,
  5  4312             <:  i:         :>,i,"nl",1,
  5  4313             <:  j:         :>,j,"nl",1,
  5  4314             <:  k:         :>,k,"nl",1,
  5  4315             <:  op-ref:    :>,op_ref,"nl",1,
  5  4316             <:  mess-ref:  :>,mess_ref,"nl",1,
  5  4317             <:  optaget:   :>,if optaget then <:true:>else<:false:>,"nl",1,
  5  4318             <:  laf2       :>,laf2,"nl",1,
  5  4319             <:  att-message::>,"nl",1,
  5  4320             <::>);
  5  4321           raf:= 0;
  5  4322           skriv_hele(zud,att_message.raf,18,127);
  5  4323           skriv_coru(zud,coru_no(010));
  5  4324     slut:
  5  4325         end;
  4  4326       end skriv_attention;
  3  4327     
  3  4327       integer procedure udtag_tal(tekst,pos);
  3  4328         long array tekst;
  3  4329         integer pos;
  3  4330       begin
  4  4331         integer i;
  4  4332     
  4  4332         if getnumber(tekst,pos,i) >= 0 then
  4  4333           udtag_tal:= i
  4  4334         else
  4  4335           udtag_tal:= 0;
  4  4336       end;
  3  4337     
  3  4337       for i:= 1 step 1 until att_maske_lgd//2 do
  3  4338          att_signal(i):=att_flag(i):=0;
  3  4339       trap(att_trap);
  3  4340       stack_claim((if cm_test then 198 else 146)+50);
  3  4341     <*+2*>
  3  4342       if testbit26 and overvåget or testbit28 then
  3  4343         skriv_attention(out,0);
  3  4344     <*-2*>
  3  4345     \f

  3  4345     message procedure attention side 2 - 810406/hko;
  3  4346     
  3  4346       repeat
  3  4347     
  3  4347         wait_ch(cs_att_pulje,opref,true,-1<*vent ubegrænset*>);
  3  4348     
  3  4348         repeat
  3  4349     <*V*> c_wait_message(att_proc_ref,att_message,mess_ref,-1<*vent ubegrænset*>);
  3  4350           raf:= laf1:= 0;
  3  4351           laf:=core.mess_ref(4)+2;  <* reference til sender-procesnavn *>
  3  4352     
  3  4352     <*+2*>if testbit7 and overvåget then
  3  4353           disable begin
  4  4354             laf2:= abs(laf);
  4  4355             write(out,"nl",1,<:attention - :>);
  4  4356             if laf<=0 then write(out,<:Regrettet :>);
  4  4357             write(out,<:Message modtaget fra :>);
  4  4358             if laf2 > 0 then write(out,core.laf2) else write(out,<:???:>);
  4  4359             skriv_hele(out,att_message.raf,16,127);
  4  4360             ud;
  4  4361           end;
  3  4362     <*-2*>
  3  4363     \f

  3  4363     message procedure attention side 3 - 830310/cl;
  3  4364     
  3  4364           if laf <= 0 then
  3  4365             i:= -1
  3  4366           else
  3  4367           if core.laf(1)=konsol_navn.laf1(1)
  3  4368                and core.laf(2)=konsol_navn.laf1(2) then 
  3  4369             i:= 101
  3  4370           else
  3  4371           begin
  4  4372             i:= -1; j:= 1;
  4  4373             while i=(-1) and (j <= max_antal_operatører) do
  4  4374             begin
  5  4375               laf2:= (j-1)*8;
  5  4376               if core.laf(1) = terminal_navn.laf2(1) 
  5  4377                  and core.laf(2) = terminal_navn.laf2(2) then i:= 200+j;
  5  4378               j:= j+1;
  5  4379             end;
  4  4380             j:= 1;
  4  4381             while i=(-1) and (j<=max_antal_garageterminaler) do
  4  4382             begin
  5  4383               laf2:= (j-1)*8;
  5  4384               if core.laf(1) = garage_terminal_navn.laf2(1) 
  5  4385                  and core.laf(2) = garage_terminal_navn.laf2(2) then i:= 300+j;
  5  4386               j:= j+1;
  5  4387             end;
  4  4388           end;
  3  4389     
  3  4389           if i=101 or (201<=i and i<=200+max_antal_operatører)
  3  4390                 <* or (301<=i and i<=300+max_antal_garageterminaler) *>
  3  4391           then
  3  4392           begin
  4  4393     
  4  4393             j:= if i=101 then 0 
  4  4394                 else max_antal_operatører*(i//100-2)+i mod 100;
  4  4395     
  4  4395             ref:=j*terminal_beskr_længde;
  4  4396             att_message(9):=
  4  4397                       if terminal_tab.ref.terminal_tilstand>=0 then 1 <*normal*>
  4  4398                       else 4 <*disconnected*>;
  4  4399             optaget:=læsbit_ia(att_flag,j);
  4  4400             if optaget and att_message(9)=1 then
  4  4401               sætbit_ia(att_signal,j,0<*1 for 'husket' attention*>)
  4  4402             else optaget:=optaget or att_message(9)<>1;
  4  4403             if i//100=2 and terminal_tab.ref.terminal_tilstand < 0 then
  4  4404             begin <* att fra ekskluderet operatør - inkluder *>
  5  4405               start_operation(op_ref,010,cs_att_pulje,1<*IN,O*>);
  5  4406               d.op_ref.data(1):= i mod 100;
  5  4407               signalch(cs_rad,op_ref,gen_optype);
  5  4408               waitch(cs_att_pulje,op_ref,true,-1);
  5  4409             end;
  4  4410           end
  3  4411           else
  3  4412           begin
  4  4413             optaget:= true;
  4  4414             att_message(9):= 2 <*rejected*>;
  4  4415           end;
  3  4416     
  3  4416           monitor(22)send_answer:(zdummy,mess_ref,att_message);
  3  4417     
  3  4417         until -,optaget;
  3  4418     \f

  3  4418     message procedure attention side 4 - 810424/hko;
  3  4419     
  3  4419         sætbit_ia(att_flag,j,1);
  3  4420     
  3  4420         start_operation(op_ref,i,cs_att_pulje,0);
  3  4421     
  3  4421         signal_ch(case i//100 of (cs_io,cs_op,cs_gar),op_ref,gen_optype);
  3  4422     
  3  4422       until false;
  3  4423     
  3  4423     att_trap:
  3  4424     
  3  4424       skriv_attention(zbillede,1);
  3  4425     
  3  4425     
  3  4425       end attention;
  2  4426     
  2  4426     \f

  2  4426     message io_erklæringer side 1 - 810421/hko;
  2  4427     
  2  4427       integer
  2  4428         cs_io,
  2  4429         cs_io_komm,
  2  4430         cs_io_fil,
  2  4431         cs_io_spool,
  2  4432         cs_io_medd,
  2  4433         cs_io_nulstil,
  2  4434         ss_io_spool_tomme,
  2  4435         ss_io_spool_fulde,
  2  4436         bs_zio_adgang,
  2  4437         io_spool_fil,
  2  4438         io_spool_postantal,
  2  4439         io_spool_postlængde;
  2  4440     
  2  4440       integer array field
  2  4441         io_spool_post;
  2  4442     
  2  4442       zone z_io(32,1,io_fejl);
  2  4443     
  2  4443       procedure io_fejl(z,s,b);
  2  4444         integer           s,b;
  2  4445         zone            z;
  2  4446       begin
  3  4447         disable begin
  4  4448           integer array iz(1:20);
  4  4449           integer i,j,k;
  4  4450           integer array field iaf;
  4  4451           real array field raf;
  4  4452           if s<>(1 shift 21 + 2) then
  4  4453           begin
  5  4454             getzone6(z,iz);
  5  4455             raf:=2;
  5  4456             iaf:=0;
  5  4457             k:=1;
  5  4458     
  5  4458             j:= terminal_tab.iaf.terminal_tilstand;
  5  4459             if j shift(-21)<>6 then
  5  4460               fejlreaktion(17<*ydre enhed status*>,s,string iz.raf(increase(k)),
  5  4461                            1 shift 12 <*binært*> +1 <*fortsæt*>);
  5  4462             terminal_tab.iaf.terminal_tilstand:= 6 shift 21
  5  4463                 + terminal_tab.iaf.terminal_tilstand extract 21;
  5  4464           end;
  4  4465           z(1):=real <:<'?'><'?'><'em'>:>;
  4  4466           b:=2;
  4  4467         end; <*disable*>
  3  4468       end io_fejl;
  2  4469     \f

  2  4469     message procedure skriv_auto_spring_medd side 1 - 820301/hko;
  2  4470     
  2  4470       procedure skriv_auto_spring_medd(z,medd,tid);
  2  4471         value                                 tid;
  2  4472         zone                           z;
  2  4473         real                                  tid;
  2  4474         integer array                    medd;
  2  4475         begin
  3  4476           disable begin
  4  4477             real t;
  4  4478             integer kode,bus,linie,bogst,løb,dato,kl;
  4  4479             long array indeks(1:1);
  4  4480             kode:= medd(1);
  4  4481             indeks(1):= extend medd(5) shift 24;
  4  4482             if kode > 0 and kode < 10 then
  4  4483             begin
  5  4484               write(z,"nl",0,<:-<'>'>:>,case kode of(
  5  4485             <*1*><:linie/løb ikke indsat    :>,<*sletning/omkodning/spring       *>
  5  4486             <*2*><:linie/løb allerede indsat:>,<*omkodning/spring                *>
  5  4487             <*3*><:vogn i kø:>,                <*påmindelse i forb. omkod./spring*>
  5  4488             <*4*><:vogn optaget:>,             <*    -      i  -      -   /   -  *>
  5  4489             <*5*><:spring annulleret:>,        <*udløb af ventetid               *>
  5  4490             <*6*><::>,                         <*  -   af springliste            *>
  5  4491             <*7*><::>,                         <*start af springsekvens          *>
  5  4492             <*8*><::>,                         <*afvikling af springsekvens      *>
  5  4493             <*9*><:område kan ikke opdateres:>,<*vt-ændring*>
  5  4494             <::>));
  5  4495     <*        if kode = 5 then
  5  4496               begin
  5  4497                 bogst:= medd(4);
  5  4498                 linie:= bogst shift(-5) extract 10;
  5  4499                 bogst:= bogst extract 5;
  5  4500                 if bogst > 0 then bogst:= bogst +'A'-1;
  5  4501                 write(z,"sp",1,<<z>,linie,false add bogst,1,
  5  4502                       ".",1,indeks);
  5  4503               end;
  5  4504     *>
  5  4505               outchar(z,'sp');
  5  4506               bus:= medd(2) extract 14;
  5  4507               if bus > 0 then
  5  4508                 write(z,<<z>,bus,"/",1);
  5  4509               løb:= medd(3);
  5  4510     <*+4*>    if løb shift(-22) <> 1 and løb <> 0 then
  5  4511                 fejlreaktion(3<*programfejl*>,løb,<:ikke linie id, spon.medd.:>,1);
  5  4512     <*-4*>
  5  4513     \f

  5  4513     message procedure skriv_auto_spring_medd side 2 - 810507/hko;
  5  4514     
  5  4514               linie:= løb shift(-12) extract 10;
  5  4515               bogst:= løb shift(-7) extract 5;
  5  4516               if bogst > 0 then bogst:= bogst +'A'-1;
  5  4517               løb:= løb extract 7;
  5  4518               if medd(3) <> 0 or kode <> 5 then
  5  4519               begin
  6  4520                 write(z,<<z>,linie,false add bogst,1,"/",1,løb,"sp",1);
  6  4521                 if kode = 5 or kode = 6 then write(z,<:er frit :>);
  6  4522               end;
  5  4523               if kode = 7 or kode = 8 then
  5  4524                 write(z,<*indeks,"sp",1,*>
  5  4525                   if kode=7 then <:udtaget :> else <:indsat :>);
  5  4526     
  5  4526               dato:= systime(4,tid,t);
  5  4527               kl:= t/100.0;
  5  4528               løb:= replace_char(1<*space in number*>,'.');
  5  4529               write(z,<<zd_dd_dd>,dato,<< zd_dd>,kl);
  5  4530               replace_char(1,løb);
  5  4531             end
  4  4532             else <*kode < 1 or kode > 8*>
  4  4533               fejlreaktion(3<*programfejl*>,kode,<:spon.medd. kode:>,1);
  4  4534           end; <*disable*>
  3  4535         end skriv_auto_spring_medd;
  2  4536     \f

  2  4536     message procedure h_io side 1 - 810507/hko;
  2  4537     
  2  4537       <* hovedmodulkorutine for io *>
  2  4538       procedure h_io;
  2  4539       begin
  3  4540         integer array field op_ref;
  3  4541         integer k,dest_sem;
  3  4542         procedure skriv_hio(zud,omfang);
  3  4543           value                     omfang;
  3  4544           zone                  zud;
  3  4545           integer                   omfang;
  3  4546           begin
  4  4547     
  4  4547             write(zud,"nl",1,<:+++ hovedmodul io        :>);
  4  4548             if omfang>0 then
  4  4549             disable begin integer x;
  5  4550               trap(slut);
  5  4551               write(zud,"nl",1,
  5  4552                 <:  op_ref:    :>,op_ref,"nl",1,
  5  4553                 <:  k:         :>,k,"nl",1,
  5  4554                 <:  dest_sem:  :>,dest_sem,"nl",1,
  5  4555                 <::>);
  5  4556               skriv_coru(zud,coru_no(100));
  5  4557     slut:
  5  4558             end;
  4  4559          end skriv_hio;
  3  4560     
  3  4560       trap(hio_trap);
  3  4561       stack_claim(if cm_test then 198 else 146);
  3  4562     
  3  4562     <*+2*>
  3  4563       if testbit0 and overvåget or testbit28 then
  3  4564         skriv_hio(out,0);
  3  4565     <*-2*>
  3  4566     \f

  3  4566     message procedure h_io side 2 - 810507/hko;
  3  4567     
  3  4567       repeat
  3  4568         wait_ch(cs_io,op_ref,true,-1);
  3  4569     <*+4*>
  3  4570         if (d.op_ref.optype and (io_optype or gen_optype)) extract 12 =0
  3  4571         then fejlreaktion(12<*operationstype*>,op_ref,<:operation til io:>,1);
  3  4572     <*-4*>
  3  4573     
  3  4573         k:=d.op_ref.opkode extract 12;
  3  4574         dest_sem:=
  3  4575           if k =  0 <*attention*> then cs_io_komm else
  3  4576           
  3  4576           if k = 22 <*auto vt opdatering*>
  3  4577           or k = 23 <*generel meddelelse*>
  3  4578           or k = 36 <*spring meddelelse*>
  3  4579           or k = 44 <*udeladt i gruppeopkald*>
  3  4580           or k = 45 <*nødopkald modtaget*>
  3  4581           or k = 46 <*nødopkald besvaret*> then cs_io_spool else
  3  4582     
  3  4582           if k = 38 <*meddelelse til alle skærme*> then cs_io_medd else
  3  4583           0;
  3  4584     <*+4*>
  3  4585         if dest_sem = 0 then
  3  4586         begin
  4  4587           fejl_reaktion(2<*operationskode*>,k,<:hovedmodul io:>,1);
  4  4588           signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  4  4589         end
  3  4590         else
  3  4591     <*-4*>
  3  4592         begin
  4  4593           signal_ch(dest_sem,op_ref,d.op_ref.optype);
  4  4594         end;
  3  4595       until false;
  3  4596     
  3  4596     hio_trap:
  3  4597       disable skriv_hio(zbillede,1);
  3  4598       end h_io;
  2  4599     \f

  2  4599     message procedure io_komm side 1 - 810507/hko;
  2  4600     
  2  4600       procedure io_komm;
  2  4601       begin
  3  4602         integer array field op_ref,ref,vt_op,iaf;
  3  4603         integer kode,aktion,status,opgave,dest_sem,vogn,ll,omr,
  3  4604                 pos,indeks,sep,sluttegn,operatør,i,j,k;
  3  4605         long navn;
  3  4606     
  3  4606         procedure skriv_io_komm(zud,omfang);
  3  4607           value                     omfang;
  3  4608           zone                  zud;
  3  4609           integer                   omfang;
  3  4610           begin
  4  4611     
  4  4611         disable
  4  4612     
  4  4612             write(zud,"nl",1,<:+++ io_komm              :>);
  4  4613             if omfang > 0 then
  4  4614             disable begin integer x;
  5  4615               trap(slut);
  5  4616               write(zud,"nl",1,
  5  4617                 <:  op-ref:    :>,op_ref,"nl",1,
  5  4618                 <:  kode:      :>,kode,"nl",1,
  5  4619                 <:  aktion:    :>,aktion,"nl",1,
  5  4620                 <:  ref:       :>,ref,"nl",1,
  5  4621                 <:  vt_op:     :>,vt_op,"nl",1,
  5  4622                 <:  status:    :>,status,"nl",1,
  5  4623                 <:  opgave:    :>,opgave,"nl",1,
  5  4624                 <:  dest-sem:  :>,dest_sem,"nl",1,
  5  4625                 <:  iaf:       :>,iaf,"nl",1,
  5  4626                 <:  i:         :>,i,"nl",1,
  5  4627                 <:  j:         :>,j,"nl",1,
  5  4628                 <:  k:         :>,k,"nl",1,
  5  4629                 <:  navn:      :>,string navn,"nl",1,
  5  4630                 <:  pos:       :>,pos,"nl",1,
  5  4631                 <:  indeks:    :>,indeks,"nl",1,
  5  4632                 <:  sep:       :>,sep,"nl",1,
  5  4633                 <:  sluttegn:  :>,sluttegn,"nl",1,
  5  4634                 <:  vogn:      :>,vogn,"nl",1,
  5  4635                 <:  ll:        :>,ll,"nl",1,
  5  4636                 <:  omr:       :>,omr,"nl",1,
  5  4637                 <:  operatør:  :>,operatør,"nl",1,
  5  4638                 <::>);
  5  4639               skriv_coru(zud,coru_no(101));
  5  4640     slut:
  5  4641             end;
  4  4642           end skriv_io_komm;
  3  4643     \f

  3  4643     message procedure io_komm side 2 - 810424/hko;
  3  4644     
  3  4644         trap(io_komm_trap);
  3  4645         stack_claim((if cm_test then 200 else 146)+24+200);
  3  4646     
  3  4646         ref:=0;
  3  4647         navn:= long<::>;
  3  4648         
  3  4648     <*+2*>
  3  4649         if testbit0 and overvåget or testbit28 then
  3  4650           skriv_io_komm(out,0);
  3  4651     <*-2*>
  3  4652     
  3  4652         repeat
  3  4653     
  3  4653     <*V*> wait_ch(cs_io_komm,
  3  4654                   op_ref,
  3  4655                   true,
  3  4656                   -1<*timeout*>);
  3  4657     <*+2*>
  3  4658           if testbit1 and overvåget then
  3  4659           disable begin
  4  4660             skriv_io_komm(out,0);
  4  4661             write(out,"nl",1,<:operation fra cs:>,<<d>,cs_io,
  4  4662                              <: til io :>);
  4  4663             skriv_op(out,op_ref);
  4  4664           end;
  3  4665     <*-2*>
  3  4666     
  3  4666           kode:= d.op_ref.op_kode;
  3  4667           i:= terminal_tab.ref.terminal_tilstand;
  3  4668           status:= i shift(-21);
  3  4669           opgave:=
  3  4670             if kode=0 then 1 <* indlæs kommando *> else
  3  4671             0; <* afvises *>
  3  4672     
  3  4672           aktion:= if opgave = 0 then 0 else
  3  4673                      (case status +1 of(
  3  4674           <* status         *>
  3  4675           <* 0 klar         *>(1),
  3  4676           <* 1 -            *>(-1),<* ulovlig tilstand *>
  3  4677           <* 2 -            *>(-1),<* ulovlig tilstand *>
  3  4678           <* 3 stoppet      *>(2),
  3  4679           <* 4 noneksist    *>(-1),<* ulovlig tilstand *>
  3  4680           <* 5 -            *>(-1),<* ulovlig tilstand *>
  3  4681           <* 6 -            *>(-1),<* ulovlig tilstand *>
  3  4682           <* 7 ej knyttet   *>(-1),<* ulovlig tilstand *>
  3  4683                               -1));
  3  4684     \f

  3  4684     message procedure io_komm side 3 - 810428/hko;
  3  4685     
  3  4685           case aktion+6 of
  3  4686           begin
  4  4687             begin
  5  4688               <*-5: terminal optaget *>
  5  4689     
  5  4689               d.op_ref.resultat:= 16;
  5  4690               afslut_operation(op_ref,-1);
  5  4691             end;
  4  4692     
  4  4692             begin
  5  4693               <*-4: operation uden virkning *>
  5  4694     
  5  4694               afslut_operation(op_ref,-1);
  5  4695             end;
  4  4696     
  4  4696             begin
  5  4697               <*-3: ulovlig operationskode *>
  5  4698     
  5  4698               fejl_reaktion(2<*operationskode*>,kode,<:ulovlig:>,1);
  5  4699               afslut_operation(op_ref,-1);
  5  4700             end;
  4  4701     
  4  4701             begin
  5  4702               <*-2: ulovlig aktion *>
  5  4703     
  5  4703               fejl_reaktion(3<*programfejl*>,-2,<: ulovlig aktion:>,0);
  5  4704               afslut_operation(op_ref,-1);
  5  4705             end;
  4  4706     
  4  4706             begin
  5  4707               <*-1: ulovlig io_tilstand *>
  5  4708     
  5  4708               fejl_reaktion(3<*programfejl*>,status,<: ulovlig io-status:>,0);
  5  4709               afslut_operation(op_ref,-1);
  5  4710             end;
  4  4711     
  4  4711             begin
  5  4712               <* 0: ikke implementeret *>
  5  4713     
  5  4713               fejl_reaktion(2<*operationskode*>,kode,<: ikke implementeret:>,1);
  5  4714               afslut_operation(op_ref,-1);
  5  4715             end;
  4  4716     
  4  4716             begin
  5  4717     \f

  5  4717     message procedure io_komm side 4 - 851001/cl;
  5  4718     
  5  4718               <* 1: indlæs kommando *>
  5  4719     <*V*>     wait(bs_zio_adgang);
  5  4720     
  5  4720     <*V*>     læs_kommando(z_io,101,op_ref,pos,indeks,sep,sluttegn);
  5  4721     
  5  4721               if d.op_ref.resultat > 3 then
  5  4722               begin
  6  4723     <*V*>       setposition(z_io,0,0);
  6  4724                 if sluttegn<>'nl' then outchar(z_io,'nl');
  6  4725                 skriv_kvittering(z_io,op_ref,pos,
  6  4726                                  d.op_ref.resultat);
  6  4727               end
  5  4728               else if d.op_ref.resultat>0 then
  5  4729               begin <*godkendt*>
  6  4730                 kode:=d.op_ref.opkode;
  6  4731                 i:= kode extract 12;
  6  4732                 j:= if kode < 5 or
  6  4733                        kode=7 or kode=8 or
  6  4734                        kode=72 or kode=73 or kode=74 then 1 <*IN,x/EK,x*>else
  6  4735                     if kode=5 or kode=77 then 9             <*FO,L/FO,O*>else
  6  4736                     if kode = 9 or kode=10 then 3           <*VO,B/VO,L*>else
  6  4737                     if kode =11 or kode=12 or kode=19 or    <*VO,I/VO,U/VO,S*> 
  6  4738                        kode=20 or kode=24             then 4<*VO,F/VO,R*>else
  6  4739                     if kode =21 then 5                      <*AU*>       else
  6  4740                     if kode =25 then 6                      <*GR,D*>     else
  6  4741                     if kode =26 then 5                      <*GR,S*>     else
  6  4742                     if kode =27 or kode =28 then 7          <*GR,V/GR,O*>else
  6  4743                     if kode =30 then 10                     <*SP,D*>     else
  6  4744                     if kode =31 then 5                      <*SP*>       else
  6  4745                     if kode =32 or kode =33 then 8          <*SP,V/SP,O*>else
  6  4746                     if kode =34 or kode =35 then 5          <*SP,R/SP,A*>else
  6  4747                     if kode=71 then 11                      <*FO,V*>     else
  6  4748                     if kode =75 then 12                     <*TÆ,V     *>else
  6  4749                     if kode =76 then 12                     <*TÆ,N     *>else
  6  4750                     if kode =65 then 13                     <*BE,N     *>else
  6  4751                     if kode =66 then 14                     <*BE,G     *>else
  6  4752                     if kode =67 then 15                     <*BE,V     *>else
  6  4753                     if kode =68 then 16                     <*ST,D     *>else
  6  4754                     if kode =69 then 17                     <*ST,V     *>else
  6  4755                     if kode =36 then 18                     <*AL       *>else
  6  4756                     if kode =37 then 19                     <*CC       *>else
  6  4757                     if kode>=80 and kode <=88 then 2        <*sys-spec.*>else
  6  4758                     if kode>=90 and kode <=92 then 20       <*CQF,I/U/V*>else
  6  4759                     0;
  6  4760                 if j > 0 then
  6  4761                 begin
  7  4762                   case j of
  7  4763                   begin
  8  4764                     begin
  9  4765     \f

  9  4765     message procedure io_komm side 5 - 810424/hko;
  9  4766     
  9  4766                       <* 1: inkluder/ekskluder ydre enhed *>
  9  4767     
  9  4767                       d.op_ref.retur:= cs_io_komm;
  9  4768                       if kode=1 then d.opref.opkode:= 
  9  4769                         ia(2) shift 12 + d.opref.opkode extract 12;
  9  4770                       d.op_ref.data(1):= ia(1);
  9  4771                       signal_ch(if kode < 5 or kode>=72 then cs_rad
  9  4772                                             else cs_gar,
  9  4773                                 op_ref,gen_optype or io_optype);
  9  4774                       indeks:= op_ref;
  9  4775                       wait_ch(cs_io_komm,
  9  4776                               op_ref,
  9  4777                               true,
  9  4778                               -1<*timeout*>);
  9  4779     <*+4*>            if op_ref <> indeks then
  9  4780                         fejlreaktion(11<*fremmed post*>,op_ref,<:io_kommando:>,0);
  9  4781     <*-4*>
  9  4782     <*V*>             setposition(z_io,0,0);
  9  4783                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  4784                       skriv_kvittering(z_io,op_ref,-1,
  9  4785                                        d.op_ref.resultat);
  9  4786                     end;
  8  4787     
  8  4787                     begin
  9  4788     \f

  9  4788     message procedure io_komm side 6 - 810501/hko;
  9  4789     
  9  4789                       <* 2: tid/attention,ja/attention,nej
  9  4790                             slut/slut med billede *>
  9  4791     
  9  4791                       case d.op_ref.opkode -79 of
  9  4792                       begin
 10  4793     
 10  4793           <* 80: TI *>  begin
 11  4794                           setposition(z_io,0,0);
 11  4795                           if sluttegn<>'nl' then outchar(z_io,'nl');
 11  4796                           if ia(1) <> 0 or ia(2) <> 0 then
 11  4797                           begin real field rf;
 12  4798                             rf:= 4;
 12  4799                             trap(forbudt);
 12  4800     <*V*>                   setposition(z_io,0,0);
 12  4801                             systime(3,ia.rf,0.0);
 12  4802                             if false then
 12  4803                             begin
 13  4804                               forbudt: skriv_kvittering(z_io,0,-1,
 13  4805                                          43<*ændring af dato/tid ikke lovlig*>);
 13  4806                             end
 12  4807                             else
 12  4808                               skriv_kvittering(z_io,0,-1,3);
 12  4809                           end
 11  4810                           else
 11  4811                           begin
 12  4812                             setposition(z_io,0,0);
 12  4813                             write(z_io,<<zddddd>,systime(5,0,r),".",1,r);
 12  4814                           end;
 11  4815                         end TI;
 10  4816     \f

 10  4816     message procedure io_komm side 7 - 810424/hko;
 10  4817     
 10  4817           <*81: AT,J*>  begin
 11  4818     <*V*>                 setposition(z_io,0,0);
 11  4819                           if sluttegn <> 'nl' then outchar(zio,'nl');
 11  4820                           monitor(10)release process:(z_io,0,ia);
 11  4821                           skriv_kvittering(z_io,0,-1,3);
 11  4822                         end;
 10  4823     
 10  4823           <* 82: AT,N*> begin
 11  4824                           i:= monitor(8)reserve process:(z_io,0,ia);
 11  4825     <*V*>                 setposition(z_io,0,0);
 11  4826                           if sluttegn <> 'nl' then outchar(zio,'nl');
 11  4827                           skriv_kvittering(z_io,0,-1,
 11  4828                             if i = 0 then 3 else 0);
 11  4829                         end;
 10  4830     
 10  4830           <* 83: SL *>  begin
 11  4831                           errorbits:=0; <* warning.no ok.yes *>
 11  4832                           trapmode:= 1 shift 13;
 11  4833                           trap(-2);
 11  4834                         end;
 10  4835     
 10  4835           <* 84: SL,B *>begin
 11  4836                           errorbits:=1; <* warning.no ok.no *>
 11  4837                           trap(-3);
 11  4838                         end;
 10  4839           <* 85: SL,K *>begin
 11  4840                           errorbits:=1; <* warning.no ok.no *>
 11  4841                           disable sæt_bit_i(trapmode,15,0);
 11  4842                           trap(-3);
 11  4843                         end;
 10  4844     \f

 10  4844     message procedure io_komm side 7a - 810511/cl;
 10  4845     
 10  4845           <* 86: TE,J *>begin
 11  4846                           setposition(z_io,0,0);
 11  4847                           if sluttegn <> 'nl' then outchar(z_io,'nl');
 11  4848                           for i:= 1 step 1 until indeks do
 11  4849                           if 0<=ia(i) and ia(i)<=47 then
 11  4850                           begin
 12  4851                             case (ia(i)+1) of
 12  4852                             begin
 13  4853                               testbit0 := true;testbit1 := true;testbit2 := true;
 13  4854                               testbit3 := true;testbit4 := true;testbit5 := true;
 13  4855                               testbit6 := true;testbit7 := true;testbit8 := true;
 13  4856                               testbit9 := true;testbit10:= true;testbit11:= true;
 13  4857                               testbit12:= true;testbit13:= true;testbit14:= true;
 13  4858                               testbit15:= true;testbit16:= true;testbit17:= true;
 13  4859                               testbit18:= true;testbit19:= true;testbit20:= true;
 13  4860                               testbit21:= true;testbit22:= true;testbit23:= true;
 13  4861                               testbit24:= true;testbit25:= true;testbit26:= true;
 13  4862                               testbit27:= true;testbit28:= true;testbit29:= true;
 13  4863                               testbit30:= true;testbit31:= true;testbit32:= true;
 13  4864                               testbit33:= true;testbit34:= true;testbit35:= true;
 13  4865                               testbit36:= true;testbit37:= true;testbit38:= true;
 13  4866                               testbit39:= true;testbit40:= true;testbit41:= true;
 13  4867                               testbit42:= true;testbit43:= true;testbit44:= true;
 13  4868                               testbit45:= true;testbit46:= true;testbit47:= true;
 13  4869                             end;
 12  4870                           end;
 11  4871                           skriv_kvittering(z_io,0,-1,3);
 11  4872                         end;
 10  4873     \f

 10  4873     message procedure io_komm side 7b - 810511/cl;
 10  4874     
 10  4874           <* 87: TE,N *>begin
 11  4875                           setposition(z_io,0,0);
 11  4876                           if sluttegn <> 'nl' then outchar(z_io,'nl');
 11  4877                           for i:= 1 step 1 until indeks do
 11  4878                           if 0<=ia(i) and ia(i)<=47 then
 11  4879                           begin
 12  4880                             case (ia(i)+1) of
 12  4881                             begin
 13  4882                               testbit0 := false;testbit1 := false;testbit2 := false;
 13  4883                               testbit3 := false;testbit4 := false;testbit5 := false;
 13  4884                               testbit6 := false;testbit7 := false;testbit8 := false;
 13  4885                               testbit9 := false;testbit10:= false;testbit11:= false;
 13  4886                               testbit12:= false;testbit13:= false;testbit14:= false;
 13  4887                               testbit15:= false;testbit16:= false;testbit17:= false;
 13  4888                               testbit18:= false;testbit19:= false;testbit20:= false;
 13  4889                               testbit21:= false;testbit22:= false;testbit23:= false;
 13  4890                               testbit24:= false;testbit25:= false;testbit26:= false;
 13  4891                               testbit27:= false;testbit28:= false;testbit29:= false;
 13  4892                               testbit30:= false;testbit31:= false;testbit32:= false;
 13  4893                               testbit33:= false;testbit34:= false;testbit35:= false;
 13  4894                               testbit36:= false;testbit37:= false;testbit38:= false;
 13  4895                               testbit39:= false;testbit40:= false;testbit41:= false;
 13  4896                               testbit42:= false;testbit43:= false;testbit44:= false;
 13  4897                               testbit45:= false;testbit46:= false;testbit47:= false;
 13  4898                             end;
 12  4899                           end;
 11  4900                           skriv_kvittering(z_io,0,-1,3);
 11  4901                         end;
 10  4902     
 10  4902     <* 88: O    *>      begin
 11  4903                           integer array odescr,zdescr(1:20);
 11  4904                           long array field laf;
 11  4905                           integer res, i, j;
 11  4906     
 11  4906                           i:= j:= 1;
 11  4907                           while læstegn(ia,i,res)<>0 do
 11  4908                           begin
 12  4909                             if 'A'<=res and res<='Å' then res:= res - 'A' + 'a';
 12  4910                             skrivtegn(ia,j,res);
 12  4911                           end;
 11  4912     
 11  4912                           laf:= 2;
 11  4913                           getzone6(out,odescr);
 11  4914                           getzone6(z_io,zdescr);
 11  4915                           close(out,zdescr.laf(1)<>odescr.laf(1) or
 11  4916                                     zdescr.laf(2)<>odescr.laf(2));
 11  4917                           laf:= 0;
 11  4918     
 11  4918                           if ia(1)=0 then 
 11  4919                           begin
 12  4920                             res:= 3;
 12  4921                             j:= 0;
 12  4922                           end
 11  4923                           else
 11  4924                           begin
 12  4925                             j:= res:= openbs(out,j,ia,0);
 12  4926                             if res<>0 then
 12  4927                               res:= 46;
 12  4928                           end;
 11  4929                           if res<>0 then
 11  4930                           begin
 12  4931                             open(out,8,konsol_navn,0);
 12  4932                             if j<>0 then
 12  4933                             begin
 13  4934                               i:= 1;
 13  4935                               fejlreaktion(4,j,string ia.laf(increase(i)),1);
 13  4936                             end;
 12  4937                           end
 11  4938                           else res:= 3;
 11  4939                           setposition(z_io,0,0);
 11  4940                           skriv_kvittering(z_io,0,-1,res);
 11  4941                         end;
 10  4942                       end;<*case d.op_ref.opkode -79*>
  9  4943                     end;<*case 2*>
  8  4944                     begin
  9  4945     \f

  9  4945     message procedure io_komm side 8 - 810424/hko;
  9  4946     
  9  4946                       <* 3: vogntabel,linienr/-,busnr*>
  9  4947     
  9  4947                       d.op_ref.retur:= cs_io_komm;
  9  4948                       tofrom(d.op_ref.data,ia,10);
  9  4949                       indeks:= op_ref;
  9  4950                       signal_ch(cs_vt,op_ref,gen_optype or io_optype);
  9  4951                       wait_ch(cs_io_komm,
  9  4952                               op_ref,
  9  4953                               io_optype,
  9  4954                               -1<*timeout*>);
  9  4955     <*+2*>            if testbit2 and overvåget then
  9  4956                       disable begin
 10  4957                         skriv_io_komm(out,0);
 10  4958                         write(out,"nl",1,<:io operation retur fra vt:>);
 10  4959                         skriv_op(out,op_ref);
 10  4960                       end;
  9  4961     <*-2*>
  9  4962     <*+4*>            if indeks <> op_ref then
  9  4963                         fejlreaktion(11<*fremmed post*>,op_ref,<:io_kommando:>,0);
  9  4964     <*-4*>
  9  4965     
  9  4965                       i:=d.op_ref.resultat;
  9  4966                       if i<1 or i>3 then
  9  4967                       begin
 10  4968     <*V*>               setposition(z_io,0,0);
 10  4969                         if sluttegn<>'nl' then outchar(z_io,'nl');
 10  4970                         skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat);
 10  4971                       end
  9  4972                       else
  9  4973                       begin
 10  4974     \f

 10  4974     message procedure io_komm side 9 - 820301/hko,cl;
 10  4975     
 10  4975                         integer antal,filref;
 10  4976     
 10  4976                         antal:= d.op_ref.data(6);
 10  4977                         fil_ref:= d.op_ref.data(7);
 10  4978                         pos:= 0;
 10  4979     <*V*>               setposition(zio,0,0);
 10  4980                         if sluttegn <> 'nl' then outchar(z_io,'nl');
 10  4981                         for pos:= pos +1 while pos <= antal do
 10  4982                         begin
 11  4983                           integer bogst,løb;
 11  4984     
 11  4984                           disable i:= læsfil(fil_ref,pos,j);
 11  4985                           if i <> 0 then
 11  4986                             fejlreaktion(5<*læs_fel*>,i,<:io komm., vo,l/vo,b:>,0);
 11  4987                           vogn:= fil(j,1) shift (-24) extract 24;
 11  4988                           løb:= fil(j,1) extract 24;
 11  4989                           if d.op_ref.opkode=9 then
 11  4990                             begin i:=vogn; vogn:=løb; løb:=i; end;
 11  4991                           ll:= løb shift(-12) extract 10;
 11  4992                           bogst:= løb shift(-7) extract 5;
 11  4993                           if bogst > 0 then bogst:=  bogst+'A'-1;
 11  4994                           løb:= løb extract 7;
 11  4995                           vogn:= vogn extract 14;
 11  4996                           i:= d.op_ref.opkode -8;
 11  4997                           for i:= i,i +1 do
 11  4998                           begin
 12  4999                             j:= (i+1) extract 1;
 12  5000                             case j+1 of
 12  5001                             begin
 13  5002                               write(zio,"sp",if bogst=0 then 1 else 0,<<ddd>,ll,
 13  5003                                   false add bogst,1,"/",1,true,3,<<d>,løb);
 13  5004                               write(zio,<<dddd>,vogn,"sp",1);
 13  5005                             end;
 12  5006                           end;
 11  5007                           if pos mod 5 = 0 then
 11  5008                           begin
 12  5009                             outchar(zio,'nl');
 12  5010     <*V*>                   setposition(zio,0,0);
 12  5011                           end
 11  5012                           else write(zio,"sp",3);
 11  5013                         end;
 10  5014                         write(zio,"*",1);
 10  5015     \f

 10  5015     message procedure io_komm side 9a - 810505/hko;
 10  5016     
 10  5016                         d.op_ref.opkode:=104;<*slet fil*>
 10  5017                         d.op_ref.data(4):=filref;
 10  5018                         indeks:=op_ref;
 10  5019                         signal_ch(cs_slet_fil,op_ref,genoptype or iooptype);
 10  5020     <*V*>               wait_ch(cs_io_komm,op_ref,io_optype,-1);
 10  5021     
 10  5021     <*+2*>              if testbit2 and overvåget then
 10  5022                         disable begin
 11  5023                           skriv_io_komm(out,0);
 11  5024                           write(out,"nl",1,<:io operation retur fra sletfil:>);
 11  5025                           skriv_op(out,op_ref);
 11  5026                         end;
 10  5027     <*-2*>
 10  5028     
 10  5028     <*+4*>              if op_ref<>indeks then
 10  5029                           fejlreaktion(11<*fr.post*>,op_ref,<:io-komm, sletfil:>,0);
 10  5030     <*-4*>
 10  5031                         if d.op_ref.data(9)<>0 then
 10  5032                           fejlreaktion(3<*prg.fejl*>,d.op_ref.data(9),
 10  5033                                <:io-komm, sletfil:>,1);
 10  5034                       end;
  9  5035                     end;
  8  5036     
  8  5036                     begin
  9  5037     \f

  9  5037     message procedure io_komm side 10 - 820301/hko;
  9  5038     
  9  5038                       <* 4 indsæt/udtag/flyt bus i vogntabel, slet vogntabel *>
  9  5039     
  9  5039                       vogn:=ia(1);
  9  5040                       ll:=ia(2);
  9  5041                       omr:= if kode=11 or kode=19 then ia(3) else
  9  5042                             if kode=12            then ia(2) else 0;
  9  5043                       if kode=19 and omr<=0 then
  9  5044                       begin
 10  5045                         if omr=-1 then omr:= 0
 10  5046                         else omr:= 14 shift 20 + 3; <*OMR TCT*>
 10  5047                       end;
  9  5048     <*V*>             wait_ch(cs_vt_adgang,
  9  5049                               vt_op,
  9  5050                               gen_optype,
  9  5051                               -1<*timeout sek*>);
  9  5052                       start_operation(vtop,101,cs_io_komm,
  9  5053                                       kode);
  9  5054                       d.vt_op.data(1):=vogn;
  9  5055                       d.vt_op.data(2):=ll;
  9  5056                       d.vt_op.data(if kode=19 then 3 else 4):= omr;
  9  5057                       indeks:= vt_op;
  9  5058                       signal_ch(cs_vt,
  9  5059                                 vt_op,
  9  5060                                 gen_optype or io_optype);
  9  5061     
  9  5061     <*V*>             wait_ch(cs_io_komm,
  9  5062                               vt_op,
  9  5063                               io_optype,
  9  5064                               -1<*timeout sek*>);
  9  5065     <*+2*>            if testbit2 and overvåget then
  9  5066                       disable begin
 10  5067                         skriv_io_komm(out,0);
 10  5068                         write(out,"nl",1,
 10  5069                               <:iooperation retur fra vt:>);
 10  5070                         skriv_op(out,vt_op);
 10  5071                       end;
  9  5072     <*-2*>
  9  5073     <*+4*>            if vt_op<>indeks then
  9  5074                         fejl_reaktion(11<*fremmede op*>,op_ref,
  9  5075                                       <:io-kommando:>,0);
  9  5076     <*-4*>
  9  5077     <*V*>             setposition(z_io,0,0);
  9  5078                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  5079                       skriv_kvittering(z_io,if d.vt_op.resultat = 11 or
  9  5080                         d.vt_op.resultat = 12 then d.vt_op.data(3)
  9  5081                         else vt_op,-1,d.vt_op.resultat);
  9  5082                       d.vt_op.optype:= genoptype or vt_optype;
  9  5083                       disable afslut_operation(vt_op,cs_vt_adgang);
  9  5084                     end;
  8  5085     
  8  5085                     begin
  9  5086     \f

  9  5086     message procedure io_komm side 11 - 810428/hko;
  9  5087     
  9  5087                       <* 5 autofil-skift
  9  5088                            gruppe,slet
  9  5089                            spring  (igangsæt)
  9  5090                            spring,annuler
  9  5091                            spring,reserve     *>
  9  5092     
  9  5092                       tofrom(d.op_ref.data,ia,8);
  9  5093                       d.op_ref.retur:=cs_io_komm;
  9  5094                       indeks:=op_ref;
  9  5095                       signal_ch(cs_vt,op_ref,gen_optype or io_optype);
  9  5096     <*V*>             wait_ch(cs_io_komm,
  9  5097                               op_ref,
  9  5098                               io_optype,
  9  5099                               -1<*timeout*>);
  9  5100     <*+2*>            if testbit2 and overvåget then
  9  5101                       disable begin
 10  5102                         skriv_io_komm(out,0);
 10  5103                         write(out,"nl",1,<:io operation retur fra vt:>);
 10  5104                         skriv_op(out,op_ref);
 10  5105                       end;
  9  5106     <*-2*>
  9  5107     <*+4*>            if indeks<>op_ref then
  9  5108                         fejlreaktion(11<*fremmed post*>,op_ref,
  9  5109                                      <:io-kommando(autofil):>,0);
  9  5110     <*-4*>
  9  5111     
  9  5111     <*V*>             setposition(z_io,0,0);
  9  5112                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  5113                       skriv_kvittering(z_io,if (d.op_ref.resultat=11 or
  9  5114                           d.op_ref.resultat=12) and kode=34 <*SP,R*> then
  9  5115                           d.op_ref.data(4) else op_ref,-1,d.op_ref.resultat);
  9  5116                     end;
  8  5117     
  8  5117                     begin
  9  5118     \f

  9  5118     message procedure io_komm side 12 - 820301/hko/cl;
  9  5119     
  9  5119                       <* 6 gruppedefinition *>
  9  5120     
  9  5120                       tofrom(d.op_ref.data,ia,indeks*2);
  9  5121     <*V*>             wait_ch(cs_io_fil,vt_op,true,-1<*timeout*>);
  9  5122                       start_operation(vt_op,101,cs_io_komm,
  9  5123                                       101<*opret fil*>);
  9  5124                       d.vt_op.data(1):=256;<*postantal*>
  9  5125                       d.vt_op.data(2):=1;  <*postlængde*>
  9  5126                       d.vt_op.data(3):=1;  <*segmentantal*>
  9  5127                       d.vt_op.data(4):=
  9  5128                               2 shift 10;  <*spool fil*>
  9  5129                       signal_ch(cs_opret_fil,vt_op,io_optype);
  9  5130                       pos:=vt_op;<*variabel lånes*>
  9  5131     <*V*>             wait_ch(cs_io_komm,vt_op,io_optype,-1<*timeout*>);
  9  5132     <*+4*>            if vt_op<>pos then
  9  5133                         fejlreaktion(11<*fremmed post*>,vt_op,<:gruppedef:>,0);
  9  5134                       if d.vt_op.data(9)<>0 then
  9  5135                         fejlreaktion(13<*opret-fil*>,d.vt_op.data(9),
  9  5136                           <:io-kommando(gruppedefinition):>,0);
  9  5137     <*-4*>
  9  5138                       iaf:=0;
  9  5139                       for i:=1 step 1 until indeks-1 do
  9  5140                       begin
 10  5141                         disable k:=modif_fil(d.vt_op.data(4),i,j);
 10  5142                         if k<>0 then
 10  5143                           fejlreaktion(7<*modif-fil*>,k,
 10  5144                             <:io kommando(gruppe-def):>,0);
 10  5145                         fil(j).iaf(1):=d.op_ref.data(i+1);
 10  5146                       end;
  9  5147                       while sep = ',' do
  9  5148                       begin
 10  5149                         wait(bs_fortsæt_adgang);
 10  5150                         pos:= 1; j:= 0;
 10  5151                         while læs_store(z_io,i) < 8 do
 10  5152                         begin
 11  5153                           skrivtegn(fortsæt,pos,i);
 11  5154                           if i = '?' or i = 'esc' then j:= 1; <* skip kommando *>
 11  5155                         end;
 10  5156                         skrivtegn(fortsæt,pos,'em');
 10  5157                         afsluttext(fortsæt,pos);
 10  5158                         sluttegn:= i;
 10  5159                         if j<>0 then
 10  5160                         begin
 11  5161                           setposition(z_io,0,0);
 11  5162                           if sluttegn <> 'nl' then outchar(z_io,'nl');
 11  5163                           skriv_kvittering(zio,opref,-1,53);<*annulleret*>
 11  5164                           goto gr_ann;
 11  5165                         end;
 10  5166     \f

 10  5166     message procedure io_komm side 13 - 810512/hko/cl;
 10  5167     
 10  5167                         disable begin
 11  5168                         integer array værdi(1:4);
 11  5169                         integer a_pos,res;
 11  5170                           pos:= 0;
 11  5171                           repeat
 11  5172                             apos:= pos;
 11  5173                             læs_paramsæt(fortsæt,a_pos,0,værdi,sep,res);
 11  5174                             if res >= 0 then
 11  5175                             begin
 12  5176                               if res=0 and (sep=',' or indeks>2) then <*ok*>
 12  5177                               else if res=0 then res:= -25 <*parameter mangler*>
 12  5178                               else if res=2 and (værdi(1)<1 or værdi(1)>9999) then
 12  5179                                       res:= -7 <*busnr ulovligt*>
 12  5180                               else if res=2 or res=6 then
 12  5181                               begin
 13  5182                                 k:=modiffil(d.vt_op.data(4),indeks,j);
 13  5183                                 if k<>0 then fejlreaktion(7<*modiffil*>,k,
 13  5184                                    <:io kommando(gruppe-def):>,0);
 13  5185                                 iaf:= 0;
 13  5186                                 fil(j).iaf(1):= værdi(1) +
 13  5187                                   (if res=6 then 1 shift 22 else 0);
 13  5188                                 indeks:= indeks+1;
 13  5189                                 if sep = ',' then res:= 0;
 13  5190                               end
 12  5191                               else res:= -27; <*parametertype*>
 12  5192                             end;
 11  5193                             if res>0 then pos:= a_pos;
 11  5194                           until sep<>'sp' or res<=0;
 11  5195     
 11  5195                           if res<0 then
 11  5196                           begin
 12  5197                             d.op_ref.resultat:= -res;
 12  5198                             i:=1;
 12  5199                             hægt_tekst(d.op_ref.data,i,fortsæt,1);
 12  5200                             afsluttext(d.op_ref.data,i);
 12  5201                           end;
 11  5202                         end;
 10  5203     \f

 10  5203     message procedure io_komm side 13a - 810512/hko/cl;
 10  5204     
 10  5204                         if d.op_ref.resultat > 3 then
 10  5205                         begin
 11  5206                           setposition(z_io,0,0);
 11  5207                           if sluttegn <> 'nl' then outchar(z_io,'nl');
 11  5208                           skriv_kvittering(z_io,op_ref,pos,d.opref.resultat);
 11  5209                           goto gr_ann;
 11  5210                         end;
 10  5211                         signalbin(bs_fortsæt_adgang);
 10  5212                       end while sep = ',';
  9  5213                       d.op_ref.data(2):= d.vt_op.data(1):=indeks-1;
  9  5214                       k:= sætfildim(d.vt_op.data);
  9  5215                       if k<>0 then fejlreaktion(9,k,<:io kommando(gruppe-def):>,0);
  9  5216                       d.op_ref.data(3):= d.vt_op.data(4); <*filref*>
  9  5217                       signalch(cs_io_fil,vt_op,io_optype or gen_optype);
  9  5218                       d.op_ref.retur:=cs_io_komm;
  9  5219                       pos:=op_ref;
  9  5220                       signal_ch(cs_vt,op_ref,gen_optype or io_optype);
  9  5221     <*V*>             wait_ch(cs_io_komm,op_ref,io_optype,-1<*timeout*>);
  9  5222     <*+4*>            if pos<>op_ref then
  9  5223                         fejlreaktion(11<*fremmed post*>,op_ref,
  9  5224                           <:io kommando(gruppedef retur fra vt):>,0);
  9  5225     <*-4*>
  9  5226     
  9  5226     <*V*>             setposition(z_io,0,0);
  9  5227                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  5228                       skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat);
  9  5229     
  9  5229                       if false then
  9  5230                       begin
 10  5231               gr_ann:   signalch(cs_slet_fil,vt_op,io_optype);
 10  5232                         waitch(cs_io_komm,vt_op,io_optype,-1);
 10  5233                         signalch(cs_io_fil,vt_op,io_optype or vt_optype);
 10  5234                       end;
  9  5235                         
  9  5235                     end;
  8  5236     
  8  5236                     begin
  9  5237     \f

  9  5237     message procedure io_komm side 14 - 810525/hko/cl;
  9  5238     
  9  5238                       <* 7 gruppe(-oversigts-)rapport *>
  9  5239     
  9  5239                       d.op_ref.retur:=cs_io_komm;
  9  5240                       d.op_ref.data(1):=ia(1);
  9  5241                       indeks:=op_ref;
  9  5242                       signal_ch(cs_vt,op_ref,gen_optype or io_optype);
  9  5243     <*V*>             wait_ch(cs_io_komm,op_ref,io_optype,-1<*timeout*>);
  9  5244     
  9  5244     <*+4*>            if op_ref<>indeks then
  9  5245                         fejlreaktion(11<*fremmed post*>,op_ref,
  9  5246                           <:io-kommando(gruppe-rapport):>,0);
  9  5247     <*-4*>
  9  5248     
  9  5248     <*V*>             setposition(z_io,0,0);
  9  5249                       if sluttegn <> 'nl' then outchar(z_io,'nl');
  9  5250                       if d.op_ref.resultat<>3 then
  9  5251                       begin
 10  5252                         skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat);
 10  5253                       end
  9  5254                       else
  9  5255                       begin
 10  5256                         integer bogst,løb;
 10  5257     
 10  5257                         if kode = 27 then <* gruppe,vis *>
 10  5258                         begin
 11  5259     <*V*>                 write(z_io,"nl",1,"-",5,"sp",2,<:gruppe: :>,
 11  5260                                 "G",1,<<z>,d.op_ref.data(1) extract 7,
 11  5261                                 "sp",2,"-",5,"nl",1);
 11  5262     \f

 11  5262     message procedure io_komm side 15 - 820301/hko;
 11  5263     
 11  5263                           for pos:=1 step 1 until d.op_ref.data(2) do
 11  5264                           begin
 12  5265                             disable i:=læsfil(d.op_ref.data(3),pos,j);
 12  5266                             if i<>0 then
 12  5267                               fejlreaktion(5<*læsfil*>,i,
 12  5268                                 <:io_kommando(gruppe,vis):>,0);
 12  5269                             iaf:=0;
 12  5270                             vogn:=fil(j).iaf(1);
 12  5271                             if vogn shift(-22) =0 then
 12  5272                               write(z_io,<<ddddddd>,vogn extract 14)
 12  5273                             else
 12  5274                             begin
 13  5275                               løb:=vogn extract 7;
 13  5276                               bogst:=vogn shift(-7) extract 5;
 13  5277                               if bogst>0 then bogst:=bogst+'A'-1;
 13  5278                               ll:=vogn shift(-12) extract 10;
 13  5279                               write(z_io,"sp",if bogst=0 then 1 else 0,<<ddd>,ll,
 13  5280                                     false add bogst,1,"/",1,true,3,<<d>,løb);
 13  5281                             end;
 12  5282                             if pos mod 8 =0 then outchar(z_io,'nl')
 12  5283                             else write(z_io,"sp",2);
 12  5284                           end;
 11  5285                           write(z_io,"*",1);
 11  5286     \f

 11  5286     message procedure io_komm side 16 - 810512/hko/cl;
 11  5287     
 11  5287                         end
 10  5288                         else if kode=28 then <* gruppe,oversigt *>
 10  5289                         begin
 11  5290                           write(z_io,"nl",1,"-",5,"sp",2,<:gruppe oversigt:>,
 11  5291                                 "sp",2,"-",5,"nl",2);
 11  5292                           for pos:=1 step 1 until d.op_ref.data(1) do
 11  5293                           begin
 12  5294                             disable i:=læsfil(d.op_ref.data(2),pos,j);
 12  5295                             if i<>0 then 
 12  5296                               fejlreaktion(5<*læsfil*>,i,
 12  5297                                 <:io-kommando(gruppe-oversigt):>,0);
 12  5298                             iaf:=0;
 12  5299                             ll:=fil(j).iaf(1);
 12  5300                             write(z_io,"G",1,<<z>,true,3,ll extract 7);
 12  5301                             if pos mod 10 =0 then outchar(z_io,'nl')
 12  5302                             else write(z_io,"sp",3);
 12  5303                           end;
 11  5304                           write(z_io,"*",1);
 11  5305                         end;
 10  5306                         <* slet fil *>
 10  5307                         d.op_ref.opkode:= 104;
 10  5308                         d.op_ref.data(4):= d.op_ref.data(if kode=28 then 2 else 3);
 10  5309                         signalch(cs_slet_fil,op_ref,gen_optype or io_optype);
 10  5310                         waitch(cs_io_komm,op_ref,io_optype or gen_optype,-1);
 10  5311                       end; <* resultat=3 *>
  9  5312     
  9  5312                     end;
  8  5313     
  8  5313                     begin
  9  5314     \f

  9  5314     message procedure io_komm side 17 - 810525/cl;
  9  5315     
  9  5315                       <* 8 spring(-oversigts-)rapport *>
  9  5316     
  9  5316                       d.op_ref.retur:=cs_io_komm;
  9  5317                       tofrom(d.op_ref.data,ia,4);
  9  5318                       indeks:=op_ref;
  9  5319                       signal_ch(cs_vt,op_ref,gen_optype or io_optype);
  9  5320     <*V*>             wait_ch(cs_io_komm,op_ref,io_optype,-1<*timeout*>);
  9  5321     
  9  5321     <*+4*>            if op_ref<>indeks then
  9  5322                         fejlreaktion(11<*fremmed post*>,op_ref,
  9  5323                           <:io-kommando(spring-rapport):>,0);
  9  5324     <*-4*>
  9  5325     
  9  5325     <*V*>             setposition(z_io,0,0);
  9  5326                       if sluttegn <> 'nl' then outchar(z_io,'nl');
  9  5327                       if d.op_ref.resultat<>3 then
  9  5328                       begin
 10  5329                         skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat);
 10  5330                       end
  9  5331                       else
  9  5332                       begin
 10  5333                         boolean p_skrevet;
 10  5334                         integer bogst,løb;
 10  5335     
 10  5335                         if kode = 32 then <* spring,vis *>
 10  5336                         begin
 11  5337                           ll:= d.op_ref.data(1) shift (-5) extract 10;
 11  5338                           bogst:= d.op_ref.data(1) extract 5;
 11  5339                           if bogst<>0 then bogst:= bogst + 'A' - 1;
 11  5340     <*V*>                 write(z_io,"nl",1,"-",5,"sp",2,<:spring: :>,
 11  5341                                 <<d>,ll,false add bogst,(bogst<>0) extract 1,
 11  5342                                 <:.:>,string (extend d.op_ref.data(2) shift 24));
 11  5343                           raf:= data+8;
 11  5344                           if d.op_ref.raf(1)<>0.0 then
 11  5345                             write(z_io,<:,  startet :>,<<zddddd>,round
 11  5346                               systime(4,d.op_ref.raf(1),r),<:.:>,round r)
 11  5347                           else
 11  5348                             write(z_io,<:, ikke startet:>);
 11  5349                           write(z_io,"sp",2,"-",5,"nl",1);
 11  5350     \f

 11  5350     message procedure io_komm side 18 - 810518/cl;
 11  5351     
 11  5351                           p_skrevet:= false;
 11  5352                           for pos:=1 step 1 until d.op_ref.data(3) do
 11  5353                           begin
 12  5354                             disable i:=læsfil(d.op_ref.data(4),pos,j);
 12  5355                             if i<>0 then
 12  5356                               fejlreaktion(5<*læsfil*>,i,
 12  5357                                 <:io_kommando(spring,vis):>,0);
 12  5358                             iaf:=0;
 12  5359                             i:= fil(j).iaf(1);
 12  5360                             if i < 0 and -, p_skrevet then
 12  5361                             begin
 13  5362                               outchar(z_io,'('); p_skrevet:= true;
 13  5363                             end;
 12  5364                             if i > 0 and p_skrevet then
 12  5365                             begin
 13  5366                               outchar(z_io,')'); p_skrevet:= false;
 13  5367                             end;
 12  5368                             if pos mod 2 = 0 then
 12  5369                               write(z_io,<< dd>,abs i,<:.:>)
 12  5370                             else
 12  5371                               write(z_io,true,3,<<d>,abs i);
 12  5372                             if pos mod 21 = 0 then outchar(z_io,'nl');
 12  5373                           end;
 11  5374                           write(z_io,"*",1);
 11  5375     \f

 11  5375     message procedure io_komm side 19 - 810525/cl;
 11  5376     
 11  5376                         end
 10  5377                         else if kode=33 then <* spring,oversigt *>
 10  5378                         begin
 11  5379                           write(z_io,"nl",1,"-",5,"sp",2,<:spring oversigt:>,
 11  5380                                 "sp",2,"-",5,"nl",2);
 11  5381                           for pos:=1 step 1 until d.op_ref.data(1) do
 11  5382                           begin
 12  5383                             disable i:=læsfil(d.op_ref.data(2),pos,j);
 12  5384                             if i<>0 then 
 12  5385                               fejlreaktion(5<*læsfil*>,i,
 12  5386                                 <:io-kommando(spring-oversigt):>,0);
 12  5387                             iaf:=0;
 12  5388                             ll:=fil(j).iaf(1) shift (-5) extract 10;
 12  5389                             bogst:=fil(j).iaf(1) extract 5;
 12  5390                             if bogst<>0 then bogst:=bogst + 'A' - 1;
 12  5391                             write(z_io,"sp",(bogst=0) extract 1 + 1,<<ddd>,ll,
 12  5392                               false add bogst,(bogst<>0) extract 1,<:.:>,true,4,
 12  5393                               string (extend fil(j).iaf(2) shift 24));
 12  5394                             if fil(j,2)<>0.0 then
 12  5395                               write(z_io,<:startet :>,<<zddddd>,
 12  5396                                 round systime(4,fil(j,2),r),<:.:>,round r);
 12  5397                             outchar(z_io,'nl');
 12  5398                           end;
 11  5399                           write(z_io,"*",1);
 11  5400                         end;
 10  5401                         <* slet fil *>
 10  5402                         d.op_ref.opkode:= 104;
 10  5403                         if kode=33 then d.op_ref.data(4):= d.op_ref.data(2);
 10  5404                         signalch(cs_slet_fil,op_ref,gen_optype or io_optype);
 10  5405                         waitch(cs_io_komm,op_ref,io_optype or gen_optype,-1);
 10  5406                       end; <* resultat=3 *>
  9  5407     
  9  5407                     end;
  8  5408     
  8  5408                     begin
  9  5409     \f

  9  5409     message procedure io_komm side 20 - 820302/hko;
  9  5410     
  9  5410                       <* 9 fordeling af linier/områder på operatører *>
  9  5411     
  9  5411                       d.op_ref.retur:=cs_io_komm;
  9  5412                       disable
  9  5413                       if kode=5 then
  9  5414                       begin
 10  5415                         integer array io_linietabel(1:max_linienr//3+1);
 10  5416     
 10  5416                         for ref:= 0 step 512 until (max_linienr//768*512) do
 10  5417                         begin
 11  5418                           i:= læs_fil(1035,ref//512+1,j);
 11  5419                           if i <> 0 then
 11  5420                             fejlreaktion(5,i,<:liniefordelingstabel:>,0);
 11  5421                           tofrom(io_linietabel.ref,fil(j),
 11  5422                           if (((max_linienr+1 - (ref//2*3))+2)//3*2) > 512 then 512
 11  5423                           else ((max_linienr+1 - (ref//2*3))+2)//3*2);
 11  5424                         end;  
 10  5425                         ref:=0;
 10  5426                         operatør:=ia(1);
 10  5427                         for j:=2 step 1 until indeks do
 10  5428                         begin
 11  5429                           ll:=ia(j);
 11  5430                           if ll<>0 then
 11  5431                             skrivtegn(io_linietabel,abs(ll)+1,
 11  5432                                 if ll>0 then operatør else 0);
 11  5433                         end;
 10  5434                         for ref:= 0 step 512 until (max_linienr//768*512) do
 10  5435                         begin
 11  5436                           i:= skriv_fil(1035,ref//512+1,j);
 11  5437                           if i <> 0 then
 11  5438                             fejlreaktion(6,i,<:liniefordelingstabel:>,0);
 11  5439                           tofrom(fil(j),io_linietabel.ref,
 11  5440                              if (((max_linienr+1 - (ref//2*3))+2)//3*2) > 512
 11  5441                              then 512 else ((max_linienr+1 - (ref//2*3))+2)//3*2
 11  5442                           );
 11  5443                         end;  
 10  5444                         ref:=0;
 10  5445                       end
  9  5446                       else
  9  5447                       begin
 10  5448                         modiffil(1034,1,i);
 10  5449                         ref:=0;
 10  5450                         operatør:=ia(1);
 10  5451                         for j:=2 step 1 until indeks do
 10  5452                         begin
 11  5453                           ll:=ia(j);
 11  5454                           fil(i).ref(ll):= if ll>0 then operatør else 0;
 11  5455                         end;
 10  5456                       end;
  9  5457                       indeks:=op_ref;
  9  5458                       signal_ch(cs_rad,op_ref,gen_optype or io_optype);
  9  5459     <*V*>             wait_ch(cs_io_komm,op_ref,io_optype,-1);
  9  5460     
  9  5460     <*+4*>            if op_ref<>indeks then
  9  5461                         fejlreaktion(11<*fr.post*>,op_ref,
  9  5462                           <:io-komm,liniefordeling retur fra rad:>,0);
  9  5463     <*-4*>
  9  5464     
  9  5464     <*V*>             setposition(z_io,0,0);
  9  5465                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  5466                       skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat);
  9  5467     
  9  5467                     end;
  8  5468     
  8  5468                     begin
  9  5469     \f

  9  5469     message procedure io_komm side 21 - 820301/cl;
  9  5470     
  9  5470                       <* 10 springdefinition *>
  9  5471     
  9  5471                       tofrom(d.op_ref.data,ia,indeks*2);
  9  5472     <*V*>             wait_ch(cs_io_fil,vt_op,true,-1<*timeout*>);
  9  5473                       start_operation(vt_op,101,cs_io_komm,
  9  5474                                       101<*opret fil*>);
  9  5475                       d.vt_op.data(1):=128;<*postantal*>
  9  5476                       d.vt_op.data(2):=2;  <*postlængde*>
  9  5477                       d.vt_op.data(3):=1;  <*segmentantal*>
  9  5478                       d.vt_op.data(4):=
  9  5479                               2 shift 10;  <*spool fil*>
  9  5480                       signal_ch(cs_opret_fil,vt_op,io_optype);
  9  5481                       pos:=vt_op;<*variabel lånes*>
  9  5482     <*V*>             wait_ch(cs_io_komm,vt_op,io_optype,-1<*timeout*>);
  9  5483     <*+4*>            if vt_op<>pos then
  9  5484                         fejlreaktion(11<*fremmed post*>,vt_op,<:springdef:>,0);
  9  5485                       if d.vt_op.data(9)<>0 then
  9  5486                         fejlreaktion(13<*opret-fil*>,d.vt_op.data(9),
  9  5487                           <:io-kommando(springdefinition):>,0);
  9  5488     <*-4*>
  9  5489                       iaf:=0;
  9  5490                       for i:=1 step 1 until indeks-2 do
  9  5491                       begin
 10  5492                         disable k:=modif_fil(d.vt_op.data(4),i,j);
 10  5493                         if k<>0 then
 10  5494                           fejlreaktion(7<*modif-fil*>,k,
 10  5495                             <:io kommando(spring-def):>,0);
 10  5496                         fil(j).iaf(1):=d.op_ref.data(i+2);
 10  5497                       end;
  9  5498                       while sep = ',' do
  9  5499                       begin
 10  5500                         wait(bs_fortsæt_adgang);
 10  5501                         pos:= 1; j:= 0;
 10  5502                         while læs_store(z_io,i) < 8 do
 10  5503                         begin
 11  5504                           skrivtegn(fortsæt,pos,i);
 11  5505                           if i = '?' or i = 'esc' then j:= 1; <* skip kommando *>
 11  5506                         end;
 10  5507                         skrivtegn(fortsæt,pos,'em');
 10  5508                         afsluttext(fortsæt,pos);
 10  5509                         sluttegn:= i;
 10  5510                         if j<>0 then
 10  5511                         begin
 11  5512                           setposition(z_io,0,0);
 11  5513                           if sluttegn <> 'nl' then outchar(z_io,'nl');
 11  5514                           skriv_kvittering(z_io,opref,-1,53);<*annulleret*>
 11  5515                           goto sp_ann;
 11  5516                         end;
 10  5517     \f

 10  5517     message procedure io_komm side 22 - 810519/cl;
 10  5518     
 10  5518                         disable begin
 11  5519                         integer array værdi(1:4);
 11  5520                         integer a_pos,res;
 11  5521                           pos:= 0;
 11  5522                           repeat
 11  5523                             apos:= pos;
 11  5524                             læs_paramsæt(fortsæt,a_pos,0,værdi,sep,res);
 11  5525                             if res >= 0 then
 11  5526                             begin
 12  5527                               if res=0 and (sep=',' or indeks>2) then <*ok*>
 12  5528                               else if res=0 then res:= -25 <*parameter mangler*>
 12  5529                               else if res=10 and (værdi(1)<1 or værdi(1)>99) then
 12  5530                                   res:= -44 <*intervalstørrelse ulovlig*>
 12  5531                               else if res=10 and (værdi(2)<1 or værdi(2)>99) then
 12  5532                                   res:= -6  <*løbnr ulovligt*>
 12  5533                               else if res=10 then
 12  5534                               begin
 13  5535                                 k:=modiffil(d.vt_op.data(4),indeks-1,j);
 13  5536                                 if k<>0 then fejlreaktion(7<*modiffil*>,k,
 13  5537                                    <:io kommando(spring-def):>,0);
 13  5538                                 iaf:= 0;
 13  5539                                 fil(j).iaf(1):= værdi(1) shift 12 + værdi(2);
 13  5540                                 indeks:= indeks+1;
 13  5541                                 if sep = ',' then res:= 0;
 13  5542                               end
 12  5543                               else res:= -27; <*parametertype*>
 12  5544                             end;
 11  5545                             if res>0 then pos:= a_pos;
 11  5546                           until sep<>'sp' or res<=0;
 11  5547     
 11  5547                           if res<0 then
 11  5548                           begin
 12  5549                             d.op_ref.resultat:= -res;
 12  5550                             i:=1;
 12  5551                             hægt_tekst(d.op_ref.data,i,fortsæt,1);
 12  5552                             afsluttext(d.op_ref.data,i);
 12  5553                           end;
 11  5554                         end;
 10  5555     \f

 10  5555     message procedure io_komm side 23 - 810519/cl;
 10  5556     
 10  5556                         if d.op_ref.resultat > 3 then
 10  5557                         begin
 11  5558                           setposition(z_io,0,0);
 11  5559                           if sluttegn <> 'nl' then outchar(z_io,'nl');
 11  5560                           skriv_kvittering(z_io,op_ref,pos,d.opref.resultat);
 11  5561                           goto sp_ann;
 11  5562                         end;
 10  5563                         signalbin(bs_fortsæt_adgang);
 10  5564                       end while sep = ',';
  9  5565                       d.vt_op.data(1):= indeks-2;
  9  5566                       k:= sætfildim(d.vt_op.data);
  9  5567                       if k<>0 then fejlreaktion(9,k,<:io kommando(spring-def):>,0);
  9  5568                       d.op_ref.data(3):= d.vt_op.data(4); <*filref*>
  9  5569                       signalch(cs_io_fil,vt_op,io_optype or gen_optype);
  9  5570                       d.op_ref.retur:=cs_io_komm;
  9  5571                       pos:=op_ref;
  9  5572                       signal_ch(cs_vt,op_ref,gen_optype or io_optype);
  9  5573     <*V*>             wait_ch(cs_io_komm,op_ref,io_optype,-1<*timeout*>);
  9  5574     <*+4*>            if pos<>op_ref then
  9  5575                         fejlreaktion(11<*fremmed post*>,op_ref,
  9  5576                           <:io kommando(springdef retur fra vt):>,0);
  9  5577     <*-4*>
  9  5578     
  9  5578     <*V*>             setposition(z_io,0,0);
  9  5579                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  5580                       skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat);
  9  5581     
  9  5581                       if false then
  9  5582                       begin
 10  5583               sp_ann:   signalch(cs_slet_fil,vt_op,io_optype);
 10  5584                         waitch(cs_io_komm,vt_op,io_optype,-1);
 10  5585                         signalch(cs_io_fil,vt_op,io_optype or vt_optype);
 10  5586                         signalbin(bs_fortsæt_adgang);
 10  5587                       end;
  9  5588                         
  9  5588                     end;
  8  5589                     begin
  9  5590                       integer i,j,k,opr,lin,max_lin;
  9  5591                       boolean o_ud, t_ud;
  9  5592     \f

  9  5592     message procedure io_komm side 23a - 820301/cl;
  9  5593     
  9  5593                       <* 11 fordelingsrapport *>
  9  5594     
  9  5594     <*V*>             setposition(z_io,0,0);
  9  5595                       if sluttegn <> 'nl' then outchar(z_io,'nl');
  9  5596     
  9  5596                       max_lin:= max_linienr;
  9  5597                       for opr:= 1 step 1 until max_antal_operatører, 0 do
  9  5598                       begin
 10  5599                         o_ud:= t_ud:= false;
 10  5600                         k:= 0;
 10  5601     
 10  5601                         if opr<>0 then
 10  5602                         begin
 11  5603                           j:= k:= 0;
 11  5604                           for lin:= 1 step 1 until max_lin do
 11  5605                           begin
 12  5606                             læs_tegn(radio_linietabel,lin+1,i);
 12  5607                             if i<>0 then j:= lin;
 12  5608                             if opr=i and opr<>0 then
 12  5609                             begin
 13  5610                               if -, o_ud then
 13  5611                               begin
 14  5612                                 o_ud:= true;
 14  5613                                 if opr<>0 then
 14  5614                                   write(z_io,"nl",1,<:operatør:>,<< dd>,opr,
 14  5615                                     "sp",2,string bpl_navn(opr))
 14  5616                                 else
 14  5617                                   write(z_io,"nl",1,<:ikke fordelte:>);
 14  5618                               end;
 13  5619                               if -, t_ud then
 13  5620                               begin
 14  5621                                 write(z_io,<:<'nl'>    linier: :>);
 14  5622                                 t_ud:= true;
 14  5623                               end;
 13  5624                               k:=k+1;
 13  5625                               if k>1 and k mod 10 = 1 then
 13  5626                                 write(z_io,"nl",1,"sp",13);
 13  5627                               write(z_io,<<ddd >,lin);
 13  5628                             end;
 12  5629                             if lin=max_lin then max_lin:= j;
 12  5630                           end;
 11  5631                         end;
 10  5632     
 10  5632                         k:= 0; t_ud:= false;
 10  5633                         for i:= 1 step 1 until max_antal_områder do
 10  5634                         begin
 11  5635                           if radio_områdetabel(i)= opr then
 11  5636                           begin
 12  5637                             if -, o_ud then
 12  5638                             begin
 13  5639                               o_ud:= true;
 13  5640                               if opr<>0 then
 13  5641                                 write(z_io,"nl",1,<:operatør:>,<< dd>,opr,
 13  5642                                   "sp",2,string bpl_navn(opr))
 13  5643                               else
 13  5644                                 write(z_io,"nl",1,<:ikke fordelte:>);
 13  5645                             end;
 12  5646                             if -, t_ud then
 12  5647                             begin
 13  5648                               write(z_io,<:<'nl'>    områder: :>);
 13  5649                               t_ud:= true;
 13  5650                             end;
 12  5651                             k:= k+1;
 12  5652                             if k>1 and k mod 10 = 1 then
 12  5653                               write(z_io,"nl",1,"sp",13);
 12  5654                             write(z_io,true,4,string område_navn(i));
 12  5655                           end;
 11  5656                         end;
 10  5657                         if o_ud then write(z_io,"nl",1);
 10  5658                       end;
  9  5659                       write(z_io,"*",1);
  9  5660                     end;
  8  5661     
  8  5661                     begin
  9  5662                       integer omr,typ,sum;
  9  5663                       integer array ialt(1:5);
  9  5664                       real r;
  9  5665     \f

  9  5665     message procedure io_komm side 24 - 810501/hko;
  9  5666     
  9  5666                       <* 12 vis/nulstil opkaldstællere *>
  9  5667     
  9  5667     
  9  5667                       if kode=76 and indeks=1 then
  9  5668                       begin <* TÆ,N <tid> *>
 10  5669                         if ia(1)<(-1) or 2400<ia(1) then
 10  5670                         begin
 11  5671                           setposition(z_io,0,0);
 11  5672                           if sluttegn<>'nl' then outchar(z_io,'nl');
 11  5673                           skriv_kvittering(z_io,opref,-1,64);
 11  5674                         end
 10  5675                         else
 10  5676                         begin
 11  5677                           if ia(1)=(-1) then nulstil_systællere:= -1
 11  5678                           else nulstil_systællere:= (ia(1) mod 2400)*100;
 11  5679                           opdater_tf_systællere;
 11  5680                           typ:= opref; <* typ lånes til gemmevariabel *>
 11  5681                           d.opref.retur:= cs_io_komm;
 11  5682                           signal_ch(cs_io_nulstil,opref,io_optype);
 11  5683     <*V*>                 wait_ch(cs_io_komm,opref,io_optype,-1);
 11  5684     <*+4*>                if opref <> typ then
 11  5685                             fejlreaktion(11<*fremmed post*>,opref,
 11  5686                               <:io_kommando:>,0);
 11  5687     <*-4*>
 11  5688                           setposition(z_io,0,0);
 11  5689                           if sluttegn<>'nl' then outchar(z_io,'nl');
 11  5690                           skriv_kvittering(z_io,opref,-1,3);
 11  5691                         end;
 10  5692                       end
  9  5693                       else
  9  5694                       begin
 10  5695                         setposition(z_io,0,0);
 10  5696                         if sluttegn<>'nl' then outchar(z_io,'nl');
 10  5697                         for typ:= 1 step 1 until 5 do ialt(typ):= 0;
 10  5698       
 10  5698                         write(z_io,
 10  5699                   <:område  udgående  alm.ind  nød ind:>,
 10  5700                   <: ind-ialt    total   ej forb.  optaget:>,"nl",1);
 10  5701                         for omr := 1 step 1 until max_antal_områder do
 10  5702                         begin
 11  5703                           sum:= 0;
 11  5704                           write(z_io,true,6,string område_navn(omr),":",1);
 11  5705                           for typ:= 1 step 1 until 3 do
 11  5706                           begin
 12  5707                             write(z_io,<<  ddddddd>,opkalds_tællere((omr-1)*5+typ));
 12  5708                             sum:= sum + opkalds_tællere((omr-1)*5+typ);
 12  5709                             ialt(typ):= ialt(typ)+opkalds_tællere((omr-1)*5+typ);
 12  5710                           end;
 11  5711                           write(z_io,<<  ddddddd>,
 11  5712                             sum-opkalds_tællere((omr-1)*5+1),sum,"sp",2);
 11  5713                           for typ:= 4 step 1 until 5 do
 11  5714                           begin
 12  5715                             write(z_io,<<  ddddddd>,opkalds_tællere((omr-1)*5+typ));
 12  5716                             ialt(typ):= ialt(typ)+opkalds_tællere((omr-1)*5+typ);
 12  5717                           end;
 11  5718                           write(z_io,"nl",1);
 11  5719                         end;
 10  5720                         sum:= 0;
 10  5721                         write(z_io,"nl",1,<:ialt  ::>);
 10  5722                         for typ:= 1 step 1 until 3 do
 10  5723                         begin
 11  5724                           write(z_io,<<  ddddddd>,ialt(typ));
 11  5725                           sum:= sum+ialt(typ);
 11  5726                         end;
 10  5727                         write(z_io,<<  ddddddd>,sum-ialt(1),sum,"sp",2,
 10  5728                           ialt(4), ialt(5), "nl",3);
 10  5729     
 10  5729                         for typ:= 1 step 1 until 5 do ialt(typ):= 0;
 10  5730                         write(z_io,
 10  5731                           <:oper.   udgående  alm.ind  nød ind:>,
 10  5732                           <: ind-ialt    total   ej forb.  optaget:>,"nl",1);
 10  5733                         for omr := 1 step 1 until max_antal_operatører do
 10  5734                         begin
 11  5735                           sum:= 0;
 11  5736                           if bpl_navn(omr)=long<::> then
 11  5737                             write(z_io,"sp",6-write(z_io,<:op:>,<<d>,omr),":",1)
 11  5738                           else
 11  5739                             write(z_io,true,6,string bpl_navn(omr),":",1);
 11  5740                           for typ:= 1 step 1 until 3 do
 11  5741                           begin
 12  5742                             write(z_io,<<  ddddddd>,operatør_tællere((omr-1)*4+typ));
 12  5743                             sum:= sum + operatør_tællere((omr-1)*5+typ);
 12  5744                             ialt(typ):= ialt(typ)+operatør_tællere((omr-1)*5+typ);
 12  5745                           end;
 11  5746                           write(z_io,<<  ddddddd>,
 11  5747                             sum-operatør_tællere((omr-1)*5+1),sum,"sp",2);
 11  5748                           for typ:= 4 step 1 until 5 do
 11  5749                           begin
 12  5750                             write(z_io,<<  ddddddd>,operatør_tællere((omr-1)*5+typ));
 12  5751                             ialt(typ):= ialt(typ)+operatør_tællere((omr-1)*5+typ);
 12  5752                           end;
 11  5753                           write(z_io,"nl",1);
 11  5754                         end;
 10  5755                         sum:= 0;
 10  5756                         write(z_io,"nl",1,<:ialt  ::>);
 10  5757                         for typ:= 1 step 1 until 3 do
 10  5758                         begin
 11  5759                           write(z_io,<<  ddddddd>,ialt(typ));
 11  5760                           sum:= sum+ialt(typ);
 11  5761                         end;
 10  5762                         write(z_io,<<  ddddddd>,sum-ialt(1),sum,"sp",2,
 10  5763                           ialt(4),ialt(5),"nl",2);
 10  5764     
 10  5764                         typ:= replacechar(1,':');
 10  5765                         write(z_io,<:tællere nulstilles :>);
 10  5766                         if nulstil_systællere=(-1) then
 10  5767                           write(z_io,<:ikke automatisk:>,"nl",1)
 10  5768                         else
 10  5769                           write(z_io,<:automatisk kl. :>,<<zd dd dd>,
 10  5770                             nulstil_systællere,"nl",1);
 10  5771                         replacechar(1,'.');
 10  5772                         write(z_io,<:sidst nulstillet d. :>,<<zd dd dd>,
 10  5773                           systime(4,systællere_nulstillet,r));
 10  5774                         replacechar(1,':');
 10  5775                         write(z_io,<: kl. :>,<<zd dd dd>,r,"nl",1);
 10  5776                         replacechar(1,typ);
 10  5777                         write(z_io,"*",1,"nl",1);
 10  5778                         setposition(z_io,0,0);
 10  5779       
 10  5779                         if kode = 76 <* nulstil tællere *> then
 10  5780                         disable begin
 11  5781                           for omr:= 1 step 1 until max_antal_områder*5 do
 11  5782                             opkalds_tællere(omr):= 0;
 11  5783                           for omr:= 1 step 1 until max_antal_operatører*5 do
 11  5784                             operatør_tællere(omr):= 0;
 11  5785                           systime(1,0.0,systællere_nulstillet);
 11  5786                           opdater_tf_systællere;
 11  5787                           typ:= replacechar(1,'.');
 11  5788                           write(z_io,<:!!! tællere nulstillet d. :>,<<zd dd dd>,
 11  5789                             systime(4,systællere_nulstillet,r));
 11  5790                           replacechar(1,':');
 11  5791                           write(z_io,<: kl. :>,<<zd dd dd>,r,"nl",1);
 11  5792                           replacechar(1,typ);
 11  5793                           setposition(z_io,0,0);
 11  5794                         end;
 10  5795                       end;
  9  5796                     end;
  8  5797     
  8  5797                     begin
  9  5798     \f

  9  5798     message procedure io_komm side 25 - 940522/cl;
  9  5799     
  9  5799                       <* 13 navngiv betjeningsplads *>
  9  5800                       boolean incl;
  9  5801                       long field lf;
  9  5802     
  9  5802                       lf:=6;
  9  5803                       operatør:= ia(1);
  9  5804                       navn:= ia.lf;
  9  5805                       incl:= false add (ia(4) extract 8);
  9  5806     
  9  5806                       if navn=long<::> then
  9  5807                       begin
 10  5808                         <* nedlæg navn - check for i brug *>
 10  5809                         iaf:= operatør*terminal_beskr_længde;
 10  5810                         if terminal_tab.iaf.terminal_tilstand shift (-21)<>7 then
 10  5811                           d.opref.resultat:= 48 <*i brug*>
 10  5812                         else
 10  5813                         begin
 11  5814                           for i:= 65 step 1 until top_bpl_gruppe do
 11  5815                           begin
 12  5816                             iaf:= i*op_maske_lgd;
 12  5817                             if læsbit_ia(bpl_def.iaf,operatør) then
 12  5818                               d.opref.resultat:= 48<*i brug*>;
 12  5819                           end;
 11  5820                         end;
 10  5821                         if d.opref.resultat <= 3 then
 10  5822                         begin
 11  5823                           for i:= 1 step 1 until sidste_bus do
 11  5824                             if bustabel(i) shift (-14) extract 8 = operatør then
 11  5825                               d.opref.resultat:= 48<*i brug*>;
 11  5826                         end;
 10  5827                       end
  9  5828                       else
  9  5829                       begin
 10  5830                         <* opret/omdøb *>
 10  5831                         i:= find_bpl(navn);
 10  5832                         if i<>0 and i<>operatør then 
 10  5833                           d.opref.resultat:= 48 <*i brug*>;
 10  5834                       end;
  9  5835                       if d.opref.resultat<=3 then
  9  5836                       begin
 10  5837                         bpl_navn(operatør):= navn;
 10  5838                         operatør_auto_include(operatør):= incl;
 10  5839                         k:= modif_fil(tf_bpl_navne,operatør,ll);
 10  5840                         if k<>0 then
 10  5841                           fejlreaktion(7,k,<:betjeningsplads,navngiv:>,0);
 10  5842                         lf:= 4;
 10  5843                         fil(ll).lf:= navn add (incl extract 8);
 10  5844                         setposition(fil(ll),0,0);
 10  5845     
 10  5845                         <* skriv bplnavne *>
 10  5846                         disable begin
 11  5847                           zone z(128,1,stderror);
 11  5848                           long array field laf;
 11  5849                           integer array ia(1:10);
 11  5850     
 11  5850                           open(z,4,<:bplnavne:>,0);
 11  5851                           laf:= 0;
 11  5852                           outrec6(z,512);
 11  5853                           for i:= 1 step 1 until 127 do
 11  5854                             z.laf(i):= bpl_navn(i);
 11  5855                           close(z,true);
 11  5856                           monitor(42,z,0,ia);
 11  5857                           ia(6):= systime(7,0,0.0);
 11  5858                           monitor(44,z,0,ia);
 11  5859                         end;                        
 10  5860                         d.opref.resultat:= 3;<*udført*>
 10  5861                       end;
  9  5862     
  9  5862                       setposition(z_io,0,0);
  9  5863                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  5864                       skriv_kvittering(z_io,opref,-1,d.opref.resultat);
  9  5865                     end;
  8  5866     
  8  5866                     begin
  9  5867     \f

  9  5867     message procedure io_komm side 26 - 940522/cl;
  9  5868     
  9  5868                       <* 14 betjeningsplads - gruppe *>
  9  5869                       integer ant_i_gruppe;
  9  5870                       long field lf;
  9  5871                       integer array maske(1:op_maske_lgd//2);
  9  5872     
  9  5872                       lf:= 4; ant_i_gruppe:= 0;
  9  5873                       tofrom(maske,ingen_operatører,op_maske_lgd);
  9  5874                       navn:= ia.lf;
  9  5875                       operatør:= find_bpl(navn);
  9  5876                       for i:= 3 step 1 until indeks do
  9  5877                         if sætbit_ia(maske,ia(i),1)=0 then
  9  5878                           ant_i_gruppe:= ant_i_gruppe+1;
  9  5879                       if ant_i_gruppe=0 then
  9  5880                       begin
 10  5881                         <* slet gruppe *>
 10  5882                         if operatør<=64 then
 10  5883                           d.opref.resultat:= (if operatør=0 then 46<*navn ukendt*>
 10  5884                                                       else 62<*navn ulovligt*>)
 10  5885                         else
 10  5886                         begin
 11  5887                           for i:= 1 step 1 until max_antal_operatører do
 11  5888                             for j:= 1 step 1 until 3 do
 11  5889                               if operatør_stop(i,j)=operatør then
 11  5890                                 d.opref.resultat:= 48<*i brug*>;
 11  5891                         end;
 10  5892                         navn:= long<::>;
 10  5893                       end
  9  5894                       else
  9  5895                       begin
 10  5896                         if 1<=operatør and operatør<=64 then
 10  5897                           d.opref.resultat:= 62<*navn ulovligt*>
 10  5898                         else
 10  5899                         if operatør=0 then
 10  5900                         begin
 11  5901                           i:=65;
 11  5902                           while i<=127 and operatør=0 do
 11  5903                           begin
 12  5904                             if bpl_navn(i)=long<::> then operatør:=i;
 12  5905                             i:= i+1;
 12  5906                           end;
 11  5907                           if operatør=0 then
 11  5908                             d.opref.resultat:= 32<*ikke plads*>
 11  5909                           else if operatør>top_bpl_gruppe then
 11  5910                             top_bpl_gruppe:= operatør;
 11  5911                         end;
 10  5912                       end;
  9  5913                       if d.opref.resultat<=3 then
  9  5914                       begin
 10  5915                         bpl_navn(operatør):= navn;
 10  5916                         iaf:= operatør*op_maske_lgd;
 10  5917                         tofrom(bpl_def.iaf,maske,op_maske_lgd);
 10  5918                         bpl_tilst(operatør,1):= bpl_tilst(operatør,2):= 0;
 10  5919                         for i:= 1 step 1 until max_antal_operatører do
 10  5920                         begin
 11  5921                           if læsbit_ia(maske,i) then
 11  5922                           begin
 12  5923                             bpl_tilst(operatør,2):= bpl_tilst(operatør,2)+1;
 12  5924                             if læsbit_ia(operatør_maske,i) then
 12  5925                               bpl_tilst(operatør,1):= bpl_tilst(operatør,1)+1;
 12  5926                           end;
 11  5927                         end;
 10  5928                         k:=modif_fil(tf_bplnavne,operatør,ll);
 10  5929                         if k<>0 then
 10  5930                           fejlreaktion(7,k,<:btj.plads,gruppenavn:>,0);
 10  5931                         lf:= 4;
 10  5932                         fil(ll).lf:= navn;
 10  5933                         setposition(fil(ll),0,0);
 10  5934                         iaf:= 0;
 10  5935                         k:= modif_fil(tf_bpl_def,operatør-64,ll);
 10  5936                         if k<>0 then
 10  5937                           fejlreaktion(7,k,<:btj.plads,gruppedef:>,0);
 10  5938                         for i:= 1 step 1 until op_maske_lgd//2 do
 10  5939                           fil(ll).iaf(i):= maske(i);
 10  5940                         fil(ll).iaf(4):= bpl_tilst(operatør,2);
 10  5941                         setposition(fil(ll),0,0);
 10  5942                         d.opref.resultat:= 3;
 10  5943                       end;
  9  5944     
  9  5944                       setposition(z_io,0,0);
  9  5945                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  5946                       skriv_kvittering(z_io,opref,-1,d.opref.resultat);
  9  5947                     end;
  8  5948     
  8  5948                     begin
  9  5949     \f

  9  5949     message procedure io_komm side 27 - 940522/cl;
  9  5950     
  9  5950                       <* 15 vis betjeningspladsdefinitioner *>
  9  5951     
  9  5951                       setposition(z_io,0,0);
  9  5952                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  5953                       write(z_io,"nl",1,<:operatørpladser::>,"nl",1);
  9  5954                       for i:= 1 step 1 until max_antal_operatører do
  9  5955                       begin
 10  5956                         write(z_io,<<dd>,i,<:: :>,true,6,string bpl_navn(i),
 10  5957                           case operatør_auto_include(i) extract 2 + 1 of(
 10  5958                           <:(--):>,<:(ÅB):>,<:(??):>,<:(ST):>));
 10  5959                         if i mod 4 = 0 then write(z_io,"nl",1)
 10  5960                                        else write(z_io,"sp",5);
 10  5961                       end;
  9  5962                       if max_antal_operatører mod 4 <> 0 then write(z_io,"nl",1);
  9  5963                       write(z_io,"nl",1,<:grupper::>,"nl",1);
  9  5964                       for i:= 65 step 1 until top_bpl_gruppe do
  9  5965                       begin
 10  5966                         ll:=0; iaf:= i*op_maske_lgd;
 10  5967                         if bpl_navn(i)<>long<::> then
 10  5968                         begin
 11  5969                           write(z_io,true,6,string bpl_navn(i),":",1);
 11  5970                           for j:= 1 step 1 until max_antal_operatører do
 11  5971                           begin
 12  5972                             if læsbit_ia(bpl_def.iaf,j) then
 12  5973                             begin
 13  5974                               if ll mod 8 = 0 and ll<>0 then
 13  5975                                 write(z_io,"nl",1,"sp",7);
 13  5976                               write(z_io,"sp",2,string bpl_navn(j));
 13  5977                               ll:=ll+1;
 13  5978                             end;
 12  5979                           end;
 11  5980                           write(z_io,"nl",1);
 11  5981                         end;
 10  5982                       end;
  9  5983                       write(z_io,"*",1);
  9  5984                     end;
  8  5985     
  8  5985                     begin
  9  5986     \f

  9  5986     message procedure io_komm side 28 - 940522/cl;
  9  5987     
  9  5987                       <* 16 stopniveau,definer *>
  9  5988     
  9  5988                       operatør:= ia(1);
  9  5989                       iaf:= operatør*terminal_beskr_længde;
  9  5990                       for i:= 1 step 1 until 3 do
  9  5991                         operatør_stop(operatør,i):= ia(i+1);
  9  5992                       if -,læsbit_ia(operatørmaske,operatør) then
  9  5993                       begin
 10  5994                         tofrom(opkaldsflag,alle_operatører,op_maske_lgd);
 10  5995                         signal_bin(bs_mobilopkald);
 10  5996                       end;
  9  5997                       k:=modif_fil(tf_stoptabel,operatør,ll);
  9  5998                       if k<>0 then
  9  5999                         fejlreaktion(7,k,<:stopniveau,definer:>,0);
  9  6000                       iaf:= 0;
  9  6001                       for i:= 0 step 1 until 3 do
  9  6002                         fil(ll).iaf(i+1):= operatør_stop(operatør,i);
  9  6003                       setposition(fil(ll),0,0);
  9  6004                       setposition(z_io,0,0);
  9  6005                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  6006                       skriv_kvittering(z_io,0,-1,3);
  9  6007                     end;
  8  6008     
  8  6008                     begin
  9  6009     \f

  9  6009     message procedure io_komm side 29 - 940522/cl;
  9  6010     
  9  6010                       <* 17 stopniveauer,vis *>
  9  6011     
  9  6011                       setposition(z_io,0,0);
  9  6012                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  6013     
  9  6013                       for operatør:= 1 step 1 until max_antal_operatører do
  9  6014                       begin
 10  6015                         iaf:=operatør*terminal_beskr_længde;
 10  6016                         ll:=0;
 10  6017                         ll:=write(z_io,<<dd>,operatør,<:: :>,true,6,
 10  6018                               string bpl_navn(operatør),<:(:>,
 10  6019                               case terminal_tab.iaf.terminal_tilstand shift (-21)
 10  6020                               + 1 of (<:AKTIV:>,<:AKTIV:>,<:AKTIV:>,<:PAUSE:>,
 10  6021                               <:EKSKL:>,<:EKSKL:>,<:EKSKL:>,<:EKSKL:>), <:) :>);
 10  6022                         for i:= 1 step 1 until 3 do
 10  6023                           ll:= ll+write(z_io,if i=1 then "sp" else "/",1,
 10  6024                                   if operatør_stop(operatør,i)=0 then <:ALLE:>
 10  6025                                   else string bpl_navn(operatør_stop(operatør,i)));
 10  6026                         if operatør mod 2 = 1 then
 10  6027                           write(z_io,"sp",40-ll)
 10  6028                         else
 10  6029                           write(z_io,"nl",1);
 10  6030                       end;
  9  6031                       if max_antal_operatører mod 2 <> 0 then write(z_io,"nl",1);
  9  6032                       write(z_io,"*",1);
  9  6033                     end;
  8  6034     
  8  6034                     begin
  9  6035     \f

  9  6035     message procedure io_komm side 30 - 941007/cl;
  9  6036     
  9  6036                       <* 18 alarmlængder *>
  9  6037     
  9  6037                       setposition(z_io,0,0);
  9  6038                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  6039     
  9  6039                       for operatør:= 1 step 1 until max_antal_operatører do
  9  6040                       begin
 10  6041                         ll:=0;
 10  6042                         ll:=write(z_io,<<dd>,operatør,<:: :>,true,6,
 10  6043                               string bpl_navn(operatør));
 10  6044                         iaf:=(operatør-1)*opk_alarm_tab_lgd;
 10  6045                         if opk_alarm.iaf.alarm_lgd < 0 then
 10  6046                           ll:= ll+write(z_io,<:uendelig:>)
 10  6047                         else
 10  6048                           ll:= ll+write(z_io,<<ddddddd>,
 10  6049                                     opk_alarm.iaf.alarm_lgd,<: sek.:>);
 10  6050     
 10  6050                         if operatør mod 2 = 1 then
 10  6051                           write(z_io,"sp",40-ll)
 10  6052                         else
 10  6053                           write(z_io,"nl",1);
 10  6054                       end;
  9  6055                       if max_antal_operatører mod 2 <> 0 then write(z_io,"nl",1);
  9  6056                       write(z_io,"*",1);
  9  6057                     end;
  8  6058     
  8  6058                     begin
  9  6059                       <* 19 CC *>
  9  6060                       integer i, c;
  9  6061     
  9  6061                       i:= 1;
  9  6062                       while læstegn(ia,i+0,c)<>0 and
  9  6063                         i<(op_spool_postlgd-op_spool_text)//2*3
  9  6064                       do skrivtegn(d.opref.data,i,c);
  9  6065                       repeat skrivtegn(d.opref.data,i,0) until (i mod 6)=1;
  9  6066     
  9  6066                       d.opref.retur:= cs_io_komm;
  9  6067                       signalch(cs_op,opref,io_optype or gen_optype);
  9  6068     <*V*>             waitch(cs_io_komm,opref,io_optype,-1);
  9  6069                                                            
  9  6069                       setposition(z_io,0,0);
  9  6070                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  6071                       skriv_kvittering(z_io,opref,-1,d.opref.resultat);
  9  6072                     end;                  
  8  6073                     
  8  6073                     begin
  9  6074                       <* 20: CQF,I CQF,U CQF,V *>
  9  6075                       integer kode, res, i, j;
  9  6076                       integer array field iaf, iaf1;
  9  6077                       long field navn;
  9  6078     
  9  6078                       kode:= d.opref.opkode extract 12;
  9  6079                       navn:= 6; res:= 0;
  9  6080                       if kode=90 <*CQF,I*> then
  9  6081                       begin
 10  6082                         if søg_omr_bus(ia(1),0,0,0,0,0) < 0 then
 10  6083                           res:= 10 <*busnr ukendt*>
 10  6084                         else
 10  6085                         begin
 11  6086                           j:= -1;
 11  6087                           for i:= 1 step 1 until max_cqf do
 11  6088                           begin
 12  6089                             iaf:= (i-1)*cqf_lgd;
 12  6090                             if ia(1) = cqf_tabel.iaf.cqf_bus or
 12  6091                                ia.navn = cqf_tabel.iaf.cqf_id
 12  6092                             then res:= 48; <*i brug*>
 12  6093                             if j<0 and cqf_tabel.iaf.cqf_bus=0 then j:= i;
 12  6094                           end;
 11  6095                           if res=0 and j<0 then res:= 32; <*ingen fri plads*>
 11  6096                           if res=0 then
 11  6097                           begin
 12  6098                             iaf:= (j-1)*cqf_lgd;
 12  6099                             cqf_tabel.iaf.cqf_bus:= ia(1);
 12  6100                             cqf_tabel.iaf.cqf_fejl:= 0;
 12  6101                             cqf_tabel.iaf.cqf_id:= ia.navn;
 12  6102                             cqf_tabel.iaf.cqf_ok_tid:= real <::>;
 12  6103                             cqf_tabel.iaf.cqf_næste_tid:= d.opref.tid + 15*60.0;
 12  6104                             res:= 3;
 12  6105                           end;
 11  6106                         end;
 10  6107                         setposition(z_io,0,0);
 10  6108                         if sluttegn<>'nl' then outchar(z_io,'nl');
 10  6109                         skriv_kvittering(z_io,opref,-1,res);
 10  6110                       end
  9  6111                       else
  9  6112                       if kode=91 <*CQF,U*> then
  9  6113                       begin
 10  6114                         j:= -1;
 10  6115                         for i:= 1 step 1 until max_cqf do
 10  6116                         begin
 11  6117                           iaf:= (i-1)*cqf_lgd;
 11  6118                           if ia(1) = cqf_tabel.iaf.cqf_bus then j:= i;
 11  6119                         end;
 10  6120                         if j>=0 then
 10  6121                         begin
 11  6122                           iaf:= (j-1)*cqf_lgd;
 11  6123                           for i:= 1 step 1 until cqf_lgd//2 do
 11  6124                             cqf_tabel.iaf(i):= 0;
 11  6125                           res:= 3;
 11  6126                         end
 10  6127                         else res:= 13; <*bus ikke indsat*>
 10  6128                         setposition(z_io,0,0);
 10  6129                         if sluttegn<>'nl' then outchar(z_io,'nl');
 10  6130                         skriv_kvittering(z_io,opref,-1,res);
 10  6131                       end
  9  6132                       else
  9  6133                       begin
 10  6134                         setposition(z_io,0,0);
 10  6135                         skriv_cqf_tabel(z_io,false);
 10  6136                         outchar(z_io,'*');
 10  6137                         setposition(z_io,0,0);
 10  6138                       end;               
  9  6139     
  9  6139                       if kode=90 or kode=91 then
  9  6140                       begin
 10  6141                         j:= skrivfil(1033,1,i);
 10  6142                         if j<>0 then
 10  6143                           fejlreaktion(6,j,<:CQF-test cqf-tabel:>,1);
 10  6144                         for k:= 1 step 1 until max_cqf do
 10  6145                         begin
 11  6146                           iaf1:= (k-1)*cqf_lgd;
 11  6147                           iaf := (k-1)*cqf_id;
 11  6148                           tofrom(fil(i).iaf,cqf_tabel.iaf1,cqf_id);
 11  6149                         end;
 10  6150                         op_cqf_tab_ændret:= true;
 10  6151                       end;
  9  6152                     end;<*CQF*>
  8  6153                           
  8  6153     
  8  6153                     begin
  9  6154     \f

  9  6154     message procedure io_komm side xx - 940522/cl;
  9  6155     
  9  6155     
  9  6155     
  9  6155     <*+3*>            fejl_reaktion(3<*programfejl*>,j,<:case 'opkode':>,2);
  9  6156     <*-3*>
  9  6157                     end
  8  6158                   end;<*case j *>
  7  6159                 end <* j > 0 *>
  6  6160                 else
  6  6161                 begin
  7  6162     <*V*>         setposition(z_io,0,0);
  7  6163                   if sluttegn<>'nl' then outchar(z_io,'nl');
  7  6164                   skriv_kvittering(z_io,op_ref,-1,
  7  6165                                    45 <* ikke implementeret *>);
  7  6166                 end;
  6  6167               end;<* godkendt *>
  5  6168     
  5  6168     <*V*>     setposition(z_io,0,0);
  5  6169               signal_bin(bs_zio_adgang);
  5  6170               d.op_ref.retur:=cs_att_pulje;
  5  6171               disable afslut_kommando(op_ref);
  5  6172             end; <* indlæs kommando *>
  4  6173     
  4  6173             begin
  5  6174     \f

  5  6174     message procedure io_komm side xx+1 - 810428/hko;
  5  6175     
  5  6175               <* 2: aktiver efter stop *>
  5  6176               terminal_tab.ref.terminal_tilstand:= 0 shift 21 +
  5  6177                 terminal_tab.ref.terminal_tilstand extract 21;
  5  6178               afslut_operation(op_ref,-1);
  5  6179               signal_bin(bs_zio_adgang);
  5  6180             end;
  4  6181     
  4  6181     <*+3*>  fejl_reaktion(3<*programfejl *>,aktion,<:case aktion:>,2)
  4  6182     <*-3*>
  4  6183           end; <* case aktion+6 *>
  3  6184     
  3  6184          until false;
  3  6185       io_komm_trap:
  3  6186         if -,(alarmcause shift (-24) extract 24 = (-2) and
  3  6187               alarmcause extract 24 = (-13)) then
  3  6188           disable skriv_io_komm(zbillede,1);
  3  6189       end io_komm;
  2  6190     \f

  2  6190     message procedure io_spool side 1 - 810507/hko;
  2  6191     
  2  6191       procedure io_spool;
  2  6192         begin
  3  6193           integer
  3  6194             næste_tomme,nr;
  3  6195           integer array field
  3  6196             op_ref;
  3  6197     
  3  6197           procedure skriv_io_spool(zud,omfang);
  3  6198             value                      omfang;
  3  6199             zone                   zud;
  3  6200             integer                    omfang;
  3  6201             begin
  4  6202               disable write(zud,"nl",1,<:+++ io_spool             :>);
  4  6203               if omfang > 0 then
  4  6204               disable begin integer x;
  5  6205                 trap(slut);
  5  6206                 write(zud,"nl",1,
  5  6207                   <:  opref:     :>,op_ref,"nl",1,
  5  6208                   <:  næstetomme::>,næste_tomme,"nl",1,
  5  6209                   <:  nr         :>,nr,"nl",1,
  5  6210                   <::>);
  5  6211                 skriv_coru(zud,coru_no(102));
  5  6212     slut:
  5  6213               end;<*disable*>
  4  6214             end skriv_io_spool;
  3  6215     
  3  6215           trap(io_spool_trap);
  3  6216           næste_tomme:= 1;
  3  6217           stack_claim((if cm_test then 200 else 146)+24 +48);
  3  6218     <*+2*>
  3  6219           if testbit0 and overvåget or testbit28 then
  3  6220             skriv_io_spool(out,0);
  3  6221     <*-2*>
  3  6222     \f

  3  6222     message procedure io_spool side 2 - 810602/hko;
  3  6223     
  3  6223           repeat
  3  6224     
  3  6224             wait_ch(cs_io_spool,
  3  6225                     op_ref,
  3  6226                     true,
  3  6227                     -1<*timeout*>);
  3  6228     
  3  6228             i:= d.op_ref.opkode;
  3  6229             if i = 22 or i = 23 or i = 36 or i = 45 or i = 46 then
  3  6230             begin
  4  6231               wait(ss_io_spool_tomme);
  4  6232               disable modif_fil(io_spoolfil,næste_tomme,nr);
  4  6233               næste_tomme:= (næste_tomme mod io_spool_postantal) +1;
  4  6234     
  4  6234               i:= d.op_ref.opsize;
  4  6235     <*+4*>    if i > io_spool_postlængde*2 -io_spool_post then
  4  6236               begin
  5  6237     <*          fejlreaktion(3,i,<:postlængde,io spool:>,1);  *>
  5  6238                 i:= io_spool_postlængde*2 -io_spool_post;
  5  6239               end;
  4  6240     <*-4*>
  4  6241               fil(nr,1):= real(extend d.op_ref.opsize shift 24);
  4  6242               tofrom(fil(nr).io_spool_post,d.op_ref,i);
  4  6243               signal(ss_io_spool_fulde);
  4  6244               d.op_ref.resultat:= 1;
  4  6245             end
  3  6246             else
  3  6247             begin
  4  6248               fejlreaktion(2<*operationskode*>,d.op_ref.opkode,
  4  6249                            <:io_spool_korutine:>,1);
  4  6250             end;
  3  6251     
  3  6251             signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  3  6252     
  3  6252           until false;
  3  6253     
  3  6253     io_spool_trap:
  3  6254     
  3  6254           disable skriv_io_spool(zbillede,1);
  3  6255         end io_spool;
  2  6256     \f

  2  6256     message procedure io_spon side 1 - 810507/hko;
  2  6257     
  2  6257       procedure io_spon;
  2  6258         begin
  3  6259           integer
  3  6260             næste_fulde,nr,i,dato,kl;
  3  6261           real t;
  3  6262     
  3  6262           procedure skriv_io_spon(zud,omfang);
  3  6263             value                     omfang;
  3  6264             zone                  zud;
  3  6265             integer                   omfang;
  3  6266             begin
  4  6267               disable write(zud,"nl",1,<:+++ io_spon              :>);
  4  6268               if omfang > 0 then
  4  6269               disable begin integer x;
  5  6270                 trap(slut);
  5  6271                 write(zud,"nl",1,
  5  6272                   <:  næste-fulde::>,næste_fulde,"nl",1,
  5  6273                   <:  nr          :>,nr,"nl",1,
  5  6274                   <::>);
  5  6275                 skriv_coru(zud,coru_no(103));
  5  6276     slut:
  5  6277               end;<*disable*>
  4  6278             end skriv_io_spon;
  3  6279     
  3  6279           trap(io_spon_trap);
  3  6280           næste_fulde:= 1;
  3  6281           stack_claim((if cm_test then 200 else 146) +24 +48);
  3  6282     <*+2*>
  3  6283           if testbit0 and overvåget or testbit28 then
  3  6284             skriv_io_spon(out,0);
  3  6285     <*-2*>
  3  6286     \f

  3  6286     message procedure io_spon side 2 - 810602/hko/cl;
  3  6287     
  3  6287           repeat
  3  6288     
  3  6288     <*V*>   wait(ss_io_spool_fulde);
  3  6289     <*V*>   wait(bs_zio_adgang);
  3  6290     
  3  6290     <*V*>   setposition(zio,0,0);
  3  6291     
  3  6291             disable modif_fil(io_spool_fil,næste_fulde,nr);
  3  6292             næste_fulde:= (næste_fulde mod io_spool_postantal) +1;
  3  6293     
  3  6293             laf:=data;
  3  6294             k:= fil(nr).io_spool_post.opkode;
  3  6295             if k = 22 or k = 36 then
  3  6296             disable begin
  4  6297               write(z_io,"nl",1,if k=22 then <:auto:> else <:spring:>);
  4  6298               if k=36 then
  4  6299               begin
  5  6300                 i:= fil(nr).io_spool_post.data(4);
  5  6301                 j:= i extract 5;
  5  6302                 if j<>0 then j:=j+'A'-1;
  5  6303                 i:= i shift (-5) extract 10;
  5  6304                 write(z_io,"sp",(j=0) extract 1 + 1,<<ddd>,i,false add j,1,".",1,
  5  6305                   true,4,string(extend fil(nr).io_spool_post.data(5) shift 24));
  5  6306               end;
  4  6307               skriv_auto_spring_medd(zio,fil(nr).io_spool_post.data,
  4  6308                                      fil(nr).io_spool_post.tid)
  4  6309             end
  3  6310             else if k = 23 then
  3  6311             disable
  3  6312             begin
  4  6313               write(zio,"nl",1,<:-<'>'>:>,fil(nr).io_spool_post.laf);
  4  6314               dato:= systime(4,fil(nr).io_spool_post.tid,t);
  4  6315               kl:= round t;
  4  6316               i:= replace_char(1<*space in number*>,'.');
  4  6317               write(z_io,"sp",2,<<zd_dd_dd>,dato,<< zd_dd_dd>,kl);
  4  6318               replace_char(1,i);
  4  6319             end
  3  6320             else if k = 45 or k = 46 then
  3  6321             disable begin
  4  6322               integer vogn,linie,bogst,løb,t;
  4  6323     
  4  6323               t:=fil(nr).io_spool_post.data(2);
  4  6324               outchar(z_io,'nl');
  4  6325               if k = 45 then
  4  6326                 write(zio,<<zd.dd>,t/100.0,"sp",1);
  4  6327     
  4  6327               write(zio,<:nødopkald fra :>);
  4  6328               vogn:= fil(nr).io_spool_post.data(1);
  4  6329               i:= vogn shift (-22);
  4  6330               if i < 2 then
  4  6331                 skrivid(zio,vogn,9)
  4  6332               else
  4  6333               begin
  5  6334                 fejlreaktion(3<*programfejl*>,vogn,<:vogn.id, spon.medd:>,1);
  5  6335                 write(zio,<:!!!:>,vogn);
  5  6336               end;
  4  6337     \f

  4  6337     message procedure io_spon side 3 - 810507/hko;
  4  6338     
  4  6338               if fil(nr).io_spool_post.data(3)<>0 then
  4  6339                 write(z_io," ",1,string område_navn(fil(nr).io_spool_post.data(3)));
  4  6340     
  4  6340               if k = 46 then
  4  6341               begin
  5  6342                 write(zio,<: besvaret:>,<< zd.dd>,t/100.0);
  5  6343               end;
  4  6344             end <*disable*>
  3  6345             else
  3  6346               fejlreaktion(2<*operationskode*>,k,<:io_spon_medd:>,1);
  3  6347     
  3  6347             fil(nr,1):= fil(nr,1) add 1;
  3  6348     
  3  6348     <*V*>   setposition(zio,0,0);
  3  6349     
  3  6349             signal_bin(bs_zio_adgang);
  3  6350     
  3  6350             signal(ss_io_spool_tomme);
  3  6351     
  3  6351           until false;
  3  6352     
  3  6352     io_spon_trap:
  3  6353           skriv_io_spon(zbillede,1);
  3  6354     
  3  6354         end io_spon;  
  2  6355     \f

  2  6355     message procedure io_medd side 1;
  2  6356     
  2  6356       procedure io_medd;
  2  6357       begin
  3  6358         integer array field opref;
  3  6359         integer afs, kl, i;
  3  6360         real dato, t;
  3  6361     
  3  6361     
  3  6361           procedure skriv_io_medd(zud,omfang);
  3  6362             value                     omfang;
  3  6363             zone                  zud;
  3  6364             integer                   omfang;
  3  6365             begin
  4  6366               disable write(zud,"nl",1,<:+++ io_medd              :>);
  4  6367               if omfang > 0 then
  4  6368               disable begin integer x;
  5  6369                 trap(slut);
  5  6370                 write(zud,"nl",1,
  5  6371                   <:  opref:    :>,opref,"nl",1,
  5  6372                   <:  afs:      :>,afs,"nl",1,
  5  6373                   <:  kl:       :>,kl,"nl",1,
  5  6374                   <:  i:        :>,i,"nl",1,
  5  6375                   <:  dato:     :>,<<zddddd>,dato,"nl",1,
  5  6376                   <:  t:        :>,t,"nl",1,
  5  6377                   <::>);
  5  6378                 skriv_coru(zud,coru_no(104));
  5  6379     slut:
  5  6380               end;<*disable*>
  4  6381             end skriv_io_medd;
  3  6382     
  3  6382           trap(io_medd_trap);
  3  6383           stack_claim((if cm_test then 200 else 146) +24 +48);
  3  6384     <*+2*>
  3  6385           if testbit0 and overvåget or testbit28 then
  3  6386             skriv_io_medd(out,0);
  3  6387     <*-2*>
  3  6388     \f

  3  6388     message procedure io_medd side 2;
  3  6389     
  3  6389         repeat
  3  6390     <*V*> waitch(cs_io_medd,opref,gen_optype,-1);
  3  6391     <*V*> wait(bs_zio_adgang);
  3  6392     
  3  6392           afs:= d.opref.data.op_spool_kilde;
  3  6393           dato:= systime(4,d.opref.data.op_spool_tid,t);
  3  6394           kl:= round t;
  3  6395           write(z_io,"nl",1,<:! fra op:>,<<d>,afs,"sp",1,
  3  6396             if afs=0 then <:SYSOP:> else string bpl_navn(afs));
  3  6397           i:= replacechar(1,'.');
  3  6398           disable write(z_io,"sp",1,<<zd_dd_dd>,kl,"nl",1);
  3  6399           replacechar(1,i);
  3  6400           write(z_io,d.opref.data.op_spool_text);
  3  6401           setposition(z_io,0,0);
  3  6402     
  3  6402           signalbin(bs_zio_adgang);
  3  6403           signalch((if afs=0 then d.opref.retur else cs_op),opref,d.opref.optype);
  3  6404         until false;
  3  6405     
  3  6405     io_medd_trap:
  3  6406         skriv_io_medd(zbillede,1);
  3  6407     
  3  6407       end io_medd;
  2  6408     
  2  6408       procedure io_nulstil_tællere;
  2  6409       begin
  3  6410         real nu, dato, kl, forr, næste, et_døgn, r;
  3  6411         integer array field opref;
  3  6412         integer ventetid, omr, typ, sum;
  3  6413         integer array ialt(1:5);
  3  6414     
  3  6414           procedure skriv_io_null(zud,omfang);
  3  6415             value                     omfang;
  3  6416             zone                  zud;
  3  6417             integer                   omfang;
  3  6418             begin                            
  4  6419               disable write(zud,"nl",1,<:+++ io_nulstil_tællere   :>);
  4  6420               if omfang > 0 then
  4  6421               disable begin real t; real array field raf;
  5  6422                 raf:=0;
  5  6423                 trap(slut);
  5  6424                 write(zud,"nl",1,
  5  6425                   <:  opref:    :>,opref,"nl",1,
  5  6426                   <:  ventetid: :>,ventetid,"nl",1,
  5  6427                   <:  omr:      :>,omr,"nl",1,
  5  6428                   <:  typ:      :>,typ,"nl",1,
  5  6429                   <:  sum:      :>,sum,"nl",1);
  5  6430                 write(zud,
  5  6431                   <:  nu:      :>,<< zddddd>,systime(4,nu,t),t,"nl",1);
  5  6432                 write(zud,
  5  6433                   <:  forr:    :>,<< zddddd>,systime(4,forr,t),t,"nl",1);
  5  6434                 write(zud,
  5  6435                   <:  næste:   :>,<< zddddd>,systime(4,næste,t),t,"nl",1);
  5  6436                 write(zud,
  5  6437                   <:  r:       :>,<< zddddd>,systime(4,r,t),t,"nl",1,
  5  6438                   <:  dato:    :>,dato,"nl",1,
  5  6439                   <:  kl:      :>,kl,"nl",1,
  5  6440                   <:  et-døgn: :>,<< dddddd>,et_døgn,"nl",1,
  5  6441                   <::>);
  5  6442                 write(zud,"nl",1,<:ialt: :>);
  5  6443                 skriv_hele(zud,ialt.raf,10,2);
  5  6444                 skriv_coru(zud,coru_no(105));
  5  6445     slut:
  5  6446               end;<*disable*>
  4  6447             end skriv_io_null;
  3  6448     
  3  6448           trap(io_null_trap);
  3  6449           et_døgn:= 24*60*60.0;
  3  6450           stack_claim(500);
  3  6451     <*+2*>
  3  6452           if testbit0 and overvåget or testbit28 then
  3  6453             skriv_io_null(out,0);
  3  6454     <*-2*>               
  3  6455           pass;
  3  6456     
  3  6456           systime(1,0.0,nu);
  3  6457           dato:= systime(4,nu,kl);
  3  6458           if nulstil_systællere >= 0 then
  3  6459           begin
  4  6460             if kl>nulstil_systællere then næste:= systid(dato,nulstil_systællere)
  4  6461                                                     + et_døgn
  4  6462                                   else næste:= systid(dato,nulstil_systællere);
  4  6463             forr:= næste - et_døgn;
  4  6464             if (forr - systællere_nulstillet) > et_døgn then
  4  6465               næste:= nu;
  4  6466           end;
  3  6467     
  3  6467           repeat
  3  6468             ventetid:= (if nulstil_systællere < 0 then (-1) else (næste - nu));
  3  6469     <*V*>   waitch(cs_io_nulstil,opref,io_optype,ventetid);
  3  6470     
  3  6470             if opref <= 0 then
  3  6471             begin
  4  6472               <* nulstil opkaldstællere *>
  4  6473               wait(bs_zio_adgang);
  4  6474               setposition(z_io,0,0);
  4  6475     
  4  6475               for typ:= 1 step 1 until 5 do ialt(typ):= 0;
  4  6476       
  4  6476               write(z_io,"nl",1,<:!TÆ,N (automatisk):>,"nl",2,
  4  6477                 <:område  udgående  alm.ind  nød ind:>,
  4  6478                 <: ind-ialt    total   ej forb.  optaget:>,"nl",1);
  4  6479               for omr := 1 step 1 until max_antal_områder do
  4  6480               begin
  5  6481                 sum:= 0;
  5  6482                 write(z_io,true,6,string område_navn(omr),":",1);
  5  6483                 for typ:= 1 step 1 until 3 do
  5  6484                 begin
  6  6485                   write(z_io,<<  ddddddd>,opkalds_tællere((omr-1)*5+typ));
  6  6486                   sum:= sum + opkalds_tællere((omr-1)*5+typ);
  6  6487                   ialt(typ):= ialt(typ)+opkalds_tællere((omr-1)*5+typ);
  6  6488                 end;
  5  6489                 write(z_io,<<  ddddddd>,
  5  6490                   sum-opkalds_tællere((omr-1)*5+1),sum,"sp",2);
  5  6491                 for typ:= 4 step 1 until 5 do
  5  6492                 begin
  6  6493                   write(z_io,<<  ddddddd>,opkalds_tællere((omr-1)*5+typ));
  6  6494                   ialt(typ):= ialt(typ)+opkalds_tællere((omr-1)*5+typ);
  6  6495                 end;
  5  6496                 write(z_io,"nl",1);
  5  6497               end;
  4  6498               sum:= 0;
  4  6499               write(z_io,"nl",1,<:ialt  ::>);
  4  6500               for typ:= 1 step 1 until 3 do
  4  6501               begin
  5  6502                 write(z_io,<<  ddddddd>,ialt(typ));
  5  6503                 sum:= sum+ialt(typ);
  5  6504               end;
  4  6505               write(z_io,<<  ddddddd>,sum-ialt(1),sum,"sp",2,
  4  6506                 ialt(4), ialt(5), "nl",3);
  4  6507     
  4  6507               for typ:= 1 step 1 until 5 do ialt(typ):= 0;
  4  6508               write(z_io,<:oper.   udgående  alm.ind  nød ind:>,
  4  6509                          <: ind-ialt    total   ej forb.  optaget:>,"nl",1);
  4  6510               for omr := 1 step 1 until max_antal_operatører do
  4  6511               begin
  5  6512                 sum:= 0;
  5  6513                 if bpl_navn(omr)=long<::> then
  5  6514                   write(z_io,"sp",6-write(z_io,<:op:>,<<d>,omr),":",1)
  5  6515                 else
  5  6516                   write(z_io,true,6,string bpl_navn(omr),":",1);
  5  6517                 for typ:= 1 step 1 until 3 do
  5  6518                 begin
  6  6519                   write(z_io,<<  ddddddd>,operatør_tællere((omr-1)*5+typ));
  6  6520                   sum:= sum + operatør_tællere((omr-1)*5+typ);
  6  6521                   ialt(typ):= ialt(typ)+operatør_tællere((omr-1)*5+typ);
  6  6522                 end;
  5  6523                 write(z_io,<<  ddddddd>,
  5  6524                   sum-operatør_tællere((omr-1)*5+1),sum,"sp",2);
  5  6525                 for typ:= 4 step 1 until 5 do
  5  6526                 begin
  6  6527                   write(z_io,<<  ddddddd>,operatør_tællere((omr-1)*5+typ));
  6  6528                   ialt(typ):= ialt(typ)+operatør_tællere((omr-1)*5+typ);
  6  6529                 end;
  5  6530                 write(z_io,"nl",1);
  5  6531               end;
  4  6532               sum:= 0;
  4  6533               write(z_io,"nl",1,<:ialt  ::>);
  4  6534               for typ:= 1 step 1 until 3 do
  4  6535               begin
  5  6536                 write(z_io,<<  ddddddd>,ialt(typ));
  5  6537                 sum:= sum+ialt(typ);
  5  6538               end;
  4  6539               write(z_io,<<  ddddddd>,sum-ialt(1),sum,"sp",2,
  4  6540                 ialt(4),ialt(5),"nl",2);
  4  6541     
  4  6541               typ:= replacechar(1,':');
  4  6542               write(z_io,<:tællere nulstilles :>);
  4  6543               if nulstil_systællere=(-1) then
  4  6544                 write(z_io,<:ikke automatisk:>,"nl",1)
  4  6545               else
  4  6546                 write(z_io,<:automatisk kl. :>,<<zd dd dd>,
  4  6547                   nulstil_systællere,"nl",1);
  4  6548               replacechar(1,'.');
  4  6549               write(z_io,<:sidst nulstillet d. :>,<<zd dd dd>,
  4  6550                 systime(4,systællere_nulstillet,r));
  4  6551               replacechar(1,':');
  4  6552               write(z_io,<: kl. :>,<<zd dd dd>,r,"nl",1);
  4  6553               replacechar(1,typ);
  4  6554               write(z_io,"*",1,"nl",1);
  4  6555               setposition(z_io,0,0);
  4  6556               signal_bin(bs_zio_adgang);
  4  6557     
  4  6557               for omr:= 1 step 1 until max_antal_områder*5 do
  4  6558                 opkalds_tællere(omr):= 0;
  4  6559               for omr:= 1 step 1 until max_antal_operatører*5 do
  4  6560                 operatør_tællere(omr):= 0;
  4  6561               systællere_nulstillet:= næste;
  4  6562               opdater_tf_systællere;
  4  6563             end
  3  6564             else
  3  6565               signalch(d.opref.retur,opref,d.opref.optype);
  3  6566     
  3  6566             systime(1,0.0,nu);
  3  6567             dato:= systime(4,nu,kl);
  3  6568             if nulstil_systællere >= 0 then
  3  6569             begin
  4  6570               if kl>nulstil_systællere then næste:= systid(dato,nulstil_systællere)
  4  6571                                                     + et_døgn
  4  6572                                     else næste:= systid(dato,nulstil_systællere);
  4  6573               forr:= næste - et_døgn;
  4  6574             end;
  3  6575           until false;            
  3  6576     
  3  6576     io_null_trap:
  3  6577         skriv_io_null(zbillede,1);
  3  6578       end io_nulstil_tællere;
  2  6579     
  2  6579     \f

  2  6579     message operatør_erklæringer side 1 - 810602/hko;
  2  6580       integer
  2  6581         cs_op,cs_op_retur,cs_talevejsswitch,cs_tvswitch_adgang,cs_tv_switch_adm,
  2  6582         cs_tvswitch_input, cs_op_iomedd, bs_opk_alarm, cs_opk_alarm, cs_cqf,
  2  6583         cs_op_spool, cs_op_medd, ss_op_spool_tomme, ss_op_spool_fulde,
  2  6584         cs_opk_alarm_ur, cs_opk_alarm_ur_ret, sidste_tv_brugt;
  2  6585       integer array
  2  6586         cqf_tabel(1:max_cqf*cqf_lgd//2),
  2  6587         operatørmaske(1:op_maske_lgd//2),
  2  6588         op_talevej(0:max_antal_operatører),
  2  6589         tv_operatør(0:max_antal_taleveje),
  2  6590         opk_alarm(1:max_antal_operatører*(opk_alarm_tab_lgd//2)),
  2  6591         op_spool_buf(1:op_spool_postantal*(op_spool_postlgd//2)),
  2  6592         ant_i_opkø,
  2  6593         cs_operatør,
  2  6594         cs_op_fil(1:max_antal_operatører);
  2  6595       boolean
  2  6596         op_cqf_tab_ændret;
  2  6597       integer field
  2  6598         op_spool_kilde;
  2  6599       real field
  2  6600         op_spool_tid;
  2  6601       long array field
  2  6602         op_spool_text;
  2  6603       zone z_tv_in, z_tv_out(128,1,tvswitch_fejl);
  2  6604       zone array z_op(max_antal_operatører,320,1,op_fejl);
  2  6605     \f

  2  6605     message procedure op_fejl side 1 - 830310/hko;
  2  6606     
  2  6606       procedure op_fejl(z,s,b);
  2  6607         integer            s,b;
  2  6608         zone             z;
  2  6609       begin
  3  6610         disable begin
  4  6611           integer array iz(1:20);
  4  6612           integer i,j,k,n;
  4  6613           integer array field iaf,iaf1,msk;
  4  6614           boolean input;
  4  6615           real array field laf,laf1;
  4  6616     
  4  6616           getzone6(z,iz);
  4  6617           iaf:=laf:=2;
  4  6618           input:= iz(13) = 1;
  4  6619           for laf1:= 0 step 8 until (max_antal_operatører-1)*8 do
  4  6620             if iz.laf(1)=terminal_navn.laf1(1) and
  4  6621                iz.laf(2)=terminal_navn.laf1(2) then j:= laf1//8 + 1;
  4  6622                                                          
  4  6622     <*+2*> if testbit31 then
  4  6623     <**>   begin
  5  6624     <**>     write(out,"nl",1,<:blockprocedure: opfejl, operatørnr::>,j,"nl",1,
  5  6625     <**>       <:s=:>); outintbits(out,s);
  5  6626     <**>     write(out,"nl",1,<:b=:>,b,"sp",1,if input then <:input:>
  5  6627     <**>       else <:output:>,"nl",1);
  5  6628     <**>     setposition(out,0,0);
  5  6629     <**>   end;
  4  6630     <*-2*>
  4  6631           iaf:=j*terminal_beskr_længde;
  4  6632           k:=1;
  4  6633     
  4  6633           i:= terminal_tab.iaf.terminal_tilstand;
  4  6634           if i shift(-21) < 4 and (s <> (1 shift 21 +2)  <*or -,input*>) then
  4  6635             fejlreaktion(17<*ydre enhed status*>,s,string iz.laf(increase(k)),
  4  6636                          1 shift 12 <*binært*> +1 <*fortsæt*>);
  4  6637           if s <> (1 shift 21 +2) then
  4  6638           begin
  5  6639             terminal_tab.iaf.terminal_tilstand:= 1 shift 23
  5  6640               + terminal_tab.iaf.terminal_tilstand extract 23;
  5  6641             tofrom(opkaldsflag,alle_operatører,op_maske_lgd);
  5  6642             sæt_bit_ia(opkaldsflag,j,0);
  5  6643             if sæt_bit_ia(operatørmaske,j,0)=1 then
  5  6644             for k:= j, 65 step 1 until top_bpl_gruppe do
  5  6645             begin
  6  6646               msk:= k*op_maske_lgd;
  6  6647               if læsbit_ia(bpl_def.msk,j) then 
  6  6648     <**>      begin
  7  6649                 n:= 0;
  7  6650                 for i:= 1 step 1 until max_antal_operatører do
  7  6651                 if læsbit_ia(bpl_def.msk,i) then
  7  6652                 begin
  8  6653                   iaf1:= i*terminal_beskr_længde;
  8  6654                   if terminal_tab.iaf1.terminal_tilstand shift (-21) < 3 then
  8  6655                     n:= n+1;
  8  6656                 end;  
  7  6657                 bpl_tilst(j,1):= n;
  7  6658               end;
  6  6659     <**> <*
  6  6660                 bpl_tilst(j,1):= bpl_tilst(j,1)-1;
  6  6661       *>    end;
  5  6662             signal_bin(bs_mobil_opkald);
  5  6663           end;
  4  6664     
  4  6664           if input or -,input then
  4  6665           begin
  5  6666             z(1):=real <:<'?'><'?'><'em'>:>;
  5  6667             b:=2;
  5  6668           end;
  4  6669         end; <*disable*>
  3  6670       end op_fejl;
  2  6671     \f

  2  6671     message procedure tvswitch_fejl side 1 - 940426/cl;
  2  6672     
  2  6672       procedure tvswitch_fejl(z,s,b);
  2  6673         integer                 s,b;
  2  6674         zone                  z;
  2  6675       begin
  3  6676         disable begin
  4  6677           integer array iz(1:20);
  4  6678           integer i,j,k;
  4  6679           integer array field iaf;
  4  6680           boolean input;
  4  6681           real array field raf;
  4  6682     
  4  6682           getzone6(z,iz);
  4  6683           iaf:=raf:=2;
  4  6684           input:= iz(13) = 1;
  4  6685     <*+2*> if testbit31 then
  4  6686     <**>   begin
  5  6687     <**>     write(out,"nl",1,<:blockprocedure: tvswitch:>,"nl",1,
  5  6688     <**>       <:s=:>); outintbits(out,s);
  5  6689     <**>     write(out,"nl",1,<:b=:>,b,"sp",1,if input then <:input:>
  5  6690     <**>       else <:output:>,"nl",1);
  5  6691     <**>     skrivhele(out,z,b,5);
  5  6692     <**>     setposition(out,0,0);
  5  6693     <**>   end;
  4  6694     <*-2*>
  4  6695           k:=1;
  4  6696           if s <> (1 shift 21 +2) then
  4  6697             fejlreaktion(17<*ydre enhed status*>,s,string iz.raf(increase(k)),
  4  6698                          1 shift 12 <*binært*> +1 <*fortsæt*>);
  4  6699     
  4  6699           if input or -,input then
  4  6700           begin
  5  6701             z(1):=real <:<'em'>:>;
  5  6702             b:=2;
  5  6703           end;
  4  6704         end; <*disable*>
  3  6705         if testbit22 and (s <> (1 shift 21 +2)) then delay(60);
  3  6706       end tvswitch_fejl;
  2  6707     
  2  6707     procedure skriv_talevejs_tab(z);
  2  6708       zone z;
  2  6709     begin
  3  6710       write(z,"nl",2,<:talevejsswitch::>);
  3  6711       write(z,"nl",1,<:  operatører::>,"nl",1);
  3  6712       for i:= 1 step 1 until max_antal_operatører do
  3  6713       begin
  4  6714         write(z,<< dd>,i,":",1,op_talevej(i));
  4  6715         if i mod 8=0 then outchar(z,'nl');
  4  6716       end;
  3  6717       write(z,"nl",1,<:  taleveje::>,"nl",1);
  3  6718       for i:= 1 step 1 until max_antal_taleveje do
  3  6719       begin
  4  6720         write(z,<< dd>,i,":",1,tv_operatør(i));
  4  6721         if i mod 8=0 then outchar(z,'nl');
  4  6722       end;
  3  6723       write(z,"nl",3);
  3  6724     end;                                                      
  2  6725     \f

  2  6725     message procedure skriv_opk_alarm_tab side 1;
  2  6726     
  2  6726     procedure skriv_opk_alarm_tab(z);
  2  6727     zone                          z;
  2  6728     begin
  3  6729       integer nr;
  3  6730       integer array field tab;
  3  6731       real t;
  3  6732     
  3  6732       write(z,"nl",2,<:opkaldsalarmtabel::>,"nl",1,
  3  6733         <:operatør    kmdo tilst gl.tilst længde start:>,"nl",1);
  3  6734       for nr:=1 step 1 until max_antal_operatører do
  3  6735       begin
  4  6736         tab:= (nr-1)*opk_alarm_tab_lgd;
  4  6737         write(z,<< dd >,nr,true,6,string bpl_navn(nr),<::   :>,
  4  6738           case opk_alarm.tab.alarm_kmdo+1 of ("-","B","C","F"),1,"sp",5,
  4  6739           case opk_alarm.tab.alarm_tilst+1 of ("-","B","C","?"),1,"sp",8,
  4  6740           case opk_alarm.tab.alarm_gtilst+1 of ("-","B","C","?"),1,"sp",2,
  4  6741           <<-dddd>,opk_alarm.tab.alarm_lgd,"sp",1,
  4  6742           << zddddd>,systime(4,opk_alarm.tab.alarm_start,t),t,
  4  6743           "nl",1);
  4  6744       end;
  3  6745     end;
  2  6746     \f

  2  6746     message procedure skriv_op_spool_buf side 1;
  2  6747     
  2  6747     procedure skriv_op_spool_buf(z);
  2  6748       zone                       z;
  2  6749     begin
  3  6750       integer array field ref;
  3  6751       integer nr, kilde;
  3  6752       real dato, kl; 
  3  6753     
  3  6753       write(z,"nl",2,<:op<'_'>spool<'_'>buffer::>,"nl",1);
  3  6754       for nr:= 1 step 1 until op_spool_postantal do
  3  6755       begin
  4  6756         write(z,"nl",1,<:nr.::>,<< dd>,nr);
  4  6757         ref:= (nr-1)*op_spool_postlgd;
  4  6758         if op_spool_buf.ref.op_spool_tid <> real<::> then
  4  6759         begin
  5  6760           kilde:= op_spool_buf.ref.op_spool_kilde;
  5  6761           dato:= systime(4,op_spool_buf.ref.op_spool_tid,kl);
  5  6762           write(z,<: fra op:>,<<d>,kilde,"sp",1,
  5  6763             if kilde=0 then <:SYSOP:> else string bplnavn(kilde),
  5  6764             "sp",1,<<zddddd.dddddd>,dato+kl/1000000,"nl",1,
  5  6765             op_spool_buf.ref.op_spool_text);
  5  6766         end;
  4  6767         outchar(z,'nl');
  4  6768       end;
  3  6769     end;
  2  6770     
  2  6770     procedure skriv_cqf_tabel(z,lang);
  2  6771       value                     lang;
  2  6772       zone                    z;
  2  6773       boolean                   lang;
  2  6774     begin
  3  6775       integer array field ref;
  3  6776       integer i,ant;
  3  6777       real dato, kl;
  3  6778     
  3  6778       ant:= 0;
  3  6779       write(z,"nl",1,<:CQF testbus-tabel::>,"nl",2,(
  3  6780         if -,lang then
  3  6781         <: tnr. navn  fejl      sidste_ok   tnr. navn  fejl      sidste_ok:>
  3  6782         <* 9900 XXxxx    1  yymmdd.ttmmss   9900 XXxxx    1  yymmdd.ttmmss*>
  3  6783         else
  3  6784         <:nr: tnr. navn  fejl      sidste_ok     næste_test:>),"nl",1);
  3  6785         <*01: 9900 XXxxx    1  yymmdd.ttmmss  yymmdd.hhttmm*>
  3  6786       for i:= 1 step 1 until max_cqf do
  3  6787       begin
  4  6788         ref:= (i-1)*cqf_lgd;
  4  6789         if cqf_tabel.ref.cqf_bus<>0 or lang then
  4  6790         begin
  5  6791           ant:= ant+1;
  5  6792           if lang then
  5  6793             write(z,<<dd>,i,":",1);
  5  6794           write(z,<< dddd>,cqf_tabel.ref.cqf_bus,"sp",1,true,6,
  5  6795             string cqf_tabel.ref.cqf_id,<<dddd>,cqf_tabel.ref.cqf_fejl);
  5  6796           if cqf_tabel.ref.cqf_ok_tid<>real<::> then
  5  6797           begin
  6  6798             dato:= systime(4,cqf_tabel.ref.cqf_ok_tid,kl);
  6  6799             write(z,<<  zddddd.dddddd>,dato+kl/1000000);
  6  6800           end
  5  6801           else
  5  6802             write(z,"sp",14,"?",1);
  5  6803           if lang then
  5  6804           begin
  6  6805             if cqf_tabel.ref.cqf_næste_tid<>real<::> then
  6  6806             begin
  7  6807               dato:= systime(4,cqf_tabel.ref.cqf_næste_tid,kl);
  7  6808               write(z,<<  zddddd.dddddd>,dato+kl/1000000);
  7  6809             end
  6  6810             else
  6  6811               write(z,"sp",14,"?",1);
  6  6812           end
  5  6813           else
  5  6814             write(z,"sp",2);
  5  6815           if lang or (ant mod 2)=0 then outchar(z,'nl');
  5  6816         end;
  4  6817       end;
  3  6818       if -,lang and (ant mod 2)=1 then outchar(z,'nl');
  3  6819     end;
  2  6820     
  2  6820         procedure sorter_cqftab(l,u);
  2  6821           value                 l,u;
  2  6822           integer               l,u;
  2  6823         begin
  3  6824           integer array field ii,jj;
  3  6825           integer array ww,xx(1:(cqf_lgd+1)//2);
  3  6826     
  3  6826           ii:= ((l+u)//2 - 1)*cqf_lgd;
  3  6827           tofrom(xx,cqf_tabel.ii,cqf_lgd);
  3  6828           ii:= (l-1)*cqf_lgd; jj:= (u-1)*cqf_lgd;
  3  6829           repeat
  3  6830             while (cqf_tabel.ii(1) < xx(1)) do ii:= ii+cqf_lgd;
  3  6831             while (xx(1) < cqf_tabel.jj(1)) do jj:= jj-cqf_lgd;
  3  6832             if ii <= jj then
  3  6833             begin
  4  6834               tofrom(ww,cqf_tabel.ii,cqf_lgd);
  4  6835               tofrom(cqf_tabel.ii,cqf_tabel.jj,cqf_lgd);
  4  6836               tofrom(cqf_tabel.jj,ww,cqf_lgd);
  4  6837               ii:= ii+cqf_lgd;
  4  6838               jj:= jj-cqf_lgd;
  4  6839             end;
  3  6840           until ii>jj;
  3  6841           if l < jj//cqf_lgd+1 then sorter_cqftab(l,jj//cqf_lgd+1);
  3  6842           if ii//cqf_lgd+1 < u then sorter_cqftab(ii//cqf_lgd+1,u);
  3  6843         end;
  2  6844     \f

  2  6844     message procedure ht_symbol side 1 - 851001/cl;
  2  6845     
  2  6845     procedure ht_symbol(z);
  2  6846       zone              z;
  2  6847     write(z,"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>,<:
  2  6848     
  2  6848     
  2  6848     
  2  6848     
  2  6848                         @@         @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  2  6848                        @@         @@                               @@
  2  6848                       @@         @@                               @@
  2  6848                      @@         @@                               @@
  2  6848                     @@         @@@@@@@@@@@@@         @@@@@@@@@@@@@
  2  6848                    @@                               @@
  2  6848                   @@                               @@
  2  6848                  @@                               @@
  2  6848                 @@         @@@@@@@@@@@@@         @@
  2  6848                @@         @@         @@         @@
  2  6848               @@         @@         @@         @@
  2  6848              @@         @@         @@         @@
  2  6848             @@@@@@@@@@@@@         @@@@@@@@@@@@@
  2  6848     :>,"esc" add 128,1,<:Æ24;1H:>);
  2  6849     \f

  2  6849     message procedure definer_taster side 1 - 891214,cl;
  2  6850     
  2  6850     procedure definer_taster(nr);
  2  6851       value                  nr;
  2  6852       integer                nr;
  2  6853     begin
  3  6854     
  3  6854       setposition(z_op(nr),0,0);
  3  6855       write(z_op(nr),
  3  6856         "esc" add 128,1, <:P1;2;0ø58/1B4E450D:>,
  3  6857         "esc" add 128,1, <:Ø:>, <* f1    = <esc>NE<cr> *>
  3  6858         "esc" add 128,1, <:P1;2;0ø59/1B4F500D:>,
  3  6859         "esc" add 128,1, <:Ø:>, <* f2    = <esc>OP<cr> *>
  3  6860         "esc" add 128,1, <:P1;2;0ø5A/1B4F502C560D:>,
  3  6861         "esc" add 128,1, <:Ø:>, <* f3    = <esc>OP,V<cr> *>
  3  6862         "esc" add 128,1, <:P1;2;0ø5B/1B4F502C5420:>,
  3  6863         "esc" add 128,1, <:Ø:>, <* f4    = <esc>OP,T<sp> *>
  3  6864         "esc" add 128,1, <:P1;2;0ø5C/1B4F502C4120:>,
  3  6865         "esc" add 128,1, <:Ø:>, <* f5    = <esc>OP,A<sp> *>
  3  6866         "esc" add 128,1, <:P1;2;1ø5C/1B4F502C4120:>,
  3  6867         "esc" add 128,1, <:Ø:>, <* s-f5  = <esc>OP,A<sp> *>
  3  6868         "esc" add 128,1, <:P1;2;0ø5D/1B4D452C4120:>,
  3  6869         "esc" add 128,1, <:Ø:>, <* f6    = <esc>ME,A<sp> *>
  3  6870         "esc" add 128,1, <:P1;2;1ø5D/1B4D452C4120:>,
  3  6871         "esc" add 128,1, <:Ø:>, <* s-f6  = <esc>ME,A<sp> *>
  3  6872         "esc" add 128,1, <:P1;2;0ø5E/1B4F5020:>,
  3  6873         "esc" add 128,1, <:Ø:>, <* f7    = <esc>OP<sp>   *>
  3  6874         "esc" add 128,1, <:P1;2;0ø5F/1B56450D:>,
  3  6875         "esc" add 128,1, <:Ø:>, <* f8    = <esc>VE<cr>   *>
  3  6876         "esc" add 128,1, <:P1;2;0ø60/1B4D4F20:>,
  3  6877         "esc" add 128,1, <:Ø:>, <* f9    = <esc>MO<sp>   *>
  3  6878         "esc" add 128,1, <:P1;2;1ø60/1B520D:>,
  3  6879         "esc" add 128,1, <:Ø:>, <* s-f9  = <esc>R<cr>    *>
  3  6880         "esc" add 128,1, <:P1;2;0ø61/1B53540D:>,
  3  6881         "esc" add 128,1, <:Ø:>, <* f10   = <esc>ST<cr>   *>
  3  6882         "esc" add 128,1, <:P1;2;0ø62/1B474520:>,
  3  6883         "esc" add 128,1, <:Ø:>, <* f11  = <esc>GE<sp> *>
  3  6884         "esc" add 128,1, <:P1;2;1ø62/1B47452C4720:>,
  3  6885         "esc" add 128,1, <:Ø:>, <* s-f11  = <esc>GE,G<sp> *>
  3  6886         "esc" add 128,1, <:P1;2;0ø63/1B47452C560D:>,
  3  6887         "esc" add 128,1, <:Ø:>, <* f12  = <esc>GE,V<cr> *>
  3  6888         "esc" add 128,1, <:P1;2;1ø63/1B47452C540D:>,
  3  6889         "esc" add 128,1, <:Ø:>, <* s-f12  = <esc>GE,T<sp> *>
  3  6890         "esc" add 128,1, <:P1;2;0ø7B/1B564F2C4920:>,
  3  6891         "esc" add 128,1, <:Ø:>, <* Ins   = <esc>VO,I<sp> *>
  3  6892         "esc" add 128,1, <:P1;2;0ø79/1B564F2C5520:>,
  3  6893         "esc" add 128,1, <:Ø:>, <* Del   = <esc>VO,U<sp> *>
  3  6894         "esc" add 128,1, <:P1;2;0ø7F/1B564F2C4620:>,
  3  6895         "esc" add 128,1, <:Ø:>, <* Home  = <esc>VO,F<sp> *>
  3  6896         "esc" add 128,1, <:P1;2;0ø7A/1B564F2C5220:>,
  3  6897         "esc" add 128,1, <:Ø:>, <* End   = <esc>VO,R<sp> *>
  3  6898         "esc" add 128,1, <:P1;2;0ø6F/1B564F2C4C20:>,
  3  6899         "esc" add 128,1, <:Ø:>, <* PgUp  = <esc>VO,L<sp> *>
  3  6900         "esc" add 128,1, <:P1;2;0ø7E/1B564F2C4220:>,
  3  6901         "esc" add 128,1, <:Ø:>, <* PgDn  = <esc>VO,B<sp> *>
  3  6902         "esc" add 128,1, <:P1;2;0ø0E/082008:>,
  3  6903         "esc" add 128,1, <:Ø:>, <* Back  = <bs><sp><bs> *>
  3  6904         <::>);
  3  6905       end;
  2  6906     \f

  2  6906     message procedure skriv_terminal_tab side 1 - 820301/hko;
  2  6907     
  2  6907       procedure skriv_terminal_tab(z);
  2  6908         zone                       z;
  2  6909         begin
  3  6910           integer array field ref;
  3  6911           integer t1,i,j,id,k;
  3  6912     
  3  6912           write(z,"ff",1,<:
  3  6913           ******* terminalbeskrivelser ********
  3  6914     
  3  6914                         # a k l p m m n o
  3  6915                         1 l a y a o o ø p
  3  6916     nr tilst   -  vnt R 0 l t t s n b d t type ident    id i kø:>);
  3  6917     <*
  3  6918     01   15 .... .... X X X X X X X X X X MEDD 9999.abc 888B/77
  3  6919     *>
  3  6920           for i:=1 step 1 until max_antal_operatører do
  3  6921           begin
  4  6922             ref:=i*terminal_beskr_længde;
  4  6923             t1:=terminal_tab.ref(1);
  4  6924             id:=terminal_tab.ref(2);
  4  6925             k:=terminal_tab.ref(3);
  4  6926             write(z,"nl",1,"sp",4,<<dd>,i,<< dddd>,t1 shift(-21),
  4  6927               t1 shift(-16) extract 5,t1 shift(-12) extract 4,
  4  6928               "sp",1);
  4  6929             for j:=11 step -1 until 2 do
  4  6930               write(z,if læs_bit_i(t1,j) then "X" else "sp",1,"sp",1);
  4  6931             write(z,case t1 extract 2 +1 of (<:-   :>,<:OPK :>,<:MEDD:>,<:GNM :>),
  4  6932               "sp",1);
  4  6933             skriv_id(z,id,9);
  4  6934             skriv_id(z,k,9);
  4  6935           end;
  3  6936           write(z,"nl",2,<:samtaleflag::>,"nl",1);
  3  6937           outintbits_ia(z,samtaleflag,1,op_maske_lgd//2);
  3  6938           write(z,"nl",1);
  3  6939         end skriv_terminal_tab;
  2  6940     \f

  2  6940     message procedure h_operatør side 1 - 810520/hko;
  2  6941     
  2  6941       <* hovedmodulkorutine for operatørterminaler *>
  2  6942       procedure h_operatør;
  2  6943       begin
  3  6944         integer array field op_ref;
  3  6945         integer k,nr,ant,ref,dest_sem;
  3  6946         procedure skriv_hoperatør(zud,omfang);
  3  6947           value                     omfang;
  3  6948           zone                  zud;
  3  6949           integer                   omfang;
  3  6950           begin
  4  6951     
  4  6951             write(zud,"nl",1,<:+++ hovedmodul operatør  :>);
  4  6952             if omfang>0 then
  4  6953             disable begin integer x;
  5  6954               trap(slut);
  5  6955               write(zud,"nl",1,
  5  6956                 <:  op_ref:    :>,op_ref,"nl",1,
  5  6957                 <:  nr:        :>,nr,"nl",1,
  5  6958                 <:  ant:       :>,ant,"nl",1,
  5  6959                 <:  ref:       :>,ref,"nl",1,
  5  6960                 <:  k:         :>,k,"nl",1,
  5  6961                 <:  dest_sem:  :>,dest_sem,"nl",1,
  5  6962                 <::>);
  5  6963               skriv_coru(zud,coru_no(200));
  5  6964     slut:
  5  6965             end;
  4  6966          end skriv_hoperatør;
  3  6967     
  3  6967       trap(hop_trap);
  3  6968       stack_claim(if cm_test then 198 else 146);
  3  6969     
  3  6969     <*+2*>
  3  6970       if testbit8 and overvåget or testbit28 then
  3  6971         skriv_hoperatør(out,0);
  3  6972     <*-2*>
  3  6973     \f

  3  6973     message procedure h_operatør side 2 - 820304/hko;
  3  6974     
  3  6974       repeat
  3  6975         wait_ch(cs_op,op_ref,true,-1);
  3  6976     <*+4*>
  3  6977         if (d.op_ref.optype and (op_optype or gen_optype)) extract 12 =0
  3  6978         then fejlreaktion(12<*operationstype*>,op_ref,<:operatør:>,1);
  3  6979     <*-4*>
  3  6980     
  3  6980         k:=d.op_ref.opkode extract 12;
  3  6981         dest_sem:=
  3  6982           if k=0 and d.opref.kilde=299 then cs_talevejsswitch else
  3  6983           if k=0 then cs_operatør(d.op_ref.kilde mod 100) else
  3  6984           if k=1 or k=2 or k=43 then cs_operatør(d.op_ref.data(1)) else
  3  6985           if k=4 then cs_operatør(d.op_ref.data(2)) else
  3  6986           if k=37 then cs_op_spool else
  3  6987           if k=40 or k=38 then 0
  3  6988           else -1;
  3  6989     <*+4*>
  3  6990         if dest_sem=-1 then
  3  6991         begin
  4  6992           fejl_reaktion(2<*operationskode*>,k,<:hovedmodul operatør:>,1);
  4  6993           signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  4  6994         end
  3  6995         else
  3  6996     <*-4*>
  3  6997         if k=40 then
  3  6998         begin
  4  6999           dest_sem:= d.op_ref.retur;
  4  7000           d.op_ref.retur:= cs_op_retur;
  4  7001           for nr:= 1 step 1 until max_antal_operatører do
  4  7002           begin
  5  7003             inspect_ch(cs_operatør(nr),genoptype,ant);
  5  7004             if ant < 0 and (læsbit_ia(opkaldsflag,nr) or læsbit_ia(kanalflag,nr)
  5  7005                             or læsbit_ia(samtaleflag,nr)) 
  5  7006                        and læsbit_ia(operatørmaske,nr) then
  5  7007             begin
  6  7008               ref:= op_ref;
  6  7009               signal_ch(cs_operatør(nr),opref,d.op_ref.optype);
  6  7010     <*V*>     wait_ch(cs_op_retur,op_ref,true,-1);
  6  7011     <*+4*>    if op_ref <> ref then
  6  7012                 fejlreaktion(11<*fr.post*>,op_ref,
  6  7013                   <:opdater opkaldskø,retur:>,0);
  6  7014     <*-4*>
  6  7015             end;
  5  7016           end;
  4  7017           d.op_ref.retur:= dest_sem;
  4  7018           signal_ch(dest_sem,op_ref,d.op_ref.optype);
  4  7019         end
  3  7020         else
  3  7021         if k=38 then
  3  7022         begin
  4  7023           dest_sem:= d.opref.retur;
  4  7024           d.op_ref.retur:= cs_op_retur;
  4  7025           for nr:= 1 step 1 until max_antal_operatører do
  4  7026           begin
  5  7027             if d.opref.data.op_spool_kilde <> nr then
  5  7028             begin
  6  7029               ref:= op_ref;
  6  7030               signal_ch(cs_operatør(nr),opref,d.op_ref.optype);
  6  7031     <*V*>     wait_ch(cs_op_retur,op_ref,true,-1);
  6  7032     <*+4*>    if op_ref <> ref then
  6  7033                 fejlreaktion(11<*fr.post*>,op_ref,
  6  7034                   <:opdater opkaldskø,retur:>,0);
  6  7035     <*-4*>
  6  7036             end;
  5  7037           end;
  4  7038           if d.opref.data.op_spool_kilde<>0 then
  4  7039           begin
  5  7040             ref:= op_ref;
  5  7041             nr:= d.opref.data.op_spool_kilde;
  5  7042             signal_ch(cs_operatør(nr),opref,d.op_ref.optype);
  5  7043     <*V*>   wait_ch(cs_op_retur,op_ref,true,-1);
  5  7044     <*+4*>  if op_ref <> ref then
  5  7045               fejlreaktion(11<*fr.post*>,op_ref,
  5  7046                 <:operatørmedddelelse, retur:>,0);
  5  7047     <*-4*>
  5  7048             d.op_ref.retur:= dest_sem;
  5  7049             signal_ch(dest_sem,op_ref,d.op_ref.optype);
  5  7050           end
  4  7051           else
  4  7052           begin
  5  7053             d.op_ref.retur:= dest_sem;
  5  7054             signal_ch(cs_io,op_ref,d.op_ref.optype);
  5  7055           end;
  4  7056         end
  3  7057         else
  3  7058         begin
  4  7059     \f

  4  7059     message procedure h_operatør side 3 - 810601/hko;
  4  7060     
  4  7060           if k=8<*ekskluder*> then <*afbryd kommando v. timeout*>
  4  7061           begin
  5  7062             iaf:=d.op_ref.data(1)*terminal_beskr_længde;
  5  7063             terminal_tab.iaf.terminal_tilstand:= 7 shift 21
  5  7064               +terminal_tab.iaf.terminal_tilstand extract 21;
  5  7065           end;
  4  7066           signal_ch(dest_sem,op_ref,d.op_ref.optype);
  4  7067         end;
  3  7068       until false;
  3  7069     
  3  7069     hop_trap:
  3  7070       disable skriv_hoperatør(zbillede,1);
  3  7071       end h_operatør;
  2  7072     \f

  2  7072     message procedure operatør side 1 - 820304/hko;
  2  7073     
  2  7073       procedure operatør(nr);
  2  7074         value          nr;
  2  7075         integer        nr;
  2  7076       begin
  3  7077         integer array field op_ref,ref,vt_op,iaf,tab;
  3  7078         integer i,kode,aktion,status,tilstand,bv,bs,bs_tilst,
  3  7079                 kanal,opgave,pos,indeks,sep,sluttegn,rkom, par1, par2,
  3  7080                 vogn,ll,garage,skærmmåde,res,s_kanal,v_kanal;
  3  7081         real kommstart,kommslut;
  3  7082     \f

  3  7082     message procedure operatør side 1a - 820301/hko;
  3  7083     
  3  7083         procedure skriv_operatør(zud,omfang);
  3  7084           value                      omfang;
  3  7085           zone                   zud;
  3  7086           integer                    omfang;
  3  7087           begin integer i;
  4  7088     
  4  7088             i:= write(zud,"nl",1,<:+++ operatør nr::>,nr);
  4  7089             write(zud,"sp",26-i);
  4  7090             if omfang > 0 then
  4  7091             disable begin
  5  7092               integer x;
  5  7093               trap(slut);
  5  7094               write(zud,"nl",1,
  5  7095                 <:  op-ref:    :>,op_ref,"nl",1,
  5  7096                 <:  kode:      :>,kode,"nl",1,
  5  7097                 <:  aktion:    :>,aktion,"nl",1,
  5  7098                 <:  ref:       :>,ref,"nl",1,
  5  7099                 <:  vt_op:     :>,vt_op,"nl",1,
  5  7100                 <:  iaf:       :>,iaf,"nl",1,
  5  7101                 <:  status:    :>,status,"nl",1,
  5  7102                 <:  tilstand:  :>,tilstand,"nl",1,
  5  7103                 <:  bv:        :>,bv,"nl",1,
  5  7104                 <:  bs:        :>,bs,"nl",1,
  5  7105                 <:  bs-tilst:  :>,bs_tilst,"nl",1,
  5  7106                 <:  kanal:     :>,kanal,"nl",1,
  5  7107                 <:  opgave:    :>,opgave,"nl",1,
  5  7108                 <:  pos:       :>,pos,"nl",1,
  5  7109                 <:  indeks:    :>,indeks,"nl",1,
  5  7110                 <:  sep:       :>,sep,"nl",1,
  5  7111                 <:  sluttegn:  :>,sluttegn,"nl",1,
  5  7112                 <:  vogn:      :>,vogn,"nl",1,
  5  7113                 <:  ll:        :>,ll,"nl",1,
  5  7114                 <:  garage:    :>,garage,"nl",1,
  5  7115                 <:  skærmmåde: :>,skærmmåde,"nl",1,
  5  7116                 <:  res:       :>,res,"nl",1,
  5  7117                 <:  tab:       :>,tab,"nl",1,
  5  7118                 <:  rkom:      :>,rkom,"nl",1,
  5  7119                 <:  par1:      :>,par1,"nl",1,
  5  7120                 <:  par2:      :>,par2,"nl",1,
  5  7121                 <::>);
  5  7122               skriv_coru(zud,coru_no(200+nr));
  5  7123     slut:
  5  7124             end;
  4  7125           end skriv_operatør;
  3  7126     \f

  3  7126     message procedure skærmstatus side 1 - 810518/hko;
  3  7127     
  3  7127       integer
  3  7128       procedure skærmstatus(tilstand,b_v,b_s,b_s_tilst);
  3  7129         integer             tilstand,b_v,b_s,b_s_tilst;
  3  7130         begin
  4  7131           integer i,j;
  4  7132     
  4  7132           i:= terminal_tab.ref(1);
  4  7133           b_s:= terminal_tab.ref(2);
  4  7134           b_s_tilst:= i extract 12;
  4  7135           j:= b_s_tilst extract 3;
  4  7136           b_v:= i shift (-12) extract 4;
  4  7137           tilstand:= i shift (-21);
  4  7138     
  4  7138           skærmstatus:= if b_v = 0 and b_s = 0 then 0 else
  4  7139                         if b_v = 0 and j = 1<*opkald*> then 1 else
  4  7140                         if b_v = 0 and j = 2<*specialopkald*>  then 2 else
  4  7141                         if (bv<>0) and (bs<>0) and (j=3) then 4 else 3;
  4  7142         end skærmstatus;
  3  7143     \f

  3  7143     message procedure skriv_skærm side 1 - 810522/hko;
  3  7144     
  3  7144       procedure skriv_skærm(nr);
  3  7145         value               nr;
  3  7146         integer             nr;
  3  7147         begin
  4  7148           integer i;
  4  7149     
  4  7149           disable definer_taster(nr);
  4  7150     
  4  7150           skriv_skærm_maske(nr);
  4  7151           skriv_skærm_opkaldskø(nr);
  4  7152           skriv_skærm_b_v_s(nr);
  4  7153           for i:= 1 step 1 until max_antal_kanaler do
  4  7154             skriv_skærm_kanal(nr,i);
  4  7155           cursor(z_op(nr),1,1);
  4  7156     <*V*> setposition(z_op(nr),0,0);
  4  7157         end skriv_skærm;
  3  7158     \f

  3  7158     message procedure skriv_skærm_id side 1 - 830310/hko;
  3  7159     
  3  7159       procedure skriv_skærm_id(nr,id,nød);
  3  7160         value                  nr,id,nød;
  3  7161         integer                nr,id;
  3  7162         boolean                      nød;
  3  7163         begin
  4  7164           integer linie,løb,bogst,i,p;
  4  7165     
  4  7165           i:= id shift (-22);
  4  7166     
  4  7166           case i+1 of
  4  7167           begin
  5  7168             begin <* busnr *>
  6  7169               p:= write(z_op(nr),if nød then "*" else "sp",1,<<bddd>,
  6  7170                     (id extract 14) mod 10000);
  6  7171               if id shift (-14) extract 8 > 0 then
  6  7172                 p:= p+write(z_op(nr),".",1,
  6  7173                     string bpl_navn(id shift (-14) extract 8));
  6  7174               write(z_op(nr),"sp",11-p);
  6  7175             end;
  5  7176     
  5  7176             begin <*linie/løb*>
  6  7177               linie:= id shift (-12) extract 10;
  6  7178               bogst:= id shift (-7) extract 5;
  6  7179               if bogst > 0 then bogst:= bogst +'A'-1;
  6  7180               løb:= id extract 7;
  6  7181               write(z_op(nr),if nød then "*" else "sp",1,
  6  7182                 "sp",if bogst=0 then 1 else 0,<<ddd>,linie,<<d>,
  6  7183                 false add bogst,1,"/",1,løb,
  6  7184                 "sp",if løb > 9 then 3 else 4);
  6  7185             end;
  5  7186     
  5  7186             begin <*gruppe*>
  6  7187               write(z_op(nr),<:GRP  :>);
  6  7188               if id shift (-21) extract 1 = 1 then
  6  7189               begin <*specialgruppe*>
  7  7190                 løb:= id extract 7;
  7  7191                 write(z_op(nr),"sp",if løb > 9 then 1 else 2,<:G:>,
  7  7192                   <<d>,løb,"sp",2);
  7  7193               end
  6  7194               else
  6  7195               begin
  7  7196                 linie:= id shift (-5) extract 10;
  7  7197                 bogst:= id extract 5;
  7  7198                 if bogst > 0 then bogst:= bogst +'A'-1;
  7  7199                 write(z_op(nr),"sp",if bogst > 0 then 1 else 0,<<ddd>,linie,
  7  7200                   false add bogst,1,"sp",2);
  7  7201               end;
  6  7202             end;
  5  7203     
  5  7203             <* kanal eller område *>
  5  7204             begin
  6  7205               linie:= (id shift (-20) extract 2) + 1;
  6  7206               case linie of
  6  7207               begin
  7  7208                 write(z_op(nr),"sp",11-write(z_op(nr),
  7  7209                   string kanal_navn(id extract 20)));
  7  7210                 write(z_op(nr),<:K*:>,"sp",9);
  7  7211                 write(z_op(nr),"sp",11-write(z_op(nr),
  7  7212                   <:OMR :>,string område_navn(id extract 20)));
  7  7213                 write(z_op(nr),<:ALLE:>,"sp",7);
  7  7214               end;
  6  7215             end;
  5  7216     
  5  7216           end <* case i *>
  4  7217         end skriv_skærm_id;
  3  7218     \f

  3  7218     message procedure skriv_skærm_kanal side 1 - 820301/hko;
  3  7219     
  3  7219       procedure skriv_skærm_kanal(nr,kanal);
  3  7220         value                     nr,kanal;
  3  7221         integer                   nr,kanal;
  3  7222         begin
  4  7223           integer i,j,k,t,omr;
  4  7224           integer array field tref,kref;
  4  7225           boolean nød;
  4  7226     
  4  7226           tref:= nr*terminal_beskr_længde;
  4  7227           kref:= (kanal-1)*kanal_beskr_længde;
  4  7228           t:= kanaltab.kref.kanal_tilstand;
  4  7229           j:= terminal_tab.tref(1) shift (-12) extract 4; <* b_v kanalnr *>
  4  7230           k:= terminal_tab.tref(2); <* 3 shift 22 +kanal, hvis samtale *>
  4  7231           cursor(z_op(nr),kanal+2,28);
  4  7232           write(z_op(nr),if læsbit_i(kanaltab.kref.kanal_tilstand,10) then "*" else
  4  7233                          if læsbit_i(kanaltab.kref.kanal_tilstand,11) then "+" else
  4  7234                          " ",1," ",1);
  4  7235           write(z_op(nr),true,6,string kanal_navn(kanal));
  4  7236           omr:= if kanal_id(kanal) shift (-5) extract 3 = 2 then
  4  7237                   pabx_id(kanal_id(kanal) extract 5)
  4  7238                 else
  4  7239                   radio_id(kanal_id(kanal) extract 5);
  4  7240           for i:= -2 step 1 until 0 do
  4  7241           begin
  5  7242             write(z_op(nr),
  5  7243               if område_id(omr,1) shift (8*i) extract 8 = 0 then " "
  5  7244               else false add (område_id(omr,1) shift (8*i) extract 8),1);
  5  7245           end;
  4  7246           write(z_op(nr),<:: :>);
  4  7247           i:= tv_operatør(kanaltab.kref.kanal_tilstand shift (-16));<*operatør*>
  4  7248           if læsbit_ia(kanaltab.kref.kanal_alarm, nr) then
  4  7249           begin
  5  7250             sætbit_ia(kanaltab.kref.kanal_alarm, nr, 0);
  5  7251             <* write(z_op(nr),<:ALARM !:>,"bel",1); *>
  5  7252           end
  4  7253           else
  4  7254           if kanaltab.kref.kanal_tilstand shift (-12) extract 4 = 15 then
  4  7255             write(z_op(nr),<:-:><*UDE AF DRIFT*>)
  4  7256           else
  4  7257           if i > 0 and 
  4  7258               ( true <* i <> nr *> <* OPT også ud på egen skærm 960527/CL *> or
  4  7259                  j = kanal <* kanal = kanalnr for ventepos *> or
  4  7260                  (terminal_tab.tref.terminal_tilstand shift (-21) = 1
  4  7261                   <*tilst=samtale*> and k extract 22 = kanal) ) then
  4  7262           begin
  5  7263              write(z_op(nr),<:OPT :>);
  5  7264              if bpl_navn(i)=long<::> then write(z_op(nr),<:op:>,<<d>,i)
  5  7265              else write(z_op(nr),string bpl_navn(i));
  5  7266           end
  4  7267           else
  4  7268           if false then
  4  7269           begin
  5  7270             i:= kanaltab.kref.kanal_id1;
  5  7271             nød:= læsbit_i(kanaltab.kref.kanal_tilstand,3);
  5  7272             skriv_skærm_id(nr,i,nød);
  5  7273             write(z_op(nr),if t extract 2 = 3 then <:GNM :> else <:OPKALDT:>);
  5  7274             i:= kanaltab.kref.kanal_id2;
  5  7275             if i<>0 then skriv_skærm_id(nr,i,false);
  5  7276           end;
  4  7277           write(z_op(nr),"esc" add 128,1,<:ÆK:>);
  4  7278         end skriv_skærm_kanal;
  3  7279     \f

  3  7279     message procedure skriv_skærm_b_v_s side 1 - 810601/hko;
  3  7280     
  3  7280       procedure skriv_skærm_b_v_s(nr);
  3  7281         value                     nr;
  3  7282         integer                   nr;
  3  7283         begin
  4  7284           integer i,j,k,kv,ks,t;
  4  7285           integer array field tref,kref;
  4  7286     
  4  7286           tref:= nr*terminal_beskr_længde;
  4  7287           i:= terminal_tab.tref.terminal_tilstand;
  4  7288           kv:= i shift (-12) extract 4;
  4  7289           ks:= terminaltab.tref(2) extract 20;
  4  7290     <*V*> setposition(z_op(nr),0,0);
  4  7291           cursor(z_op(nr),18,28);
  4  7292           write(z_op(nr),"esc" add 128,1,<:ÆK:>);
  4  7293           cursor(z_op(nr),20,28);
  4  7294           write(z_op(nr),"esc" add 128,1,<:ÆK:>);
  4  7295           cursor(z_op(nr),21,28);
  4  7296           write(z_op(nr),"esc" add 128,1,<:ÆK:>);
  4  7297           cursor(z_op(nr),20,28);
  4  7298           if op_talevej(nr)<>0 then
  4  7299           begin
  5  7300             cursor(z_op(nr),18,28);
  5  7301             write(z_op(nr),<:talevej: :>,<<d>,op_talevej(nr));
  5  7302           end;
  4  7303           if kv <> 0 then
  4  7304           begin
  5  7305             kref:= (kv-1)*kanal_beskr_længde;
  5  7306             j:= if kv<>ks then kanaltab.kref.kanal_id1
  5  7307                 else kanaltab.kref.kanal_id2;
  5  7308             k:= if kv<>ks then kanaltab.kref.kanal_alt_id1
  5  7309                 else kanaltab.kref.kanal_alt_id2;
  5  7310             write(z_op(nr),true,6,string kanal_navn(kv));
  5  7311             skriv_skærm_id(nr,j,kanaltab.kref.kanaltilstand shift(-3) extract 1=1);
  5  7312             skriv_skærm_id(nr,k,false);
  5  7313             write(z_op(nr),if i extract 2 = 3 then <:GNM:> else <:VNT:>);
  5  7314           end;
  4  7315     
  4  7315           cursor(z_op(nr),21,28);
  4  7316           j:= terminal_tab.tref(2);
  4  7317           if i shift (-21) <> 0 <*ikke ledig*> then
  4  7318           begin
  5  7319     \f

  5  7319     message procedure skriv_skærm_b_v_s side 2 - 841210/cl;
  5  7320     
  5  7320             if i shift (-21) = 1 <*samtale*> then
  5  7321             begin
  6  7322               if j shift (-20) = 12 then
  6  7323               begin
  7  7324                 write(z_op(nr),true,6,string kanal_navn(ks));
  7  7325               end
  6  7326               else
  6  7327               begin
  7  7328                 write(z_op(nr),true,6,<:K*:>);
  7  7329                 k:= 0;
  7  7330                 while ks shift (-k) extract 1 = 0 and k<max_antal_kanaler do
  7  7331                   k:= k+1;
  7  7332                 ks:= k;
  7  7333               end;
  6  7334               kref:= (ks-1)*kanal_beskr_længde;
  6  7335               t:= kanaltab.kref.kanaltilstand;
  6  7336               skriv_skærm_id(nr,kanaltab.kref.kanal_id1,
  6  7337                              t shift (-3) extract 1 = 1);
  6  7338               skriv_skærm_id(nr,kanaltab.kref.kanal_alt_id1,false);
  6  7339               write(z_op(nr),if i shift (-11) extract 1 = 1 then <:-P-:> else
  6  7340                 if t shift (-5) extract 1 = 1 then <:MON :> else
  6  7341                 if t shift (-4) extract 1 = 1 then <:BSV :> else
  6  7342                 if t shift (-6) extract 1 = 1 then <:PAS :> else
  6  7343                 if t shift (-7) extract 1 = 1 then <:LYT :> else <:TAL :>);
  6  7344               if t shift (-9) extract 1 = 1 then
  6  7345                 write(z_op(nr),<:ALLE :>);
  6  7346               if t shift (-8) extract 1 = 1 then
  6  7347                 write(z_op(nr),<:KATASTROFE :>);
  6  7348               k:= kanaltab.kref.kanal_spec;
  6  7349               if t extract 2 <> 3 and t shift (-4) extract 1 = 1 then
  6  7350                 write(z_op(nr),<<zd.dd>,(k extract 12)/100);
  6  7351             end
  5  7352             else <* if i shift (-21) = 2 <+optaget+> then *>
  5  7353             begin
  6  7354               write(z_op(nr),<:K-:>,"sp",3);
  6  7355               if j <> 0 then
  6  7356                 skriv_skærm_id(nr,j,false)
  6  7357               else
  6  7358               begin
  7  7359                 j:=terminal_tab.tref(3);
  7  7360                 skriv_skærm_id(nr,j,
  7  7361                   false add (if i shift(-4) extract 1 = 1 then 2 <* mobil opk. *>
  7  7362                                                          else 0));
  7  7363               end;
  6  7364               write(z_op(nr),<:OPT:>);
  6  7365             end;
  5  7366           end;
  4  7367     <*V*> setposition(z_op(nr),0,0);
  4  7368         end skriv_skærm_b_v_s;
  3  7369     \f

  3  7369     message procedure skriv_skærm_maske side 1 - 810511/hko;
  3  7370     
  3  7370       procedure skriv_skærm_maske(nr);
  3  7371         value                     nr;
  3  7372         integer                   nr;
  3  7373         begin
  4  7374           integer i;
  4  7375     <*V*> setposition(z_op(nr),0,0);
  4  7376           write(z_op(nr),"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>,
  4  7377            "sp",26,"*",5,<: operatør :>,<<d>,nr,"sp",1,string bpl_navn(nr),
  4  7378            "sp",1,"*",5,"nl",1,"-",80);
  4  7379     
  4  7379           for i:= 3 step 1 until 21 do
  4  7380           begin
  5  7381             cursor(z_op(nr),i,26);
  5  7382             outchar(z_op(nr),'!');
  5  7383           end;
  4  7384           cursor(z_op(nr),22,1);
  4  7385           write(z_op(nr),"-",80);
  4  7386           cursor(z_op(nr),1,1);
  4  7387     <*V*> setposition(z_op(nr),0,0);
  4  7388         end skriv_skærm_maske;
  3  7389     \f

  3  7389     message procedure skal_udskrives side 1 - 940522/cl;
  3  7390     
  3  7390     boolean procedure skal_udskrives(fordelt_til,aktuel_skærm);
  3  7391       value                          fordelt_til,aktuel_skærm;
  3  7392       integer                        fordelt_til,aktuel_skærm;
  3  7393     begin
  4  7394       boolean skal_ud;
  4  7395       integer n;
  4  7396       integer array field iaf;
  4  7397     
  4  7397       skal_ud:= true;
  4  7398       if fordelt_til > 0 and fordelt_til<>aktuel_skærm then
  4  7399       begin
  5  7400         for n:= 0 step 1 until 3 do
  5  7401         begin
  6  7402           if bpl_tilst(operatør_stop(fordelt_til,n),1) > 0 then
  6  7403           begin
  7  7404             iaf:= operatør_stop(fordelt_til,n)*op_maske_lgd;
  7  7405             skal_ud:= læsbit_ia(bpl_def.iaf,aktuel_skærm);
  7  7406             goto returner;
  7  7407           end;
  6  7408         end;
  5  7409       end;
  4  7410     returner:
  4  7411       skal_udskrives:= skal_ud;
  4  7412     end;
  3  7413     
  3  7413     message procedure skriv_skærm_opkaldskø side 1 - 820301/hko;
  3  7414         
  3  7414       procedure skriv_skærm_opkaldskø(nr);
  3  7415         value                         nr;
  3  7416         integer                       nr;
  3  7417         begin
  4  7418           integer i,ant,vogn,type,operatør,ttmm,linie,bogst,løb,kmdo;
  4  7419           integer array field ref,iaf,tab;
  4  7420           boolean skal_ud;
  4  7421     
  4  7421     <*V*> wait(bs_opkaldskø_adgang);
  4  7422           setposition(z_op(nr),0,0);
  4  7423           ant:= 0; kmdo:= 0;
  4  7424           tab:= (nr-1)*opk_alarm_tab_lgd;
  4  7425           ref:= første_nødopkald;
  4  7426           if ref=0 then ref:=første_opkald;
  4  7427           while ref <> 0 do
  4  7428           begin
  5  7429             i:= opkaldskø.ref(4);
  5  7430             operatør:= i extract 8;
  5  7431             type:=i shift (-8) extract 4;
  5  7432     
  5  7432     <*      skal_ud:= operatør = nr or -,læsbit_ia(operatørmaske,operatør);
  5  7433     *>
  5  7434             if operatør > 64 then
  5  7435             begin
  6  7436               <* fordelt til gruppe af betjeningspladser *>
  6  7437               i:= 0; skal_ud:= true; iaf:= operatør*op_maske_lgd;
  6  7438               while skal_ud and i<max_antal_operatører do
  6  7439               begin
  7  7440                 i:=i+1;
  7  7441                 if læsbit_ia(bpl_def.iaf,i) then
  7  7442                   skal_ud:= skal_ud and skal_udskrives(i,nr);
  7  7443               end;
  6  7444             end
  5  7445             else
  5  7446               skal_ud:= skal_udskrives(operatør,nr);
  5  7447             if skal_ud then
  5  7448             begin
  6  7449               ant:= ant +1;
  6  7450               if ant < 6 then
  6  7451               begin
  7  7452     <*V*>       cursor(z_op(nr),ant*2+1,3);
  7  7453                 ttmm:= i shift (-12);
  7  7454                 vogn:= opkaldskø.ref(3);
  7  7455                 if vogn = 0 then vogn:= opkaldskø.ref(2) extract 22;
  7  7456                 skriv_skærm_id(nr,vogn,type=2);
  7  7457                 write(z_op(nr),true,4,
  7  7458                   string område_navn(opkaldskø.ref(5) extract 4),
  7  7459                   <<zd.dd>,ttmm/100.0);
  7  7460                 if -, læsbit_ia(opkaldskø.ref.opkald_meldt,nr) then
  7  7461                 begin
  8  7462                   if opkaldskø.ref(5) extract 4 <= 2 or
  8  7463                      opk_alarm.tab.alarm_lgd = 0 then
  8  7464                   begin
  9  7465                     if type=2 then
  9  7466                       write(z_op(nr),"bel",1,"del",8,"bel",1,"del",8,"bel",1)
  9  7467                     else
  9  7468                       write(z_op(nr),"bel",1);
  9  7469                   end
  8  7470                   else if type>kmdo then kmdo:= type;
  8  7471                   sætbit_ia(opkaldskø.ref.opkald_meldt,nr,1);
  8  7472                 end;
  7  7473               end;<* ant < 6 *>
  6  7474             end;<* operatør ok *>
  5  7475     
  5  7475             ref:= opkaldskø.ref(1) extract 12;
  5  7476             if ref = 0 and type = 2<*nød*> then ref:= første_opkald;
  5  7477           end;
  4  7478     \f

  4  7478     message procedure skriv_skærm_opkaldskø side 2 - 820301/hko;
  4  7479     
  4  7479           signal_bin(bs_opkaldskø_adgang);
  4  7480           if kmdo > opk_alarm.tab.alarm_tilst and 
  4  7481              kmdo > opk_alarm.tab.alarm_kmdo  then
  4  7482           begin
  5  7483             opk_alarm.tab.alarm_kmdo:= kmdo;
  5  7484             signal_bin(bs_opk_alarm);
  5  7485           end;
  4  7486           if ant > 5 then
  4  7487           begin
  5  7488             cursor(z_op(nr),13,9);
  5  7489             write(z_op(nr),<<+ddd>,ant-5);
  5  7490           end
  4  7491           else
  4  7492           begin
  5  7493             for i:= ant +1 step 1 until 6 do
  5  7494             begin
  6  7495               cursor(z_op(nr),i*2+1,1);
  6  7496               write(z_op(nr),"sp",25);
  6  7497             end;
  5  7498           end;
  4  7499           ant_i_opkø(nr):= ant;
  4  7500           cursor(z_op(nr),1,1);
  4  7501     <*V*> setposition(z_op(nr),0,0);
  4  7502         end skriv_skærm_opkaldskø;
  3  7503     \f

  3  7503     message procedure operatør side 2 - 810522/hko;
  3  7504     
  3  7504         trap(op_trap);
  3  7505         stack_claim((if cm_test then 200 else 146)+24+48+80+175);
  3  7506     
  3  7506         ref:= nr*terminal_beskr_længde;
  3  7507         tab:= (nr-1)*opk_alarm_tab_lgd;
  3  7508         skærmmåde:= 0; <*normal*>
  3  7509     
  3  7509         if operatør_auto_include(nr) then
  3  7510         begin
  4  7511           waitch(cs_att_pulje,opref,true,-1);
  4  7512           i:= operatør_auto_include(nr) extract 2;
  4  7513           if i<>3 then i:= 0;
  4  7514           start_operation(opref,101,cs_att_pulje,i shift 12 +1);
  4  7515           d.opref.data(1):= nr;
  4  7516           signalch(cs_rad,opref,gen_optype or io_optype);
  4  7517         end;
  3  7518     
  3  7518     <*+2*>
  3  7519         if testbit8 and overvåget or testbit28 then
  3  7520           skriv_operatør(out,0);
  3  7521     <*-2*>
  3  7522     \f

  3  7522     message procedure operatør side 3 - 810602/hko;
  3  7523     
  3  7523         repeat
  3  7524     
  3  7524     <*V*> wait_ch(cs_operatør(nr),
  3  7525                   op_ref,
  3  7526                   true,
  3  7527                   -1<*timeout*>);
  3  7528     <*+2*>
  3  7529           if testbit9 and overvåget then
  3  7530           disable begin
  4  7531             write(out,"nl",1,<:operation fra cs:>,<<d>,cs_operatør(nr),
  4  7532                              <: til operatør :>,nr);
  4  7533             skriv_op(out,op_ref);
  4  7534           end;
  3  7535     <*-2*>
  3  7536           monitor(8)reserve process:(z_op(nr),0,ia);
  3  7537           kode:= d.op_ref.op_kode extract 12;
  3  7538           i:= terminal_tab.ref.terminal_tilstand;
  3  7539           status:= i shift(-21);
  3  7540           opgave:=
  3  7541             if kode=0 then 1 <* indlæs kommando *> else
  3  7542             if kode=1 then 2 <* inkluder        *> else
  3  7543             if kode=2 then 3 <* ekskluder       *> else
  3  7544             if kode=40 then 4 <* opdater skærm  *> else
  3  7545             if kode=43 then 5 <* opkald etableret *> else
  3  7546             if kode=4  then 6 <* radiokanal ekskluderet *> else
  3  7547             if kode=38 then 7 <* operatør meddelelse *> else
  3  7548             0; <* afvises *>
  3  7549     
  3  7549           aktion:= case status +1 of(
  3  7550     <* status        *> <* opgave:         0   1   2   3   4   5   6   7 *>
  3  7551     <* 0 klar        *>(case opgave+1 of(  0,  1, -4,  3,  4, -4,  6,  7)),
  3  7552     <* 1 samtale     *>(case opgave+1 of(  0,  1, -4, -5,  4, -4,  6,  7)),
  3  7553     <* 2 optaget     *>(case opgave+1 of(  0,  1, -4, -5,  4,  5,  6,  7)),
  3  7554     <* 3 stoppet     *>(case opgave+1 of(  0,  2,  2,  3, -4, -4, -4,  7)),
  3  7555     <* 4 klar (fejl) *>(case opgave+1 of(  0, -4,  2,  3, -4, -4,  6, -4)),
  3  7556     <* 5 samt.(fejl) *>(case opgave+1 of(  0, -4,  2,  3, -4, -4,  6, -4)),
  3  7557     <* 6 opt. (fejl) *>(case opgave+1 of(  0, -4,  2,  3, -4,  5, -4, -4)),
  3  7558     <* 7 ej knyttet  *>(case opgave+1 of(  0, -4,  2, -4, -4, -4, -4, -4)),
  3  7559                         -1);
  3  7560     \f

  3  7560     message procedure operatør side 4 - 810424/hko;
  3  7561     
  3  7561           case aktion+6 of
  3  7562           begin
  4  7563             begin
  5  7564               <*-5: terminal optaget *>
  5  7565     
  5  7565               d.op_ref.resultat:= 16;
  5  7566               afslut_operation(op_ref,-1);
  5  7567             end;
  4  7568     
  4  7568             begin
  5  7569               <*-4: operation uden virkning *>
  5  7570     
  5  7570               afslut_operation(op_ref,-1);
  5  7571             end;
  4  7572     
  4  7572             begin
  5  7573               <*-3: ulovlig operationskode *>
  5  7574     
  5  7574               fejl_reaktion(2<*operationskode*>,kode,<:ulovlig:>,1);
  5  7575               afslut_operation(op_ref,-1);
  5  7576             end;
  4  7577     
  4  7577             begin
  5  7578               <*-2: ulovligt operatørterminal_nr *>
  5  7579     
  5  7579               fejl_reaktion(3<*programfejl*>,nr,<: ikke eksisterende operatør:>,1);
  5  7580               afslut_operation(op_ref,-1);
  5  7581             end;
  4  7582     
  4  7582             begin
  5  7583               <*-1: ulovlig operatørtilstand *>
  5  7584     
  5  7584               fejl_reaktion(3<*programfejl*>,status,<: ulovlig operatør-status:>,1);
  5  7585               afslut_operation(op_ref,-1);
  5  7586             end;
  4  7587     
  4  7587             begin
  5  7588               <* 0: ikke implementeret *>
  5  7589     
  5  7589               fejl_reaktion(2<*operationskode*>,kode,<: ikke implementeret:>,1);
  5  7590               afslut_operation(op_ref,-1);
  5  7591             end;
  4  7592     
  4  7592             begin
  5  7593     \f

  5  7593     message procedure operatør side 5 - 851001/cl;
  5  7594     
  5  7594               <* 1: indlæs kommando *>
  5  7595     
  5  7595     
  5  7595     <*V*>     læs_kommando(z_op(nr),200+nr,op_ref,pos,indeks,sep,sluttegn);
  5  7596               if opk_alarm.tab.alarm_tilst > 0 then
  5  7597               begin
  6  7598                 opk_alarm.tab.alarm_kmdo:= 3;
  6  7599                 signal_bin(bs_opk_alarm);
  6  7600                 pass;
  6  7601               end;
  5  7602               if d.op_ref.resultat > 3 then
  5  7603               begin
  6  7604     <*V*>       setposition(z_op(nr),0,0);
  6  7605                 cursor(z_op(nr),24,1);
  6  7606                 skriv_kvittering(z_op(nr),op_ref,pos,
  6  7607                                  d.op_ref.resultat);
  6  7608               end
  5  7609               else if d.op_ref.resultat = -1 then
  5  7610               begin
  6  7611                 skærmmåde:= 0;
  6  7612                 skrivskærm(nr);
  6  7613               end
  5  7614               else if d.op_ref.resultat>0 then
  5  7615               begin <*godkendt*>
  6  7616                 kode:=d.op_ref.opkode;
  6  7617                 i:= kode extract 12;
  6  7618                 j:= if kode = 11 or kode = 12 then 1 <*VO,I/VO,U*> else
  6  7619                     if kode = 19              then 1 <*VO,S     *> else
  6  7620                     if kode = 20 or kode = 24 then 1 <*VO,F/VO,R*> else
  6  7621                     if kode =  9 or kode = 10 then 2 <*VO,L/VO,B*> else
  6  7622                     if kode =  6              then 4 <*STop*>      else
  6  7623                     if 45<=kode and kode<=63  then 3 <*radiokom.*> else
  6  7624                     if kode = 30              then 5 <*SP,D*>      else
  6  7625                     if kode = 31              then 6 <*SP*>        else
  6  7626                     if kode = 32 or kode = 33 then 7 <*SP,V/SP,O*> else
  6  7627                     if kode = 34 or kode = 35 then 6 <*SP,R/SP,A*> else
  6  7628                     if kode = 83              then 8 <*SL*>        else
  6  7629                     if kode = 68              then 9 <*ST,D*>      else
  6  7630                     if kode = 69              then 10 <*ST,V*>     else
  6  7631                     if kode = 36              then 11 <*AL*>       else
  6  7632                     if kode = 37              then 12 <*CC*>       else
  6  7633                     if kode =  2              then 13 <*EX*>       else
  6  7634                     if kode = 92              then 14 <*CQF,V*>    else
  6  7635                     if kode = 38              then 15 <*AL,T*>     else
  6  7636                        0;
  6  7637                 if j > 0 then
  6  7638                 begin
  7  7639                   case j of
  7  7640                   begin
  8  7641                     begin
  9  7642     \f

  9  7642     message procedure operatør side 6 - 851001/cl;
  9  7643     
  9  7643                       <* 1 indsæt/udtag/flyt bus i vogntabel *>
  9  7644     
  9  7644                       vogn:=ia(1);
  9  7645                       ll:=ia(2);
  9  7646                       kanal:= if kode=11 or kode=19 then ia(3) else
  9  7647                               if kode=12 then ia(2) else 0;
  9  7648     <*V*>             wait_ch(cs_vt_adgang,
  9  7649                               vt_op,
  9  7650                               gen_optype,
  9  7651                               -1<*timeout sek*>);
  9  7652                       start_operation(vtop,200+nr,cs_operatør(nr),
  9  7653                                       kode);
  9  7654                       d.vt_op.data(1):=vogn;
  9  7655                       if kode=11 or kode=19 or kode=20 or kode=24 then
  9  7656                         d.vt_op.data(2):=ll;
  9  7657                       if kode=19 then d.vt_op.data(3):= kanal else
  9  7658                       if kode=11 or kode=12 then d.vt_op.data(4):= kanal;
  9  7659                       indeks:= vt_op;
  9  7660                       signal_ch(cs_vt,
  9  7661                                 vt_op,
  9  7662                                 gen_optype or op_optype);
  9  7663     
  9  7663     <*V*>             wait_ch(cs_operatør(nr),
  9  7664                               vt_op,
  9  7665                               op_optype,
  9  7666                               -1<*timeout sek*>);
  9  7667     <*+2*>            if testbit10 and overvåget then
  9  7668                       disable begin
 10  7669                         write(out,"nl",1,<:operatør :>,<<d>,nr,
 10  7670                               <:: operation retur fra vt:>);
 10  7671                         skriv_op(out,vt_op);
 10  7672                       end;
  9  7673     <*-2*>
  9  7674     <*+4*>            if vt_op<>indeks then
  9  7675                         fejl_reaktion(11<*fremmede op*>,op_ref,
  9  7676                                       <:operatør-kommando:>,0);
  9  7677     <*-4*>
  9  7678     <*V*>             setposition(z_op(nr),0,0);
  9  7679                       cursor(z_op(nr),24,1);
  9  7680     <*V*>             skriv_kvittering(z_op(nr),if d.vt_op.resultat = 11 or
  9  7681                         d.vt_op.resultat = 12 then d.vt_op.data(3)
  9  7682                         else vt_op,-1,d.vt_op.resultat);
  9  7683                       d.vt_op.optype:= gen_optype or vt_optype;
  9  7684                       disable afslut_operation(vt_op,cs_vt_adgang);
  9  7685                     end;
  8  7686                     begin
  9  7687     \f

  9  7687     message procedure operatør side 7 - 810921/hko,cl;
  9  7688     
  9  7688                     <* 2 vogntabel,linienr/-,busnr *>
  9  7689     
  9  7689                     d.op_ref.retur:= cs_operatør(nr);
  9  7690                     tofrom(d.op_ref.data,ia,10);
  9  7691                     indeks:= op_ref;
  9  7692                     signal_ch(cs_vt,op_ref,gen_optype or op_optype);
  9  7693                     wait_ch(cs_operatør(nr),
  9  7694                             op_ref,
  9  7695                             op_optype,
  9  7696                             -1<*timeout*>);
  9  7697     <*+2*>          if testbit10 and overvåget then
  9  7698                     disable begin
 10  7699                       write(out,"nl",1,<:operatør operation retur fra vt:>);
 10  7700                       skriv_op(out,op_ref);
 10  7701                     end;
  9  7702     <*-2*>
  9  7703     <*+4*>
  9  7704                     if indeks <> op_ref then
  9  7705                       fejlreaktion(11<*fremmed post*>,op_ref,<:operatør komm:>,0);
  9  7706     <*-4*>
  9  7707                     i:= d.op_ref.resultat;
  9  7708                     if i = 0 or i > 3 then
  9  7709                     begin
 10  7710     <*V*>             setposition(z_op(nr),0,0);
 10  7711                       cursor(z_op(nr),24,1);
 10  7712                       skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat);
 10  7713                     end
  9  7714                     else
  9  7715                     begin
 10  7716                       integer antal,fil_ref;
 10  7717     
 10  7717                       skærm_måde:= 1;
 10  7718                       antal:= d.op_ref.data(6);
 10  7719                       fil_ref:= d.op_ref.data(7);
 10  7720     <*V*>             setposition(z_op(nr),0,0);
 10  7721                       write(z_op(nr),"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>,
 10  7722                         "sp",14,"*",10,"sp",6,
 10  7723                             <:vogntabeludskrift:>,"sp",6,"*",10,"nl",2);
 10  7724     <*V*>             setposition(z_op(nr),0,0);
 10  7725     \f

 10  7725     message procedure operatør side 8 - 841213/cl;
 10  7726     
 10  7726                       pos:= 1;
 10  7727                       while pos <= antal do
 10  7728                       begin
 11  7729                         integer bogst,løb;
 11  7730     
 11  7730                         disable i:= læs_fil(fil_ref,pos,j);
 11  7731                         if i <> 0 then
 11  7732                           fejlreaktion(5<*læs_fil*>,i,<:operatør: vo,l/vo,b:>,0)
 11  7733                         else
 11  7734                         begin
 12  7735                           vogn:= fil(j,1) shift (-24) extract 24;
 12  7736                           løb:= fil(j,1) extract 24;
 12  7737                           if d.op_ref.opkode=9 then
 12  7738                             begin i:=vogn; vogn:=løb; løb:=i; end;
 12  7739                           ll:= løb shift (-12) extract 10;
 12  7740                           bogst:= løb shift (-7) extract 5;
 12  7741                           if bogst > 0 then bogst:= bogst +'A'-1;
 12  7742                           løb:= løb extract 7;
 12  7743                           vogn:= vogn extract 14;
 12  7744                           i:= d.op_ref.opkode-8;
 12  7745                           for i:= i,i+1 do
 12  7746                           begin
 13  7747                             j:= (i+1) extract 1;
 13  7748                             case j +1 of
 13  7749                             begin
 14  7750                               write(z_op(nr),"sp",(bogst=0) extract 1,<<ddd>,ll,
 14  7751                                 false add bogst,1,"/",1,<<d__>,løb);
 14  7752                               write(z_op(nr),<<dddd>,vogn,"sp",1);
 14  7753                             end;
 13  7754                           end;
 12  7755                           if pos mod 5 = 0 then
 12  7756                           begin
 13  7757                             outchar(z_op(nr),'nl');
 13  7758     <*V*>                   setposition(z_op(nr),0,0);
 13  7759                           end
 12  7760                           else write(z_op(nr),"sp",3);
 12  7761                         end;
 11  7762                         pos:=pos+1;
 11  7763                       end;
 10  7764                       write(z_op(nr),"*",1,"nl",1);
 10  7765     \f

 10  7765     message procedure operatør side 8a- 810507/hko;
 10  7766     
 10  7766                       d.opref.opkode:=104; <*slet-fil*>
 10  7767                       d.op_ref.data(4):=filref;
 10  7768                       indeks:=op_ref;
 10  7769                       signal_ch(cs_slet_fil,op_ref,gen_optype or op_optype);
 10  7770     <*V*>             wait_ch(cs_operatør(nr),op_ref,op_optype,-1);
 10  7771     
 10  7771     <*+2*>            if testbit10 and overvåget then
 10  7772                       disable begin
 11  7773                         write(out,"nl",1,<:operatør, slet-fil retur:>);
 11  7774                         skriv_op(out,op_ref);
 11  7775                       end;
 10  7776     <*-2*>
 10  7777     
 10  7777     <*+4*>            if op_ref<>indeks then
 10  7778                         fejlreaktion(11<*fr.post*>,op_ref,<:operatør,slet-fil:>,0);
 10  7779     <*-4*>
 10  7780                       if d.op_ref.data(9)<>0 then
 10  7781                         fejl_reaktion(3<*prg.fejl*>,d.op_ref.data(9),
 10  7782                             <:operatør, slet_fil:>,1);
 10  7783                     end;
  9  7784                   end;
  8  7785     
  8  7785                   begin
  9  7786     \f

  9  7786     message procedure operatør side 9 - 830310/hko;
  9  7787     
  9  7787                       <* 3 radio_kommandoer *>
  9  7788     
  9  7788                       kode:= d.op_ref.opkode;
  9  7789                       rkom:= kode-44; par1:=ia(1); par2:=ia(2);
  9  7790                       disable if testbit14 then
  9  7791                       begin
 10  7792                         integer i; <*lav en trap-bar blok*>
 10  7793     
 10  7793                         trap(test14_trap);
 10  7794                         systime(1,0,kommstart);
 10  7795                         write(zrl,<<zd dd dd.dd >,now,<:op:>,<<d__>,nr,
 10  7796                           string bpl_navn(nr),<: start :>,case rkom of (
 10  7797                           <:OP:>,<:ME:>,<:OP,G:>,<:ME,G:>,<:OP,A:>,<:ME,A:>,
 10  7798                           <:KA,C:>,<:KA,P:>,<:OP,L:>,<:MO:>,<:VE:>,<:NE:>,
 10  7799                           <:OP,V:>,<:OP,T:>,<:R:>,<:GE:>,<:GE,G:>,<:GE,V:>,
 10  7800                           <:GE,T:>),<: :>);
 10  7801                         if (rkom<5 or rkom=9 or rkom=13 or rkom=14 or
 10  7802                             rkom=16 or rkom=17 or rkom=19)
 10  7803                         then
 10  7804                         begin
 11  7805                           if par1<>0 then skriv_id(zrl,par1,0);
 11  7806                           if par2<>0 and rkom<>13 and rkom<>14 and rkom<>19 then
 11  7807                             write(zrl,"sp",1,string områdenavn(par2));
 11  7808                         end
 10  7809                         else
 10  7810                         if rkom=10 and par1<>0 then
 10  7811                           write(zrl,string kanalnavn(par1 extract 20))
 10  7812                         else
 10  7813                         if rkom=5 or rkom=6 then
 10  7814                         begin
 11  7815                           if par1 shift (-20)=15 then write(zrl,<:ALLE:>) else
 11  7816                           if par1 shift (-20)=14 then
 11  7817                             write(zrl,string områdenavn(par1 extract 20));
 11  7818                         end;
 10  7819     test14_trap:        outchar(zrl,'nl');
 10  7820                       end;
  9  7821                       d.op_ref.data(4):= nr; <*operatør*>
  9  7822                       opgave:=
  9  7823                         if kode = 45 <*OP  *> then 1 else
  9  7824                         if kode = 46 <*ME  *> then 2 else
  9  7825                         if kode = 47 <*OP,G*> then 3 else
  9  7826                         if kode = 48 <*ME,G*> then 4 else
  9  7827                         if kode = 49 <*OP,A*> then 5 else
  9  7828                         if kode = 50 <*ME,A*> then 6 else
  9  7829                         if kode = 51 <*KA,C*> then 7 else
  9  7830                         if kode = 52 <*KA,P*> then 8 else
  9  7831                         if kode = 53 <*OP,L*> then 9 else
  9  7832                         if kode = 54 <*MO  *> then (if ia(1)=0 then 11 else 10) else
  9  7833                         if kode = 55 <*VE  *> then 14 else
  9  7834                         if kode = 56 <*NE  *> then 12 else
  9  7835                         if kode = 57 <*OP,V*> then  1 else
  9  7836                         if kode = 58 <*OP,T*> then  1 else
  9  7837                         if kode = 59 <*R   *> then 13 else
  9  7838                         if kode = 60 <*GE  *> then 15 else
  9  7839                         if kode = 61 <*GE,G*> then 16 else
  9  7840                         if kode = 62 <*GE,V*> then 15 else
  9  7841                         if kode = 63 <*GE,T*> then 15 else
  9  7842                         -1;
  9  7843     <*+4*>              if opgave < 0 then
  9  7844                           fejlreaktion(2<*operationskode*>,kode,
  9  7845                             <:operatør, radio-kommando :>,0);
  9  7846     <*-4*>
  9  7847                         status:= skærm_status(tilstand,b_v,b_s,b_s_tilst);
  9  7848                         i:= d.op_ref.data(2):= ia(1); <* ident.*>
  9  7849                         if 5<=opgave and opgave<=8 then
  9  7850                           d.opref.data(2):= -1;
  9  7851                         if opgave=13 then d.opref.data(2):=
  9  7852                           (if læsbit_i(terminaltab.ref.terminaltilstand,11)
  9  7853                            then 0 else 1);
  9  7854                         if opgave = 14 then d.opref.data(2):= 1;
  9  7855                         if opgave=7 or opgave=8 then 
  9  7856                           d.opref.data(3):= -1
  9  7857                         else
  9  7858                         if opgave=5 or opgave=6 then
  9  7859                         begin
 10  7860                           if ia(1) shift (-20) = 15 then
 10  7861                           begin
 11  7862                             d.opref.data(3):= 15 shift 20;
 11  7863                             for j:= 1 step 1 until max_antal_kanaler do
 11  7864                             begin
 12  7865                               iaf:= (j-1)*kanalbeskrlængde;
 12  7866                               if læsbit_i(kanaltab.iaf.kanal_tilstand,11) and
 12  7867                                  læsbit_i(ia(1),kanal_til_omr(j)) then
 12  7868                                 sætbit_i(d.opref.data(3),kanal_til_omr(j),1);
 12  7869                             end;
 11  7870                           end
 10  7871                           else
 10  7872                             d.opref.data(3):= if ia(1)=0 then 14 shift 20 + 3
 10  7873                                else ia(1);
 10  7874                         end
  9  7875                         else
  9  7876                         if kode = 57 then d.opref.data(3):= 2 else
  9  7877                         if kode = 58 then d.opref.data(3):= 1 else
  9  7878                         if kode = 62 then d.opref.data(3):= 2 else
  9  7879                         if kode = 63 then d.opref.data(3):= 1 else
  9  7880                                           d.opref.data(3):= ia(2);
  9  7881     
  9  7881                       <* !!! i første if-sætning nedenfor er 'status>1'
  9  7882                              rettet til 'status>0' for at forhindre
  9  7883                              at opkald nr. 2 kan udføres med et allerede
  9  7884                              etableret opkald i skærmens s-felt,
  9  7885                              jvf. ulykke d. 7/2-1995
  9  7886                       !!! *>
  9  7887                       res:=
  9  7888                         if (opgave=1 or opgave=3) and status>0
  9  7889                            then 16 <*skærm optaget*> else
  9  7890                         if (opgave=15 or opgave=16) and
  9  7891                            status>1 then 16 <*skærm optaget*> else
  9  7892                         if (opgave=1 or opgave=3) and status=0 then 1 else
  9  7893                         if (opgave=15 or opgave=16) and status=0 then 21 else
  9  7894                         if (opgave=1 or opgave=3 or opgave=15 or opgave=16) then 
  9  7895                            (if (d.opref.data(3)=1 or d.opref.data(3)=2) and
  9  7896                               d.opref.data(3) = kanal_til_omr(bs extract 6)
  9  7897                             then 52 else 1) else
  9  7898                         if opgave<11 and status>0 then 16 else
  9  7899                         if opgave=11 and status<2 then 21 else
  9  7900                         if opgave=12 and status=0 then 22 else
  9  7901                         if opgave=13 and status=0 then 49 else
  9  7902                         if opgave=14 and status<>3 then 21 else 1;
  9  7903                       if res=1 and (d.opref.data(3)=1 or d.opref.data(3)=2) then
  9  7904                       begin <* specialbetingelser for TLF og VHF *>
 10  7905                         if (1<opgave and opgave<9) or opgave=16 then res:= 51;
 10  7906                       end;
  9  7907                       if skærmmåde<>0 then
  9  7908                         begin skærm_måde:= 0; skriv_skærm(nr); end;
  9  7909                       kode:= opgave;
  9  7910                       if opgave = 15 then opgave:= 1 else
  9  7911                       if opgave = 16 then opgave:= 3;
  9  7912     \f

  9  7912     message procedure operatør side 10 - 810616/hko;
  9  7913     
  9  7913                       <* tilknyt talevej (om nødvendigt) *>
  9  7914                       if res = 1 and op_talevej(nr)=0 then
  9  7915                       begin
 10  7916                         i:= sidste_tv_brugt;
 10  7917                         repeat
 10  7918                           i:= (i mod max_antal_taleveje)+1;
 10  7919                           if tv_operatør(i)=0 then 
 10  7920                           begin
 11  7921                             tv_operatør(i):= nr;
 11  7922                             op_talevej(nr):= i;
 11  7923                           end;
 10  7924                         until op_talevej(nr)<>0 or i=sidste_tv_brugt;
 10  7925                         if op_talevej(nr)=0 then
 10  7926                           res:=61
 10  7927                         else
 10  7928                         begin
 11  7929                           sidste_tv_brugt:=
 11  7930                             (sidste_tv_brugt mod max_antal_taleveje)+1;
 11  7931     
 11  7931     <*V*>                 waitch(cs_tvswitch_adgang,iaf,op_optype,-1);
 11  7932                           start_operation(iaf,200+nr,cs_operatør(nr),
 11  7933                                             'A' shift 12 + 44);
 11  7934                           d.iaf.data(1):= op_talevej(nr);
 11  7935                           d.iaf.data(2):= nr+16;
 11  7936                           ll:= 0;
 11  7937                           repeat
 11  7938                             signalch(cs_talevejsswitch,iaf,op_optype);
 11  7939     <*V*>                   waitch(cs_operatør(nr),iaf,op_optype,-1);
 11  7940                             ll:= ll+1;
 11  7941                           until ll=3 or d.iaf.resultat=3;
 11  7942                           res:= if d.iaf.resultat=3 then 1 else 61;
 11  7943     <* ********* *>
 11  7944                           delay(1);
 11  7945                           start_operation(iaf,200+nr,cs_operatør(nr),
 11  7946                                             'R' shift 12 + 44);
 11  7947                           ll:= 0;
 11  7948                           repeat
 11  7949                             signalch(cs_talevejsswitch,iaf,op_optype);
 11  7950                             waitch(cs_operatør(nr),iaf,op_optype,-1);
 11  7951                             ll:= ll+1;
 11  7952                           until ll=3 or d.iaf.resultat=3;
 11  7953     <* ********* *>
 11  7954                           signalch(cs_tvswitch_adgang,iaf,op_optype);
 11  7955                           if res<>1 then 
 11  7956                             op_talevej(nr):=tv_operatør(op_talevej(nr)):= 0;
 11  7957                         end;
 10  7958                       end;
  9  7959                       if op_talevej(nr)=0 then res:= 61;
  9  7960                       d.op_ref.data(1):= op_talevej(nr);
  9  7961     
  9  7961                       if res <= 1 then
  9  7962                       begin
 10  7963     til_radio:          <* send operation til radiomodul *>
 10  7964                         d.op_ref.opkode:= opgave shift 12 + 41;
 10  7965                         d.op_ref.data(5):= if b_v<>0 then 12 shift 20 + b_v
 10  7966                                            else 0;
 10  7967                         d.op_ref.data(6):= b_s;
 10  7968                         d.op_ref.resultat:=0;
 10  7969                         d.op_ref.retur:= cs_operatør(nr);
 10  7970                         indeks:= op_ref;
 10  7971     <*+2*>              if testbit11 and overvåget then
 10  7972                         disable begin
 11  7973                           skriv_operatør(out,0);
 11  7974                           write(out,<: operation til radio:>);
 11  7975                           skriv_op(out,op_ref); ud;
 11  7976                         end;
 10  7977     <*-2*>
 10  7978                         signal_ch(cs_rad,op_ref,gen_optype or op_optype);
 10  7979     <*V*>               wait_ch(cs_operatør(nr),op_ref,op_optype,-1);
 10  7980     
 10  7980     <*+2*>              if testbit12 and overvåget then
 10  7981                         disable begin
 11  7982                           skriv_operatør(out,0);
 11  7983                           write(out,<: operation retur fra radio:>);
 11  7984                           skriv_op(out,op_ref); ud;
 11  7985                         end;
 10  7986     <*-2*>
 10  7987     <*+4*>              if op_ref <> indeks then
 10  7988                           fejlreaktion(11<*fr.post*>,op_ref,
 10  7989                             <:operatør, retur fra radio:>,0);
 10  7990     <*-4*>
 10  7991     \f

 10  7991     message procedure operatør side 11 - 810529/hko;
 10  7992     
 10  7992                         res:= d.op_ref.resultat;
 10  7993                         if res < 2 or (res > 3 and (res<>49 or opgave<>11)) then
 10  7994                         begin
 11  7995     <*+4*>                if res < 2 then
 11  7996                             fejlreaktion(3<*prg.fejl*>,res,
 11  7997                               <: operatør,radio_op,resultat:>,1);
 11  7998     <*-4*>
 11  7999                           if res = 1 then res:= 0;
 11  8000                           if (opgave < 10) and (res=20 or res=52) then
 11  8001                               disable tæl_opkald_pr_operatør(nr,
 11  8002                                 (if res=20 then 4 else 5));
 11  8003                         end
 10  8004                         else
 10  8005                         begin <* res = 2 eller 3 *>
 11  8006                           s_kanal:= v_kanal:= 0;
 11  8007                           opgave:= d.opref.opkode shift (-12);
 11  8008                           bv:= d.op_ref.data(5) extract 4;
 11  8009                           bs:= d.op_ref.data(6);
 11  8010                           if opgave < 10 then
 11  8011                           begin
 12  8012                             j:= d.op_ref.data(7) <*type*>;
 12  8013                             i:= terminal_tab.ref(1) shift (-12) shift 12 extract 21;
 12  8014                             i:= i + (if opgave=2 or opgave>3 then 2 else 1);
 12  8015                             terminal_tab.ref(1):= i
 12  8016                               +(if res=2 then 4 <*optaget*> else 0)
 12  8017                               +(if (opgave=1 or opgave=9) and j = 2 <*nødopkald*>
 12  8018                                 then 8 <*nød*> else 0)
 12  8019                               +(if opgave=1 and j > 0 and j < 3 <*mobilopkald*>
 12  8020                                 then 16 else 0)
 12  8021                               + (if opgave mod 2 = 0 then 64 <*pas*> else 0)
 12  8022                               + (if opgave=9 then 128 else
 12  8023                                  if opgave>=7 then 256 else
 12  8024                                  if opgave>=5 then 512 else 0)
 12  8025                               + (if res = 2 then 2 shift 21 <*tilstand = optaget *>
 12  8026                                  else if b_s = 0 then 0     <*tilstand = ledig *>
 12  8027                                             else 1 shift 21 <*tilstand = samtale*>);
 12  8028                             if (res=3 and 0<=j and j<3) then
 12  8029                               disable tæl_opkald_pr_operatør(nr,j+1);
 12  8030                           end
 11  8031                           else if opgave=10 <*monitering*> or
 11  8032                                   opgave=14 <*ventepos  *> then
 11  8033                           begin
 12  8034     <*+4*>                  if res = 2 then
 12  8035                               fejlreaktion(3<*prg.fejl*>,res,
 12  8036                                 <: operatør,moniter,res:>,1);
 12  8037     <*-4*>
 12  8038                             iaf:= (bs extract 4 -1)*kanal_beskr_længde;
 12  8039                             i:= if bs<0 then
 12  8040                               kanaltab.iaf.kanal_tilstand extract 12 else 0;
 12  8041                             terminal_tab.ref(1):= i +
 12  8042                               (if bs < 0 then (1 shift 21) else 0);
 12  8043                             if opgave=10 then
 12  8044                             begin
 13  8045                               s_kanal:= bs;
 13  8046                               v_kanal:= d.opref.data(5);
 13  8047                             end;
 12  8048     \f

 12  8048     message procedure operatør side 12 - 810603/hko;
 12  8049                           end
 11  8050                           else if opgave=11 or opgave=12 then
 11  8051                           begin
 12  8052     <*+4*>                  if res = 2 then
 12  8053                               fejlreaktion(3<*prg.fejl*>,res,
 12  8054                                 <: operatør,ge/ne,res:>,1);
 12  8055     <*-4*>
 12  8056                             if opgave=11 <*GE*> and res<>49 then
 12  8057                             begin
 13  8058                               s_kanal:= terminal_tab.ref(2);
 13  8059                               v_kanal:= 12 shift 20 + 
 13  8060                                 (terminal_tab.ref(1) shift (-12) extract 4);
 13  8061                             end;
 12  8062                             terminal_tab.ref(1):= 0; <* s og v felt nedlagt *>
 12  8063                           end
 11  8064                           else
 11  8065                           if opgave=13 then
 11  8066                           begin
 12  8067                             if res=2 then
 12  8068                               fejlreaktion(3<*prg.fejl*>,res,
 12  8069                                 <:operatør,R,res:>,1);
 12  8070                             sætbit_i(terminaltab.ref.terminaltilstand,11,
 12  8071                               d.opref.data(2));
 12  8072                           end
 11  8073     <*+4*>                else fejlreaktion(3,opgave,<:operatør, opgave:>,0)
 11  8074     <*-4*>
 11  8075                           ;
 11  8076                           <*indsæt kanal_nr for b_v_felt i terminalbeskr.*>
 11  8077     
 11  8077                           sæt_hex_ciffer(terminal_tab.ref,3,b_v extract 4);
 11  8078                           terminal_tab.ref(2):= b_s;
 11  8079                           terminal_tab.ref(3):= d.op_ref.data(11);
 11  8080                           if (opgave<10 or opgave=14) and res=3 then
 11  8081                             <*så henviser b_s til radiokanal*>
 11  8082                           begin
 12  8083                             if bs shift (-20) = 12 then
 12  8084                             begin
 13  8085                               iaf:= (bs extract 4 -1)*kanal_beskr_længde;
 13  8086                               kanaltab.iaf.kanal_tilstand:=
 13  8087                                 kanaltab.iaf.kanal_tilstand shift(-10) shift 10
 13  8088                                 +terminal_tab.ref(1) extract 10;
 13  8089                             end
 12  8090                             else
 12  8091                             begin
 13  8092                               for i:= 1 step 1 until max_antal_kanaler do
 13  8093                               begin
 14  8094                                 if læsbit_i(bs,i) then
 14  8095                                 begin
 15  8096                                   iaf:= (i-1)*kanal_beskr_længde;
 15  8097                                   kanaltab.iaf.kanaltilstand:=
 15  8098                                     kanaltab.iaf.kanaltilstand shift (-10) shift 10
 15  8099                                     + terminal_tab.ref(1) extract 10;
 15  8100                                 end;
 14  8101                               end;
 13  8102                             end;
 12  8103                           end;
 11  8104                           if kode=15 or kode=16 then
 11  8105                           begin
 12  8106                             if opgave<10 then
 12  8107                             begin
 13  8108                               opgave:= 11;
 13  8109                               kanal:= (12 shift 20) +
 13  8110                                       d.opref.data(6) extract 20;
 13  8111                               goto til_radio;
 13  8112                             end
 12  8113                             else
 12  8114                             if opgave=11 then
 12  8115                             begin
 13  8116                               opgave:= 10;
 13  8117                               d.opref.data(2):= kanal;
 13  8118                               goto til_radio;
 13  8119                             end;
 12  8120                           end
 11  8121                           else
 11  8122                           if (kode=1 or kode=3) then
 11  8123                           begin
 12  8124                             if opgave<10 and bv<>0 then
 12  8125                             begin
 13  8126                               opgave:= 14;
 13  8127                               d.opref.data(2):= 2;
 13  8128                               goto til_radio;
 13  8129                             end;
 12  8130                           end;
 11  8131     <*V*>                 skriv_skærm_b_v_s(nr);
 11  8132     <*V*>                 if sætbit_ia(opkaldsflag,nr,0) = 1 then
 11  8133                             skriv_skærm_opkaldskø(nr);
 11  8134                           for i:= s_kanal, v_kanal do
 11  8135                             if i<0 then skriv_skærm_kanal(nr,i extract 4);
 11  8136                           tofrom(kanalflag,alle_operatører,op_maske_lgd);
 11  8137                           signalbin(bs_mobilopkald);
 11  8138     <*V*>                 setposition(z_op(nr),0,0);
 11  8139                         end; <* res = 2 eller 3 *>
 10  8140                       end; <* res <= 1 *>
  9  8141                       <* frigiv talevej (om nødvendigt) *>
  9  8142                       if læs_hex_ciffer(terminal_tab.ref,3,b_v)=0
  9  8143                          and terminal_tab.ref(2)=0 <*b_s*>
  9  8144                          and op_talevej(nr)<>0
  9  8145                       then
  9  8146                       begin
 10  8147     <*V*>               waitch(cs_tvswitch_adgang,iaf,op_optype,-1);
 10  8148                         start_operation(iaf,200+nr,cs_operatør(nr),
 10  8149                                             'D' shift 12 + 44);
 10  8150                         d.iaf.data(1):= op_talevej(nr);
 10  8151                         d.iaf.data(2):= nr+16;
 10  8152                         ll:= 0;
 10  8153                         repeat
 10  8154                           signalch(cs_talevejsswitch,iaf,op_optype);
 10  8155     <*V*>                 waitch(cs_operatør(nr),iaf,op_optype,-1);
 10  8156                           ll:= ll+1;
 10  8157                         until ll=3 or d.iaf.resultat=3;
 10  8158                         ll:= d.iaf.resultat;
 10  8159                         signalch(cs_tvswitch_adgang,iaf,op_optype);
 10  8160                         if ll<>3 then 
 10  8161                           fejlreaktion(21,op_talevej(nr)*100+nr,
 10  8162                             <:frigiv operatør fejlet:>,1)
 10  8163                         else
 10  8164                           op_talevej(nr):= tv_operatør(op_talevej(nr)):= 0;
 10  8165                         skriv_skærm_b_v_s(nr);
 10  8166                       end;
  9  8167                       disable if testbit14 then
  9  8168                       begin
 10  8169                         integer t; <*lav en trap-bar blok*>
 10  8170     
 10  8170                         trap(test14_trap);
 10  8171                         systime(1,0,kommslut);
 10  8172                         write(zrl,<<zd dd dd.dd >,now,<:op:>,<<d__>,nr,
 10  8173                           string bpl_navn(nr),<:  slut :>,case rkom of (
 10  8174                           <:OP:>,<:ME:>,<:OP,G:>,<:ME,G:>,<:OP,A:>,<:ME,A:>,
 10  8175                           <:KA,C:>,<:KA,P:>,<:OP,L:>,<:MO:>,<:VE:>,<:NE:>,
 10  8176                           <:OP,V:>,<:OP,T:>,<:R:>,<:GE:>,<:GE,G:>,<:GE,V:>,
 10  8177                           <:GE,T:>),<: :>);
 10  8178                         if (rkom<5 or rkom=9 or rkom=13 or rkom=14 or
 10  8179                             rkom=16 or rkom=17 or rkom=19)
 10  8180                         then
 10  8181                         begin
 11  8182                           if d.opref.data(7)=2 then outchar(zrl,'*');
 11  8183                           if d.opref.data(9)<>0 then 
 11  8184                           begin
 12  8185                             skriv_id(zrl,d.opref.data(9),0);
 12  8186                             outchar(zrl,' ');
 12  8187                           end;
 11  8188                           if d.opref.data(8)<>0 then
 11  8189                           begin
 12  8190                             skriv_id(zrl,d.opref.data(8),0);
 12  8191                             outchar(zrl,' ');
 12  8192                           end;
 11  8193                           if d.opref.data(8)=0 and d.opref.data(9)=0 and
 11  8194                              d.opref.data(2)<>0 then
 11  8195                           begin
 12  8196                             skriv_id(zrl,d.opref.data(2),0);
 12  8197                             outchar(zrl,' ');
 12  8198                           end;
 11  8199                           if d.opref.data(12)<>0 then
 11  8200                           begin
 12  8201                             if d.opref.data(12) shift (-20) = 15 then
 12  8202                               write(zrl,<:OMR*:>)
 12  8203                             else
 12  8204                             if d.opref.data(12) shift (-20) = 14 then
 12  8205                               write(zrl,
 12  8206                                 string områdenavn(d.opref.data(12) extract 20))
 12  8207                             else
 12  8208                               skriv_id(zrl,d.opref.data(12),0);
 12  8209                             outchar(zrl,' ');
 12  8210                           end;
 11  8211                           t:= terminal_tab.ref.terminaltilstand extract 10;
 11  8212                           if res=3 and rkom=1 and
 11  8213                              (t shift (-4) extract 1 = 1) and
 11  8214                              (t extract 2 <> 3)
 11  8215                           then
 11  8216                           begin
 12  8217                             iaf:= (terminal_tab.ref(2) extract 20 - 1)*
 12  8218                                   kanal_beskr_længde;
 12  8219                             write(zrl,<<zd.dd>,(kanal_tab.iaf.kanal_spec
 12  8220                                     extract 12)/100," ",1);
 12  8221                           end;
 11  8222                           if d.opref.data(10)<>0 then
 11  8223                           begin
 12  8224                             skriv_id(zrl,d.opref.data(10),0);
 12  8225                             outchar(zrl,' ');
 12  8226                           end;
 11  8227                         end
 10  8228                         else
 10  8229                         if rkom=10 and par1<>0 then
 10  8230                           write(zrl,string kanalnavn(par1 extract 20),"sp",1)
 10  8231                         else
 10  8232                         if rkom=5 or rkom=6 then
 10  8233                         begin
 11  8234                           if par1 shift (-20)=15 then write(zrl,<:ALLE:>) else
 11  8235                           if par1 shift (-20)=14 then
 11  8236                             write(zrl,string områdenavn(par1 extract 20));
 11  8237                           outchar(zrl,' ');
 11  8238                         end;
 10  8239                         if op_talevej(nr) > 0 then
 10  8240                             write(zrl,<:T:>,<<d>,op_talevej(nr)," ",1);
 10  8241                         write(zrl,<:res=:>,<<d>,res,<: btid=:>,
 10  8242                           <<dd.dd>,kommslut-kommstart);
 10  8243     test14_trap:        outchar(zrl,'nl');   
 10  8244                       end;
  9  8245     
  9  8245     <*V*>             setposition(z_op(nr),0,0);
  9  8246                       cursor(z_op(nr),24,1);
  9  8247     <*V*>             skriv_kvittering(z_op(nr),op_ref,-1,res);
  9  8248                     end; <* radio-kommando *>
  8  8249                     begin
  9  8250     \f

  9  8250     message procedure operatør side 13 - 810518/hko;
  9  8251     
  9  8251                       <* 4 stop kommando *>
  9  8252     
  9  8252                       status:= skærm_status(tilstand,b_v,b_s,b_s_tilst);
  9  8253                       if tilstand <> 0 then
  9  8254                       begin
 10  8255                         d.op_ref.resultat:= 16; <*skærm optaget*>
 10  8256                       end
  9  8257                       else
  9  8258                       begin
 10  8259                         d.op_ref.retur:= cs_operatør(nr);
 10  8260                         d.op_ref.resultat:= 0;
 10  8261                         d.op_ref.data(1):= nr;
 10  8262                         indeks:= op_ref;
 10  8263     <*+2*>              if testbit11 and overvåget then
 10  8264                         disable begin
 11  8265                           skriv_operatør(out,0);
 11  8266                           write(out,<: stop_operation til radio:>);
 11  8267                           skriv_op(out,op_ref); ud;
 11  8268                         end;
 10  8269     <*-2*>
 10  8270                         if opk_alarm.tab.alarm_tilst > 0 then
 10  8271                         begin
 11  8272                           opk_alarm.tab.alarm_kmdo:= 3;
 11  8273                           signal_bin(bs_opk_alarm);
 11  8274                         end;
 10  8275     
 10  8275                         signal_ch(cs_rad,op_ref,gen_optype or op_optype);
 10  8276     <*V*>               wait_ch(cs_operatør(nr),op_ref,op_optype,-1);
 10  8277     <*+2*>              if testbit12 and overvåget then
 10  8278                         disable begin
 11  8279                           skriv_operatør(out,0);
 11  8280                           write(out,<: operation retur fra radio:>);
 11  8281                           skriv_op(out,op_ref); ud;
 11  8282                         end;
 10  8283     <*-2*>
 10  8284     <*+4*>              if indeks <> op_ref then
 10  8285                           fejlreaktion(11<*fr.post*>,op_ref,
 10  8286                             <: operatør, retur fra radio:>,0);
 10  8287     <*-4*>
 10  8288     \f

 10  8288     message procedure operatør side 14 - 810527/hko;
 10  8289     
 10  8289                         if d.op_ref.resultat = 3 then
 10  8290                         begin
 11  8291                           integer k,n;
 11  8292                           integer array field msk,iaf1;
 11  8293     
 11  8293                           terminal_tab.ref.terminal_tilstand:= 3 shift 21
 11  8294                             +terminal_tab.ref.terminal_tilstand extract 21;
 11  8295                           tofrom(opkaldsflag,alle_operatører,op_maske_lgd);
 11  8296                           if sæt_bit_ia(operatørmaske,nr,0)=1 then
 11  8297                           for k:= nr, 65 step 1 until top_bpl_gruppe do
 11  8298                           begin
 12  8299                             msk:= k*op_maske_lgd;
 12  8300                             if læsbit_ia(bpl_def.msk,nr) then 
 12  8301     <**>                    begin
 13  8302                               n:= 0;
 13  8303                               for i:= 1 step 1 until max_antal_operatører do
 13  8304                               if læsbit_ia(bpl_def.msk,i) then
 13  8305                               begin
 14  8306                                 iaf1:= i*terminal_beskr_længde;
 14  8307                                 if terminal_tab.iaf1.terminal_tilstand 
 14  8308                                                              shift (-21) < 3 then
 14  8309                                   n:= n+1;
 14  8310                               end;  
 13  8311                               bpl_tilst(k,1):= n;
 13  8312                             end;
 12  8313     <**> <*  
 12  8314                               bpl_tilst(k,1):= bpl_tilst(k,1)-1;
 12  8315       *>                  end;
 11  8316                           signal_bin(bs_mobil_opkald);
 11  8317     <*V*>                 setposition(z_op(nr),0,0);
 11  8318                           ht_symbol(z_op(nr));
 11  8319                         end;
 10  8320                       end;
  9  8321     <*V*>             setposition(z_op(nr),0,0);
  9  8322                       cursor(z_op(nr),24,1);
  9  8323                       if d.op_ref.resultat<> 3 then
  9  8324                         skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat);
  9  8325                     end;
  8  8326                     begin
  9  8327                       boolean l22;
  9  8328     \f

  9  8328     message procedure operatør side 15 - 810521/cl;
  9  8329     
  9  8329                       <* 5 springdefinition *>
  9  8330                       l22:= false;
  9  8331                       if sep=',' then
  9  8332                       disable begin
 10  8333                         setposition(z_op(nr),0,0);
 10  8334                         cursor(z_op(nr),22,1);
 10  8335                         write(z_op(nr),"esc" add 128,1,<:ÆK:>,">",1);
 10  8336                         l22:= true; pos:= 1;
 10  8337                         while læstegn(d.op_ref.data,pos,i)<>0 do
 10  8338                           outchar(z_op(nr),i);
 10  8339                       end;
  9  8340     
  9  8340                       tofrom(d.op_ref.data,ia,indeks*2);
  9  8341     <*V*>             wait_ch(cs_op_fil(nr),vt_op,true,-1<*timeout*>);
  9  8342                       start_operation(vt_op,200+nr,cs_operatør(nr),
  9  8343                                       101<*opret fil*>);
  9  8344                       d.vt_op.data(1):=128;<*postantal*>
  9  8345                       d.vt_op.data(2):=2;  <*postlængde*>
  9  8346                       d.vt_op.data(3):=1;  <*segmentantal*>
  9  8347                       d.vt_op.data(4):=
  9  8348                               2 shift 10;  <*spool fil*>
  9  8349                       signal_ch(cs_opret_fil,vt_op,op_optype);
  9  8350                       pos:=vt_op;<*variabel lånes*>
  9  8351     <*V*>             wait_ch(cs_operatør(nr),vt_op,op_optype,-1<*timeout*>);
  9  8352     <*+4*>            if vt_op<>pos then
  9  8353                         fejlreaktion(11<*fremmed post*>,vt_op,<:springdef:>,0);
  9  8354                       if d.vt_op.data(9)<>0 then
  9  8355                         fejlreaktion(13<*opret-fil*>,d.vt_op.data(9),
  9  8356                           <:op kommando(springdefinition):>,0);
  9  8357     <*-4*>
  9  8358                       iaf:=0;
  9  8359                       for i:=1 step 1 until indeks-2 do
  9  8360                       begin
 10  8361                         disable k:=modif_fil(d.vt_op.data(4),i,j);
 10  8362                         if k<>0 then
 10  8363                           fejlreaktion(7<*modif-fil*>,k,
 10  8364                             <:op kommando(spring-def):>,0);
 10  8365                         fil(j).iaf(1):=d.op_ref.data(i+2);
 10  8366                       end;
  9  8367     \f

  9  8367     message procedure operatør side 15a - 820301/cl;
  9  8368     
  9  8368                       while sep = ',' do
  9  8369                       begin
 10  8370                         setposition(z_op(nr),0,0);
 10  8371                         cursor(z_op(nr),23,1);
 10  8372                         write(z_op(nr),"esc" add 128,1,<:ÆK:>,<:+>:>);
 10  8373                         setposition(z_op(nr),0,0);
 10  8374                         wait(bs_fortsæt_adgang);
 10  8375                         pos:= 1; j:= 0;
 10  8376                         while læs_store(z_op(nr),i) < 8 do
 10  8377                         begin
 11  8378                           skrivtegn(fortsæt,pos,i);
 11  8379                           if i = '?' or i = 'esc' then j:= 1; <* skip kommando *>
 11  8380                         end;
 10  8381                         skrivtegn(fortsæt,pos,'em');
 10  8382                         afsluttext(fortsæt,pos);
 10  8383                         sluttegn:= i;
 10  8384                         if j<>0 then
 10  8385                         begin
 11  8386                           setposition(z_op(nr),0,0);
 11  8387                           cursor(z_op(nr),24,1);
 11  8388                           skriv_kvittering(z_op(nr),opref,-1,53);<*annulleret*>
 11  8389                           cursor(z_op(nr),1,1);
 11  8390                           goto sp_ann;
 11  8391                         end;
 10  8392     \f

 10  8392     message procedure operatør side 16 - 810521/cl;
 10  8393     
 10  8393                         disable begin
 11  8394                         integer array værdi(1:4);
 11  8395                         integer a_pos,res;
 11  8396                           pos:= 0;
 11  8397                           repeat
 11  8398                             apos:= pos;
 11  8399                             læs_paramsæt(fortsæt,a_pos,0,værdi,sep,res);
 11  8400                             if res >= 0 then
 11  8401                             begin
 12  8402                               if res=0 and (sep=',' or indeks>2) then <*ok*>
 12  8403                               else if res=0 then res:= -25 <*parameter mangler*>
 12  8404                               else if res=10 and (værdi(1)<1 or værdi(1)>99) then
 12  8405                                   res:= -44 <*intervalstørrelse ulovlig*>
 12  8406                               else if res=10 and (værdi(2)<1 or værdi(2)>99) then
 12  8407                                   res:= -6  <*løbnr ulovligt*>
 12  8408                               else if res=10 then
 12  8409                               begin
 13  8410                                 k:=modiffil(d.vt_op.data(4),indeks-1,j);
 13  8411                                 if k<>0 then fejlreaktion(7<*modiffil*>,k,
 13  8412                                    <:op kommando(spring-def):>,0);
 13  8413                                 iaf:= 0;
 13  8414                                 fil(j).iaf(1):= værdi(1) shift 12 + værdi(2);
 13  8415                                 indeks:= indeks+1;
 13  8416                                 if sep = ',' then res:= 0;
 13  8417                               end
 12  8418                               else res:= -27; <*parametertype*>
 12  8419                             end;
 11  8420                             if res>0 then pos:= a_pos;
 11  8421                           until sep<>'sp' or res<=0;
 11  8422     
 11  8422                           if res<0 then
 11  8423                           begin
 12  8424                             d.op_ref.resultat:= -res;
 12  8425                             i:=1; j:= 1;
 12  8426                             hægt_tekst(d.op_ref.data,i,fortsæt,j);
 12  8427                             afsluttext(d.op_ref.data,i);
 12  8428                           end;
 11  8429                         end;
 10  8430     \f

 10  8430     message procedure operatør side 17 - 810521/cl;
 10  8431     
 10  8431                         if d.op_ref.resultat > 3 then
 10  8432                         begin
 11  8433                           setposition(z_op(nr),0,0);
 11  8434                           if l22 then
 11  8435                           begin
 12  8436                             cursor(z_op(nr),22,1); l22:= false;
 12  8437                             write(z_op(nr),"-",80);
 12  8438                           end;
 11  8439                           cursor(z_op(nr),24,1);
 11  8440                           skriv_kvittering(z_op(nr),op_ref,pos,d.opref.resultat);
 11  8441                           goto sp_ann;
 11  8442                         end;
 10  8443                         if sep=',' then
 10  8444                         begin
 11  8445                           setposition(z_op(nr),0,0);
 11  8446                           cursor(z_op(nr),22,1);
 11  8447                           write(z_op(nr),"esc" add 128,1,<:ÆK:>,<:+>:>);
 11  8448                           pos:= 1; l22:= true;
 11  8449                           while læstegn(fortsæt,pos,i)<>0 do
 11  8450                             outchar(z_op(nr),i);
 11  8451                         end;
 10  8452                         signalbin(bs_fortsæt_adgang);
 10  8453                       end while sep = ',';
  9  8454                       d.vt_op.data(1):= indeks-2;
  9  8455                       k:= sætfildim(d.vt_op.data);
  9  8456                       if k<>0 then fejlreaktion(9,k,<:op kommando(spring-def):>,0);
  9  8457                       d.op_ref.data(3):= d.vt_op.data(4); <*filref*>
  9  8458                       signalch(cs_op_fil(nr),vt_op,op_optype or gen_optype);
  9  8459                       d.op_ref.retur:=cs_operatør(nr);
  9  8460                       pos:=op_ref;
  9  8461                       signal_ch(cs_vt,op_ref,gen_optype or op_optype);
  9  8462     <*V*>             wait_ch(cs_operatør(nr),op_ref,op_optype,-1<*timeout*>);
  9  8463     <*+4*>            if pos<>op_ref then
  9  8464                         fejlreaktion(11<*fremmed post*>,op_ref,
  9  8465                           <:op kommando(springdef retur fra vt):>,0);
  9  8466     <*-4*>
  9  8467     \f

  9  8467     message procedure operatør side 18 - 810521/cl;
  9  8468     
  9  8468     <*V*>             setposition(z_op(nr),0,0);
  9  8469                       if l22 then
  9  8470                       begin
 10  8471                         cursor(z_op(nr),22,1);
 10  8472                         write(z_op(nr),"-",80);
 10  8473                       end;
  9  8474                       cursor(z_op(nr),24,1);
  9  8475                       skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat);
  9  8476     
  9  8476                       if false then
  9  8477                       begin
 10  8478               sp_ann:   signalch(cs_slet_fil,vt_op,op_optype);
 10  8479                         waitch(cs_operatør(nr),vt_op,op_optype,-1);
 10  8480                         signalch(cs_op_fil(nr),vt_op,op_optype or vt_optype);
 10  8481                         signalbin(bs_fortsæt_adgang);
 10  8482                       end;
  9  8483                         
  9  8483                     end;
  8  8484     
  8  8484                     begin
  9  8485     \f

  9  8485     message procedure operatør side 19 - 810522/cl;
  9  8486     
  9  8486                       <* 6 spring  (igangsæt)
  9  8487                            spring,annuler
  9  8488                            spring,reserve     *>
  9  8489     
  9  8489                       tofrom(d.op_ref.data,ia,6);
  9  8490                       d.op_ref.retur:=cs_operatør(nr);
  9  8491                       indeks:=op_ref;
  9  8492                       signal_ch(cs_vt,op_ref,gen_optype or op_optype);
  9  8493     <*V*>             wait_ch(cs_operatør(nr),
  9  8494                               op_ref,
  9  8495                               op_optype,
  9  8496                               -1<*timeout*>);
  9  8497     <*+2*>            if testbit10 and overvåget then
  9  8498                       disable begin
 10  8499                         skriv_operatør(out,0);
 10  8500                         write(out,"nl",1,<:op operation retur fra vt:>);
 10  8501                         skriv_op(out,op_ref);
 10  8502                       end;
  9  8503     <*-2*>
  9  8504     <*+4*>            if indeks<>op_ref then
  9  8505                         fejlreaktion(11<*fremmed post*>,op_ref,
  9  8506                                      <:op kommando(spring):>,0);
  9  8507     <*-4*>
  9  8508     
  9  8508     <*V*>             setposition(z_op(nr),0,0);
  9  8509                       cursor(z_op(nr),24,1);
  9  8510                       skriv_kvittering(z_op(nr),if (d.op_ref.resultat=11 or
  9  8511                           d.op_ref.resultat=12) and kode=34 <*SP,R*> then
  9  8512                           d.op_ref.data(4) else op_ref,-1,d.op_ref.resultat);
  9  8513                     end;
  8  8514     
  8  8514                     begin
  9  8515     \f

  9  8515     message procedure operatør side 20 - 810525/cl;
  9  8516     
  9  8516                       <* 7 spring(-oversigts-)rapport *>
  9  8517     
  9  8517                       d.op_ref.retur:=cs_operatør(nr);
  9  8518                       tofrom(d.op_ref.data,ia,4);
  9  8519                       indeks:=op_ref;
  9  8520                       signal_ch(cs_vt,op_ref,gen_optype or op_optype);
  9  8521     <*V*>             wait_ch(cs_operatør(nr),op_ref,op_optype,-1<*timeout*>);
  9  8522     <*+2*>            disable if testbit10 and overvåget then
  9  8523                       begin
 10  8524                         write(out,"nl",1,<:operatør operation retur fra vt:>);
 10  8525                         skriv_op(out,op_ref);
 10  8526                       end;
  9  8527     <*-2*>
  9  8528     
  9  8528     <*+4*>            if op_ref<>indeks then
  9  8529                         fejlreaktion(11<*fremmed post*>,op_ref,
  9  8530                           <:op kommando(spring-rapport):>,0);
  9  8531     <*-4*>
  9  8532     
  9  8532     <*V*>             setposition(z_op(nr),0,0);
  9  8533                       if d.op_ref.resultat<>3 then
  9  8534                       begin
 10  8535                         cursor(z_op(nr),24,1);
 10  8536                         skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat);
 10  8537                       end
  9  8538                       else
  9  8539                       begin
 10  8540                         boolean p_skrevet;
 10  8541                         integer bogst,løb;
 10  8542     
 10  8542                         skærmmåde:= 1;
 10  8543     
 10  8543                         if kode = 32 then <* spring,vis *>
 10  8544                         begin
 11  8545                           ll:= d.op_ref.data(1) shift (-5) extract 10;
 11  8546                           bogst:= d.op_ref.data(1) extract 5;
 11  8547                           if bogst<>0 then bogst:= bogst + 'A' - 1;
 11  8548     <*V*>                 write(z_op(nr),"esc" add 128,1,<:ÆH:>,
 11  8549                             "esc" add 128,1,<:ÆJ:>,"sp",10,"*",5,"sp",5,
 11  8550                             <:spring: :>,
 11  8551                             <<d>,ll,false add bogst,(bogst<>0) extract 1,
 11  8552                             <:.:>,string (extend d.op_ref.data(2) shift 24));
 11  8553                           raf:= data+8;
 11  8554                           if d.op_ref.raf(1)<>0.0 then
 11  8555                             write(z_op(nr),<:, startet :>,<<zddddd>,
 11  8556                               round systime(4,d.op_ref.raf(1),r),<:.:>,round r)
 11  8557                           else write(z_op(nr),<:, ikke startet:>);
 11  8558                           write(z_op(nr),"sp",5,"*",5,"nl",2);
 11  8559     \f

 11  8559     message procedure operatør side 21 - 810522/cl;
 11  8560     
 11  8560                           p_skrevet:= false;
 11  8561                           for pos:=1 step 1 until d.op_ref.data(3) do
 11  8562                           begin
 12  8563                             disable i:=læsfil(d.op_ref.data(4),pos,j);
 12  8564                             if i<>0 then
 12  8565                               fejlreaktion(5<*læsfil*>,i,
 12  8566                                 <:op kommando(spring,vis):>,0);
 12  8567                             iaf:=0;
 12  8568                             i:= fil(j).iaf(1);
 12  8569                             if i < 0 and -, p_skrevet then
 12  8570                             begin
 13  8571                               outchar(z_op(nr),'('); p_skrevet:= true;
 13  8572                             end;
 12  8573                             if i > 0 and p_skrevet then
 12  8574                             begin
 13  8575                               outchar(z_op(nr),')'); p_skrevet:= false;
 13  8576                             end;
 12  8577                             if pos mod 2 = 0 then
 12  8578                               write(z_op(nr),<< dd>,abs i,<:.:>)
 12  8579                             else
 12  8580                               write(z_op(nr),true,3,<<d>,abs i);
 12  8581                             if pos mod 21 = 0 then outchar(z_op(nr),'nl');
 12  8582                           end;
 11  8583                           write(z_op(nr),"*",1);
 11  8584     \f

 11  8584     message procedure operatør side 22 - 810522/cl;
 11  8585     
 11  8585                         end
 10  8586                         else if kode=33 then <* spring,oversigt *>
 10  8587                         begin
 11  8588                           write(z_op(nr),"esc" add 128,1,<:ÆH:>,
 11  8589                             "esc" add 128,1,<:ÆJ:>,"sp",10,"*",5,"sp",5,
 11  8590                             <:spring oversigt:>,"sp",5,"*",5,"nl",2);
 11  8591     
 11  8591                           for pos:=1 step 1 until d.op_ref.data(1) do
 11  8592                           begin
 12  8593                             disable i:=læsfil(d.op_ref.data(2),pos,j);
 12  8594                             if i<>0 then 
 12  8595                               fejlreaktion(5<*læsfil*>,i,
 12  8596                                 <:op kommando(spring-oversigt):>,0);
 12  8597                             iaf:=0;
 12  8598                             ll:=fil(j).iaf(1) shift (-5) extract 10;
 12  8599                             bogst:=fil(j).iaf(1) extract 5;
 12  8600                             if bogst<>0 then bogst:=bogst + 'A' - 1;
 12  8601                             write(z_op(nr),"sp",(bogst=0) extract 1 + 1,<<ddd>,ll,
 12  8602                               false add bogst,(bogst<>0) extract 1,<:.:>,true,4,
 12  8603                               string (extend fil(j).iaf(2) shift 24));
 12  8604                             if fil(j,2)<>0.0 then
 12  8605                               write(z_op(nr),<:startet :>,<<zddddd>,
 12  8606                                 round systime(4,fil(j,2),r),<:.:>,round r);
 12  8607                             outchar(z_op(nr),'nl');
 12  8608                           end;
 11  8609                           write(z_op(nr),"*",1);
 11  8610                         end;
 10  8611                         <* slet fil *>
 10  8612                         d.op_ref.opkode:= 104;
 10  8613                         if kode=33 then d.op_ref.data(4):= d.op_ref.data(2);
 10  8614                         signalch(cs_slet_fil,op_ref,gen_optype or op_optype);
 10  8615                         waitch(cs_operatør(nr),op_ref,op_optype or gen_optype,-1);
 10  8616                       end; <* resultat=3 *>
  9  8617     
  9  8617                     end;
  8  8618     
  8  8618                     begin
  9  8619     \f

  9  8619     message procedure operatør side 23 - 940522/cl;
  9  8620     
  9  8620     
  9  8620                       <* 8 SLUT *>
  9  8621                       trapmode:= 1 shift 13;
  9  8622                       trap(-2);
  9  8623                     end;
  8  8624     
  8  8624                     begin
  9  8625                       <* 9 stopniveauer,definer *>
  9  8626                       integer fno;
  9  8627     
  9  8627                       for i:= 1 step 1 until 3 do
  9  8628                         operatør_stop(nr,i):= ia(i+1);
  9  8629                       i:= modif_fil(tf_stoptabel,nr,fno);
  9  8630                       if i<>0 then fejlreaktion(7,i,<:stoptabel:>,0);
  9  8631                       iaf:=0;
  9  8632                       for i:= 0,1,2,3 do
  9  8633                         fil(fno).iaf(i+1):= operatør_stop(nr,i);
  9  8634                       setposition(fil(fno),0,0);
  9  8635                       setposition(z_op(nr),0,0);
  9  8636                       cursor(z_op(nr),24,1);
  9  8637                       skriv_kvittering(z_op(nr),0,-1,3);
  9  8638                     end;
  8  8639     
  8  8639                     begin
  9  8640     \f

  9  8640     message procedure operatør side 24 - 940522/cl;
  9  8641                       
  9  8641                       <* 10 stopniveauer,vis *>
  9  8642                       integer bpl,j,k;
  9  8643     
  9  8643                       skærm_måde:= 1;
  9  8644                       setposition(z_op(nr),0,0);
  9  8645                       write(z_op(nr),"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>,
  9  8646                         <:stopniveauer: :>);
  9  8647                       for i:= 0 step 1 until 3 do
  9  8648                       begin
 10  8649                         bpl:= operatør_stop(nr,i);
 10  8650                         write(z_op(nr),if i=0 then <:  :> else <: -> :>,
 10  8651                           if bpl=0 then <:ALLE:> else string bpl_navn(bpl));
 10  8652                       end;
  9  8653                       write(z_op(nr),"nl",2,<:operatørpladser:  :>);
  9  8654                       j:=0;
  9  8655                       for bpl:= 1 step 1 until max_antal_operatører do
  9  8656                       if bpl_navn(bpl)<>long<::> then
  9  8657                       begin
 10  8658                         if j mod 8 = 0 and j > 0 then
 10  8659                           write(z_op(nr),"nl",1,"sp",18);
 10  8660                         iaf:= bpl*terminal_beskr_længde;
 10  8661                         write(z_op(nr),if bpl_tilst(bpl,1) > 0 then "*" else " ",1,
 10  8662                           true,6,string bpl_navn(bpl));
 10  8663                         j:=j+1;
 10  8664                       end;
  9  8665                       write(z_op(nr),"nl",2,<:operatørgrupper:   :>);
  9  8666                       j:=0;
  9  8667                       for bpl:= 65 step 1 until top_bpl_gruppe do
  9  8668                       if bpl_navn(bpl)<>long<::> then
  9  8669                       begin
 10  8670                         if j mod 8 = 0 and j > 0 then
 10  8671                           write(z_op(nr),"nl",1,"sp",19);
 10  8672                         write(z_op(nr),true,7,string bpl_navn(bpl));
 10  8673                         j:=j+1;
 10  8674                       end;
  9  8675                       write(z_op(nr),"nl",1,"*",1);
  9  8676                     end;
  8  8677     
  8  8677                     begin
  9  8678                       <* 11 alarmlængde *>
  9  8679                       integer fno;
  9  8680     
  9  8680                       if indeks > 0 then
  9  8681                       begin
 10  8682                         opk_alarm.tab.alarm_lgd:= ia(1);
 10  8683                         i:= modiffil(tf_alarmlgd,nr,fno);
 10  8684                         if i<>0 then fejlreaktion(7,i,<:alarmlgd:>,0);
 10  8685                         iaf:= 0;
 10  8686                         fil(fno).iaf(1):= opk_alarm.tab.alarm_lgd;
 10  8687                         setposition(fil(fno),0,0);
 10  8688                       end;
  9  8689     
  9  8689                       setposition(z_op(nr),0,0);
  9  8690                       cursor(z_op(nr),24,1);
  9  8691                       skriv_kvittering(z_op(nr),opk_alarm.tab.alarm_lgd,-1,63);
  9  8692                     end;                  
  8  8693     
  8  8693                     begin
  9  8694                       <* 12 CC *>
  9  8695                       integer i, c;
  9  8696     
  9  8696                       i:= 1;
  9  8697                       while læstegn(ia,i+0,c)<>0 and
  9  8698                          i<(op_spool_postlgd-op_spool_text)//2*3
  9  8699                       do skrivtegn(d.opref.data,i,c);
  9  8700                       repeat skrivtegn(d.opref.data,i,0) until (i mod 6)=1;
  9  8701     
  9  8701                       d.opref.retur:= cs_operatør(nr);
  9  8702                       signalch(cs_op_spool,opref,op_optype);
  9  8703     <*V*>             waitch(cs_operatør(nr),opref,op_optype,-1);
  9  8704                                                            
  9  8704                       setposition(z_op(nr),0,0);
  9  8705                       cursor(z_op(nr),24,1);
  9  8706                       skriv_kvittering(z_op(nr),opref,-1,d.opref.resultat);
  9  8707                     end;
  8  8708     
  8  8708                     <* 13 EXkluder skærmen *>
  8  8709                     begin
  9  8710                       d.opref.resultat:= 2;
  9  8711                       setposition(z_op(nr),0,0);
  9  8712                       cursor(z_op(nr),24,1);
  9  8713                       skriv_kvittering(z_op(nr),opref,-1,d.opref.resultat);
  9  8714     
  9  8714                       waitch(cs_op_fil(nr),vt_op,true,-1);
  9  8715                       start_operation(vt_op,curr_coruid,cs_op_fil(nr),2);
  9  8716                       d.vt_op.data(1):= nr;
  9  8717                       signalch(cs_rad,vt_op,gen_optype);
  9  8718                     end;
  8  8719     
  8  8719                     begin
  9  8720                       <* 14 CQF-tabel,vis *>
  9  8721     
  9  8721                       skærm_måde:= 1;
  9  8722                       setposition(z_op(nr),0,0);
  9  8723                       write(z_op(nr),"esc" add 128,1,<:ÆH:>,
  9  8724                         "esc" add 128,1,<:ÆJ:>);
  9  8725                       skriv_cqf_tabel(z_op(nr),false);
  9  8726                       write(z_op(nr),"*",1);
  9  8727                     end;
  8  8728     
  8  8728                     begin
  9  8729                       <* 15 ALarmlyd,Test *>
  9  8730                       integer array field tab;
  9  8731                       integer res;
  9  8732     
  9  8732                       tab:= (nr-1)*opk_alarm_tab_lgd;
  9  8733                       setposition(z_op(nr),0,0);
  9  8734                       if ia(1)<1 or ia(1)>2 then
  9  8735                         res:= 64 <* ulovligt tal *>
  9  8736                       else if opk_alarm.tab.alarm_lgd = 0 then
  9  8737                       begin
 10  8738                         if ia(1)=2 then
 10  8739                           write(z_op(nr),"bel",1,"del",8,"bel",1,"del",8,"bel",1)
 10  8740                         else
 10  8741                           write(z_op(nr),"bel",1);
 10  8742                         res:= 3;
 10  8743                       end
  9  8744                       else if ia(1) > opk_alarm.tab.alarm_tilst and
  9  8745                               ia(1) > opk_alarm.tab.alarm_kmdo  then
  9  8746                       begin
 10  8747                         opk_alarm.tab.alarm_kmdo:= ia(1);
 10  8748                         signal_bin(bs_opk_alarm);
 10  8749                         res:= 3;
 10  8750                       end
  9  8751                       else
  9  8752                         res:= 48; <* i brug *>
  9  8753     
  9  8753                       cursor(z_op(nr),24,1);
  9  8754                       skriv_kvittering(z_op(nr),opref,-1,res);
  9  8755                     end;   
  8  8756     
  8  8756                     begin
  9  8757                       d.op_ref.resultat:= 45; <*ikke implementeret*>
  9  8758                       setposition(z_op(nr),0,0);
  9  8759                       cursor(z_op(nr),24,1);
  9  8760                       skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat);
  9  8761                     end;
  8  8762     \f

  8  8762     message procedure operatør side x - 810522/hko;
  8  8763     
  8  8763     <*+4*>          fejl_reaktion(3<*programfejl*>,j,<:case 'opkode':>,2)
  8  8764     <*-4*>
  8  8765                   end;<*case j *>
  7  8766                 end <* j > 0 *>
  6  8767                 else
  6  8768                 begin
  7  8769     <*V*>         setposition(z_op(nr),0,0);
  7  8770                   if sluttegn<>'nl' then outchar(z_op(nr),'nl');
  7  8771                   skriv_kvittering(z_op(nr),op_ref,-1,
  7  8772                                    45 <*ikke implementeret *>);
  7  8773                 end;
  6  8774               end;<* godkendt *>
  5  8775     
  5  8775     <*V*>     setposition(z_op(nr),0,0);
  5  8776     <*???*>
  5  8777              while (læsbit_ia(samtaleflag,nr) or læsbit_ia(opkaldsflag,nr) or
  5  8778                læsbit_ia(kanalflag,nr) ) and læsbit_ia(operatørmaske,nr) and
  5  8779                skærmmåde = 0 do
  5  8780              begin
  6  8781               if sætbit_ia(samtaleflag,nr,0)=1 then
  6  8782               begin
  7  8783                 skriv_skærm_bvs(nr);
  7  8784     <*940920    if op_talevej(nr)=0 then status:= 0
  7  8785                 else inspect(bs_talevej_udkoblet(op_talevej(nr)),status);
  7  8786                 if status>0 then
  7  8787                 begin
  7  8788                   for ll:= 1 step 1 until terminalbeskrlængde//2 do
  7  8789                     terminaltab.ref(ll):= 0;
  7  8790                   skriv_skærm_bvs(nr);
  7  8791                   wait(bs_talevej_udkoblet(op_talevej(nr)));
  7  8792                 end;
  7  8793                 for i:= 1 step 1 until max_antal_kanaler do
  7  8794                 begin
  7  8795                   iaf:= (i-1)*kanalbeskrlængde;
  7  8796                   inspect(ss_samtale_nedlagt(i),status);
  7  8797                   if status>0 and 
  7  8798                     tv_operatør(kanaltab.iaf.kanal_tilstand shift (-16))=nr then
  7  8799                   begin
  7  8800                     kanaltab.iaf.kanal_tilstand:=
  7  8801                       kanaltab.iaf(1) shift (-10) extract 6 shift 10;
  7  8802                     for ll:= 2 step 1 until kanalbeskrlængde//2 do
  7  8803                       kanaltab.iaf(ll):= 0;
  7  8804                     skriv_skærm_kanal(nr,i);
  7  8805                     repeat
  7  8806                       wait(ss_samtale_nedlagt(i));
  7  8807                       inspect(ss_samtale_nedlagt(i),status);
  7  8808                     until status=0;
  7  8809                   end;
  7  8810                 end;
  7  8811     940920*>    cursor(z_op(nr),1,1);
  7  8812                 setposition(z_op(nr),0,0);
  7  8813               end;
  6  8814               if (læsbit_ia(opkaldsflag,nr) or læsbit_ia(kanalflag,nr))
  6  8815                  and skærmmåde = 0
  6  8816                  and læsbit_ia(operatørmaske,nr) then
  6  8817               begin
  7  8818                 if sætbit_ia(opkaldsflag,nr,0) = 1 then
  7  8819                   skriv_skærm_opkaldskø(nr);
  7  8820                 if sætbit_ia(kanalflag,nr,0) = 1 then
  7  8821                 begin
  8  8822                   for i:= 1 step 1 until max_antal_kanaler do
  8  8823                     skriv_skærm_kanal(nr,i);
  8  8824                 end;
  7  8825                 cursor(z_op(nr),1,1);
  7  8826     <*V*>       setposition(z_op(nr),0,0);
  7  8827               end;
  6  8828              end;
  5  8829               d.op_ref.retur:=cs_att_pulje;
  5  8830               disable afslut_kommando(op_ref);
  5  8831             end; <* indlæs kommando *>
  4  8832     
  4  8832             begin
  5  8833     \f

  5  8833     message procedure operatør side x+1 - 810617/hko;
  5  8834     
  5  8834               <* 2: inkluder *>
  5  8835               integer k,n;
  5  8836               integer array field msk,iaf1;
  5  8837     
  5  8837               i:=monitor(4) process address:(z_op(nr),0,ia);
  5  8838               if i=0 then
  5  8839               begin
  6  8840                 fejlreaktion(3<*programfejl*>,nr,
  6  8841                     <:operatør(nr) eksisterer ikke:>,1);
  6  8842                 d.op_ref.resultat:=28;
  6  8843               end
  5  8844               else
  5  8845               begin
  6  8846                 i:=monitor(8) reserve process:(z_op(nr),0,ia);
  6  8847                 d.op_ref.resultat:=if i<>0 then 16 <*skærm optaget*>
  6  8848                                    else if d.op_ref.opkode = 0 then 0
  6  8849                                    else  3;<*udført*>
  6  8850                 if i > 0 then
  6  8851                   fejlreaktion(4<*monitor res*>,nr*100 +i,
  6  8852                                <:operatørskærm reservation:>,1)
  6  8853                 else
  6  8854                 begin
  7  8855                   i:=terminal_tab.ref.terminal_tilstand;
  7  8856     <*940418/cl inkluderet sættes i stop - start *>
  7  8857                   kode:= d.opref.opkode extract 12;
  7  8858                   if kode <> 0 then
  7  8859                     terminal_tab.ref.terminal_tilstand:=
  7  8860                       (d.opref.opkode shift (-12) shift 21) + (i extract 21)
  7  8861                   else
  7  8862     <*940418/cl inkluderet sættes i stop - slut *>
  7  8863                     terminal_tab.ref.terminal_tilstand:= i extract 
  7  8864                       (if i shift(-21) extract 2 = 3 then 21 else 23);
  7  8865                   for i:= 1 step 1 until max_antal_kanaler do
  7  8866                   begin
  8  8867                     iaf:= (i-1)*kanalbeskrlængde;
  8  8868                     sætbit_ia(kanaltab.iaf.kanal_alarm,nr,0);
  8  8869                   end;
  7  8870                   skærm_måde:= 0;
  7  8871                   sætbit_ia(operatørmaske,nr,
  7  8872                     (if terminal_tab.ref.terminal_tilstand shift (-21) = 3
  7  8873                      then 0 else 1));
  7  8874                   for k:= nr, 65 step 1 until top_bpl_gruppe do
  7  8875                   begin
  8  8876                     msk:= k*op_maske_lgd;
  8  8877                     if læsbit_ia(bpl_def.msk,nr) then 
  8  8878     <**>            begin
  9  8879                       n:= 0;
  9  8880                       for i:= 1 step 1 until max_antal_operatører do
  9  8881                       if læsbit_ia(bpl_def.msk,i) then
  9  8882                       begin
 10  8883                         iaf1:= i*terminal_beskr_længde;
 10  8884                         if terminal_tab.iaf1.terminal_tilstand 
 10  8885                                                      shift (-21) < 3 then
 10  8886                           n:= n+1;
 10  8887                       end;  
  9  8888                       bpl_tilst(k,1):= n;
  9  8889                     end;
  8  8890     <**> <*  
  8  8891                       bpl_tilst(k,1):= bpl_tilst(k,1) + 
  8  8892                         (if læsbit_ia(operatørmaske,nr) then 1 else 0);
  8  8893       *>          end;
  7  8894                   tofrom(opkaldsflag,alle_operatører,op_maske_lgd);
  7  8895                   sætbit_ia(opkaldsflag,nr,0);
  7  8896                   signal_bin(bs_mobil_opkald);
  7  8897     <*940418/cl inkluderet sættes i stop - start *>
  7  8898                   if terminal_tab.ref.terminal_tilstand shift (-21) = 3 then
  7  8899     <*V*>           ht_symbol(z_op(nr))
  7  8900                   else
  7  8901     <*940418/cl inkluderet sættes i stop - slut *>
  7  8902     <*V*>           skriv_skærm(nr);
  7  8903                   cursor(z_op(nr),24,1);
  7  8904     <*V*>         setposition(z_op(nr),0,0);
  7  8905                 end;
  6  8906               end;
  5  8907               if d.op_ref.opkode = 0 then
  5  8908                 signal_ch(cs_operatør(nr),op_ref,d.op_ref.optype)
  5  8909               else
  5  8910               signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  5  8911             end;
  4  8912     
  4  8912             begin
  5  8913     \f

  5  8913     message procedure operatør side x+2 - 820304/hko;
  5  8914     
  5  8914               <* 3: ekskluder *>
  5  8915               integer k,n;
  5  8916               integer array field iaf1,msk;
  5  8917     
  5  8917               write(z_op(nr),"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>);
  5  8918     <*V*>     setposition(z_op(nr),0,0);
  5  8919               monitor(10) release process:(z_op(nr),0,ia);
  5  8920               d.op_ref.resultat:=3;
  5  8921               signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  5  8922               terminal_tab.ref.terminal_tilstand:= 7 shift 21 +
  5  8923                 terminal_tab.ref.terminal_tilstand extract 21;
  5  8924               if sæt_bit_ia(operatørmaske,nr,0)=1 then
  5  8925               for k:= nr, 65 step 1 until top_bpl_gruppe do
  5  8926               begin
  6  8927                 msk:= k*op_maske_lgd;
  6  8928                 if læsbit_ia(bpl_def.msk,nr) then 
  6  8929     <**>        begin
  7  8930                   n:= 0;
  7  8931                   for i:= 1 step 1 until max_antal_operatører do
  7  8932                   if læsbit_ia(bpl_def.msk,i) then
  7  8933                   begin
  8  8934                     iaf1:= i*terminal_beskr_længde;
  8  8935                     if terminal_tab.iaf1.terminal_tilstand 
  8  8936                                                  shift (-21) < 3 then
  8  8937                       n:= n+1;
  8  8938                   end;  
  7  8939                   bpl_tilst(k,1):= n;
  7  8940                 end;
  6  8941     <**> <*  
  6  8942                   bpl_tilst(k,1):= bpl_tilst(k,1)-1;
  6  8943       *>      end;
  5  8944               signal_bin(bs_mobil_opkald);
  5  8945               if opk_alarm.tab.alarm_tilst > 0 then
  5  8946               begin
  6  8947                 opk_alarm.tab.alarm_kmdo:= 3;
  6  8948                 signal_bin(bs_opk_alarm);
  6  8949               end;
  5  8950             end;
  4  8951             begin
  5  8952     
  5  8952               <* 4: opdater skærm *>
  5  8953     
  5  8953               signal_ch(cs_op_retur,op_ref,d.op_ref.optype);
  5  8954               while (læsbit_ia(samtaleflag,nr) or læsbit_ia(opkaldsflag,nr) or
  5  8955                 læsbit_ia(kanalflag,nr) ) and læsbit_ia(operatørmaske,nr) and
  5  8956                 skærmmåde=0 do
  5  8957              begin
  6  8958     
  6  8958     <*+2*>    if testbit13 and overvåget then
  6  8959               disable begin
  7  8960                 write(out,"nl",1,<:opdater skærm(:>,<<d>,nr,
  7  8961                   <:) opkaldsflag::>,"nl",1);
  7  8962                 outintbits_ia(out,opkaldsflag,1,op_maske_lgd//2);
  7  8963                 write(out,<: operatørmaske::>,"nl",1);
  7  8964                 outintbits_ia(out,operatørmaske,1,op_maske_lgd//2);
  7  8965                 write(out,<: skærmmåde=:>,skærmmåde,"nl",0);
  7  8966                 ud;
  7  8967               end;
  6  8968     <*-2*>
  6  8969               if sætbit_ia(samtaleflag,nr,0)=1 and op_talevej(nr)<>0 then
  6  8970               begin
  7  8971                 skriv_skærm_bvs(nr);
  7  8972     <*940920    inspect(bs_talevej_udkoblet(op_talevej(nr)),status);
  7  8973                 if status>0 then
  7  8974                 begin
  7  8975                   for ll:= 1 step 1 until terminalbeskrlængde//2 do
  7  8976                     terminaltab.ref(ll):= 0;
  7  8977                   skriv_skærm_bvs(nr);
  7  8978                   wait(bs_talevej_udkoblet(op_talevej(nr)));
  7  8979                 end;
  7  8980                 for i:= 1 step 1 until max_antal_kanaler do
  7  8981                 begin
  7  8982                   iaf:= (i-1)*kanalbeskrlængde;
  7  8983                   inspect(ss_samtale_nedlagt(i),status);
  7  8984                   if status>0 and
  7  8985                     tv_operatør(kanaltab.iaf.kanal_tilstand shift (-16))=nr then
  7  8986                   begin
  7  8987                     kanaltab.iaf.kanal_tilstand:=
  7  8988                       kanaltab.iaf.kanal_tilstand shift (-10) extract 6 shift 10;
  7  8989                     for ll:= 2 step 1 until kanalbeskrlængde//2 do
  7  8990                       kanaltab.iaf(ll):= 0;
  7  8991                     skriv_skærm_kanal(nr,i);
  7  8992                     repeat
  7  8993                       wait(ss_samtale_nedlagt(i));
  7  8994                       inspect(ss_samtale_nedlagt(i),status);
  7  8995                     until status=0;
  7  8996                   end;
  7  8997                 end;
  7  8998     940920*>    cursor(z_op(nr),1,1);
  7  8999                 setposition(z_op(nr),0,0);
  7  9000               end;
  6  9001               if (læsbit_ia(opkaldsflag,nr) or læsbit_ia(kanalflag,nr))
  6  9002                  and læsbit_ia(operatørmaske,nr) and skærmmåde = 0 then
  6  9003               begin
  7  9004     <*V*>       setposition(z_op(nr),0,0);
  7  9005                 if sætbit_ia(opkaldsflag,nr,0) =1 then
  7  9006                   skriv_skærm_opkaldskø(nr);
  7  9007                 if sætbit_ia(kanalflag,nr,0) =1 then
  7  9008                 begin
  8  9009                   for i:=1 step 1 until max_antal_kanaler do
  8  9010                     skriv_skærm_kanal(nr,i);
  8  9011                 end;
  7  9012                 cursor(z_op(nr),1,1);
  7  9013     <*V*>       setposition(z_op(nr),0,0);
  7  9014               end;
  6  9015              end;
  5  9016             end;
  4  9017             begin
  5  9018     \f

  5  9018     message procedure operatør side x+3 - 830310/hko;
  5  9019     
  5  9019               <* 5: samtale etableret *>
  5  9020     
  5  9020               res:= d.op_ref.resultat;
  5  9021               b_v:= d.op_ref.data(3) extract 4;
  5  9022               b_s:= d.op_ref.data(4);
  5  9023               signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  5  9024               if res = 3 and terminal_tab.ref(1) shift(-21) = 2 then
  5  9025               begin
  6  9026                 sætbit_i(terminal_tab.ref(1),21,1);
  6  9027                 sætbit_i(terminal_tab.ref(1),22,0);
  6  9028                 sætbit_i(terminal_tab.ref(1),2,0);
  6  9029                 sæt_hex_ciffer(terminal_tab.ref,3,b_v);
  6  9030                 terminal_tab.ref(2):= b_s;
  6  9031                 sæt_bit_i(terminal_tab.ref(1),2<* opt. *>,0);
  6  9032                 iaf:= (b_s extract 4 - 1)*kanal_beskr_længde;
  6  9033                 kanaltab.iaf.kanal_tilstand:= kanaltab.iaf.kanal_tilstand
  6  9034                   shift (-10) shift 10 + terminal_tab.ref(1) extract 10;
  6  9035     
  6  9035                 if læsbit_ia(operatørmaske,nr) and skærmmåde = 0 then
  6  9036                 begin
  7  9037     <*V*>         setposition(z_op(nr),0,0);
  7  9038                   skriv_skærm_b_v_s(nr);
  7  9039     <*V*>         setposition(z_op(nr),0,0);
  7  9040                 end;
  6  9041               end
  5  9042               else
  5  9043               if terminal_tab.ref(1) shift(-21) = 2 then
  5  9044               begin
  6  9045                 sætbit_i(terminal_tab.ref(1),22,0);
  6  9046                 sætbit_i(terminal_tab.ref(1),2,0);
  6  9047                 sæt_hex_ciffer(terminal_tab.ref,3,b_v);
  6  9048                 terminal_tab.ref(2):= 0;
  6  9049                 if læsbit_ia(operatørmaske,nr) and skærmmåde = 0 then
  6  9050                 begin
  7  9051     <*V*>         setposition(z_op(nr),0,0);
  7  9052                   cursor(z_op(nr),21,17);
  7  9053                   write(z_op(nr),<:EJ FORB:>);
  7  9054     <*V*>         setposition(z_op(nr),0,0);
  7  9055                 end;
  6  9056               end
  5  9057               else fejlreaktion(3<*prg.fejl*>,terminal_tab.ref(1) shift(-21),
  5  9058                      <:terminal tilstand:>,1);
  5  9059             end;
  4  9060     
  4  9060             begin
  5  9061     \f

  5  9061     message procedure operatør side x+4 - 810602/hko;
  5  9062     
  5  9062               <* 6: radiokanal ekskluderet *>
  5  9063     
  5  9063               læs_hex_ciffer(terminal_tab.ref,3,b_v);
  5  9064               pos:= d.op_ref.data(1);
  5  9065               signalch(d.op_ref.retur,op_ref,d.op_ref.optype);
  5  9066               indeks:= terminal_tab.ref(2);
  5  9067               b_s:= if indeks shift (-22) = 3 and indeks extract 22 = pos
  5  9068                     then indeks extract 4 else 0;
  5  9069               if b_v = pos then
  5  9070                 sæt_hex_ciffer(terminal_tab.ref,3,0);
  5  9071               if b_s = pos then
  5  9072               begin
  6  9073                 terminal_tab.ref(2):= 0;
  6  9074                 sætbit_i(terminal_tab.ref(1),21,0);
  6  9075                 sætbit_i(terminal_tab.ref(1),22,0);
  6  9076                 sætbit_i(terminal_tab.ref(1),2,0);
  6  9077               end;
  5  9078               if skærmmåde=0 then
  5  9079               begin
  6  9080                 if b_v = pos or b_s = pos then
  6  9081     <*V*>         skriv_skærm_b_v_s(nr);
  6  9082     <*V*>       skriv_skærm_kanal(nr,pos);
  6  9083                 cursor(z_op(nr),1,1);
  6  9084                 setposition(z_op(nr),0,0);
  6  9085               end;
  5  9086             end;
  4  9087     
  4  9087             begin
  5  9088     \f

  5  9088     message procedure operatør side x+5 - 950118/cl;
  5  9089     
  5  9089               <* 7: operatørmeddelelse *>
  5  9090               integer afs, kl, i;
  5  9091               real dato, t;
  5  9092     
  5  9092               cursor(z_op(nr),24,1);
  5  9093               write(z_op(nr),"esc" add 128,1,<:ÆK:>);
  5  9094               cursor(z_op(nr),23,1);
  5  9095               write(z_op(nr),"esc" add 128,1,<:ÆK:>);
  5  9096     
  5  9096               afs:= d.opref.data.op_spool_kilde;
  5  9097               dato:= systime(4,d.opref.data.op_spool_tid,t);
  5  9098               kl:= round t;
  5  9099               write(z_op(nr),<:! fra op:>,<<d>,afs,"sp",1,
  5  9100                 if afs=0 then <:SYSOP:> else string bpl_navn(afs));
  5  9101               i:= replacechar(1,'.');
  5  9102               disable write(z_op(nr),"sp",1,<<zd_dd_dd>,kl,"nl",1);
  5  9103               replacechar(1,i);
  5  9104               write(z_op(nr),d.opref.data.op_spool_text);
  5  9105     
  5  9105               if terminal_tab.ref.terminal_tilstand shift (-21) <> 3 then
  5  9106               begin
  6  9107                 if opk_alarm.tab.alarm_lgd > 0 and
  6  9108                    opk_alarm.tab.alarm_tilst < 1 and
  6  9109                    opk_alarm.tab.alarm_kmdo < 1
  6  9110                 then
  6  9111                 begin
  7  9112                   opk_alarm.tab.alarm_kmdo := 1;
  7  9113                   signalbin(bs_opk_alarm);
  7  9114                 end
  6  9115                 else
  6  9116                 if opk_alarm.tab.alarm_lgd = 0 then
  6  9117                   write(z_op(nr),"bel",1,"del",8,"bel",1,"del",8,"bel",1);
  6  9118               end;
  5  9119     
  5  9119               setposition(z_op(nr),0,0);
  5  9120               
  5  9120               signalch(d.opref.retur,opref,d.opref.optype);
  5  9121             end;
  4  9122     
  4  9122             begin
  5  9123     
  5  9123     <*+4*>    fejl_reaktion(3<*programfejl *>,aktion,<:case aktion:>,2);
  5  9124     <*-4*>
  5  9125             end
  4  9126           end; <* case aktion+6 *>
  3  9127     
  3  9127          until false;
  3  9128       op_trap:
  3  9129         skriv_operatør(zbillede,1);
  3  9130       end operatør;
  2  9131      
  2  9131     \f

  2  9131     message procedure op_cqftest side 1;
  2  9132     
  2  9132     procedure op_cqftest;
  2  9133     begin                     
  3  9134       integer array field opref, ref, ref1;
  3  9135       integer i, j, tv, cqf, res, pausetid;
  3  9136       real nu, næstetid, kommstart, kommslut;
  3  9137       
  3  9137       procedure skriv_op_cqftest(zud,omfang);
  3  9138         value                        omfang;
  3  9139         zone                     zud;
  3  9140         integer                      omfang;
  3  9141       begin
  4  9142         write(zud,"nl",1,<:+++ op-cqftest:>);
  4  9143         if omfang > 0 then
  4  9144         disable begin     
  5  9145           real t;
  5  9146     
  5  9146           trap(slut);
  5  9147           write(zud,"nl",1,
  5  9148             <:  opref:       :>,opref,"nl",1,
  5  9149             <:  ref:         :>,ref,"nl",1,
  5  9150             <:  i:           :>,i,"nl",1,
  5  9151             <:  tv:          :>,tv,"nl",1,
  5  9152             <:  cqf:         :>,cqf,"nl",1,
  5  9153             <:  res:         :>,res,"nl",1,
  5  9154             <:  pausetid:    :>,pausetid,"nl",1,
  5  9155             <:  nu:          :>,<<zddddd.dddddd>,systime(4,nu,t)+t/1000000,"nl",1,
  5  9156             <:  næste-tid:   :>,systime(4,næstetid,t)+t/1000000,"nl",1,
  5  9157             <::>);
  5  9158           skriv_coru(zud,coru_no(292));
  5  9159     slut:
  5  9160         end;
  4  9161       end skriv_op_cqftest;
  3  9162         
  3  9162       trap(op_cqf_trap);
  3  9163       stackclaim(1000);
  3  9164     
  3  9164       
  3  9164     <*+4*>if (testbit8 and overvåget) or testbit28 then
  3  9165             skriv_op_cqftest(out,0);
  3  9166     <*-4*>
  3  9167     
  3  9167     <*V*> waitch(cs_cqf,opref,op_optype,-1);
  3  9168       repeat
  3  9169         i:= sidste_tv_brugt; tv:= 0;
  3  9170         repeat
  3  9171           i:= (i mod max_antal_taleveje) + 1;
  3  9172           if tv_operatør(i) = 0 then tv:= i;
  3  9173         until (tv<>0) or (i=sidste_tv_brugt);
  3  9174     
  3  9174         if tv<>0 then
  3  9175         begin
  4  9176           tv_operatør(tv):= -1;
  4  9177           systime(1,0.0,nu); næste_tid:= nu + 60*60.0;
  4  9178           for cqf:= 1 step 1 until max_cqf do
  4  9179           begin
  5  9180             ref:= (cqf-1)*cqf_lgd;
  5  9181             if cqf_tabel.ref.cqf_bus > 0 and cqf_tabel.ref.cqf_næste_tid < nu then
  5  9182             begin
  6  9183               startoperation(opref,292,cs_cqf,1 shift 12 + 41);
  6  9184               d.opref.data(1):= tv;
  6  9185               d.opref.data(2):= cqf_tabel.ref.cqf_bus;
  6  9186                       disable if testbit19 then
  6  9187                       begin
  7  9188                         integer i; <*lav en trap-bar blok*>
  7  9189     
  7  9189                         trap(test19_trap);
  7  9190                         systime(1,0,kommstart);
  7  9191                         write(zrl,<<zd dd dd.dd >,now,<:CQF-test start OP :>);
  7  9192                         skriv_id(zrl,d.opref.data(2),0);
  7  9193     test19_trap:        outchar(zrl,'nl');   
  7  9194                       end;
  6  9195               signalch(cs_rad,opref,op_optype or gen_optype);
  6  9196     <*V*>     waitch(cs_cqf,opref,op_optype,-1);
  6  9197               res:= d.opref.resultat;
  6  9198     <*+2*>
  6  9199                       disable if testbit19 then
  6  9200                       begin
  7  9201                         integer i; <*lav en trap-bar blok*>
  7  9202     
  7  9202                         trap(test19_trap);
  7  9203                         systime(1,0,kommslut);
  7  9204                         write(zrl,<<zd dd dd.dd >,now,<:CQF-test  slut OP :>);
  7  9205                         if d.opref.data(7)=2 then outchar(zrl,'*');
  7  9206                         if d.opref.data(9)<>0 then 
  7  9207                         begin
  8  9208                           skriv_id(zrl,d.opref.data(9),0);
  8  9209                           outchar(zrl,' ');
  8  9210                         end;
  7  9211                         if d.opref.data(8)<>0 then
  7  9212                         begin
  8  9213                           skriv_id(zrl,d.opref.data(8),0);
  8  9214                           outchar(zrl,' ');
  8  9215                         end;
  7  9216                         if d.opref.data(12)<>0 then
  7  9217                         begin
  8  9218                           if d.opref.data(12) shift (-20) = 15 then
  8  9219                             write(zrl,<:OMR*:>)
  8  9220                           else
  8  9221                           if d.opref.data(12) shift (-20) = 14 then
  8  9222                             write(zrl,
  8  9223                               string områdenavn(d.opref.data(12) extract 20))
  8  9224                           else
  8  9225                             skriv_id(zrl,d.opref.data(12),0);
  8  9226                           outchar(zrl,' ');
  8  9227                         end;
  7  9228                         if d.opref.data(10)<>0 then
  7  9229                         begin
  8  9230                           skriv_id(zrl,d.opref.data(10),0);
  8  9231                           outchar(zrl,' ');
  8  9232                         end;
  7  9233                         write(zrl,<:res=:>,<<d>,res,<: btid=:>,
  7  9234                           <<dd.dd>,kommslut-kommstart);
  7  9235     test19_trap:        outchar(zrl,'nl');   
  7  9236                       end;
  6  9237     <*-2*>
  6  9238               if res=3 and cqf_tabel.ref.cqf_bus > 0 then
  6  9239               begin
  7  9240                 delay(3);
  7  9241                 d.opref.opkode:= 12 shift 12 + 41;
  7  9242                 d.opref.resultat:= 0;
  7  9243                       disable if testbit19 then
  7  9244                       begin
  8  9245                         integer i; <*lav en trap-bar blok*>
  8  9246     
  8  9246                         trap(test19_trap);
  8  9247                         systime(1,0,kommstart);
  8  9248                         write(zrl,<<zd dd dd.dd >,now,<:CQF-test start NE :>);
  8  9249     test19_trap:        outchar(zrl,'nl');   
  8  9250                       end;
  7  9251                 signalch(cs_rad,opref,op_optype or gen_optype);
  7  9252     <*V*>       waitch(cs_cqf,opref,op_optype,-1);
  7  9253     <*+2*>
  7  9254                       disable if testbit19 then
  7  9255                       begin
  8  9256                         integer i; <*lav en trap-bar blok*>
  8  9257     
  8  9257                         trap(test19_trap);
  8  9258                         systime(1,0,kommslut);
  8  9259                         write(zrl,<<zd dd dd.dd >,now,<:CQF-test  slut NE :>);
  8  9260                         write(zrl,<:res=:>,<<d>,d.opref.resultat,<: btid=:>,
  8  9261                           <<dd.dd>,kommslut-kommstart);
  8  9262     test19_trap:        outchar(zrl,'nl');   
  8  9263                       end;
  7  9264     <*-2*>
  7  9265                 if d.opref.resultat <> 3 then
  7  9266                   fejlreaktion(19,d.opref.resultat,<:CQF-test nedlæg resultat:>,1);
  7  9267                 if cqf_tabel.ref.cqf_bus > 0 and cqf_tabel.ref.cqf_fejl > 0 then
  7  9268                 begin
  8  9269                   startoperation(opref,292,cs_cqf,23);
  8  9270                   i:= 1;
  8  9271                   hægtstring(d.opref.data,i,<:CQF-test bus :>);
  8  9272                   anbringtal(d.opref.data,i,cqf_tabel.ref.cqf_bus,4);
  8  9273                   skriv_tegn(d.opref.data,i,' ');
  8  9274                   hægtstring(d.opref.data,i,string cqf_tabel.ref.cqf_id);
  8  9275                   hægtstring(d.opref.data,i,<: ok!:>);
  8  9276                   repeat afsluttext(d.opref.data,i) until (i mod 6) = 1;
  8  9277                   signalch(cs_io,opref,gen_optype);
  8  9278     <*V*>         waitch(cs_cqf,opref,gen_optype,-1);
  8  9279                 end;
  7  9280                 if cqf_tabel.ref.cqf_bus > 0 then
  7  9281                 begin
  8  9282                   cqf_tabel.ref.cqf_fejl:= 0;
  8  9283                   systime(1,0.0,cqf_tabel.ref.cqf_ok_tid);
  8  9284                   cqf_tabel.ref.cqf_næste_tid:= nu+60*60.0;
  8  9285                 end;
  7  9286               end <*res=3*>
  6  9287               else
  6  9288               if (res=20<*ej forb.*> or res=59<*radiofejl*>) and
  6  9289                  cqf_tabel.ref.cqf_bus > 0
  6  9290               then
  6  9291               begin
  7  9292                 cqf_tabel.ref.cqf_næste_tid:= nu + 60*60.0;
  7  9293                 cqf_tabel.ref.cqf_fejl:= cqf_tabel.ref.cqf_fejl + 1;
  7  9294                 if cqf_tabel.ref.cqf_fejl >= 2 then
  7  9295                 begin
  8  9296                   startoperation(opref,292,cs_cqf,23);
  8  9297                   i:= 1;
  8  9298                   hægtstring(d.opref.data,i,<:CQF-test bus :>);
  8  9299                   anbringtal(d.opref.data,i,cqf_tabel.ref.cqf_bus,4);
  8  9300                   skriv_tegn(d.opref.data,i,' ');
  8  9301                   hægtstring(d.opref.data,i,string cqf_tabel.ref.cqf_id);
  8  9302                   hægtstring(d.opref.data,i,<: ingen forbindelse!:>);
  8  9303                   repeat afsluttext(d.opref.data,i) until (i mod 6) = 1;
  8  9304                   signalch(cs_io,opref,gen_optype);
  8  9305     <*V*>         waitch(cs_cqf,opref,gen_optype,-1);
  8  9306                 end;
  7  9307               end;
  6  9308               delay(10);
  6  9309             end;
  5  9310             if cqf_tabel.ref.cqf_bus > 0 and 
  5  9311                cqf_tabel.ref.cqf_næste_tid < næste_tid
  5  9312             then næste_tid:= cqf_tabel.ref.cqf_næste_tid;
  5  9313           end; <*for cqf*>
  4  9314     
  4  9314           tv_operatør(tv):= 0; tv:= 0;
  4  9315           if op_cqf_tab_ændret then
  4  9316           begin
  5  9317             j:= skrivfil(1033,1,i);
  5  9318             if j<>0 then
  5  9319               fejlreaktion(6,j,<:CQF-test cqf-tabel:>,1);
  5  9320             sorter_cqftab(1,max_cqf);
  5  9321             for cqf:= 1 step 1 until max_cqf do
  5  9322             begin
  6  9323               ref:= (cqf-1)*cqf_lgd;
  6  9324               ref1:= (cqf-1)*cqf_id;
  6  9325               tofrom(fil(i).ref1,cqf_tabel.ref,cqf_id);
  6  9326             end;
  5  9327             op_cqf_tab_ændret:= false;
  5  9328           end;
  4  9329         end; <*tv*>
  3  9330     
  3  9330         systime(1,0.0,nu);
  3  9331         pausetid:= round(næste_tid - nu);
  3  9332         if pausetid < 30 then pausetid:= 30;
  3  9333     
  3  9333     <*V*> delay(pausetid);
  3  9334                  
  3  9334       until false;
  3  9335     
  3  9335     op_cqf_trap:
  3  9336       disable skriv_op_cqftest(zbillede,1);
  3  9337     end op_cqftest;
  2  9338     \f

  2  9338     message procedure op_spool side 1;
  2  9339     
  2  9339     procedure op_spool;
  2  9340     begin                     
  3  9341       integer array field opref, ref;
  3  9342       integer næste_tomme, i;
  3  9343       
  3  9343       procedure skriv_op_spool(zud,omfang);
  3  9344         value                      omfang;
  3  9345         zone                   zud;
  3  9346         integer                    omfang;
  3  9347       begin
  4  9348         write(zud,"nl",1,<:+++ op-spool:>);
  4  9349         if omfang > 0 then
  4  9350         disable begin     
  5  9351           real t;
  5  9352     
  5  9352           trap(slut);
  5  9353           write(zud,"nl",1,
  5  9354             <:  opref:       :>,opref,"nl",1,
  5  9355             <:  næste-tomme: :>,næste_tomme,"nl",1,
  5  9356             <:  ref:         :>,ref,"nl",1,
  5  9357             <:  i:           :>,i,"nl",1,
  5  9358             <::>);
  5  9359           skriv_coru(zud,coru_no(293));
  5  9360     slut:
  5  9361         end;
  4  9362       end skriv_op_spool;
  3  9363         
  3  9363       trap(op_spool_trap);
  3  9364       stackclaim(400);
  3  9365     
  3  9365       næste_tomme:= 0;
  3  9366       
  3  9366     <*+4*>if (testbit8 and overvåget) or testbit28 then
  3  9367             skriv_op_spool(out,0);
  3  9368     <*-4*>
  3  9369     
  3  9369       repeat
  3  9370     <*V*> waitch(cs_op_spool,opref,true,-1);
  3  9371         inspect(ss_op_spool_tomme,i);
  3  9372     
  3  9372         if d.opref.opkode extract 12 <> 37 then
  3  9373         begin
  4  9374           d.opref.resultat:= 31;
  4  9375           fejlreaktion(2<*opkode*>,d.opref.opkode extract 12,<:op_spool:>,1);
  4  9376         end
  3  9377         else
  3  9378         if i<=0 then
  3  9379           d.opref.resultat:= 32 <*ingen fri plads*>
  3  9380         else
  3  9381         begin
  4  9382     <*V*> wait(ss_op_spool_tomme);
  4  9383           ref:= næste_tomme*op_spool_postlgd;
  4  9384           næste_tomme:= (næste_tomme+1) mod op_spool_postantal;
  4  9385           i:= d.opref.opsize - data;
  4  9386           if i > (op_spool_postlgd - op_spool_text) then 
  4  9387             i:= (op_spool_postlgd - op_spool_text);
  4  9388           op_spool_buf.ref.op_spool_kilde:=
  4  9389             (if d.opref.kilde//100 = 2 then d.opref.kilde mod 100 else 0);
  4  9390           op_spool_buf.ref.op_spool_tid:= d.opref.tid;
  4  9391           tofrom(op_spool_buf.ref.op_spool_text,d.opref.data,i);
  4  9392           op_spool_buf.ref(op_spool_postlgd//2):=
  4  9393              op_spool_buf.ref(op_spool_postlgd//2) shift (-8) shift 8;
  4  9394           d.opref.resultat:= 3;
  4  9395     
  4  9395           signal(ss_op_spool_fulde);
  4  9396         end;
  3  9397     
  3  9397         signalch(d.opref.retur,opref,d.opref.optype);
  3  9398       until false;
  3  9399     
  3  9399     op_spool_trap:
  3  9400       disable skriv_op_spool(zbillede,1);
  3  9401     end op_spool;
  2  9402     \f

  2  9402     message procedure op_medd side 1;
  2  9403     
  2  9403     procedure op_medd;
  2  9404     begin
  3  9405       integer array field opref, ref;
  3  9406       integer næste_fulde, i;
  3  9407     
  3  9407       procedure skriv_op_medd(zud,omfang);
  3  9408         value                     omfang;
  3  9409         zone                  zud;
  3  9410         integer                   omfang;
  3  9411       begin
  4  9412         write(zud,"nl",1,<:+++ op-medd:>);
  4  9413         if omfang > 0 then
  4  9414         disable begin     
  5  9415           real t;
  5  9416     
  5  9416           trap(slut);
  5  9417           write(zud,"nl",1,
  5  9418             <:  opref:       :>,opref,"nl",1,
  5  9419             <:  næste-fulde: :>,næste_fulde,"nl",1,
  5  9420             <:  ref:         :>,ref,"nl",1,
  5  9421             <:  i:           :>,i,"nl",1,
  5  9422             <::>);
  5  9423           skriv_coru(zud,coru_no(294));
  5  9424     slut:
  5  9425         end;
  4  9426       end skriv_op_medd;
  3  9427         
  3  9427       trap(op_medd_trap);
  3  9428       næste_fulde:= 0;
  3  9429       stackclaim(400);
  3  9430       
  3  9430     <*+4*>if (testbit8 and overvåget) or testbit28 then
  3  9431             skriv_op_medd(out,0);
  3  9432     <*-4*>
  3  9433     
  3  9433       repeat
  3  9434     <*V*> wait(ss_op_spool_fulde);
  3  9435     <*V*> waitch(cs_op_medd,opref,true,-1);
  3  9436     
  3  9436         ref:= næste_fulde*op_spool_postlgd;
  3  9437         næste_fulde:= (næste_fulde+1) mod op_spool_postantal;
  3  9438     
  3  9438         startoperation(opref,curr_coruid,cs_op_medd,38);
  3  9439         d.opref.resultat:= 0;
  3  9440         tofrom(d.opref.data,op_spool_buf.ref,op_spool_postlgd);
  3  9441         signalch((if op_spool_buf.ref.op_spool_kilde = 0 then cs_op else cs_io),
  3  9442           opref,gen_optype);
  3  9443         signal(ss_op_spool_tomme);
  3  9444       until false;
  3  9445     
  3  9445     op_medd_trap:
  3  9446       disable skriv_op_medd(zbillede,1);
  3  9447     end op_medd;
  2  9448     \f

  2  9448     message procedure alarmur side 1;
  2  9449     
  2  9449     procedure alarmur;
  2  9450     begin
  3  9451       integer ventetid, nr;
  3  9452       integer array field opref, tab;
  3  9453       real nu;
  3  9454       
  3  9454       procedure skriv_alarmur(zud,omfang);
  3  9455         value                     omfang;
  3  9456         zone                  zud;
  3  9457         integer                   omfang;
  3  9458       begin
  4  9459         write(zud,"nl",1,<:+++ alarmur:>);
  4  9460         if omfang > 0 then
  4  9461         disable begin     
  5  9462           real t;
  5  9463     
  5  9463           trap(slut);
  5  9464           write(zud,"nl",1,
  5  9465             <:  ventetid:  :>,ventetid,"nl",1,
  5  9466             <:  nr:        :>,nr,"nl",1,
  5  9467             <:  opref:     :>,opref,"nl",1,
  5  9468             <:  tab:       :>,tab,"nl",1,
  5  9469             <:  nu:       :>,<< zddddd>,systime(4,nu,t),t,"nl",1,
  5  9470             <::>);
  5  9471           skriv_coru(zud,coru_no(295));
  5  9472     slut:
  5  9473         end;
  4  9474       end skriv_alarmur;
  3  9475         
  3  9475       trap(alarmur_trap);
  3  9476       stackclaim(400);
  3  9477     
  3  9477       systime(1,0.0,nu);
  3  9478       ventetid:= -1;
  3  9479       repeat
  3  9480         waitch(cs_opk_alarm_ur,opref,op_optype,ventetid);
  3  9481         if opref > 0 then
  3  9482           signalch(d.opref.retur,opref,op_optype);
  3  9483     
  3  9483         ventetid:= -1;
  3  9484         systime(1,0.0,nu);
  3  9485         for nr:= 1 step 1 until max_antal_operatører do
  3  9486         begin
  4  9487           tab:= (nr-1)*opk_alarm_tab_lgd;
  4  9488           if opk_alarm.tab.alarm_tilst > 0 and
  4  9489              opk_alarm.tab.alarm_lgd >= 0 then
  4  9490           begin
  5  9491             if (nu - opk_alarm.tab.alarm_start) >= opk_alarm.tab.alarm_lgd then
  5  9492             begin
  6  9493               opk_alarm.tab.alarm_kmdo:= 3;
  6  9494               signalbin(bs_opk_alarm);
  6  9495               if ventetid > 2 or ventetid=(-1) then ventetid:= 2;
  6  9496             end
  5  9497             else
  5  9498             if (nu - opk_alarm.tab.alarm_start) < ventetid or ventetid = (-1) then
  5  9499               ventetid:= (nu - opk_alarm.tab.alarm_start);
  5  9500           end;
  4  9501         end;
  3  9502         if ventetid=0 then ventetid:= 1;
  3  9503       until false;
  3  9504     
  3  9504     alarmur_trap:
  3  9505       disable skriv_alarmur(zbillede,1);
  3  9506     end alarmur;
  2  9507     \f

  2  9507     message procedure opkaldsalarmer side 1;
  2  9508     
  2  9508     procedure opkaldsalarmer;
  2  9509     begin
  3  9510       integer nr, ny_kommando, tilst, aktion, tt;
  3  9511       integer array field tab, opref, alarmop;
  3  9512     
  3  9512       procedure skriv_opkaldsalarmer(zud,omfang);
  3  9513         value                            omfang;
  3  9514         zone                         zud;
  3  9515         integer                          omfang;
  3  9516       begin
  4  9517         write(zud,"nl",1,<:+++ opkaldsalarmer:>);
  4  9518         if omfang>0 then
  4  9519         disable begin
  5  9520           real array field raf;
  5  9521           trap(slut);
  5  9522           raf:=0;
  5  9523           write(zud,"nl",1,
  5  9524               <:  nr:          :>,nr,"nl",1,
  5  9525               <:  ny-kommando: :>,ny_kommando,"nl",1,
  5  9526               <:  tilst:       :>,tilst,"nl",1,
  5  9527               <:  aktion:      :>,aktion,"nl",1,
  5  9528               <:  tt:          :>,false add tt,1,"nl",1,
  5  9529               <:  tab:         :>,tab,"nl",1,
  5  9530               <:  opref:       :>,opref,"nl",1,
  5  9531               <:  alarmop:     :>,alarmop,"nl",1,
  5  9532               <::>);
  5  9533           skriv_coru(zud,coru_no(296));
  5  9534     slut:
  5  9535         end;
  4  9536       end skriv_opkaldsalarmer;
  3  9537     
  3  9537       trap(opk_alarm_trap);
  3  9538       stackclaim(400);
  3  9539     
  3  9539     <*+2*>if (testbit8 and overvåget) or testbit28 then
  3  9540             skriv_opkaldsalarmer(out,0);
  3  9541     <*-2*>
  3  9542     
  3  9542       repeat
  3  9543         wait(bs_opk_alarm);
  3  9544         alarmop:= 0;
  3  9545         for nr:= 1 step 1 until max_antal_operatører do
  3  9546         begin
  4  9547           tab:= (nr-1)*opk_alarm_tab_lgd;
  4  9548           ny_kommando:= opk_alarm.tab.alarm_kmdo;
  4  9549           tilst:= opk_alarm.tab.alarm_tilst;
  4  9550           aktion:= case ny_kommando+1 of (
  4  9551             <*ingenting*> case tilst+1 of (4,4,4),
  4  9552             <*normal   *> case tilst+1 of (1,4,4),
  4  9553             <*nød      *> case tilst+1 of (2,2,4),
  4  9554             <*sluk     *> case tilst+1 of (4,3,3));
  4  9555           tt:= case aktion of ('B','C','F','-');
  4  9556           if tt<>'-' then
  4  9557           begin
  5  9558     <*V*>   waitch(cs_tvswitch_adgang,opref,op_optype,-1);
  5  9559             startoperation(opref,296,cs_opk_alarm,tt shift 12 + 44);
  5  9560             d.opref.data(1):= nr+16;
  5  9561             signalch(cs_talevejsswitch,opref,op_optype);
  5  9562     <*V*>   waitch(cs_opk_alarm,opref,op_optype,-1);
  5  9563             if d.opref.resultat = 3 then
  5  9564             begin
  6  9565               opk_alarm.tab.alarm_kmdo:= 0;
  6  9566               opk_alarm.tab.alarm_gtilst:= opk_alarm.tab.alarm_tilst;
  6  9567               opk_alarm.tab.alarm_tilst:= case aktion of (1,2,0);
  6  9568               if aktion < 3 then
  6  9569               begin
  7  9570                 systime(1,0.0,opk_alarm.tab.alarm_start);
  7  9571                 if alarmop = 0 then 
  7  9572                   waitch(cs_opk_alarm_ur_ret,alarmop,op_optype,-1);
  7  9573               end;
  6  9574             end;
  5  9575             signalch(cs_tvswitch_adgang,opref,op_optype or gen_optype);
  5  9576           end;
  4  9577         end;
  3  9578         if alarmop<>0 then
  3  9579         begin
  4  9580           startoperation(alarmop,296,cs_opk_alarm_ur_ret,0);
  4  9581           signalch(cs_opk_alarm_ur,alarmop,op_optype);
  4  9582         end;
  3  9583       until false;
  3  9584     
  3  9584     opk_alarm_trap:
  3  9585       disable skriv_opkaldsalarmer(zbillede,1);
  3  9586     end;  
  2  9587     
  2  9587     \f

  2  9587     message procedure tvswitch_input side 1 - 940810/cl;
  2  9588     
  2  9588       procedure tv_switch_input;
  2  9589       begin
  3  9590         integer array field opref;
  3  9591         integer tt,ant;
  3  9592         boolean ok;
  3  9593         integer array ia(1:128);
  3  9594     
  3  9594         procedure skriv_tvswitch_input(zud,omfang);
  3  9595           value                            omfang;
  3  9596           zone                         zud;
  3  9597           integer                          omfang;
  3  9598         begin
  4  9599           write(zud,"nl",1,<:+++ tvswitch-input:>);
  4  9600           if omfang>0 then
  4  9601           disable begin
  5  9602             real array field raf;
  5  9603             trap(slut);
  5  9604             raf:=0;
  5  9605             write(zud,"nl",1,
  5  9606               <:  opref:  :>,opref,"nl",1,
  5  9607               <:  ok:     :>,(if ok then <:TRUE:> else <:FALSE:>),"nl",1,
  5  9608               <:  ant:    :>,ant,"nl",1,
  5  9609               <:  tt:     :>,tt,"nl",1,
  5  9610               <::>);
  5  9611             write(zud,"nl",1,<:ia: :>);
  5  9612             skrivhele(zud,ia.raf,256,2);
  5  9613             skriv_coru(zud,coru_no(297));
  5  9614     slut:
  5  9615           end;
  4  9616         end skriv_tvswitch_input;
  3  9617     \f

  3  9617         boolean procedure læs_tlgr;
  3  9618         begin
  4  9619           integer kl,ch,i,pos,p;
  4  9620           long field lf;
  4  9621           boolean ok;
  4  9622     
  4  9622           integer procedure readch(z,c);
  4  9623             zone z; integer c;
  4  9624           begin
  5  9625             readch:= readchar(z,c);
  5  9626     <*+2*>  if testbit15 and overvåget then
  5  9627             disable begin
  6  9628               if ' ' <= c and c <= 'ü' then outchar(zrl,c)
  6  9629               else write(zrl,"<",1,<<d>,c,">",1);
  6  9630               if c='em' then write(zrl,<: *timeout*:>);
  6  9631             end;
  5  9632     <*-2*>
  5  9633           end;
  4  9634     
  4  9634           ok:= false; tt:=' ';
  4  9635           repeat
  4  9636             readchar(z_tv_in,ch);
  4  9637           until ch<>'em';
  4  9638           repeatchar(z_tv_in);
  4  9639     
  4  9639     <*+2*>if testbit15 and overvåget then
  4  9640           disable write(zrl,<<zd dd dd.dd >,now,<:switch-ind:  :>);
  4  9641     <*-2*>
  4  9642     
  4  9642           for kl:=readch(z_tv_in,ch) while ch<>'%' and ch<>'nl' and ch<>'em' do ;
  4  9643           if ch='%' then
  4  9644           begin
  5  9645             ant:= 0; pos:= 1; lf:= 4;
  5  9646             ok:= true;
  5  9647             for i:= 1 step 1 until 128 do ia(i):= 0;
  5  9648     
  5  9648             for kl:=readch(z_tv_in,ch) while kl = 6 do
  5  9649               skrivtegn(ia,pos,ch);
  5  9650     
  5  9650             p:=pos;
  5  9651             repeat afsluttext(ia,p) until p mod 6 = 1;
  5  9652     
  5  9652             if ia.lf=long<:ACK:> and ch='nl' then tt:= '+' else
  5  9653             if ia.lf=long<:NACK:> and ch='nl' then tt:= '-' else
  5  9654             if pos=2 and ch=' ' then tt:= ia(1) shift (-16) else ok:= false;
  5  9655     
  5  9655             if ok and ch=' ' then
  5  9656               for kl:=readch(z_tv_in,ch) while ch=' ' do ;
  5  9657     
  5  9657             while kl = 2 do
  5  9658             begin
  6  9659               i:= ch - '0';
  6  9660               for kl:=readch(z_tv_in,ch) while kl = 2 do i:= i*10 + ch-'0';
  6  9661               if ant < 128 then
  6  9662               begin
  7  9663                 ant:= ant+1;
  7  9664                 ia(ant):= i;
  7  9665               end
  6  9666               else
  6  9667                 ok:= false;
  6  9668               while ch=' ' do kl:=readch(z_tv_in,ch);
  6  9669             end;
  5  9670             if ch<>'nl' then ok:= false;
  5  9671             while ch<>'nl' and ch<>'em' do kl:=readch(z_tv_in,ch);
  5  9672     <* !!   setposition(z_tv_in,0,0); !! *>
  5  9673     <*+2*>  if testbit15 and overvåget then disable outchar(zrl,'nl');
  5  9674     <*-2*>
  5  9675     
  5  9675             if tt='+' or tt='-' or tt='Q' or tt='E' then
  5  9676               ok:= ok
  5  9677             else if tt='C' or tt='N' or
  5  9678                     tt='P' or tt='U' or tt='S' or tt='Z' then
  5  9679               ok:= ok and ant=1
  5  9680             else if tt='X' or tt='Y' then
  5  9681               ok:= ok and ant=2
  5  9682             else if tt='T' or tt='W' then
  5  9683               ok:= ok and ant=64
  5  9684             else if tt='R' then
  5  9685               ok:= ok and ant extract 1 = 0
  5  9686             else
  5  9687             begin
  6  9688               ok:= false;
  6  9689               fejlreaktion(21,tt,<:Ukendt telegramtype:>,2 shift 12 + 1);
  6  9690             end;
  5  9691     
  5  9691           end; <* if ch='%' *>
  4  9692           læs_tlgr:= ok;
  4  9693         end læs_tlgr;
  3  9694     \f

  3  9694         trap(tvswitch_input_trap);
  3  9695         stackclaim(400);
  3  9696         for ant:= 1 step 1 until 128 do ia(ant):= 0;
  3  9697     
  3  9697     <*+2*>if (testbit8 and overvåget) or testbit28 then
  3  9698             skriv_tvswitch_input(out,0);
  3  9699     <*-2*>
  3  9700     
  3  9700         repeat
  3  9701           ok:= læs_tlgr;
  3  9702           if ok then
  3  9703           begin
  4  9704     <*V*>   waitch(cs_tvswitch_input,opref,op_optype,-1);
  4  9705             start_operation(opref,297,cs_tvswitch_input,0);
  4  9706             d.opref.resultat:= tt shift 12 + ant;
  4  9707             tofrom(d.opref.data,ia,ant*2);
  4  9708             signalch(cs_talevejsswitch,opref,op_optype);
  4  9709           end;
  3  9710         until false;
  3  9711     
  3  9711     tvswitch_input_trap:
  3  9712     
  3  9712         disable skriv_tvswitch_input(zbillede,1);
  3  9713     
  3  9713       end tvswitch_input;
  2  9714     \f

  2  9714     message procedure tv_switch_adm side 1 - 940502/cl;
  2  9715     
  2  9715       procedure tv_switch_adm;
  2  9716       begin
  3  9717         integer array field opref;
  3  9718         integer rc;
  3  9719     
  3  9719         procedure skriv_tv_switch_adm(zud,omfang);
  3  9720           value                           omfang;
  3  9721           zone                        zud;
  3  9722           integer                         omfang;
  3  9723         begin
  4  9724           write(zud,"nl",1,<:+++ tv-switch-adm:>);
  4  9725           if omfang>0 then
  4  9726           disable begin
  5  9727             trap(slut);
  5  9728             write(zud,"nl",1,
  5  9729               <:  opref:  :>,opref,"nl",1,
  5  9730               <:  rc:     :>,rc,"nl",1,
  5  9731               <::>);
  5  9732             skriv_coru(zud,coru_no(298));
  5  9733     slut:
  5  9734           end;
  4  9735         end skriv_tv_switch_adm;
  3  9736     
  3  9736         trap(tv_switch_adm_trap);
  3  9737         stackclaim(400);
  3  9738     
  3  9738     <*+2*> if (testbit8 and overvåget) or testbit28 then
  3  9739              disable skriv_tv_switch_adm(out,0);
  3  9740     <*-2*>
  3  9741     
  3  9741     
  3  9741     
  3  9741     <* !!!!!!! PASSIVER KORUTINEN - cs_tvswitch_adm SIGNALERES ALDRIG !!!!!!! 
  3  9742         waitch(cs_tvswitch_adm,opref,op_optype,-1);
  3  9743     *>
  3  9744     
  3  9744         repeat
  3  9745           waitch(cs_tvswitch_adgang,opref,op_optype,-1);
  3  9746           start_operation(opref,298,cs_tvswitch_adm,'R' shift 12 + 44);
  3  9747           rc:= 0;
  3  9748           repeat
  3  9749             signalch(cs_talevejsswitch,opref,op_optype);
  3  9750     <*V*>   waitch(cs_tvswitch_adm,opref,op_optype,-1);
  3  9751             rc:= rc+1;
  3  9752           until rc=3 or d.opref.resultat=3;
  3  9753     
  3  9753           signalch(cs_tvswitch_adgang,opref,op_optype);
  3  9754     
  3  9754     <*V*> delay(15*60);
  3  9755         until false;
  3  9756     tv_switch_adm_trap:
  3  9757         disable skriv_tv_switch_adm(zbillede,1);
  3  9758       end;
  2  9759     \f

  2  9759     message procedure talevejsswitch side 1 -940426/cl;
  2  9760     
  2  9760       procedure talevejsswitch;
  2  9761       begin
  3  9762         integer tt, ant, ventetid;
  3  9763         integer array field opref, gemt_op, tab;
  3  9764         boolean ok;
  3  9765         integer array ia(1:128);
  3  9766     
  3  9766         procedure skriv_talevejsswitch(zud,omfang);
  3  9767           value                            omfang;
  3  9768           zone                         zud;
  3  9769           integer                          omfang;
  3  9770         begin
  4  9771           write(zud,"nl",1,<:+++ talevejsswitch:>);
  4  9772           if omfang>0 then
  4  9773           disable begin
  5  9774             real array field raf;
  5  9775             trap(slut);
  5  9776             raf:= 0;
  5  9777             write(zud,"nl",1,
  5  9778               <:  tt:      :>,tt,"nl",1,
  5  9779               <:  ant:     :>,ant,"nl",1,
  5  9780               <:  ventetid: :>,ventetid,"nl",1,
  5  9781               <:  opref:    :>,opref,"nl",1,
  5  9782               <:  gemt-op:  :>,gemt_op,"nl",1,
  5  9783               <:  tab:      :>,tab,"nl",1,
  5  9784               <:  ok:       :>,(if ok then <:TRUE:> else <:FALSE:>),"nl",1,
  5  9785               <::>);
  5  9786             write(zud,"nl",1,<:ia: :>);
  5  9787             skriv_hele(zud,ia.raf,256,2);
  5  9788             skriv_coru(zud,coru_no(299));
  5  9789     slut:
  5  9790           end;
  4  9791         end skriv_talevejsswitch;
  3  9792     \f

  3  9792         trap(tvswitch_trap);
  3  9793         stackclaim(400);
  3  9794         for ant:= 1 step 1 until 128 do ia(ant):= 0;
  3  9795     
  3  9795     <*+2*>if (testbit8 and overvåget) or testbit28 then
  3  9796             skriv_talevejsswitch(out,0);
  3  9797     <*-2*>
  3  9798     
  3  9798         ventetid:= -1; ant:= 0; tt:= ' ';
  3  9799         repeat
  3  9800           waitch(cs_talevejsswitch,opref,gen_optype or op_optype,ventetid);
  3  9801           if opref > 0 then
  3  9802           begin
  4  9803             if d.opref.opkode extract 12 = 0 then
  4  9804             begin <*input fra talevejsswitchen *>
  5  9805               for ant:= 1 step 1 until 128 do ia(ant):= 0;
  5  9806               tt:= d.opref.resultat shift (-12) extract 12;
  5  9807               ant:= d.opref.resultat extract 12;
  5  9808               tofrom(ia,d.opref.data,ant*2);
  5  9809               signalch(d.opref.retur,opref,d.opref.optype);
  5  9810     
  5  9810               if tt<>'+' and tt<>'-' then
  5  9811               begin
  6  9812                 write(z_tv_out,"%",1,<:ACK:>,"cr",1);
  6  9813                 setposition(z_tv_out,0,0);
  6  9814     <*+2*>      if testbit15 and overvåget then
  6  9815                 disable begin
  7  9816                   write(zrl,<<zd dd dd.dd >,now,<:switch-ud:  :>,<:%ACK:>);
  7  9817                   outchar(zrl,'nl');
  7  9818                 end;
  6  9819     <*-2*>
  6  9820               end;
  5  9821               if (tt='+' or tt='-') and gemt_op<>0 then
  5  9822               begin
  6  9823                 d.gemt_op.resultat:= (if tt='+' then 3 else 0);
  6  9824                 signalch(d.gemt_op.retur,gemt_op,d.gemt_op.optype);
  6  9825                 gemt_op:= 0;
  6  9826                 ventetid:= -1;
  6  9827               end
  5  9828               else
  5  9829               if tt='R' then
  5  9830               begin
  6  9831                 for i:= 1 step 2 until ant do
  6  9832                 begin
  7  9833                   if ia(i) <= max_antal_taleveje and
  7  9834                      17 <= ia(i+1) and ia(i+1) <= max_antal_operatører+16
  7  9835                   then
  7  9836                   begin
  8  9837                     if op_talevej(ia(i+1)-16)<>ia(i) then
  8  9838                       tv_operatør(op_talevej(ia(i+1)-16)):= 0;
  8  9839                     if tv_operatør(ia(i))<>ia(i+1)-16 then
  8  9840                       op_talevej(tv_operatør(ia(i))):= 0;
  8  9841                     tv_operatør(ia(i)):= ia(i+1)-16;
  8  9842                     op_talevej(ia(i+1)-16):= ia(i);
  8  9843                     sætbit_ia(samtaleflag,ia(i+1)-16,1);
  8  9844                   end
  7  9845                   else
  7  9846                   if ia(i+1) <= max_antal_taleveje and
  7  9847                      17 <= ia(i) and ia(i) <= max_antal_operatører+16
  7  9848                   then
  7  9849                   begin
  8  9850                     if op_talevej(ia(i))<>ia(i+1)-16 then
  8  9851                       tv_operatør(op_talevej(ia(i))):= 0;
  8  9852                     if tv_operatør(ia(i+1)-16)<>ia(i) then
  8  9853                       op_talevej(tv_operatør(ia(i+1)-16)):= 0;
  8  9854                     tv_operatør(ia(i+1)):= ia(i)-16;
  8  9855                     op_talevej(ia(i)-16):= ia(i+1);
  8  9856                     sætbit_ia(samtaleflag,ia(i)-16,1);
  8  9857                   end;
  7  9858                 end;
  6  9859                 signal_bin(bs_mobil_opkald);
  6  9860     <*+2*> if testbit15 and testbit16 and overvåget then
  6  9861            disable begin
  7  9862              skriv_talevejs_tab(zrl); outchar(zrl,'nl');
  7  9863            end;
  6  9864     <*-2*>
  6  9865               end <* tt='R' and ant>0 *> 
  5  9866               else
  5  9867               if tt='Y' then
  5  9868               begin
  6  9869                 if ia(1) <= max_antal_taleveje and
  6  9870                    17 <= ia(2) and ia(2) <= max_antal_operatører+16
  6  9871                 then
  6  9872                 begin
  7  9873                   if tv_operatør(ia(1))=ia(2)-16 and
  7  9874                      op_talevej(ia(2)-16)=ia(1)
  7  9875                   then tv_operatør(ia(1)):= op_talevej(ia(2)-16):= 0;
  7  9876                 end
  6  9877                 else
  6  9878                 if ia(2) <= max_antal_taleveje and
  6  9879                    17 <= ia(1) and ia(1) <= max_antal_operatører+16
  6  9880                 then
  6  9881                 begin
  7  9882                   if tv_operatør(ia(2))=ia(1)-16 and
  7  9883                      op_talevej(ia(1)-16)=ia(2)
  7  9884                   then tv_operatør(ia(2)):= op_talevej(ia(1)-16):= 0;
  7  9885                 end;
  6  9886               end
  5  9887               else
  5  9888               if tt='C' or tt='N' or tt='P' or tt='U' then
  5  9889               begin
  6  9890                 waitch(cs_op_iomedd,opref,gen_optype,-1);
  6  9891                 startoperation(opref,299,cs_op_iomedd,23);
  6  9892                 ant:= 1;
  6  9893                 hægtstring(d.opref.data,ant,<:switch - port :>);
  6  9894                 anbringtal(d.opref.data,ant,ia(1),2);
  6  9895                 if 17<=ia(1) and ia(1)<=16+max_antal_operatører then
  6  9896                 begin
  7  9897                   hægtstring(d.opref.data,ant,<: (:>);
  7  9898                   if bpl_navn(ia(1)-16)=long<::> then
  7  9899                   begin
  8  9900                     hægtstring(d.opref.data,ant,<:op:>);
  8  9901                     anbringtal(d.opref.data,ant,ia(1)-16,
  8  9902                       if ia(1)-16 > 9 then 2 else 1);
  8  9903                   end
  7  9904                   else hægtstring(d.opref.data,ant,string bpl_navn(ia(1)-16));
  7  9905                   skrivtegn(d.opref.data,ant,')');
  7  9906                 end;
  6  9907                 hægtstring(d.opref.data,ant,
  6  9908                   if tt='C' then <: Kontakt med kontrolbox etableret:> else
  6  9909                   if tt='N' then <: Kontakt med kontrolbox tabt:> else
  6  9910                   if tt='P' then <: Tilgængelig:> else
  6  9911                   if tt='U' then <: Ikke tilgængelig:> else <::>);
  6  9912                 repeat afsluttext(d.opref.data,ant) until ant mod 6 = 1;
  6  9913                 signalch(cs_io,opref,gen_optype);
  6  9914               end
  5  9915               else
  5  9916               if tt='Z' then
  5  9917               begin
  6  9918                 tab:= (ia(1)-16-1)*opk_alarm_tab_lgd;
  6  9919                 opk_alarm.tab.alarm_tilst:= opk_alarm.tab.alarm_gtilst;
  6  9920               end
  5  9921               else
  5  9922               begin
  6  9923                 <* ikke implementeret *>
  6  9924               end;
  5  9925             end
  4  9926             else
  4  9927             if d.opref.opkode extract 12 = 44 then
  4  9928             begin
  5  9929               tt:= d.opref.opkode shift (-12);
  5  9930               ok:= true;
  5  9931               if tt='E' or tt='Q' or tt='R' or tt='W' or tt='S' or tt='I' then
  5  9932               begin
  6  9933     <*+2*> if testbit15 and overvåget then
  6  9934            disable begin
  7  9935              write(zrl,<<zd dd dd.dd >,now,<:switch-ud:  %:>,false add tt,1);
  7  9936              outchar(zrl,'nl');
  7  9937            end;
  6  9938     <*-2*>
  6  9939                 write(z_tv_out,"%",1,false add tt,1,"cr",1);
  6  9940                 setposition(z_tv_out,0,0);
  6  9941               end
  5  9942               else
  5  9943               if tt='B' or tt='C' or tt='F' then
  5  9944               begin
  6  9945     <*+2*> if testbit15 and overvåget then
  6  9946            disable begin
  7  9947              write(zrl,<<zd dd dd.dd >,now,<:switch-ud:  %:>,false add tt,1,
  7  9948                " ",1,<<d>,d.opref.data(1));
  7  9949              outchar(zrl,'nl');
  7  9950            end;
  6  9951     <*-2*>
  6  9952                 write(z_tv_out,"%",1,false add tt,1," ",1,<<d>,
  6  9953                   d.opref.data(1),"cr",1);
  6  9954                 setposition(z_tv_out,0,0);
  6  9955               end
  5  9956               else
  5  9957               if tt='A' or tt='D' or tt='T' then
  5  9958               begin
  6  9959     <*+2*> if testbit15 and overvåget then
  6  9960            disable begin
  7  9961              write(zrl,<<zd dd dd.dd >,now,<:switch-ud:  %:>,false add tt,1,
  7  9962                " ",1,<<d>,d.opref.data(1)," ",1,d.opref.data(2));
  7  9963              outchar(zrl,'nl');
  7  9964            end;
  6  9965     <*-2*>
  6  9966                 write(z_tv_out,"%",1,false add tt,1," ",1,<<d>,
  6  9967                   d.opref.data(1)," ",1,d.opref.data(2),"cr",1);
  6  9968                 setposition(z_tv_out,0,0);
  6  9969               end
  5  9970               else
  5  9971                 ok:= false;
  5  9972               if ok then
  5  9973               begin
  6  9974                 gemt_op:= opref;
  6  9975                 ventetid:= 2;
  6  9976               end
  5  9977               else
  5  9978               begin
  6  9979                 d.opref.resultat:= 4;
  6  9980                 signalch(d.opref.retur,opref,d.opref.optype);
  6  9981               end;
  5  9982             end;
  4  9983           end
  3  9984           else
  3  9985           if gemt_op<>0 then
  3  9986           begin <*timeout*>
  4  9987             d.gemt_op.resultat:= 0;
  4  9988             signalch(d.gemt_op.retur,gemt_op,d.gemt_op.optype);
  4  9989             gemt_op:= 0;
  4  9990             ventetid:= -1;
  4  9991     <*+2*> if testbit15 and overvåget then
  4  9992            disable begin
  5  9993              write(zrl,<<zd dd dd.dd >,now,<:switch:     *Operation Timeout*:>);
  5  9994              outchar(zrl,'nl');
  5  9995            end;
  4  9996     <*-2*>
  4  9997           end;
  3  9998         until false;
  3  9999     tvswitch_trap:
  3 10000         disable skriv_talevejsswitch(zbillede,1);
  3 10001       end talevejsswitch;
  2 10002     
  2 10002     \f

  2 10002     message garage_erklæringer side 1 - 810415/hko;
  2 10003     
  2 10003       zone array z_gar(max_antal_garageterminaler,16,1,gar_fejl);
  2 10004     
  2 10004       procedure gar_fejl(z,s,b);
  2 10005         integer            s,b;
  2 10006         zone             z;
  2 10007       begin
  3 10008         disable begin
  4 10009           integer array iz(1:20);
  4 10010           integer i,j,k;
  4 10011           integer array field iaf;
  4 10012           real array field raf;
  4 10013     
  4 10013           getzone6(z,iz);
  4 10014           iaf:=raf:=2;
  4 10015           getnumber(iz.raf,7,j);
  4 10016     
  4 10016           iaf:=(max_antal_operatører+j)*terminal_beskr_længde;
  4 10017           k:=1;
  4 10018     
  4 10018           j:= terminal_tab.iaf.terminal_tilstand;
  4 10019           if j shift(-21) < 6 and s <> (1 shift 21 +2) then
  4 10020             fejlreaktion(17<*ydre enhed status*>,s,string iz.raf(increase(k)),
  4 10021                          1 shift 12 <*binært*> +1 <*fortsæt*>);
  4 10022           if s <> (1 shift 21 +2) then
  4 10023             terminal_tab.iaf.terminal_tilstand:= 6 shift 21
  4 10024               + terminal_tab.iaf.terminal_tilstand extract 21;
  4 10025           if terminal_tab.iaf.terminal_tilstand shift(-21)<>0 then
  4 10026           begin
  5 10027             z(1):=real <:<'?'><'em'>:>;
  5 10028             b:=2;
  5 10029           end;
  4 10030         end; <*disable*>
  3 10031       end gar_fejl;
  2 10032     
  2 10032       integer cs_gar;
  2 10033       integer array cs_garage(1:max_antal_garageterminaler);
  2 10034     \f

  2 10034     message procedure h_garage side 1 - 810520/hko;
  2 10035     
  2 10035       <* hovedmodulkorutine for garageterminaler *>
  2 10036       procedure h_garage;
  2 10037       begin
  3 10038         integer array field op_ref;
  3 10039         integer k,dest_sem;
  3 10040         procedure skriv_hgarage(zud,omfang);
  3 10041           value                     omfang;
  3 10042           zone                  zud;
  3 10043           integer                   omfang;
  3 10044           begin integer i;
  4 10045     
  4 10045             i:=write(zud,"nl",1,<:+++ hovedmodul garage:>);
  4 10046             write(zud,"sp",26-i);
  4 10047             if omfang>0 then
  4 10048             disable begin
  5 10049               integer x;
  5 10050               trap(slut);
  5 10051               write(zud,"nl",1,
  5 10052                 <:  op_ref:    :>,op_ref,"nl",1,
  5 10053                 <:  k:         :>,k,"nl",1,
  5 10054                 <:  dest_sem:  :>,dest_sem,"nl",1,
  5 10055                 <::>);
  5 10056               skriv_coru(zud,coru_no(300));
  5 10057     slut:
  5 10058             end;
  4 10059          end skriv_hgarage;
  3 10060     
  3 10060       trap(hgar_trap);
  3 10061       stack_claim(if cm_test then 198 else 146);
  3 10062     
  3 10062     <*+2*>
  3 10063       if testbit16 and overvåget  or testbit28 then
  3 10064         skriv_hgarage(out,0);
  3 10065     <*-2*>
  3 10066     \f

  3 10066     message procedure h_garage side 2 - 811105/hko;
  3 10067     
  3 10067       repeat
  3 10068         wait_ch(cs_gar,op_ref,true,-1);
  3 10069     <*+4*>
  3 10070         if (d.op_ref.optype and (gar_optype or gen_optype)) extract 12 =0
  3 10071         then fejlreaktion(12<*operationstype*>,op_ref,<:garage:>,1);
  3 10072     <*-4*>
  3 10073     
  3 10073         k:=d.op_ref.opkode extract 12;
  3 10074         dest_sem:=
  3 10075           if k=0 then cs_garage(d.op_ref.kilde mod 100) else
  3 10076           if k=7 or k=8 then cs_garage(d.op_ref.data(1))
  3 10077           else -1;
  3 10078     <*+4*>
  3 10079         if dest_sem=-1 then
  3 10080         begin
  4 10081           fejl_reaktion(2<*operationskode*>,k,<:hovedmodul garage:>,1);
  4 10082           signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  4 10083         end
  3 10084         else
  3 10085     <*-4*>
  3 10086         if k=7<*inkluder*> then
  3 10087         begin
  4 10088           iaf:=(max_antal_operatører+ d.op_ref.data(1))*terminal_beskr_længde;
  4 10089           if terminal_tab.iaf.terminal_tilstand shift(-21)=0 then
  4 10090           begin
  5 10091             d.op_ref.resultat:=3;
  5 10092             signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  5 10093             dest_sem:=-2;
  5 10094           end;
  4 10095         end
  3 10096         else
  3 10097         if k=8<*ekskluder*> then <*afbryd kommando v. timeout*>
  3 10098         begin
  4 10099           iaf:=(max_antal_operatører+d.op_ref.data(1))*terminal_beskr_længde;
  4 10100           terminal_tab.iaf.terminal_tilstand:= 7 shift 21
  4 10101             +terminal_tab.iaf.terminal_tilstand extract 21;
  4 10102         end;
  3 10103         if dest_sem>0 then
  3 10104           signal_ch(dest_sem,op_ref,d.op_ref.optype);
  3 10105       until false;
  3 10106     
  3 10106     hgar_trap:
  3 10107       disable skriv_hgarage(zbillede,1);
  3 10108       end h_garage;
  2 10109     \f

  2 10109     message procedure garage side 1 - 830310/cl;
  2 10110     
  2 10110       procedure garage(nr);
  2 10111         value          nr;
  2 10112         integer        nr;
  2 10113       begin
  3 10114         integer array field op_ref,ref;
  3 10115         integer i,kode,aktion,status,opgave,retur_sem,
  3 10116                 pos,indeks,sep,sluttegn,vogn,ll;
  3 10117     
  3 10117         procedure skriv_garage(zud,omfang);
  3 10118           value                    omfang;
  3 10119           zone                 zud;
  3 10120           integer                  omfang;
  3 10121           begin integer i;
  4 10122     
  4 10122             i:=write(zud,"nl",1,<:+++ garage nr::>,nr);
  4 10123             write(zud,"sp",26-i);
  4 10124             if omfang > 0 then
  4 10125             disable begin integer x;
  5 10126               trap(slut);
  5 10127               write(zud,"nl",1,
  5 10128                 <:  op-ref:    :>,op_ref,"nl",1,
  5 10129                 <:  kode:      :>,kode,"nl",1,
  5 10130                 <:  ref:       :>,ref,"nl",1,
  5 10131                 <:  i:         :>,i,"nl",1,
  5 10132                 <:  aktion:    :>,aktion,"nl",1,
  5 10133                 <:  retur-sem: :>,retur_sem,"nl",1,
  5 10134                 <:  vogn:      :>,vogn,"nl",1,
  5 10135                 <:  ll:        :>,ll,"nl",1,
  5 10136                 <:  status:    :>,status,"nl",1,
  5 10137                 <:  opgave:    :>,opgave,"nl",1,
  5 10138                 <:  pos:       :>,pos,"nl",1,
  5 10139                 <:  indeks:    :>,indeks,"nl",1,
  5 10140                 <:  sep:       :>,sep,"nl",1,
  5 10141                 <:  sluttegn:  :>,sluttegn,"nl",1,
  5 10142                 <::>);
  5 10143               skriv_coru(zud,coru_no(300+nr));
  5 10144     slut:
  5 10145             end;
  4 10146           end skriv_garage;
  3 10147     \f

  3 10147     message procedure garage side 2 - 830310/hko;
  3 10148     
  3 10148         trap(gar_trap);
  3 10149         stack_claim((if cm_test then 200 else 146)+24+48+80+75);
  3 10150     
  3 10150         ref:= (max_antal_operatører+nr)*terminal_beskr_længde;
  3 10151     
  3 10151     <*+2*>
  3 10152         if testbit16 and overvåget or testbit28 then
  3 10153           skriv_garage(out,0);
  3 10154     <*-2*>
  3 10155     
  3 10155     <* attention simulering
  3 10156     *>
  3 10157       if terminal_tab.ref.terminal_tilstand shift (-21) = 0 then
  3 10158       begin
  4 10159         wait_ch(cs_att_pulje,op_ref,true,-1);
  4 10160         start_operation(op_ref,300+nr,cs_garage(nr),0);
  4 10161         signal_ch(cs_garage(nr),op_ref,gen_optype);
  4 10162       end;
  3 10163     <*
  3 10164     *>
  3 10165     \f

  3 10165     message procedure garage side 3 - 830310/hko;
  3 10166     
  3 10166         repeat
  3 10167     
  3 10167     <*V*> wait_ch(cs_garage(nr),
  3 10168                   op_ref,
  3 10169                   true,
  3 10170                   -1<*timeout*>);
  3 10171     <*+2*>
  3 10172           if testbit17 and overvåget then
  3 10173           disable begin
  4 10174             write(out,"nl",1,<:operation fra cs:>,<<d>,cs_garage(nr),
  4 10175                              <: til garage :>,nr);
  4 10176             skriv_op(out,op_ref);
  4 10177           end;
  3 10178     <*-2*>
  3 10179     
  3 10179           kode:= d.op_ref.op_kode;
  3 10180           retur_sem:= d.op_ref.retur;
  3 10181           i:= terminal_tab.ref.terminal_tilstand;
  3 10182           status:= i shift(-21);
  3 10183           opgave:=
  3 10184             if kode=0 then 1 <* indlæs kommando *> else
  3 10185             if kode=7 then 2 <* inkluder        *> else
  3 10186             if kode=8 then 3 <* ekskluder       *> else
  3 10187             0; <* afvises *>
  3 10188     
  3 10188           aktion:= case status +1 of(
  3 10189           <* status         *> <* opgave:         0   1   2   3 *>
  3 10190           <* 0 klar         *>(case opgave+1 of(  0,  1, -4,  3)),
  3 10191           <* 1 -            *>(-1),<* ulovlig tilstand *>
  3 10192           <* 2 -            *>(-1),<* ulovlig tilstand *>
  3 10193           <* 3 stoppet      *>(case opgave+1 of(  0,  2,  2,  3)),
  3 10194           <* 4 noneksist    *>(-2),<* ulovligt garageterminalnr *>
  3 10195           <* 5 -            *>(-1),<* ulovlig tilstand *>
  3 10196           <* 6 stop v. fejl *>(case opgave+1 of(  0, -5,  2,  3)),
  3 10197           <* 7 ej knyttet   *>(case opgave+1 of(  0, -5,  2,  3)),
  3 10198                               -1);
  3 10199     \f

  3 10199     message procedure garage side 4 - 810424/hko;
  3 10200     
  3 10200           case aktion+6 of
  3 10201           begin
  4 10202             begin
  5 10203               <*-5: terminal optaget *>
  5 10204     
  5 10204               d.op_ref.resultat:= 16;
  5 10205               afslut_operation(op_ref,cs_att_pulje); <*telex*>
  5 10206             end;
  4 10207     
  4 10207             begin
  5 10208               <*-4: operation uden virkning *>
  5 10209     
  5 10209               afslut_operation(op_ref,-1);
  5 10210             end;
  4 10211     
  4 10211             begin
  5 10212               <*-3: ulovlig operationskode *>
  5 10213     
  5 10213               fejl_reaktion(2<*operationskode*>,kode,<:ulovlig:>,1);
  5 10214               afslut_operation(op_ref,-1);
  5 10215             end;
  4 10216     
  4 10216             begin
  5 10217               <*-2: ulovligt garageterminal_nr *>
  5 10218     
  5 10218               fejl_reaktion(3<*programfejl*>,nr,<: ikke eksisterende garage:>,1);
  5 10219               afslut_operation(op_ref,cs_att_pulje); <*telex*>
  5 10220             end;
  4 10221     
  4 10221             begin
  5 10222               <*-1: ulovlig operatørtilstand *>
  5 10223     
  5 10223               fejl_reaktion(3<*programfejl*>,status,<: ulovlig garage-status:>,1);
  5 10224               afslut_operation(op_ref,-1);
  5 10225             end;
  4 10226     
  4 10226             begin
  5 10227               <* 0: ikke implementeret *>
  5 10228     
  5 10228               fejl_reaktion(2<*operationskode*>,kode,<: ikke implementeret:>,1);
  5 10229               afslut_operation(op_ref,-1);
  5 10230             end;
  4 10231     
  4 10231             begin
  5 10232     \f

  5 10232     message procedure garage side 5 - 851001/cl;
  5 10233     
  5 10233               <* 1: indlæs kommando *>
  5 10234     
  5 10234     
  5 10234     <*V*>     læs_kommando(z_gar(nr),300+nr,op_ref,pos,indeks,sep,sluttegn);
  5 10235     
  5 10235               if d.op_ref.resultat > 3 then
  5 10236               begin
  6 10237     <*V*>       setposition(z_gar(nr),0,0);
  6 10238                 if sluttegn<>'nl' then outchar(z_gar(nr),'nl');
  6 10239                 skriv_kvittering(z_gar(nr),op_ref,pos,
  6 10240                                  d.op_ref.resultat);
  6 10241               end
  5 10242               else if d.op_ref.resultat>0 then
  5 10243               begin <*godkendt*>
  6 10244                 kode:=d.op_ref.opkode;
  6 10245                 i:= kode extract 12;
  6 10246                 j:= if kode=11 or kode=12 or kode=20 or kode=24 then 1
  6 10247                     else if kode=9 or kode=10 then 2
  6 10248                                          else 0;
  6 10249                 if j > 0 then
  6 10250                 begin
  7 10251                   case j of
  7 10252                   begin
  8 10253                     begin
  9 10254     \f

  9 10254     message procedure garage side 6 - 851001/cl;
  9 10255     
  9 10255                       <* 1 indsæt/udtag/flyt bus i vogntabel *>
  9 10256                       integer vogn,ll;
  9 10257                       integer array field vtop;
  9 10258     
  9 10258                       vogn:=ia(1);
  9 10259                       ll:=ia(2);
  9 10260     <*V*>             wait_ch(cs_vt_adgang,
  9 10261                               vt_op,
  9 10262                               gen_optype,
  9 10263                               -1<*timeout sek*>);
  9 10264                       start_operation(vtop,300+nr,cs_garage(nr),
  9 10265                                       kode);
  9 10266                       d.vt_op.data(1):=vogn;
  9 10267                       if kode=11 or kode=20 or kode=24 then d.vt_op.data(2):=ll;
  9 10268                       indeks:= vt_op;
  9 10269                       signal_ch(cs_vt,
  9 10270                                 vt_op,
  9 10271                                 gen_optype or gar_optype);
  9 10272     
  9 10272     <*V*>             wait_ch(cs_garage(nr),
  9 10273                               vt_op,
  9 10274                               gar_optype,
  9 10275                               -1<*timeout sek*>);
  9 10276     <*+2*>            if testbit18 and overvåget then
  9 10277                       disable begin
 10 10278                         write(out,"nl",1,<:garage :>,<<d>,nr,
 10 10279                               <:: operation retur fra vt:>);
 10 10280                         skriv_op(out,vt_op);
 10 10281                       end;
  9 10282     <*-2*>
  9 10283     <*+4*>            if vt_op<>indeks then
  9 10284                         fejl_reaktion(11<*fremmede op*>,op_ref,
  9 10285                                       <:garage-kommando:>,0);
  9 10286     <*-4*>
  9 10287     <*V*>             setposition(z_gar(nr),0,0);
  9 10288                       if sluttegn<>'nl' then outchar(z_gar(nr),'nl');
  9 10289                       skriv_kvittering(z_gar(nr),if d.vt_op.resultat = 11 or
  9 10290                         d.vt_op.resultat = 12 then d.vt_op.data(3)
  9 10291                         else vt_op,-1,d.vt_op.resultat);
  9 10292                       d.vt_op.optype:=gen_optype or vtoptype;
  9 10293                       disable afslut_operation(vt_op,cs_vt_adgang);
  9 10294                     end;
  8 10295     
  8 10295                     begin
  9 10296     \f

  9 10296     message procedure garage side 6a - 830310/cl;
  9 10297     
  9 10297                     <* 2 vogntabel,linienr/-,busnr *>
  9 10298     
  9 10298                     d.op_ref.retur:= cs_garage(nr);
  9 10299                     tofrom(d.op_ref.data,ia,10);
  9 10300                     indeks:= op_ref;
  9 10301                     signal_ch(cs_vt,op_ref,gen_optype or gar_optype);
  9 10302                     wait_ch(cs_garage(nr),
  9 10303                             op_ref,
  9 10304                             gar_optype,
  9 10305                             -1<*timeout*>);
  9 10306     <*+2*>          if testbit18 and overvåget then
  9 10307                     disable begin
 10 10308                       write(out,"nl",1,<:garage operation retur fra vt:>);
 10 10309                       skriv_op(out,op_ref);
 10 10310                     end;
  9 10311     <*-2*>
  9 10312     <*+4*>
  9 10313                     if indeks <> op_ref then
  9 10314                       fejlreaktion(11<*fremmed post*>,op_ref,<:garage komm:>,0);
  9 10315     <*-4*>
  9 10316                     i:= d.op_ref.resultat;
  9 10317                     if i = 0 or i > 3 then
  9 10318                     begin
 10 10319     <*V*>             setposition(z_gar(nr),0,0);
 10 10320                       skriv_kvittering(z_gar(nr),op_ref,-1,d.op_ref.resultat);
 10 10321                     end
  9 10322                     else
  9 10323                     begin
 10 10324                       integer antal,fil_ref;
 10 10325                       antal:= d.op_ref.data(6);
 10 10326                       fil_ref:= d.op_ref.data(7);
 10 10327     <*V*>             setposition(z_gar(nr),0,0);
 10 10328                       write(z_gar(nr),"*",24,"sp",6,
 10 10329                         <:vogntabeludskrift:>,"sp",6,"*",24,"nl",2);
 10 10330     <*V*>             setposition(z_gar(nr),0,0);
 10 10331     \f

 10 10331     message procedure garage side 6c - 841213/cl;
 10 10332     
 10 10332                       pos:= 1;
 10 10333                       while pos <= antal do
 10 10334                       begin
 11 10335                         integer bogst,løb;
 11 10336     
 11 10336                         disable i:= læs_fil(fil_ref,pos,j);
 11 10337                         if i <> 0 then
 11 10338                           fejlreaktion(5<*læs_fil*>,i,<:garage: vo,l/vo,b:>,0)
 11 10339                         else
 11 10340                         begin
 12 10341                           vogn:= fil(j,1) shift (-24) extract 24;
 12 10342                           løb:= fil(j,1) extract 24;
 12 10343                           if d.op_ref.opkode=9 then
 12 10344                             begin i:=vogn; vogn:=løb; løb:=i; end;
 12 10345                           ll:= løb shift (-12) extract 10;
 12 10346                           bogst:= løb shift (-7) extract 5;
 12 10347                           if bogst > 0 then bogst:= bogst +'A'-1;
 12 10348                           løb:= løb extract 7;
 12 10349                           vogn:= vogn extract 14;
 12 10350                           i:= d.op_ref.opkode-8;
 12 10351                           for i:= i,i+1 do
 12 10352                           begin
 13 10353                             j:= (i+1) extract 1;
 13 10354                             case j +1 of
 13 10355                             begin
 14 10356                               write(z_gar(nr),"sp",(bogst=0) extract 1,<<ddd>,ll,
 14 10357                                 false add bogst,1,"/",1,<<d__>,løb);
 14 10358                               write(z_gar(nr),<<dddd>,vogn,"sp",1);
 14 10359                             end;
 13 10360                           end;
 12 10361                           if pos mod 5 = 0 then
 12 10362                           begin
 13 10363                             write(z_gar(nr),"nl",1);
 13 10364     <*V*>                   setposition(z_gar(nr),0,0);
 13 10365                           end
 12 10366                           else write(z_gar(nr),"sp",3);
 12 10367                         end;
 11 10368                         pos:=pos+1;
 11 10369                       end;
 10 10370                       write(z_gar(nr),"nl",1,"*",77,"nl",1);
 10 10371     \f

 10 10371     message procedure garage side 6d- 830310/cl;
 10 10372     
 10 10372                       d.opref.opkode:=104; <*slet-fil*>
 10 10373                       d.op_ref.data(4):=filref;
 10 10374                       indeks:=op_ref;
 10 10375                       signal_ch(cs_slet_fil,op_ref,gen_optype or gar_optype);
 10 10376     <*V*>             wait_ch(cs_garage(nr),op_ref,gar_optype,-1);
 10 10377     
 10 10377     <*+2*>            if testbit18 and overvåget then
 10 10378                       disable begin
 11 10379                         write(out,"nl",1,<:garage, slet-fil retur:>);
 11 10380                         skriv_op(out,op_ref);
 11 10381                       end;
 10 10382     <*-2*>
 10 10383     
 10 10383     <*+4*>            if op_ref<>indeks then
 10 10384                         fejlreaktion(11<*fr.post*>,op_ref,<:garage,slet-fil:>,0);
 10 10385     <*-4*>
 10 10386                       if d.op_ref.data(9)<>0 then
 10 10387                         fejl_reaktion(3<*prg.fejl*>,d.op_ref.data(9),
 10 10388                             <:garage, slet_fil:>,1);
 10 10389                     end;
  9 10390     \f

  9 10390     message procedure garage side 7 -810424/hko;
  9 10391     
  9 10391                     end;
  8 10392     
  8 10392     <*+4*>          fejl_reaktion(3<*programfejl*>,j,<:case 'opkode':>,2);
  8 10393     <*-4*>
  8 10394                   end;<*case j *>
  7 10395                 end <* j > 0 *>
  6 10396                 else
  6 10397                 begin
  7 10398     <*V*>         setposition(z_gar(nr),0,0);
  7 10399                   if sluttegn<>'nl' then outchar(z_gar(nr),'nl');
  7 10400                   skriv_kvittering(z_gar(nr),op_ref,pos,
  7 10401                                    4 <*kommando ukendt *>);
  7 10402                 end;
  6 10403               end;<* godkendt *>
  5 10404     
  5 10404     <*V*>     setposition(z_gar(nr),0,0);
  5 10405     
  5 10405               d.op_ref.opkode:=0; <*telex*>
  5 10406     
  5 10406               disable afslut_operation(op_ref,cs_gar);
  5 10407             end; <* indlæs kommando *>
  4 10408     
  4 10408             begin
  5 10409     \f

  5 10409     message procedure garage side 8 - 841213/cl;
  5 10410     
  5 10410                   <* 2: inkluder *>
  5 10411     
  5 10411               d.op_ref.resultat:=3;
  5 10412               afslut_operation(op_ref,-1);
  5 10413               monitor(8)reserve:(z_gar(nr),0,ia);
  5 10414               terminal_tab.ref.terminal_tilstand:=
  5 10415                 terminal_tab.ref.terminal_tilstand extract 21;
  5 10416     <*V*>     wait_ch(cs_att_pulje,op_ref,true,-1);
  5 10417               start_operation(op_ref,300+nr,cs_att_pulje,0);
  5 10418               signal_ch(cs_garage(nr),op_ref,gen_optype);
  5 10419             end;
  4 10420     
  4 10420             begin
  5 10421     
  5 10421               <* 3: ekskluder *>
  5 10422               d.op_ref.resultat:= 3;
  5 10423               terminal_tab.ref.terminal_tilstand:= 7 shift 21 +
  5 10424                 terminal_tab.ref.terminal_tilstand extract 21;
  5 10425               monitor(10)release:(z_gar(nr),0,ia);
  5 10426               afslut_operation(op_ref,-1);
  5 10427     
  5 10427             end;
  4 10428     
  4 10428     <*+4*>  fejl_reaktion(3<*programfejl *>,aktion,<:case aktion:>,2);
  4 10429     <*-4*>
  4 10430           end; <* case aktion+6 *>
  3 10431     
  3 10431          until false;
  3 10432       gar_trap:
  3 10433         skriv_garage(zbillede,1);
  3 10434       end garage;
  2 10435     
  2 10435     \f

  2 10435     message procedure radio_erklæringer side 1 - 820304/hko;
  2 10436     
  2 10436     zone z_fr_in(14,1,rad_in_fejl),
  2 10437          z_rf_in(14,1,rad_in_fejl),
  2 10438          z_fr_out(14,1,rad_out_fejl),
  2 10439          z_rf_out(14,1,rad_out_fejl);
  2 10440     
  2 10440     integer array
  2 10441         radiofejl,
  2 10442         ss_samtale_nedlagt,
  2 10443         ss_radio_aktiver(1:max_antal_kanaler),
  2 10444         bs_talevej_udkoblet,
  2 10445         cs_radio(1:max_antal_taleveje),
  2 10446         radio_linietabel(1:max_linienr//3+1),
  2 10447         radio_områdetabel(0:max_antal_områder),
  2 10448         opkaldskø(opkaldskø_postlængde//2+1:
  2 10449           (max_antal_mobilopkald+1)*opkaldskø_postlængde//2),
  2 10450         kanal_tab(1:max_antal_kanaler*kanal_beskr_længde//2),
  2 10451         hookoff_maske(1:(tv_maske_lgd//2)),
  2 10452         samtaleflag, kanalflag, opkaldsflag(1:(op_maske_lgd//2));
  2 10453     
  2 10453       integer field
  2 10454         kanal_tilstand,
  2 10455         kanal_id1,
  2 10456         kanal_id2,
  2 10457         kanal_spec,
  2 10458         kanal_alt_id1,
  2 10459         kanal_alt_id2;               
  2 10460       integer array field 
  2 10461         kanal_mon_maske,
  2 10462         kanal_alarm,
  2 10463         opkald_meldt;
  2 10464     
  2 10464       integer
  2 10465         cs_rad,
  2 10466         cs_radio_medd,
  2 10467         cs_radio_adm,
  2 10468         cs_radio_ind,
  2 10469         cs_radio_ud,
  2 10470         cs_radio_pulje,
  2 10471         cs_radio_kø,
  2 10472         bs_mobil_opkald,
  2 10473         bs_opkaldskø_adgang,
  2 10474         opkaldskø_ledige,
  2 10475         nødopkald_brugt,
  2 10476         første_frie_opkald,
  2 10477         første_opkald,
  2 10478         sidste_opkald,
  2 10479         første_nødopkald,
  2 10480         sidste_nødopkald,
  2 10481         optaget_flag;
  2 10482     
  2 10482       boolean
  2 10483         mobil_opkald_aktiveret;
  2 10484     \f

  2 10484     message procedure læs_hex_ciffer side 1 - 810428/hko;
  2 10485     
  2 10485       integer
  2 10486       procedure læs_hex_ciffer(tabel,linie,op);
  2 10487         value                      linie;
  2 10488         integer array        tabel;
  2 10489         integer                    linie,op;
  2 10490         begin
  3 10491           integer i,j;
  3 10492     
  3 10492           i:=(if linie>=0 then linie+6 else linie)//6;
  3 10493           j:=((i-1)*6-linie)*4;
  3 10494           læs_hex_ciffer:=op:=tabel(i) shift j extract 4;
  3 10495        end læs_hex_ciffer;
  2 10496     
  2 10496     message procedure sæt_hex_ciffer side 1 - 810505/hko;
  2 10497     
  2 10497       integer
  2 10498       procedure sæt_hex_ciffer(tabel,linie,op);
  2 10499         value                      linie;
  2 10500         integer array        tabel;
  2 10501         integer                    linie,op;
  2 10502         begin
  3 10503           integer i,j;
  3 10504     
  3 10504           i:=(if linie>=0 then linie+6 else linie)//6;
  3 10505           j:=(linie-(i-1)*6)*4;
  3 10506           sæt_hex_ciffer:= tabel(i) shift (-j) extract 4;
  3 10507           tabel(i):=tabel(i) shift (-4-j) shift 4 add (op extract 4)
  3 10508                     shift j add (tabel(i) extract j);
  3 10509         end sæt_hex_ciffer;
  2 10510     
  2 10510     message procedure hex_to_dec side 1 - 900108/cl;
  2 10511     
  2 10511     integer procedure hex_to_dec(hex);
  2 10512       value                      hex;
  2 10513       integer                    hex;
  2 10514     begin
  3 10515       hex_to_dec:= if 'A'<=hex and hex<='F' then (hex-'A'+10)
  3 10516                    else (hex-'0');
  3 10517     end;
  2 10518     
  2 10518     message procedure dec_to_hex side 1 - 900108/cl;
  2 10519     
  2 10519     integer procedure dec_to_hex(dec);
  2 10520       value                      dec;
  2 10521       integer                    dec;
  2 10522     begin
  3 10523       dec_to_hex:= if 0<=dec and dec<=9 then ('0'+dec)
  3 10524                    else ('A'+dec-10);
  3 10525     end;
  2 10526     
  2 10526     message procedure rad_out_fejl side 1 - 820304/hko;
  2 10527     
  2 10527       procedure rad_out_fejl(z,s,b);
  2 10528         value                  s;
  2 10529         zone                 z;
  2 10530         integer                s,b;
  2 10531         begin
  3 10532           integer array field iaf;
  3 10533           integer pos,tegn,max,i;
  3 10534           integer array ia(1:20);
  3 10535           long array field laf;
  3 10536     
  3 10536         disable begin
  4 10537           laf:= iaf:= 2;
  4 10538           tegn:= 1;
  4 10539           getzone6(z,ia);
  4 10540           max:= ia(16)//2*3;
  4 10541           if s = 1 shift 21 + 2 then
  4 10542           begin
  5 10543             z(1):= real<:<'em'>:>;
  5 10544             b:= 2;
  5 10545           end
  4 10546           else
  4 10547           begin
  5 10548             pos:= 0;
  5 10549             for i:= 1 step 1 until max_antal_kanaler do
  5 10550             begin
  6 10551               iaf:= (i-1)*kanalbeskr_længde;
  6 10552               if sæt_hex_ciffer(kanal_tab.iaf,3,15)<>15 then pos:= pos+1;
  6 10553               if pos>0 then
  6 10554               begin
  7 10555                 tofrom(kanalflag,alle_operatører,op_maske_lgd);
  7 10556                 signalbin(bs_mobilopkald);
  7 10557                 fejlreaktion(17<*y.e.status*>,s,string ia.laf(increase(tegn)),
  7 10558                   1 shift 12<*binært*> +1<*fortsæt*>);
  7 10559               end;
  6 10560             end;
  5 10561           end;
  4 10562         end;
  3 10563         end;
  2 10564     \f

  2 10564     message procedure rad_in_fejl side 1 - 810601/hko;
  2 10565     
  2 10565       procedure rad_in_fejl(z,s,b);
  2 10566         value                 s;
  2 10567         zone                z;
  2 10568         integer               s,b;
  2 10569         begin
  3 10570           integer array field iaf;
  3 10571           integer pos,tegn,max,i;
  3 10572           integer array ia(1:20);
  3 10573           long array field laf;
  3 10574     
  3 10574         disable begin
  4 10575           laf:= iaf:= 2;
  4 10576           i:= 1;
  4 10577           getzone6(z,ia);
  4 10578           max:= ia(16)//2*3;
  4 10579           if s shift (-21) extract 1 = 0
  4 10580              and s shift(-19) extract 1 = 0 then
  4 10581           begin
  5 10582             if b = 0 then
  5 10583             begin
  6 10584               z(1):= real<:!:>;
  6 10585               b:= 2;
  6 10586             end;
  5 10587           end;
  4 10588     \f

  4 10588     message procedure rad_in_fejl side 2 - 820304/hko;
  4 10589     
  4 10589           if (s <> 1 shift 21 +2 and s shift(-19) extract 1 = 0) then
  4 10590           begin
  5 10591             fejlreaktion(17<*ydre enhed status*>,s,string ia.laf(increase(i)),
  5 10592               1 shift 12<*binær*> +1<*fortsæt*>);
  5 10593           end
  4 10594           else
  4 10595           if s shift (-19) extract 1 = 1 then
  4 10596           begin
  5 10597             z(1):= real<:!<'nl'>:>;
  5 10598             b:= 2;
  5 10599           end
  4 10600           else
  4 10601           if s = 1 shift 21 +2  or s shift(-19) extract 1 =1 then
  4 10602           begin
  5 10603     <*
  5 10604             if b = 0 then
  5 10605             begin
  5 10606     *>
  5 10607               z(1):= real <:<'em'>:>;
  5 10608               b:= 2;
  5 10609     <*
  5 10610             end
  5 10611             else
  5 10612             begin
  5 10613               tegn:= -1;
  5 10614               iaf:= 0;
  5 10615               pos:= b//2*3-2;
  5 10616               while pos < max and tegn <> 0 do læstegn(z.iaf,pos,tegn);
  5 10617               skriv_tegn(z.iaf,pos,'?');
  5 10618               if pos<=max then
  5 10619                 afslut_text(z.iaf,pos);
  5 10620               b:= (pos-1)//3*2;
  5 10621             end;
  5 10622     *>
  5 10623           end;<* s=1 shift 21+2 *>
  4 10624         end;
  3 10625           if testbit22 and
  3 10626              (s <> 1 shift 21 +2 and s shift(-19) extract 1 = 0)
  3 10627           then
  3 10628             delay(60);
  3 10629         end rad_in_fejl;
  2 10630     \f

  2 10630     message procedure afvent_radioinput side 1 - 880901/cl;
  2 10631     
  2 10631     integer procedure afvent_radioinput(z_in,tlgr,rf);
  2 10632       value                                     rf;
  2 10633       zone                            z_in;
  2 10634       integer array                        tlgr;
  2 10635       boolean                                   rf;
  2 10636     begin
  3 10637       integer i, p, pos, tegn, ac, sum, csum, lgd;
  3 10638       long array field laf;
  3 10639     
  3 10639       laf:= 0;
  3 10640       pos:= 1;     
  3 10641       repeat
  3 10642         i:=readchar(z_in,tegn);
  3 10643         if i<>8 and pos<80 then skrivtegn(tlgr,pos,tegn);
  3 10644       until (i=8 and pos>1) or (tegn='em') or (pos>=80);
  3 10645       p:=pos;
  3 10646       repeat afsluttext(tlgr,p) until p mod 6 = 1;
  3 10647     <*+2*>if overvåget and (testbit36 or ((-,rf) and testbit38) or
  3 10648                            (rf and testbit39)) then
  3 10649           disable begin
  4 10650             write(zrl,<<zd dd dd.dd >,now,
  4 10651               (if -,rf then <:fr-tlgr: :> else <:rf-answ: :>),tlgr.laf,
  4 10652               if tegn='em' then <:*timeout*:> else
  4 10653               if pos>=80 then   <:*for langt*:> else <::>);
  4 10654              outchar(zrl,'nl');
  4 10655           end;
  3 10656     <*-2*>
  3 10657       ac:= -1;
  3 10658       if pos >= 80 then
  3 10659       begin <* telegram for langt *>
  4 10660         repeat readchar(z_in,tegn)
  4 10661         until tegn='nl' or tegn='em';
  4 10662       end
  3 10663       else
  3 10664       if pos>1  and tegn='nl' then
  3 10665       begin
  4 10666         lgd:= 1;
  4 10667         while læstegn(tlgr,lgd,tegn)<>0 do ;
  4 10668         lgd:= lgd-2;
  4 10669         if lgd >= 5 then
  4 10670         begin
  5 10671           lgd:= lgd-2; <* se bort fra checksum *>
  5 10672           i:= lgd + 1;
  5 10673           csum:= (læstegn(tlgr,i,tegn) - '@')*16;
  5 10674           csum:= csum + (læstegn(tlgr,i,tegn) - '@');
  5 10675           i:= lgd + 1;
  5 10676           skrivtegn(tlgr,i,0);
  5 10677           skrivtegn(tlgr,i,0);
  5 10678           i:= 1; sum:= 0;
  5 10679           while i <= lgd do
  5 10680             sum:= (sum + læstegn(tlgr,i,tegn)) mod 256;
  5 10681           if csum >= 0 and csum <> sum then
  5 10682           begin
  6 10683     <*+2*>  if overvåget and (testbit36 or
  6 10684                ((-,rf) and testbit38) or (rf and testbit39)) then
  6 10685             disable begin
  7 10686               write(zrl,<<zd dd dd.dd >,now,
  7 10687                 (if rf then <:rf:> else <:fr:>),
  7 10688                 <:-tlgr-checksumfejl: :>,csum,sum); outchar(zrl,'nl');
  7 10689             end;
  6 10690     <*-2*>
  6 10691             ac:= 6 <* checksumfejl *>
  6 10692           end
  5 10693           else
  5 10694             ac:= 0;
  5 10695         end
  4 10696         else ac:= 6; <* for kort telegram - retransmitter *>
  4 10697       end;
  3 10698       afvent_radioinput:= ac;
  3 10699     end;
  2 10700     \f

  2 10700     message procedure skriv_kanal_tab side 1 - 820304/hko;
  2 10701     
  2 10701       procedure skriv_kanal_tab(z);
  2 10702         zone                    z;
  2 10703         begin
  3 10704           integer array field ref;
  3 10705           integer i,j,t,op,id1,id2;
  3 10706     
  3 10706           write(z,"ff",1,"nl",1,<:
  3 10707          ******** kanal-beskrivelser *******
  3 10708     
  3 10708                        a k l p m b n
  3 10709                        l a y a o s ø
  3 10710     nr    tv tilst + * l t t s n v d - type   id1      id2      ttmm/ant -ej.op:>,
  3 10711     <*
  3 10712     01 ..... ..... x x x x x x x x x x .... ........ ........   .... ....  ----
  3 10713     *>
  3 10714             "nl",1);
  3 10715           for i:=1 step 1 until max_antal_kanaler do
  3 10716           begin
  4 10717             ref:=(i-1)*kanal_beskr_længde;
  4 10718             t:=kanal_tab.ref.kanal_tilstand;
  4 10719             id1:=kanal_tab.ref.kanal_id1;
  4 10720             id2:=kanal_tab.ref.kanal_id2;
  4 10721             write(z,"nl",1,"sp",4,
  4 10722               <<dd>,i,<<-ddddd>,t shift(-16),t shift(-12) extract 4,"sp",1);
  4 10723             for j:=11 step -1 until 2 do
  4 10724               write(z,if læsbit_i(t,j) then "X" else "sp",1,"sp",1);
  4 10725             write(z,case t extract 2 +1 of
  4 10726                  (<:-   :>,<:OPK :>,<:MEDD:>,<:GNM :>),
  4 10727               "sp",1);
  4 10728             skriv_id(z,id1,9);
  4 10729             skriv_id(z,id2,9);
  4 10730             t:=kanal_tab.ref.kanal_spec;
  4 10731             write(z,"sp",1,<<-dddd>,t,t shift(-16),"sp",1,-(t extract 8));
  4 10732             write(z,"nl",1,"sp",14,<:mon: :>);
  4 10733             for j:= max_antal_taleveje step -1 until 1 do
  4 10734               write(z,(if læs_bit_ia(kanal_tab.ref.kanal_mon_maske,j) then "1"
  4 10735                     else "."),1);
  4 10736             write(z,"sp",25-max_antal_taleveje);
  4 10737             skriv_id(z,kanal_tab.ref.kanal_alt_id1,9);
  4 10738             skriv_id(z,kanal_tab.ref.kanal_alt_id2,9);
  4 10739           end;
  3 10740           write(z,"nl",2,<:kanalflag::>,"nl",1);
  3 10741           outintbits_ia(z,kanalflag,1,op_maske_lgd//2);
  3 10742           write(z,"nl",2);
  3 10743         end skriv_kanal_tab;
  2 10744     \f

  2 10744     message procedure skriv_opkaldskø side 1 - 820301/hko;
  2 10745     
  2 10745       procedure skriv_opkaldskø(z);
  2 10746         zone                    z;
  2 10747         begin
  3 10748           integer i,bogst,løb,j;
  3 10749           integer array field ref;
  3 10750           write(z,"nl",2,"*",5,<: opkaldskø :>,"*",5,"nl",2,
  3 10751             <:  ref næste foreg X    bus  linie/løb tid   -  op type  :>,
  3 10752             <: sig omr :>,"nl",1);
  3 10753           for i:= 1 step 1 until max_antal_mobilopkald do
  3 10754           begin
  4 10755             ref:= i*opkaldskø_postlængde;
  4 10756             j:= opkaldskø.ref(1);
  4 10757             write(z,<< dddd>,ref,<< ddddd>,j extract 12,j shift (-12));
  4 10758             j:= opkaldskø.ref(2);
  4 10759             write(z,"sp",1,if j < 0 then "X" else "sp",1,"sp",1);
  4 10760             skriv_id(z,j extract 23,9);
  4 10761             j:= opkaldskø.ref(3);
  4 10762             skriv_id(z,j,7);
  4 10763             j:= opkaldskø.ref(4);
  4 10764             write(z,<<  zd.dd>,(j shift (-12))/100.0,
  4 10765               <<    zd>,j extract 8);
  4 10766             j:= j shift (-8) extract 4;
  4 10767             if j = 1 or j = 2 then
  4 10768               write(z,if j=1 then <: normal:> else <: nød   :>)
  4 10769             else write(z,<<dddd>,j,"sp",3);
  4 10770             j:= opkaldskø.ref(5);
  4 10771             write(z,if j shift (-20) <> 0 then <:  B  :> else <:  S  :>,
  4 10772               true,4,if 1<=(j extract 8) and (j extract 8)<=max_antal_områder then
  4 10773               string område_navn(j extract 8) else <:---:>);
  4 10774             outchar(z,'nl');
  4 10775           end;
  3 10776     
  3 10776           write(z,"nl",1,<<z>,
  3 10777             <:første_frie_opkald=:>,første_frie_opkald,"nl",1,
  3 10778             <:første_opkald=:>,første_opkald,"nl",1,
  3 10779             <:sidste_opkald=:>,sidste_opkald,"nl",1,
  3 10780             <:første_nødopkald=:>,første_nødopkald,"nl",1,
  3 10781             <:sidste_nødopkald=:>,sidste_nødopkald,"nl",1,
  3 10782             <:opkaldskø_ledige=:>,opkaldskø_ledige,"nl",1,
  3 10783             <:nødopkald_brugt= :>,nødopkald_brugt,"nl",1,
  3 10784             "nl",1,<:opkaldsflag::>,"nl",1);
  3 10785             outintbits_ia(z,opkaldsflag,1,op_maske_lgd//2);
  3 10786             write(z,"nl",2);
  3 10787         end skriv_opkaldskø;
  2 10788     \f

  2 10788     message procedure skriv_radio_linietabel side 1 - 820301/hko;
  2 10789     
  2 10789       procedure skriv_radio_linie_tabel(z);
  2 10790         zone                               z;
  2 10791         begin
  3 10792           integer i,j,k;
  3 10793     
  3 10793           write(z,"nl",2,"*",5,<: liniefordeling for operatører :>,"*",5,"nl",2);
  3 10794           k:= 0;
  3 10795           for i:= 1 step 1 until max_linienr do
  3 10796           begin
  4 10797             læstegn(radio_linietabel,i+1,j);
  4 10798             if j > 0 then
  4 10799             begin
  5 10800               k:= k +1;
  5 10801               write(z,<<dddd>,i,":",1,<<zd_>,j,"sp",if k mod 5=0 then 0 else 4,
  5 10802                 "nl",if k mod 5=0 then 1 else 0);
  5 10803             end;
  4 10804           end;
  3 10805           write(z,"nl",if k mod 5=0 then 1 else 2);
  3 10806         end skriv_radio_linietabel;
  2 10807     
  2 10807     procedure skriv_radio_områdetabel(z);
  2 10808      zone                             z;
  2 10809       begin
  3 10810         integer i;
  3 10811     
  3 10811         write(z,"nl",2,"*",5,<: områdefordeling for operatører :>,"*",5,"nl",2);
  3 10812         for i:= 1 step 1 until max_antal_områder do
  3 10813         begin
  4 10814           laf:= (i-1)*4;
  4 10815           if radio_områdetabel(i)<>0 then
  4 10816             write(z,<<dd>,i,<:. :>,områdenavn.laf,<:: :>,
  4 10817               radio_områdetabel(i),"nl",1);
  4 10818         end;
  3 10819       end skriv_radio_områdetabel;
  2 10820     \f

  2 10820     message procedure h_radio side 1 - 810520/hko;
  2 10821     
  2 10821       <* hovedmodulkorutine for radiokanaler *>
  2 10822       procedure h_radio;
  2 10823       begin
  3 10824         integer array field op_ref;
  3 10825         integer k,dest_sem;
  3 10826         procedure skriv_hradio(z,omfang);
  3 10827           value                  omfang;
  3 10828           zone                 z;
  3 10829           integer                omfang;
  3 10830           begin integer i;
  4 10831             disable i:= write(z,"nl",1,<:+++ hovedmodul radio:>);
  4 10832             write(z,"sp",26-i);
  4 10833             if omfang >0 then
  4 10834             disable begin integer x;
  5 10835               trap(slut);
  5 10836               write(z,"nl",1,
  5 10837                 <:  op_ref:    :>,op_ref,"nl",1,
  5 10838                 <:  k:         :>,k,"nl",1,
  5 10839                 <:  dest_sem:  :>,dest_sem,"nl",1,
  5 10840                 <::>);
  5 10841               skriv_coru(z,coru_no(400));
  5 10842     slut:
  5 10843             end;
  4 10844           end skriv_hradio;
  3 10845     
  3 10845       trap(hrad_trap);
  3 10846       stack_claim(if cm_test then 198 else 146);
  3 10847     
  3 10847     <*+2*> if testbit32 and overvåget or testbit28 then
  3 10848         skriv_hradio(out,0);
  3 10849     <*-2*>
  3 10850     \f

  3 10850     message procedure h_radio side 2 - 820304/hko;
  3 10851     
  3 10851       repeat
  3 10852         wait_ch(cs_rad,op_ref,true,-1);
  3 10853     <*+2*>if testbit33 and overvåget then
  3 10854           disable begin
  4 10855             skriv_h_radio(out,0);
  4 10856             write(out,<: operation modtaget:>);
  4 10857             skriv_op(out,op_ref);
  4 10858           end;
  3 10859     <*-2*>
  3 10860     <*+4*>
  3 10861         if (d.op_ref.optype and
  3 10862              (gen_optype or rad_optype or vt_optype)) extract 12 =0
  3 10863         then fejlreaktion(12<*operationstype*>,op_ref,<:h<'_'>radio:>,1);
  3 10864     <*-4*>
  3 10865     
  3 10865         k:=d.op_ref.op_kode extract 12;
  3 10866         dest_sem:=
  3 10867           if k > 0 and k < 7
  3 10868              or k=11 or k=12 or k=19
  3 10869              or (72<=k and k<=74) or k = 77
  3 10870              <*IN,O/EK,O/IN,R/EK,R/FO,L/ST/EK,K/IN,K/RA,I/FO,O*>
  3 10871           then cs_radio_adm
  3 10872           else if k=41 <* radiokommando fra operatør *>
  3 10873           then cs_radio(d.opref.data(1)) else -1;
  3 10874     <*+4*>
  3 10875         if dest_sem<1 then
  3 10876         begin
  4 10877           if dest_sem<0 then
  4 10878             fejlreaktion(2<*operationskode*>,k,<:hovedmodul radio:>,1);
  4 10879           d.op_ref.resultat:= if dest_sem=0 then 45 else 31;
  4 10880           signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  4 10881         end
  3 10882         else
  3 10883     <*-4*>
  3 10884         begin <* operationskode ok *>
  4 10885           signal_ch(dest_sem,op_ref,d.op_ref.optype);
  4 10886         end;
  3 10887       until false;
  3 10888     
  3 10888     hrad_trap:
  3 10889       disable skriv_hradio(zbillede,1);
  3 10890       end h_radio;
  2 10891     \f

  2 10891     message procedure radio side 1 - 820301/hko;
  2 10892     
  2 10892       procedure radio(talevej,op);
  2 10893       value           talevej,op;
  2 10894       integer         talevej,op;
  2 10895         begin
  3 10896           integer array field opref, rad_op, vt_op, opref1, iaf, iaf1;
  3 10897           integer nr,i,j,k,res,opgave,tilst,tekn_inf, vtop2, vtop3,
  3 10898                   sig,omr,type,bus,ll,ttmm,vogn,garage,operatør;
  3 10899           integer array felt,værdi(1:8);
  3 10900           boolean byt,nød,frigiv_samtale;
  3 10901           real kl;
  3 10902           real field rf;
  3 10903     
  3 10903           procedure skriv_radio(z,omfang);
  3 10904             value                 omfang;
  3 10905             zone                z;
  3 10906             integer               omfang;
  3 10907             begin integer i1;
  4 10908               disable i1:= write(z,"nl",1,<:+++ radio:>);
  4 10909               write(z,"sp",26-i1);
  4 10910               if omfang > 0 then
  4 10911               disable begin real x;
  5 10912                 trap(slut);
  5 10913     \f

  5 10913     message procedure radio side 1a- 820301/hko;
  5 10914     
  5 10914                 write(z,"nl",1,
  5 10915                   <:  op_ref:    :>,op_ref,"nl",1,
  5 10916                   <:  opref1:    :>,opref1,"nl",1,
  5 10917                   <:  iaf:       :>,iaf,"nl",1,
  5 10918                   <:  iaf1:      :>,iaf1,"nl",1,
  5 10919                   <:  vt-op:     :>,vt_op,"nl",1,
  5 10920                   <:  rad-op:    :>,rad_op,"nl",1,
  5 10921                   <:  rf:        :>,rf,"nl",1,
  5 10922                   <:  nr:        :>,nr,"nl",1,
  5 10923                   <:  i:         :>,i,"nl",1,
  5 10924                   <:  j:         :>,j,"nl",1,
  5 10925                   <:  k:         :>,k,"nl",1,
  5 10926                   <:  operatør:  :>,operatør,"nl",1,
  5 10927                   <:  tilst:     :>,tilst,"nl",1,
  5 10928                   <:  res:       :>,res,"nl",1,
  5 10929                   <:  opgave:    :>,opgave,"nl",1,
  5 10930                   <:  type:      :>,type,"nl",1,
  5 10931                   <:  bus:       :>,bus,"nl",1,
  5 10932                   <:  ll:        :>,ll,"nl",1,
  5 10933                   <:  ttmm:      :>,ttmm,"nl",1,
  5 10934                   <:  vogn:      :>,vogn,"nl",1,
  5 10935                   <:  tekn-inf:  :>,tekn_inf,"nl",1,
  5 10936                   <:  vtop2:     :>,vtop2,"nl",1,
  5 10937                   <:  vtop3:     :>,vtop3,"nl",1,
  5 10938                   <:  sig:       :>,sig,"nl",1,
  5 10939                   <:  omr:       :>,omr,"nl",1,
  5 10940                   <:  garage:    :>,garage,"nl",1,
  5 10941                   <<-dddddd'-dd>,
  5 10942                   <:  kl:        :>,kl,systime(4,kl,x),x,"nl",1,
  5 10943                   <:samtaleflag: :>,"nl",1);
  5 10944                 out_intbits_ia(z,samtaleflag,1,op_maske_lgd//2);
  5 10945                 skriv_coru(z,coru_no(410+talevej));
  5 10946     slut:
  5 10947               end;<*disable*>
  4 10948             end skriv_radio;
  3 10949     \f

  3 10949     message procedure udtag_opkald side 1 - 820301/hko;
  3 10950     
  3 10950       integer
  3 10951       procedure udtag_opkald(vogn,type,operatør,bus,garage,omr,sig,ll,ttmm);
  3 10952         value                vogn,     operatør;
  3 10953         integer              vogn,type,operatør,bus,garage,omr,sig,ll,ttmm;
  3 10954         begin
  4 10955           integer res,tilst,nr,i,j,t,o,b,l,tm;
  4 10956           integer array field vt_op,ref,næste,forrige;
  4 10957           integer array field iaf1;
  4 10958           boolean skal_ud;
  4 10959     
  4 10959           boolean procedure skal_udskrives(fordelt,aktuel);
  4 10960             value                          fordelt,aktuel;
  4 10961             integer                        fordelt,aktuel;
  4 10962           begin
  5 10963             boolean skal;
  5 10964             integer n;
  5 10965             integer array field iaf;
  5 10966     
  5 10966             skal:= true;
  5 10967             if fordelt > 0 and fordelt<>aktuel then
  5 10968             begin
  6 10969               for n:= 0 step 1 until 3 do
  6 10970               begin
  7 10971                 if bpl_tilst(operatør_stop(fordelt,n),1) > 0 then
  7 10972                 begin
  8 10973                   iaf:= operatør_stop(fordelt,n)*op_maske_lgd;
  8 10974                   skal:= læsbit_ia(bpl_def.iaf,aktuel);
  8 10975                   goto returner;
  8 10976                 end;
  7 10977               end;
  6 10978             end;
  5 10979     returner:
  5 10980             skal_udskrives:= skal;
  5 10981           end;
  4 10982     
  4 10982           l:= b:= tm:= t:= 0;
  4 10983           garage:= sig:= 0;
  4 10984           res:= -1;
  4 10985     <*V*> wait(bs_opkaldskø_adgang);
  4 10986           ref:= første_nødopkald;
  4 10987           if ref <> 0 then
  4 10988             t:= 2
  4 10989           else
  4 10990           begin
  5 10991             ref:= første_opkald;
  5 10992             t:= if ref = 0 then 0 else 1;
  5 10993           end;
  4 10994           if t = 0 then res:= +19 <*kø er tom*> else
  4 10995           if vogn=0 and omr=0 then
  4 10996           begin
  5 10997             while ref <> 0 and res = -1 do
  5 10998             begin
  6 10999               nr:= opkaldskø.ref(4) extract 8;
  6 11000               if nr>64 then
  6 11001               begin 
  7 11002                 <*opk. primærfordelt til gruppe af btj.pl.*>
  7 11003                 i:=0; skal_ud:=true; iaf1:=nr*op_maske_lgd;
  7 11004                 while skal_ud and i<max_antal_operatører do
  7 11005                 begin
  8 11006                   i:=i+1;
  8 11007                   if læsbit_ia(bpl_def.iaf1,i) then
  8 11008                     skal_ud:= skal_ud and skal_udskrives(i,operatør);
  8 11009                 end;
  7 11010               end
  6 11011               else
  6 11012                 skal_ud:= skal_udskrives(nr,operatør);
  6 11013     
  6 11013               if skal_ud then
  6 11014     <*        if nr=0 or -,læsbit_ia(operatørmaske,nr) or nr=operatør then
  6 11015     *>
  6 11016                 res:= 0
  6 11017               else
  6 11018               begin
  7 11019                 ref:= opkaldskø.ref(1) extract 12;
  7 11020                 if ref = 0 and t = 2 then
  7 11021                 begin
  8 11022                   ref:= første_opkald;
  8 11023                   t:= if ref = 0 then 0 else 1;
  8 11024                 end else if ref = 0 then t:= 0;
  7 11025               end;
  6 11026             end; <*while*>
  5 11027     \f

  5 11027     message procedure udtag_opkald side 2 - 820304/hko;
  5 11028     
  5 11028             if ref <> 0 then
  5 11029             begin
  6 11030               b:= opkaldskø.ref(2);
  6 11031     <*+4*>    if b < 0 then
  6 11032                 fejlreaktion(19<*mobilopkald*>,bus extract 14,
  6 11033                   <:nødopkald(besvaret/ej meldt):>,1);
  6 11034     <*-4*>
  6 11035               garage:=b shift(-14) extract 8;
  6 11036               b:= b extract 14;
  6 11037               l:= opkaldskø.ref(3);
  6 11038               tm:= opkaldskø.ref(4);
  6 11039               o:= tm extract 8;
  6 11040               tm:= tm shift(-12);
  6 11041               omr:= opkaldskø.ref(5) extract 8;
  6 11042               sig:= opkaldskø.ref(5) shift (-20);
  6 11043             end
  5 11044             else res:=19; <* kø er tom *>
  5 11045           end <*vogn=0 and omr=0 *>
  4 11046           else
  4 11047           begin
  5 11048             <* vogn<>0 or omr<>0 *>
  5 11049             i:= 0; tilst:= -1;
  5 11050             if vogn shift(-22) = 1 then
  5 11051             begin
  6 11052               i:= find_busnr(vogn,nr,garage,tilst);
  6 11053               l:= vogn;
  6 11054             end
  5 11055             else
  5 11056             if vogn<>0 and (omr=0 or omr>2) then
  5 11057             begin
  6 11058               o:= 0;
  6 11059               i:= søg_omr_bus(vogn,l,garage,o,sig,tilst);
  6 11060               if i=(-2) then
  6 11061               begin
  7 11062                 o:= omr;
  7 11063                 i:= søg_omr_bus(vogn,l,garage,o,sig,tilst);
  7 11064               end;
  6 11065               nr:= vogn extract 14;
  6 11066             end
  5 11067             else nr:= vogn extract 14;
  5 11068             if i<0 then ref:= 0;
  5 11069             while ref <> 0 and res = -1 do
  5 11070             begin
  6 11071               i:= opkaldskø.ref(2) extract 14;
  6 11072               j:= opkaldskø.ref(4) extract 8; <*operatør*>
  6 11073               if nr = i and
  6 11074                  (omr=0 or omr=opkaldskø.ref(5) extract 8) then res:= 0
  6 11075               else
  6 11076               begin
  7 11077                 ref:= opkaldskø.ref(1) extract 12;
  7 11078                 if ref = 0 and t = 2 then
  7 11079                 begin
  8 11080                   ref:= første_opkald;
  8 11081                   t:= if ref = 0 then 0 else 1;
  8 11082                 end else if ref = 0 then t:= 0;
  7 11083               end;
  6 11084             end; <*while*>
  5 11085     \f

  5 11085     message procedure udtag_opkald side 3 - 810603/hko;
  5 11086     
  5 11086             if ref <> 0 then
  5 11087             begin
  6 11088               b:= nr;
  6 11089               tm:= opkaldskø.ref(4);
  6 11090               o:= tm extract 8;
  6 11091               tm:= tm shift(-12);
  6 11092               omr:= opkaldskø.ref(5) extract 4;
  6 11093               sig:= opkaldskø.ref(5) shift (-20);
  6 11094     
  6 11094     <*+4*>    if tilst <> -1 then
  6 11095                 fejlreaktion(3<*prg.fejl*>,tilst,
  6 11096                   <:vogntabel_tilstand for vogn i kø:>,1);
  6 11097     <*-4*>
  6 11098             end;
  5 11099           end;
  4 11100     
  4 11100           if ref <> 0 then
  4 11101           begin
  5 11102             næste:= opkaldskø.ref(1);
  5 11103             forrige:= næste shift(-12);
  5 11104             næste:= næste extract 12;
  5 11105             if forrige <> 0 then
  5 11106               opkaldskø.forrige(1):= opkaldskø.forrige(1) shift(-12) shift 12
  5 11107                                      + næste
  5 11108             else if t = 1 then første_opkald:= næste
  5 11109             else <*if t = 2 then*> første_nødopkald:= næste;
  5 11110     
  5 11110             if næste <> 0 then
  5 11111               opkaldskø.næste(1):= opkaldskø.næste(1) extract 12
  5 11112                                    + forrige shift 12
  5 11113             else if t = 1 then sidste_opkald:= forrige
  5 11114             else <* if t = 2 then*> sidste_nødopkald:= forrige;
  5 11115     
  5 11115             opkaldskø.ref(1):=første_frie_opkald;
  5 11116             første_frie_opkald:=ref;
  5 11117     
  5 11117             opkaldskø_ledige:=opkaldskø_ledige + 1;
  5 11118             if t=2 then nødopkald_brugt:=nødopkald_brugt - 1;
  5 11119             if -,læsbit_ia(operatør_maske,o) or o = 0 then
  5 11120               tofrom(opkaldsflag,alle_operatører,op_maske_lgd)
  5 11121             else
  5 11122             begin
  6 11123               sætbit_ia(opkaldsflag,operatør,1);
  6 11124               sætbit_ia(opkaldsflag,o,1);
  6 11125             end;
  5 11126             signal_bin(bs_mobil_opkald);
  5 11127           end;
  4 11128     \f

  4 11128     message procedure udtag_opkald side 4 - 810531/hko;
  4 11129     
  4 11129           signal_bin(bs_opkaldskø_adgang);
  4 11130           bus:= b;
  4 11131           type:= t;
  4 11132           ll:= l;
  4 11133           ttmm:= tm;
  4 11134           udtag_opkald:= res;
  4 11135         end udtag opkald;
  3 11136     \f

  3 11136     message procedure frigiv_kanal side 1 - 810603/hko;
  3 11137     
  3 11137       procedure frigiv_kanal(nr);
  3 11138         value                nr;
  3 11139         integer              nr;
  3 11140         begin
  4 11141           integer id1, id2, omr, i;
  4 11142           integer array field iaf, vt_op;
  4 11143     
  4 11143           iaf:= (nr-1)*kanal_beskrlængde;
  4 11144           id1:= kanal_tab.iaf.kanal_id1;
  4 11145           id2:= kanal_tab.iaf.kanal_id2;
  4 11146           omr:= kanal_til_omr(nr);
  4 11147           if id1 <> 0 then
  4 11148             wait(ss_samtale_nedlagt(nr));
  4 11149           if id1 shift (-22) < 3 and omr > 2 then
  4 11150           begin
  5 11151     <*V*>   waitch(cs_vt_adgang,vt_op,true,-1);
  5 11152             start_operation(vt_op,410+talevej,cs_radio(talevej),
  5 11153               if id1 shift (-22) = 2 then 18 else 17);
  5 11154             d.vt_op.data(1):= id1;
  5 11155             d.vt_op.data(4):= omr;
  5 11156             signalch(cs_vt,vt_op,vt_optype or genoptype);
  5 11157     <*V*>   waitch(cs_radio(talevej),vt_op,vt_optype,-1);
  5 11158             signalch(cs_vt_adgang,vt_op,true);
  5 11159           end;
  4 11160     
  4 11160           if id2 <> 0 and id2 shift(-20) <> 12 then
  4 11161             wait(ss_samtale_nedlagt(nr));
  4 11162           if id2 shift (-22) < 3 and omr > 2 then
  4 11163           begin
  5 11164     <*V*>   waitch(cs_vt_adgang,vt_op,true,-1);
  5 11165             start_operation(vt_op,410+talevej,cs_radio(talevej),
  5 11166               if id2 shift (-22) = 2 then 18 else 17);
  5 11167             d.vt_op.data(1):= id2;
  5 11168             d.vt_op.data(4):= omr;
  5 11169             signalch(cs_vt,vt_op,vt_optype or genoptype);
  5 11170     <*V*>   waitch(cs_radio(talevej),vt_op,vt_optype,-1);
  5 11171             signalch(cs_vt_adgang,vt_op,true);
  5 11172           end;
  4 11173     
  4 11173           kanal_tab.iaf.kanal_id1:= kanal_tab.iaf.kanal_id2:= 
  4 11174           kanal_tab.iaf.kanal_alt_id1:= kanal_tab.iaf.kanal_alt_id2:= 0;
  4 11175           kanal_tab.iaf.kanal_tilstand:= kanal_tab.iaf.kanal_tilstand
  4 11176                                         shift (-10) extract 6 shift 10;
  4 11177     <*    repeat
  4 11178             inspect(ss_samtale_nedlagt(nr),i);
  4 11179             if i>0 then wait(ss_samtale_nedlagt(nr));
  4 11180           until i<=0;
  4 11181     *>
  4 11182         end frigiv_kanal;
  3 11183     \f

  3 11183     message procedure hookoff side 1 - 880901/cl;
  3 11184     
  3 11184     integer procedure hookoff(talevej,op,retursem,flash);
  3 11185     value                     talevej,op,retursem,flash;
  3 11186     integer                   talevej,op,retursem;
  3 11187     boolean                                        flash;
  3 11188     begin
  4 11189       integer array field opref;
  4 11190     
  4 11190       opref:= op;
  4 11191       start_operation(opref,410+talevej,retursem,'A' shift 12 + 60);
  4 11192       d.opref.data(1):= talevej;
  4 11193       d.opref.data(2):= if flash then 2 else 1;
  4 11194       signalch(cs_radio_ud,opref,rad_optype);
  4 11195     <*V*> waitch(retursem,opref,rad_optype,-1);
  4 11196       hookoff:= d.opref.resultat;
  4 11197     end;
  3 11198     \f

  3 11198     message procedure hookon side 1 - 880901/cl;
  3 11199     
  3 11199     integer procedure hookon(talevej,op,retursem);
  3 11200       value                  talevej,op,retursem;
  3 11201       integer                talevej,op,retursem;
  3 11202     begin
  4 11203       integer i,res;
  4 11204       integer array field opref;
  4 11205     
  4 11205      if læsbit_ia(hookoff_maske,talevej) then
  4 11206      begin
  5 11207       inspect(bs_talevej_udkoblet(talevej),i);
  5 11208       if i<=0 then
  5 11209       begin
  6 11210         opref:= op;
  6 11211         start_operation(opref,410+talevej,retursem,'D' shift 12 + 60);
  6 11212         d.opref.data(1):= talevej;
  6 11213         signalch(cs_radio_ud,opref,rad_optype);
  6 11214     <*V*> waitch(retursem,opref,rad_optype,-1);
  6 11215         res:= d.opref.resultat;
  6 11216       end
  5 11217       else
  5 11218         res:= 0;
  5 11219     
  5 11219       if res=0 then wait(bs_talevej_udkoblet(talevej));
  5 11220      end
  4 11221      else
  4 11222        res:= 0;
  4 11223     
  4 11223      sætbit_ia(hookoff_maske,talevej,0);
  4 11224       hookon:= res;
  4 11225     end;
  3 11226     \f

  3 11226     message procedure radio side 2 - 820304/hko;
  3 11227     
  3 11227           rad_op:= op;
  3 11228     
  3 11228           trap(radio_trap);
  3 11229           stack_claim((if cm_test then 200 else 150) +200);
  3 11230     
  3 11230     <*+2*>if testbit32 and overvåget or testbit28 then
  3 11231             skriv_radio(out,0);
  3 11232     <*-2*>
  3 11233           repeat
  3 11234             waitch(cs_radio(talevej),opref,true,-1);
  3 11235     <*+2*>
  3 11236             if testbit33 and overvåget then
  3 11237             disable begin
  4 11238               skriv_radio(out,0);
  4 11239               write(out,<: operation modtaget på cs:>,<<d>,cs_radio(talevej));
  4 11240               skriv_op(out,opref);
  4 11241             end;
  3 11242     <*-2*>
  3 11243     
  3 11243             k:= d.op_ref.opkode extract 12;
  3 11244             opgave:= d.opref.opkode shift (-12);
  3 11245             operatør:= d.op_ref.data(4);
  3 11246     
  3 11246     <*+4*>  if (d.op_ref.optype and (gen_optype or io_optype or op_optype))
  3 11247               extract 12 = 0 then fejlreaktion(12<*operationstype*>,op_ref,
  3 11248                                     <:radio:>,0);
  3 11249     <*-4*>
  3 11250     \f

  3 11250     message procedure radio side 3 - 880930/cl;
  3 11251             if k=41 <*radiokommando fra operatør*> then
  3 11252             begin
  4 11253               vogn:= d.opref.data(2);
  4 11254               res:= -1;
  4 11255               for i:= 7 step 1 until 12 do d.opref.data(i):= 0;
  4 11256               sig:= 0; omr:= d.opref.data(3) extract 8;
  4 11257               bus:= garage:= ll:= 0;
  4 11258     
  4 11258               if opgave=1 or opgave=9 then
  4 11259               begin <* opkald til enkelt vogn (CHF) *>
  5 11260                 res:= udtag_opkald(vogn,type,operatør,bus,garage,omr,sig,ll,ttmm);
  5 11261                 if res=19 and (vogn<>0 or d.opref.data(3)=2) then res:= -1;
  5 11262                 <* ok at kø er tom når vogn er angivet eller VHF *>
  5 11263                 
  5 11263                 d.opref.data(11):= if res=0 then 
  5 11264                   (if ll<>0 then ll else bus) else vogn;
  5 11265     
  5 11265                 if type=2 <*nød*> then
  5 11266                 begin
  6 11267                   waitch(cs_radio_pulje,opref1,true,-1);
  6 11268                   start_operation(opref1,410+talevej,cs_radio_pulje,46);
  6 11269                   d.opref1.data(1):= if ll<>0 then ll else bus;
  6 11270                   systime(5,0,kl);
  6 11271                   d.opref1.data(2):= entier(kl/100.0);
  6 11272                   d.opref1.data(3):= omr;
  6 11273                   signalch(cs_io,opref1,gen_optype or rad_optype);
  6 11274                 end
  5 11275               end; <* enkeltvogn (CHF) *>
  4 11276     
  4 11276               <* check enkeltvogn for ledig *>
  4 11277               if res<=0 and omr=2<*VHF*> and bus=0 and
  4 11278                  (opgave=1 or opgave=9) then
  4 11279               begin
  5 11280                 for i:= 1 step 1 until max_antal_kanaler do
  5 11281                   if kanal_til_omr(i)=2 then nr:= i;
  5 11282                 iaf:= (nr-1)*kanalbeskrlængde;
  5 11283                 if kanal_tab.iaf.kanal_tilstand extract 2<>0 and 
  5 11284                    kanal_tab.iaf.kanal_id1 extract 20 = 10000
  5 11285                 then res:= 52;
  5 11286               end;
  4 11287               if res < 0 and (d.opref.data(3) > 2 <* ej TLF, VHF *> or
  4 11288                 d.opref.data(3)=0 <*std. omr*>) and
  4 11289                 (opgave <= 2 <* OP elller ME *> or opgave = 9 <* OP,L *>)
  4 11290               then
  4 11291               begin
  5 11292                 type:= ttmm:= 0; omr:= 0; sig:= 0;
  5 11293                 if vogn shift (-22) = 1 then
  5 11294                 begin
  6 11295                   find_busnr(vogn,bus,garage,res);
  6 11296                   ll:= vogn;
  6 11297                 end
  5 11298                 else
  5 11299                 if vogn shift (-22) = 0 then
  5 11300                 begin
  6 11301                   søg_omr_bus(vogn,ll,garage,omr,sig,res);
  6 11302                   bus:= vogn;
  6 11303                 end
  5 11304                 else
  5 11305                   fejlreaktion(31,vogn,<:vognident i enkeltvognsopk.:>,0);
  5 11306                 res:= if res=(-1) then 18 <* i kø *> else 
  5 11307                       (if res<>0 then 14 <*opt*> else 0);
  5 11308               end
  4 11309               else
  4 11310               if res<0 and (d.opref.data(3)=1 or d.opref.data(3)=2) and
  4 11311                 opgave <= 2 then
  4 11312               begin
  5 11313                 bus:= vogn; garage:= type:= ttmm:= 0;
  5 11314                 res:= 0; omr:= 0; sig:= 0;
  5 11315               end
  4 11316               else
  4 11317               if opgave>1 and opgave<>9 then
  4 11318                 type:= ttmm:= res:= 0;
  4 11319     \f

  4 11319     message procedure radio side 4 - 880930/cl;
  4 11320     
  4 11320               if res=0 and (opgave<=4 or opgave=9) and
  4 11321                 (omr<1 or 2<omr) and
  4 11322                 (d.opref.data(3)>2 or d.opref.data(3)=0) then
  4 11323               begin <* reserver i vogntabel *>
  5 11324                 waitch(cs_vt_adgang,vt_op,true,-1);
  5 11325                 start_operation(vt_op,410+talevej,cs_radio(talevej),
  5 11326                   if opgave <=2 or opgave=9 then 15 else 16);
  5 11327                 d.vt_op.data(1):= if opgave<=2 or opgave=9 then
  5 11328                   (if vogn=0 then garage shift 14 + bus else 
  5 11329                    if ll<>0 then ll else garage shift 14 + bus)
  5 11330                   else vogn <*gruppeid*>;
  5 11331                 d.vt_op.data(4):= if d.opref.data(3)<>0 then
  5 11332                                     d.opref.data(3) extract 8
  5 11333                                   else omr extract 8;
  5 11334                 signalch(cs_vt,vt_op,gen_optype or rad_optype);
  5 11335     <*V*>       waitch(cs_radio(talevej),vt_op,rad_optype,-1);
  5 11336     
  5 11336                 res:= d.vt_op.resultat;
  5 11337                 if res=3 then res:= 0;
  5 11338                 vtop2:= d.vt_op.data(2);
  5 11339                 vtop3:= d.vt_op.data(3);
  5 11340                 tekn_inf:= d.vt_op.data(4);
  5 11341                 signalch(cs_vt_adgang,vt_op,gen_optype or vt_optype);
  5 11342               end;
  4 11343     
  4 11343               if res<>0 then
  4 11344               begin
  5 11345                 d.opref.resultat:= res;
  5 11346                 signalch(d.opref.retur,opref,d.opref.optype);
  5 11347               end
  4 11348               else
  4 11349     
  4 11349               if opgave <= 9 then
  4 11350               begin <* opkald *>
  5 11351                 res:= hookoff(talevej,rad_op,cs_radio(talevej),
  5 11352                     opgave<>9 and d.opref.data(6)<>0);
  5 11353     
  5 11353                 if res<>0 then
  5 11354                   goto returner_op;
  5 11355     
  5 11355                 if opgave=7 or opgave=8 then <* KATASTROFEOPKALD *>
  5 11356                 begin
  6 11357                   start_operation(rad_op,410+talevej,cs_radio(talevej),
  6 11358                     'H' shift 12 + 60);
  6 11359                   d.rad_op.data(1):= talevej;
  6 11360                   d.rad_op.data(2):= 'D';
  6 11361                   d.rad_op.data(3):= 6; <* rear *>
  6 11362                   d.rad_op.data(4):= 1; <* rear no *>
  6 11363                   d.rad_op.data(5):= 0; <* disconnect *>
  6 11364                   signalch(cs_radio_ud,rad_op,rad_optype);
  6 11365     <*V*>         waitch(cs_radio(talevej),rad_op,rad_optype,-1);
  6 11366                   if d.rad_op.resultat<>0 then
  6 11367                   begin
  7 11368                     res:= d.rad_op.resultat;
  7 11369                     goto returner_op;
  7 11370                   end;
  6 11371     <*
  6 11372                   while optaget_flag shift (-1) <> 0 do
  6 11373                     delay(1);
  6 11374     *>
  6 11375                 end;
  5 11376     \f

  5 11376     message procedure radio side 5 - 880930/cl;
  5 11377     
  5 11377                 start_operation(rad_op,410+talevej,cs_radio(talevej),
  5 11378                   'B' shift 12 + 60);
  5 11379                 d.rad_op.data(1):= talevej;
  5 11380                 d.rad_op.data(2):= 'D';
  5 11381                 d.rad_op.data(3):= if opgave=9 then 3 else
  5 11382                                    (2 - (opgave extract 1)); <* højttalerkode *>
  5 11383     
  5 11383                 if 5<=opgave and opgave <=8 then <* ALLE KALD *>
  5 11384                 begin
  6 11385                   j:= 0;
  6 11386                   for i:= 2 step 1 until max_antal_områder do
  6 11387                   begin
  7 11388                     if opgave > 6 or
  7 11389                       (d.opref.data(3) shift (-20) = 15 and
  7 11390                        læsbiti(d.opref.data(3),i)) or
  7 11391                       (d.opref.data(3) shift (-20) = 14 and
  7 11392                        d.opref.data(3) extract 20  =  i)
  7 11393                     then
  7 11394                     begin
  8 11395                       for k:= 1 step 1 until (if i=3 then 2 else 1) do
  8 11396                       begin
  9 11397                         j:= j+1;
  9 11398                         d.rad_op.data(10+(j-1)*2):=
  9 11399                           område_id(i,2) shift 12 +         <* tkt, tkn *>
  9 11400                           (if i=2<*VHF*> then 4 else k) 
  9 11401                                                shift 8 +   <* signal type *>
  9 11402                                                       1;    <* antal tno *>
  9 11403                         d.rad_op.data(11+(j-1)*2):= 0;      <* tno alle *>
  9 11404                       end;
  8 11405                     end;
  7 11406                   end;
  6 11407                   d.rad_op.data(4):= j;
  6 11408                   d.rad_op.data(5):= 0;
  6 11409                 end
  5 11410                 else
  5 11411                 if opgave>2 and opgave <= 4 then <* gruppekald *>
  5 11412                 begin
  6 11413                   d.rad_op.data(4):= vtop2;
  6 11414                   d.rad_op.data(5):= vtop3;
  6 11415                 end
  5 11416                 else
  5 11417                 begin <* enkeltvogn *>
  6 11418                   if omr=0 then
  6 11419                   begin
  7 11420                     sig:= tekn_inf shift (-23);
  7 11421                     omr:= if d.opref.data(3)<>0 then d.opref.data(3)
  7 11422                           else tekn_inf extract 8;
  7 11423                   end
  6 11424                   else
  6 11425                   if d.opref.data(3)<>0 then omr:= d.opref.data(3);
  6 11426     
  6 11426                   <* lytte-kald til nød i TCT, VHF og TLF *>
  6 11427                   <* tvinges til alm. opkald              *>
  6 11428                   if (opgave=9) and (type=2) and (omr<=3) then
  6 11429                   begin
  7 11430                     d.opref.opkode:= 1 shift 12 + d.opref.opkode extract 12;
  7 11431                     opgave:= 1;
  7 11432                     d.radop.data(3):= 1;
  7 11433                   end;
  6 11434     
  6 11434                   if omr=2 <*VHF*> then sig:= 4 else
  6 11435                   if omr=1 <*TLF*> then sig:= 7 else
  6 11436                            <*UHF*>      sig:= sig+1;
  6 11437                   d.rad_op.data(4):= 1;
  6 11438                   d.rad_op.data(5):= 0;
  6 11439                   d.rad_op.data(10):=
  6 11440                      (område_id(omr,2) extract 12) shift 12  +
  6 11441                                       sig shift 8 +
  6 11442                                       1;
  6 11443                   d.rad_op.data(11):= bus;
  6 11444                 end;
  5 11445     \f

  5 11445     message procedure radio side 6 - 880930/cl;
  5 11446     
  5 11446                 signalch(cs_radio_ud,rad_op,rad_optype);
  5 11447     <*V*>       waitch(cs_radio(talevej),rad_op,rad_optype,-1);
  5 11448                 res:= d.rad_op.resultat;
  5 11449     
  5 11449                 d.rad_op.data(6):= 0;
  5 11450                 for i:= 1 step 1 until max_antal_områder do
  5 11451                   if læsbiti(d.rad_op.data(7),i) then 
  5 11452                     increase(d.rad_op.data(6));
  5 11453     returner_op:
  5 11454                 if d.rad_op.data(6)=1 then
  5 11455                 begin
  6 11456                   for i:= 1 step 1 until max_antal_områder do
  6 11457                     if d.rad_op.data(7) extract 20 = 1 shift i then
  6 11458                       d.opref.data(12):= 14 shift 20 + i;
  6 11459                 end
  5 11460                 else
  5 11461                   d.opref.data(12):= 15 shift 20 + d.rad_op.data(7) extract 20;
  5 11462                 d.opref.data(7):= type;
  5 11463                 d.opref.data(8):= garage shift 14 + bus;
  5 11464                 d.opref.data(9):= ll;
  5 11465                 if res=0 then
  5 11466                 begin
  6 11467                   d.opref.resultat:= 3;
  6 11468                   d.opref.data(5):= d.opref.data(6);
  6 11469                   j:= 0;
  6 11470                   for i:= 1 step 1 until max_antal_kanaler do
  6 11471                     if læsbiti(d.rad_op.data(9),i) then j:= j+1;
  6 11472                   if j>1 then
  6 11473                     d.opref.data(6):= 3 shift 22 + 1 shift 20 + d.rad_op.data(9)
  6 11474                   else
  6 11475                   begin
  7 11476                     j:= 0;
  7 11477                     for i:= 1 step 1 until max_antal_kanaler do
  7 11478                       if læsbiti(d.rad_op.data(9),i) then j:= i;
  7 11479                     d.opref.data(6):= 3 shift 22 + j;
  7 11480                   end;
  6 11481                   d.opref.data(7):= type;
  6 11482                   d.opref.data(8):= garage shift 14 + bus;
  6 11483                   d.opref.data(9):= ll;
  6 11484                   d.opref.data(10):= d.opref.data(6);
  6 11485                   for i:= 1 step 1 until max_antal_kanaler do
  6 11486                   begin
  7 11487                     if læsbiti(d.rad_op.data(9),i) then
  7 11488                     begin
  8 11489                       if kanal_id(i) shift (-5) extract 5 = 2 then
  8 11490                         j:= pabx_id( kanal_id(i) extract 5 )
  8 11491                       else
  8 11492                         j:= radio_id( kanal_id(i) extract 5 );
  8 11493                       if j>0 and type=0 and operatør>0 then tæl_opkald(j,1);
  8 11494     
  8 11494                       iaf:= (i-1)*kanalbeskrlængde;
  8 11495                       skrivtegn(kanal_tab.iaf,1,talevej);
  8 11496                       kanal_tab.iaf.kanal_id2:= kanal_tab.iaf.kanal_id1;
  8 11497                       kanal_tab.iaf.kanal_alt_id2:= kanal_tab.iaf.kanal_alt_id1;
  8 11498                       kanal_tab.iaf.kanal_id1:=
  8 11499                         if opgave<=2 or opgave=9 then
  8 11500                           d.opref.data(if d.opref.data(9)<>0 then 9 else 8)
  8 11501                         else
  8 11502                           d.opref.data(2);
  8 11503                       kanal_tab.iaf.kanal_alt_id1:=
  8 11504                         if opgave<=2 or opgave=9 then
  8 11505                           d.opref.data(if d.opref.data(9)<>0 then 8 else 9)
  8 11506                         else
  8 11507                           0;
  8 11508                       if kanal_tab.iaf.kanal_id1=0 then
  8 11509                         kanal_tab.iaf.kanal_id1:= 10000;
  8 11510                       kanal_tab.iaf.kanal_spec:=
  8 11511                          if opgave <= 2 or opgave = 9 then ttmm else 0;
  8 11512                     end;
  7 11513                   end;
  6 11514                   if 5<=opgave and opgave<=8 <*alle-/katastrofekald*> then
  6 11515                     sætbit_ia(kanalflag,operatør,1);
  6 11516     \f

  6 11516     message procedure radio side 7 - 880930/cl;
  6 11517     
  6 11517                 end
  5 11518                 else
  5 11519                 begin
  6 11520                   d.opref.resultat:= res;
  6 11521                   if res=20 or res=52 then
  6 11522                   begin <* tæl ej.forb og opt.kanal *>
  7 11523                     for i:= 1 step 1 until max_antal_områder do
  7 11524                       if læsbiti(d.rad_op.data(7),i) then
  7 11525                         tæl_opkald(i,(if res=20 then 4 else 5));
  7 11526                   end;
  6 11527                   if d.opref.data(6)=0 then
  6 11528                   res:= hookon(talevej,rad_op,cs_radio(talevej));
  6 11529                   <* frigiv fra vogntabel hvis reserveret *>
  6 11530                   if (opgave<=4 or opgave=9) and
  6 11531                      (d.opref.data(3)=0 or d.opref.data(3)>2) then
  6 11532                   begin
  7 11533                     waitch(cs_vt_adgang,vt_op,true,-1);
  7 11534                     startoperation(vt_op,410+talevej,cs_radio(talevej),
  7 11535                       if opgave<=2 or opgave=9 then 17 else 18);
  7 11536                     d.vt_op.data(1):= if opgave<=2 or opgave=9 then
  7 11537                       (if vogn=0 then garage shift 14 + bus else
  7 11538                        if ll<>0 then ll else garage shift 14 + bus)
  7 11539                       else vogn;
  7 11540                     d.vt_op.data(4):= omr;
  7 11541                     signalch(cs_vt,vt_op,gen_optype or vt_optype);
  7 11542                     waitch(cs_radio(talevej),vt_op,vt_optype,-1);
  7 11543                     signalch(cs_vt_adgang,vt_op,true);
  7 11544                   end;
  6 11545                 end;
  5 11546                 signalch(d.opref.retur,opref,d.opref.optype);
  5 11547     \f

  5 11547     message procedure radio side 8 - 880930/cl;
  5 11548     
  5 11548               end <* opkald *>
  4 11549               else
  4 11550               if opgave = 10 <* MONITER *> then
  4 11551               begin
  5 11552                 nr:= d.opref.data(2);
  5 11553                 if nr shift (-20) <> 12 then 
  5 11554                   fejlreaktion(3,nr,<: moniter, kanalnr:>,0);
  5 11555                 nr:= nr extract 20;
  5 11556                 iaf:= (nr-1)*kanalbeskrlængde;
  5 11557                 inspect(ss_samtale_nedlagt(nr),i);
  5 11558                 k:= if kanal_tab.iaf.kanal_id2 shift (-20) = 12 then
  5 11559                       kanal_tab.iaf.kanal_id2 extract 20
  5 11560                     else
  5 11561                     if kanal_tab.iaf.kanal_id2<>0 then nr else 0;
  5 11562                 if k<>0 then inspect(ss_samtale_nedlagt(k),j) else j:=0;
  5 11563                 if kanal_tab.iaf.kanal_tilstand shift (-16) = talevej and
  5 11564                    (i<>0 or j<>0) then
  5 11565                 begin
  6 11566                   res:= 0;
  6 11567                   d.opref.data(5):= 12 shift 20 + k;
  6 11568                   d.opref.data(6):= 12 shift 20 + nr;
  6 11569                   sætbit_ia(kanalflag,operatør,1);
  6 11570                   goto radio_nedlæg;
  6 11571                 end
  5 11572                 else
  5 11573                 if i<>0 or j<>0 then
  5 11574                   res:= 49
  5 11575                 else
  5 11576                 if kanal_tab.iaf.kanal_tilstand extract 2 = 0 then
  5 11577                   res:= 49 <* ingen samtale igang *>
  5 11578                 else
  5 11579                 begin
  6 11580                   res:= hookoff(talevej,rad_op,cs_radio(talevej),false);
  6 11581                   if res=0 then
  6 11582                   begin
  7 11583                     start_operation(rad_op,410+talevej,cs_radio(talevej),
  7 11584                       'B' shift 12 + 60);
  7 11585                     d.rad_op.data(1):= talevej;
  7 11586                     d.rad_op.data(2):= 'V';
  7 11587                     d.rad_op.data(3):= 0;
  7 11588                     d.rad_op.data(4):= 1;
  7 11589                     d.rad_op.data(5):= 0;
  7 11590                     d.rad_op.data(10):=
  7 11591                       (kanal_id(nr) shift (-5) shift 18) +
  7 11592                       (kanal_id(nr) extract  5 shift 12) + 0;
  7 11593                     signalch(cs_radio_ud,rad_op,rad_optype);
  7 11594     <*V*>           waitch(cs_radio(talevej),rad_op,rad_optype,-1);
  7 11595                     res:= d.rad_op.resultat;
  7 11596                     if res=0 then
  7 11597                     begin
  8 11598                       d.opref.data(5):= 0;
  8 11599                       d.opref.data(6):= 3 shift 22 + 0 shift 20 + nr;
  8 11600                       d.opref.data(7):= kanal_tab.iaf.kanal_tilstand extract 10;
  8 11601                       res:= 3;
  8 11602                     end;
  7 11603                   end;
  6 11604                 end;
  5 11605     \f

  5 11605     message procedure radio side 9 - 880930/cl;
  5 11606                 if res=3 then
  5 11607                 begin
  6 11608                   if kanal_tab.iaf.kanal_tilstand shift (-16) = talevej then
  6 11609                     sætbiti(kanal_tab.iaf.kanal_tilstand,5,1) <* monbit *>
  6 11610                   else
  6 11611                     sætbit_ia(kanal_tab.iaf.kanal_mon_maske,talevej,1);
  6 11612                   d.opref.data(6):= 12 shift 20 + nr;
  6 11613                   i:= kanal_tab.iaf.kanal_id2;
  6 11614                   if i<>0 then
  6 11615                   begin
  7 11616                     if i shift (-20) = 12 then
  7 11617                     begin <* ident2 henviser til anden kanal *>
  8 11618                       iaf1:= ((i extract 20)-1)*kanalbeskrlængde;
  8 11619                       if kanal_tab.iaf1.kanal_tilstand shift (-16) = talevej then
  8 11620                         sætbiti(kanal_tab.iaf.kanal_tilstand,5,1)
  8 11621                       else
  8 11622                         sætbit_ia(kanal_tab.iaf.kanal_mon_maske,talevej,1);
  8 11623                       d.opref.data(5):= 12 shift 20 + i;
  8 11624                     end
  7 11625                     else
  7 11626                       d.opref.data(5):= 12 shift 20 + nr;
  7 11627                   end
  6 11628                   else
  6 11629                     d.opref.data(5):= 0;
  6 11630                 end;
  5 11631     
  5 11631                 if res<>3 then
  5 11632                 begin
  6 11633                   res:= 0;
  6 11634                   sætbit_ia(kanalflag,operatør,1);
  6 11635                   goto radio_nedlæg;
  6 11636                 end;
  5 11637                 d.opref.resultat:= res;
  5 11638                 signalch(d.opref.retur,opref,d.opref.optype);
  5 11639     \f

  5 11639     message procedure radio side 10 - 880930/cl;
  5 11640     
  5 11640               end <* MONITERING *>
  4 11641               else
  4 11642               if opgave = 11 then <* GENNEMSTILLING *>
  4 11643               begin
  5 11644                 nr:= d.opref.data(6) extract 20;
  5 11645                 k:= if d.opref.data(5) shift (-20) = 12 then
  5 11646                       d.opref.data(5) extract 20
  5 11647                     else
  5 11648                       0;
  5 11649                 inspect(ss_samtale_nedlagt(nr),i);
  5 11650                 if k<>0 then inspect(ss_samtale_nedlagt(k),j) else j:=0;
  5 11651                 if i<>0 and j<>0 then
  5 11652                 begin
  6 11653                   res:= hookon(talevej,rad_op,cs_radio(talevej));
  6 11654                   goto radio_nedlæg;
  6 11655                 end;
  5 11656     
  5 11656                 iaf:= (nr-1)*kanal_beskr_længde;
  5 11657                 if kanal_tab.iaf.kanal_tilstand shift (-16) = talevej then
  5 11658                 begin
  6 11659                   if læsbiti(kanal_tab.iaf.kanal_tilstand,5) and
  6 11660                      kanal_tab.iaf.kanal_tilstand extract 2 = 3
  6 11661                   then
  6 11662                     res:= hookoff(talevej,rad_op,cs_radio(talevej),true)
  6 11663                   else
  6 11664                   if kanal_tab.iaf.kanal_tilstand extract 2 = 1 and
  6 11665                      d.opref.data(5)<>0
  6 11666                   then
  6 11667                     res:= 0
  6 11668                   else
  6 11669                     res:= 21; <* ingen at gennemstille til *>
  6 11670                 end
  5 11671                 else
  5 11672                   res:= 50; <* kanalnr *>
  5 11673     
  5 11673                 if res=0 then
  5 11674                   res:= hookon(talevej,rad_op,cs_radio(talevej));
  5 11675                 if res=0 then
  5 11676                 begin
  6 11677                   sætbiti(kanal_tab.iaf.kanal_tilstand,5,0);
  6 11678                   kanal_tab.iaf.kanal_tilstand:=
  6 11679                     kanal_tab.iaf.kanal_tilstand shift (-2) shift 2 + 3;
  6 11680                   d.opref.data(6):= 0;
  6 11681                   if kanal_tab.iaf.kanal_id2=0 then
  6 11682                     kanal_tab.iaf.kanal_id2:= d.opref.data(5);
  6 11683     
  6 11683                   if kanal_tab.iaf.kanal_id2 shift (-22) = 3 then
  6 11684                   begin <* gennemstillet til anden kanal *>
  7 11685                     iaf1:= ((kanal_tab.iaf.kanal_id2 extract 20) - 1)
  7 11686                                                             *kanalbeskrlængde;
  7 11687                     sætbiti(kanal_tab.iaf1.kanal_tilstand,5,0);
  7 11688                     kanal_tab.iaf1.kanal_tilstand:=
  7 11689                       kanal_tab.iaf1.kanal_tilstand shift (-2) shift 2 + 3;
  7 11690                     if kanal_tab.iaf1.kanal_id2=0 then
  7 11691                       kanal_tab.iaf1.kanal_id2:= 12 shift 20 + nr;
  7 11692                   end;
  6 11693                   d.opref.data(5):= 0;
  6 11694     
  6 11694                   res:= 3;
  6 11695                 end;
  5 11696     
  5 11696                 d.opref.resultat:= res;
  5 11697                 signalch(d.opref.retur,opref,d.opref.optype);
  5 11698     \f

  5 11698     message procedure radio side 11 - 880930/cl;
  5 11699     
  5 11699               end
  4 11700               else
  4 11701               if opgave = 12 then <* NEDLÆG *>
  4 11702               begin
  5 11703                 res:= hookon(talevej,rad_op,cs_radio(talevej));
  5 11704     radio_nedlæg:
  5 11705                 if res=0 then
  5 11706                 begin
  6 11707                  for k:= 5, 6  do
  6 11708                  begin
  7 11709                   if d.opref.data(k) shift (-20) = 12 then
  7 11710                   begin
  8 11711                     i:= d.opref.data(k) extract 20;
  8 11712                     iaf:= (i-1)*kanalbeskrlængde;
  8 11713                     if kanal_tab.iaf.kanal_tilstand shift (-16) = talevej then
  8 11714                       frigiv_kanal(d.opref.data(k) extract 20)
  8 11715                     else
  8 11716                       sætbit_ia(kanal_tab.iaf.kanal_mon_maske,talevej,0);
  8 11717                   end
  7 11718                   else
  7 11719                   if d.opref.data(k) shift (-20) = 13 then
  7 11720                   begin
  8 11721                     for i:= 1 step 1 until max_antal_kanaler do
  8 11722                       if læsbiti(d.opref.data(k),i) then
  8 11723                       begin
  9 11724                         iaf:= (i-1)*kanalbeskrlængde;
  9 11725                         if kanal_tab.iaf.kanal_tilstand shift (-16) = talevej then
  9 11726                           frigiv_kanal(i)
  9 11727                         else
  9 11728                           sætbit_ia(kanal_tab.iaf.kanal_mon_maske,talevej,0);
  9 11729                       end;
  8 11730                     sætbit_ia(kanalflag,operatør,1);
  8 11731                   end;
  7 11732                  end;
  6 11733                   d.opref.data(5):= 0;
  6 11734                   d.opref.data(6):= 0;
  6 11735                   d.opref.data(9):= 0;
  6 11736                   res:= if opgave=12 then 3 else 49;
  6 11737                 end;
  5 11738                 d.opref.resultat:= res;
  5 11739                 signalch(d.opref.retur,opref,d.opref.optype);
  5 11740               end
  4 11741               else
  4 11742               if opgave=13 then <* R *>
  4 11743               begin
  5 11744                 startoperation(rad_op,410+talevej,cs_radio(talevej),
  5 11745                   'H' shift 12 + 60);
  5 11746                 d.rad_op.data(1):= talevej;
  5 11747                 d.rad_op.data(2):= 'M';
  5 11748                 d.rad_op.data(3):= 0; <*tkt*>
  5 11749                 d.rad_op.data(4):= 0; <*tkn*>
  5 11750                 d.rad_op.data(5):= 1 - (d.opref.data(2) extract 1);
  5 11751                 signalch(cs_radio_ud,rad_op,rad_optype);
  5 11752     <*V*>       waitch(cs_radio(talevej),rad_op,rad_optype,-1);
  5 11753                 res:= d.rad_op.resultat;
  5 11754                 d.opref.resultat:= if res=0 then 3 else res;
  5 11755                 signalch(d.opref.retur,opref,d.opref.optype);
  5 11756               end
  4 11757               else
  4 11758               if opgave=14 <* VENTEPOS *> then
  4 11759               begin
  5 11760                 res:= 0;
  5 11761                 while (res<=3 and d.opref.data(2)>0) do
  5 11762                 begin
  6 11763                   nr:= d.opref.data(6) extract 20;
  6 11764                   k:= if d.opref.data(5) shift (-20) = 12 then
  6 11765                         d.opref.data(5) extract 20
  6 11766                       else
  6 11767                         0;
  6 11768                   inspect(ss_samtale_nedlagt(nr),i);
  6 11769                   if k<>0 then inspect(ss_samtale_nedlagt(k),j) else j:= 0;
  6 11770                   if i<>0 or j<>0 then
  6 11771                   begin
  7 11772                     res:= hookon(talevej,radop,cs_radio(talevej));
  7 11773                     goto radio_nedlæg;
  7 11774                   end;
  6 11775     
  6 11775                   res:= hookoff(talevej,radop,cs_radio(talevej),true);
  6 11776     
  6 11776                   if res=0 then
  6 11777                   begin
  7 11778                     i:= d.opref.data(5);
  7 11779                     d.opref.data(5):= d.opref.data(6);
  7 11780                     d.opref.data(6):= i;
  7 11781                     res:= 3;
  7 11782                   end;
  6 11783     
  6 11783                   d.opref.data(2):= d.opref.data(2)-1;
  6 11784                 end;
  5 11785                 d.opref.resultat:= res;
  5 11786                 signalch(d.opref.retur,opref,d.opref.optype);
  5 11787               end
  4 11788               else
  4 11789               begin
  5 11790                 fejlreaktion(2,opgave,<: radioopgave fra operatør:>,1);
  5 11791                 d.opref.resultat:= 31;
  5 11792                 signalch(d.opref.retur,opref,d.opref.optype);
  5 11793               end;
  4 11794     
  4 11794             end <* radiokommando fra operatør *>
  3 11795             else
  3 11796             begin
  4 11797     
  4 11797               d.op_ref.resultat:= 45; <* ikke implementeret *>
  4 11798     
  4 11798               signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  4 11799     
  4 11799             end;
  3 11800               
  3 11800           until false;
  3 11801     radio_trap:
  3 11802           disable skriv_radio(zbillede,1);
  3 11803         end radio;
  2 11804     \f

  2 11804     message procedure radio_ind side 1 - 810521/hko;
  2 11805     
  2 11805       procedure radio_ind(op);
  2 11806           value           op;
  2 11807           integer         op;
  2 11808         begin
  3 11809           integer array field op_ref,ref,io_opref;
  3 11810           integer ac, lgd, ttyp, ptyp, pnum, pos, tegn, bs, b_pt, b_pn,
  3 11811             antal_sendt, antal_spec, sum, csum, i, j, k, filref, zno;
  3 11812           integer array typ, val(1:6), answ, tlgr(1:32);
  3 11813           integer array field spec;
  3 11814           real field rf;
  3 11815           long array field laf;
  3 11816     
  3 11816           procedure skriv_radio_ind(zud,omfang);
  3 11817             value                       omfang;
  3 11818             zone                    zud;
  3 11819             integer                     omfang;
  3 11820             begin integer ii;
  4 11821               disable ii:=write(zud,"nl",1,<:+++ radio-ind ::>);
  4 11822               if omfang > 0 then
  4 11823               disable begin integer x; long array field tx;
  5 11824                 tx:= 0;
  5 11825                 trap(slut);
  5 11826                 write(zud,"nl",1,
  5 11827                   <:  op-ref:      :>,op_ref,"nl",1,
  5 11828                   <:  ref:         :>,ref,"nl",1,
  5 11829                   <:  io-opref:    :>,io_opref,"nl",1,
  5 11830                   <:  ac:          :>,ac,"nl",1,
  5 11831                   <:  lgd:         :>,lgd,"nl",1,
  5 11832                   <:  ttyp:        :>,ttyp,"nl",1,
  5 11833                   <:  ptyp:        :>,ptyp,"nl",1,
  5 11834                   <:  pnum:        :>,pnum,"nl",1,
  5 11835                   <:  pos:         :>,pos,"nl",1,
  5 11836                   <:  tegn:        :>,tegn,"nl",1,
  5 11837                   <:  bs:          :>,bs,"nl",1,
  5 11838                   <:  b-pt:        :>,b_pt,"nl",1,
  5 11839                   <:  b-pn:        :>,b_pn,"nl",1,
  5 11840                   <:  antal-sendt: :>,antal_sendt,"nl",1,
  5 11841                   <:  antal-spec:  :>,antal_spec,"nl",1,
  5 11842                   <:  sum:         :>,sum,"nl",1,
  5 11843                   <:  csum:        :>,csum,"nl",1,
  5 11844                   <:  i:           :>,i,"nl",1,
  5 11845                   <:  j:           :>,j,"nl",1,
  5 11846                   <:  k:           :>,k,"nl",1,
  5 11847                   <:  filref       :>,filref,"nl",1,
  5 11848                   <:  zno:         :>,zno,"nl",1,
  5 11849                   <:  answ:        :>,answ.tx,"nl",1,
  5 11850                   <:  tlgr:        :>,tlgr.tx,"nl",1,
  5 11851                   <:  spec:        :>,spec,"nl",1);
  5 11852                 trap(slut);
  5 11853     slut:
  5 11854               end; <*disable*>
  4 11855             end skriv_radio_ind;
  3 11856     \f

  3 11856     message procedure indsæt_opkald side 1 - 811105/hko;
  3 11857     
  3 11857       integer procedure indsæt_opkald(bus,type,omr,sig);
  3 11858         value                         bus,type,omr,sig;
  3 11859         integer                       bus,type,omr,sig;
  3 11860         begin
  4 11861           integer res,tilst,ll,operatør;
  4 11862           integer array field vt_op,ref,næste,forrige;
  4 11863           real r;
  4 11864     
  4 11864           res:= -1;
  4 11865           begin
  5 11866     <*V*>   waitch(cs_vt_adgang,vt_op,true,if type=2 then -1 else 10);
  5 11867             if vt_op <> 0 then
  5 11868             begin
  6 11869              wait(bs_opkaldskø_adgang);
  6 11870              if omr>2 then
  6 11871              begin
  7 11872               start_operation(vt_op,401,cs_radio_ind,14<*bus i kø*>);
  7 11873               d.vt_op.data(1):= bus;
  7 11874               d.vt_op.data(4):= omr;
  7 11875               tilst:= vt_op;
  7 11876               signal_ch(cs_vt,vt_op,gen_optype or vt_optype);
  7 11877     <*V*>     wait_ch(cs_radio_ind,vt_op,vt_optype,-1);
  7 11878     <*+4*>    if tilst <> vt_op then
  7 11879                 fejlreaktion(11<*fremmed post*>,vt_op,<:radio,indsæt opkald:>,0);
  7 11880     <*-4*>
  7 11881     <*+2*>    if testbit34 and overvåget then
  7 11882               disable begin
  8 11883                 write(out,"nl",1,<:radio_ind,indsæt.reservation retur:>);
  8 11884                 skriv_op(out,vt_op);
  8 11885                 ud;
  8 11886               end;
  7 11887              end
  6 11888              else
  6 11889              begin
  7 11890                d.vt_op.data(1):= bus;
  7 11891                d.vt_op.data(2):= 0;
  7 11892                d.vt_op.data(3):= bus;
  7 11893                d.vt_op.data(4):= omr;
  7 11894                d.vt_op.resultat:= 0;
  7 11895                ref:= første_nødopkald;
  7 11896                if ref<>0 then tilst:= 2
  7 11897                else
  7 11898                begin
  8 11899                  ref:= første_opkald;
  8 11900                  tilst:= if ref=0 then 0 else 1;
  8 11901                end;
  7 11902                if tilst=0 then
  7 11903                  d.vt_op.resultat:= 3
  7 11904                else
  7 11905                begin
  8 11906                  while ref<>0 and d.vt_op.resultat=0 do
  8 11907                  begin
  9 11908                    if opkaldskø.ref(2) extract 14 = bus and
  9 11909                       opkaldskø.ref(5) extract  8 = omr
  9 11910                    then
  9 11911                      d.vt_op.resultat:= 18
  9 11912                    else
  9 11913                    begin
 10 11914                      ref:= opkaldskø.ref(1) extract 12;
 10 11915                      if ref=0 and tilst=2 then
 10 11916                      begin
 11 11917                        ref:= første_opkald;
 11 11918                        tilst:= if ref=0 then 0 else 1;
 11 11919                      end
 10 11920                      else
 10 11921                      if ref=0 then tilst:= 0;
 10 11922                    end;
  9 11923                  end;
  8 11924                  if d.vt_op.resultat=0 then d.vt_op.resultat:= 3;
  8 11925                end;
  7 11926              end;
  6 11927     <*-2*>
  6 11928     \f

  6 11928     message procedure indsæt_opkald side 1a- 820301/hko;
  6 11929     
  6 11929               if d.vt_op.resultat=18<*bus i kø*> and type=2<*nød*> then
  6 11930               begin
  7 11931                 ref:=første_opkald;
  7 11932                 tilst:=-1;
  7 11933                 while ref<>0 and tilst=-1 do
  7 11934                 begin
  8 11935                   if opkaldskø.ref(2) extract 14 = bus extract 14 then
  8 11936                   begin <* udtag normalopkald *>
  9 11937                     næste:=opkaldskø.ref(1);
  9 11938                     forrige:=næste shift(-12);
  9 11939                     næste:=næste extract 12;
  9 11940                     if forrige<>0 then
  9 11941                       opkaldskø.forrige(1):=
  9 11942                         opkaldskø.forrige(1) shift(-12) shift 12 +næste
  9 11943                     else
  9 11944                       første_opkald:=næste;
  9 11945                     if næste<>0 then
  9 11946                       opkaldskø.næste(1):=
  9 11947                         opkaldskø.næste(1) extract 12 + forrige shift 12
  9 11948                     else
  9 11949                       sidste_opkald:=forrige;
  9 11950                     opkaldskø.ref(1):=første_frie_opkald;
  9 11951                     første_frie_opkald:=ref;
  9 11952                     opkaldskø_ledige:=opkaldskø_ledige +1;
  9 11953                     tilst:=0;
  9 11954                   end
  8 11955                   else
  8 11956                     ref:=opkaldskø.ref(1) extract 12;
  8 11957                 end; <*while*>
  7 11958                 if tilst=0 then
  7 11959                   d.vt_op.resultat:=3;
  7 11960               end; <*nødopkald bus i kø*>
  6 11961     \f

  6 11961     message procedure indsæt_opkald side 2 - 820304/hko;
  6 11962     
  6 11962               if d.vt_op.resultat = 3 then
  6 11963               begin
  7 11964                 ll:= d.vt_op.data(2);
  7 11965                 tilst:= d.vt_op.data(3);
  7 11966                 læstegn(radio_linietabel,(ll shift (-12) extract 10)+1,operatør);
  7 11967                 if operatør < 0 or max_antal_operatører < operatør then
  7 11968                   operatør:= 0;
  7 11969                 if operatør=0 then
  7 11970                   operatør:= (tilst shift (-14) extract 8);
  7 11971                 if operatør=0 then
  7 11972                   operatør:= radio_områdetabel(d.vt_op.data(4) extract 8);
  7 11973                 if operatør=0 or -,læsbit_ia(operatørmaske,operatør) then
  7 11974                   tofrom(opkaldsflag,alle_operatører,op_maske_lgd)
  7 11975                 else sæt_bit_ia(opkaldsflag,operatør,1);
  7 11976                 ref:= første_frie_opkald; <* forudsættes <> 0 *>
  7 11977                 første_frie_opkald:=opkaldskø.ref(1) extract 12; <*hægt ud*>
  7 11978                 forrige:= (if type = 1 then sidste_opkald
  7 11979                                        else sidste_nødopkald);
  7 11980                 opkaldskø.ref(1):= forrige shift 12;
  7 11981                 if type = 1 then
  7 11982                 begin
  8 11983                   if første_opkald = 0 then første_opkald:= ref;
  8 11984                   sidste_opkald:= ref;
  8 11985                 end
  7 11986                 else
  7 11987                 begin <*type = 2*>
  8 11988                   if første_nødopkald = 0 then første_nødopkald:= ref;
  8 11989                   sidste_nødopkald:= ref;
  8 11990                 end;
  7 11991                 if forrige <> 0 then
  7 11992                   opkaldskø.forrige(1):= opkaldskø.forrige(1) shift (-12)
  7 11993                                          shift 12 +ref;
  7 11994     
  7 11994                 opkaldskø.ref(2):= tilst extract 22 add
  7 11995                     (if type=2 then 1 shift 23 else 0);
  7 11996                 opkaldskø.ref(3):= ll;
  7 11997                 systime(5,0.0,r);
  7 11998                 ll:= round r//100;<*ttmm*>
  7 11999                 opkaldskø.ref(4):= ll shift 12 +type shift 8 +operatør extract 8;
  7 12000                 opkaldskø.ref(5):= sig shift 20 + omr;
  7 12001                 tofrom(opkaldskø.ref.opkald_meldt,ingen_operatører,op_maske_lgd);
  7 12002                 res:= 0;
  7 12003                 if type=2 then nød_opkald_brugt:=nødopkald_brugt + 1;
  7 12004                 opkaldskø_ledige:= opkaldskø_ledige -1;
  7 12005                 <*meddel opkald til berørte operatører *>
  7 12006                 signal_bin(bs_mobil_opkald);
  7 12007                 tæl_opkald(omr,type+1);
  7 12008               end <* resultat = 3 *>
  6 12009               else
  6 12010               begin
  7 12011     \f

  7 12011     message procedure indsæt_opkald side 3 - 810601/hko;
  7 12012     
  7 12012                 <* d.vt_op.resultat <> 3 *>
  7 12013     
  7 12013                 res:= d.vt_op.resultat;
  7 12014                 if res = 10 then
  7 12015                   fejlreaktion(20<*mobilopkald, bus *>,bus,
  7 12016                     <:er ikke i bustabel:>,1)
  7 12017                 else
  7 12018     <*+4*>      if res <> 14 and res <> 18 then
  7 12019                   fejlreaktion(19<*radio*>,res,<:busreservationsresultat:>,1);
  7 12020     <*-4*>
  7 12021                 ;
  7 12022               end;
  6 12023               signalbin(bs_opkaldskø_adgang);
  6 12024               signal_ch(cs_vt_adgang,vt_op,gen_optype or vt_optype);
  6 12025             end
  5 12026             else
  5 12027               res:= -2; <*timeout for cs_vt_adgang*>
  5 12028           end;
  4 12029           indsæt_opkald:= res;
  4 12030         end indsæt_opkald;
  3 12031     \f

  3 12031     message procedure afvent_telegram side 1 - 880901/cl;
  3 12032     
  3 12032     integer procedure afvent_telegram(tlgr,lgd,ttyp,ptyp,pnum);
  3 12033       integer array                   tlgr;
  3 12034       integer                              lgd,ttyp,ptyp,pnum;
  3 12035     begin
  4 12036       integer i, pos, tegn, ac, sum, csum;
  4 12037     
  4 12037       pos:= 1;
  4 12038       lgd:= 0;
  4 12039       ttyp:= 'Z';
  4 12040     <*V*> ac:= afvent_radioinput(z_fr_in,tlgr,false);
  4 12041       if ac >= 0 then
  4 12042       begin
  5 12043         lgd:= 1;
  5 12044         while læstegn(tlgr,lgd,tegn)<>0 do ;
  5 12045         lgd:= lgd-2;
  5 12046         if lgd >= 3 then
  5 12047         begin
  6 12048           i:= 1;
  6 12049           ttyp:= læstegn(tlgr,i,tegn);
  6 12050           ptyp:= læstegn(tlgr,i,tegn) - '@';
  6 12051           pnum:= læstegn(tlgr,i,tegn) - '@';
  6 12052         end
  5 12053         else ac:= 6; <* for kort telegram - retransmitter *>
  5 12054       end;
  4 12055     
  4 12055       afvent_telegram:= ac;
  4 12056     end;
  3 12057     \f

  3 12057     message procedure b_answ side 1 - 880901/cl;
  3 12058     
  3 12058     procedure b_answ(answ,ht,spec,more,ac);
  3 12059       value               ht,     more,ac;
  3 12060       integer array  answ,   spec;
  3 12061       boolean                     more;
  3 12062       integer             ht,          ac;
  3 12063     begin
  4 12064       integer pos, i, sum, tegn;
  4 12065     
  4 12065       pos:= 1;
  4 12066       skrivtegn(answ,pos,'B');
  4 12067       skrivtegn(answ,pos,if more then 'B' else ' ');
  4 12068       skrivtegn(answ,pos,ac+'@');
  4 12069       skrivtegn(answ,pos,spec(1) shift (-18) extract 6+'@');
  4 12070       skrivtegn(answ,pos,spec(1) shift (-12) extract 6+'@');
  4 12071       skrivtegn(answ,pos,'@');
  4 12072       skrivtegn(answ,pos,spec(1) shift (-8) extract 4+'@');
  4 12073       skrivtegn(answ,pos,spec(1) extract 8+'@');
  4 12074       for i:= 1 step 1 until spec(1) extract 8 do
  4 12075         if spec(1+i)=0 then skrivtegn(answ,pos,'@')
  4 12076         else
  4 12077         begin
  5 12078           skrivtegn(answ,pos,'D');
  5 12079           anbringtal(answ,pos,spec(1+i),-4);
  5 12080         end;
  4 12081       for i:= 1 step 1 until 4 do
  4 12082         skrivtegn(answ,pos,'@');
  4 12083       skrivtegn(answ,pos,ht+'@');
  4 12084       skrivtegn(answ,pos,'@');
  4 12085     
  4 12085       i:= 1; sum:= 0;
  4 12086       while i < pos do
  4 12087         sum:= (sum + læstegn(answ,i,tegn)) mod 256;
  4 12088       skrivtegn(answ,pos,(sum shift (-4)) extract 4 + '@');
  4 12089       skrivtegn(answ,pos,sum extract 4 + '@');
  4 12090       repeat skrivtegn(answ,pos,0) until (pos mod 6)=1;
  4 12091     end;
  3 12092     \f

  3 12092     message procedure ann_opkald side 1 - 881108/cl;
  3 12093     
  3 12093     integer procedure ann_opkald(vogn,omr);
  3 12094       value                      vogn,omr;
  3 12095       integer                    vogn,omr;
  3 12096     begin
  4 12097       integer array field vt_op,ref,næste,forrige;
  4 12098       integer res, t, i, o;
  4 12099     
  4 12099       waitch(cs_vt_adgang,vt_op,true,-1);
  4 12100       res:= -1;
  4 12101       wait(bs_opkaldskø_adgang);
  4 12102       ref:= første_nødopkald;
  4 12103       if ref <> 0 then
  4 12104         t:= 2
  4 12105       else
  4 12106       begin
  5 12107         ref:= første_opkald;
  5 12108         t:= if ref<>0 then 1 else 0;
  5 12109       end;
  4 12110     
  4 12110       if t=0 then
  4 12111         res:= 19 <* kø tom *>
  4 12112       else
  4 12113       begin
  5 12114         while ref<>0 and res=(-1) do
  5 12115         begin
  6 12116           if vogn=opkaldskø.ref(2) extract 14 and
  6 12117               omr=opkaldskø.ref(5) extract 8
  6 12118           then
  6 12119             res:= 0
  6 12120           else
  6 12121           begin
  7 12122             ref:= opkaldskø.ref(1) extract 12;
  7 12123             if ref=0 and t=2 then
  7 12124             begin
  8 12125               ref:= første_opkald;
  8 12126               t:= if ref=0 then 0 else 1;
  8 12127             end;
  7 12128           end;
  6 12129         end; <*while*>
  5 12130     \f

  5 12130     message procedure ann_opkald side 2 - 881108/cl;
  5 12131     
  5 12131         if ref<>0 then
  5 12132         begin
  6 12133           start_operation(vt_op,401,cs_radio_ind,17);
  6 12134           d.vt_op.data(1):= vogn;
  6 12135           d.vt_op.data(4):= omr;
  6 12136           signalch(cs_vt,vt_op,gen_optype or vt_optype);
  6 12137           waitch(cs_radio_ind,vt_op,vt_optype,-1);
  6 12138     
  6 12138           o:= opkaldskø.ref(4) extract 8;
  6 12139           næste:= opkaldskø.ref(1);
  6 12140           forrige:= næste shift (-12);
  6 12141           næste:= næste extract 12;
  6 12142           if forrige<>0 then
  6 12143             opkaldskø.forrige(1):= opkaldskø.forrige(1) shift (-12) shift 12
  6 12144                                    + næste
  6 12145           else
  6 12146           if t=2 then første_nødopkald:= næste
  6 12147           else første_opkald:= næste;
  6 12148     
  6 12148           if næste<>0 then
  6 12149             opkaldskø.næste(1):= opkaldskø.næste(1) extract 12
  6 12150                                  + forrige shift 12
  6 12151           else
  6 12152           if t=2 then sidste_nødopkald:= forrige
  6 12153           else sidste_opkald:= forrige;
  6 12154     
  6 12154           opkaldskø.ref(1):= første_frie_opkald;
  6 12155           første_frie_opkald:= ref;
  6 12156           opkaldskø_ledige:= opkaldskø_ledige + 1;
  6 12157           if t=2 then nødopkald_brugt:= nødopkald_brugt - 1;
  6 12158     
  6 12158           if -, læsbit_ia(operatør_maske,o) or o=0 then
  6 12159             tofrom(opkaldsflag,alle_operatører,op_maske_lgd)
  6 12160           else
  6 12161           begin
  7 12162             sætbit_ia(opkaldsflag,o,1);
  7 12163           end;
  6 12164           signalbin(bs_mobilopkald);
  6 12165         end;
  5 12166       end;
  4 12167     
  4 12167       signalbin(bs_opkaldskø_adgang);
  4 12168       signalch(cs_vt_adgang, vt_op, true);
  4 12169       ann_opkald:= res;
  4 12170     end;
  3 12171     \f

  3 12171     message procedure frigiv_id side 1 - 881114/cl;
  3 12172     
  3 12172     integer procedure frigiv_id(id,omr);
  3 12173       value                     id,omr;
  3 12174       integer                   id,omr;
  3 12175     begin
  4 12176       integer array field vt_op;
  4 12177     
  4 12177       if id shift (-22) < 3 and omr > 2 then
  4 12178       begin
  5 12179         waitch(cs_vt_adgang,vt_op,true,-1);
  5 12180         start_operation(vt_op,401,cs_radio_ind,
  5 12181           if id shift (-22) = 2 then 18 else 17);
  5 12182         d.vt_op.data(1):= id;
  5 12183         d.vt_op.data(4):= omr;
  5 12184         signalch(cs_vt,vt_op,vt_optype or gen_optype);
  5 12185         waitch(cs_radio_ind,vt_op,vt_optype,-1);
  5 12186         frigiv_id:= d.vt_op.resultat;
  5 12187         signalch(cs_vt_adgang,vt_op,true);
  5 12188       end;
  4 12189     end;
  3 12190     \f

  3 12190     message procedure radio_ind side 2 - 810524/hko;
  3 12191         trap(radio_ind_trap);
  3 12192         laf:= 0;
  3 12193         stack_claim((if cm_test then 200 else 150) +135+75);
  3 12194     
  3 12194     <*+2*>if testbit32 and overvåget or testbit28 then
  3 12195             skriv_radio_ind(out,0);
  3 12196     <*-2*>
  3 12197           answ.laf(1):= long<:<'nl'>:>;
  3 12198           io_opref:= op;
  3 12199     
  3 12199           repeat
  3 12200             ac:= afvent_telegram(tlgr,lgd,ttyp,ptyp,pnum);
  3 12201             pos:= 4;
  3 12202             if ac = 0 then
  3 12203             begin
  4 12204     \f

  4 12204     message procedure radio_ind side 3 - 881107/cl;
  4 12205               if ttyp = 'A' then
  4 12206               begin
  5 12207                 if ptyp<>4 or pnum<1 or pnum>max_antal_taleveje then
  5 12208                   ac:= 1
  5 12209                 else
  5 12210                 begin
  6 12211                   typ(1):= 1 shift 12 + (opkode - 1); <* eq shortint opgave *>
  6 12212                   val(1):= ttyp;
  6 12213                   typ(2):= 2 shift 12 + (data + 2);   <* eq integer  data(1) *>
  6 12214                   val(2):= pnum;
  6 12215                   typ(3):= -1;
  6 12216                   getch(cs_radio_ind,opref,rad_optype,typ,val);
  6 12217                   if opref>0 then
  6 12218                   begin
  7 12219                     if læstegn(tlgr,pos,tegn)<>'@' <*BST*> or
  7 12220                        læstegn(tlgr,pos,tegn)<>'A' <*PET*> or
  7 12221                        læstegn(tlgr,pos,tegn)<>d.opref.data(2)+'@' <*CTYP*> or
  7 12222                        læstegn(tlgr,pos,tegn)<>'@' <*TNO*>
  7 12223                     then
  7 12224                     begin
  8 12225                       ac:= 1; d.opref.resultat:= 31; <* systemfejl *>
  8 12226                     end
  7 12227                     else
  7 12228                     begin
  8 12229                       ac:= 0;
  8 12230                       d.opref.resultat:= 0;
  8 12231                       sætbit_ia(hookoff_maske,pnum,1);
  8 12232                     end;
  7 12233                     signalch(d.opref.retur,opref,d.opref.optype);
  7 12234                   end
  6 12235                   else
  6 12236                     ac:= 2;
  6 12237                 end;
  5 12238                 pos:= 1;
  5 12239                 skrivtegn(answ,pos,'A');
  5 12240                 skrivtegn(answ,pos,' ');
  5 12241                 skrivtegn(answ,pos,ac+'@');
  5 12242                 for i:= 1 step 1 until 5 do
  5 12243                   skrivtegn(answ,pos,'@');
  5 12244                 skrivtegn(answ,pos,'0');
  5 12245                 i:= 1; sum:= 0;
  5 12246                 while i < pos do
  5 12247                   sum:= (sum + læstegn(answ,i,tegn)) mod 256;
  5 12248                 skrivtegn(answ,pos,sum shift (-4) extract 4 + '@');
  5 12249                 skrivtegn(answ,pos,sum extract 4 + '@');
  5 12250                 repeat afsluttext(answ,pos) until pos mod 6 = 1;
  5 12251                 write(z_fr_out,"nl",1,answ.laf,"cr",1);
  5 12252     <*+2*>      if (testbit36 or testbit38) and overvåget then
  5 12253                 disable begin
  6 12254                   write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf);
  6 12255                   outchar(zrl,'nl');
  6 12256                 end;
  5 12257     <*-2*>
  5 12258                 disable setposition(z_fr_out,0,0);
  5 12259                 ac:= -1;
  5 12260     \f

  5 12260     message procedure radio_ind side 4 - 881107/cl;
  5 12261               end <* ttyp=A *>
  4 12262               else
  4 12263               if ttyp = 'B' then
  4 12264               begin
  5 12265                 if ptyp<>4 or pnum<1 or pnum>max_antal_taleveje then
  5 12266                   ac:= 1
  5 12267                 else
  5 12268                 begin
  6 12269                   typ(1):= 1 shift 12 + (opkode-1); val(1):= 'B';
  6 12270                   typ(2):= 2 shift 12 + (data+2); val(2):= pnum;
  6 12271                   typ(3):= -1;
  6 12272                   getch(cs_radio_ind,opref,rad_optype,typ,val);
  6 12273                   if opref > 0 then
  6 12274                   begin
  7 12275     <*+2*> if testbit37 and overvåget then
  7 12276            disable begin
  8 12277              skriv_radio_ind(out,0);
  8 12278              write(out,<:radio-ind B-op udtaget fra cs:>,<<d>,cs_radio_ind);
  8 12279              skriv_op(out,opref);
  8 12280            end;
  7 12281     <*-2*>
  7 12282                     læstegn(tlgr,pos,bs);
  7 12283                     if bs = 'V' then
  7 12284                     begin
  8 12285                       b_pt:= læstegn(tlgr,pos,tegn) - '@';
  8 12286                       b_pn:= læstegn(tlgr,pos,tegn) - '@';
  8 12287                     end;
  7 12288                     if bs<>'Z' and bs<>d.opref.data(2) or bs='V' and
  7 12289                        (b_pt<>d.opref.data(10) shift (-18) extract 6 or
  7 12290                        b_pn<>d.opref.data(10) shift (-12) extract 6)
  7 12291                     then
  7 12292                     begin
  8 12293                       ac:= 1;
  8 12294                       d.opref.resultat:= 31; <* systemfejl *>
  8 12295                       signalch(d.opref.retur,opref,d.opref.optype);
  8 12296                     end
  7 12297                     else
  7 12298                     if bs='V' then
  7 12299                     begin
  8 12300                       ac:= 0;
  8 12301                       d.opref.resultat:= 1;
  8 12302                       d.opref.data(4):= 0;
  8 12303                       d.opref.data(7):=
  8 12304                          1 shift (if b_pt=2 then pabx_id(b_pn) else
  8 12305                                         radio_id(b_pn));
  8 12306                       systime(1,0.0,d.opref.tid);
  8 12307                       signalch(cs_radio_ind,opref,d.opref.optype);
  8 12308                       spec:= data+18;
  8 12309                       b_answ(answ,0,d.opref.spec,false,ac);
  8 12310     <*+2*>            if (testbit36 or testbit38) and overvåget then
  8 12311                       disable begin
  9 12312                         write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf);
  9 12313                         outchar(zrl,'nl');
  9 12314                       end;
  8 12315     <*-2*>
  8 12316                       write(z_fr_out,"nl",1,answ.laf,"cr",1);
  8 12317                       disable setposition(z_fr_out,0,0);
  8 12318                       ac:= -1;
  8 12319     \f

  8 12319     message procedure radio_ind side 5 - 881107/cl;
  8 12320                     end
  7 12321                     else
  7 12322                     begin
  8 12323                       integer sig_type;
  8 12324     
  8 12324                       ac:= 0;
  8 12325                       antal_spec:= d.opref.data(4);
  8 12326                       filref:= d.opref.data(5);
  8 12327                       spec:= d.opref.data(6);
  8 12328                       if antal_spec>0 then
  8 12329                       begin
  9 12330                         antal_spec:= antal_spec-1;
  9 12331                         if filref<>0 then
  9 12332                         begin
 10 12333                           læsfil(filref,1,zno);
 10 12334                           b_pt:= fil(zno).spec(1) shift (-12);
 10 12335                           sig_type:= fil(zno).spec(1) shift (-8) extract 4;
 10 12336                           b_answ(answ,d.opref.data(3),fil(zno).spec,
 10 12337                             antal_spec>0,ac);
 10 12338                           spec:= spec + (fil(zno).spec(1) extract 8 + 1)*2;
 10 12339                         end
  9 12340                         else
  9 12341                         begin
 10 12342                           b_pt:= d.opref.spec(1) shift (-12);
 10 12343                           sig_type:= d.opref.spec(1) shift (-8) extract 4;
 10 12344                           b_answ(answ,d.opref.data(3),d.opref.spec,
 10 12345                             antal_spec>0,ac);
 10 12346                           spec:= spec + d.opref.spec(1) extract 8*2 + 2;
 10 12347                         end;
  9 12348      
  9 12348                         <* send answer *>
  9 12349     <*+2*>              if (testbit36 or testbit38) and overvåget then
  9 12350                         disable begin
 10 12351                           write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf);
 10 12352                           outchar(zrl,'nl');
 10 12353                         end;
  9 12354     <*-2*>
  9 12355                         write(z_fr_out,"nl",1,answ.laf,"cr",1);
  9 12356                         disable setposition(z_fr_out,0,0);
  9 12357                         if ac<>0 then
  9 12358                         begin
 10 12359                           antal_spec:= 0;
 10 12360                           ac:= -1;
 10 12361                         end
  9 12362                         else
  9 12363                         begin
 10 12364                           for i:= 1 step 1 until max_antal_områder do
 10 12365                           if område_id(i,2)=b_pt then
 10 12366                           begin
 11 12367                             j:= (if b_pt=3 and sig_type=2 then 0 else i);
 11 12368                             if sætbiti(d.opref.data(7),j,1)=0 then 
 11 12369                               d.opref.resultat:= d.opref.resultat + 1;
 11 12370                           end;
 10 12371                         end;
  9 12372                       end;
  8 12373     \f

  8 12373     message procedure radio_ind side 6 - 881107/cl;
  8 12374     
  8 12374                       <* afvent nyt telegram *>
  8 12375                       d.opref.data(4):= antal_spec;
  8 12376                       d.opref.data(6):= spec;
  8 12377                       ac:= -1;
  8 12378                       systime(1,0.0,d.opref.tid);
  8 12379     <*+2*>            if testbit37 and overvåget then
  8 12380                       disable begin
  9 12381                         skriv_radio_ind(out,0);
  9 12382                         write(out,<:radio-ind B-op retur på cs:>,<<d>,cs_radio_ind);                    skriv_op(out,opref);
  9 12383                         ud;
  9 12384                       end;
  8 12385     <*-2*>
  8 12386                       signalch(cs_radio_ind,opref,d.opref.optype);
  8 12387                     end;
  7 12388                   end
  6 12389                   else ac:= 2;
  6 12390                 end;
  5 12391                 if ac > 0 then
  5 12392                 begin
  6 12393                   for i:= 1 step 1 until 6 do val(i):= 0;
  6 12394                   b_answ(answ,0,val,false,ac);
  6 12395     <*+2*>
  6 12396                   if (testbit36 or testbit38) and overvåget then
  6 12397                   disable begin
  7 12398                     write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf);
  7 12399                     outchar(zrl,'nl');
  7 12400                   end;
  6 12401     <*-2*>
  6 12402                   write(z_fr_out,"nl",1,answ.laf,"cr",1);
  6 12403                   disable setposition(z_fr_out,0,0);
  6 12404                   ac:= -1;
  6 12405                 end;
  5 12406     \f

  5 12406     message procedure radio_ind side 7 - 881107/cl;
  5 12407               end <* ttyp = 'B' *>
  4 12408               else
  4 12409               if ttyp='C' or ttyp='J' then
  4 12410               begin
  5 12411                 if ptyp<>4 or pnum<1 or pnum>max_antal_taleveje then
  5 12412                   ac:= 1
  5 12413                 else
  5 12414                 begin
  6 12415                   typ(1):= 1 shift 12 + (opkode - 1); val(1):= 'B';
  6 12416                   typ(2):= 2 shift 12 + (data + 2); val(2):= pnum;
  6 12417                   typ(3):= -1;
  6 12418                   getch(cs_radio_ind,opref,rad_optype,typ,val);
  6 12419                   if opref > 0 then
  6 12420                   begin
  7 12421                     d.opref.resultat:= d.opref.resultat - 1;
  7 12422                     if ttyp  = 'C' then
  7 12423                     begin
  8 12424                       b_pt:= læstegn(tlgr,4,tegn)-'@'; <* ????? *>
  8 12425                       b_pn:= læstegn(tlgr,5,tegn)-'@'; <* ????? *>
  8 12426                       j:= 0;
  8 12427                       for i:= 1 step 1 until max_antal_kanaler do
  8 12428                         if kanal_id(i)=b_pt shift 5 + b_pn then j:= i;
  8 12429                       if kanal_til_omr(j)=3 and d.opref.resultat>0 then
  8 12430                         d.opref.resultat:= d.opref.resultat-1;
  8 12431                       sætbiti(optaget_flag,j,1);
  8 12432                       sætbiti(d.opref.data(9),j,1);
  8 12433                     end
  7 12434                     else
  7 12435                     begin <* INGEN FORBINDELSE *>
  8 12436                       sætbiti(d.opref.data(8),læstegn(tlgr,4,tegn)-'@',1);
  8 12437                     end;
  7 12438                     ac:= 0;
  7 12439                     if d.opref.resultat<>0 or d.opref.data(4)<>0 then
  7 12440                     begin
  8 12441                       systime(1,0,d.opref.tid);
  8 12442                       signal_ch(cs_radio_ind,opref,d.opref.op_type);
  8 12443                     end
  7 12444                     else
  7 12445                     begin
  8 12446                       d.opref.resultat:= if d.opref.data(9)<>0 then 0 else 
  8 12447                          if læsbiti(d.opref.data(8),9) then 52 else
  8 12448                          if læsbiti(d.opref.data(8),10) then 20 else
  8 12449                          if læsbiti(d.opref.data(8),2) then 52 else 59;
  8 12450                       signalch(d.opref.retur, opref, d.opref.optype);
  8 12451                     end;
  7 12452                   end
  6 12453                   else
  6 12454                     ac:= 2;
  6 12455                 end;
  5 12456                 pos:= 1;
  5 12457                 skrivtegn(answ,pos,ttyp);
  5 12458                 skrivtegn(answ,pos,' ');
  5 12459                 skrivtegn(answ,pos,ac+'@');
  5 12460                 i:= 1; sum:= 0;
  5 12461                 while i < pos do
  5 12462                   sum:= (sum + læstegn(answ,i,tegn)) mod 256;
  5 12463                 skrivtegn(answ,pos,sum shift (-4) + '@');
  5 12464                 skrivtegn(answ,pos,sum extract 4 + '@');
  5 12465                 repeat afsluttext(answ,pos) until pos mod 6 = 1;
  5 12466     <*+2*>      if (testbit36 or testbit38) and overvåget then
  5 12467                 disable begin
  6 12468                   write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf);
  6 12469                   outchar(zrl,'nl');
  6 12470                 end;
  5 12471     <*-2*>
  5 12472                 write(z_fr_out,"nl",1,answ.laf,"cr",1);
  5 12473                 disable setposition(z_fr_out,0,0);
  5 12474                 ac:= -1;
  5 12475     \f

  5 12475     message procedure radio_ind side 8 - 881107/cl;
  5 12476               end <* ttyp = 'C' or 'J' *>
  4 12477               else
  4 12478               if ttyp = 'D' then
  4 12479               begin
  5 12480                 if ptyp = 4 <* VDU *> then
  5 12481                 begin
  6 12482                   if pnum<1 or pnum>max_antal_taleveje then
  6 12483                     ac:= 1
  6 12484                   else
  6 12485                   begin
  7 12486                     inspect(bs_talevej_udkoblet(pnum),j);
  7 12487                     if j>=0 then
  7 12488                     begin
  8 12489                       sætbit_ia(samtaleflag,pnum,1);
  8 12490                       signal_bin(bs_mobil_opkald);
  8 12491                     end;
  7 12492                     if læsbit_ia(hookoff_maske,pnum) then
  7 12493                       signalbin(bs_talevej_udkoblet(pnum));
  7 12494                     ac:= 0;
  7 12495                   end
  6 12496                 end
  5 12497                 else
  5 12498                 if ptyp=3 or ptyp=2 then
  5 12499                 begin
  6 12500                   if ptyp=3 and (pnum<1 or max_antal_radiokanaler<pnum) or
  6 12501                      ptyp=2 and pnum<>2
  6 12502                   then
  6 12503                     ac:= 1
  6 12504                   else
  6 12505                   begin
  7 12506                     if læstegn(tlgr,5,tegn)='D' then
  7 12507                     begin <* teknisk nr i telegram *>
  8 12508                       b_pn:= 0;
  8 12509                       for i:= 1 step 1 until 4 do
  8 12510                         b_pn:= b_pn*10 + læstegn(tlgr,5+i,tegn)-'0';
  8 12511                     end
  7 12512                     else
  7 12513                       b_pn:= 0;
  7 12514                     b_pt:= port_til_omr(ptyp shift 6 + pnum);
  7 12515                     i:= 0;
  7 12516                     for j:= 1 step 1 until max_antal_kanaler do
  7 12517                     if kanal_id(j) = ptyp shift 5 + pnum then i:= j;
  7 12518                     if i<>0 then
  7 12519                     begin
  8 12520                       ref:= (i-1)*kanalbeskrlængde;
  8 12521                       inspect(ss_samtale_nedlagt(i),j);
  8 12522                       if j>=0 then
  8 12523                       begin
  9 12524                         sætbit_ia(samtaleflag,
  9 12525                           tv_operatør(kanal_tab.ref.kanal_tilstand shift (-16)),1);
  9 12526                         signalbin(bs_mobil_opkald);
  9 12527                       end;
  8 12528                       signal(ss_samtale_nedlagt(i));
  8 12529                       if b_pn<>0 then frigiv_id(b_pn,b_pt);
  8 12530                       begin
  9 12531                         if kanal_tab.ref.kanal_id1<>0 and
  9 12532                           (kanal_tab.ref.kanal_id1 shift (-22)<>0 or
  9 12533                            kanal_tab.ref.kanal_id1 extract 14<>b_pn) then
  9 12534                           frigiv_id(kanal_tab.ref.kanal_id1,b_pt);
  9 12535                         if kanal_tab.ref.kanal_id2<>0 and
  9 12536                           (kanal_tab.ref.kanal_id2 shift (-22)<>0 or
  9 12537                            kanal_tab.ref.kanal_id2 extract 14<>b_pn) then
  9 12538                           frigiv_id(kanal_tab.ref.kanal_id2,b_pt);
  9 12539                       end;
  8 12540                       sætbiti(optaget_flag,i,0);
  8 12541                     end;
  7 12542                     ac:= 0;
  7 12543                   end;
  6 12544                 end
  5 12545                 else ac:= 1;
  5 12546                 if ac>=0 then
  5 12547                 begin
  6 12548                   pos:= i:= 1; sum:= 0;
  6 12549                   skrivtegn(answ,pos,'D');
  6 12550                   skrivtegn(answ,pos,' ');
  6 12551                   skrivtegn(answ,pos,ac+'@');
  6 12552                   skrivtegn(answ,pos,'@');
  6 12553                   while i<pos do
  6 12554                     sum:= (sum + læstegn(answ,i,tegn)) mod 256;
  6 12555                   skrivtegn(answ,pos, sum shift (-4) extract 4 + '@');
  6 12556                   skrivtegn(answ,pos, sum extract 4 + '@');
  6 12557                   repeat afsluttext(answ,pos) until pos mod 6 = 1;
  6 12558     <*+2*>
  6 12559                   if (testbit36 or testbit38) and overvåget then
  6 12560                   disable begin
  7 12561                     write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf);
  7 12562                     outchar(zrl,'nl');
  7 12563                   end;
  6 12564     <*-2*>
  6 12565                   write(z_fr_out,"nl",1,answ.laf,"cr",1);
  6 12566                   disable setposition(z_fr_out,0,0);
  6 12567                   ac:= -1;
  6 12568                 end;
  5 12569     \f

  5 12569     message procedure radio_ind side 9 - 881107/cl;
  5 12570               end <* ttyp = D *>
  4 12571               else
  4 12572               if ttyp='H' then
  4 12573               begin
  5 12574                 integer htyp;
  5 12575     
  5 12575                 htyp:= læstegn(tlgr,7+læstegn(tlgr,6,tegn)-'@',tegn);
  5 12576     
  5 12576                 if htyp='A' then
  5 12577                 begin <*mobilopkald*>
  6 12578                  if (ptyp=2 and pnum<>2) or (ptyp=3 and
  6 12579                    (pnum<1 or pnum>max_antal_radiokanaler)) then
  6 12580                      ac:= 1
  6 12581                  else
  6 12582                  begin
  7 12583                   b_pt:= læstegn(tlgr,5,tegn)-'@';
  7 12584                   if læstegn(tlgr,6,tegn)='D' then
  7 12585                   begin <*teknisk nr. i telegram*>
  8 12586                     b_pn:= 0;
  8 12587                     for i:= 1 step 1 until 4 do
  8 12588                       b_pn:= b_pn*10 + læstegn(tlgr,6+i,tegn)-'0';
  8 12589                   end
  7 12590                   else b_pn:= 0;
  7 12591                   bs:= læstegn(tlgr,9+læstegn(tlgr,6,tegn)-'@',tegn)-'@'+1;
  7 12592                                           <* opkaldstype *>
  7 12593                   j:= (if ptyp=2 then pabx_id(pnum) else radio_id(pnum));
  7 12594                   if j>0 then
  7 12595                   begin
  8 12596                     if bs=10 then
  8 12597                       ann_opkald(b_pn,j)
  8 12598                     else
  8 12599                       indsæt_opkald(b_pn,bs,j,if b_pt>1 then 1 else 0);
  8 12600                     ac:= 0;
  8 12601                   end else ac:= 1;
  7 12602                  end;
  6 12603     \f

  6 12603     message procedure radio_ind side 10 - 881107/cl;
  6 12604                 end
  5 12605                 else
  5 12606                 if htyp='E' then
  5 12607                 begin <* radiokanal status *>
  6 12608                   long onavn;
  6 12609     
  6 12609                   ac:= 0;
  6 12610                   j:= 0;
  6 12611                   for i:= 1 step 1 until max_antal_kanaler do
  6 12612                   if kanal_id(i) = ptyp shift 5 + pnum then j:= i;
  6 12613     
  6 12613                   <* Alarmer for K12 = GLX ignoreres *>
  6 12614                   <* 94.06.14/CL                     *>
  6 12615                   <* Alarmer for K15 = HG  ignoreres *>
  6 12616                   <* 95.07.31/CL                     *>
  6 12617                   <* Alarmer for K10 = FS  ignoreres *>
  6 12618                   <* 96.05.27/CL                     *>
  6 12619                   if j>0 then
  6 12620                   begin
  7 12621                     onavn:= områdenavn(port_til_omr(ptyp shift 6 + pnum));
  7 12622                     j:= (if (onavn = long<:GLX:>) or (onavn = long<:HG:>) or
  7 12623                          (onavn = long<:FS:>) then 0 else j);
  7 12624                   end;
  6 12625     
  6 12625                   læstegn(tlgr,9,tegn);
  6 12626                   if j<>0 and (tegn='A' or tegn='E') then
  6 12627                   begin
  7 12628                     ref:= (j-1)*kanalbeskrlængde;
  7 12629                     bs:= if tegn='E' then 0 else 15;
  7 12630                     if bs<>sæt_hex_ciffer(kanal_tab.ref,3,bs) then
  7 12631                     begin
  8 12632                       tofrom(kanalflag,alle_operatører,op_maske_lgd);
  8 12633                       signalbin(bs_mobil_opkald);
  8 12634                     end;
  7 12635                   end;
  6 12636                   if tegn<>'A' and tegn<>'E' and j<>0 then
  6 12637                   begin
  7 12638                     waitch(cs_radio_pulje,opref,true,-1);
  7 12639                     startoperation(opref,401,cs_radio_pulje,23);
  7 12640                     i:= 1;
  7 12641                     hægtstring(d.opref.data,i,<:radiofejl :>);
  7 12642                     if læstegn(tlgr,4,k)<>'@' then
  7 12643                     begin
  8 12644                       if k-'@' = 17 then
  8 12645                         hægtstring(d.opref.data,i,<: AMV:>)
  8 12646                       else
  8 12647                       if k-'@' = 18 then
  8 12648                         hægtstring(d.opref.data,i,<: BHV:>)
  8 12649                       else
  8 12650                       begin
  9 12651                         hægtstring(d.opref.data,i,<: BST:>);
  9 12652                         anbringtal(d.opref.data,i,k-'@',1);
  9 12653                       end;
  8 12654                     end;
  7 12655                     skrivtegn(d.opref.data,i,' ');
  7 12656                     hægtstring(d.opref.data,i,string kanal_navn(j));
  7 12657                     skrivtegn(d.opref.data,i,' ');
  7 12658                     hægtstring(d.opref.data,i,
  7 12659                       string område_navn(kanal_til_omr(j)));
  7 12660                     if '@'<=tegn and tegn<='F' then
  7 12661                       hægtstring(d.opref.data,i,case (tegn-'@'+1) of (
  7 12662                         <*@*> <:: ukendt fejl:>,
  7 12663                         <*A*> <:: compad-fejl:>,
  7 12664                         <*B*> <:: ladefejl:>,
  7 12665                         <*C*> <:: dør åben:>,
  7 12666                         <*D*> <:: senderfejl:>,
  7 12667                         <*E*> <:: compad ok:>,
  7 12668                         <*F*> <:: liniefejl:>,
  7 12669                         <::>))
  7 12670                     else
  7 12671                     begin
  8 12672                       hægtstring(d.opref.data,i,<:: fejlkode :>);
  8 12673                       skrivtegn(d.opref.data,i,tegn);
  8 12674                     end;
  7 12675                     repeat afsluttext(d.opref.data,i) until i mod 6 = 1;
  7 12676                     signalch(cs_io,opref,gen_optype or rad_optype);
  7 12677                     ref:= (j-1)*kanalbeskrlængde;
  7 12678                     tofrom(kanal_tab.ref.kanal_alarm,alle_operatører,op_maske_lgd);
  7 12679                     tofrom(kanalflag,alle_operatører,op_maske_lgd);
  7 12680                     signalbin(bs_mobilopkald);
  7 12681                   end;
  6 12682     \f

  6 12682     message procedure radio_ind side 11 - 881107/cl;
  6 12683                 end
  5 12684                 else
  5 12685                 if htyp='G' then
  5 12686                 begin <* fjerninkludering/-ekskludering af område *>
  6 12687                   bs:= læstegn(tlgr,9,tegn)-'@';
  6 12688                   j:= 0;
  6 12689                   for i:= 1 step 1 until max_antal_kanaler do
  6 12690                   if kanal_id(i) = ptyp shift 5 + pnum then j:= i;
  6 12691                   if j<>0 then
  6 12692                   begin
  7 12693                     ref:= (j-1)*kanalbeskrlængde;
  7 12694                     sætbiti(kanal_tab.ref.kanal_tilstand,11,bs extract 1);
  7 12695                   end;
  6 12696                   tofrom(kanalflag,alle_operatører,op_maske_lgd);
  6 12697                   signalbin(bs_mobilopkald);
  6 12698                   ac:= 0;
  6 12699                 end
  5 12700                 else
  5 12701                 if htyp='L' then
  5 12702                 begin <* vogntabelændringer *>
  6 12703                   long field ll;
  6 12704     
  6 12704                   ll:= 10;
  6 12705                   ac:= 0;
  6 12706                   zno:= port_til_omr(ptyp shift 6 + pnum);
  6 12707                   læstegn(tlgr,9,tegn);
  6 12708                   if (tegn='N') or (tegn='O') then
  6 12709                   begin
  7 12710                     typ(1):= 1 shift 12 + (opkode-1); val(1):= 'H';
  7 12711                     typ(2):= -1;
  7 12712                     getch(cs_radio_ind,opref,rad_optype,typ,val);
  7 12713                     if opref>0 then
  7 12714                     begin
  8 12715                       d.opref.resultat:= if tegn='N' then 3 else 60;
  8 12716                       signalch(d.opref.retur,opref,d.opref.optype);
  8 12717                     end;
  7 12718                     ac:= -1;
  7 12719                   end
  6 12720                   else
  6 12721                   if (tegn='G') and (tlgr.ll=(long<:FFFFF:> add 'F')) then
  6 12722                     ac:= -1
  6 12723                   else
  6 12724                   if tegn='G' then <*indkodning*>
  6 12725                   begin
  7 12726                     pos:= 10; i:= 0;
  7 12727                     while læstegn(tlgr,pos,tegn)>='0' and tegn<='9' and pos<=14 do
  7 12728                       i:= i*10 + (tegn-'0');
  7 12729                     i:= i mod 1000;
  7 12730                     b_pn:= (1 shift 22) + (i shift 12);
  7 12731                     if pos=14 and 'A'<=tegn and tegn<='Å' then
  7 12732                       b_pn:= b_pn + ((tegn-'@') shift 7);
  7 12733                     pos:= 14; i:= 0;
  7 12734                     while læstegn(tlgr,pos,tegn)>='0' and tegn<='9' and pos<=16 do
  7 12735                       i:= i*10 + (tegn-'0');
  7 12736                     b_pn:= b_pn + i;
  7 12737                     pos:= 16; i:= 0;
  7 12738                     while læstegn(tlgr,pos,tegn)>='0' and tegn<='9' and pos<=20 do
  7 12739                       i:= i*10 + (tegn-'0');
  7 12740                     b_pt:= i;
  7 12741                     bs:= 11;
  7 12742     \f

  7 12742     message procedure radio_ind side 12 - 881107/cl;
  7 12743                   end
  6 12744                   else
  6 12745                   if tegn='H' then <*udkodning*>
  6 12746                   begin
  7 12747                     pos:= 10; i:= 0;
  7 12748                     while læstegn(tlgr,pos,tegn)>='0' and tegn<='9' and pos<=14 do
  7 12749                       i:= i*10 + (tegn-'0');
  7 12750                     b_pt:= i;
  7 12751                     b_pn:= 0;
  7 12752                     bs:= 12;
  7 12753                   end
  6 12754                   else
  6 12755                   if tegn='I' then <*slet tabel*>
  6 12756                   begin
  7 12757                     b_pt:= 1; b_pn:= 999; bs:= 19;
  7 12758                     pos:= 10; i:= 0;
  7 12759                     i:= hex_to_dec(læstegn(tlgr,pos,tegn))*16 +
  7 12760                         hex_to_dec(læstegn(tlgr,pos,tegn));
  7 12761                     zno:= i;
  7 12762                   end
  6 12763                   else ac:= 2;
  6 12764                   if ac<0 then
  6 12765                     ac:= 0
  6 12766                   else
  6 12767     
  6 12767                   if ac=0 then
  6 12768                   begin
  7 12769                     waitch(cs_vt_adgang,opref,true,-1);
  7 12770                     startoperation(opref,401,cs_vt_adgang,bs);
  7 12771                     d.opref.data(1):= b_pt;
  7 12772                     d.opref.data(2):= b_pn;
  7 12773                     d.opref.data(if bs=19 then 3 else 4):= zno;
  7 12774                     signalch(cs_vt,opref,gen_optype or vt_optype);
  7 12775                   end;
  6 12776                 end
  5 12777                 else
  5 12778                   ac:= 2;
  5 12779     
  5 12779                 pos:= 1;
  5 12780                 skrivtegn(answ,pos,'H');
  5 12781                 skrivtegn(answ,pos,' ');
  5 12782                 skrivtegn(answ,pos,ac+'@');
  5 12783                 i:= 1; sum:= 0;
  5 12784                 while i < pos do
  5 12785                   sum:= (sum + læstegn(answ,i,tegn)) mod 256;
  5 12786                 skriv_tegn(answ,pos, sum shift (-4) extract 4 +'@');
  5 12787                 skriv_tegn(answ,pos, sum extract 4 +'@');
  5 12788                 repeat afsluttext(answ,pos) until pos mod 6 = 1;
  5 12789     <*+2*>      if (testbit36 or testbit38) and overvåget then
  5 12790                 disable begin
  6 12791                   write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf);
  6 12792                   outchar(zrl,'nl');
  6 12793                 end;
  5 12794     <*-2*>
  5 12795                 write(z_fr_out,"nl",1,answ.laf,"cr",1);
  5 12796                 disable setposition(z_fr_out,0,0);
  5 12797                 ac:= -1;
  5 12798     \f

  5 12798     message procedure radio_ind side 13 - 881107/cl;
  5 12799               end
  4 12800               else
  4 12801               if ttyp = 'I' then
  4 12802               begin
  5 12803                 typ(1):= -1;
  5 12804                 repeat
  5 12805                   getch(cs_radio_ind,opref,true,typ,val);
  5 12806                   if opref<>0 then
  5 12807                   begin
  6 12808                     d.opref.resultat:= 31;
  6 12809                     signalch(d.opref.retur,opref,d.opref.op_type);
  6 12810                   end;
  5 12811                 until opref=0;
  5 12812                 for i:= 1 step 1 until max_antal_taleveje do
  5 12813                   if læsbit_ia(hookoff_maske,i) then
  5 12814                   begin
  6 12815                     signalbin(bs_talevej_udkoblet(i));
  6 12816                     sætbit_ia(samtaleflag,tv_operatør(i),1);
  6 12817                   end;
  5 12818                 if antal_bits_ia(samtaleflag,1,max_antal_operatører)<>0 then
  5 12819                   signal_bin(bs_mobil_opkald);
  5 12820                 for i:= 1 step 1 until max_antal_kanaler do
  5 12821                 begin
  6 12822                   ref:= (i-1)*kanalbeskrlængde;
  6 12823                   if kanal_tab.ref.kanal_tilstand extract 2 <> 0 then
  6 12824                   begin
  7 12825                     if kanal_tab.ref.kanal_id2<>0 and
  7 12826                        kanal_tab.ref.kanal_id2 shift (-22)<>3
  7 12827                     then
  7 12828                     begin
  8 12829                       signal(ss_samtale_nedlagt(i));
  8 12830                       frigiv_id(kanal_tab.ref.kanal_id2,kanal_til_omr(i));
  8 12831                     end;
  7 12832                     if kanal_tab.ref.kanal_id1<>0 then
  7 12833                     begin
  8 12834                       signal(ss_samtale_nedlagt(i));
  8 12835                       frigiv_id(kanal_tab.ref.kanal_id1,kanal_til_omr(i));
  8 12836                     end;
  7 12837                   end;
  6 12838                   sæt_hex_ciffer(kanal_tab.ref,3,15);
  6 12839                 end;
  5 12840     <*V*>       waitch(cs_radio_pulje,opref,true,-1);
  5 12841                 startoperation(opref,401,cs_radio_pulje,23);
  5 12842                 i:= 1;
  5 12843                 hægtstring(d.opref.data,i,<:radio-info: :>);
  5 12844                 j:= 4;
  5 12845                 while j<=lgd and i<(d.opref.opsize - data - 2)//2*3 do
  5 12846                 begin
  6 12847                   skrivtegn(d.opref.data,i,læstegn(tlgr,j,tegn));
  6 12848                 end;
  5 12849                 repeat afsluttext(d.opref.data,i) until i mod 6 = 1;
  5 12850                 signalch(cs_io,opref,gen_optype or rad_optype);
  5 12851                 optaget_flag:= 0;
  5 12852                 pos:= i:= 1; sum:= 0;
  5 12853                 skrivtegn(answ,pos,'I');
  5 12854                 skrivtegn(answ,pos,' ');
  5 12855                 skrivtegn(answ,pos,'@');
  5 12856                 while i<pos do
  5 12857                   sum:= (sum+læstegn(answ,i,tegn)) mod 256;
  5 12858                 skrivtegn(answ,pos,sum shift (-4) extract 4 + '@');
  5 12859                 skrivtegn(answ,pos,sum extract 4 + '@');
  5 12860                 repeat afsluttext(answ,pos) until pos mod 6 = 1;
  5 12861     <*+2*>      if (testbit36 or testbit38) and overvåget then
  5 12862                 disable begin
  6 12863                   write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf); 
  6 12864                   outchar(zrl,'nl');
  6 12865                 end;
  5 12866     <*-2*>
  5 12867                 write(z_fr_out,"nl",1,answ.laf,"cr",1);
  5 12868                 disable setposition(z_fr_out,0,0);
  5 12869                 ac:= -1;
  5 12870     \f

  5 12870     message procedure radio_ind side 14 - 881107/cl;
  5 12871               end
  4 12872               else
  4 12873               if ttyp='L' then
  4 12874               begin
  5 12875                 ac:= 0;
  5 12876     <****** RADIO-INFO meddelelser til hovedkonsol afhængig af testbi21 ******>
  5 12877                if testbit21 then
  5 12878                begin
  6 12879                 waitch(cs_radio_pulje,opref,true,-1);
  6 12880                 startoperation(opref,401,cs_radio_pulje,23);
  6 12881                 i:= 1;
  6 12882                 hægtstring(d.opref.data,i,<:radio-info: :>);
  6 12883                 j:= 4;
  6 12884                 while j<=lgd and i<(d.opref.opsize-data-2)//2*3 do
  6 12885                 begin
  7 12886                   skrivtegn(d.opref.data,i,læstegn(tlgr,j,tegn));
  7 12887                 end;
  6 12888                 repeat afsluttext(d.opref.data,i) until i mod 6 = 1;
  6 12889                 signalch(cs_io,opref,gen_optype or rad_optype);
  6 12890                end; <*testbit21*>
  5 12891               end
  4 12892               else
  4 12893               if ttyp='Z' then
  4 12894               begin
  5 12895     <*+2*>      if (testbit36 or testbit38) and overvåget then
  5 12896                 disable begin
  6 12897                   write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf); 
  6 12898                   outchar(zrl,'nl');
  6 12899                 end;
  5 12900     <*-2*>
  5 12901                 write(z_fr_out,"nl",1,answ.laf,"cr",1);
  5 12902                 disable setposition(z_fr_out,0,0);
  5 12903                 ac:= -1;
  5 12904               end
  4 12905               else
  4 12906                 ac:= 1;
  4 12907             end; <* telegram modtaget ok *>
  3 12908     \f

  3 12908     message procedure radio_ind side 15 - 881107/cl;
  3 12909             if ac>=0 then
  3 12910             begin
  4 12911               pos:= i:= 1; sum:= 0;
  4 12912               skrivtegn(answ,pos,ttyp);
  4 12913               skrivtegn(answ,pos,' ');
  4 12914               skrivtegn(answ,pos,ac+'@');
  4 12915               while i<pos do
  4 12916                 sum:= (sum+læstegn(answ,i,tegn)) mod 256;
  4 12917               skrivtegn(answ,pos, sum shift (-4) extract 4 + '@');
  4 12918               skrivtegn(answ,pos, sum extract 4 + '@');
  4 12919               repeat afsluttext(answ,pos) until pos mod 6 = 1;
  4 12920     <*+2*>    if (testbit36 or testbit38) and overvåget then
  4 12921               disable begin
  5 12922                 write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf); 
  5 12923                 outchar(zrl,'nl');
  5 12924               end;
  4 12925     <*-2*>
  4 12926               write(z_fr_out,"nl",1,answ.laf,"cr",1);
  4 12927               disable setposition(z_fr_out,0,0);
  4 12928               ac:= -1;
  4 12929             end;
  3 12930       
  3 12930             typ(1):= 0;
  3 12931             typ(2):= 1 shift 18 + 4 shift 12 + tid; <* lt real tid *>
  3 12932             rf:= 4;
  3 12933             systime(1,0.0,val.rf);
  3 12934             val.rf:= val.rf - 30.0;
  3 12935             typ(3):= -1;
  3 12936             repeat
  3 12937               getch(cs_radio_ind,opref,true,typ,val);
  3 12938               if opref>0 then
  3 12939               begin
  4 12940                 d.opref.resultat:= 53; <*annuleret*>
  4 12941                 signalch(d.opref.retur,opref,d.opref.optype);
  4 12942               end;
  3 12943             until opref=0;
  3 12944     
  3 12944           until false;
  3 12945     
  3 12945     radio_ind_trap:
  3 12946         
  3 12946           disable skriv_radio_ind(zbillede,1);
  3 12947       
  3 12947         end radio_ind;
  2 12948     \f

  2 12948     message procedure radio_ud side 1 - 820301/hko;
  2 12949     
  2 12949       procedure radio_ud(op);
  2 12950           value          op;
  2 12951           integer        op;
  2 12952         begin
  3 12953           integer array field opref,io_opref;
  3 12954           integer opgave, kode, pos, tegn, i, sum, rc, svar_status;
  3 12955           integer array answ, tlgr(1:32);
  3 12956           long array field laf;
  3 12957     
  3 12957           procedure skriv_radio_ud(z,omfang);
  3 12958             value                    omfang;
  3 12959             zone                   z;
  3 12960             integer                  omfang;
  3 12961             begin integer i1;
  4 12962               disable i1:= write(z,"nl",1,<:+++ radio-ud  ::>);
  4 12963               if omfang > 0 then
  4 12964               disable begin real x; long array field tx;
  5 12965                 tx:= 0;
  5 12966                 trap(slut);
  5 12967                 write(z,"nl",1,
  5 12968                     <:  opref:        :>,opref,"nl",1,
  5 12969                     <:  io-opref:     :>,io_opref,"nl",1,
  5 12970                     <:  opgave:       :>,opgave,"nl",1,
  5 12971                     <:  kode:         :>,kode,"nl",1,
  5 12972                     <:  pos:          :>,pos,"nl",1,
  5 12973                     <:  tegn:         :>,tegn,"nl",1,
  5 12974                     <:  i:            :>,i,"nl",1,
  5 12975                     <:  sum:          :>,sum,"nl",1,
  5 12976                     <:  rc:           :>,rc,"nl",1,
  5 12977                     <:  svar-status:  :>,svar_status,"nl",1,
  5 12978                     <:  tlgr:         ":>,tlgr.tx,<:":>,"nl",1,
  5 12979                     <:  answ:         ":>,answ.tx,<:":>,"nl",1,
  5 12980                     <::>);
  5 12981                skriv_coru(z,coru_no(402));
  5 12982     slut:
  5 12983              end; <*disable*>
  4 12984            end skriv_radio_ud;
  3 12985     
  3 12985           trap(radio_ud_trap);
  3 12986           laf:= 0;
  3 12987           stack_claim((if cm_test then 200 else 150) +35+100);
  3 12988     
  3 12988     <*+2*>if testbit32 and overvåget  or testbit28 then
  3 12989             skriv_radio_ud(out,0);
  3 12990     <*-2*>
  3 12991     
  3 12991           io_opref:= op;
  3 12992     \f

  3 12992     message procedure radio_ud side 2 - 810529/hko;
  3 12993     
  3 12993           repeat
  3 12994     
  3 12994     <*V*>   wait_ch(cs_radio_ud,op_ref,gen_optype or rad_optype,-1);
  3 12995             kode:= d.op_ref.opkode;
  3 12996             opgave:= kode shift(-12);
  3 12997             kode:= kode extract 12;
  3 12998             if opgave < 'A' or opgave > 'I' then
  3 12999             begin
  4 13000               d.opref.resultat:= 31;
  4 13001             end
  3 13002             else
  3 13003             begin
  4 13004               pos:= 1;
  4 13005               if opgave='A' or opgave='B' or opgave='D' or opgave='H' then
  4 13006               begin
  5 13007                 skrivtegn(tlgr,pos,opgave);
  5 13008                 if d.opref.data(1) = 0 then
  5 13009                 begin
  6 13010                   skrivtegn(tlgr,pos,'G');
  6 13011                   skrivtegn(tlgr,pos,'A');
  6 13012                 end
  5 13013                 else
  5 13014                 begin
  6 13015                   skrivtegn(tlgr,pos,'D');
  6 13016                   skrivtegn(tlgr,pos,d.opref.data(1)+'@'); <*talevejsnr*>
  6 13017                 end;
  5 13018                 if opgave='A' then
  5 13019                 begin
  6 13020                   skrivtegn(tlgr,pos,d.opref.data(2)+'@'); <*calltype*>
  6 13021                 end
  5 13022                 else
  5 13023                 if opgave='B' then
  5 13024                 begin
  6 13025                   skrivtegn(tlgr,pos,d.opref.data(2));
  6 13026                   if d.opref.data(2)='V' then
  6 13027                   begin
  7 13028                     skrivtegn(tlgr,pos,
  7 13029                         d.opref.data(10) shift (-18) extract 6+'@'); <*trunktype*>
  7 13030                     skrivtegn(tlgr,pos,
  7 13031                         d.opref.data(10) shift (-12) extract 6+'@'); <*trunknum.*>
  7 13032                   end;
  6 13033                   d.opref.data(7):= d.opref.data(8):= d.opref.data(9):= 0;
  6 13034                   d.opref.data(6):= if d.opref.data(5)<>0 then 2 else data+18;
  6 13035                 end
  5 13036                 else
  5 13037                 if opgave='H' then
  5 13038                 begin
  6 13039                   skrivtegn(tlgr,pos,d.opref.data(3)+'@'); <*trunktype*>
  6 13040                   skrivtegn(tlgr,pos,d.opref.data(4)+'@'); <*trunknum.*>
  6 13041                   hægtstring(tlgr,pos,<:@@@:>);
  6 13042                   skrivtegn(tlgr,pos,d.opref.data(2)); <*H_tlgr_type*>
  6 13043                   skrivtegn(tlgr,pos,'A');
  6 13044                   skrivtegn(tlgr,pos,(if d.opref.data(2)='L' and
  6 13045                      d.opref.data(5)=8 then 7 else d.opref.data(5))+'@'); 
  6 13046                   if d.opref.data(2)='L' then
  6 13047                   begin
  7 13048                     if d.opref.data(5)=7 then
  7 13049                     begin
  8 13050                       anbringtal(tlgr,pos,
  8 13051                         d.opref.data(8) shift (-12) extract 10,-4);
  8 13052                       anbringtal(tlgr,pos,
  8 13053                         d.opref.data(8) extract 7,-2);
  8 13054                     end
  7 13055                     else
  7 13056                     if d.opref.data(5)=8 then
  7 13057                     begin
  8 13058                       hægtstring(tlgr,pos,<:FFFFFF:>);
  8 13059                     end;
  7 13060                     if d.opref.data(5)<>9 then
  7 13061                       anbringtal(tlgr,pos,d.opref.data(7),-4);
  7 13062                     skrivtegn(tlgr,pos,
  7 13063                       dec_to_hex(d.opref.data(6) shift (-4) extract 4));
  7 13064                     skrivtegn(tlgr,pos,
  7 13065                       dec_to_hex(d.opref.data(6) extract 4));
  7 13066                     skrivtegn(tlgr,10,pos-11+'@');
  7 13067                   end;
  6 13068                 end;
  5 13069               end
  4 13070               else
  4 13071               if opgave='I' then
  4 13072               begin
  5 13073                 hægtstring(tlgr,pos,<:IGA:>);
  5 13074               end
  4 13075               else d.opref.resultat:= 31; <*systemfejl*>
  4 13076             end;
  3 13077     \f

  3 13077     message procedure radio_ud side 3 - 881107/cl;
  3 13078     
  3 13078             if d.opref.resultat=0 then
  3 13079             begin
  4 13080               if (opgave <= 'B')
  4 13081                  <* or (opgave='H' and d.opref.data(2)='L') *> then
  4 13082               begin
  5 13083                 systime(1,0,d.opref.tid);
  5 13084                 signalch(cs_radio_ind,opref,d.opref.optype);
  5 13085                 opref:= 0;
  5 13086               end;
  4 13087               <* beregn checksum og send *>
  4 13088               i:= 1; sum:= 0;
  4 13089               while i < pos do
  4 13090                 sum:= (sum + læstegn(tlgr,i,tegn)) mod 256;
  4 13091               skrivtegn(tlgr,pos,sum shift (-4) + '@');
  4 13092               skrivtegn(tlgr,pos,sum extract 4  + '@');
  4 13093               repeat skrivtegn(tlgr,pos,0) until pos mod 6 = 1;
  4 13094     <**********************************************>
  4 13095     <* specialaktion p.g.a. modtagebesvær i COMET *>
  4 13096     
  4 13096               if opgave='B' then delay(1);
  4 13097      
  4 13097     <*                                94.04.19/cl *>
  4 13098     <**********************************************>
  4 13099      
  4 13099     <*+2*>    if (testbit36 or testbit39) and overvåget then
  4 13100               disable begin
  5 13101                 write(zrl,<<zd dd dd.dd >,now,<:rf-tlgr: :>,tlgr.laf);
  5 13102                 outchar(zrl,'nl');
  5 13103               end;
  4 13104     <*-2*>
  4 13105               setposition(z_rf_in,0,0);
  4 13106               write(z_rf_out,"nl",1,tlgr.laf,"cr",1);
  4 13107               disable setposition(z_rf_out,0,0);
  4 13108               rc:= 0;
  4 13109     
  4 13109               <* afvent svar*>
  4 13110               repeat
  4 13111     <*V*>       svar_status:= afvent_radioinput(z_rf_in,answ,true);
  4 13112                 if svar_status=6 then
  4 13113                 begin
  5 13114                   svar_status:= -3;
  5 13115                   goto radio_ud_check;
  5 13116                 end;
  4 13117                 pos:= 1;
  4 13118                 while læstegn(answ,pos,i)<>0 do ;
  4 13119                 pos:= pos-2;
  4 13120                 if pos > 0 then
  4 13121                 begin
  5 13122                   if pos<3 then
  5 13123                     svar_status:= -2 <*format error*>
  5 13124                   else
  5 13125                   begin
  6 13126                     if læstegn(answ,3,tegn)<>'@' then
  6 13127                       svar_status:= tegn - '@'
  6 13128                     else
  6 13129                     begin
  7 13130                       pos:= 1;
  7 13131                       læstegn(answ,pos,tegn);
  7 13132                       if tegn<>opgave then
  7 13133                         svar_status:= -4 <*gal type*>
  7 13134                       else
  7 13135                       if læstegn(answ,pos,tegn)<>' ' then
  7 13136                         svar_status:= -tegn <*fejl*>
  7 13137                       else
  7 13138                         svar_status:= læstegn(answ,pos,tegn)-'@';
  7 13139                     end;
  6 13140                   end;
  5 13141                 end
  4 13142                 else
  4 13143                   svar_status:= -1;
  4 13144     \f

  4 13144     message procedure radio_ud side 5 - 881107/cl;
  4 13145     
  4 13145     radio_ud_check:
  4 13146                 rc:= rc+1;
  4 13147                 if -3<=svar_status and svar_status< -1 then
  4 13148                 disable begin
  5 13149                   write(z_rf_out,<:<'nl'>Z@@MJ<'cr'>:>);
  5 13150                   setposition(z_rf_out,0,0);
  5 13151     <*+2*>        if (testbit36 or testbit39) and overvåget then
  5 13152                   begin
  6 13153                     write(zrl,<<zd dd dd.dd >,now,<:rf-tlgr: Z@@MJ:>);
  6 13154                     outchar(zrl,'nl');
  6 13155                   end;
  5 13156     <*-2*>
  5 13157                 end
  4 13158                 else
  4 13159                 if svar_status=6 or svar_status=(-4) or svar_status=(-1) then
  4 13160                 disable begin
  5 13161                   write(z_rf_out,"nl",1,tlgr.laf,"cr",1);
  5 13162                   setposition(z_rf_out,0,0);
  5 13163     <*+2*>        if (testbit36 or testbit39) and overvåget then
  5 13164                   begin
  6 13165                     write(zrl,<<zd dd dd.dd >,now,<:rf-tlgr: :>,
  6 13166                       tlgr.laf,<: (repeat):>); outchar(zrl,'nl');
  6 13167                   end;
  5 13168     <*-2*>
  5 13169                 end
  4 13170                 else
  4 13171                 if svar_status=0 and opref<>0 then
  4 13172                   d.opref.resultat:= 0
  4 13173                 else
  4 13174                 if opref<>0 then
  4 13175                   d.opref.resultat:= 31;
  4 13176               until svar_status=0 or rc>3;
  4 13177             end;
  3 13178             if opref<>0 then
  3 13179             begin
  4 13180               if svar_status<>0 and rc>3 then
  4 13181                 d.opref.resultat:= 53; <* annulleret *>
  4 13182               signalch(d.opref.retur,opref,d.opref.optype);
  4 13183               opref:= 0;
  4 13184             end;
  3 13185           until false;
  3 13186     
  3 13186     radio_ud_trap:
  3 13187     
  3 13187           disable skriv_radio_ud(zbillede,1);
  3 13188     
  3 13188         end radio_ud;
  2 13189     \f

  2 13189     message procedure radio_medd_opkald side 1 - 810610/hko;
  2 13190     
  2 13190       procedure radio_medd_opkald;
  2 13191         begin
  3 13192           integer array field ref,op_ref;
  3 13193           integer i;
  3 13194     
  3 13194           procedure skriv_radio_medd_opkald(z,omfang);
  3 13195             value                             omfang;
  3 13196             zone                            z;
  3 13197             integer                           omfang;
  3 13198             begin integer x;
  4 13199               disable x:= write(z,"nl",1,<:+++ radio-medd-opkald:>);
  4 13200               write(z,"sp",26-x);
  4 13201               if omfang > 0 then
  4 13202               disable begin
  5 13203                 trap(slut);
  5 13204                 write(z,"nl",1,
  5 13205                   <:  ref:    :>,ref,"nl",1,
  5 13206                   <:  opref:  :>,op_ref,"nl",1,
  5 13207                   <:  i:      :>,i,"nl",1,
  5 13208                   <::>);
  5 13209                 skriv_coru(z,abs curr_coruno);
  5 13210     slut:
  5 13211               end;<*disable*>
  4 13212             end skriv_radio_medd_opkald;
  3 13213     
  3 13213           trap(radio_medd_opkald_trap);
  3 13214     
  3 13214           stack_claim((if cm_test then 200 else 150) +1);
  3 13215     
  3 13215     <*+2*>if testbit32 and overvåget or testbit28 then
  3 13216             disable skriv_radio_medd_opkald(out,0);
  3 13217     <*-2*>
  3 13218     \f

  3 13218     message procedure radio_medd_opkald side 2 - 820301/hko;
  3 13219     
  3 13219           repeat
  3 13220     
  3 13220     <*V*>   wait(bs_mobil_opkald);
  3 13221     <*V*>   wait_ch(cs_radio_medd,op_ref,genoptype or rad_optype,-1);
  3 13222     <*V*>   wait(bs_opkaldskø_adgang);
  3 13223     
  3 13223             ref:= første_nød_opkald;
  3 13224             while ref <> 0 do <* meld ikke meldt nødopkald til io *>
  3 13225             begin
  4 13226               i:= opkaldskø.ref(2);
  4 13227               if i < 0 then
  4 13228               begin
  5 13229                 <* nødopkald ikke meldt *>
  5 13230     
  5 13230                 start_operation(op_ref,403,cs_radio_medd,45<*nødop.modt.*>);
  5 13231                 d.op_ref.data(1):= <* vogn_id *>
  5 13232                   if opkaldskø.ref(3)<>0 then opkaldskø.ref(3) else i extract 22;
  5 13233                 opkaldskø.ref(2):= i extract 22;
  5 13234                 d.op_ref.data(2):= opkaldskø.ref(4) shift(-12); <* ttmm *>
  5 13235                 d.op_ref.data(3):= opkaldskø.ref(5) extract 20;
  5 13236                 i:= op_ref;
  5 13237     <*+2*>      if testbit35 and overvåget then
  5 13238                 disable begin
  6 13239                   write(out,"nl",1,<:radio nød-medd:>);
  6 13240                   skriv_op(out,op_ref);
  6 13241                   ud;
  6 13242                 end;
  5 13243     <*-2*>
  5 13244                 signal_ch(cs_io,op_ref,gen_optype or rad_optype);
  5 13245     <*V*>       wait_ch(cs_radio_medd,op_ref,rad_optype,-1);
  5 13246     <*+4*>      if i <> op_ref then
  5 13247                   fejlreaktion(11<*fremmed post*>,i,<:radio io/medd:>,0);
  5 13248     <*-4*>
  5 13249               end;<*nødopkald ikke meldt*>
  4 13250     
  4 13250               ref:= opkaldskø.ref(1) extract 12;
  4 13251             end; <* melding til io *>
  3 13252     \f

  3 13252     message procedure radio_medd_opkald side 3 - 820304/hko;
  3 13253     
  3 13253             start_operation(op_ref,403,cs_radio_medd,
  3 13254                             40<*opdater opkaldskøbill*>);
  3 13255             signal_bin(bs_opkaldskø_adgang);
  3 13256     <*+2*>  if testbit35 and overvåget then
  3 13257             disable begin
  4 13258               write(out,"nl",1,<:radio opdater opkaldskø-billede:>);
  4 13259               skriv_op(out,op_ref);
  4 13260               write(out,       <:opkaldsflag: :>,"nl",1);
  4 13261               outintbits_ia(out,opkaldsflag,1,op_maske_lgd//2);
  4 13262               write(out,"nl",1,<:kanalflag:   :>,"nl",1);
  4 13263               outintbits_ia(out,kanalflag,1,op_maske_lgd//2);
  4 13264               write(out,"nl",1,<:samtaleflag: :>,"nl",1);
  4 13265               outintbits_ia(out,samtaleflag,1,op_maske_lgd//2);
  4 13266               ud;
  4 13267             end;
  3 13268     <*-2*>
  3 13269             signal_ch(cs_op,op_ref,gen_optype or rad_optype);
  3 13270     
  3 13270           until false;
  3 13271     
  3 13271     radio_medd_opkald_trap:
  3 13272     
  3 13272           disable skriv_radio_medd_opkald(zbillede,1);
  3 13273     
  3 13273         end radio_medd_opkald;
  2 13274     \f

  2 13274     message procedure radio_adm side 1 - 820301/hko;
  2 13275     
  2 13275       procedure radio_adm(op);
  2 13276       value               op;
  2 13277       integer             op;
  2 13278         begin
  3 13279           integer array field opref, rad_op, iaf;
  3 13280           integer nr,i,j,k,res,opgave,tilst,operatør;
  3 13281     
  3 13281           procedure skriv_radio_adm(z,omfang);
  3 13282             value                 omfang;
  3 13283             zone                z;
  3 13284             integer               omfang;
  3 13285             begin integer i1;
  4 13286               disable i1:= write(z,"nl",1,<:+++ radio-adm:>);
  4 13287               write(z,"sp",26-i1);
  4 13288               if omfang > 0 then
  4 13289               disable begin real x;
  5 13290                 trap(slut);
  5 13291     \f

  5 13291     message procedure radio_adm side 2- 820301/hko;
  5 13292     
  5 13292                 write(z,"nl",1,
  5 13293                   <:  op_ref:    :>,op_ref,"nl",1,
  5 13294                   <:  iaf:       :>,iaf,"nl",1,
  5 13295                   <:  rad-op:    :>,rad_op,"nl",1,
  5 13296                   <:  nr:        :>,nr,"nl",1,
  5 13297                   <:  i:         :>,i,"nl",1,
  5 13298                   <:  j:         :>,j,"nl",1,
  5 13299                   <:  k:         :>,k,"nl",1,
  5 13300                   <:  tilst:     :>,tilst,"nl",1,
  5 13301                   <:  res:       :>,res,"nl",1,
  5 13302                   <:  opgave:    :>,opgave,"nl",1,
  5 13303                   <:  operatør:  :>,operatør,"nl",1);
  5 13304                 skriv_coru(z,coru_no(404));
  5 13305     slut:
  5 13306               end;<*disable*>
  4 13307             end skriv_radio_adm;
  3 13308     \f

  3 13308     message procedure radio_adm side 3 - 820304/hko;
  3 13309     
  3 13309           rad_op:= op;
  3 13310     
  3 13310           trap(radio_adm_trap);
  3 13311           stack_claim((if cm_test then 200 else 150) +50);
  3 13312     
  3 13312     <*+2*>if testbit32 and overvåget or testbit28 then
  3 13313             skriv_radio_adm(out,0);
  3 13314     <*-2*>
  3 13315     
  3 13315           pass;
  3 13316           if -,testbit22 then
  3 13317           begin
  4 13318             startoperation(rad_op,404,cs_radio_adm,'I' shift 12 + 60);
  4 13319             signalch(cs_radio_ud,rad_op,rad_optype);
  4 13320             waitch(cs_radio_adm,rad_op,rad_optype,-1);
  4 13321           end;
  3 13322           repeat
  3 13323             waitch(cs_radio_adm,opref,true,-1);
  3 13324     <*+2*>
  3 13325             if testbit33 and overvåget then
  3 13326             disable begin
  4 13327               skriv_radio_adm(out,0);
  4 13328               write(out,<: operation modtaget på cs:>,<<d>,cs_radio_adm);
  4 13329               skriv_op(out,opref);
  4 13330             end;
  3 13331     <*-2*>
  3 13332     
  3 13332             k:= d.op_ref.opkode extract 12;
  3 13333             opgave:= d.opref.opkode shift (-12);
  3 13334             nr:=operatør:=d.op_ref.data(1);
  3 13335     
  3 13335     <*+4*>  if (d.op_ref.optype and
  3 13336                   (gen_optype or io_optype or op_optype or vt_optype))
  3 13337               extract 12 = 0 then fejlreaktion(12<*operationstype*>,op_ref,
  3 13338                                     <:radio_adm:>,0);
  3 13339     <*-4*>
  3 13340             if k = 74 <* RA,I *> then
  3 13341             begin
  4 13342               startoperation(rad_op,404,cs_radio_adm,'I' shift 12 + 60);
  4 13343               signalch(cs_radio_ud,rad_op,rad_optype);
  4 13344               waitch(cs_radio_adm,rad_op,rad_optype,-1);
  4 13345               d.opref.resultat:= if d.rad_op.resultat=0 then 3
  4 13346                                  else d.rad_op.resultat;
  4 13347               signalch(d.opref.retur,opref,d.opref.optype);
  4 13348     \f

  4 13348     message procedure radio_adm side 4 - 820301/hko;
  4 13349             end
  3 13350             else
  3 13351     
  3 13351             if k = 1<*IN,O*> or k = 2<*EK,O*> or k = 77<*FO,O*> or
  3 13352                k = 5<*FO,L*> or k = 6<*ST  *>                   then
  3 13353             begin
  4 13354               if k = 5 or k=77 then
  4 13355               begin
  5 13356     
  5 13356     <*V*>       wait(bs_opkaldskø_adgang);
  5 13357                 if k=5 then
  5 13358                 begin
  6 13359                   disable for iaf:= 0 step 512 until (max_linienr//768*512) do
  6 13360                   begin
  7 13361                     i:= læs_fil(1035,iaf//512+1,nr);
  7 13362                     if i <> 0 then
  7 13363                       fejlreaktion(5<*læs_fil*>,i,<:liniefordelingstabel:>,0);
  7 13364                     tofrom(radio_linietabel.iaf,fil(nr),
  7 13365                       if (((max_linienr+1 - (iaf//2*3))+2)//3*2) > 512 then 512
  7 13366                       else ((max_linienr+1 - (iaf//2*3))+2)//3*2);
  7 13367                   end;
  6 13368     
  6 13368                   for i:= 1 step 1 until max_antal_mobilopkald do
  6 13369                   begin
  7 13370                     iaf:= i*opkaldskø_postlængde;
  7 13371                     nr:= opkaldskø.iaf(3) shift (-12) extract 10; <*linienr*>
  7 13372                     if nr>0 then
  7 13373                     begin
  8 13374                       læs_tegn(radio_linietabel,nr+1,operatør);
  8 13375                       if operatør>max_antal_operatører then operatør:= 0;
  8 13376                       opkaldskø.iaf(4):= opkaldskø.iaf(4) shift(-8) shift 8 +
  8 13377                                          operatør;
  8 13378                     end;
  7 13379                   end;
  6 13380                 end
  5 13381                 else
  5 13382                 if k=77 then
  5 13383                 begin
  6 13384                   disable i:= læsfil(1034,1,nr);
  6 13385                   if i<>0 then fejlreaktion(5,i,<:områdefordelingstabel:>,0);
  6 13386                   tofrom(radio_områdetabel,fil(nr),max_antal_områder*2);
  6 13387                   for i:= 1 step 1 until max_antal_mobilopkald do
  6 13388                   begin
  7 13389                     iaf:= i*opkaldskø_postlængde;
  7 13390                     nr:= opkaldskø.iaf(5) extract 4;
  7 13391                     operatør:= radio_områdetabel(nr);
  7 13392                     if operatør < 0 or max_antal_operatører < operatør then
  7 13393                       operatør:= 0;
  7 13394                     if opkaldskø.iaf(4) extract 8=0 and
  7 13395                        opkaldskø.iaf(3) shift (-12) extract 10 = 0 then
  7 13396                           opkaldskø.iaf(4):= opkaldskø.iaf(4) shift(-8) shift 8 +
  7 13397                                              operatør;
  7 13398                   end;
  6 13399                 end;
  5 13400     
  5 13400                 tofrom(opkaldsflag,alle_operatører,op_maske_lgd);
  5 13401                 signal_bin(bs_opkaldskø_adgang);
  5 13402     
  5 13402                 signal_bin(bs_mobil_opkald);
  5 13403     
  5 13403                 d.op_ref.resultat:= res:= 3;
  5 13404     \f

  5 13404     message procedure radio_adm side 5 - 820304/hko;
  5 13405     
  5 13405               end <*k = 5 / k = 77*>
  4 13406               else
  4 13407               begin <*k =1,2 eller 6 (IN,O - EK,O eller ST) *>
  5 13408                 res:= 3;
  5 13409                 for nr:= 1 step 1 until max_antal_kanaler do
  5 13410                 begin
  6 13411                   iaf:= (nr-1)*kanal_beskr_længde;
  6 13412                   if kanal_tab.iaf.kanal_tilstand shift (-16) = 
  6 13413                                                   op_talevej(operatør) then
  6 13414                   begin
  7 13415                     tilst:= kanal_tab.iaf.kanal_tilstand extract 2;
  7 13416                     if tilst <> 0 then
  7 13417                       res:= 16; <*skærm optaget*>
  7 13418                   end; <* kanal_tab(operatør) = operatør*>
  6 13419                 end;
  5 13420                 tofrom(opkaldsflag,alle_operatører,op_maske_lgd);
  5 13421                 sæt_bit_ia(opkaldsflag,operatør,k extract 1);
  5 13422                 signal_bin(bs_mobil_opkald);
  5 13423                 d.op_ref.resultat:= res;
  5 13424               end;<*k=1,2 eller 6 *>
  4 13425     
  4 13425     <*+2*>    if testbit35 and overvåget then
  4 13426               disable begin
  5 13427                 skriv_radio_adm(out,0);
  5 13428                 write(out,<: sender til :>,
  5 13429                   if k=5 or k=6 or k=77 or res > 3 then d.op_ref.retur
  5 13430                     else cs_op);
  5 13431                 skriv_op(out,op_ref);
  5 13432               end;
  4 13433     <*-2*>
  4 13434     
  4 13434               if k=5 or k=6 or k=77 or res > 3 then
  4 13435                 signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype)
  4 13436               else
  4 13437               begin <*k = (1 eller 2) og res = 3 *>
  5 13438                 d.op_ref.resultat:=0;
  5 13439                 signal_ch(cs_op,op_ref,d.op_ref.optype);
  5 13440               end;
  4 13441     \f

  4 13441     message procedure radio_adm side 6 - 816610/hko;
  4 13442     
  4 13442             end <*k=1,2,5 eller 6*>
  3 13443             else
  3 13444             if k=3 <*IN,R*> or k=4 <*EK,R*> then
  3 13445             begin
  4 13446               nr:= d.op_ref.data(1);
  4 13447               res:= 3;
  4 13448     
  4 13448               if nr<=3 then
  4 13449                 res:= 51 <* afvist *>
  4 13450               else
  4 13451               begin
  5 13452     
  5 13452                 <* gennemstilling af område *>
  5 13453                 j:= 1;
  5 13454                 for i:= 1 step 1 until max_antal_kanaler do
  5 13455                 begin
  6 13456                   if kanal_id(i) shift (-5) extract 3 = 3 and
  6 13457                      radio_id(kanal_id(i) extract 5) = nr then j:= i;
  6 13458                 end;
  5 13459                 nr:= j;
  5 13460                 iaf:= (nr-1)*kanalbeskrlængde;
  5 13461                 if læsbiti(kanal_tab.iaf.kanal_tilstand,11) == (k=4) then
  5 13462                 begin
  6 13463                   startoperation(radop,404,cs_radio_adm,'H' shift 12 + 60);
  6 13464                   d.rad_op.data(1):= 0;
  6 13465                   d.rad_op.data(2):= 'G'; <* gennemstil område *>
  6 13466                   d.rad_op.data(3):= kanal_id(nr) shift (-5) extract 3;
  6 13467                   d.rad_op.data(4):= kanal_id(nr) extract 5;
  6 13468                   d.rad_op.data(5):= k extract 1; <* set/slet gennemstilling *>
  6 13469                   signalch(cs_radio_ud,rad_op,rad_optype);
  6 13470                   waitch(cs_radio_adm,rad_op,rad_optype,-1);
  6 13471                   res:= d.rad_op.resultat;
  6 13472                   if res=0 then res:= 3;
  6 13473                   sætbiti(kanal_tab.iaf.kanal_tilstand,11,k extract 1);
  6 13474                   sætbiti(kanal_tab.iaf.kanal_tilstand,10,k extract 1);
  6 13475                 end;
  5 13476               end;
  4 13477               d.op_ref.resultat:=res;
  4 13478               signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  4 13479               tofrom(kanalflag,alle_operatører,op_maske_lgd);
  4 13480               signal_bin(bs_mobil_opkald);
  4 13481     \f

  4 13481     message procedure radio_adm side 7 - 880930/cl;
  4 13482     
  4 13482     
  4 13482             end <* k=3 eller 4 *>
  3 13483             else
  3 13484             if k=72<*EK,K*> or k=73<*IN,K*> then
  3 13485             begin
  4 13486               nr:= d.opref.data(1) extract 22;
  4 13487               res:= 3;
  4 13488               iaf:= (nr-1)*kanalbeskrlængde;
  4 13489                 start_operation(radop,404,cs_radio_adm,'H' shift 12 + 60);
  4 13490                 d.rad_op.data(1):= 0;
  4 13491                 d.rad_op.data(2):= 'C'; <* kanal inkluder/ekskluder *>
  4 13492                 d.rad_op.data(3):= kanalid(nr) shift (-5) extract 3;
  4 13493                 d.rad_op.data(4):= kanalid(nr) extract 5;
  4 13494                 d.rad_op.data(5):= k extract 1;
  4 13495                 signalch(cs_radio_ud,radop,rad_optype);
  4 13496                 waitch(cs_radio_adm,radop,rad_optype,-1);
  4 13497                 res:= d.radop.resultat;
  4 13498                 if res=0 then res:= 3;
  4 13499                 j:= if k=72 then 15 else 0;
  4 13500                 if res=3 and j<>sæt_hex_ciffer(kanal_tab.iaf,3,j) then
  4 13501                 begin
  5 13502                   tofrom(kanalflag,alle_operatører,op_maske_lgd);
  5 13503                   signalbin(bs_mobilopkald);
  5 13504                 end;
  4 13505               d.opref.resultat:= res;
  4 13506               signalch(d.opref.retur,opref,d.opref.optype);
  4 13507             end
  3 13508             else
  3 13509             if k=11 or k=12 or k=19 then <*vt_opd*>
  3 13510             begin
  4 13511               nr:= d.opref.data(1) extract 8;
  4 13512               opgave:= if k=19 then 9 else (k-4);
  4 13513               if nr<=3 then
  4 13514                res:= 51 <*afvist*>
  4 13515               else
  4 13516               begin
  5 13517                 startoperation(radop,404,cs_radio_adm,'H' shift 12 + 60);
  5 13518                 d.radop.data(1):= 0;
  5 13519                 d.radop.data(2):= 'L';
  5 13520                 d.radop.data(3):= omr_til_trunk(nr) shift (-6);
  5 13521                 d.radop.data(4):= omr_til_trunk(nr) extract 6;
  5 13522                 d.radop.data(5):= opgave;
  5 13523                 d.radop.data(6):= d.opref.data(1) shift (-8) extract 8;
  5 13524                 d.radop.data(7):= d.opref.data(2);
  5 13525                 d.radop.data(8):= d.opref.data(3);
  5 13526                 signalch(cs_radio_ud,radop,rad_optype);
  5 13527     <*V*>       waitch(cs_radio_adm,radop,rad_optype,-1);
  5 13528                 res:= d.radop.resultat;
  5 13529                 if res=0 then res:= 3;
  5 13530               end;
  4 13531               d.opref.resultat:= res;
  4 13532               signalch(d.opref.retur,opref,d.opref.optype);
  4 13533             end
  3 13534             else
  3 13535     
  3 13535             begin
  4 13536     
  4 13536               d.op_ref.resultat:= 45; <* ikke implementeret *>
  4 13537     
  4 13537               signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  4 13538     
  4 13538             end;
  3 13539               
  3 13539           until false;
  3 13540     radio_adm_trap:
  3 13541           disable skriv_radio_adm(zbillede,1);
  3 13542         end radio_adm;
  2 13543     
  2 13543     \f

  2 13543     message vogntabel erklæringer side 1 - 820301/cl;
  2 13544     
  2 13544     integer cs_vt, cs_vt_adgang,cs_vt_logpool,cs_vt_opd,cs_vt_rap,
  2 13545             cs_vt_tilst,cs_vt_auto,cs_vt_grp,cs_vt_spring,vt_op,
  2 13546             cs_vt_log;
  2 13547     integer sidste_bus,sidste_linie_løb,tf_vogntabel,
  2 13548             max_antal_i_gruppe,tf_gruppedef,tf_gruppeidenter,tf_springdef,
  2 13549             vt_log_slicelgd;
  2 13550     integer array bustabel,bustabel1(0:max_antal_busser),
  2 13551                   linie_løb_tabel(0:max_antal_linie_løb),
  2 13552                   springtabel(1:max_antal_spring,1:3),
  2 13553                   gruppetabel(1:max_antal_grupper),
  2 13554                   gruppeopkald(1:max_antal_gruppeopkald,1:2), <* ident , filref *>
  2 13555                   vt_logop(1:2),
  2 13556                   vt_logdisc(1:4),
  2 13557                   vt_log_tail(1:10);
  2 13558     boolean array busindeks(-1:max_antal_linie_løb),
  2 13559                   bustilstand(-1:max_antal_busser),
  2 13560                   linie_løb_indeks(-1:max_antal_busser);
  2 13561     real array springtid,springstart(1:max_antal_spring);
  2 13562     real          vt_logstart;
  2 13563     integer field v_kode,v_bus,v_ll1,v_ll2;
  2 13564     integer array field v_tekst;
  2 13565     real field v_tid;
  2 13566     
  2 13566     zone zvtlog(128,1,stderror);
  2 13567     
  2 13567     \f

  2 13567     message vogntabel erklæringer side 2 - 851001/cl;
  2 13568     
  2 13568     procedure skriv_vt_variable(zud);
  2 13569       zone                      zud;
  2 13570     begin integer i; long array field laf;
  3 13571       laf:= 0;
  3 13572       write(zud,"nl",1,<:+++++ vogntabel variable::>,"nl",1,<<d>,
  3 13573         <:vt-op-længde       :>,vt_op_længde,"nl",1,
  3 13574         <:cs-vt              :>,cs_vt,"nl",1,
  3 13575         <:cs-vt-adgang       :>,cs_vt_adgang,"nl",1,
  3 13576         <:cs-vt-logpool      :>,cs_vt_logpool,"nl",1,
  3 13577         <:cs-vt-opd          :>,cs_vt_opd,"nl",1,
  3 13578         <:cs-vt-rap          :>,cs_vt_rap,"nl",1,
  3 13579         <:cs-vt-tilst        :>,cs_vt_tilst,"nl",1,
  3 13580         <:cs-vt-auto         :>,cs_vt_auto,"nl",1,
  3 13581         <:cs-vt-grp          :>,cs_vt_grp,"nl",1,
  3 13582         <:cs-vt-spring       :>,cs_vt_spring,"nl",1,
  3 13583         <:cs-vt-log          :>,cs_vt_log,"nl",1,
  3 13584         <:vt-op              :>,vt_op,"nl",1,
  3 13585         <:vt-logop(1)        :>,vt_logop(1),"nl",1,
  3 13586         <:vt-logop(2)        :>,vt_logop(2),"nl",1,
  3 13587         <:sidste-bus         :>,sidste_bus,"nl",1,
  3 13588         <:sidste-linie-løb   :>,sidste_linie_løb,"nl",1,
  3 13589         <:max-antal-i-gruppe :>,max_antal_i_gruppe,"nl",1,
  3 13590         <:tf-vogntabel       :>,tf_vogntabel,"nl",1,
  3 13591         <:tf-gruppedef       :>,tf_gruppedef,"nl",1,
  3 13592         <:tf-gruppeidenter   :>,tf_gruppeidenter,"nl",1,
  3 13593         <:tf-springdef       :>,tf_springdef,"nl",1,
  3 13594         <:vt-logskift        :>,vt_logskift,"nl",1,
  3 13595         <:vt-logdisc         :>,vt_logdisc.laf,"nl",1,
  3 13596         <:vt-log-slicelgd    :>,vt_log_slicelgd,"nl",1,
  3 13597         <:vt-log-aktiv       :>,
  3 13598            if vt_log_aktiv then <:true:> else <:false:>,"nl",1,
  3 13599         <:vt-logstart        :>,<<zdddddd.dd>,vt_logstart,"nl",1,
  3 13600         <::>);
  3 13601       write(zud,"nl",1,<:vt-logtail:<'nl'>:>);
  3 13602       laf:= 2;
  3 13603       write(zud,"sp",2,<<d>,vt_logtail(1),"sp",1,vt_logtail.laf);
  3 13604       for i:= 6 step 1 until 10 do
  3 13605         write(zud,"sp",1,<<d>,vt_logtail(i));
  3 13606       write(zud,"nl",1);
  3 13607     end;
  2 13608     \f

  2 13608     message procedure p_vogntabel side 1 - 820301/cl;
  2 13609     
  2 13609     procedure p_vogntabel(z);
  2 13610       zone z;
  2 13611     begin
  3 13612       integer i,b,s,o,t,li,lb,lø,g;
  3 13613       write(z,<:<10>***** udskrift af vogntabel *****<10>:>,
  3 13614         <:<10>max-antal-busser =:>,max_antal_busser,<:  sidste-bus =:>,
  3 13615         sidste_bus,<:<10>max-antal-linie-løb =:>,max_antal_linie_løb,
  3 13616         <:  sidste-linie-løb =:>,sidste_linie_løb,"nl",1);
  3 13617     
  3 13617       for i:= 1 step 1 until sidste_bus do
  3 13618       begin
  4 13619         b:= bustabel(i) extract 14;
  4 13620         g:= bustabel(i) shift (-14);
  4 13621         s:= bustabel1(i) shift (-23);
  4 13622         o:= bustabel1(i) extract 8;
  4 13623         t:= intg(bustilstand(i));
  4 13624         li:= linie_løb_tabel(linie_løb_indeks(i) extract 12);
  4 13625         lø:= li extract 7;
  4 13626         lb:= li shift (-7) extract 5;
  4 13627         lb:= if lb=0 then 32 else lb+64;
  4 13628         li:= li shift (-12) extract 10;
  4 13629         write(z,if i mod 2 = 1 then <:<10>:> else <:      :>,
  4 13630           <<zddd>,b,if s=1 then <:B:> else <: :>,"sp",1,
  4 13631           if g > 0 then string bpl_navn(g) else <:   :>,
  4 13632           ";",1,true,4,string område_navn(o),
  4 13633           <:(:>,<<-dd>,t,<:)  :>," ",if lb=' ' then 1 else 0,<<ddd>,
  4 13634           li,false add lb,if lb=' ' then 0 else 1,<:/:>,<<zd>,lø);
  4 13635       end;
  3 13636     end p_vogntabel;
  2 13637     \f

  2 13637     message procedure p_gruppetabel side 1 - 810531/cl;
  2 13638     
  2 13638     procedure p_gruppetabel(z);
  2 13639       zone                  z;
  2 13640     begin
  3 13641       integer i,nr,bogst;
  3 13642       boolean spc_gr;
  3 13643       write(z,"nl",2,<:*****  udskrift af gruppetabel  *****:>,"nl",1,
  3 13644         <:max-antal-grupper =:>,max_antal_grupper,
  3 13645         <:   max-antal-i-gruppe =:>,max_antal_i_gruppe,
  3 13646         <:   max-antal-gruppeopkald =:>,max_antal_gruppeopkald,"nl",2,
  3 13647         <:gruppetabel::>);
  3 13648       for i:= 1 step 1 until max_antal_grupper do
  3 13649         write(z,if i mod 10 = 1 then <:<10>:> else <:  :>,<<dd>,i,":",1,
  3 13650           if gruppetabel(i) <> 0 then "G" else " ",1,true,2,<<b>,
  3 13651           gruppetabel(i) extract 7);
  3 13652       write(z,"nl",2,<:gruppeopkald::>);
  3 13653       for i:= 1 step 1 until max_antal_gruppeopkald do
  3 13654       begin
  4 13655         write(z,if i mod 4 = 1 then <:<10>:> else <:   :>,<<dd>,i,":",1);
  4 13656         if gruppeopkald(i,1) = 0 then
  4 13657           write(z,"sp",11)
  4 13658         else
  4 13659         begin
  5 13660           spc_gr:= gruppeopkald(i,1) shift (-21) = 5;
  5 13661           if spc_gr then nr:= gruppeopkald(i,1) extract 7
  5 13662           else
  5 13663           begin
  6 13664             nr:= gruppeopkald(i,1) shift (-5) extract 10;
  6 13665             bogst:= gruppeopkald(i,1) extract 5 +'@';
  6 13666             if bogst = '@' then bogst:= 'sp';
  6 13667           end;
  5 13668           if spc_gr then
  5 13669             write(z,<:(G:>,<<d>,true,3,nr)
  5 13670           else
  5 13671             write(z,"(",1,<<ddd>,nr,false add bogst,1);
  5 13672           write(z,",",1,<<dddd>,gruppeopkald(i,2),")",1);
  5 13673         end;
  4 13674       end;
  3 13675     end p_gruppetabel;
  2 13676     \f

  2 13676     message procedure p_springtabel side 1 - 810519/cl;
  2 13677     
  2 13677     procedure p_springtabel(z);
  2 13678       zone                  z;
  2 13679     begin
  3 13680       integer li,bo,max,st,nr;
  3 13681       long indeks;
  3 13682       real t;
  3 13683     
  3 13683       write(z,"nl",2,<:***** springtabel *****:>,"nl",1,
  3 13684         <:max-antal-spring =:>,max_antal_spring,"nl",2,
  3 13685         <:nr spring-id max status   næste-tid:>,"nl",1);
  3 13686       for nr:= 1 step 1 until max_antal_spring do
  3 13687       begin
  4 13688         write(z,<<dd>,nr);
  4 13689         <* if springtabel(nr,1)<>0 then *>
  4 13690         begin
  5 13691           li:= springtabel(nr,1) shift (-5) extract 10;
  5 13692           bo:= springtabel(nr,1) extract 5;
  5 13693           if bo<>0 then bo:= bo + 'A' - 1;
  5 13694           indeks:= extend springtabel(nr,2) shift 24;
  5 13695           st:= extend springtabel(nr,3) shift (-12) extract 24;
  5 13696           max:= springtabel(nr,3) extract 12;
  5 13697           write(z,"sp",(bo=0) extract 1 + 2,<<ddd>,li,false add bo,1,<:.:>);
  5 13698           write(z,"sp",4-write(z,string indeks),<< dd>,max,<<    -dd>,st);
  5 13699           if springtid(nr)<>0.0 then
  5 13700             write(z,<< zddddd.dddd>,systime(4,springtid(nr),t)+t/1000000)
  5 13701           else
  5 13702             write(z,<<      d.d   >,0.0);
  5 13703           if springstart(nr)<>0.0 then
  5 13704             write(z,<< zddddd.dddd>,systime(4,springstart(nr),t)+t/1000000)
  5 13705           else
  5 13706             write(z,<<      d.d   >,0.0);
  5 13707         end
  4 13708     <*  else
  4 13709           write(z,<:  --------:>)*>;
  4 13710         write(z,"nl",1);
  4 13711       end;
  3 13712     end p_springtabel;
  2 13713     \f

  2 13713     message procedure find_busnr side 1 - 820301/cl;
  2 13714     
  2 13714     integer procedure findbusnr(ll_id,busnr,garage,tilst);
  2 13715       value   ll_id;
  2 13716       integer ll_id, busnr, garage, tilst;
  2 13717     begin
  3 13718       integer i,j;
  3 13719     
  3 13719       j:= binærsøg(sidste_linie_løb,
  3 13720             (linie_løb_tabel(i) - ll_id), i);
  3 13721       if j<>0 then <* linie/løb findes ikke *>
  3 13722       begin
  4 13723         find_busnr:= -1;
  4 13724         busnr:= 0;
  4 13725         garage:= 0;
  4 13726         tilst:= 0;
  4 13727       end
  3 13728       else
  3 13729       begin
  4 13730         busnr:= bustabel(busindeks(i) extract 12);
  4 13731         tilst:= intg(bustilstand(intg(busindeks(i))));
  4 13732         garage:= busnr shift (-14);
  4 13733         busnr:= busnr extract 14;
  4 13734         find_busnr:= busindeks(i) extract 12;
  4 13735       end;
  3 13736     end find_busnr;
  2 13737     \f

  2 13737     message procedure søg_omr_bus side 1 - 881027/cl;
  2 13738     
  2 13738     
  2 13738     integer procedure søg_omr_bus(bus,ll,gar,omr,sig,tilst);
  2 13739       value bus;
  2 13740       integer bus,ll,gar,omr,sig,tilst;
  2 13741     begin
  3 13742       integer i,j,nr,bu,bi,bl;
  3 13743     
  3 13743       j:= binærsøg(sidste_bus,((bustabel(bi) extract 14) - (bus extract 14)),bi);
  3 13744       nr:= -1;
  3 13745       if j=0 then
  3 13746       begin
  4 13747         bl:= bu:= bi;
  4 13748         while bl>1 and bustabel(bl-1) extract 14 = bus extract 14 do bl:=bl-1;
  4 13749         while bu<sidste_bus and
  4 13750           bustabel(bu+1) extract 14 = bus extract 14 do bu:= bu+1;
  4 13751     
  4 13751         if bl<>bu then
  4 13752         begin
  5 13753           <* flere busser med samme tekniske nr. omr skal passe *>
  5 13754           nr:= -2;
  5 13755           for bi:= bl step 1 until bu do
  5 13756             if bustabel1(bi) extract 8 = omr extract 8 then nr:= bi;
  5 13757         end
  4 13758         else
  4 13759           nr:= bi;
  4 13760       end;
  3 13761     
  3 13761       if nr<0 then
  3 13762       begin
  4 13763         <* bus findes ikke *>
  4 13764         ll:= gar:= tilst:= sig:= 0;
  4 13765       end
  3 13766       else
  3 13767       begin
  4 13768         tilst:= intg(bustilstand(nr));
  4 13769         gar:= bustabel(nr) shift (-14);
  4 13770         ll:= linie_løb_tabel( linie_løb_indeks(nr) extract 12 );
  4 13771         if omr=0 then omr:= bustabel1(nr) extract 8;
  4 13772         sig:= bustabel1(nr) shift (-23);
  4 13773       end;
  3 13774       søg_omr_bus:= nr;
  3 13775     end;
  2 13776     \f

  2 13776     message procedure find_linie_løb side 1 - 820301/cl;
  2 13777     
  2 13777     integer procedure find_linie_løb(busnr,linie_løb,garage,tilst);
  2 13778       value   busnr;
  2 13779       integer busnr, linie_løb, garage, tilst;
  2 13780     begin
  3 13781       integer i,j;
  3 13782     
  3 13782       j:= binærsøg(sidste_bus,((bustabel(i) extract 14) - (busnr extract 14)), i);
  3 13783     
  3 13783       if j<>0 then <* bus findes ikke *>
  3 13784       begin
  4 13785         find_linie_løb:= -1;
  4 13786         linie_løb:= 0;
  4 13787         garage:= 0;
  4 13788         tilst:= 0;
  4 13789       end
  3 13790       else
  3 13791       begin
  4 13792         tilst:= intg(bustilstand(i));
  4 13793         garage:= bustabel(i) shift (-14);
  4 13794         linie_løb:= linie_løb_tabel(linie_løb_indeks(i) extract 12);
  4 13795         find_linie_løb:= linie_løb_indeks(i) extract 12;
  4 13796       end;
  3 13797     end find_linie_løb;
  2 13798     \f

  2 13798     message procedure h_vogntabel side 1 - 810413/cl;
  2 13799     
  2 13799     <* hovedmodulcorutine for vogntabelmodul *>
  2 13800     
  2 13800     procedure h_vogntabel;
  2 13801     begin
  3 13802       integer array field op;
  3 13803       integer dest_sem,k;
  3 13804     
  3 13804       procedure skriv_h_vogntabel(zud,omfang);
  3 13805         value                         omfang;
  3 13806         zone                      zud;
  3 13807         integer                       omfang;
  3 13808       begin
  4 13809         write(zud,"nl",1,<:+++ hovedmodul vogntabel :>);
  4 13810         if omfang<>0 then
  4 13811         disable
  4 13812         begin
  5 13813           skriv_coru(zud,abs curr_coruno);
  5 13814           write(zud,"nl",1,<<d>,
  5 13815             <:cs-vt     :>,cs_vt,"nl",1,
  5 13816             <:op        :>,op,"nl",1,
  5 13817             <:dest-sem  :>,dest_sem,"nl",1,
  5 13818             <:k         :>,k,"nl",1,
  5 13819             <::>);
  5 13820         end;
  4 13821       end;
  3 13822     \f

  3 13822     message procedure h_vogntabel side 2 - 820301/cl;
  3 13823     
  3 13823       stackclaim(if cm_test then 198 else 146);
  3 13824       trap(h_vt_trap);
  3 13825     
  3 13825     <*+2*>
  3 13826     <**> disable if testbit47 and overvåget or testbit28 then
  3 13827     <**>   skriv_h_vogntabel(out,0);
  3 13828     <*-2*>
  3 13829     
  3 13829       repeat
  3 13830         waitch(cs_vt,op,true,-1);
  3 13831     <*+4*>
  3 13832       if (d.op.optype and gen_optype) extract 12 = 0 and
  3 13833          (d.op.optype and vt_optype) extract 12 = 0 then
  3 13834        fejlreaktion(12,op,<:vogntabel:>,0);
  3 13835     <*-4*>
  3 13836       disable
  3 13837       begin
  4 13838     
  4 13838         k:= d.op.opkode extract 12;
  4 13839         dest_sem:=
  4 13840           if k =   9 then cs_vt_rap else
  4 13841           if k =  10 then cs_vt_rap else
  4 13842           if k =  11 then cs_vt_opd else
  4 13843           if k =  12 then cs_vt_opd else
  4 13844           if k =  13 then cs_vt_opd else
  4 13845           if k =  14 then cs_vt_tilst else
  4 13846           if k =  15 then cs_vt_tilst else
  4 13847           if k =  16 then cs_vt_tilst else
  4 13848           if k =  17 then cs_vt_tilst else
  4 13849           if k =  18 then cs_vt_tilst else
  4 13850           if k =  19 then cs_vt_opd else
  4 13851           if k =  20 then cs_vt_opd else
  4 13852           if k =  21 then cs_vt_auto else
  4 13853           if k =  24 then cs_vt_opd else
  4 13854           if k =  25 then cs_vt_grp else
  4 13855           if k =  26 then cs_vt_grp else
  4 13856           if k =  27 then cs_vt_grp else
  4 13857           if k =  28 then cs_vt_grp else
  4 13858           if k =  30 then cs_vt_spring else
  4 13859           if k =  31 then cs_vt_spring else
  4 13860           if k =  32 then cs_vt_spring else
  4 13861           if k =  33 then cs_vt_spring else
  4 13862           if k =  34 then cs_vt_spring else
  4 13863           if k =  35 then cs_vt_spring else
  4 13864           -1;
  4 13865     \f

  4 13865     message procedure h_vogntabel side 3 - 810422/cl;
  4 13866     
  4 13866     <*+2*>
  4 13867     <**> if testbit41 and overvåget then
  4 13868     <**> begin
  5 13869     <**>   skriv_h_vogntabel(out,0); write(out,<:   modtaget operation:>);
  5 13870     <**>   skriv_op(out,op);
  5 13871     <**> end;
  4 13872     <*-2*>
  4 13873       end;
  3 13874     
  3 13874       if dest_sem = -1 then
  3 13875         fejlreaktion(2,k,<:vogntabel:>,0);
  3 13876       disable signalch(dest_sem,op,d.op.optype);
  3 13877     until false;
  3 13878     h_vt_trap:
  3 13879       disable skriv_h_vogntabel(zbillede,1);
  3 13880     end h_vogntabel;
  2 13881     \f

  2 13881     message procedure vt_opdater side 1 - 810317/cl;
  2 13882     
  2 13882     procedure vt_opdater(op1);
  2 13883       value              op1;
  2 13884       integer            op1;
  2 13885     begin
  3 13886       integer array field op,radop;
  3 13887       integer funk,res,busnr,ll_id,ll1,omr,gar,sig,tilst,bi,li,s,zi,
  3 13888         format,ll_id1,ll_id2,inf1,inf2,i,bi1,bi2,li1,li2,pm1,
  3 13889         flin,slin,finx,sinx;
  3 13890       integer field bn,ll;
  3 13891     
  3 13891     procedure skriv_vt_opd(zud,omfang);
  3 13892       value omfang; integer omfang;
  3 13893       zone zud;
  3 13894     begin
  4 13895       write(zud,"nl",1,<:+++ vt_opdater           :>);
  4 13896       if omfang <> 0 then
  4 13897       disable
  4 13898       begin
  5 13899         skriv_coru(zud,abs curr_coruno);
  5 13900         write(zud,"nl",1,
  5 13901           <:  op:   :>,op,"nl",1,
  5 13902           <:  radop::>,radop,"nl",1,
  5 13903           <:  funk: :>,funk,"nl",1,
  5 13904           <:  res:  :>,res,"nl",1,
  5 13905           <::>);
  5 13906       end;
  4 13907     end skriv_vt_opd;
  3 13908     
  3 13908       integer procedure opd_omr(fnk,omr,bus,ll);
  3 13909         value                   fnk,omr,bus,ll;
  3 13910         integer                 fnk,omr,bus,ll;
  3 13911       begin
  4 13912         opd_omr:= 3;
  4 13913         <*GØR PROCEDUREN TIL DUMMYPROCEDURE - 
  4 13914           ændringer skal ikke længere meldes til yderområder *>
  4 13915         goto dummy_retur;
  4 13916     
  4 13916         if omr extract 8 > 3 then
  4 13917         begin
  5 13918           startoperation(radop,501,cs_vt_opd,fnk);
  5 13919           d.radop.data(1):= omr;
  5 13920           d.radop.data(2):= bus;
  5 13921           d.radop.data(3):= ll;
  5 13922           signalch(cs_rad,radop,vt_optype);
  5 13923     <*V*> waitch(cs_vt_opd,radop,vt_optype,-1);
  5 13924           opd_omr:= d.radop.resultat;
  5 13925         end
  4 13926         else
  4 13927           opd_omr:= 0;
  4 13928     dummy_retur:
  4 13929       end;
  3 13930     message procedure vt_opdater side 1a - 920517/cl;
  3 13931     
  3 13931       procedure opd_log(kilde,kode,bus,ll1,ll2);
  3 13932         value           kilde,kode,bus,ll1,ll2;
  3 13933         integer         kilde,kode,bus,ll1,ll2;
  3 13934       begin
  4 13935         integer array field op;
  4 13936     
  4 13936     <*V*> waitch(cs_vt_logpool,op,vt_optype,-1);
  4 13937     
  4 13937         startoperation(op,curr_coruid,cs_vt_logpool,0);
  4 13938         systime(1,0.0,d.op.data.v_tid);
  4 13939         d.op.data.v_kode:= kode + (if kilde=506 <*vt_auto*> then 0 else 4);
  4 13940         d.op.data.v_bus:= bus;
  4 13941         d.op.data.v_ll1:= ll1;
  4 13942         d.op.data.v_ll2:= ll2;
  4 13943         signalch(cs_vt_log,op,vt_optype);
  4 13944       end;
  3 13945     
  3 13945       stackclaim((if cm_test then 198 else 146)+125);
  3 13946     
  3 13946       bn:= 4; ll:= 2;
  3 13947       radop:= op1;
  3 13948       trap(vt_opd_trap);
  3 13949     
  3 13949     <*+2*>
  3 13950     <**> disable if testbit47 and overvåget or testbit28 then
  3 13951     <**>   skriv_vt_opd(out,0);
  3 13952     <*-2*>
  3 13953     \f

  3 13953     message procedure vt_opdater side 2 - 851001/cl;
  3 13954     
  3 13954     vent_op:
  3 13955       waitch(cs_vt_opd,op,gen_optype or vt_optype,-1);
  3 13956     
  3 13956     <*+2*>
  3 13957     <**>  disable
  3 13958     <**>  if testbit41 and overvåget then
  3 13959     <**>  begin
  4 13960     <**>    skriv_vt_opd(out,0);
  4 13961     <**>    write(out,<:   modtaget operation:>);
  4 13962     <**>    skriv_op(out,op);
  4 13963     <**>  end;
  3 13964     <*-2*>
  3 13965     
  3 13965     <*+4*>
  3 13966     <**>if op<>vt_op then
  3 13967     <**>begin
  4 13968     <**>  disable begin
  5 13969     <**>    fejlreaktion(11,op,<:vt-opdater:>,1);
  5 13970     <**>    d.op.resultat:= 31; <*systemfejl*>
  5 13971     <**>    signalch(d.op.retur,op,d.op.optype);
  5 13972     <**>  end;
  4 13973     <**>  goto vent_op;
  4 13974     <**>end;
  3 13975     <*-4*>
  3 13976       disable
  3 13977       begin integer opk;
  4 13978     
  4 13978         opk:= d.op.opkode extract 12;
  4 13979         funk:= if opk=11 then 1 else
  4 13980                if opk=12 then 2 else
  4 13981                if opk=13 then 3 else
  4 13982                if opk=19 then 4 else
  4 13983                if opk=20 then 5 else
  4 13984                if opk=24 then 6 else
  4 13985                0;
  4 13986         if funk=0 then fejlreaktion( 2,opk,<:vt_opdater:>,0);
  4 13987       end;
  3 13988       res:= 0;
  3 13989       goto case funk of (indsæt,udtag,omkod,slet,flyt,roker);
  3 13990     \f

  3 13990     message procedure vt_opdater side 3 - 820301/cl;
  3 13991     
  3 13991     indsæt:
  3 13992       begin
  4 13993         integer busnr,ll_id,ll1,omr,gar,sig,tilst,bi,li,s,zi;
  4 13994     <*+4*>
  4 13995     <**> if d.op.data(1) shift (-22) <> 0 then
  4 13996     <**> begin
  5 13997     <**>   res:= 31; fejlreaktion(10,d.op.data(1),<:indsæt busnr:>,1);
  5 13998     <**>   goto slut_indsæt;
  5 13999     <**> end;
  4 14000     <*-4*>
  4 14001         busnr:= d.op.data(1) extract 14;
  4 14002     <*+4*>
  4 14003     <**> if d.op.data(2) shift (-22) <> 1 then
  4 14004     <**> begin
  5 14005     <**>   res:= 31; fejlreaktion(10,d.op.data(2),<:indsæt linie/løb:>,1);
  5 14006     <**>   goto slut_indsæt;
  5 14007     <**> end;
  4 14008     <*-4*>
  4 14009         ll_id:= d.op.data(2);
  4 14010         s:= omr:= d.op.data(4) extract 8;
  4 14011         bi:= søg_omr_bus(busnr,ll1,gar,omr,sig,tilst);
  4 14012         if bi<0 then
  4 14013         begin
  5 14014           if bi=(-1) then res:=10 <*bus ukendt*> else
  5 14015           if s<>0 then res:= 58 <*ulovligt omr*> else res:= 57 <*omr nødv.*>;
  5 14016         end
  4 14017         else
  4 14018         if s<>0 and s<>omr then
  4 14019           res:= 58 <* ulovligt område for bus *>
  4 14020         else
  4 14021         if intg(bustilstand(bi)) <> 0 then
  4 14022           res:=(if intg(bustilstand(bi))=(-1) then 18 <* i kø *>
  4 14023                 else 14 <* optaget *>)
  4 14024         else
  4 14025         begin
  5 14026           if linie_løb_indeks(bi) extract 12 <> 0 then
  5 14027           begin <* linie/løb allerede indsat *>
  6 14028             res:= 11;
  6 14029             d.op.data(3):= linie_løb_tabel(linie_løb_indeks(bi) extract 12);
  6 14030           end
  5 14031           else
  5 14032           begin
  6 14033     \f

  6 14033     message procedure vt_opdater side 3a - 900108/cl;
  6 14034     
  6 14034             if d.op.kilde//100 <> 4 then
  6 14035             res:= opd_omr(11,gar shift 8 +
  6 14036               bustabel1(bi) extract 8,busnr,ll_id);
  6 14037             if res>3 then goto slut_indsæt;
  6 14038             s:= binærsøg(sidste_linie_løb,linie_løb_tabel(li) - ll_id,li);
  6 14039             if s=0 then <* linie/løb findes allerede *>
  6 14040             begin
  7 14041               sig:= busindeks(li) extract 12;
  7 14042               d.op.data(3):= bustabel(sig);
  7 14043               linie_løb_indeks(sig):= false;
  7 14044               disable modiffil(tf_vogntabel,sig,zi);
  7 14045               fil(zi).ll:= 0;
  7 14046               fil(zi).bn:= bustabel(sig) extract 14 add
  7 14047                            (bustabel1(sig) extract 8 shift 14);
  7 14048               opd_log(d.op.kilde,2,bustabel(sig),ll_id,0);
  7 14049     
  7 14049               linie_løb_indeks(bi):= false add li;
  7 14050               busindeks(li):= false add bi;
  7 14051               disable modiffil(tf_vogntabel,bi,zi);
  7 14052               fil(zi).ll:= ll_id;
  7 14053               fil(zi).bn:= bustabel(bi) extract 14 add
  7 14054                            (bustabel1(bi) extract 8 shift 14);
  7 14055               opd_log(d.op.kilde,1,busnr,0,ll_id);
  7 14056               res:= 3;
  7 14057             end
  6 14058             else
  6 14059             begin
  7 14060     \f

  7 14060     message procedure vt_opdater side 4 - 810527/cl;
  7 14061     
  7 14061               if s<0 then li:= li +1;
  7 14062               if sidste_linie_løb=max_antal_linie_løb then
  7 14063               begin
  8 14064                 fejlreaktion(10,max_antal_linie_løb,<:for mange linie/løb:>,1);
  8 14065                 res:= 31;
  8 14066               end
  7 14067               else
  7 14068               begin
  8 14069                 for i:= sidste_linie_løb step -1 until li do
  8 14070                 begin
  9 14071                   linie_løb_tabel(i+1):=linie_løb_tabel(i);
  9 14072                   linie_løb_indeks(bus_indeks(i) extract 12):=false add (i+1);
  9 14073                   bus_indeks(i+1):=bus_indeks(i);
  9 14074                 end;
  8 14075                 sidste_linie_løb:= sidste_linie_løb +1;
  8 14076                 linie_løb_tabel(li):= ll_id;
  8 14077                 linie_løb_indeks(bi):= false add li;
  8 14078                 busindeks(li):= false add bi;
  8 14079                 disable s:= modiffil(tf_vogntabel,bi,zi);
  8 14080                 if s<>0 then fejlreaktion(7,s,<:vt_indsæt:>,0);
  8 14081                 fil(zi).bn:= busnr extract 14 add
  8 14082                              (bustabel1(bi) extract 8 shift 14);
  8 14083                 fil(zi).ll:= ll_id;
  8 14084                 opd_log(d.op.kilde,1,busnr,0,ll_id);
  8 14085                 res:= 3; <* ok *>
  8 14086               end;
  7 14087             end;
  6 14088           end;
  5 14089         end;
  4 14090     slut_indsæt:
  4 14091         d.op.resultat:= res;
  4 14092       end;
  3 14093       goto returner;
  3 14094     \f

  3 14094     message procedure vt_opdater side 5 - 820301/cl;
  3 14095     
  3 14095     udtag:
  3 14096       begin
  4 14097         integer busnr,ll_id,omr,gar,sig,bi,li,s,format,tilst,zi;
  4 14098     
  4 14098         busnr:= ll_id:= 0;
  4 14099         omr:= s:= d.op.data(2) extract 8;
  4 14100         format:= d.op.data(1) shift (-22);
  4 14101         if format=0 then <*busnr*>
  4 14102         begin
  5 14103           busnr:= d.op.data(1) extract 14;
  5 14104           bi:= søg_omr_bus(busnr,ll_id,gar,omr,sig,tilst);
  5 14105           if bi<0 then
  5 14106           begin
  6 14107             if bi=-1 then res:= 10 else
  6 14108             if s<>0 then res:= 58 else res:= 57;
  6 14109             goto slut_udtag;
  6 14110           end;
  5 14111           if bi>0 and s<>0 and s<>omr then
  5 14112           begin
  6 14113             res:= 58; goto slut_udtag;
  6 14114           end;
  5 14115           li:= linie_løb_indeks(bi) extract 12;
  5 14116           busnr:= bustabel(bi);
  5 14117           if li=0 or linie_løb_tabel(li)=0 then
  5 14118           begin <* bus ej indsat *>
  6 14119             res:= 13;
  6 14120             goto slut_udtag;
  6 14121           end;
  5 14122           ll_id:= linie_løb_tabel(li);
  5 14123         end
  4 14124         else
  4 14125         if format=1 then <* linie_løb *>
  4 14126         begin
  5 14127           ll_id:= d.op.data(1);
  5 14128           s:= binærsøg(sidste_linie_løb,linie_løb_tabel(li)-ll_id,li);
  5 14129           if s<>0 then
  5 14130           begin <* linie/løb findes ikke *>
  6 14131             res:= 9;
  6 14132             goto slut_udtag;
  6 14133           end;
  5 14134           bi:= busindeks(li) extract 12;
  5 14135           busnr:= bustabel(bi);
  5 14136         end
  4 14137         else <* ulovlig identifikation *>
  4 14138         begin
  5 14139           res:= 31;
  5 14140           fejlreaktion(10,d.op.data(1),<:udtag ident:>,1);
  5 14141           goto slut_udtag;
  5 14142         end;
  4 14143     \f

  4 14143     message procedure vt_opdater side 6 - 820301/cl;
  4 14144     
  4 14144        tilst:= intg(bustilstand(bi));
  4 14145         if tilst<>0 then
  4 14146         begin
  5 14147           res:= if tilst = -1 then 18<*i kø*> else 14<*optaget*>;
  5 14148           goto slut_udtag;
  5 14149         end;
  4 14150         if d.op.kilde//100 <> 4 then
  4 14151         res:= opd_omr(12, bustabel(bi) shift (-14) extract 8 shift 8 +
  4 14152                 bustabel1(bi) extract 8,bustabel(bi) extract 14,0);
  4 14153         if res>3 then goto slut_udtag;
  4 14154         linie_løb_indeks(bi):= false;
  4 14155         for i:= li step 1 until sidste_linie_løb -1 do
  4 14156         begin
  5 14157           linie_løb_tabel(i):= linie_løb_tabel(i+1);
  5 14158           linie_løb_indeks(bus_indeks(i+1) extract 12):= false add i;
  5 14159           bus_indeks(i):= bus_indeks(i+1);
  5 14160         end;
  4 14161         linie_løb_tabel(sidste_linie_løb):= 0;
  4 14162         bus_indeks(sidste_linie_løb):= false;
  4 14163         sidste_linie_løb:= sidste_linie_løb -1;
  4 14164         disable s:= modif_fil(tf_vogntabel,bi,zi);
  4 14165         if s<>0 then fejlreaktion(7,s,<:vt_udtag:>,0);
  4 14166         fil(zi).ll:= 0;
  4 14167         fil(zi).bn:= busnr add (bustabel1(bi) extract 8 shift 14);
  4 14168         opd_log(d.op.kilde,2,busnr,ll_id,0);
  4 14169         res:= 3; <* ok *>
  4 14170     slut_udtag:
  4 14171         d.op.resultat:= res;
  4 14172         d.op.data(2):= ll_id;
  4 14173         d.op.data(3):= busnr;
  4 14174       end;
  3 14175       goto returner;
  3 14176     \f

  3 14176     message procedure vt_opdater side 7 - 851001/cl;
  3 14177     
  3 14177     omkod:
  3 14178     flyt:
  3 14179     roker:
  3 14180       begin
  4 14181         integer ll_id1,ll_id2,inf1,inf2,i,s,bi1,bi2,li1,li2,tilst,zi,pm1;
  4 14182     
  4 14182         inf1:= inf2:= 0;
  4 14183         ll_id1:= d.op.data(1);
  4 14184         ll_id2:= d.op.data(2);
  4 14185         if ll_id1=ll_id2 then
  4 14186         begin
  5 14187           res:= 24; inf1:= ll_id2;
  5 14188           goto slut_flyt;
  5 14189         end;
  4 14190     <*+4*>
  4 14191     <**>  for i:= 1,2 do
  4 14192     <**>    if d.op.data(i) shift (-22) <> 1 then
  4 14193     <**>    begin
  5 14194     <**>      res:= 31;
  5 14195     <**>      fejlreaktion(10,d.op.data(i),case i of (
  5 14196     <**>        <:omkod/flyt/roker ident1:>,<:omkod/flyt/roker ident2:>),1);
  5 14197     <**>      goto slut_flyt;
  5 14198     <**>    end;
  4 14199     <*-4*>
  4 14200     
  4 14200         s:= binærsøg(sidste_linie_løb,linie_løb_tabel(li1) - ll_id1,li1);
  4 14201         if s<>0 and funk=6 <* roker *> then
  4 14202         begin
  5 14203           i:= ll_id1; ll_id1:= ll_id2; ll_id2:= i;
  5 14204           s:= binærsøg(sidste_linie_løb,linie_løb_tabel(li1) - ll_id1,li1);
  5 14205         end;
  4 14206         if s<>0 then
  4 14207         begin
  5 14208           res:= 9; <* ukendt linie/løb *>
  5 14209           goto slut_flyt;
  5 14210         end;
  4 14211         bi1:= busindeks(li1) extract 12;
  4 14212         inf1:= bustabel(bi1);
  4 14213         tilst:= intg(bustilstand(bi1));
  4 14214         if tilst<>0 then <* bus ikke fri *>
  4 14215         begin
  5 14216           res:= if tilst=-1 then 18 <* i kø *> else 14 <*optaget*>;
  5 14217           goto slut_flyt;
  5 14218         end;
  4 14219     \f

  4 14219     message procedure vt_opdater side 7a- 851001/cl;
  4 14220         if d.op.kilde//100 <> 4 then
  4 14221     
  4 14221         res:= opd_omr(11, bustabel(bi1) shift (-14) extract 8 shift 8 +
  4 14222                 bustabel1(bi1) extract 8, inf1 extract 14, ll_id2);
  4 14223         if res>3 then goto slut_flyt;
  4 14224     
  4 14224         s:= binærsøg(sidste_linie_løb,linie_løb_tabel(li2) - ll_id2,li2);
  4 14225         if s=0 then
  4 14226         begin <* ll_id2 er indkodet *>
  5 14227           bi2:= busindeks(li2) extract 12;
  5 14228           inf2:= bustabel(bi2);
  5 14229           tilst:= intg(bustilstand(bi2));
  5 14230           if funk=3 then res:= 12 <* ulovlig ved omkod *> else
  5 14231           if tilst=-1 then res:= 18 else if tilst<>0 then res:= 14;
  5 14232           if res>3 then
  5 14233           begin
  6 14234             inf1:= inf2; inf2:= 0;
  6 14235             goto slut_flyt;
  6 14236           end;
  5 14237     
  5 14237           if d.op.kilde//100 <> 4 then
  5 14238           res:= opd_omr(11, bustabel(bi2) shift (-14) extract 8 shift 8 +
  5 14239                   bustabel1(bi2) extract 8, inf2 extract 14, ll_id1);
  5 14240           if res>3 then goto slut_flyt;
  5 14241     
  5 14241           <* flyt bus *>
  5 14242           if funk=6 then
  5 14243             linie_løb_indeks(bi2):= false add li1
  5 14244           else
  5 14245             linie_løb_indeks(bi2):= false;
  5 14246           linie_løb_indeks(bi1):= false add li2;
  5 14247           if funk=6 then
  5 14248             busindeks(li1):= false add bi2
  5 14249           else
  5 14250             busindeks(li1):= false;
  5 14251           busindeks(li2):= false add bi1;
  5 14252     
  5 14252          if funk<>6 then
  5 14253          begin
  6 14254           <* fjern ll_id1 *>
  6 14255           for i:= li1 step 1 until sidste_linie_løb - 1 do
  6 14256           begin
  7 14257             linie_løb_tabel(i):= linie_løb_tabel(i+1);
  7 14258             linie_løb_indeks(intg(busindeks(i+1))):= false add i;
  7 14259             busindeks(i):= busindeks(i+1);
  7 14260           end;
  6 14261           linie_løb_tabel(sidste_linie_løb):= 0;
  6 14262           bus_indeks(sidste_linie_løb):= false;
  6 14263           sidste_linie_løb:= sidste_linie_løb-1;
  6 14264          end;
  5 14265     
  5 14265           <* opdater vogntabelfil *>
  5 14266           disable s:= modiffil(tf_vogntabel,bi2,zi);
  5 14267           if s<>0 then fejlreaktion(7,s,<:vt-omkod/flyt:>,0);
  5 14268           fil(zi).ll:= if funk=6 then ll_id1 else 0;
  5 14269           fil(zi).bn:= inf2 extract 14 add (bustabel1(bi2) extract 8 shift 14);
  5 14270           if funk=6 then
  5 14271             opd_log(d.op.kilde,3,bustabel(bi2),ll_id2,ll_id1)
  5 14272           else
  5 14273             opd_log(d.op.kilde,2,bustabel(bi2),ll_id2,0);
  5 14274           disable s:= modiffil(tf_vogntabel,bi1,zi);
  5 14275           if s<>0 then fejlreaktion(7,s,<:vt-omkod/flyt:>,0);
  5 14276           fil(zi).ll:= ll_id2;
  5 14277           fil(zi).bn:= inf1 extract 14 add (bustabel1(bi1) extract 8 shift 14);
  5 14278           opd_log(d.op.kilde,3,bustabel(bi1),ll_id1,ll_id2);
  5 14279     \f

  5 14279     message procedure vt_opdater side 8 - 820301/cl;
  5 14280     
  5 14280         end <* ll_id2 indkodet *>
  4 14281         else
  4 14282         begin
  5 14283           if sign(s)=sign(li2-li1) then li2:=li2-sign(s);
  5 14284           <* li2 skal være indeks for sidste linie/løb der skal flyttes i vt *>
  5 14285           pm1:= sgn(li2-li1);
  5 14286           for i:= li1 step pm1 until li2-pm1 do
  5 14287           begin
  6 14288             linie_løb_tabel(i):= linie_løb_tabel(i+pm1);
  6 14289             busindeks(i):= busindeks(i+pm1);
  6 14290             linie_løb_indeks(intg(busindeks(i+pm1))):= false add i;
  6 14291           end;
  5 14292           linie_løb_tabel(li2):= ll_id2;
  5 14293           busindeks(li2):= false add bi1;
  5 14294           linie_løb_indeks(bi1):= false add li2;
  5 14295           disable s:= modiffil(tf_vogntabel,bi1,zi);
  5 14296           if s<>0 then fejlreaktion(7,s,<:vt-omkod/flyt:>,0);
  5 14297           fil(zi).ll:= ll_id2;
  5 14298           fil(zi).bn:= inf1 extract 14 add (bustabel1(bi1) extract 8 shift 14);
  5 14299           opd_log(d.op.kilde,3,bustabel(bi1),ll_id1,ll_id2);
  5 14300         end;
  4 14301         res:= 3; <*udført*>
  4 14302     slut_flyt:
  4 14303         d.op.resultat:= res;
  4 14304         d.op.data(3):= inf1;
  4 14305         if funk=5 then d.op.data(4):= inf2;
  4 14306       end;
  3 14307       goto returner;
  3 14308     \f

  3 14308     message procedure vt_opdater side 9 - 851001/cl;
  3 14309     
  3 14309     slet:
  3 14310       begin
  4 14311         integer flin,slin,finx,sinx,s,li,bi,omr,gar;
  4 14312         boolean test24;
  4 14313     
  4 14313         if d.op.data(2)=0 then d.op.data(2):= d.op.data(1);
  4 14314         omr:= d.op.data(3);
  4 14315     
  4 14315         if d.op.data(1) > d.op.data(2) then
  4 14316         begin
  5 14317           res:= 44; <* intervalstørrelse ulovlig *>
  5 14318           goto slut_slet;
  5 14319         end;
  4 14320     
  4 14320         flin:= (1 shift 22) + (d.op.data(1) extract 21 shift 7);
  4 14321         slin:= (1 shift 22) + (d.op.data(2) extract 21 shift 7) + 127;
  4 14322     
  4 14322         s:= binærsøg(sidste_linie_løb, (linie_løb_tabel(finx)-flin), finx);
  4 14323         if s<0 then finx:= finx+1;
  4 14324         s:= binærsøg(sidste_linie_løb, (linie_løb_tabel(sinx)-slin), sinx);
  4 14325         if s>0 then sinx:= sinx-1;
  4 14326     
  4 14326         for li:= finx step 1 until sinx do
  4 14327         begin
  5 14328           bi:= busindeks(li) extract 12;
  5 14329           gar:= bustabel(bi) shift (-14) extract 8;
  5 14330           if intg(bustilstand(bi))=0 and 
  5 14331              (omr = 0 or (omr > 0 and omr = gar) or
  5 14332               (omr < 0 and omr extract 8 = bustabel1(bi) extract 8)) then
  5 14333           begin
  6 14334             opd_log(d.op.kilde,2,bustabel(bi),linie_løb_tabel(li),0);
  6 14335             linie_løb_indeks(bi):= busindeks(li):= false;
  6 14336             linie_løb_tabel(li):= 0;
  6 14337           end;
  5 14338         end;
  4 14339     \f

  4 14339     message procedure vt_opdater side 10 - 850820/cl;
  4 14340     
  4 14340         sinx:= finx-1;
  4 14341         for li:= finx step 1 until sidste_linie_løb do
  4 14342         begin
  5 14343           if linie_løb_tabel(li)<>0 then
  5 14344           begin
  6 14345             sinx:= sinx+1;
  6 14346             if sinx<>li then
  6 14347             begin
  7 14348               linie_løb_tabel(sinx):= linie_løb_tabel(li);
  7 14349               busindeks(sinx):= busindeks(li);
  7 14350               linie_løb_indeks(busindeks(sinx) extract 12):= false add sinx;
  7 14351               linie_løb_tabel(li):= 0;
  7 14352               busindeks(li):= false;
  7 14353             end;
  6 14354           end;
  5 14355         end;
  4 14356         sidste_linie_løb:= sinx;
  4 14357     
  4 14357         test24:= testbit24; testbit24:= false;
  4 14358         for bi:= 1 step 1 until sidste_bus do 
  4 14359         disable
  4 14360         begin
  5 14361           s:= modiffil(tf_vogntabel,bi,finx);
  5 14362           if s<>0 then fejlreaktion(7,s,<:vt-slet:>,0);
  5 14363           fil(finx).bn:= bustabel(bi) extract 14 add
  5 14364                          (bustabel1(bi) extract 8 shift 14);
  5 14365           fil(finx).ll:= linie_løb_tabel(linie_løb_indeks(bi) extract 12);
  5 14366         end;
  4 14367         testbit24:= test24;
  4 14368         res:= 3;
  4 14369     
  4 14369     slut_slet:
  4 14370         d.op.resultat:= res;
  4 14371       end;
  3 14372       goto returner;
  3 14373     \f

  3 14373     message procedure vt_opdater side 11 - 810409/cl;
  3 14374     
  3 14374     returner:
  3 14375       disable
  3 14376       begin
  4 14377     
  4 14377     <*+2*>
  4 14378     <**>  if testbit40 and overvåget then
  4 14379     <**>  begin
  5 14380     <**>    skriv_vt_opd(out,0);
  5 14381     <**>    write(out,<:   vogntabel efter ændring:>);
  5 14382     <**>    p_vogntabel(out);
  5 14383     <**>  end;
  4 14384     <**>  if testbit41 and overvåget then
  4 14385     <**>  begin
  5 14386     <**>    skriv_vt_opd(out,0);
  5 14387     <**>    write(out,<:   returner operation:>);
  5 14388     <**>    skriv_op(out,op);
  5 14389     <**>  end;
  4 14390     <*-2*>
  4 14391     
  4 14391         signalch(d.op.retur,op,d.op.optype);
  4 14392       end;
  3 14393       goto vent_op;
  3 14394     
  3 14394     vt_opd_trap:
  3 14395       disable skriv_vt_opd(zbillede,1);
  3 14396     
  3 14396     end vt_opdater;
  2 14397     \f

  2 14397     message procedure vt_tilstand side 1 - 810424/cl;
  2 14398     
  2 14398     procedure vt_tilstand(cs_fil,fil_opref);
  2 14399       value               cs_fil,fil_opref;
  2 14400       integer             cs_fil,fil_opref;
  2 14401     begin
  3 14402       integer array field op,filop;
  3 14403       integer funk,format,busid,res,bi,tilst,opk,opk_indeks,
  3 14404               g_type,gr,antal,ej_res,zi,li,filref;
  3 14405       integer array identer(1:max_antal_i_gruppe);
  3 14406     
  3 14406       procedure skriv_vt_tilst(zud,omfang);
  3 14407         value                      omfang;
  3 14408         zone                   zud;
  3 14409         integer                    omfang;
  3 14410       begin
  4 14411         real array field raf;
  4 14412         raf:= 0;
  4 14413         write(zud,"nl",1,<:+++ vt_tilstand          :>);
  4 14414         if omfang <> 0 then
  4 14415         begin
  5 14416           skriv_coru(zud,abs curr_coruno);
  5 14417           write(zud,"nl",1,<<d>,
  5 14418             <:cs-fil     :>,cs_fil,"nl",1,
  5 14419             <:filop      :>,filop,"nl",1,
  5 14420             <:op         :>,op,"nl",1,
  5 14421             <:funk       :>,funk,"nl",1,
  5 14422             <:format     :>,format,"nl",1,
  5 14423             <:busid      :>,busid,"nl",1,
  5 14424             <:res        :>,res,"nl",1,
  5 14425             <:bi         :>,bi,"nl",1,
  5 14426             <:tilst      :>,tilst,"nl",1,
  5 14427             <:opk        :>,opk,"nl",1,
  5 14428             <:opk-indeks :>,opk_indeks,"nl",1,
  5 14429             <:g-type     :>,g_type,"nl",1,
  5 14430             <:gr         :>,gr,"nl",1,
  5 14431             <:antal      :>,antal,"nl",1,
  5 14432             <:ej-res     :>,ej_res,"nl",1,
  5 14433             <:zi         :>,zi,"nl",1,
  5 14434             <:li         :>,li,"nl",1,
  5 14435             <::>);
  5 14436           write(zud,"nl",1,<:identer:>);
  5 14437           skriv_hele(zud,identer.raf,max_antal_i_gruppe*2,2);
  5 14438         end;
  4 14439       end;
  3 14440     
  3 14440         procedure sorter_gruppe(tab,l,u);
  3 14441           value                     l,u;
  3 14442           integer array         tab;
  3 14443           integer                   l,u;
  3 14444         begin
  4 14445           integer array field ii,jj;
  4 14446           integer array ww, xx(1:2);
  4 14447     
  4 14447           integer procedure sml(a,b);
  4 14448             integer array       a,b;
  4 14449           begin
  5 14450             integer res;
  5 14451     
  5 14451             res:= sign((a(1) shift (-8) extract 4) - (b(1) shift (-8) extract 4));
  5 14452             if res = 0 then
  5 14453               res:= sign((b(1) shift (-18)) - (a(1) shift (-18)));
  5 14454             if res = 0 then
  5 14455               res:=
  5 14456                  sign((a(1) shift (-12) extract 6) - (b(1) shift (-12) extract 6));
  5 14457             if res = 0 then
  5 14458               res:= sign((a(2) extract 14) - (b(2) extract 14));
  5 14459             sml:= res;
  5 14460           end;
  4 14461     
  4 14461           ii:= ((l+u)//2 - 1)*4;
  4 14462           tofrom(xx,tab.ii,4);
  4 14463           ii:= (l-1)*4; jj:= (u-1)*4;
  4 14464           repeat
  4 14465             while sml(tab.ii,xx) < 0 do ii:= ii+4;
  4 14466             while sml(xx,tab.jj) < 0 do jj:= jj-4;
  4 14467             if ii <= jj then
  4 14468             begin
  5 14469               tofrom(ww,tab.ii,4);
  5 14470               tofrom(tab.ii,tab.jj,4);
  5 14471               tofrom(tab.jj,ww,4);
  5 14472               ii:= ii+4;
  5 14473               jj:= jj-4;
  5 14474             end;
  4 14475           until ii>jj;
  4 14476           if l < jj//4+1 then sorter_gruppe(tab,l,jj//4+1);
  4 14477           if ii//4+1 < u then sorter_gruppe(tab,ii//4+1,u);
  4 14478         end;
  3 14479     \f

  3 14479     message procedure vt_tilstand side 2 - 820301/cl;
  3 14480     
  3 14480       filop:= filopref;
  3 14481       stackclaim(if cm_test then 550 else 500);
  3 14482       trap(vt_tilst_trap);
  3 14483     
  3 14483     <*+2*>
  3 14484     <**> disable if testbit47 and overvåget or testbit28 then
  3 14485     <**>   skriv_vt_tilst(out,0);
  3 14486     <*-2*>
  3 14487     
  3 14487     vent_op:
  3 14488       waitch(cs_vt_tilst,op,vt_optype or gen_optype,-1);
  3 14489     <*+2*>disable
  3 14490     <**>  if (testbit41 and overvåget) or
  3 14491              (testbit46 and overvåget and
  3 14492               (d.op.opkode extract 12 = 16 or d.op.opkode extract 12 = 18))
  3 14493           then
  3 14494     <**>  begin
  4 14495     <**>    skriv_vt_tilst(out,0);
  4 14496     <**>    write(out,<:   modtaget operation:>);
  4 14497     <**>    skriv_op(out,op);
  4 14498     <**>  end;
  3 14499     <*-2*>
  3 14500     
  3 14500     <*+4*>
  3 14501     <**>  if op <> vt_op then
  3 14502     <**>  begin
  4 14503     <**>    disable begin
  5 14504     <**>      d.op.resultat:= 31;
  5 14505     <**>      fejlreaktion(11,op,<:vt-tilstand:>,1);
  5 14506     <**>  end;
  4 14507     <**>  goto returner;
  4 14508     <**>  end;
  3 14509     <*-4*>
  3 14510     
  3 14510         opk:= d.op.opkode extract 12;
  3 14511         funk:= if opk = 14 <*bus i kø*> then 1 else
  3 14512                if opk = 15 <*bus res *> then 2 else
  3 14513                if opk = 16 <*grp res *> then 4 else
  3 14514                if opk = 17 <*bus fri *> then 3 else
  3 14515                if opk = 18 <*grp fri *> then 5 else
  3 14516                0;
  3 14517         if funk = 0 then fejlreaktion(2,opk,<:vt_tilstand:>,0);
  3 14518         res:= 0;
  3 14519         format:= d.op.data(1) shift (-22);
  3 14520     
  3 14520       goto case funk of(enkelt_bus,enkelt_bus,enkelt_bus,grp_res,grp_fri);
  3 14521     \f

  3 14521     message procedure vt_tilstand side 3 - 820301/cl;
  3 14522     
  3 14522     enkelt_bus:
  3 14523       <* sæt enkelt bus i kø, reserver eller frigiv enkelt bus *>
  3 14524       disable
  3 14525       begin integer busnr,i,s,tilst,ll,gar,omr,sig;
  4 14526     <*+4*>
  4 14527     <**>if format <> 0 and format <> 1 then
  4 14528     <**>begin
  5 14529     <**>  res:= 31;
  5 14530     <**>  fejlreaktion(10,d.op.data(1),<:tilstand ident:>,1);
  5 14531     <**>  goto slut_enkelt_bus;
  5 14532     <**>end;
  4 14533     <*-4*>
  4 14534         <* find busnr og tilstand *>
  4 14535         case format+1 of
  4 14536         begin
  5 14537           <* 0: budident *>
  5 14538           begin
  6 14539             busnr:= d.op.data(1) extract 14;
  6 14540             s:= omr:= d.op.data(4) extract 8;
  6 14541             bi:= søg_omr_bus(busnr,ll,gar,omr,sig,tilst);
  6 14542             if bi<0 then
  6 14543             begin
  7 14544               res:= if bi=(-1) then 10 else (if s<>0 then 58 else 57);
  7 14545               goto slut_enkelt_bus;
  7 14546             end
  6 14547             else
  6 14548             begin
  7 14549               tilst:= intg(bustilstand(bi));
  7 14550             end;
  6 14551           end;
  5 14552     
  5 14552           <* 1: linie_løb_ident *>
  5 14553           begin
  6 14554             bi:= findbusnr(d.op.data(1),busnr,i,tilst);
  6 14555             if bi < 0 then <* ukendt linie_løb *>
  6 14556             begin
  7 14557               res:= 9;
  7 14558               goto slut_enkelt_bus;
  7 14559             end;
  6 14560           end;
  5 14561         end case;
  4 14562     \f

  4 14562     message procedure vt_tilstand side 4 - 830310/cl;
  4 14563     
  4 14563         if funk < 3 then
  4 14564         begin
  5 14565           d.op.data(2):= if linie_løb_indeks(bi) extract 12 <> 0 then
  5 14566                            linie_løb_tabel(linie_løb_indeks(bi) extract 12)
  5 14567                          else 0;
  5 14568           d.op.data(3):= bustabel(bi);
  5 14569           d.op.data(4):= bustabel1(bi);
  5 14570         end;
  4 14571     
  4 14571         <* check tilstand *>
  4 14572         if funk = 3 <*frigiv*> and tilst >= 0 <*fri/optaget_i_gruppe*> then
  4 14573           res:= 39 <* bus ikke reserveret *>
  4 14574         else
  4 14575         if tilst <> 0 and tilst <> (-1) and funk < 3 then
  4 14576           res:= 14 <* bus optaget *>
  4 14577         else
  4 14578         if funk = 1 <* i kø *>  and tilst = (-1) then
  4 14579           res:= 18 <* i kø *>
  4 14580         else
  4 14581           res:= 3; <*udført*>
  4 14582     
  4 14582         if res = 3 then
  4 14583           bustilstand(bi):= false add (case funk of (-1,-2,0));
  4 14584     
  4 14584     slut_enkelt_bus:
  4 14585         d.op.resultat:= res;
  4 14586       end <*disable*>;
  3 14587       goto returner;
  3 14588     \f

  3 14588     message procedure vt_tilstand side 5 - 810424/cl;
  3 14589     
  3 14589     grp_res:  <* reserver gruppe *>
  3 14590       disable
  3 14591       begin
  4 14592     
  4 14592     <*+4*>
  4 14593     <**>  if format <> 2 then
  4 14594     <**>  begin
  5 14595     <**>    res:= 31;
  5 14596     <**>    fejlreaktion(10,d.op.data(1),<:tilstand ident:>,1);
  5 14597     <**>    goto slut_grp_res_1;
  5 14598     <**>  end;
  4 14599     <*-4*>
  4 14600     
  4 14600         <* find frit indeks i opkaldstabel *>
  4 14601         opk_indeks:= 0;
  4 14602         for i:= max_antal_gruppeopkald step -1 until 1 do
  4 14603         begin
  5 14604           if gruppeopkald(i,1)=0 then opk_indeks:= i <*fri plads*> else
  5 14605           if gruppeopkald(i,1)=d.op.data(1) then res:= 15 <*optaget*>;
  5 14606         end;
  4 14607         if opk_indeks = 0 then res:= 32; <* ingen plads *>
  4 14608         if res <> 0 then goto slut_grp_res_1;
  4 14609         g_type:= d.op.data(1) shift (-21) extract 1;
  4 14610         if g_type = 1 <*special gruppe*> then
  4 14611         begin <*check eksistens*>
  5 14612           gr:= 0;
  5 14613           for i:= 1 step 1 until max_antal_grupper do
  5 14614             if gruppetabel(i) = d.op.data(1) then gr:= i;
  5 14615           if gr = 0 then <*gruppe ukendt*>
  5 14616           begin
  6 14617             res:= 8;
  6 14618             goto slut_grp_res_1;
  6 14619           end;
  5 14620         end;
  4 14621     
  4 14621         <* reserver i opkaldstabel *>
  4 14622         gruppeopkald(opk_indeks,1):= d.op.data(1);
  4 14623     \f

  4 14623     message procedure vt_tilstand side 6 - 810428/cl;
  4 14624     
  4 14624         <* tilknyt fil *>
  4 14625         start_operation(filop,curr_coruid,cs_fil,101);
  4 14626         d.filop.data(1):= 0;  <*postantal*>
  4 14627         d.filop.data(2):= 256;  <*postlængde*>
  4 14628         d.filop.data(3):= 1;  <*segmentantal*>
  4 14629         d.filop.data(4):= 2 shift 10;  <*spool fil*>
  4 14630         signalch(cs_opret_fil,filop,vt_optype);
  4 14631     
  4 14631     slut_grp_res_1:
  4 14632         if res <> 0 then d.op.resultat:= res;
  4 14633       end;
  3 14634       if res <> 0 then goto returner;
  3 14635     
  3 14635       waitch(cs_fil,filop,vt_optype,-1);
  3 14636     
  3 14636       <* check filsys-resultat *>
  3 14637       if d.filop.data(9) <> 0 then
  3 14638         fejlreaktion(13,d.filop.data(9),<:gruppe,res:>,0);
  3 14639       filref:= d.filop.data(4);
  3 14640     \f

  3 14640     message procedure vt_tilstand side 7 - 820301/cl;
  3 14641       disable if g_type = 0 <*linie-gruppe*> then
  3 14642       begin
  4 14643         integer s,i,ll_id;
  4 14644         integer array field iaf1;
  4 14645     
  4 14645         ll_id:= 1 shift 22 + d.op.data(1) shift 7;
  4 14646         iaf1:= 2;
  4 14647         s:= binærsøg(sidste_linie_løb,
  4 14648               linie_løb_tabel(i) - ll_id, i);
  4 14649         if s < 0 then i:= i +1;
  4 14650         antal:= ej_res:= 0;
  4 14651         skrivfil(filref,1,zi);
  4 14652         if i <= sidste_linie_løb then
  4 14653         begin
  5 14654           while linie_løb_tabel(i) shift (-7) shift 7 = ll_id do
  5 14655           begin
  6 14656             if (intg(bustilstand(intg(busindeks(i))))<>0) or
  6 14657                (bustabel1(intg(busindeks(i))) extract 8 <> 3) then
  6 14658               ej_res:= ej_res+1
  6 14659             else
  6 14660             begin
  7 14661               antal:= antal+1;
  7 14662               bi:= busindeks(i) extract 12;
  7 14663               fil(zi).iaf1(1):=
  7 14664                 område_id( bustabel1(bi) extract 8, 2) extract 12 shift 12 +
  7 14665                 (bustabel1(bi) shift (-23) + 1) shift 8 + 1;
  7 14666               fil(zi).iaf1(2):= bustabel(bi);
  7 14667               iaf1:= iaf1+4;
  7 14668               bustilstand(bi):= false add opk_indeks;
  7 14669             end;
  6 14670             i:= i +1;
  6 14671             if i > sidste_linie_løb then goto slut_l_grp;
  6 14672           end;
  5 14673         end;
  4 14674     \f

  4 14674     message procedure vt_tilstand side 8 - 820301/cl;
  4 14675     
  4 14675     slut_l_grp:
  4 14676       end
  3 14677       else
  3 14678       begin <*special gruppe*>
  4 14679         integer i,s,li,omr,gar,tilst;
  4 14680         integer array field iaf1;
  4 14681     
  4 14681         iaf1:= 2;
  4 14682         antal:= ej_res:= 0;
  4 14683         s:= læsfil(tf_gruppedef,gr,zi);
  4 14684         if s <> 0 then fejlreaktion(5,s,<:gruppe,res:>,0);
  4 14685         tofrom(identer,fil(zi),max_antal_i_gruppe*2);
  4 14686         s:= skrivfil(filref,1,zi);
  4 14687         if s<>0 then fejlreaktion(6,s,<:gruppe,res:>,0);
  4 14688         i:= 1;
  4 14689         while identer(i) <> 0 do
  4 14690         begin
  5 14691           if identer(i) shift (-22) = 0 then
  5 14692           begin <*busident*>
  6 14693             omr:= 0;
  6 14694             bi:= søg_omr_bus(identer(i),li,gar,omr,s,tilst);
  6 14695             if bi<0 then goto næste_ident;
  6 14696             li:= linie_løb_indeks(bi) extract 12;
  6 14697           end
  5 14698           else
  5 14699           begin <*linie/løb ident*>
  6 14700             s:= binærsøg(sidste_linie_løb,
  6 14701                   linie_løb_tabel(li) - identer(i), li);
  6 14702             if s <> 0 then goto næste_ident;
  6 14703             bi:= busindeks(li) extract 12;
  6 14704           end;
  5 14705           if (intg(bustilstand(bi))<>0) or
  5 14706              (bustabel1(bi) extract 8 <> 3) then
  5 14707             ej_res:= ej_res+1
  5 14708           else
  5 14709           begin
  6 14710             antal:= antal +1;
  6 14711             fil(zi).iaf1(1):=
  6 14712               område_id( bustabel1(bi) extract 8, 2) extract 12 shift 12 +
  6 14713               (bustabel1(bi) shift (-23) + 1) shift 8 + 1;
  6 14714             fil(zi).iaf1(2):= bustabel(bi);
  6 14715             iaf1:= iaf1+4;
  6 14716             bustilstand(bi):= false add opk_indeks;
  6 14717           end;
  5 14718     næste_ident:
  5 14719           i:= i +1;
  5 14720           if i > max_antal_i_gruppe then goto slut_s_grp;
  5 14721         end;
  4 14722     slut_s_grp:
  4 14723       end;
  3 14724     \f

  3 14724     message procedure vt_tilstand side 9 - 820301/cl;
  3 14725     
  3 14725       if antal > 0 then <*ok*>
  3 14726       disable begin
  4 14727         integer array field spec,akt;
  4 14728         integer a;
  4 14729         integer field antal_spec;
  4 14730     
  4 14730         antal_spec:= 2; a:= 0;
  4 14731         spec:= 2; akt:= 2;
  4 14732         sorter_gruppe(fil(zi).spec,1,antal);
  4 14733         fil(zi).antal_spec:= 0;
  4 14734         while akt//4 < antal do
  4 14735         begin
  5 14736           fil(zi).spec(1):= fil(zi).akt(1) shift (-8) shift 8;
  5 14737           a:= 0;
  5 14738           while fil(zi).akt(1) shift (-8) = fil(zi).spec(1) shift (-8)
  5 14739             and a<15 do
  5 14740           begin
  6 14741             a:= a+1;
  6 14742             fil(zi).spec(1+a):= fil(zi).akt(2) extract 14;
  6 14743             akt:= akt+4;
  6 14744           end;
  5 14745           fil(zi).spec(1):= fil(zi).spec(1) + a;
  5 14746           fil(zi).antal_spec:= fil(zi).antal_spec+1;
  5 14747           spec:= spec + 2*a + 2;
  5 14748         end;
  4 14749         antal:= fil(zi).antal_spec;
  4 14750         gruppeopkald(opk_indeks,2):= filref;
  4 14751         d.op.resultat:= 3;
  4 14752         d.op.data(2):= antal;
  4 14753         d.op.data(3):= filref;
  4 14754         d.op.data(4):= ej_res;
  4 14755       end
  3 14756       else
  3 14757       begin
  4 14758         disable begin
  5 14759           d.filop.opkode:= 104; <*slet fil*>
  5 14760           signalch(cs_slet_fil,filop,vt_optype);
  5 14761           gruppeopkald(opk_indeks,1):= 0; <*fri*>
  5 14762           d.op.resultat:= 54;
  5 14763           d.op.data(2):= antal;
  5 14764           d.op.data(3):= 0;
  5 14765           d.op.data(4):= ej_res;
  5 14766         end;
  4 14767         waitch(cs_fil,filop,vt_optype,-1);
  4 14768         if d.filop.data(9) <> 0 then
  4 14769           fejlreaktion(16,d.filop.data(9),<:gruppe,res:>,0);
  4 14770       end;
  3 14771       goto returner;
  3 14772     \f

  3 14772     message procedure vt_tilstand side 10 - 820301/cl;
  3 14773     
  3 14773     grp_fri:  <* frigiv gruppe *>
  3 14774       disable
  3 14775       begin integer i,j,s,ll,gar,omr,tilst;
  4 14776         integer array field spec;
  4 14777     
  4 14777     <*+4*>
  4 14778     <**>  if format <> 2 then
  4 14779     <**>  begin
  5 14780     <**>    res:= 31;
  5 14781     <**>    fejlreaktion(10,d.op.data(1),<:tilstand ident:>,1);
  5 14782     <**>    goto slut_grp_fri;
  5 14783     <**>  end;
  4 14784     <*-4*>
  4 14785     
  4 14785         <* find indeks i opkaldstabel *>
  4 14786         opk_indeks:= 0;
  4 14787         for i:= 1 step 1 until max_antal_gruppeopkald do
  4 14788           if gruppeopkald(i,1) = d.op.data(1) then opk_indeks:= i;
  4 14789         if opk_indeks = 0 <*ikke fundet*> then
  4 14790         begin
  5 14791           res:= 40; <*gruppe ej reserveret*>
  5 14792           goto slut_grp_fri;
  5 14793         end;
  4 14794         filref:= gruppeopkald(opk_indeks,2);
  4 14795         start_operation(filop,curr_coruid,cs_fil,104);
  4 14796         d.filop.data(4):= filref;
  4 14797         hentfildim(d.filop.data);
  4 14798         læsfil(filref,1,zi);
  4 14799         spec:= 0;
  4 14800         antal:= fil(zi).spec(1);
  4 14801         spec:= spec+2;
  4 14802         for i:= 1 step 1 until antal do
  4 14803         begin
  5 14804           for j:= 1 step 1 until fil(zi).spec(1) extract 8 do
  5 14805           begin
  6 14806             busid:= fil(zi).spec(1+j) extract 14;
  6 14807             omr:= 0;
  6 14808             bi:= søg_omr_bus(busid,ll,gar,omr,s,tilst);
  6 14809             if bi>=0 then bustilstand(bi):= false;
  6 14810           end;
  5 14811           spec:= spec + 2*(fil(zi).spec(1) extract 8) + 2;
  5 14812         end;
  4 14813     
  4 14813     slut_grp_fri:
  4 14814         d.op.resultat:= res;
  4 14815       end;
  3 14816       if res <> 0 then goto returner;
  3 14817       gruppeopkald(opk_indeks,1):= gruppeopkald(opk_indeks,2):= 0;
  3 14818       signalch(cs_slet_fil,filop,vt_optype);
  3 14819     \f

  3 14819     message procedure vt_tilstand side 11 - 810424/cl;
  3 14820     
  3 14820       waitch(cs_fil,filop,vt_optype,-1);
  3 14821     
  3 14821       if d.filop.data(9) <> 0 then
  3 14822         fejlreaktion(16,d.filop.data(9),<:gruppe,fri:>,0);
  3 14823       d.op.resultat:= 3;
  3 14824     
  3 14824     returner:
  3 14825       disable
  3 14826       begin
  4 14827     <*+2*>
  4 14828     <**>  if testbit40 and overvåget then
  4 14829     <**>  begin
  5 14830     <**>    skriv_vt_tilst(out,0);
  5 14831     <**>    write(out,<:   vogntabel efter ændring:>);
  5 14832     <**>    p_vogntabel(out);
  5 14833     <**>  end;
  4 14834     <**>  if testbit43 and overvåget and (funk=4 or funk=5) then
  4 14835     <**>  begin
  5 14836     <**>    skriv_vt_tilst(out,0); write(out,<:   gruppetabel efter ændring:>);
  5 14837     <**>    p_gruppetabel(out);
  5 14838     <**>  end;
  4 14839     <**>  if (testbit41 and overvåget) or
  4 14840     <**>     (testbit46 and overvåget and (funk=4 or funk=5)) then
  4 14841     <**>  begin
  5 14842     <**>    skriv_vt_tilst(out,0);
  5 14843     <**>    write(out,<:   returner operation:>);
  5 14844     <**>    skriv_op(out,op);
  5 14845     <**>  end;
  4 14846     <*-2*>
  4 14847         signalch(d.op.retur,op,d.op.optype);
  4 14848       end;
  3 14849       goto vent_op;
  3 14850     
  3 14850     vt_tilst_trap:
  3 14851       disable skriv_vt_tilst(zbillede,1);
  3 14852     
  3 14852     end vt_tilstand;
  2 14853     \f

  2 14853     message procedure vt_rapport side 1 - 810428/cl;
  2 14854     
  2 14854     procedure vt_rapport(cs_fil,fil_opref);
  2 14855       value              cs_fil,fil_opref;
  2 14856       integer            cs_fil,fil_opref;
  2 14857     begin
  3 14858       integer array field op,filop;
  3 14859       integer funk,filref,antal,id_ant,res;
  3 14860       integer field i1,i2;
  3 14861     
  3 14861       procedure skriv_vt_rap(z,omfang);
  3 14862         value                  omfang;
  3 14863         zone                 z;
  3 14864         integer                omfang;
  3 14865       begin
  4 14866         write(z,"nl",1,<:+++ vt_rapport           :>);
  4 14867         if omfang <> 0 then
  4 14868         begin
  5 14869           skriv_coru(z,abs curr_coruno);
  5 14870           write(z,"nl",1,<<d>,
  5 14871             <:  cs_fil  :>,cs_fil,"nl",1,
  5 14872             <:  filop   :>,filop,"nl",1,
  5 14873             <:  op      :>,op,"nl",1,
  5 14874             <:  funk    :>,funk,"nl",1,
  5 14875             <:  filref  :>,filref,"nl",1,
  5 14876             <:  antal   :>,antal,"nl",1,
  5 14877             <:  id-ant  :>,id_ant,"nl",1,
  5 14878             <:  res     :>,res,"nl",1,
  5 14879             <::>);
  5 14880     
  5 14880           end;
  4 14881       end skriv_vt_rap;
  3 14882     
  3 14882       stackclaim(if cm_test then 198 else 146);
  3 14883       filop:= fil_opref;
  3 14884       i1:= 2; i2:= 4;
  3 14885       trap(vt_rap_trap);
  3 14886     
  3 14886     <*+2*>
  3 14887     <**> disable if testbit47 and overvåget or testbit28 then
  3 14888     <**>   skriv_vt_rap(out,0);
  3 14889     <*-2*>
  3 14890     \f

  3 14890     message procedure vt_rapport side 2 - 810505/cl;
  3 14891     
  3 14891     vent_op:
  3 14892       waitch(cs_vt_rap,op,gen_optype or vt_optype,-1);
  3 14893     
  3 14893     <*+2*>
  3 14894     <**>  disable begin
  4 14895     <**>  if testbit41 and overvåget then
  4 14896     <**>  begin
  5 14897     <**>    skriv_vt_rap(out,0);
  5 14898     <**>    write(out,<:   modtaget operation:>);
  5 14899     <**>    skriv_op(out,op);
  5 14900     <**>    ud;
  5 14901     <**>  end;
  4 14902     <**>  end;<*disable*>
  3 14903     <*-2*>
  3 14904     
  3 14904       disable
  3 14905       begin
  4 14906         integer opk;
  4 14907     
  4 14907         opk:= d.op.opkode extract 12;
  4 14908         funk:= if opk = 9 then 1 else
  4 14909                if opk =10 then 2 else
  4 14910                0;
  4 14911         if funk = 0 then fejlreaktion(2,opk,<:vt_gruppe:>,0);
  4 14912     
  4 14912         <* opret og tilknyt fil *>
  4 14913         start_operation(filop,curr_coruid,cs_fil,101);
  4 14914         d.filop.data(1):= 0; <*postantal(midlertidigt)*>
  4 14915         d.filop.data(2):= 2; <*postlængde*>
  4 14916         d.filop.data(3):=10; <*segmenter*>
  4 14917         d.filop.data(4):= 2 shift 10; <*spool fil*>
  4 14918         signalch(cs_opretfil,filop,vt_optype);
  4 14919       end;
  3 14920     
  3 14920       waitch(cs_fil,filop,vt_optype,-1);
  3 14921     
  3 14921       <* check resultat *>
  3 14922       if d.filop.data(9) <> 0 then
  3 14923        fejlreaktion(13,d.filop.data(9),<:vt-rapport:>,0);
  3 14924       filref:= d.filop.data(4);
  3 14925       antal:= 0;
  3 14926       goto case funk of (l_rapport,b_rapport);
  3 14927     \f

  3 14927     message procedure vt_rapport side 3 - 850820/cl;
  3 14928     
  3 14928     l_rapport:
  3 14929       disable
  3 14930       begin
  4 14931         integer i,j,s,ll,zi;
  4 14932         idant:= 0;
  4 14933         for id_ant:= id_ant+1 while d.op.data(id_ant)<>0 and id_ant<5 do 
  4 14934     <*+4*>
  4 14935     <**> if d.op.data(id_ant) shift (-22) <> 2 then
  4 14936     <**> begin
  5 14937     <**>   res:= 31;
  5 14938     <**>   fejlreaktion(10,d.op.data(id_ant),<:l-rapport ident:>,1);
  5 14939     <**>   goto l_rap_slut;
  5 14940     <**> end;
  4 14941     <*-4*>
  4 14942         ;
  4 14943     
  4 14943         for i:= 1 step 1 until id_ant do
  4 14944         begin
  5 14945           ll:= (1 shift 22) + d.op.data(i) extract 15 shift 7;
  5 14946           s:= binærsøg(sidste_linie_løb,
  5 14947                      linie_løb_tabel(j) - ll, j);
  5 14948           if s < 0 then j:= j +1;
  5 14949     
  5 14949           if j<= sidste_linie_løb then
  5 14950           begin <* skriv identer *>
  6 14951             while linie_løb_tabel(j) shift (-7) shift 7 = ll do
  6 14952             begin
  7 14953               antal:= antal +1;
  7 14954               s:= skrivfil(filref,antal,zi);
  7 14955               if s <> 0 then fejlreaktion(6,s,<:vt_rapport:>,0);
  7 14956               fil(zi).i1:= linie_løb_tabel(j);
  7 14957               fil(zi).i2:= bustabel(busindeks(j) extract 12);
  7 14958               j:= j +1;
  7 14959               if j > sidste_bus then goto linie_slut;
  7 14960             end;
  6 14961           end;
  5 14962     linie_slut:
  5 14963         end;
  4 14964         res:= 3;
  4 14965     l_rap_slut:
  4 14966       end <*disable*>;
  3 14967       goto returner;
  3 14968     \f

  3 14968     message procedure vt_rapport side 4 - 820301/cl;
  3 14969     
  3 14969     b_rapport:
  3 14970       disable
  3 14971       begin
  4 14972         integer i,j,s,zi,busnr1,busnr2;
  4 14973     <*+4*>
  4 14974     <**> for i:= 1,2 do
  4 14975     <**>   if d.op.data(i) shift (-14) <> 0 then
  4 14976     <**>   begin
  5 14977     <**>     res:= 31;
  5 14978     <**>     fejlreaktion(10,d.op.data(i),<:b-rapport ident:>,1);
  5 14979     <**>     goto bus_slut;
  5 14980     <**>   end;
  4 14981     <*-4*>
  4 14982     
  4 14982         busnr1:= d.op.data(1) extract 14;
  4 14983         busnr2:= if d.op.data(2) = 0 then busnr1 else d.op.data(2) extract 14;
  4 14984         if busnr1 = 0 or busnr2 < busnr1 then
  4 14985         begin
  5 14986           res:= 7; <* fejl i busnr *>
  5 14987           goto bus_slut;
  5 14988         end;
  4 14989     
  4 14989         s:= binærsøg(sidste_bus,bustabel(j) extract 14
  4 14990                        - busnr1,j);
  4 14991         if s < 0 then j:= j +1;
  4 14992         while j>1 and bustabel(j-1) extract 14 >= busnr1 do j:= j-1;
  4 14993         if j <= sidste_bus then
  4 14994         begin <* skriv identer *>
  5 14995           while bustabel(j) extract 14 <= busnr2 do
  5 14996           begin
  6 14997             i:= linie_løb_indeks(j) extract 12;
  6 14998             if i<>0 then
  6 14999             begin
  7 15000               antal:= antal +1;
  7 15001               s:= skriv_fil(filref,antal,zi);
  7 15002               if s <> 0 then fejlreaktion(6,s,<:vt-rapport:>,0);
  7 15003               fil(zi).i1:= bustabel(j);
  7 15004               fil(zi).i2:= linie_løb_tabel(i);
  7 15005             end;
  6 15006             j:= j +1;
  6 15007             if j > sidste_bus then goto bus_slut;
  6 15008           end;
  5 15009         end;
  4 15010     bus_slut:
  4 15011       end <*disable*>;
  3 15012       res:= 3; <*ok*>
  3 15013     \f

  3 15013     message procedure vt_rapport side 5 - 810409/cl;
  3 15014     
  3 15014     returner:
  3 15015       disable
  3 15016       begin
  4 15017         d.op.resultat:= res;
  4 15018         d.op.data(6):= antal;
  4 15019         d.op.data(7):= filref;
  4 15020         d.filop.data(1):= antal;
  4 15021         d.filop.data(3):= (antal*d.filop.data(2) -1)//256 +1;
  4 15022         i:= sæt_fil_dim(d.filop.data);
  4 15023         if i <> 0 then fejlreaktion(9,i,<:vt-rapport:>,0);
  4 15024     <*+2*>
  4 15025     <**>  if testbit41 and overvåget then
  4 15026     <**>  begin
  5 15027     <**>    skriv_vt_rap(out,0);
  5 15028     <**>    write(out,<:   returner operation:>);
  5 15029     <**>    skriv_op(out,op);
  5 15030     <**>  end;
  4 15031     <*-2*>
  4 15032         signalch(d.op.retur,op,d.op.optype);
  4 15033       end;
  3 15034       goto vent_op;
  3 15035     
  3 15035     vt_rap_trap:
  3 15036       disable skriv_vt_rap(zbillede,1);
  3 15037     
  3 15037     end vt_rapport;
  2 15038     \f

  2 15038     message procedure vt_gruppe side 1 - 810428/cl;
  2 15039     
  2 15039     procedure vt_gruppe(cs_fil,fil_opref);
  2 15040     
  2 15040       value             cs_fil,fil_opref;
  2 15041       integer           cs_fil,fil_opref;
  2 15042     begin
  3 15043       integer array field op, fil_op, iaf;
  3 15044       integer funk, res, filref, gr, i, antal, zi, s;
  3 15045       integer array identer(1:(if max_antal_grupper>max_antal_i_gruppe then
  3 15046                               max_antal_grupper else max_antal_i_gruppe));
  3 15047     
  3 15047       procedure skriv_vt_gruppe(zud,omfang);
  3 15048         value                       omfang;
  3 15049         integer                     omfang;
  3 15050         zone                    zud;
  3 15051       begin
  4 15052         integer øg;
  4 15053     
  4 15053         write(zud,"nl",1,<:+++ vt_gruppe            :>);
  4 15054         if omfang <> 0 then
  4 15055         disable
  4 15056         begin
  5 15057           skriv_coru(zud,abs curr_coruno);
  5 15058           write(zud,"nl",1,<<d>,
  5 15059             <:  cs_fil :>,cs_fil,"nl",1,
  5 15060             <:  op     :>,op,"nl",1,
  5 15061             <:  filop  :>,filop,"nl",1,
  5 15062             <:  funk   :>,funk,"nl",1,
  5 15063             <:  res    :>,res,"nl",1,
  5 15064             <:  filref :>,filref,"nl",1,
  5 15065             <:  gr     :>,gr,"nl",1,
  5 15066             <:  i      :>,i,"nl",1,
  5 15067             <:  antal  :>,antal,"nl",1,
  5 15068             <:  zi     :>,zi,"nl",1,
  5 15069             <:  s      :>,s,"nl",1,
  5 15070             <::>);
  5 15071           raf:= 0;
  5 15072           system(3,øg,identer);
  5 15073           write(zud,"nl",1,<:identer::>);
  5 15074           skriv_hele(zud,identer.raf,øg*2,2);
  5 15075         end;
  4 15076       end;
  3 15077     
  3 15077       stackclaim(if cm_test then 198 else 146);
  3 15078       filop:= fil_opref;
  3 15079       trap(vt_grp_trap);
  3 15080       iaf:= 0;
  3 15081     \f

  3 15081     message procedure vt_gruppe side 2 - 810409/cl;
  3 15082     
  3 15082     <*+2*>
  3 15083     <**> disable if testbit47 and overvåget or testbit28 then
  3 15084     <**>   skriv_vt_gruppe(out,0);
  3 15085     <*-2*>
  3 15086     
  3 15086     vent_op:
  3 15087       waitch(cs_vt_grp,op,gen_optype or vt_optype,-1);
  3 15088     <*+2*>
  3 15089     <**>disable
  3 15090     <**>begin
  4 15091     <**>  if testbit41 and overvåget then
  4 15092     <**>  begin
  5 15093     <**>    skriv_vt_gruppe(out,0);
  5 15094     <**>    write(out,<:   modtaget operation:>);
  5 15095     <**>    skriv_op(out,op);
  5 15096     <**>    ud;
  5 15097     <**>  end;
  4 15098     <**>end;
  3 15099     <*-2*>
  3 15100     
  3 15100       disable
  3 15101       begin
  4 15102         integer opk;
  4 15103     
  4 15103         opk:= d.op.opkode extract 12;
  4 15104         funk:= if opk=25 then 1 else
  4 15105                if opk=26 then 2 else
  4 15106                if opk=27 then 3 else
  4 15107                if opk=28 then 4 else
  4 15108                0;
  4 15109         if funk=0 then fejlreaktion(2,opk,<:vt_gruppe:>,0);
  4 15110       end;
  3 15111     <*+4*>
  3 15112     <**> if funk<4 and d.op.data(1) shift (-21) <> 5 then
  3 15113     <**> begin
  4 15114     <**>   disable begin
  5 15115     <**>     d.op.resultat:= 31;
  5 15116     <**>     fejlreaktion(10,d.op.data(1),<:gruppe ident:>,1);
  5 15117     <**>   end;
  4 15118     <**>   goto returner;
  4 15119     <**> end;
  3 15120     <*-4*>
  3 15121     
  3 15121       goto case funk of(definer,slet,vis,oversigt);
  3 15122     \f

  3 15122     message procedure vt_gruppe side 3 - 810505/cl;
  3 15123     
  3 15123     definer:
  3 15124       disable
  3 15125       begin
  4 15126         gr:= 0; res:= 0;
  4 15127         for i:= max_antal_grupper step -1 until 1 do
  4 15128         begin
  5 15129           if gruppetabel(i)=0 then gr:= i <*fri plads*> else
  5 15130           if gruppetabel(i)=d.op.data(1) then res:= 34; <*allerede defineret*>
  5 15131         end;
  4 15132         if gr=0 then res:= 32; <*ingen plads*>
  4 15133       end;
  3 15134       if res<>0 then goto slut_definer;
  3 15135       disable
  3 15136       begin <*fri plads fundet*>
  4 15137         antal:= d.op.data(2);
  4 15138         if antal <=0 or max_antal_i_gruppe<antal then
  4 15139           res:= 33 <*fejl i gruppestørrelse*>
  4 15140         else
  4 15141         begin
  5 15142           for i:= 1 step 1 until antal do
  5 15143           begin
  6 15144             s:= læsfil(d.op.data(3),i,zi);
  6 15145             if s<>0 then fejlreaktion(5,s,<:gruppe,def:>,0);
  6 15146             identer(i):= fil(zi).iaf(1);
  6 15147           end;
  5 15148           s:= modif_fil(tf_gruppedef,gr,zi);
  5 15149           if s<>0 then fejlreaktion(7,s,<:gruppe,def:>,0);
  5 15150           tofrom(fil(zi).iaf,identer,antal*2);
  5 15151           for i:= antal+1 step 1 until max_antal_i_gruppe do
  5 15152             fil(zi).iaf(i):= 0;
  5 15153           gruppetabel(gr):= d.op.data(1);
  5 15154           s:= modiffil(tf_gruppeidenter,gr,zi);
  5 15155           if s<>0 then fejlreaktion(7,s,<:gruppe,def:>,0);
  5 15156           fil(zi).iaf(1):= gruppetabel(gr);
  5 15157           res:= 3;
  5 15158         end;
  4 15159       end;
  3 15160     slut_definer:
  3 15161       <*slet fil*>
  3 15162       start_operation(fil_op,curr_coruid,cs_fil,104);
  3 15163       d.filop.data(4):= d.op.data(3);
  3 15164       signalch(cs_slet_fil,filop,vt_optype);
  3 15165       waitch(cs_fil,filop,vt_optype,-1);
  3 15166       if d.filop.data(9)<>0 then fejlreaktion(16,d.filop.data(9),<:gruppe,def:>,0);
  3 15167       d.op.resultat:= res;
  3 15168       goto returner;
  3 15169     \f

  3 15169     message procedure vt_gruppe side 4 - 810409/cl;
  3 15170     
  3 15170     slet:
  3 15171       disable
  3 15172       begin
  4 15173         gr:= 0; res:= 0;
  4 15174         for i:= 1 step 1 until max_antal_grupper do
  4 15175         begin
  5 15176           if gruppetabel(i)=d.op.data(1) then gr:= i;
  5 15177         end;
  4 15178         if gr = 0 then res:= 8 <*gruppe ej defineret*>
  4 15179         else
  4 15180         begin
  5 15181           for i:= 1 step 1 until max_antal_gruppeopkald do
  5 15182             if gruppeopkald(i,1)=d.op.data(1) then res:=15; <*gruppe optaget*>
  5 15183           if res = 0 then
  5 15184           begin
  6 15185             gruppetabel(gr):= 0;
  6 15186             s:= modif_fil(tf_gruppeidenter,gr,zi);
  6 15187             if s<>0 then fejlreaktion(7,s,<:gruppe,slet:>,0);
  6 15188             fil(zi).iaf(1):= gruppetabel(gr);
  6 15189             res:= 3;
  6 15190           end;
  5 15191         end;
  4 15192         d.op.resultat:= res;
  4 15193       end;
  3 15194       goto returner;
  3 15195     \f

  3 15195     message procedure vt_gruppe side 5 - 810505/cl;
  3 15196     
  3 15196     vis:
  3 15197       disable
  3 15198       begin
  4 15199         res:= 0; gr:= 0; antal:= 0; filref:= 0;
  4 15200         for i:= 1 step 1 until max_antal_grupper do
  4 15201           if gruppetabel(i) = d.op.data(1) then gr:= i;
  4 15202         if gr = 0 then res:= 8
  4 15203         else
  4 15204         begin
  5 15205           s:= læsfil(tf_gruppedef,gr,zi);
  5 15206           if s<>0 then fejlreaktion(5,s,<:gruppe,vis:>,0);
  5 15207           for i:= 1 step 1 until max_antal_i_gruppe do
  5 15208           begin
  6 15209             identer(i):= fil(zi).iaf(i);
  6 15210             if identer(i) <> 0 then antal:= antal +1;
  6 15211           end;
  5 15212           start_operation(filop,curr_coruid,cs_fil,101);
  5 15213           d.filop.data(1):= antal;  <*postantal*>
  5 15214           d.filop.data(2):= 1;      <*postlængde*>
  5 15215           d.filop.data(3):= (antal-1)//256 + 1; <*segmenter*>
  5 15216           d.filop.data(4):= 2 shift 10; <*spool fil*>
  5 15217           d.filop.data(5):= d.filop.data(6):=
  5 15218           d.filop.data(7):= d.filop.data(8):= 0;   <*navn*>
  5 15219           signalch(cs_opret_fil,filop,vt_optype);
  5 15220         end;
  4 15221       end;
  3 15222       if res <> 0 then goto slut_vis;
  3 15223       waitch(cs_fil,filop,vt_optype,-1);
  3 15224       disable
  3 15225       begin
  4 15226         if d.filop.data(9) <> 0 then
  4 15227           fejlreaktion(13,d.filop.data(9),<:gruppe,vis:>,0);
  4 15228         filref:= d.filop.data(4);
  4 15229         for i:= 1 step 1 until antal do
  4 15230         begin
  5 15231           s:= skrivfil(filref,i,zi);
  5 15232           if s <> 0 then fejlreaktion(6,s,<:gruppe,vis:>,0);
  5 15233           fil(zi).iaf(1):= identer(i);
  5 15234         end;
  4 15235         res:= 3;
  4 15236       end;
  3 15237     slut_vis:
  3 15238       d.op.resultat:= res; d.op.data(2):= antal; d.op.data(3):= filref;
  3 15239       goto returner;
  3 15240     \f

  3 15240     message procedure vt_gruppe side 6 - 810508/cl;
  3 15241     
  3 15241     oversigt:
  3 15242       disable
  3 15243       begin
  4 15244         res:= 0; antal:= 0; filref:= 0; iaf:= 0;
  4 15245         for i:= 1 step 1 until max_antal_grupper do
  4 15246         begin
  5 15247           if gruppetabel(i) <> 0 then
  5 15248           begin
  6 15249             antal:= antal +1;
  6 15250             identer(antal):= gruppetabel(i);
  6 15251           end;
  5 15252         end;
  4 15253         start_operation(filop,curr_coruid,cs_fil,101);
  4 15254         d.filop.data(1):= antal;  <*postantal*>
  4 15255         d.filop.data(2):= 1;      <*postlængde*>
  4 15256         d.filop.data(3):= if antal = 0 then 1 else
  4 15257                           (antal-1)//256 +1; <*segm.antal*>
  4 15258         d.filop.data(4):= 2 shift 10; <*spool fil*>
  4 15259         d.filop.data(5):= d.filop.data(6):=
  4 15260         d.filop.data(7):= d.filop.data(8):= 0; <*navn*>
  4 15261         signalch(cs_opretfil,filop,vt_optype);
  4 15262       end;
  3 15263       waitch(cs_fil,filop,vt_optype,-1);
  3 15264       disable
  3 15265       begin
  4 15266         if d.filop.data(9) <> 0 then
  4 15267           fejlreaktion(13,d.filop.data(9),<:grupper,over:>,0);
  4 15268         filref:= d.filop.data(4);
  4 15269         for i:= 1 step 1 until antal do
  4 15270         begin
  5 15271           s:= skriv_fil(filref,i,zi);
  5 15272           if s <> 0 then fejlreaktion(6,s,<:gruppe,over:>,0);
  5 15273           fil(zi).iaf(1):= identer(i);
  5 15274         end;
  4 15275         d.op.resultat:= 3; <*ok*>
  4 15276         d.op.data(1):= antal;
  4 15277         d.op.data(2):= filref;
  4 15278       end;
  3 15279     \f

  3 15279     message procedure vt_gruppe side 7 - 810505/cl;
  3 15280     
  3 15280     returner:
  3 15281       disable
  3 15282       begin
  4 15283     <*+2*>
  4 15284     <**>  if testbit43 and overvåget and (funk=1 or funk=2) then
  4 15285     <**>  begin
  5 15286     <**>    skriv_vt_gruppe(out,0);
  5 15287     <**>    write(out,<:   gruppetabel efter ændring:>);
  5 15288     <**>    p_gruppetabel(out);
  5 15289     <**>  end;
  4 15290     <**>  if testbit41 and overvåget then
  4 15291     <**>  begin
  5 15292     <**>    skriv_vt_gruppe(out,0);
  5 15293     <**>    write(out,<:  returner operation:>);
  5 15294     <**>    skriv_op(out,op);
  5 15295     <**>  end;
  4 15296     <*-2*>
  4 15297       signalch(d.op.retur,op,d.op.optype);
  4 15298       end;
  3 15299       goto vent_op;
  3 15300     
  3 15300     vt_grp_trap:
  3 15301       disable skriv_vt_gruppe(zbillede,1);
  3 15302     
  3 15302     end vt_gruppe;
  2 15303     \f

  2 15303     message procedure vt_spring side 1 - 810506/cl;
  2 15304     
  2 15304     procedure vt_spring(cs_spring_retur,spr_opref);
  2 15305       value             cs_spring_retur,spr_opref;
  2 15306       integer           cs_spring_retur,spr_opref;
  2 15307     begin
  3 15308       integer array field komm_op,spr_op,iaf;
  3 15309       real nu;
  3 15310       integer funk,interval,nr,i,s,id1,id2,res,res_inf,medd_kode,zi;
  3 15311     
  3 15311       procedure skriv_vt_spring(zud,omfang);
  3 15312         value                       omfang;
  3 15313         zone                    zud;
  3 15314         integer                     omfang;
  3 15315       begin
  4 15316         write(zud,"nl",1,<:+++ vt_spring            :>);
  4 15317         if omfang <> 0 then
  4 15318         begin
  5 15319           skriv_coru(zud,abs curr_coruno);
  5 15320           write(zud,"nl",1,<<d>,
  5 15321             <:cs-spring-retur:>,cs_spring_retur,"nl",1,
  5 15322             <:spr-op         :>,spr_op,"nl",1,
  5 15323             <:komm-op        :>,komm_op,"nl",1,
  5 15324             <:funk           :>,funk,"nl",1,
  5 15325             <:interval       :>,interval,"nl",1,
  5 15326             <:nr             :>,nr,"nl",1,
  5 15327             <:i              :>,i,"nl",1,
  5 15328             <:s              :>,s,"nl",1,
  5 15329             <:id1            :>,id1,"nl",1,
  5 15330             <:id2            :>,id2,"nl",1,
  5 15331             <:res            :>,res,"nl",1,
  5 15332             <:res-inf        :>,res_inf,"nl",1,
  5 15333             <:medd-kode      :>,medd_kode,"nl",1,
  5 15334             <:zi             :>,zi,"nl",1,
  5 15335             <:nu             :>,<<zddddd.dddd>,nu,"nl",1,
  5 15336             <::>);
  5 15337         end;
  4 15338       end;
  3 15339     \f

  3 15339     message procedure vt_spring side 2 - 810506/cl;
  3 15340     
  3 15340       procedure vt_operation(aktion,id1,id2,res,res_inf);
  3 15341         value             aktion,id1,id2;
  3 15342         integer           aktion,id1,id2,res,res_inf;
  3 15343       begin  <* aktion: 11=indsæt, 12=udtag, 13=omkod *>
  4 15344         integer array field akt_op;
  4 15345     
  4 15345         <* vent på adgang til vogntabel *>
  4 15346         waitch(cs_vt_adgang,akt_op,true,-1);
  4 15347     
  4 15347         <* start operation *>
  4 15348         disable
  4 15349         begin
  5 15350           start_operation(akt_op,curr_coruid,cs_spring_retur,aktion);
  5 15351           d.akt_op.data(1):= id1;
  5 15352           d.akt_op.data(2):= id2;
  5 15353           signalch(cs_vt_opd,akt_op,vt_optype);
  5 15354         end;
  4 15355     
  4 15355         <* afvent svar *>
  4 15356         waitch(cs_spring_retur,akt_op,vt_optype,-1);
  4 15357         res:= d.akt_op.resultat;
  4 15358         res_inf:= d.akt_op.data(3);
  4 15359     <*+2*>
  4 15360     <**> disable
  4 15361     <**>  if testbit45 and overvåget then
  4 15362     <**>  begin
  5 15363     <**>    real t;
  5 15364     <**>    skriv_vt_spring(out,0);
  5 15365     <**>    write(out,"nl",1,<<zddddd>,systime(4,d.akt_op.tid,t),<:.:>,t);
  5 15366     <**>    skriv_id(out,springtabel(nr,1),0);
  5 15367     <**>    write(out,<:.:>,string(extend springtabel(nr,2) shift 24),<:(:>,
  5 15368     <**>      <<d>,extend springtabel(nr,3) shift (-12) extract 24,<:)::>,
  5 15369     <**>      if aktion=11 then <:indsæt:> else if aktion=12 then <:udtag:> else
  5 15370     <**>      if aktion=13 then <:omkod:> else <:***:>,<: - res=:>,
  5 15371     <**>      d.akt_op.resultat,"sp",2);
  5 15372     <**>    skriv_id(out,d.akt_op.data(1),8);
  5 15373     <**>    skriv_id(out,d.akt_op.data(2),8);
  5 15374     <**>    skriv_id(out,d.akt_op.data(3),8);
  5 15375     <**>    systime(4,springtid(nr),t);
  5 15376     <**>    write(out,<:  springtid: :>,<<zd.dd>,entier(t/100),"nl",1);
  5 15377     <**>  end;
  4 15378     <*-2*>
  4 15379     
  4 15379         <* åbn adgang til vogntabel *>
  4 15380         disable signalch(cs_vt_adgang,akt_op,gen_optype or vt_optype);
  4 15381       end vt_operation;
  3 15382     \f

  3 15382     message procedure vt_spring side 2a - 810506/cl;
  3 15383     
  3 15383       procedure io_meddelelse(medd_no,bus,linie,springno);
  3 15384         value                 medd_no,bus,linie,springno;
  3 15385         integer               medd_no,bus,linie,springno;
  3 15386       begin
  4 15387         disable start_operation(spr_op,curr_coruid,cs_spring_retur,36);
  4 15388         d.spr_op.data(1):= medd_no;
  4 15389         d.spr_op.data(2):= bus;
  4 15390         d.spr_op.data(3):= linie;
  4 15391         d.spr_op.data(4):= springtabel(springno,1);
  4 15392         d.spr_op.data(5):= springtabel(springno,2);
  4 15393         disable signalch(cs_io,spr_op,io_optype or gen_optype);
  4 15394         waitch(cs_spring_retur,spr_op,io_optype or gen_optype,-1);
  4 15395       end;
  3 15396     
  3 15396       procedure returner_op(op,res);
  3 15397         value                  res;
  3 15398         integer array field op;
  3 15399         integer                res;
  3 15400       begin
  4 15401     <*+2*>
  4 15402     <**>  disable
  4 15403     <**>  if testbit41 and overvåget then
  4 15404     <**>  begin
  5 15405     <**>    skriv_vt_spring(out,0); write(out,<:   returner operation::>);
  5 15406     <**>    skriv_op(out,op);
  5 15407     <**>  end;
  4 15408     <*-2*>
  4 15409         d.op.resultat:= res;
  4 15410         signalch(d.op.retur,op,d.op.optype);
  4 15411       end;
  3 15412     \f

  3 15412     message procedure vt_spring side 3 - 810603/cl;
  3 15413     
  3 15413       iaf:= 0;
  3 15414       spr_op:= spr_opref;
  3 15415       stack_claim((if cm_test then 198 else 146) + 24);
  3 15416     
  3 15416       trap(vt_spring_trap);
  3 15417     
  3 15417       for i:= 1 step 1 until max_antal_spring do
  3 15418       begin
  4 15419         springtabel(i,1):= springtabel(i,2):= springtabel(i,3):= 0;
  4 15420         springtid(i):= springstart(i):= 0.0;
  4 15421       end;
  3 15422     
  3 15422     <*+2*>
  3 15423     <**> disable
  3 15424     <**> if testbit44 and overvåget then
  3 15425     <**> begin
  4 15426     <**>    skriv_vt_spring(out,0);
  4 15427     <**>    write(out,<:   springtabel efter initialisering:>);
  4 15428     <**>    p_springtabel(out); ud;
  4 15429     <**> end;
  3 15430     <*-2*>
  3 15431     
  3 15431     <*+2*>
  3 15432     <**> disable if testbit47 and overvåget or testbit28 then
  3 15433     <**>   skriv_vt_spring(out,0);
  3 15434     <*-2*>
  3 15435     \f

  3 15435     message procedure vt_spring side 4 - 810609/cl;
  3 15436     
  3 15436     næste_tid: <* find næste tid *>
  3 15437       disable
  3 15438       begin
  4 15439         interval:= -1; <*vent uendeligt*>
  4 15440         systime(1,0.0,nu);
  4 15441         for i:= 1 step 1 until max_antal_spring do
  4 15442           if springtabel(i,3) < 0 then
  4 15443             interval:= 5
  4 15444           else
  4 15445           if springtid(i) <> 0.0 and
  4 15446           ( (springtid(i)-nu) < interval or interval < 0 ) then
  4 15447             interval:= (if springtid(i) <= nu then 0 else
  4 15448                    round(springtid(i) -nu));
  4 15449         if interval=0 then interval:= 1;
  4 15450       end;
  3 15451     \f

  3 15451     message procedure vt_spring side 4a - 810525/cl;
  3 15452     
  3 15452       <* afvent operation eller timeout *>
  3 15453       waitch(cs_vt_spring,komm_op,vt_optype or gen_optype,interval);
  3 15454       if komm_op <> 0 then goto afkod_operation;
  3 15455     
  3 15455       <* timeout *>
  3 15456       systime(1,0.0,nu);
  3 15457       nr:= 1;
  3 15458     næste_sekv:
  3 15459       if nr > max_antal_spring then goto næste_tid;
  3 15460       if springtid(nr) > nu and springtabel(nr,3) > 0 or springstart(nr)=0.0 then
  3 15461       begin
  4 15462         nr:= nr +1;
  4 15463         goto næste_sekv;
  4 15464       end;
  3 15465       disable s:= modif_fil(tf_springdef,nr,zi);
  3 15466       if s <> 0 then fejlreaktion(7,s,<:spring:>,0);
  3 15467       if springtabel(nr,3) < 0 then
  3 15468       begin <* hængende spring *>
  4 15469         if springtid(nr) <= nu then
  4 15470         begin <* spring ikke udført indenfor angivet interval - annuler *>
  5 15471           <* find frit løb *>
  5 15472            disable
  5 15473            begin
  6 15474              id2:= 0;
  6 15475              for i:= 1 step 1 until springtabel(nr,3) extract 12 do
  6 15476                if fil(zi).iaf(2+i) shift (-22) = 1 then
  6 15477                id2:= fil(zi).iaf(1) extract 15 shift 7
  6 15478                    + fil(zi).iaf(2+i) shift (-12) extract 7 +1 shift 22;
  6 15479           end;
  5 15480           <* send meddelelse til io *>
  5 15481           io_meddelelse(5,0,id2,nr);
  5 15482     
  5 15482           <* annuler spring*>
  5 15483           for i:= 1,2,3 do springtabel(nr,i):= 0;
  5 15484           springtid(nr):= springstart(nr):= 0.0;
  5 15485         end
  4 15486         else
  4 15487         begin <* forsøg igen *>
  5 15488     \f

  5 15488     message procedure vt_spring side 5 - 810525/cl;
  5 15489     
  5 15489           i:= abs(extend springtabel(nr,3) shift (-12) extract 24);
  5 15490           if i = 2 <* første spring ej udført *> then
  5 15491           begin
  6 15492             id1:= fil(zi).iaf(1) extract 15 shift 7
  6 15493                 + fil(zi).iaf(3) shift (-12) extract 7 +1 shift 22;
  6 15494             id2:= id1;
  6 15495             vt_operation(12<*udtag*>,id1,id2,res,res_inf);
  6 15496           end
  5 15497           else
  5 15498           begin
  6 15499             id1:= fil(zi).iaf(1) extract 15 shift 7
  6 15500                 + fil(zi).iaf(2+i-1) shift (-12) extract 7 +1 shift 22;
  6 15501             id2:= id1 shift (-7) shift 7
  6 15502                 + fil(zi).iaf(2+i-2) shift (-12) extract 7;
  6 15503             vt_operation(13<*omkod*>,id1,id2,res,res_inf);
  6 15504           end;
  5 15505     
  5 15505           <* check resultat *>
  5 15506           medd_kode:= if res = 3 and i = 2 then 7 else
  5 15507                       if res = 3 and i > 2 then 8 else
  5 15508                    <* if res = 9 then 1 else
  5 15509                       if res =12 then 2 else
  5 15510                       if res =14 then 4 else
  5 15511                       if res =18 then 3 else *>
  5 15512                       0;
  5 15513           if medd_kode > 0 then
  5 15514             io_meddelelse(medd_kode,res_inf,if res=3 or res=12 then
  5 15515               id2 else id1,nr);
  5 15516           if res = 3 then
  5 15517           begin <* spring udført *>
  6 15518             disable s:= modiffil(tf_springdef,nr,zi); 
  6 15519             if s<>0 then fejlreaktion(7,s,<:spring:>,0);
  6 15520             springtabel(nr,3):= i shift 12 +springtabel(nr,3) extract 12;
  6 15521             fil(zi).iaf(2+i-1):= 1 shift 22 +fil(zi).iaf(2+i-1) extract 22;
  6 15522             if i > 2 then fil(zi).iaf(2+i-2):=
  6 15523               fil(zi).iaf(2+i-2) extract 22 add (1 shift 23);
  6 15524           end;
  5 15525         end;
  4 15526       end <* hængende spring *>
  3 15527       else
  3 15528       begin
  4 15529         i:= spring_tabel(nr,3) shift (-12);
  4 15530         id1:= fil(zi).iaf(1) extract 15 shift 7
  4 15531             + fil(zi).iaf(2+i) shift (-12) extract 7 +1 shift 22;
  4 15532         id2:= fil(zi).iaf(2+i-1) shift (-12) extract 7
  4 15533             + id1 shift (-7) shift 7;
  4 15534         vt_operation(13<*omkod*>,id1,id2,res,res_inf);
  4 15535     \f

  4 15535     message procedure vt_spring side 6 - 820304/cl;
  4 15536     
  4 15536         <* check resultat *>
  4 15537         medd_kode:= if res = 3 then 8 else
  4 15538                     if res = 9 then 1 else
  4 15539                     if res =12 then 2 else
  4 15540                     if res =14 then 4 else
  4 15541                     if res =18 then 3 else 
  4 15542                     if res =60 then 9 else 0;
  4 15543         if medd_kode > 0 then
  4 15544           io_meddelelse(medd_kode,res_inf,if res=3 or res=12 then id2 else id1,nr);
  4 15545     
  4 15545         <* opdater springtabel *>
  4 15546         disable s:= modiffil(tf_springdef,nr,zi);
  4 15547         if s<>0 then fejlreaktion(7,s,<:spring:>,0);
  4 15548         if fil(zi).iaf(2+i) extract 12 = 0 <*sidste løb*> then
  4 15549         begin
  5 15550           io_meddelelse(if res=3 then 6 else 5,0,
  5 15551             if res=3 then id1 else id2,nr);
  5 15552           for i:= 1,2,3 do springtabel(nr,i):= 0; <*annuleret*>
  5 15553           springtid(nr):= springstart(nr):= 0.0;
  5 15554         end
  4 15555         else
  4 15556         begin
  5 15557           springtid(nr):= springtid(nr) +(fil(zi).iaf(2+i) extract 12)*60.0;
  5 15558           if res = 3 then
  5 15559           begin
  6 15560             fil(zi).iaf(2+i-1):= (1 shift 23) add
  6 15561                                  (fil(zi).iaf(2+i-1) extract 22);
  6 15562             fil(zi).iaf(2+i)  := (1 shift 22) add
  6 15563                                  (fil(zi).iaf(2+i)   extract 22);
  6 15564             springtabel(nr,3):=(i+1) shift 12 add (springtabel(nr,3) extract 12);
  6 15565           end
  5 15566           else
  5 15567           springtabel(nr,3):= (-i-1) shift 12 add (springtabel(nr,3) extract 12);
  5 15568         end;
  4 15569       end;
  3 15570     <*+2*>
  3 15571     <**> disable
  3 15572     <**> if testbit44 and overvåget then
  3 15573     <**> begin
  4 15574     <**>   skriv_vt_spring(out,0); write(out,<:   springtabel efter ændring:>);
  4 15575     <**>   p_springtabel(out); ud;
  4 15576     <**> end;
  3 15577     <*-2*>
  3 15578     
  3 15578       nr:= nr +1;
  3 15579       goto næste_sekv;
  3 15580     \f

  3 15580     message procedure vt_spring side 7 - 810506/cl;
  3 15581     
  3 15581     afkod_operation:
  3 15582     <*+2*>
  3 15583     <**>  disable
  3 15584     <**>  if testbit41 and overvåget then
  3 15585     <**>  begin
  4 15586     <**>    skriv_vt_spring(out,0); write(out,<:   modtaget operation:>);
  4 15587     <**>    skriv_op(out,komm_op);
  4 15588     <**>  end;
  3 15589     <*-2*>
  3 15590     
  3 15590       disable
  3 15591       begin integer opk;
  4 15592     
  4 15592         opk:= d.komm_op.opkode extract 12;
  4 15593         funk:= if opk = 30 <*sp,d*> then 5 else
  4 15594                if opk = 31 <*sp. *> then 1 else
  4 15595                if opk = 32 <*sp,v*> then 4 else
  4 15596                if opk = 33 <*sp,o*> then 6 else
  4 15597                if opk = 34 <*sp,r*> then 2 else
  4 15598                if opk = 35 <*sp,a*> then 3 else
  4 15599                   0;
  4 15600         if funk = 0 then fejlreaktion(2,opk,<:vt_spring:>,0);
  4 15601     
  4 15601         if funk <> 6 <*sp,o*> then
  4 15602         begin <* find nr i springtabel *>
  5 15603           nr:= 0;
  5 15604           for i:= 1 step 1 until max_antal_spring do
  5 15605             if springtabel(i,1) = d.komm_op.data(1) and
  5 15606                springtabel(i,2) = d.komm_op.data(2) then nr:= i;
  5 15607         end;
  4 15608       end;
  3 15609       if funk = 6 then goto oversigt;
  3 15610       if funk = 5 then goto definer;
  3 15611     
  3 15611       if nr = 0 then
  3 15612       begin
  4 15613         returner_op(komm_op,37<*spring ukendt*>);
  4 15614         goto næste_tid;
  4 15615     end;
  3 15616     
  3 15616       goto case funk of(start,indsæt,annuler,vis);
  3 15617     \f

  3 15617     message procedure vt_spring side 8 - 810525/cl;
  3 15618     
  3 15618     start:
  3 15619       if springtabel(nr,3) shift (-12) <> 0 then
  3 15620       begin returner_op(komm_op,38); goto næste_tid; end;
  3 15621       disable
  3 15622       begin <* find linie_løb_og_udtag *>
  4 15623         s:= modif_fil(tf_springdef,nr,zi);
  4 15624         if s <> 0 then fejlreaktion(7,s,<:spring,start:>,0);
  4 15625         id1:= fil(zi).iaf(1) extract 15 shift 7
  4 15626             + fil(zi).iaf(3) shift (-12) extract 7 +1 shift 22;
  4 15627         id2:= 0;
  4 15628       end;
  3 15629       vt_operation(12,id1,id2,res,res_inf);
  3 15630     
  3 15630       disable <* check resultat *>
  3 15631         medd_kode:= if res = 3 <*ok*> then 7 else
  3 15632                     if res = 9 <*linie/løb ukendt*> then 1 else
  3 15633                     if res =14 <*optaget*> then 4 else
  3 15634                     if res =18 <*i kø*> then 3 else 0;
  3 15635       returner_op(komm_op,3);
  3 15636       if medd_kode = 0 then goto næste_tid;
  3 15637     
  3 15637       <* send spring-meddelelse til io *>
  3 15638       io_meddelelse(medd_kode,res_inf,id1,nr);
  3 15639     
  3 15639       <* opdater springtabel *>
  3 15640       disable
  3 15641       begin
  4 15642         s:= modif_fil(tf_springdef,nr,zi);
  4 15643         if s <> 0 then fejlreaktion(7,s,<:spring,start:>,0);
  4 15644         springtabel(nr,3):= (if res = 3 then 2 else (-2)) shift 12
  4 15645                             add (springtabel(nr,3) extract 12);
  4 15646         systime(1,0.0,nu);
  4 15647         springstart(nr):= nu;
  4 15648         springtid(nr):= nu +fil(zi).iaf(3) extract 12 *60.0;
  4 15649         if res = 3 then fil(zi).iaf(3):= fil(zi).iaf(3) add (1 shift 22);
  4 15650       end;
  3 15651     <*+2*>
  3 15652     <**> disable
  3 15653     <**> if testbit44 and overvåget then
  3 15654     <**> begin
  4 15655     <**>   skriv_vt_spring(out,0); write(out,<:   springtabel efter ændring:>);
  4 15656     <**>   p_springtabel(out); ud;
  4 15657     <**> end;
  3 15658     <*-2*>
  3 15659     
  3 15659       goto næste_tid;
  3 15660     \f

  3 15660     message procedure vt_spring side 9 - 810506/cl;
  3 15661     
  3 15661     indsæt:
  3 15662       if springtabel(nr,3) shift (-12) = 0 then
  3 15663       begin <* ikke igangsat *>
  4 15664         returner_op(komm_op,41);
  4 15665        goto næste_tid;
  4 15666       end;
  3 15667       <* find frie linie/løb *>
  3 15668       disable
  3 15669       begin
  4 15670         s:= læs_fil(tf_springdef,nr,zi);
  4 15671         if s <> 0 then fejlreaktion(5,s,<:spring,reserve:>,0);
  4 15672         id2:= 0;
  4 15673         for i:= 1 step 1 until springtabel(nr,3) extract 12 do
  4 15674           if fil(zi).iaf(2+i) shift (-22) = 1 then
  4 15675           id2:= 1 shift 22 +fil(zi).iaf(1) extract 15 shift 7
  4 15676                            +fil(zi).iaf(2+i) shift (-12) extract 7;
  4 15677           id1:= d.komm_op.data(3);
  4 15678       end;
  3 15679     
  3 15679       if id2<>0 then
  3 15680         vt_operation(11,id1,id2,res,res_inf)
  3 15681       else
  3 15682         res:= 42;
  3 15683     
  3 15683       disable <* check resultat *>
  3 15684       medd_kode:= if res = 3 <*ok*> then 8 else
  3 15685                   if res =10 <*bus ukendt*> then 0 else
  3 15686                   if res =11 <*bus allerede indsat*> then 0 else
  3 15687                   if res =12 <*linie/løb allerede besat*> then 2 else
  3 15688                   if res =42 <*intet frit linie/løb*> then 5 else 0;
  3 15689       if res = 11 or res = 12 then d.komm_op.data(4):= res_inf;
  3 15690       returner_op(komm_op,res);
  3 15691       if medd_kode = 0 then goto næste_tid;
  3 15692       
  3 15692       <* send springmeddelelse til io *>
  3 15693       if res<>42 then io_meddelelse(medd_kode,id1,id2,nr);
  3 15694       io_meddelelse(5,0,0,nr);
  3 15695     \f

  3 15695     message procedure vt_spring side 9a - 810525/cl;
  3 15696     
  3 15696       <* annuler springtabel *>
  3 15697       for i:= 1,2,3 do springtabel(nr,i):= 0;
  3 15698       springtid(nr):=  springstart(nr):= 0.0;
  3 15699     <*+2*>
  3 15700     <**> disable
  3 15701     <**> if testbit44 and overvåget then
  3 15702     <**> begin
  4 15703     <**>   skriv_vt_spring(out,0); write(out,<:   springtabel efter ændring:>);
  4 15704     <**>   p_springtabel(out); ud;
  4 15705     <**> end;
  3 15706     <*-2*>
  3 15707     
  3 15707       goto næste_tid;
  3 15708     \f

  3 15708     message procedure vt_spring side 10 - 810525/cl;
  3 15709     
  3 15709     annuler:
  3 15710       disable
  3 15711       begin <* find evt. frit linie/løb *>
  4 15712         s:= læs_fil(tf_springdef,nr,zi);
  4 15713         if s <> 0 then fejlreaktion(5,s,<:spring,annuler:>,0);
  4 15714         id1:= id2:= 0;
  4 15715         for i:= 1 step 1 until springtabel(nr,3) extract 12 do
  4 15716           if fil(zi).iaf(2+i) shift (-22) = 1 then
  4 15717             id2:= fil(zi).iaf(1) extract 15 shift 7
  4 15718                 + fil(zi).iaf(2+i) shift (-12) extract 7 +1 shift 22;
  4 15719         returner_op(komm_op,3);
  4 15720       end;
  3 15721     
  3 15721       <* send springmeddelelse til io *>
  3 15722       io_meddelelse(5,id1,id2,nr);
  3 15723     
  3 15723       <* annuler springtabel *>
  3 15724       for i:= 1,2,3 do springtabel(nr,i):= 0;
  3 15725       springtid(nr):= springstart(nr):= 0.0;
  3 15726     <*+2*>
  3 15727     <**> disable
  3 15728     <**> if testbit44 and overvåget then
  3 15729     <**> begin
  4 15730     <**>   skriv_vt_spring(out,0); write(out,<:   springtabel efter ændring:>);
  4 15731     <**>   p_springtabel(out); ud;
  4 15732     <**> end;
  3 15733     <*-2*>
  3 15734     
  3 15734       goto næste_tid;
  3 15735     
  3 15735     definer:
  3 15736       if nr <> 0 then <* allerede defineret *>
  3 15737       begin
  4 15738         res:= 36;
  4 15739         goto slut_definer;
  4 15740       end;
  3 15741     
  3 15741       <* find frit nr *>
  3 15742       i:= 0;
  3 15743       for i:= i+1 while i<= max_antal_spring and nr = 0 do
  3 15744         if springtabel(i,1) = 0 then nr:= i;
  3 15745       if nr = 0 then
  3 15746       begin
  4 15747         res:= 32; <* ingen fri plads *>
  4 15748         goto slut_definer;
  4 15749       end;
  3 15750     \f

  3 15750     message procedure vt_spring side 11 - 810525/cl;
  3 15751     
  3 15751       disable
  3 15752       begin integer array fdim(1:8),ia(1:32);
  4 15753         <* læs sekvens *>
  4 15754         fdim(4):= d.komm_op.data(3);
  4 15755         s:= hent_fil_dim(fdim);
  4 15756         if s <> 0 then fejlreaktion(8,s,<:spring,def:>,0);
  4 15757         if fdim(1) > 30 then
  4 15758           res:= 35 <* springsekvens for stor *>
  4 15759         else
  4 15760         begin
  5 15761           for i:= 1 step 1 until fdim(1) do
  5 15762           begin
  6 15763             s:= læs_fil(fdim(4),i,zi);
  6 15764             if s <> 0 then fejlreaktion(5,s,<:spring,def:>,0);
  6 15765             ia(i):= fil(zi).iaf(1) shift 12;
  6 15766             if i>1 then ia(i-1):= ia(i-1) + fil(zi).iaf(1) shift (-12);
  6 15767           end;
  5 15768           s:= modif_fil(tf_springdef,nr,zi);
  5 15769           if s <> 0 then fejlreaktion(7,s,<:spring,def:>,0);
  5 15770           fil(zi).iaf(1):= springtabel(nr,1):= d.komm_op.data(1);
  5 15771           fil(zi).iaf(2):= springtabel(nr,2):= d.komm_op.data(2);
  5 15772           iaf:= 4;
  5 15773           tofrom(fil(zi).iaf,ia,60);
  5 15774           iaf:= 0;
  5 15775           springtabel(nr,3):= fdim(1);
  5 15776           springtid(nr):= springstart(nr):= 0.0;
  5 15777           res:= 3;
  5 15778         end;
  4 15779       end;
  3 15780     \f

  3 15780     message procedure vt_spring side 11a - 81-525/cl;
  3 15781     
  3 15781     slut_definer:
  3 15782     
  3 15782       <* slet fil *>
  3 15783       start_operation(spr_op,curr_coruid,cs_spring_retur,104);
  3 15784       d.spr_op.data(4):= d.komm_op.data(3); <* filref *>
  3 15785       signalch(cs_slet_fil,spr_op,vt_optype);
  3 15786       waitch(cs_spring_retur,spr_op,vt_optype,-1);
  3 15787       if d.spr_op.data(9) <> 0 then
  3 15788         fejlreaktion(16,d.spr_op.data(9),<:spring,def:>,0);
  3 15789       returner_op(komm_op,res);
  3 15790     <*+2*>
  3 15791     <**> disable
  3 15792     <**> if testbit44 and overvåget then
  3 15793     <**> begin
  4 15794     <**>   skriv_vt_spring(out,0); write(out,<:    springtabel efter ændring:>);
  4 15795     <**>   p_springtabel(out); ud;
  4 15796     <**> end;
  3 15797     <*-2*>
  3 15798       goto næste_tid;
  3 15799     \f

  3 15799     message procedure vt_spring side 12 - 810525/cl;
  3 15800     
  3 15800     vis:
  3 15801       disable
  3 15802       begin
  4 15803         <* tilknyt fil *>
  4 15804         start_operation(spr_op,curr_coruid,cs_spring_retur,101);
  4 15805         d.spr_op.data(1):= (springtabel(nr,3) extract 12)*2;
  4 15806         d.spr_op.data(2):= 1;
  4 15807         d.spr_op.data(3):= (d.spr_op.data(1) -1)//256 +1;
  4 15808         d.spr_op.data(4):= 2 shift 10; <* spoolfil *>
  4 15809         signalch(cs_opret_fil,spr_op,vt_optype);
  4 15810       end;
  3 15811     
  3 15811       <* afvent svar *>
  3 15812       waitch(cs_spring_retur,spr_op,vt_optype,-1);
  3 15813       if d.spr_op.data(9) <> 0 then
  3 15814        fejlreaktion(13,d.spr_op.data(9),<:spring,vis:>,0);
  3 15815       disable
  3 15816       begin integer array ia(1:30);
  4 15817         s:= læs_fil(tf_springdef,nr,zi);
  4 15818         if s <> 0 then fejlreaktion(5,s,<:spring,vis:>,0);
  4 15819         iaf:= 4;
  4 15820         tofrom(ia,fil(zi).iaf,60);
  4 15821         iaf:= 0;
  4 15822         for i:= 1 step 1 until d.spr_op.data(1) do
  4 15823         begin
  5 15824           s:= skriv_fil(d.spr_op.data(4),(i-1)*2+1,zi);
  5 15825           if s <> 0 then fejlreaktion(6,s,<:spring,vis:>,0);
  5 15826           fil(zi).iaf(1):= if ia(i) shift (-22) = 0 then
  5 15827                            ia(i) shift (-12) extract 7
  5 15828                          else -(ia(i) shift (-12) extract 7);
  5 15829           s:= skriv_fil(d.spr_op.data(4),2*i,zi);
  5 15830           if s <> 0 then fejlreaktion(6,s,<:spring,vis:>,0);
  5 15831           fil(zi).iaf(1):= if i < d.spr_op.data(1) then
  5 15832                              (if ia(i+1) shift (-22) <> 0 then -(ia(i) extract 12)
  5 15833                               else ia(i) extract 12)
  5 15834                            else 0;
  5 15835         end;
  4 15836         d.spr_op.data(1):= d.spr_op.data(1) - 1;
  4 15837         sæt_fil_dim(d.spr_op.data);
  4 15838         d.komm_op.data(3):= d.spr_op.data(1);
  4 15839         d.komm_op.data(4):= d.spr_op.data(4);
  4 15840         raf:= data+8;
  4 15841         d.komm_op.raf(1):= springstart(nr);
  4 15842         returner_op(komm_op,3);
  4 15843       end;
  3 15844       goto næste_tid;
  3 15845     \f

  3 15845     message procedure vt_spring side 13 - 810525/cl;
  3 15846     
  3 15846     oversigt:
  3 15847       disable
  3 15848       begin
  4 15849         <* opret fil *>
  4 15850         start_operation(spr_op,curr_coruid,cs_spring_retur,101);
  4 15851         d.spr_op.data(1):= max_antal_spring;
  4 15852         d.spr_op.data(2):= 4;
  4 15853         d.spr_op.data(3):= (max_antal_spring -1)//64 +1;
  4 15854         d.spr_op.data(4):= 2 shift 10; <* spoolfil *>
  4 15855         signalch(cs_opret_fil,spr_op,vt_optype);
  4 15856       end;
  3 15857     
  3 15857       <* afvent svar *>
  3 15858       waitch(cs_spring_retur,spr_op,vt_optype,-1);
  3 15859       if d.spr_op.data(9) <> 0 then
  3 15860         fejlreaktion(13,d.spr_op.data(9),<:spring,over:>,0);
  3 15861       disable
  3 15862       begin
  4 15863         nr:= 0;
  4 15864         for i:= 1 step 1 until max_antal_spring do
  4 15865         begin
  5 15866           if springtabel(i,1) <> 0 then
  5 15867           begin
  6 15868             nr:= nr +1;
  6 15869             s:= skriv_fil(d.spr_op.data(4),nr,zi);
  6 15870             if s <> 0 then fejlreaktion(6,s,<:spring,over:>,0);
  6 15871             fil(zi).iaf(1):= springtabel(i,1);
  6 15872             fil(zi).iaf(2):= springtabel(i,2);
  6 15873             fil(zi,2):= springstart(i);
  6 15874           end;
  5 15875         end;
  4 15876         d.spr_op.data(1):= nr;
  4 15877         s:= sæt_fil_dim(d.spr_op.data);
  4 15878         if s <> 0 then fejlreaktion(9,s,<:spring,over:>,0);
  4 15879         d.komm_op.data(1):= nr;
  4 15880         d.komm_op.data(2):= d.spr_op.data(4);
  4 15881         returner_op(komm_op,3);
  4 15882       end;
  3 15883       goto næste_tid;
  3 15884     
  3 15884     vt_spring_trap:
  3 15885       disable skriv_vt_spring(zbillede,1);
  3 15886     
  3 15886     end vt_spring;
  2 15887     \f

  2 15887     message procedure vt_auto side 1 - 810505/cl;
  2 15888     
  2 15888     procedure vt_auto(cs_auto_retur,auto_opref);
  2 15889       value           cs_auto_retur,auto_opref;
  2 15890       integer         cs_auto_retur,auto_opref;
  2 15891     begin
  3 15892       integer array field op,auto_op,iaf;
  3 15893       integer filref,id1,id2,aktion,postnr,sidste_post,interval,res,
  3 15894               res_inf,i,s,zi,kl,døgnstart;
  3 15895       real t,nu,næste_tid;
  3 15896       boolean optaget;
  3 15897       integer array filnavn,nytnavn(1:4);
  3 15898     
  3 15898       procedure skriv_vt_auto(zud,omfang);
  3 15899         value                     omfang;
  3 15900         zone                  zud;
  3 15901         integer                   omfang;
  3 15902       begin
  4 15903         long array field laf;
  4 15904     
  4 15904         laf:= 0;
  4 15905         write(zud,"nl",1,<:+++ vt_auto              :>);
  4 15906         if omfang<>0 then
  4 15907         begin
  5 15908           skriv_coru(zud,abs curr_coruno);
  5 15909           write(zud,"nl",1,<<d>,
  5 15910             <:cs-auto-retur  :>,cs_auto_retur,"nl",1,
  5 15911             <:op             :>,op,"nl",1,
  5 15912             <:auto-op        :>,auto_op,"nl",1,
  5 15913             <:filref         :>,filref,"nl",1,
  5 15914             <:id1            :>,id1,"nl",1,
  5 15915             <:id2            :>,id2,"nl",1,
  5 15916             <:aktion         :>,aktion,"nl",1,
  5 15917             <:postnr         :>,postnr,"nl",1,
  5 15918             <:sidste-post    :>,sidste_post,"nl",1,
  5 15919             <:interval       :>,interval,"nl",1,
  5 15920             <:res            :>,res,"nl",1,
  5 15921             <:res-inf        :>,res_inf,"nl",1,
  5 15922             <:i              :>,i,"nl",1,
  5 15923             <:s              :>,s,"nl",1,
  5 15924             <:zi             :>,zi,"nl",1,
  5 15925             <:kl             :>,kl,"nl",1,
  5 15926             <:døgnstart      :>,døgnstart,"nl",1,
  5 15927             <:optaget        :>,if optaget then <:true:> else <:false:>,"nl",1,
  5 15928             <:t              :>,<<zddddd.dddd>,t,"nl",1,
  5 15929             <:nu             :>,nu,"nl",1,
  5 15930             <:næste-tid      :>,næste_tid,"nl",1,
  5 15931             <:filnavn        :>,filnavn.laf,"nl",1,
  5 15932             <:nytnavn        :>,nytnavn.laf,"nl",1,
  5 15933             <::>);
  5 15934         end;
  4 15935       end skriv_vt_auto;
  3 15936     \f

  3 15936     message procedure vt_auto side 2 - 810507/cl;
  3 15937     
  3 15937       iaf:= 0;
  3 15938       auto_op:= auto_opref;
  3 15939       filref:= id1:= id2:= aktion:= postnr:= sidste_post:= 0;
  3 15940       optaget:= false;
  3 15941       næste_tid:= 0.0;
  3 15942       for i:= 1,2,3,4 do filnavn(i):=nytnavn(i):=0;
  3 15943       stack_claim(if cm_test then 298 else 246);
  3 15944       trap(vt_auto_trap);
  3 15945     
  3 15945     <*+2*>
  3 15946     <**> disable if testbit47 and overvåget or testbit28 then
  3 15947     <**>   skriv_vt_auto(out,0);
  3 15948     <*-2*>
  3 15949     
  3 15949     vent:
  3 15950     
  3 15950       systime(1,0.0,nu);
  3 15951       interval:= if filref=0 then (-1) <*uendeligt*> else
  3 15952                  if næste_tid > nu then round(næste_tid-nu) else
  3 15953                  if optaget then 5 else 0;
  3 15954       if interval=0 then interval:= 1;
  3 15955     
  3 15955     <*v*> waitch(cs_vt_auto,op,vt_optype or gen_optype,interval);
  3 15956     
  3 15956       if op<>0 then goto filskift;
  3 15957     
  3 15957       <* vent på adgang til vogntabel *>
  3 15958     <*v*> waitch(cs_vt_adgang,op,vt_optype,-1);
  3 15959     
  3 15959       <* afsend relevant operation til opdatering af vogntabel *>
  3 15960       start_operation(op,curr_coruid,cs_auto_retur,aktion);
  3 15961       d.op.data(1):= id1;
  3 15962       d.op.data(2):= id2;
  3 15963       signalch(cs_vt_opd,op,vt_optype);
  3 15964     <*v*> waitch(cs_auto_retur,op,vt_optype,-1);
  3 15965       res:= d.op.resultat;
  3 15966       id2:= d.op.data(2);
  3 15967       res_inf:= d.op.data(3);
  3 15968     
  3 15968       <* åbn for vogntabel *>
  3 15969       signalch(cs_vt_adgang,op,vt_optype or gen_optype);
  3 15970     \f

  3 15970     message procedure vt_auto side 3 - 810507/cl;
  3 15971     
  3 15971       <* behandl svar fra opdatering *>
  3 15972     <*+2*>
  3 15973     <**> disable
  3 15974     <**> if testbit45 and overvåget then
  3 15975     <**> begin
  4 15976     <**>   integer li,lø,bo;
  4 15977     <**>   skriv_vt_auto(out,0);
  4 15978     <**>   write(out,"nl",1,<<zddddd>,systime(4,d.op.tid,t),<:.:>,entier t,
  4 15979     <**>     <:  POSTNR. :>,<<d>,postnr,if aktion=12 then <:: SLET:> else
  4 15980     <**>     <:: OMKOD:>,<: - RES=:>,res);
  4 15981     <**>   for i:= 1,2 do
  4 15982     <**>   begin
  5 15983     <**>     li:= d.op.data(i);
  5 15984     <**>     lø:= li extract 7; bo:= li shift (-7) extract 5;
  5 15985     <**>     if bo<>0 then bo:= bo + 'A' - 1;
  5 15986     <**>     li:= li shift (-12) extract 10;
  5 15987     <**>     write(out,<< ddd>,li,false add bo,1,"/",1,<<d>,lø);
  5 15988     <**>   end;
  4 15989     <**>   systime(4,næste_tid,t);
  4 15990     <**>   write(out,<< zddd>,d.op.data(3) extract 14,<:  - AUTOTID::>,
  4 15991     <**>     << zd.dd>,t/10000,"nl",1);
  4 15992     <**> end;
  3 15993     <*-2*>
  3 15994       if res=31 then
  3 15995         fejlreaktion(10,aktion,<:AUTO: SYSTEMFEJL:>,1)
  3 15996       else
  3 15997       if res<>3 then
  3 15998       begin
  4 15999         if -, optaget then
  4 16000         begin
  5 16001           disable start_operation(auto_op,curr_coruid,cs_auto_retur,22);
  5 16002           d.auto_op.data(1):= if res=9 then 1 else if res=12 then 2 else
  5 16003              if res=18 then 3 else if res=60 then 9 else 4;
  5 16004           d.auto_op.data(2):= res_inf;
  5 16005           d.auto_op.data(3):= if res=12 then id2 else id1;
  5 16006           signalch(cs_io,auto_op,io_optype or gen_optype);
  5 16007           waitch(cs_auto_retur,auto_op,io_optype or gen_optype,-1);
  5 16008         end;
  4 16009         if res=14 or res=18 then <* i kø eller optaget *>
  4 16010         begin
  5 16011           optaget:= true;
  5 16012           goto vent;
  5 16013         end;
  4 16014       end;
  3 16015       optaget:= false;
  3 16016     \f

  3 16016     message procedure vt_auto side 4 - 810507/cl;
  3 16017     
  3 16017       <* find næste post *>
  3 16018       disable
  3 16019       begin
  4 16020         if postnr=sidste_post then
  4 16021         begin <* døgnskift *>
  5 16022           postnr:= 1;
  5 16023           døgnstart:= systime(4,systid(døgnstart+1,120000),t);
  5 16024         end
  4 16025         else postnr:= postnr+1;
  4 16026         s:= læsfil(filref,postnr,zi);
  4 16027         if s<>0 then fejlreaktion(5,s,<:auto:>,0);
  4 16028         aktion:= fil(zi).iaf(1);
  4 16029         næste_tid:= systid(døgnstart,fil(zi).iaf(2));
  4 16030         id1:= fil(zi).iaf(3);
  4 16031         id2:= fil(zi).iaf(4);
  4 16032       end;
  3 16033       goto vent;
  3 16034     \f

  3 16034     message procedure vt_auto side 5 - 810507/cl;
  3 16035     
  3 16035     filskift:
  3 16036     
  3 16036     <*+2*>
  3 16037     <**> disable
  3 16038     <**> if testbit41 and overvåget then
  3 16039     <**> begin
  4 16040     <**>   skriv_vt_auto(out,0);
  4 16041     <**>   write(out,<:   modtaget operation::>);
  4 16042     <**>   skriv_op(out,op);
  4 16043     <**> end;
  3 16044     <*-2*>
  3 16045       for i:= 1 step 1 until 4 do filnavn(i):=nytnavn(i):= 0;
  3 16046       res:= 46;
  3 16047       if d.op.opkode extract 12 <> 21 then
  3 16048         fejlreaktion(2,d.op.opkode extract 12,<:auto,filskift:>,0);
  3 16049       if filref = 0 then goto knyt;
  3 16050     
  3 16050       <* gem filnavn til io-meddelelse *>
  3 16051       disable begin
  4 16052         integer array fdim(1:8);
  4 16053         integer array field navn;
  4 16054         fdim(4):= filref;
  4 16055         hentfildim(fdim);
  4 16056         navn:= 8;
  4 16057         tofrom(filnavn,fdim.navn,8);
  4 16058       end;
  3 16059     
  3 16059       <* frivgiv tilknyttet autofil *>
  3 16060       disable start_operation(auto_op,curr_coruid,cs_auto_retur,103);
  3 16061       d.auto_op.data(4):= filref;
  3 16062       signalch(cs_frigiv_fil,auto_op,vt_optype);
  3 16063     <*v*> waitch(cs_auto_retur,auto_op,vt_optype,-1);
  3 16064       if d.auto_op.data(9) <> 0 then
  3 16065         fejlreaktion(15,d.auto_op.data(9),<:auto,filskift:>,0);
  3 16066       filref:= aktion:= id1:= id2:= postnr:= sidste_post:= 0;
  3 16067       optaget:= false;
  3 16068       næste_tid:= 0.0;
  3 16069       res:= 3;
  3 16070     \f

  3 16070     message procedure vt_auto side 6 - 810507/cl;
  3 16071     
  3 16071       <* tilknyt evt. ny autofil *>
  3 16072     knyt:
  3 16073       if d.op.data(1)<>0 then
  3 16074       begin
  4 16075         disable startoperation(auto_op,curr_coruid,cs_auto_retur,102);
  4 16076         d.auto_op.data(4):= 30 shift 12; <* contentskey,subno *> 
  4 16077         for i:= 1,2,3,4 do d.auto_op.data(4+i):= d.op.data(i);
  4 16078         disable
  4 16079         begin integer pos1,pos2;
  5 16080           pos1:= pos2:= 13;
  5 16081           while læstegn(d.auto_op.data,pos1,i)<>0 do
  5 16082           begin
  6 16083             if 'A'<=i and i<='Å' then i:= i - 'A' + 'a';
  6 16084             skrivtegn(d.auto_op.data,pos2,i);
  6 16085           end;
  5 16086         end;
  4 16087         signalch(cs_tilknyt_fil,auto_op,vt_optype);
  4 16088     <*v*> waitch(cs_auto_retur,auto_op,vt_optype,-1);
  4 16089         s:= d.auto_op.data(9);
  4 16090         if s=0        then res:= 3  <* ok           *> else
  4 16091         if s=1 or s=2 then res:= 46 <* ukendt navn  *> else
  4 16092         if s=5 or s=7 then res:= 47 <* galt indhold *> else
  4 16093         if s=6        then res:= 48 <* i brug       *> else
  4 16094           fejlreaktion(14,2,<:auto,filskift:>,0);
  4 16095         if res<>3 then goto returner;
  4 16096     
  4 16096         tofrom(nytnavn,d.op.data,8);
  4 16097     
  4 16097         <* find første post *>
  4 16098         disable
  4 16099         begin
  5 16100           døgnstart:= systime(5,0.0,t);
  5 16101           kl:= round t;
  5 16102           filref:= d.auto_op.data(4);
  5 16103           sidste_post:= d.auto_op.data(1);
  5 16104           postnr:= 0;
  5 16105           for postnr:= postnr+1 while postnr <= sidste_post do
  5 16106           begin
  6 16107               s:= læsfil(filref,postnr,zi);
  6 16108             if s<>0 then fejlreaktion(5,s,<:auto,filskift:>,0);
  6 16109             if fil(zi).iaf(2) > kl then goto post_fundet;
  6 16110           end;
  5 16111           postnr:= 1;
  5 16112           døgnstart:= systime(4,systid(døgnstart+1,120000),t);
  5 16113     \f

  5 16113     message procedure vt_auto side 7 - 810507/cl;
  5 16114     
  5 16114     post_fundet:
  5 16115           s:= læsfil(filref,postnr,zi);
  5 16116           if s<>0 then fejlreaktion(5,s,<:auto,filskift:>,0);
  5 16117           aktion:= fil(zi).iaf(1);
  5 16118           næste_tid:= systid(døgnstart,fil(zi).iaf(2));
  5 16119           id1:= fil(zi).iaf(3);
  5 16120           id2:= fil(zi).iaf(4);
  5 16121           res:= 3;
  5 16122         end;
  4 16123       end ny fil;
  3 16124     
  3 16124     returner:
  3 16125       d.op.resultat:= res;
  3 16126     <*+2*>
  3 16127     <**> disable
  3 16128     <**> if testbit41 and overvåget then
  3 16129     <**> begin
  4 16130     <**>   skriv_vt_auto(out,0);
  4 16131     <**>   write(out,<:   returner operation::>);
  4 16132     <**>   skriv_op(out,op);
  4 16133     <**> end;
  3 16134     <*-2*>
  3 16135       signalch(d.op.retur,op,d.op.optype);
  3 16136     
  3 16136       if vt_log_aktiv then
  3 16137       begin
  4 16138         waitch(cs_vt_logpool,op,vt_optype,-1);
  4 16139         startoperation(op,curr_coruid,cs_vt_logpool,0);
  4 16140         if nytnavn(1)=0 then
  4 16141           hægtstring(d.op.data.v_tekst,1,<:ophør:>)
  4 16142         else
  4 16143           skriv_text(d.op.data.v_tekst,1,nytnavn);
  4 16144         d.op.data.v_kode:= 4; <*PS (PlanSkift)*>
  4 16145         systime(1,0.0,d.op.data.v_tid);
  4 16146         signalch(cs_vt_log,op,vt_optype);
  4 16147       end;
  3 16148     
  3 16148       if filnavn(1)<>0 then
  3 16149       begin <* meddelelse til io om annulering *>
  4 16150         disable begin
  5 16151           start_operation(auto_op,curr_coruid,cs_auto_retur,23<*io_gen_medd*>);
  5 16152           i:= 1;
  5 16153           hægtstring(d.auto_op.data,i,<:auto :>);
  5 16154           skriv_text(d.auto_op.data,i,filnavn);
  5 16155           hægtstring(d.auto_op.data,i,<: annuleret:>);
  5 16156           repeat skrivtegn(d.auto_op.data,i,'nul') until (i-1) mod 6 = 0;
  5 16157           signalch(cs_io,auto_op,io_optype or gen_optype);
  5 16158         end;
  4 16159         waitch(cs_auto_retur,auto_op,io_optype or gen_optype,-1);
  4 16160       end;
  3 16161       goto vent;
  3 16162     
  3 16162     vt_auto_trap:
  3 16163       disable skriv_vt_auto(zbillede,1);
  3 16164     
  3 16164     end vt_auto;
  2 16165     message procedure vt_log side 1 - 920517/cl;
  2 16166     
  2 16166     procedure vt_log;
  2 16167     begin
  3 16168       integer i,j,ventetid;
  3 16169       real dg,t,nu,skiftetid;
  3 16170       boolean fil_åben;
  3 16171       integer array ia(1:10),dp,dp1(1:8);
  3 16172       integer array field op, iaf;
  3 16173     
  3 16173       procedure skriv_vt_log(zud,omfang);
  3 16174         value                    omfang;
  3 16175         zone                 zud;
  3 16176         integer                  omfang;
  3 16177       begin
  4 16178         write(zud,"nl",1,<:+++ vt-log :>);
  4 16179         if omfang<>0 then
  4 16180         begin
  5 16181           skriv_coru(zud, abs curr_coruno);
  5 16182           write(zud,"nl",1,<<d>,
  5 16183             <:i              :>,i,"nl",1,
  5 16184             <:j              :>,j,"nl",1,
  5 16185             <:ventetid       :>,ventetid,"nl",1,
  5 16186             <:dg             :>,<<zddddd.dd>,dg,"nl",1,
  5 16187             <:t              :>,t,"nl",1,
  5 16188             <:nu             :>,nu,"nl",1,
  5 16189             <:skiftetid      :>,skiftetid,"nl",1,
  5 16190             <:filåben        :>,if fil_åben then <:true:> else <:false:>,"nl",1,
  5 16191             <:op             :>,<<d>,op,"nl",1,
  5 16192             <::>);
  5 16193           raf:= 0;
  5 16194           write(zud,"nl",1,<:ia::>);
  5 16195           skrivhele(zud,ia.raf,20,2);
  5 16196           write(zud,"nl",2,<:dp::>);
  5 16197           skrivhele(zud,dp.raf,16,2);
  5 16198           write(zud,"nl",2,<:dp1::>);
  5 16199           skrivhele(zud,dp1.raf,16,2);
  5 16200         end;
  4 16201       end;
  3 16202     
  3 16202     message procedure vt_log side 2 - 920517/cl;
  3 16203     
  3 16203       procedure slet_fil;
  3 16204       begin
  4 16205         integer segm,res;
  4 16206         integer array tail(1:10);
  4 16207     
  4 16207         res:= monitor(42)lookup_entry:(zvtlog,0,tail);
  4 16208         if res=0 then
  4 16209         begin
  5 16210           segm:= tail(10);
  5 16211           res:=monitor(48)remove_entry:(zvtlog,0,tail);
  5 16212           if res=0 then
  5 16213           begin
  6 16214             close(zvtlog,true);
  6 16215             open(zvtlog,4,<:vtlogpool:>,0); close(zvtlog,true);
  6 16216             res:=monitor(42)lookup_entry:(zvtlog,0,tail);
  6 16217             if res=0 then
  6 16218             begin
  7 16219               tail(1):= tail(1)+segm;
  7 16220               monitor(44)change_entry:(zvtlog,0,tail);
  7 16221             end;
  6 16222           end;
  5 16223         end;
  4 16224       end;
  3 16225     
  3 16225       boolean procedure udvid_fil;
  3 16226       begin
  4 16227         integer res,spos;
  4 16228         integer array tail(1:10);
  4 16229         zone z(1,1,stderror);
  4 16230     
  4 16230         udvid_fil:= false;
  4 16231         open(z,0,<:vtlogpool:>,0); close(z,true);
  4 16232         res:= monitor(42)lookup_entry:(z,0,tail);
  4 16233         if (res=0) and (tail(1) >= vt_log_slicelgd) then
  4 16234         begin
  5 16235           tail(1):=tail(1) - vt_log_slicelgd;
  5 16236           res:=monitor(44)change_entry:(z,0,tail);
  5 16237           if res=0 then
  5 16238           begin
  6 16239             spos:= vt_logtail(1);
  6 16240             vt_logtail(1):= vt_logtail(1)+vt_log_slicelgd;
  6 16241             res:=monitor(44)change_entry:(zvtlog,0,vt_logtail);
  6 16242             if res<>0 then
  6 16243             begin
  7 16244               vt_logtail(1):= vt_logtail(1) - vt_log_slicelgd;
  7 16245               tail(1):= tail(1) + vt_log_slicelgd;
  7 16246               monitor(44)change_entry:(z,0,tail);
  7 16247             end
  6 16248             else
  6 16249             begin
  7 16250               setposition(zvtlog,0,spos);
  7 16251               udvid_fil:= true;
  7 16252             end;
  6 16253           end;
  5 16254         end;
  4 16255       end;
  3 16256     
  3 16256     message procedure vt_log side 3 - 920517/cl;
  3 16257     
  3 16257     boolean procedure ny_fil;
  3 16258     begin
  4 16259       integer res,i,j;
  4 16260       integer array nyt(1:4), ia,tail(1:10);
  4 16261       long array field navn;
  4 16262       real t;
  4 16263     
  4 16263       navn:=0;
  4 16264       if fil_åben then
  4 16265       begin
  5 16266         close(zvtlog,true);
  5 16267         fil_åben:= false;
  5 16268         nyt.navn(1):= long<:vtlo:>;
  5 16269         nyt.navn(2):= long<::>;
  5 16270         anbringtal(nyt,5,round systime(4,vt_logstart,t),-6);
  5 16271         j:= 'a' - 1;
  5 16272         repeat
  5 16273           res:=monitor(46)rename_entry:(zvtlog,0,nyt);
  5 16274           if res=3 then
  5 16275           begin
  6 16276             j:= j+1;
  6 16277             if j <= 'å' then skrivtegn(nyt,11,j);
  6 16278           end;
  5 16279         until (res<>3) or (j > 'å');
  5 16280     
  5 16280         if res=0 then
  5 16281         begin
  6 16282           open(zvtlog,4,<:vtlogklar:>,0);
  6 16283           res:=monitor(42)lookup_entry:(zvtlog,0,tail);
  6 16284           if res=0 then
  6 16285             res:=monitor(52)create_areaproc:(zvtlog,0,ia);
  6 16286           if res=0 then
  6 16287           begin
  7 16288             res:=monitor(8)reserve_process:(zvtlog,0,ia);
  7 16289             if res<>0 then monitor(64)remove_areaproc:(zvtlog,0,ia);
  7 16290           end;
  6 16291     
  6 16291           if res=0 then
  6 16292           begin
  7 16293             setposition(zvtlog,0,tail(10)//64);
  7 16294             navn:= (tail(10) mod 64)*8;
  7 16295             if (tail(1) <= tail(10)//64) then
  7 16296               outrec6(zvtlog,512)
  7 16297             else
  7 16298               swoprec6(zvtlog,512);
  7 16299             tofrom(zvtlog.navn,nyt,8);
  7 16300             tail(10):= tail(10)+1;
  7 16301             setposition(zvtlog,0,tail(10)//64);
  7 16302             monitor(44)change_entry:(zvtlog,0,tail);
  7 16303             close(zvtlog,true);
  7 16304           end
  6 16305           else
  6 16306           begin
  7 16307             navn:= 0;
  7 16308             close(zvtlog,true);
  7 16309             open(zvtlog,4,<:vtlog:>,0);
  7 16310             slet_fil;
  7 16311           end;
  6 16312         end
  5 16313         else
  5 16314           slet_fil;
  5 16315       end;
  4 16316     
  4 16316       <* logfilen er nu omdøbt og indskrevet i vtlogklar *>
  4 16317       <* eller den er blevet slettet.                    *>
  4 16318     
  4 16318       open(zvtlog,4,<:vtlog:>,0);
  4 16319       for i:= 1 step 1 until 10 do vt_logtail(i):= 0;
  4 16320       iaf:= 2; tofrom(vt_logtail.iaf,vt_logdisc,8);
  4 16321       vt_logtail(6):= systime(7,0,t);
  4 16322     
  4 16322       res:=monitor(40)create_entry:(z_vtlog,0,vt_logtail);
  4 16323       if res=0 then
  4 16324       begin
  5 16325         monitor(50)permanent_entry:(zvtlog,3,ia);
  5 16326         if res<>0 then
  5 16327           monitor(48)remove_entry:(zvtlog,0,ia);
  5 16328       end;
  4 16329     
  4 16329       if res=0 then fil_åben:= true;
  4 16330     
  4 16330       ny_fil:= fil_åben;
  4 16331     end ny_fil;
  3 16332     
  3 16332     message procedure vt_log side 4 - 920517/cl;
  3 16333     
  3 16333     procedure skriv_post(logpost);
  3 16334       integer array      logpost;
  3 16335     begin
  4 16336       integer array field post;
  4 16337       real t;
  4 16338     
  4 16338       if vt_logtail(10)//32 < vt_logtail(1) then
  4 16339       begin
  5 16340         outrec6(zvtlog,512);
  5 16341         post:= (vt_logtail(10) mod 32)*16;
  5 16342         tofrom(zvtlog.post,logpost,16);
  5 16343         vt_logtail(10):= vt_logtail(10)+1;
  5 16344         setposition(zvtlog,0,vt_logtail(10)//32);
  5 16345         vt_logtail(6):= systime(7,0,t);
  5 16346         monitor(44)change_entry:(zvtlog,0,vt_logtail);
  5 16347       end;
  4 16348     end;
  3 16349     
  3 16349     procedure sletsendte;
  3 16350     begin
  4 16351       zone z(128,1,stderror), zpool,zlog(1,1,stderror);
  4 16352       integer array pooltail,tail,ia(1:10);
  4 16353       integer i,res;
  4 16354     
  4 16354       open(zpool,0,<:vtlogpool:>,0); close(zpool,true);
  4 16355       res:=monitor(42,zpool,0,pooltail);
  4 16356     
  4 16356       open(z,4,<:vtlogslet:>,0);
  4 16357       if monitor(42,z,0,tail)=0 and tail(10)>0 then
  4 16358       begin
  5 16359         if monitor(52,z,0,tail)=0 then
  5 16360         begin
  6 16361           if monitor(8,z,0,tail)=0 then
  6 16362           begin
  7 16363             for i:=1 step 1 until tail(10) do
  7 16364             begin
  8 16365               inrec6(z,8);
  8 16366               open(zlog,0,z,0); close(zlog,true);
  8 16367               if monitor(42,zlog,0,ia)=0 then
  8 16368               begin
  9 16369                 if monitor(48,zlog,0,ia)=0 then
  9 16370                 begin
 10 16371                   pooltail(1):=pooltail(1)+ia(1);
 10 16372                 end;
  9 16373               end;
  8 16374             end;
  7 16375             tail(10):=0;
  7 16376             monitor(44,z,0,tail);
  7 16377           end
  6 16378           else
  6 16379             monitor(64,z,0,tail);
  6 16380         end;
  5 16381         if res=0 then monitor(44,zpool,0,pooltail);
  5 16382       end;
  4 16383       close(z,true);
  4 16384     end;
  3 16385     
  3 16385     message procedure vt_log side 5 - 920517/cl;
  3 16386     
  3 16386       trap(vt_log_trap);
  3 16387       stack_claim(200);
  3 16388     
  3 16388       fil_åben:= false;
  3 16389       if -, vt_log_aktiv then goto init_slut;
  3 16390       open(zvtlog,4,<:vtlog:>,0);
  3 16391       i:=monitor(42)lookup_entry:(zvtlog,0,vt_logtail);
  3 16392       if i=0 then
  3 16393         i:=monitor(52)create_areaproc:(zvtlog,0,ia);
  3 16394       if i=0 then
  3 16395       begin
  4 16396         i:=monitor(8)reserve_process:(zvtlog,0,ia);
  4 16397         if i<>0 then monitor(64)remove_areaproc:(zvtlog,0,ia);
  4 16398       end;
  3 16399     
  3 16399       if (i=0) and (vt_logtail(1)=0) then
  3 16400       begin
  4 16401         close(zvtlog,true);
  4 16402         monitor(48)remove_entry:(zvtlog,0,ia);
  4 16403         i:= 1;
  4 16404       end;
  3 16405     
  3 16405       disable
  3 16406       if i=0 then
  3 16407       begin
  4 16408         fil_åben:= true;
  4 16409         inrec6(zvtlog,512);
  4 16410         vt_logstart:= zvtlog.v_tid;
  4 16411         systime(1,0.0,nu);
  4 16412         if (nu - vt_logstart) < 24*60*60.0 then
  4 16413         begin
  5 16414           setposition(zvtlog,0,vt_logtail(10)//32);
  5 16415           if (vt_logtail(10)//32) < vt_logtail(1) then
  5 16416           begin
  6 16417             inrec6(zvtlog,512);
  6 16418             setposition(zvtlog,0,vt_logtail(10)//32);
  6 16419           end;
  5 16420         end
  4 16421         else
  4 16422         begin
  5 16423           if ny_fil then
  5 16424           begin
  6 16425             if udvid_fil then
  6 16426             begin
  7 16427               systime(1,0.0,dp.v_tid);
  7 16428               vt_logstart:= dp.v_tid;
  7 16429               dp.v_kode:=0;
  7 16430               skriv_post(dp);
  7 16431             end
  6 16432             else
  6 16433             begin
  7 16434               close(zvtlog,true);
  7 16435               monitor(48)remove_entry:(zvtlog,0,ia);
  7 16436               fil_åben:= false;
  7 16437             end;
  6 16438           end;
  5 16439         end;
  4 16440       end
  3 16441       else
  3 16442       begin
  4 16443         close(zvtlog,true);
  4 16444         if ny_fil then
  4 16445         begin
  5 16446           if udvid_fil then
  5 16447           begin
  6 16448             systime(1,0.0,dp.v_tid);
  6 16449             vt_logstart:= dp.v_tid;
  6 16450             dp.v_kode:=0;
  6 16451             skriv_post(dp);
  6 16452           end
  5 16453           else
  5 16454           begin
  6 16455             close(zvtlog,true);
  6 16456             monitor(48)remove_entry:(zvtlog,0,ia);
  6 16457             fil_åben:= false;
  6 16458           end;
  5 16459         end;
  4 16460       end;
  3 16461     
  3 16461     init_slut:
  3 16462     
  3 16462       dg:= systime(5,0,t);
  3 16463       if t < vt_logskift then
  3 16464         skiftetid:= systid(dg,vt_logskift)
  3 16465       else
  3 16466         skiftetid:= systid(dg+1,vt_logskift);
  3 16467     
  3 16467     message procedure vt_log side 6 - 920517/cl;
  3 16468     
  3 16468     vent:
  3 16469     
  3 16469       systime(1,0.0,nu); dg:= systime(5,0.0,t);
  3 16470       ventetid:= round(skiftetid - nu);
  3 16471       if ventetid < 1 then ventetid:= 1;
  3 16472     
  3 16472     <*V*> waitch(cs_vt_log,op,vt_optype,ventetid);
  3 16473     
  3 16473       systime(1,0.0,nu); dg:=systime(4,nu,t);
  3 16474       if op <> 0 then
  3 16475       begin
  4 16476         tofrom(dp,d.op.data,16);
  4 16477         signalch(cs_vt_logpool,op,vt_optype);
  4 16478       end;
  3 16479     
  3 16479       if -, vt_log_aktiv then goto vent;
  3 16480     
  3 16480       disable if (op=0) or (nu > skiftetid) then
  3 16481       begin
  4 16482         if fil_åben then
  4 16483         begin
  5 16484           dp1.v_tid:= systid(dg,vt_logskift);
  5 16485           dp1.v_kode:= 1;
  5 16486           if (vt_logtail(10)//32) >= vt_logtail(1) then
  5 16487           begin
  6 16488             if udvid_fil then
  6 16489               skriv_post(dp1);
  6 16490           end
  5 16491           else
  5 16492             skriv_post(dp1);
  5 16493         end;
  4 16494     
  4 16494         if (op=0) or (nu > skiftetid) then
  4 16495           skiftetid:= skiftetid + 24*60*60.0;
  4 16496     
  4 16496         sletsendte;
  4 16497     
  4 16497         if ny_fil then
  4 16498         begin
  5 16499           if udvid_fil then
  5 16500           begin
  6 16501             vt_logstart:=dp1.v_tid:= systid(dg,vt_logskift);
  6 16502             dp1.v_kode:= 0;
  6 16503             skriv_post(dp1);
  6 16504           end
  5 16505           else
  5 16506           begin
  6 16507             close(zvtlog,true);
  6 16508             monitor(48)remove_entry:(zvtlog,0,ia);
  6 16509             fil_åben:= false;
  6 16510           end;
  5 16511         end;
  4 16512       end;
  3 16513     
  3 16513       disable if op<>0 and fil_åben then
  3 16514       begin
  4 16515         if (vt_logtail(10)//32) >= vt_logtail(1) then
  4 16516         begin
  5 16517           if -, udvid_fil then
  5 16518           begin
  6 16519             if ny_fil then
  6 16520             begin
  7 16521               if udvid_fil then
  7 16522               begin
  8 16523                 systime(1,0.0,dp1.v_tid);
  8 16524                 vt_logstart:= dp1.v_tid;
  8 16525                 dp1.v_kode:= 0;
  8 16526                 skriv_post(dp1);
  8 16527               end
  7 16528               else
  7 16529               begin
  8 16530                 close(zvtlog,true);
  8 16531                 monitor(48)remove_entry:(zvtlog,0,ia);
  8 16532                 fil_åben:= false;
  8 16533               end;
  7 16534             end;
  6 16535           end;
  5 16536         end;
  4 16537     
  4 16537         if fil_åben then skriv_post(dp);
  4 16538       end;
  3 16539     
  3 16539       goto vent;
  3 16540     
  3 16540     vt_log_trap:
  3 16541       disable skriv_vt_log(zbillede,1);
  3 16542     end vt_log;
  2 16543 \f

  2 16543 
  2 16543 algol list.off;
  2 16544 message coroutinemonitor - 11 ;
  2 16545   
  2 16545 
  2 16545     <*************** coroutine monitor procedures ***************>
  2 16546 
  2 16546 
  2 16546     <***** delay *****
  2 16547 
  2 16547     this procedure links the calling coroutine into the timerqueue and sets
  2 16548     the timeout value to 'timeout'. *>
  2 16549 
  2 16549 
  2 16549     procedure delay (timeout);
  2 16550     value timeout;
  2 16551     integer timeout;
  2 16552     begin
  3 16553       link(current, idlequeue);
  3 16554       link(current + corutimerchain, timerqueue);
  3 16555       d.current.corutimer:= timeout;
  3 16556 
  3 16556 
  3 16556       passivate;
  3 16557       d.current.corutimer:= 0;
  3 16558     end;
  2 16559 \f

  2 16559 
  2 16559 message coroutinemonitor - 12 ;
  2 16560 
  2 16560 
  2 16560     <***** pass *****
  2 16561 
  2 16561     this procedure moves the calling coroutine from the head of the ready 
  2 16562     queue down below all coroutines of lower or equal priority. *>
  2 16563   
  2 16563   
  2 16563     procedure pass;
  2 16564     begin
  3 16565       linkprio(current, readyqueue);
  3 16566 
  3 16566 
  3 16566       passivate;
  3 16567     end;
  2 16568 
  2 16568 
  2 16568     <***** signal ****
  2 16569 
  2 16569     this procedure increases the value af 'semaphore' by 1.
  2 16570     in case some coroutine is already waiting, it is linked into the ready 
  2 16571     queue for activation. the calling coroutine continues execution. *>
  2 16572   
  2 16572 
  2 16572     procedure signal (semaphore);
  2 16573     value semaphore;
  2 16574     integer semaphore;
  2 16575     begin
  3 16576       integer array field sem;
  3 16577       sem:= semaphore;
  3 16578       if d.sem.simvalue < 0 then linkprio(d.sem.simcoru, readyqueue);
  3 16579       d.sem.simvalue:= d.sem.simvalue + 1;
  3 16580 
  3 16580 
  3 16580     end;
  2 16581 \f

  2 16581 
  2 16581 message coroutinemonitor - 13 ;
  2 16582 
  2 16582 
  2 16582     <***** wait *****
  2 16583 
  2 16583     this procedure decreases the value of 'semaphore' by 1.
  2 16584     in case the value of the semaphore is negative after the decrease, the
  2 16585     calling coroutine is linked into the semaphore queue waiting for a
  2 16586     coroutine to signal this semaphore. *>
  2 16587   
  2 16587   
  2 16587     procedure wait (semaphore);
  2 16588     value semaphore;
  2 16589     integer semaphore;
  2 16590     begin
  3 16591       integer array field sem;
  3 16592       sem:= semaphore;
  3 16593       d.sem.simvalue:= d.sem.simvalue - 1;
  3 16594 
  3 16594 
  3 16594       linkprio(current, if d.sem.simvalue < 0 then sem+simcoru else readyqueue);
  3 16595       passivate;
  3 16596     end;
  2 16597 \f

  2 16597 
  2 16597 message coroutinemonitor - 14 ;
  2 16598 
  2 16598 
  2 16598     <***** inspect *****
  2 16599 
  2 16599     this procedure inspects the value of the semaphore and returns it in
  2 16600     'elements'.
  2 16601     the semaphore is left unchanged. *>
  2 16602 
  2 16602 
  2 16602     procedure inspect (semaphore, elements);
  2 16603     value semaphore;
  2 16604     integer semaphore, elements;
  2 16605     begin
  3 16606       integer array field sem;
  3 16607       sem:= semaphore;
  3 16608       elements:= d.sem.simvalue;
  3 16609 
  3 16609 
  3 16609     end;
  2 16610 \f

  2 16610 
  2 16610 message coroutinemonitor - 15 ;
  2 16611 
  2 16611 
  2 16611     <***** signalch *****
  2 16612 
  2 16612     this procedure delivers an operation at 'semaphore'.
  2 16613     in case another coroutine is already waiting for an operation of the
  2 16614     kind 'operationtype' this coroutine will get the operation and it will
  2 16615     be put into the ready queue for activation.
  2 16616     in case no coroutine is waiting for the actial kind of operation it is
  2 16617     linked into the semaphore queue, at the end of the queue
  2 16618     if operation is positive and at the beginning if operation is negative. 
  2 16619     the calling coroutine continues execution. *>
  2 16620   
  2 16620   
  2 16620     procedure signalch (semaphore, operation, operationtype);
  2 16621     value semaphore, operation, operationtype;
  2 16622     integer semaphore, operation;
  2 16623     boolean operationtype;
  2 16624     begin
  3 16625       integer array field firstcoru, currcoru, op,currop;
  3 16626       op:= abs  operation;
  3 16627       d.op.optype:= operationtype;
  3 16628       firstcoru:= semaphore + semcoru;
  3 16629       currcoru:= d.firstcoru.next;
  3 16630       while currcoru <> firstcoru do
  3 16631       begin
  4 16632         if (d.currcoru.corutypeset and operationtype) extract 12 <> 0 then
  4 16633         begin
  5 16634           link(operation, 0);
  5 16635           d.currcoru.coruop:= operation;
  5 16636           linkprio(currcoru, readyqueue);
  5 16637           link(currcoru + corutimerchain, idlequeue);
  5 16638           goto exit;
  5 16639         end else currcoru:= d.currcoru.next;
  4 16640       end;
  3 16641       currop:=semaphore + semop;
  3 16642       if operation < 0 then currop:=d.currop.next;
  3 16643       link(op, currop);
  3 16644   exit:
  3 16645 
  3 16645 
  3 16645     end;
  2 16646 \f

  2 16646 
  2 16646 message coroutinemonitor - 16 ;
  2 16647 
  2 16647 
  2 16647     <***** waitch *****
  2 16648 
  2 16648     this procedure fetches an operation from a semaphore.
  2 16649     in case an operation matching 'operationtypeset' is already waiting at
  2 16650     'semaphore' it is handed over to the calling coroutine.
  2 16651     in case no matching operation is waiting, the calling coroutine is
  2 16652     linked to the semaphore.
  2 16653     in any case the calling coroutine will be stopped and all corouti-
  2 16654     nes are rescheduled. *>
  2 16655   
  2 16655   
  2 16655     procedure waitch (semaphore, operation, operationtypeset, timeout);
  2 16656     value semaphore, operationtypeset, timeout;
  2 16657     integer semaphore, operation, timeout;
  2 16658     boolean operationtypeset;
  2 16659     begin
  3 16660       integer array field firstop, currop;
  3 16661       firstop:= semaphore + semop;
  3 16662       currop:= d.firstop.next;
  3 16663 
  3 16663 
  3 16663       while currop <> firstop do
  3 16664       begin
  4 16665         if (d.currop.optype and operationtypeset) extract 12 <> 0 then
  4 16666         begin
  5 16667           link(currop, 0);
  5 16668           d.current.coruop:= currop;
  5 16669           operation:= currop;
  5 16670 \f

  5 16670 
  5 16670 message coroutinemonitor - 17 ;
  5 16671 
  5 16671           linkprio(current, readyqueue);
  5 16672           passivate;
  5 16673           goto exit;
  5 16674         end else currop:= d.currop.next;
  4 16675       end;
  3 16676       linkprio(current, semaphore + semcoru);
  3 16677       if timeout > 0 then
  3 16678       begin
  4 16679         link(current + corutimerchain, timerqueue);
  4 16680         d.current.corutimer:= timeout;
  4 16681       end else d.current.corutimer:= 0;
  3 16682       d.current.corutypeset:= operationtypeset;
  3 16683       passivate;
  3 16684       if d.current.corutimer < 0 then operation:= 0
  3 16685                                  else operation:= d.current.coruop;
  3 16686       d.current.corutimer:= 0;
  3 16687       currop:= operation;
  3 16688       d.current.coruop:= currop;
  3 16689       link(current+corutimerchain, idlequeue);
  3 16690   exit:
  3 16691 
  3 16691 
  3 16691     end;
  2 16692 \f

  2 16692 
  2 16692 message coroutinemonitor - 18 ;
  2 16693 
  2 16693 
  2 16693     <***** inspectch *****
  2 16694 
  2 16694     this procedure inspects the queue of operations waiting at 'semaphore'.
  2 16695     the number of matching operations are counted and delivered in 'elements'.
  2 16696 if no operations are found the number of coroutines waiting
  2 16697 for operations of the typeset are counted and delivered as
  2 16698 negative value in 'elements'.
  2 16699     the semaphore is left unchanged. *>
  2 16700   
  2 16700   
  2 16700     procedure inspectch (semaphore, operationtypeset, elements);
  2 16701     value semaphore, operationtypeset;
  2 16702     integer semaphore, elements;
  2 16703     boolean operationtypeset;
  2 16704     begin
  3 16705       integer array field firstop, currop,firstcoru,currcoru;
  3 16706       integer counter;
  3 16707       counter:= 0;
  3 16708       firstop:= semaphore + semop;
  3 16709       currop:= d.firstop.next;
  3 16710       while currop <> firstop do
  3 16711       begin
  4 16712         if (operationtypeset and d.currop.optype) extract 12 <> 0 then
  4 16713           counter:= counter + 1;
  4 16714         currop:= d.currop.next;
  4 16715       end;
  3 16716       if counter=0 then
  3 16717       begin
  4 16718         firstcoru:=semaphore + sem_coru;
  4 16719         curr_coru:=d.firstcoru.next;
  4 16720         while curr_coru<>first_coru do
  4 16721         begin
  5 16722           if (operationtypeset and d.curr_coru.corutypeset) extract 12 <>0 then
  5 16723             counter:=counter - 1;
  5 16724           curr_coru:=d.curr_coru.next;
  5 16725         end;
  4 16726       end;
  3 16727       elements:= counter;
  3 16728 
  3 16728 
  3 16728     end;
  2 16729 \f

  2 16729 
  2 16729 message coroutinemonitor - 19 ;
  2 16730 
  2 16730 
  2 16730     <***** csendmessage *****
  2 16731 
  2 16731     this procedure sends the message in 'mess' to the process defined by the name
  2 16732     in 'receiver', and returns an identification of the message extension used
  2 16733     for sending the message (this identification is to be used for calling 'cwait-
  2 16734     answer' or 'cregretmessage'. *>
  2 16735   
  2 16735   
  2 16735     procedure csendmessage (receiver, mess, messextension);
  2 16736     real array receiver;
  2 16737     integer array mess;
  2 16738     integer messextension;
  2 16739     begin
  3 16740       integer bufref, messext;
  3 16741       messref(maxmessext):= 0;
  3 16742       messext:= 1;
  3 16743       while messref(messext) <> 0 do messext:= messext + 1;
  3 16744       if messext = maxmessext then <* no resources *> messext:= 0 else
  3 16745       begin
  4 16746         messcode(messext):= 1 shift 12 add 2;
  4 16747         mon(16) send message :(0, mess, 0, receiver);
  4 16748         messref(messext):= monw2;
  4 16749         if monw2 > 0 then messextension:= messext else messextension:= 0;
  4 16750       end;
  3 16751 
  3 16751 
  3 16751     end;
  2 16752 \f

  2 16752 
  2 16752 message coroutinemonitor - 20 ;
  2 16753 
  2 16753 
  2 16753     <***** cwaitanswer *****
  2 16754 
  2 16754     this procedure asks the coroutine monitor to get an answer to the message
  2 16755     corresponding to 'messextension'. in case the answer has already arrived
  2 16756     it stays in the eventqueue until 'cwaitanswer' is called.
  2 16757     in case 'timeout' is positive, the coroutine is linked into the timer
  2 16758     queue, and in case the answer does not arrive within 'timout' seconds the
  2 16759     coroutine is restarted with result = 0. *>
  2 16760   
  2 16760   
  2 16760     procedure cwaitanswer (messextension, answer, result, timeout);
  2 16761     value messextension, timeout;
  2 16762     integer messextension, result, timeout;
  2 16763     integer array answer;
  2 16764     begin
  3 16765       integer messext;
  3 16766       messext:= messextension;
  3 16767       messcode(messext):= messcode(messext) extract 12;
  3 16768       link(current, idlequeue);
  3 16769       messop(messext):= current;
  3 16770       if timeout > 0 then
  3 16771       begin
  4 16772         link(current + corutimerchain, timerqueue);
  4 16773         d.current.corutimer:= timeout;
  4 16774       end else d.current.corutimer:= 0;
  3 16775 
  3 16775 
  3 16775       passivate;
  3 16776       if d.current.corutimer < 0 then result:= 0 else
  3 16777       begin
  4 16778         mon(18) wait answer :(0, answer, messref(messextension), 0);
  4 16779         result:= monw0;
  4 16780         baseevent:= 0;
  4 16781         messref(messextension):= 0;
  4 16782       end;
  3 16783       d.current.corutimer:= 0;
  3 16784       link(current+corutimerchain, idlequeue);
  3 16785     end;
  2 16786 \f

  2 16786 
  2 16786 message coroutinemonitor - 21 ;
  2 16787 
  2 16787 
  2 16787     <***** cwaitmessage *****
  2 16788 
  2 16788     this procedure asks the coroutine monitor to give it a message, when some-
  2 16789     one arrives. in case a message has arrived already it stays at the event queue
  2 16790     until 'cwaitmessage' is called.
  2 16791     in case 'timeout' is positive, the coroutine is linked into the timer queue,
  2 16792     if no message arrives within 'timeout' seconds, the coroutine is restarted
  2 16793     with messbufferref = 0. *>
  2 16794   
  2 16794   
  2 16794     procedure cwaitmessage (processextension, mess, messbufferref, timeout);
  2 16795     value timeout, processextension;
  2 16796     integer processextension, messbufferref, timeout;
  2 16797     integer array mess;
  2 16798     begin
  3 16799       integer i;
  3 16800       integer array field messbuf;
  3 16801       proccode(processextension):= 2;
  3 16802       procop(processextension):= current;
  3 16803       link(current, idlequeue);
  3 16804       if timeout > 0 then
  3 16805       begin
  4 16806         link(current + corutimerchain, timerqueue);
  4 16807         d.current.corutimer:= timeout;
  4 16808       end else d.current.corutimer:= 0;
  3 16809 
  3 16809 
  3 16809       passivate;
  3 16810       if d.current.corutimer < 0 then messbufferref:= 0 else
  3 16811       begin
  4 16812         messbuf:= procop(processextension);
  4 16813         for i:=1 step 1 until 8 do mess(i):= core.messbuf(4+i);
  4 16814         proccode(procext):= 1 shift 12;
  4 16815         messbufferref:= messbuf;
  4 16816         baseevent:= 0;
  4 16817       end;
  3 16818       d.current.corutimer:= 0;
  3 16819       link(current+corutimerchain, idlequeue);
  3 16820     end;
  2 16821 \f

  2 16821 
  2 16821 message coroutinemonitor - 22 ;
  2 16822 
  2 16822 
  2 16822     <***** cregretmessage *****
  2 16823 
  2 16823     this procedure regrets the message corresponding to messageexten-
  2 16824     sion, to release message buffer and message extension.
  2 16825     i/o messages are not regretable. *>
  2 16826 
  2 16826   
  2 16826   
  2 16826     procedure cregretmessage (messageextension);
  2 16827     value messageextension;
  2 16828     integer messageextension;
  2 16829     begin
  3 16830       integer array field messbuf;
  3 16831       messbuf:= messref(messageextension);
  3 16832       mon(82) regret message :(0, 0, messbuf, 0);
  3 16833       messref(messageextension):= 0;
  3 16834 
  3 16834 
  3 16834     end;
  2 16835 \f

  2 16835 
  2 16835 message coroutinemonitor - 23 ;
  2 16836 
  2 16836 
  2 16836     <***** semsendmessage *****
  2 16837 
  2 16837     this procedure sends the message 'mess' to 'receiver' and at the same time it
  2 16838     defines a 'signalch(semaphore, operation, operationtype)' to be performed
  2 16839     by the monitor, when the answer arrives.
  2 16840     in case there are too few resources to send the message, the operation is
  2 16841     returned immediately with the result field set to zero. *>
  2 16842   
  2 16842   
  2 16842     procedure semsendmessage (receiver, mess, semaphore, operation, operationtype);
  2 16843     value semaphore, operation, operationtype;
  2 16844     real array receiver;
  2 16845     integer array mess;
  2 16846     integer semaphore, operation;
  2 16847     boolean operationtype;
  2 16848     begin
  3 16849       integer array field op;
  3 16850       integer messext;
  3 16851       op:= operation;
  3 16852       messref(maxmessext):= 0;
  3 16853       messext:= 1;
  3 16854       while messref(messext) <> 0 do messext:= messext + 1;
  3 16855       if messext < maxmessext then
  3 16856       begin
  4 16857         messop(messext):= op;
  4 16858         messcode(messext):=1;
  4 16859         d.op(1):= semaphore;
  4 16860         d.op.optype:= operationtype;
  4 16861         mon(16) send message :(0, mess, 0, receiver);
  4 16862         messref(messext):= monw2;
  4 16863       end;
  3 16864 
  3 16864 
  3 16864       if messext = maxmessext or messref(messext) = 0 <* no resources *> then
  3 16865       begin   <* return the operation immediately with result = 0 *>
  4 16866         d.op(9):= 0;
  4 16867         signalch(semaphore, op, operationtype);
  4 16868       end;
  3 16869     end;
  2 16870 \f

  2 16870 
  2 16870 message coroutinemonitor - 24 ;
  2 16871 
  2 16871 
  2 16871     <***** semwaitmessage *****
  2 16872 
  2 16872     this procedure defines a 'signalch(semaphore, operation, operationtype)' to
  2 16873     be performed by the coroutine monitor when a message arrives to the process
  2 16874     corresponding to 'processextension'. *>
  2 16875   
  2 16875   
  2 16875     procedure semwaitmessage (processextension, semaphore, operation, operationtype);
  2 16876     value processextension, semaphore, operation, operationtype;
  2 16877     integer processextension, semaphore, operation;
  2 16878     boolean operationtype;
  2 16879     begin
  3 16880       integer array field op;
  3 16881       op:= operation;
  3 16882       procop(processextension):= operation;
  3 16883       d.op(1):= semaphore;
  3 16884       d.op.optype:= operationtype;
  3 16885       proccode(processextension):= 1;
  3 16886 
  3 16886 
  3 16886     end;
  2 16887 \f

  2 16887 
  2 16887 message coroutinemonitor - 25 ;
  2 16888 
  2 16888 
  2 16888     <***** semregretmessage *****
  2 16889 
  2 16889     this procedure regrets a message sent by semsendmessage.
  2 16890     the message is identified by the operation in which the answer should be
  2 16891     returned.
  2 16892     the procedure sets the result field of the operation to zero, and then
  2 16893     returns it by performing a signalch. *>
  2 16894   
  2 16894   
  2 16894     procedure semregretmessage (operation);
  2 16895     value operation;
  2 16896     integer operation;
  2 16897     begin
  3 16898       integer i, j;
  3 16899       integer array field op, sem;
  3 16900       op:= operation;
  3 16901       i:= 1;
  3 16902       while i < maxmessext do
  3 16903       begin
  4 16904         if messref(i) > 0 and (messcode(i) = 1 and messop(i) = op) then
  4 16905         begin
  5 16906           mon(82) regret message :(0, 0, messref(i), 0);
  5 16907           messref(i):= 0;
  5 16908           sem:= d.op(1);
  5 16909           for j:=1 step 1 until 9 do d.op(j):= 0;
  5 16910           signalch(sem, op, d.op.optype);
  5 16911           i:= maxmessext;
  5 16912         end;
  4 16913         i:= i + 1;
  4 16914       end;
  3 16915 
  3 16915 
  3 16915     end;
  2 16916 \f

  2 16916 
  2 16916 message coroutinemonitor - 26 ;
  2 16917 
  2 16917 
  2 16917     <***** link *****
  2 16918 
  2 16918     this procedure links an object (allocated in the descriptor array 'd') into
  2 16919     a queue of alements (allocated in the descriptor array 'd'). the queues
  2 16920     are all double chained, and the chainhead is of the same format as the chain
  2 16921     fields of the objects.
  2 16922     the procedure links the object immediately after the head. *>
  2 16923   
  2 16923   
  2 16923     procedure link (object, chainhead);
  2 16924     value object, chainhead;
  2 16925     integer object, chainhead;
  2 16926     begin
  3 16927       integer array field prevelement, nextelement, chead, obj;
  3 16928       obj:= object;
  3 16929       chead:= chainhead;
  3 16930       prevelement:= d.obj.prev;
  3 16931       nextelement:= d.obj.next;
  3 16932       d.prevelement.next:= nextelement;
  3 16933       d.nextelement.prev:= prevelement;
  3 16934       if chead > 0 then <* link into queue *>
  3 16935       begin
  4 16936         prevelement:= d.chead.prev;
  4 16937         d.obj.prev:= prevelement;
  4 16938         d.prevelement.next:= obj;
  4 16939         d.obj.next:= chead;
  4 16940         d.chead.prev:= obj;
  4 16941       end else
  3 16942       begin  <* link onto itself *>
  4 16943         d.obj.prev:= obj;
  4 16944         d.obj.next:= obj;
  4 16945       end;
  3 16946     end;
  2 16947 \f

  2 16947 
  2 16947 message coroutinemonitor - 27 ;
  2 16948 
  2 16948 
  2 16948     <***** linkprio *****
  2 16949 
  2 16949     this procedure is used to link coroutines into queues corresponding to
  2 16950     the priorities of the actual coroutine and the queue elements.
  2 16951     the object is linked immediately before the first coroutine of lower prio-
  2 16952     rity. *>
  2 16953   
  2 16953   
  2 16953     procedure linkprio (object, chainhead);
  2 16954     value object, chainhead;
  2 16955     integer object, chainhead;
  2 16956     begin
  3 16957       integer array field currelement, chead, obj;
  3 16958       obj:= object;
  3 16959       chead:= chainhead;
  3 16960       currelement:= d.chead.next;
  3 16961       while currelement <> chead
  3 16962             and d.currelement.corupriority <= d.obj.corupriority 
  3 16963               do currelement:= d.currelement.next;
  3 16964       link(obj, currelement);
  3 16965     end;
  2 16966 \f

  2 16966 
  2 16966 message coroutinemonitor - 28 ;
  2 16967 
  2 16967 \f

  2 16967 
  2 16967 message coroutinemonitor - 30a ;
  2 16968 
  2 16968 
  2 16968     <*************** extention to coroutine monitor procedures **********>
  2 16969 
  2 16969     <***** signalbin *****
  2 16970 
  2 16970     this procedure simulates a binary semaphore on a simple semaphore
  2 16971     by testing the value of the semaphore before signaling the
  2 16972     semaphore. if the value of the semaphore is one (=open) nothing is
  2 16973     done, otherwise a normal signal is carried out. *>
  2 16974 
  2 16974 
  2 16974     procedure signalbin(semaphore);
  2 16975     value semaphore;
  2 16976     integer semaphore;
  2 16977     begin
  3 16978       integer array field sem;
  3 16979       integer val;
  3 16980       sem:= semaphore;
  3 16981       inspect(sem,val);
  3 16982       if val<1 then signal(sem);
  3 16983     end;
  2 16984 \f

  2 16984 
  2 16984 message coroutinemonitor - 30b ;
  2 16985 
  2 16985   <***** coruno *****
  2 16986 
  2 16986   delivers the coroutinenumber for a give coroutine id.
  2 16987   if the coroutine does not exists the value 0 is delivered *>
  2 16988 
  2 16988   integer procedure coru_no(coru_id);
  2 16989   value                     coru_id;
  2 16990   integer                   coru_id;
  2 16991   begin
  3 16992     integer array field cor;
  3 16993 
  3 16993     coru_no:= 0;
  3 16994     for cor:= firstcoru step corusize until (coruref-1) do
  3 16995       if d.cor.coruident//1000 = coru_id then
  3 16996       coru_no:= d.cor.coruident mod 1000;
  3 16997   end;
  2 16998 \f

  2 16998 
  2 16998 message coroutinemonitor - 30c ;
  2 16999 
  2 16999   <***** coroutine *****
  2 17000 
  2 17000   delivers the referencebyte for the coroutinedescriptor for
  2 17001   a coroutine identified by coroutinenumber *>
  2 17002 
  2 17002   integer procedure coroutine(cor_no);
  2 17003     value                     cor_no;
  2 17004     integer                   cor_no;
  2 17005   coroutine:= if cor_no <= 0 or maxcoru < cor_no then -1 else
  2 17006               firstcoru + (cor_no-1)*corusize;
  2 17007 \f

  2 17007 
  2 17007 message coroutinemonitor - 30d ;
  2 17008 
  2 17008 <***** curr_coruno *****
  2 17009 
  2 17009 delivers number of calling coroutine 
  2 17010     curr_coruno:
  2 17011         < 0     = -current_coroutine_number in disabled mode
  2 17012         = 0     = procedure not called from coroutine
  2 17013         > 0     = current_coroutine_number in enabled mode   *>
  2 17014 
  2 17014 integer procedure curr_coruno;
  2 17015 begin
  3 17016   integer i;
  3 17017   integer array ia(1:12);
  3 17018 
  3 17018   i:= system(12,0,ia);
  3 17019   if i > 0 then
  3 17020   begin
  4 17021     i:= system(12,1,ia);
  4 17022     curr_coruno:= ia(3);
  4 17023   end else curr_coruno:= 0;
  3 17024 end curr_coruno;
  2 17025 \f

  2 17025 
  2 17025 message coroutinemonitor - 30e ;
  2 17026 
  2 17026 <***** curr_coruid *****
  2 17027 
  2 17027 delivers coruident of calling coroutine :
  2 17028 
  2 17028     curr_coruid:
  2 17029         > 0     = coruident of calling coroutine
  2 17030         = 0     = procedure not called from coroutine  *>
  2 17031 
  2 17031 integer procedure curr_coruid;
  2 17032 begin
  3 17033   integer cor_no;
  3 17034   integer array field cor;
  3 17035 
  3 17035   cor_no:= abs curr_coruno;
  3 17036   if cor_no <> 0 then
  3 17037   begin
  4 17038     cor:= coroutine(cor_no);
  4 17039     curr_coruid:= d.cor.coruident // 1000;
  4 17040   end
  3 17041   else curr_coruid:= 0;
  3 17042 end curr_coruid;
  2 17043 \f

  2 17043 message coroutinemonitor - 30f.1 ;
  2 17044 
  2 17044     <**** getch *****
  2 17045 
  2 17045     this procedure searches the queue of operations waiting at 'semaphore'
  2 17046     to find an operation that matches the operationstypeset and a set of
  2 17047     select-values. each select value is specified by type and fieldvalue
  2 17048     in integer array 'type' and by the value in integer array 'val'.
  2 17049 
  2 17049 0: eq  0:   not used
  2 17050 1: lt  1:   boolean
  2 17051 2: le  2:   integer
  2 17052 3: gt  3:   long
  2 17053 4: ge  4:   real
  2 17054 5: ne
  2 17055 *>
  2 17056 
  2 17056     procedure getch(semaphore,operation,operationtypeset,type,val);
  2 17057     value semaphore,operationtypeset;
  2 17058     integer semaphore,operation;
  2 17059     boolean operationtypeset;
  2 17060     integer array type,val;
  2 17061     begin
  3 17062       integer array field firstop,currop;
  3 17063       integer ø,n,i,f,t,rel,i1,i2;
  3 17064       boolean field bf,bfval;
  3 17065       integer field intf;
  3 17066       long field lf,lfval; long l1,l2;
  3 17067       real field rf,rfval; real r1,r2;
  3 17068   
  3 17068       boolean match;
  3 17069 
  3 17069       operation:= 0;
  3 17070       n:= system(3,ø,type);
  3 17071       match:= false;
  3 17072       firstop:= semaphore + semop;
  3 17073       currop:= d.firstop.next;
  3 17074       while currop <> firstop and -,match do
  3 17075       begin
  4 17076         if (operationtypeset and d.currop.optype) extract 12 <> 0 then
  4 17077         begin
  5 17078           i:= n;
  5 17079           match:= true;
  5 17080 \f

  5 17080 message coroutinemonitor - 30f.2 ;
  5 17081 
  5 17081           while match and (if i <= ø then type(i) >= 0 else false) do
  5 17082           begin
  6 17083             rel:= type(i) shift(-18);
  6 17084             t:= type(i) shift(-12) extract 6;
  6 17085             f:= type(i) extract 12;
  6 17086             if f > 2047 then f:= f -4096;
  6 17087             case t+1 of
  6 17088             begin
  7 17089               ; <* not used *>
  7 17090 
  7 17090               begin <*boolean or signed short integer*>
  8 17091                 bf:= f;
  8 17092                 bfval:= 2*i;
  8 17093                 i1:= d.currop.bf extract 12;
  8 17094                 if i1 > 2047 then i1:= i1-4096;
  8 17095                 i2:= val.bfval extract 12;
  8 17096                 if i2 > 2047 then i2:= i2-4096;
  8 17097                 match:= case rel+1 of (i1=i2,i1<i2,i1<=i2,i1>i2,i1>=i2,i1<>i2);
  8 17098               end;
  7 17099 
  7 17099               begin <*integer*>
  8 17100                 intf:= f;
  8 17101                 i1:= d.currop.intf;
  8 17102                 i2:= val(i);
  8 17103                 match:= case rel+1 of (i1=i2,i1<i2,i1<=i2,i1>i2,i1>=i2,i1<>i2);
  8 17104               end;
  7 17105 
  7 17105               begin <*long*>
  8 17106                 lf:= f;
  8 17107                 lfval:= i*2;
  8 17108                 l1:= d.currop.lf;
  8 17109                 l2:= val.lfval;
  8 17110                 match:= case rel+1 of (l1=l2,l1<l2,l1<=l2,l1>l2,l1>=l2,l1<>l2);
  8 17111               end;
  7 17112 
  7 17112               begin <*real*>
  8 17113                 rf:= f;
  8 17114                 rfval:= i*2;
  8 17115                 r1:= d.currop.rf;
  8 17116                 r2:= val.rfval;
  8 17117                 match:= case rel+1 of (r1=r2,r1<r2,r1<=r2,r1>r2,r1>=r2,r1<>r2);
  8 17118               end;
  7 17119 
  7 17119             end;<*case t+1*>
  6 17120 
  6 17120             i:= i+1;
  6 17121           end; <*while match and i<=ø and t>=0 *>
  5 17122 \f

  5 17122 message coroutinemonitor - 30f.3 ;
  5 17123 
  5 17123         end; <* if operationtypeset and ---*>
  4 17124         if -,match then currop:= d.currop.next;
  4 17125       end; <*while currop <> firstop and -,match*>
  3 17126 
  3 17126       if match then
  3 17127       begin
  4 17128         link(currop,0);
  4 17129         d.current.coruop:= currop;
  4 17130         operation:= currop;
  4 17131       end;
  3 17132     end getch;
  2 17133 \f

  2 17133 
  2 17133 message coroutinemonitor - 31 ;
  2 17134 
  2 17134     activity(maxcoru);
  2 17135 
  2 17135     goto initialization;
  2 17136 
  2 17136 
  2 17136 
  2 17136     <*************** event handling ***************>
  2 17137 
  2 17137 
  2 17137   
  2 17137   takeexternal:
  2 17138     currevent:= baseevent;
  2 17139     eventqueueempty:= false;
  2 17140     repeat
  2 17141       current:= 0;
  2 17142       prevevent:= currevent;
  2 17143       mon(66) test event :(0, 0, currevent, 0);
  2 17144       currevent:= monw2;
  2 17145       if monw0 < 0 <* no event *> then goto takeinternal;
  2 17146       if monw0 = 1 and monw1 > 0 and monw1 <= maxcoru then
  2 17147         cmi:= monw1
  2 17148       else
  2 17149         cmi:= - monw0;
  2 17150 
  2 17150       if cmi > 0 then
  2 17151         begin <* answer to activity zone *>
  3 17152           current:= firstcoru + (cmi - 1) * corusize;
  3 17153           linkprio(current, readyqueue);
  3 17154           baseevent:= 0;
  3 17155         end else
  2 17156   
  2 17156       if cmi = 0 then
  2 17157         begin <* message arrived *>
  3 17158 \f

  3 17158 
  3 17158 message coroutinemonitor - 32 ;
  3 17159 
  3 17159           receiver:= core.currevent(3);
  3 17160           if receiver < 0 then receiver:= - receiver;
  3 17161           procref(maxprocext):= receiver;
  3 17162           procext:= 1;
  3 17163           while procref(procext) <> receiver do procext:= procext + 1;
  3 17164           if procext = maxprocext then
  3 17165           begin <* receiver unknown *>
  4 17166             <* leave the message unchanged *>
  4 17167           end else
  3 17168           if proccode(procext) shift (-12) = 0 then
  3 17169           begin  <* the receiver is ready for accepting messages *>
  4 17170             mon(26) get event :(0, 0, currevent, 0);
  4 17171             case proccode(procext) of
  4 17172             begin
  5 17173               begin <* message received by semwaitmessage *>
  6 17174                 op:= procop(procext);
  6 17175                 sem:= d.op(1);
  6 17176                 for cmj:=1 step 1 until 8 do d.op(cmj):= core.currevent(4+cmj);
  6 17177                 d.op(9):= currevent;
  6 17178                 signalch(sem, op, d.op.optype);
  6 17179                 proccode(procext):= 1 shift 12;
  6 17180               end;
  5 17181               begin <* message received by cwaitmessage *>
  6 17182                 current:= procop(procext);
  6 17183                 procop(procext):= currevent;
  6 17184                 linkprio(current, readyqueue);
  6 17185                 link(current + corutimerchain, idlequeue);
  6 17186 
  6 17186 
  6 17186               end;
  5 17187             end; <* case *>
  4 17188             currevent:= baseevent;
  4 17189             proccode(procext):= 1 shift 12;
  4 17190           end;
  3 17191         end <* message *> else
  2 17192   
  2 17192       if cmi = -1 then
  2 17193         begin  <* answer arrived *>
  3 17194 \f

  3 17194 
  3 17194 message coroutinemonitor - 33 ;
  3 17195 
  3 17195           if currevent = timermessage then
  3 17196           begin
  4 17197             mon(26) get event :(0, 0, currevent, 0);
  4 17198             coru:= d.timerqueue.next;
  4 17199             while coru <> timerqueue do
  4 17200             begin
  5 17201               current:= coru - corutimerchain;
  5 17202               d.current.corutimer:= d.current.corutimer - clockmess(2);
  5 17203               coru:= d.coru.next;
  5 17204               if d.current.corutimer <= 0 then
  5 17205               begin <* timer perion expired *>
  6 17206                 d.current.corutimer:= -1;
  6 17207                 linkprio(current, readyqueue);
  6 17208                 link(current + corutimerchain, idlequeue);
  6 17209               end;
  5 17210             end;
  4 17211             mon(16) send message :(0, clockmess, 0, clock);
  4 17212             timermessage:= monw2;
  4 17213             currevent:= baseevent;
  4 17214           end <* timer answer *> else
  3 17215           begin
  4 17216             messref(maxmessext):= currevent;
  4 17217             messext:= 1;
  4 17218             while messref(messext) <> currevent do messext:= messext + 1;
  4 17219             if messext = maxmessext then
  4 17220             begin <* the answer is unknown *>
  5 17221               <* leave the answer unchanged - it may belong to an activity *>
  5 17222             end else
  4 17223             if messcode(messext) shift (-12) = 0 then
  4 17224             begin
  5 17225               case messcode(messext) extract 12 of
  5 17226               begin
  6 17227 \f

  6 17227 
  6 17227 message coroutinemonitor - 34 ;
  6 17228                 begin <* answer arrived after semsendmessage *>
  7 17229                   op:= messop(messext);
  7 17230                   sem:= d.op(1);
  7 17231                   mon(18) wait answer :(0, d.op, currevent, 0);
  7 17232                   d.op(9):= monw0;
  7 17233                   signalch(sem, op, d.op.optype);
  7 17234                   messref(messext):= 0;
  7 17235                   baseevent:= 0;
  7 17236                 end;
  6 17237                 begin <* answer arrived after csendmessage *>
  7 17238                   current:= messop(messext);
  7 17239                   linkprio(current, readyqueue);
  7 17240                   link(current + corutimerchain, idlequeue);
  7 17241 
  7 17241 
  7 17241                 end;
  6 17242               end;
  5 17243             end else baseevent:= currevent;
  4 17244           end;
  3 17245         end;
  2 17246     until eventqueueempty;
  2 17247 \f

  2 17247 
  2 17247 message coroutinemonitor - 35 ;
  2 17248 
  2 17248 
  2 17248 
  2 17248     <*************** coroutine activation ***************>
  2 17249 
  2 17249 takeinternal:
  2 17250   
  2 17250     current:= d.readyqueue.next;
  2 17251     if current = readyqueue then
  2 17252     begin
  3 17253       mon(24) wait event :(0, 0, prevevent, 0);
  3 17254       goto takeexternal;
  3 17255     end;
  2 17256 
  2 17256 <*+2*> if testbit30 and d.current.corutestmask shift(-11) then
  2 17257 <**>   begin
  3 17258 <**>     systime(5,0,r);
  3 17259 <**>     write(out,"nl",1,<<zd dd dd>,r,<: coroutine: :>,<<dd>,
  3 17260 <**>       d.current.coruident mod 1000,<:  ident: :>,<<ddd>,
  3 17261 <**>       d.current.coruident//1000,<: aktiveres:>);
  3 17262 <**>   end;
  2 17263 <*-2*>
  2 17264 
  2 17264     corustate:= activate(d.current.coruident mod 1000);
  2 17265     cmi:= corustate extract 24;
  2 17266 <*+2*> if testbit30 and d.current.corutestmask shift(-11) then
  2 17267 <**>   begin
  3 17268 <**>     systime(5,0,r);
  3 17269 <**>     write(out,"nl",1,<<zd dd dd>,r,<: coroutine: :>,<<dd>,
  3 17270 <**>       d.current.coruident mod 1000,<:  ident: :>,<<ddd>,
  3 17271 <**>       d.current.coruident//1000,<: afbrudt, årsag=:>,cmi);
  3 17272 <**>   end;
  2 17273 <*-2*>
  2 17274 
  2 17274     if cmi = 1 then
  2 17275     begin  <* programmed passivate *>
  3 17276       goto takeexternal;
  3 17277     end;
  2 17278 
  2 17278     if cmi = 2 then
  2 17279     begin <* implicit passivate in activity *>
  3 17280 
  3 17280 
  3 17280       link(current, idlequeue);
  3 17281       goto takeexternal;
  3 17282     end;
  2 17283 \f

  2 17283 
  2 17283 message coroutinemonitor - 36 ;
  2 17284 
  2 17284     <* coroutine termination (normal or abnormal) *>
  2 17285 
  2 17285 <* aktioner ved normal og unormal coroutineterminering insættes her *>
  2 17286 coru_term:
  2 17287 
  2 17287     begin
  3 17288       if false and alarmcause extract 24 = (-9) <* break *> and
  3 17289          alarmcause shift (-24) extract 24 = 0 then
  3 17290       begin
  4 17291         endaction:= 2;
  4 17292         goto program_slut;
  4 17293       end;
  3 17294       if alarmcause extract 24 = (-9) <* break *> and
  3 17295          alarmcause shift (-24) = 8 <* parent *>
  3 17296       then sæt_bit_i(trapmode,15<*killed activities*>,0<*normal output*>);
  3 17297       if alarmcause shift (-24) extract  24 <> -2 or
  3 17298          alarmcause extract 24 <> -13 then
  3 17299       begin
  4 17300         write(zbillede,"nl",1,<:alarmcause(param,cause)=:>,<<d>,
  4 17301               alarmcause shift (-24),<:,:>,
  4 17302               alarmcause extract 24);
  4 17303         for i:=1 step 1 until max_coru do
  4 17304           j:=activate(-i); <* kill *>
  4 17305 <*      skriv billede *>
  4 17306       end
  3 17307       else
  3 17308       begin
  4 17309         errorbits:= 0; <* ok.yes warning.no *>
  4 17310         goto finale;
  4 17311       end;
  3 17312     end;
  2 17313 
  2 17313 goto dump;
  2 17314 
  2 17314     link(current, idlequeue);
  2 17315     goto takeexternal;
  2 17316 \f

  2 17316 
  2 17316 message coroutinemonitor - 37 ;
  2 17317 
  2 17317 
  2 17317 
  2 17317   initialization:
  2 17318 
  2 17318 
  2 17318     <*************** initialization ***************>
  2 17319   
  2 17319     <* chain head *>
  2 17320   
  2 17320        prev:= -2;                         <* -2  prev *>
  2 17321        next:= 0;                          <* +0  next *>
  2 17322   
  2 17322     <* corutine descriptor *>
  2 17323   
  2 17323                                           <* -2  prev *>
  2 17324                                           <* +0  next *>
  2 17325                                           <* +2  (link field) *>
  2 17326        corutimerchain:= next + 4;         <* +4  corutimerchain *>
  2 17327                                           <* +6  (link field) *>
  2 17328        coruop:= corutimerchain + 4;       <* +8  coruop *>
  2 17329        corutimer:= coruop + 2;            <*+10  corutimer *>
  2 17330        coruident:= corutimer + 2;         <*+12  coruident *>
  2 17331        corupriority:= coruident + 2;      <*+14  corupriority *>
  2 17332        corutypeset:= corupriority + 1;    <*+15  corutypeset *>
  2 17333        corutestmask:= corutypeset + 1;    <*+16  corutestmask *>
  2 17334   
  2 17334     <* simple semaphore *>
  2 17335   
  2 17335                                           <* -2  (link field) *>
  2 17336        simcoru:= next;                    <* +0  simcoru *>
  2 17337        simvalue:= simcoru + 2;            <* +2  simvalue *>
  2 17338   
  2 17338     <* chained semaphore *>
  2 17339   
  2 17339                                           <* -2  (link field) *>
  2 17340        semcoru:= next;                    <* +0  semcoru *>
  2 17341                                           <* +2  (link field) *>
  2 17342        semop:= semcoru + 4;               <* +4  semop *>
  2 17343 \f

  2 17343 
  2 17343 message coroutinemonitor - 38 ;
  2 17344   
  2 17344     <* operation *>
  2 17345   
  2 17345        opsize:= next - 6;                 <* -6  opsize *>
  2 17346        optype:= opsize + 1;               <* -5  optype *>
  2 17347                                           <* -2  prev *>
  2 17348                                           <* +0  next *>
  2 17349                                           <* +2  operation(1) *>
  2 17350                                           <* +4  operation(2) *>
  2 17351                                           <* +6      -        *>
  2 17352                                           <*  .      -        *>
  2 17353                                           <*  .      -        *>
  2 17354   
  2 17354 \f

  2 17354 
  2 17354 message coroutinemonitor - 39 ;
  2 17355   
  2 17355       trap(dump);
  2 17356       systime(1, 0, starttime);
  2 17357       for cmi:= 1 step 1 until maxmessext do messref(cmi):= 0;
  2 17358       clockmess(1):= 0;
  2 17359       clockmess(2):= timeinterval;  
  2 17360       clock(1):= real <:clock:>;
  2 17361       clock(2):= real <::>;
  2 17362       mon(16) send message :(0, clockmess, 0, clock);
  2 17363       timermessage:= monw2;
  2 17364       readyqueue:= 4;
  2 17365       initchain(readyqueue);
  2 17366       idlequeue:= readyqueue + 4;
  2 17367       initchain(idlequeue);
  2 17368       timerqueue:= idlequeue + 4;
  2 17369       initchain(timerqueue);
  2 17370       current:= 0;
  2 17371       corucount:= 0;
  2 17372       proccount:= 0;
  2 17373       baseevent:= 0;
  2 17374       coruref:= timerqueue + 4;
  2 17375       firstcoru:= coruref;
  2 17376       simref:= coruref + maxcoru * corusize;
  2 17377       firstsim:= simref;
  2 17378       semref:= simref + maxsem * simsize;
  2 17379       firstsem:= semref;
  2 17380       opref:= semref + maxsemch * semsize + 4;
  2 17381       firstop:= opref;
  2 17382       optop:= opref + maxop * opheadsize + maxnettoop - 6;
  2 17383       for cmi:= coruref step 2 until optop - 2 do d(cmi/2):= 0;
  2 17384       reflectcore(core);
  2 17385 
  2 17385 algol list.on;
  2 17386   
  2 17386       \f

  2 17386       message sys_initialisering side 1 - 810601/hko;
  2 17387       
  2 17387         trapmode:= 1 shift 15;
  2 17388         errorbits:= 1; <* warning.no ok.no *>
  2 17389         trap(coru_term);
  2 17390       
  2 17390         open(zbillede,4,<:billede:>,0);
  2 17391         write(zbillede,"ff",1,"nl",2,<:********** billede for kørsel startet :>,
  2 17392               <<zddddd>,systime(5,0,r),".",1,r,<: **********:>,"nl",1);
  2 17393         system(2,0,ia);
  2 17394         open(zdummy,4,ia,0); close(zdummy,false);
  2 17395         monitor(42,zdummy,0,ia);
  2 17396         laf:= 0;
  2 17397         write(zbillede,"nl",1,<:prog.vers.  :>,<<dddddd.dddd>,
  2 17398           systime(6,ia(6),r)+r/1000000,"nl",2,
  2 17399           <:konsolnavn: :>,konsol_navn.laf,"nl",1);
  2 17400       
  2 17400         open(zrl,4,<:radiolog:>,0);
  2 17401         if monitor(42)lookup_entry:(zrl,0,ia)<>0 or
  2 17402            monitor(52)create_areaproc:(zrl,0,ia)<>0 or
  2 17403            monitor(8)reserve_process:(zrl,0,ia)<>0 then
  2 17404         begin
  3 17405           ia(1):=1; ia(2):= 3;
  3 17406           for i:= 3 step 1 until 10 do ia(i):= 0;
  3 17407           monitor(40)create_area:(zrl,0,ia);
  3 17408         end;
  2 17409       
  2 17409         for i:=1 step 1 until max_antal_fejltekster do
  2 17410           fejltekst(i):= real (case i of (
  2 17411       <* 1*><:filsystem:>,
  2 17412       <* 2*><:operationskode:>,
  2 17413       <* 3*><:programfejl:>,
  2 17414       <* 4*><:monitor<'_'>resultat=:>,
  2 17415       <* 5*><:læs<'_'>fil:>,
  2 17416       <* 6*><:skriv<'_'>fil:>,
  2 17417       <* 7*><:modif<'_'>fil:>,
  2 17418       <* 8*><:hent<'_'>fil<'_'>dim:>,
  2 17419       <* 9*><:sæt<'_'>fil<'_'>dim:>,
  2 17420       <*10*><:vogntabel:>,
  2 17421       <*11*><:fremmed operation:>,
  2 17422       <*12*><:operationstype:>,
  2 17423       <*13*><:opret<'_'>fil:>,
  2 17424       <*14*><:tilknyt<'_'>fil:>,
  2 17425       <*15*><:frigiv<'_'>fil:>,
  2 17426       <*16*><:slet<'_'>fil:>,
  2 17427       <*17*><:ydre enhed, status=:>,
  2 17428       <*18*><:tabelfil:>,
  2 17429       <*19*><:radio:>,
  2 17430       <*20*><:mobilopkald, bus:>,
  2 17431       <*21*><:talevejsswitch:>,
  2 17432       <*99*><:ftslut:>));
  2 17433       
  2 17433       for i:= 1 step 1 until max_antal_områder do
  2 17434       begin
  3 17435         område_navn(i):= long (case i of
  3 17436           (<:TLF:>,<:VHF:>,<:KBH:>,<:RO:>,<:FS:>,<:HHL:>,<:GLX:>,
  3 17437            <:KJ:>,<:HI:>,<:HG:>,<:BA:>) ); 
  3 17438         område_id(i,1):= område_navn(i) shift (-24) extract 24;
  3 17439         område_id(i,2):= 
  3 17440           (case i of ( 2,  3, 13,  3,  3,  3,  3,  3,  3,  3,  3)) shift 6 add
  3 17441           (case i of ( 2,  5,  2,  9, 10, 11, 12, 13, 14, 15, 16));
  3 17442       end;
  2 17443       
  2 17443       pabx_id(1):= -1;
  2 17444       pabx_id(2):= 1;
  2 17445       
  2 17445       for i:= 1 step 1 until max_antal_radiokanaler do
  2 17446       begin
  3 17447         radio_id(i):= 
  3 17448           case i of ( 3, 3, 3, 3, 2, -1, -1, -1, 4, 5, 6, 7, 8, 9, 10, 11);
  3 17449       end;
  2 17450       
  2 17450       for i:=1 step 1 until max_antal_kanaler do
  2 17451       begin
  3 17452         kanal_navn(i):= long (case i of (
  3 17453           <:K1:>,<:K2:>,<:K3:>,<:K4:>,<:K5:>,<:K9:>,<:K10:>,<:K11:>,<:K12:>,
  3 17454           <:K13:>,<:K14:>,<:K15:>,<:K16:>,<:L4190:>) );
  3 17455         kanal_id(i):= 
  3 17456           (case i of ( 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2)) shift 5 +
  3 17457           (case i of ( 2, 3, 4, 1, 5, 9,10,11,12,13,14,15,16, 2));
  3 17458       end;
  2 17459       
  2 17459       for i:= 1 step 1 until op_maske_lgd//2 do
  2 17460         ingen_operatører(i):= alle_operatører(i):= 0;
  2 17461       for i:= 1 step 1 until tv_maske_lgd//2 do
  2 17462         ingen_taleveje(i):= alle_taleveje(i):= 0;
  2 17463       
  2 17463       begin
  3 17464         long array navn(1:2);
  3 17465         long array field doc, ref;
  3 17466       
  3 17466         doc:= 2; iaf:= 0;
  3 17467         movestring(navn,1,<:terminal0:>);
  3 17468         for i:= 1 step 1 until max_antal_operatører do
  3 17469         begin
  4 17470           ref:=(i-1)*8; k:=9;
  4 17471           if i>9 then skrivtegn(navn.iaf, k, '0' + i//10);
  4 17472           skrivtegn(navn.iaf,k,'0'+ i mod 10);
  4 17473           open(zdummy,8,navn,0); close(zdummy,true);
  4 17474           k:= monitor(42,zdummy,0,ia);
  4 17475           if k=0 then tofrom(terminal_navn.ref,ia.doc,8)
  4 17476           else tofrom(terminal_navn.ref,navn,8);
  4 17477           operatør_auto_include(i):= false;
  4 17478           sætbit_ia(alle_operatører,i,1);
  4 17479         end;
  3 17480       
  3 17480         movestring(navn,1,<:garage0:>);
  3 17481         for i:= 1 step 1 until max_antal_garageterminaler do
  3 17482         begin
  4 17483           ref:=(i-1)*8; k:=7;
  4 17484           if i>9 then skrivtegn(navn.iaf, k, '0' + i//10);
  4 17485           skrivtegn(navn.iaf,k,'0'+ i mod 10);
  4 17486           open(zdummy,8,navn,0); close(zdummy,true);
  4 17487           k:= monitor(42,zdummy,0,ia);
  4 17488           if k=0 then tofrom(garage_terminal_navn.ref,ia.doc,8)
  4 17489           else tofrom(garage_terminal_navn.ref,navn,8);
  4 17490           garage_auto_include(i):= false;
  4 17491         end;
  3 17492       end;
  2 17493       
  2 17493       for i:= 1 step 1 until max_antal_taleveje do
  2 17494         sætbit_ia(alle_taleveje,i,1);
  2 17495       for i:= 1 step 1 until findfpparam(<:operatør:>,true,ia) do
  2 17496         if 1<=ia(i) and ia(i)<=max_antal_operatører then
  2 17497           operatør_auto_include(ia(i)):= true;
  2 17498       for i:= 1 step 1 until findfpparam(<:garage:>,true,ia) do
  2 17499         if 1<=ia(i) and ia(i)<=max_antal_garageterminaler then
  2 17500           garage_auto_include(ia(i)):= true;
  2 17501       
  2 17501       
  2 17501       \f

  2 17501       message fil_init side 1 - 801030/jg;
  2 17502       
  2 17502       begin integer i,antz,tz,s;
  3 17503             real array field raf;
  3 17504       
  3 17504       filskrevet:=fillæst:=0;                                    <*fil*>
  3 17505       dbsegmax:= 2**18-1;
  3 17506       
  3 17506       tz:=dbantez+dbantsz; antz:=tz+dbanttz;
  3 17507       for i:=1 step 1 until dbantez do
  3 17508         begin open(fil(i),4,<::>,0); close(fil(i),false) end;
  3 17509       for i:=dbantez+1 step 1 until tz do
  3 17510         open(fil(i),4,dbsnavn,0);
  3 17511       for i:=tz+1 step 1 until antz do
  3 17512         open(fil(i),4,dbtnavn,0);
  3 17513       
  3 17513       for i:=1 step 1 until dbantez do                        <*dbkatz*>
  3 17514         dbkatz(i,1):=dbkatz(i,2):=0;
  3 17515       for i:=dbantez+1 step 1 until tz do
  3 17516         begin dbkatz(i,1):=2 shift 10;dbkatz(i,2):=0 end;
  3 17517       for i:=tz+1 step 1 until antz do
  3 17518         begin dbkatz(i,1):=1 shift 10;dbkatz(i,2):=i+1 end;
  3 17519       dbkatz(antz,2):=tz+1;
  3 17520       dbsidstetz:=antz;
  3 17521       dbsidstesz:=tz;
  3 17522       
  3 17522       for i:=1 step 1 until dbmaxef do                        <*dbkate*>
  3 17523         begin integer j;
  4 17524           for j:=1,3 step 1 until 6 do
  4 17525             dbkate(i,j):=0;
  4 17526           dbkate(i,2):=i+1;
  4 17527         end;
  3 17528       dbkate(dbmaxef,2):=0;
  3 17529       dbkatefri:=1;
  3 17530       dbantef:=0;
  3 17531       \f

  3 17531       message fil_init side 2 - 801030/jg;
  3 17532       
  3 17532       
  3 17532       for i:= 1 step 1 until dbmaxsf do                       <*dbkats*>
  3 17533         begin
  4 17534           dbkats(i,1):=0;
  4 17535           dbkats(i,2):=i+1;
  4 17536         end;
  3 17537       dbkats(dbmaxsf,2):=0;
  3 17538       dbkatsfri:=1;
  3 17539       dbantsf:=0;
  3 17540       
  3 17540       for i:=1 step 1 until dbmaxb do                         <*dbkatb*>
  3 17541         dbkatb(i):=false add (i+1);
  3 17542       dbkatb(dbmaxb):=false;
  3 17543       dbkatbfri:=1;
  3 17544       dbantb:=0;
  3 17545       raf:=4;
  3 17546       for i:=1 step 1 until dbmaxtf do
  3 17547         begin
  4 17548           inrec6(fil(antz),4);
  4 17549           dbkatt.raf(i):=fil(antz,1);
  4 17550         end;
  3 17551       inrec6(fil(antz),4);
  3 17552       if fil(antz,1)<>real extend 8388607 shift 24 add 8388607 then
  3 17553         fejl_reaktion(1,dbmaxtf,<:tabelfil init:>,0);
  3 17554       setposition(fil(antz),0,0);
  3 17555       
  3 17555       end filsystem;
  2 17556       \f

  2 17556       message fil_init side 3 - 810209/cl;
  2 17557       
  2 17557       bs_kats_fri:= nextsem;
  2 17558       <*+3*> skriv_new_sem(out,1,bs_kats_fri,<:bs-kats-fri:>);
  2 17559       <*-3*>
  2 17560       bs_kate_fri:= nextsem;
  2 17561       <*+3*> skriv_new_sem(out,1,bs_kate_fri,<:bs-kate-fri:>);
  2 17562       <*-3*>
  2 17563       cs_opret_fil:= nextsemch;
  2 17564       <*+3*> skriv_new_sem(out,3,cs_opret_fil,<:cs-opret-fil:>);
  2 17565       <*-3*>
  2 17566       cs_tilknyt_fil:= nextsemch;
  2 17567       <*+3*> skriv_new_sem(out,3,cs_tilknyt_fil,<:cs-tilknyt-fil:>);
  2 17568       <*-3*>
  2 17569       cs_frigiv_fil:= nextsemch;
  2 17570       <*+3*> skriv_new_sem(out,3,cs_frigiv_fil,<:cs-frigiv-fil:>);
  2 17571       <*-3*>
  2 17572       cs_slet_fil:= nextsemch;
  2 17573       <*+3*> skriv_new_sem(out,3,cs_slet_fil,<:cs-slet-fil:>);
  2 17574       <*-3*>
  2 17575       cs_opret_spoolfil:= nextsemch;
  2 17576       <*+3*> skriv_new_sem(out,3,cs_opret_spoolfil,<:cs-opret-spoolfil:>);
  2 17577       <*-3*>
  2 17578       cs_opret_eksternfil:= nextsemch;
  2 17579       <*+3*> skriv_new_sem(out,3,cs_opret_eksternfil,<:cs-opret-ekst-fil:>);
  2 17580       <*-3*>
  2 17581       \f

  2 17581       message fil_init side 4 810209/cl;
  2 17582       
  2 17582       
  2 17582       <* initialisering af filsystemcoroutiner *>
  2 17583       
  2 17583       i:= nextcoru(001,10,true);
  2 17584       j:= newactivity(i,0,opretfil);
  2 17585       <*+3*> skriv_newactivity(out,i,j);
  2 17586       <*-3*>
  2 17587       
  2 17587       i:= nextcoru(002,10,true);
  2 17588       j:= newactivity(i,0,tilknytfil);
  2 17589       <*+3*> skriv_newactivity(out,i,j);
  2 17590       <*-3*>
  2 17591       
  2 17591       i:= nextcoru(003,10,true);
  2 17592       j:= newactivity(i,0,frigivfil);
  2 17593       <*+3*> skriv_newactivity(out,i,j);
  2 17594       <*-3*>
  2 17595       
  2 17595       i:= nextcoru(004,10,true);
  2 17596       j:= newactivity(i,0,sletfil);
  2 17597       <*+3*> skriv_newactivity(out,i,j);
  2 17598       <*-3*>
  2 17599       
  2 17599       i:= nextcoru(005,10,true);
  2 17600       j:= newactivity(i,0,opretspoolfil);
  2 17601       <*+3*> skriv_newactivity(out,i,j);
  2 17602       <*-3*>
  2 17603       
  2 17603       i:= nextcoru(006,10,true);
  2 17604       j:= newactivity(i,0,opreteksternfil);
  2 17605       <*+3*> skriv_newactivity(out,i,j);
  2 17606       <*-3*>
  2 17607       \f

  2 17607       message attention_initialisering side 1 - 850820/cl;
  2 17608       
  2 17608         tf_kommandotabel:= 1 shift 10 + 1;
  2 17609       
  2 17609         begin
  3 17610           integer i, s, zno;
  3 17611           zone z(128,1,stderror);
  3 17612           integer array fdim(1:8);
  3 17613       
  3 17613           fdim(4):= tf_kommandotabel;
  3 17614           hentfildim(fdim);
  3 17615       
  3 17615           open(z,4,<:htkommando:>,0);
  3 17616           for i:= 1 step 1 until fdim(3) do
  3 17617           begin
  4 17618             inrec6(z,512);
  4 17619             s:= skrivfil(tf_kommandotabel,i,zno);
  4 17620             if s<>0 then fejlreaktion(6,s,<:kommandotabelinit:>,0);
  4 17621             tofrom(fil(zno),z,512);
  4 17622           end;
  3 17623           close(z,true);
  3 17624         end;
  2 17625       \f

  2 17625       message attention_initialisering side 1a - 810428/hko;
  2 17626       
  2 17626         for j:= system(3,i,terminal_tab) step 1 until i do
  2 17627           terminal_tab(j):= 0;
  2 17628       
  2 17628         cs_att_pulje:=next_semch;
  2 17629       <*+3*> skriv_new_sem(out,3,cs_att_pulje,<:cs-att-pulje:>);
  2 17630       <*-3*>
  2 17631       
  2 17631         bs_fortsæt_adgang:= nextsem;
  2 17632       <*+3*> skriv_new_sem(out,1,bs_fortsæt_adgang,<:bs-fortsæt-adgang:>);
  2 17633       <*-3*>
  2 17634         signalbin(bs_fortsæt_adgang);
  2 17635       
  2 17635         for i:= 1,
  2 17636             1 step 1 until max_antal_operatører,
  2 17637             1 step 1 until max_antal_garageterminaler do
  2 17638       
  2 17638         <* initialisering af pulje med attention_operationer *>
  2 17639       
  2 17639           signalch(cs_att_pulje,    <* pulje_semafor   *>
  2 17640                    nextop(data+att_op_længde), <* næste_operation *>
  2 17641                    gen_optype);
  2 17642       
  2 17642         att_proc_ref:=next_proc_ext(system(6<* own process*>,i,ra));
  2 17643       
  2 17643         i:=next_coru(010,<*ident*>
  2 17644                        2,<*prioritet*>
  2 17645                      true<*test_maske*>);
  2 17646         j:=newactivity(        i, <*activityno     *>
  2 17647                                0, <*ikke virtual   *>
  2 17648                        attention);<*ingen parametre*>
  2 17649       
  2 17649       <*+3*>skriv_newactivity(out,i,j);
  2 17650       <*-3*>
  2 17651       
  2 17651       \f

  2 17651       message io_initialisering side 1 - 810507/hko;
  2 17652       
  2 17652         io_spoolfil:= 1028;
  2 17653         begin
  3 17654           integer array fdim(1:8);
  3 17655           fdim(4):= io_spoolfil;
  3 17656           hent_fildim(fdim);
  3 17657           io_spool_postantal:= fdim(1);
  3 17658           io_spool_postlængde:= fdim(2);
  3 17659         end;
  2 17660       
  2 17660         io_spool_post:= 4;
  2 17661       
  2 17661           cs_io:= next_semch;
  2 17662       <*+3*> skriv_new_sem(out,3,cs_io,<:cs-io:>);
  2 17663       <*-3*>
  2 17664       
  2 17664           i:= next_coru(100,<*ident *>
  2 17665                          5,<*prioritet *>
  2 17666                         true<*test_maske*>);
  2 17667       
  2 17667           j:= new_activity(   i,
  2 17668                               0,
  2 17669                            h_io);
  2 17670       
  2 17670       <*+3*>skriv_newactivity(out,i,j);
  2 17671       <*-3*>
  2 17672         cs_io_komm:= next_semch;
  2 17673       <*+3*> skriv_new_sem(out,3,cs_io_komm,<:cs-io-komm:>);
  2 17674       <*-3*>
  2 17675       
  2 17675         i:= next_coru(101,<*ident*>
  2 17676                        10,<*prioritet*>
  2 17677                      true <*testmaske*>);
  2 17678         j:= new_activity(          i,
  2 17679                                    0,
  2 17680                          io_komm);<*ingen parametre*>
  2 17681       
  2 17681       <*+3*>skriv_newactivity(out,i,j);
  2 17682       <*-3*>
  2 17683       \f

  2 17683       message io_initialisering side 2 - 810520/hko/cl;
  2 17684       
  2 17684         bs_zio_adgang:= next_sem;
  2 17685       <*+3*> skriv_new_sem(out,1,bs_zio_adgang,<:bs-zio-adgang:>);
  2 17686       <*-3*>
  2 17687         signal_bin(bs_zio_adgang);
  2 17688       
  2 17688         cs_io_spool:= next_semch;
  2 17689       <*+3*> skriv_new_sem(out,3,cs_io_spool,<:cs-io-spool:>);
  2 17690       <*-3*>
  2 17691       
  2 17691         cs_io_fil:=next_semch;
  2 17692       <*+3*> skriv_new_sem(out,3,cs_io_fil,<:cs-io-fil:>);
  2 17693       <*-3*>
  2 17694         signal_ch(cs_io_fil,next_op(data+18),gen_optype);
  2 17695       
  2 17695         ss_io_spool_fulde:= next_sem;
  2 17696       <*+3*> skriv_new_sem(out,2,ss_io_spool_fulde,<:ss-io-spool-fulde:>);
  2 17697       <*-3*>
  2 17698       
  2 17698         ss_io_spool_tomme:= next_sem;
  2 17699       <*+3*> skriv_new_sem(out,2,ss_io_spool_tomme,<:ss-io-spool-tomme:>);
  2 17700       <*-3*>
  2 17701         for i:= 1 step 1 until io_spool_postantal do
  2 17702           signal(ss_io_spool_tomme);
  2 17703       \f

  2 17703       message io_initialisering side 3 - 880901/cl;
  2 17704       
  2 17704         i:= next_coru(102,
  2 17705                        5,
  2 17706                       true);
  2 17707         j:= new_activity(i,0,io_spool);
  2 17708       
  2 17708       <*+3*>skriv_newactivity(out,i,j);
  2 17709       <*-3*>
  2 17710       
  2 17710         i:= next_coru(103,
  2 17711                        10,
  2 17712                       true);
  2 17713         j:= new_activity(i,0,io_spon);
  2 17714       
  2 17714       <*+3*>skriv_newactivity(out,i,j);
  2 17715       <*-3*>
  2 17716       
  2 17716           cs_io_medd:= next_semch;
  2 17717       <*+3*> skriv_new_sem(out,3,cs_io_medd,<:cs-io-medd:>);
  2 17718       <*-3*>
  2 17719       
  2 17719           i:= next_coru(104,<*ident *>
  2 17720                         10,<*prioritet *>
  2 17721                         true<*test_maske*>);
  2 17722       
  2 17722           j:= new_activity(   i,
  2 17723                               0,
  2 17724                         io_medd);
  2 17725       
  2 17725       <*+3*>skriv_newactivity(out,i,j);
  2 17726       <*-3*>
  2 17727       
  2 17727           cs_io_nulstil:= next_semch;
  2 17728       <*+3*> skriv_new_sem(out,3,cs_io_nulstil,<:cs-io-nulstil:>);
  2 17729       <*-3*>
  2 17730       
  2 17730           i:= next_coru(105,<*ident *>
  2 17731                         10,<*prioritet *>
  2 17732                         true<*test_maske*>);
  2 17733       
  2 17733           j:= new_activity(   i,
  2 17734                               0,
  2 17735                         io_nulstil_tællere);
  2 17736       
  2 17736       <*+3*>skriv_newactivity(out,i,j);
  2 17737       <*-3*>
  2 17738       
  2 17738         open(z_io,8,konsol_navn,1 shift 21 + 1 shift 9);
  2 17739         i:= monitor(8)reserve process:(z_io,0,ia);
  2 17740         if i <> 0 then
  2 17741         begin
  3 17742           fejlreaktion(4<*monitor result*>,+i,<:io reservation:>,0);
  3 17743         end
  2 17744         else
  2 17745         begin
  3 17746           ref:= 0;
  3 17747           terminal_tab.ref.terminal_tilstand:= 0;
  3 17748           write(z_io,"nl",3,"sp",10,"*",15,<: busradio startet :>,
  3 17749                   <<zddddd>,systime(5,0.0,r),".",1,r,
  3 17750                   "sp",1,"*",15,"nl",1);
  3 17751           setposition(z_io,0,0);
  3 17752         end;
  2 17753       \f

  2 17753       message operatør_initialisering side 1 - 810520/hko;
  2 17754       
  2 17754         top_bpl_gruppe:= 64;
  2 17755         
  2 17755         bpl_navn(0):= long<::>;
  2 17756         for i:= 1 step 1 until 127 do
  2 17757         begin
  3 17758           k:= læsfil(tf_bpl_navne,i,j);
  3 17759           if k<>0 then fejlreaktion(5,k,<:bplnavne init:>,0);
  3 17760           bpl_navn(i):= (long fil(j,1)) shift (-8) shift 8;
  3 17761           if i<=max_antal_operatører then
  3 17762             operatør_auto_include(i):= false add (fil(j,1) extract 8);
  3 17763           if i>64 and fil(j,1)<>real<::> and i>top_bpl_gruppe then
  3 17764             top_bpl_gruppe:= i;
  3 17765         end;
  2 17766       
  2 17766         for i:= 0 step 1 until 64 do
  2 17767         begin
  3 17768           iaf:= i*op_maske_lgd;
  3 17769           tofrom(bpl_def.iaf,ingen_operatører,op_maske_lgd);
  3 17770           bpl_tilst(i,1):= bpl_tilst(i,2):= 0;
  3 17771           if 1<=i and i<= max_antal_operatører then
  3 17772           begin
  4 17773             bpl_tilst(i,2):= 1;
  4 17774             sætbit_ia(bpl_def.iaf,i,1);
  4 17775           end;
  3 17776         end;
  2 17777         for i:= 65 step 1 until 127 do
  2 17778         begin
  3 17779           k:= læsfil(tf_bpl_def,i-64,j);
  3 17780           if k<>0 then fejlreaktion(5,k,<:bpldef init:>,0);
  3 17781           iaf:= i*op_maske_lgd;
  3 17782           tofrom(bpl_def.iaf,fil(j),op_maske_lgd);
  3 17783           bpl_tilst(i,1):= 0;
  3 17784           bpl_tilst(i,2):= fil(j,2) extract 24;
  3 17785         end;
  2 17786       
  2 17786         for k:= 0,1,2,3 do operatør_stop(0,k):= 0;
  2 17787         iaf:= 0;
  2 17788         for i:= 1 step 1 until max_antal_operatører do
  2 17789         begin
  3 17790           k:= læsfil(tf_stoptabel,i,j);
  3 17791           if k<>0 then fejlreaktion(5,k,<:stoptabel init:>,0);
  3 17792           operatør_stop(i,0):= i;
  3 17793           for k:= 1,2,3 do
  3 17794             operatør_stop(i,k):= fil(j).iaf(k+1);
  3 17795           ant_i_opkø(i):= 0;
  3 17796         end;
  2 17797       
  2 17797         tofrom(operatørmaske,ingen_operatører,op_maske_lgd);
  2 17798         for i:= 0 step 1 until max_antal_operatører do op_talevej(i):= 0;
  2 17799         for i:= 0 step 1 until max_antal_taleveje do tv_operatør(i):= 0;
  2 17800         sidste_tv_brugt:= max_antal_taleveje;
  2 17801       
  2 17801         for i:= 1 step 1 until max_antal_operatører*(opk_alarm_tab_lgd//2) do
  2 17802           opk_alarm(i):= 0;
  2 17803         for i:= 1 step 1 until max_antal_operatører do
  2 17804         begin
  3 17805           integer array field tab;
  3 17806       
  3 17806           k:= læsfil(tf_alarmlgd,i,j);
  3 17807           if k<>0 then fejlreaktion(5,k,<:alarmlængde init:>,0);
  3 17808           tab:= (i-1)*opk_alarm_tab_lgd;
  3 17809           opk_alarm.tab.alarm_lgd:= fil(j).iaf(1);
  3 17810           opk_alarm.tab.alarm_start:= 0.0;
  3 17811         end;
  2 17812       
  2 17812         op_spool_kilde:= 2;
  2 17813         op_spool_tid  := 6;
  2 17814         op_spool_text := 6;
  2 17815         begin
  3 17816           long array field laf1, laf2;
  3 17817           laf2:= 4; laf1:= 0;
  3 17818           op_spool_buf.laf1(1):= long<::>;
  3 17819           tofrom(op_spool_buf.laf2,op_spool_buf.laf1,
  3 17820             op_spool_postantal*op_spool_postlgd-4);
  3 17821         end;
  2 17822       
  2 17822         k:=læsfil(1033,1,j);
  2 17823         systime(1,0.0,r);
  2 17824         if k<>0 then fejlreaktion(5,k,<:CQF-tabel init:>,0);
  2 17825         for i:= 1 step 1 until max_cqf do
  2 17826         begin
  3 17827           ref:= (i-1)*cqf_lgd; iaf:= (i-1)*8;
  3 17828           tofrom(cqf_tabel.ref,fil(j).iaf,8);
  3 17829           cqf_tabel.ref.cqf_næste_tid:= 
  3 17830             (if cqf_tabel.ref.cqf_bus > 0 then (r + 5*60.0) else real<::>);
  3 17831           cqf_tabel.ref.cqf_ok_tid:= real<::>;
  3 17832         end;
  2 17833         op_cqf_tab_ændret:= true;
  2 17834       
  2 17834         laf:= raf:= 0;
  2 17835         open(z_tv_in,8,taleswitch_in_navn,1 shift 21 + 1 shift 9);
  2 17836         i:= monitor(8)reserve_process:(z_tv_in,0,ia);
  2 17837         j:= 1;
  2 17838         if i<>0 then 
  2 17839           fejlreaktion(4,i,string taleswitch_in_navn.raf(increase(j)),1);
  2 17840         open(z_tv_out,4 shift 12 + 8,taleswitch_out_navn,1 shift 9);
  2 17841         i:= monitor(8)reserve_process:(z_tv_in,0,ia);
  2 17842         j:= 1;
  2 17843         if i<>0 then 
  2 17844           fejlreaktion(4,i,string taleswitch_out_navn.raf(increase(j)),1);
  2 17845       
  2 17845         ia(1):= 3; <*canonical*>
  2 17846         ia(2):= 0; <*no echo*>
  2 17847         ia(3):= 0; <*prompt*>
  2 17848         ia(4):= 2; <*timeout*>
  2 17849         setcspterm(taleswitch_in_navn.laf,ia);
  2 17850         setcspterm(taleswitch_out_navn.laf,ia);
  2 17851       
  2 17851         cs_op:= next_semch;
  2 17852       
  2 17852       <*+3*>skriv_new_sem(out,3,cs_op,<:cs-op(hovedmodul):>);
  2 17853       <*-3*>
  2 17854       
  2 17854         cs_op_retur:= next_semch;
  2 17855       
  2 17855       <*+3*>skriv_new_sem(out,3,cs_op_retur,<:cs_op_retur:>);
  2 17856       <*-3*>
  2 17857       
  2 17857         i:= nextcoru(200,<*ident*>
  2 17858                       10,<*prioitet*>
  2 17859                      true<*test_maske*>);
  2 17860       
  2 17860         j:= new_activity(         i,
  2 17861                                   0,
  2 17862                          h_operatør);
  2 17863       
  2 17863       <*+3*>skriv_newactivity(out,i,j);
  2 17864       <*-3*>
  2 17865       \f

  2 17865       message operatør_initialisering side 2 - 810520/hko;
  2 17866       
  2 17866         for k:= 1 step 1 until max_antal_operatører do
  2 17867         begin
  3 17868           ref:= (k-1)*8;
  3 17869           open(z_op(k),8,terminal_navn.ref,1 shift 21 +1 shift 9);
  3 17870           i:= monitor(4) processaddress:(z_op(k),0,ia);
  3 17871           ref:=k*terminal_beskr_længde;
  3 17872           if i = 0 then
  3 17873           begin
  4 17874             fejlreaktion(3<*programfejl*>,k,<:skærm eksisterer ikke:>,1);
  4 17875             terminal_tab.ref.terminal_tilstand:= 4 shift 21;
  4 17876           end
  3 17877           else
  3 17878           begin
  4 17879             terminal_tab.ref.terminal_tilstand:= 7 shift 21;<*ej knyttet*>
  4 17880           end;
  3 17881       
  3 17881           cs_operatør(k):= next_semch;
  3 17882       <*+3*>skriv_new_sem(out,3,cs_operatør(k),<:cs-operatør( ):>);
  3 17883       <*-3*>
  3 17884       
  3 17884           cs_op_fil(k):= nextsemch;
  3 17885       <*+3*> skriv_new_sem(out,3,cs_op_fil(k),<:cs-op-fil( ):>);
  3 17886       <*-3*>
  3 17887           signalch(cs_op_fil(k),nextop(filoplængde),op_optype);
  3 17888       
  3 17888           i:= next_coru(200+k,<*ident*>
  3 17889                            10,<*prioitet*>
  3 17890                           true<*testmaske*>);
  3 17891           j:= new_activity(       i,
  3 17892                                   0,
  3 17893                            operatør,k);
  3 17894       
  3 17894       <*+3*>skriv_newactivity(out,i,j);
  3 17895       <*-3*>
  3 17896         end;
  2 17897       
  2 17897         cs_cqf:= next_semch;
  2 17898       <*+3*>skriv_new_sem(out,3,cs_cqf,<:cs-cqf:>);
  2 17899       <*-3*>
  2 17900       
  2 17900         signalch(cs_cqf,nextop(60),true);
  2 17901       
  2 17901         i:= next_coru(292, <*ident*>
  2 17902                       10,  <*prioritet*>
  2 17903                       true <*testmaske*>);
  2 17904         j:= new_activity(         i,
  2 17905                                   0,
  2 17906                          op_cqftest);
  2 17907       <*+3*>skriv_new_activity(out,i,j);
  2 17908       <*-3*>
  2 17909       
  2 17909         cs_op_spool:= next_semch;
  2 17910       <*+3*>skriv_new_sem(out,3,cs_op_spool,<:cs-op-spool:>);
  2 17911       <*-3*>
  2 17912       
  2 17912         cs_op_medd:= next_semch;
  2 17913       <*+3*>skriv_new_sem(out,3,cs_op_medd,<:cs-op-medd:>);
  2 17914       <*-3*>
  2 17915       
  2 17915         ss_op_spool_tomme:= next_sem;
  2 17916       <*+3*>skriv_new_sem(out,2,ss_op_spool_tomme,<:ss-op-spool-tomme:>);
  2 17917       <*-3*>
  2 17918         for i:= 1 step 1 until op_spool_postantal do signal(ss_op_spool_tomme);
  2 17919       
  2 17919         ss_op_spool_fulde:= next_sem;
  2 17920       <*+3*>skriv_new_sem(out,2,ss_op_spool_fulde,<:ss-op-spool-fulde:>);
  2 17921       <*-3*>
  2 17922       
  2 17922         signalch(cs_op_medd,nextop(data+op_spool_postlgd),gen_optype);
  2 17923       
  2 17923         i:= next_coru(293, <*ident*>
  2 17924                       10,  <*prioritet*>
  2 17925                       true <*testmaske*>);
  2 17926         j:= new_activity(         i,
  2 17927                                   0,
  2 17928                          op_spool);
  2 17929       <*+3*>skriv_new_activity(out,i,j);
  2 17930       <*-3*>
  2 17931       
  2 17931         i:= next_coru(294, <*ident*>
  2 17932                       10,  <*prioritet*>
  2 17933                       true <*testmaske*>);
  2 17934         j:= new_activity(         i,
  2 17935                                   0,
  2 17936                          op_medd);
  2 17937       <*+3*>skriv_new_activity(out,i,j);
  2 17938       <*-3*>
  2 17939       
  2 17939         cs_op_iomedd:= next_semch;
  2 17940       <*+3*>skriv_new_sem(out,3,cs_op_iomedd,<:cs-op-iomedd:>);
  2 17941       <*-3*>
  2 17942       
  2 17942         bs_opk_alarm:= next_sem;
  2 17943       <*+3*>skriv_new_sem(out,1,bs_opk_alarm,<:bs-opk-alarm:>);
  2 17944       <*-3*>
  2 17945       
  2 17945         cs_opk_alarm:= next_semch;
  2 17946       <*+3*>skriv_new_sem(out,3,cs_opk_alarm,<:cs-opk-alarm:>);
  2 17947       <*-3*>
  2 17948       
  2 17948         cs_opk_alarm_ur:= next_semch;
  2 17949       <*+3*>skriv_new_sem(out,3,cs_opk_alarm_ur,<:cs-opk-alarm-ur:>);
  2 17950       <*-3*>
  2 17951       
  2 17951         cs_opk_alarm_ur_ret:= next_semch;
  2 17952       <*+3*>skriv_new_sem(out,3,cs_opk_alarm_ur_ret,<:cs-opk-alarm-ur-ret:>);
  2 17953       <*-3*>
  2 17954       
  2 17954         cs_tvswitch_adgang:= next_semch;
  2 17955       <*+3*>skriv_new_sem(out,3,cs_tvswitch_adgang,<:cs-tvswitch-adgang:>);
  2 17956       <*-3*>
  2 17957       
  2 17957         cs_tv_switch_input:= next_semch;
  2 17958       <*+3*>skriv_new_sem(out,3,cs_tv_switch_input,<:cs-tvswitch-input:>);
  2 17959       <*-3*>
  2 17960       
  2 17960         cs_tv_switch_adm:= next_semch;
  2 17961       <*+3*>skriv_new_sem(out,3,cs_tv_switch_adm,<:cs-tvswitch-adm:>);
  2 17962       <*-3*>
  2 17963       
  2 17963         cs_talevejsswitch:= next_semch;
  2 17964       <*+3*>skriv_new_sem(out,3,cs_talevejsswitch,<:cs-talevejsswitch:>);
  2 17965       <*-3*>
  2 17966       
  2 17966         signalch(cs_op_iomedd,nextop(60),gen_optype);
  2 17967       
  2 17967         iaf:= nextop(data+128);
  2 17968         if testbit22 then
  2 17969           signal_ch(cs_tv_switch_adgang,iaf,op_optype)
  2 17970         else
  2 17971         begin
  3 17972           startoperation(iaf,298,cs_tv_switch_adgang,'I' shift 12 + 44);
  3 17973           signal_ch(cs_talevejsswitch,iaf,op_optype);
  3 17974         end;
  2 17975       
  2 17975         i:= next_coru(295, <*ident*>
  2 17976                       8,   <*prioritet*>
  2 17977                       true <*testmaske*>);
  2 17978         j:= new_activity(         i,
  2 17979                                   0,
  2 17980                          alarmur);
  2 17981       <*+3*>skriv_new_activity(out,i,j);
  2 17982       <*-3*>
  2 17983       
  2 17983         signal_ch(cs_opk_alarm_ur_ret,nextop(data),op_optype);
  2 17984       
  2 17984         i:= next_coru(296, <*ident*>
  2 17985                       8,   <*prioritet*>
  2 17986                       true <*testmaske*>);
  2 17987         j:= new_activity(         i,
  2 17988                                   0,
  2 17989                          opkaldsalarmer);
  2 17990       <*+3*>skriv_new_activity(out,i,j);
  2 17991       <*-3*>
  2 17992       
  2 17992         i:= next_coru(297, <*ident*>
  2 17993                       3,  <*prioritet*>
  2 17994                       true <*testmaske*>);
  2 17995         j:= new_activity(         i,
  2 17996                                   0,
  2 17997                          tv_switch_input);
  2 17998       <*+3*>skriv_new_activity(out,i,j);
  2 17999       <*-3*>
  2 18000       
  2 18000         for i:= 1,2 do
  2 18001           signalch(cs_tvswitch_input,nextop(data+256),op_optype);
  2 18002       
  2 18002         i:= next_coru(298, <*ident*>
  2 18003                       20,  <*prioritet*>
  2 18004                       true <*testmaske*>);
  2 18005         j:= new_activity(         i,
  2 18006                                   0,
  2 18007                          tv_switch_adm);
  2 18008       <*+3*>skriv_new_activity(out,i,j);
  2 18009       <*-3*>
  2 18010       
  2 18010         i:= next_coru(299, <*ident*>
  2 18011                       3,   <*prioritet*>
  2 18012                       true <*testmaske*>);
  2 18013         j:= new_activity(         i,
  2 18014                                   0,
  2 18015                          talevejsswitch);
  2 18016       <*+3*>skriv_new_activity(out,i,j);
  2 18017       <*-3*>
  2 18018       \f

  2 18018       message garage_initialisering side 1 - 810521/hko;
  2 18019       
  2 18019         cs_gar:= next_semch;
  2 18020       <*+3*>skriv_new_sem(out,3,cs_gar,<:cs-gar(hovedmodul):>);
  2 18021       <*-3*>
  2 18022       
  2 18022         i:= next_coru(300,<*ident*>
  2 18023                        10,<*prioritet*>
  2 18024                       true<*test_maske*>);
  2 18025       
  2 18025         j:= new_activity(       i,
  2 18026                                 0,
  2 18027                          h_garage);
  2 18028       
  2 18028       <*+3*>skriv_newactivity(out,i,j);
  2 18029       <*-3*>
  2 18030       
  2 18030         for k:= 1 step 1 until max_antal_garageterminaler do
  2 18031         begin
  3 18032           ref:= (k-1)*8;
  3 18033           open(z_gar(k),8,garage_terminal_navn.raf,1 shift 21 + 1 shift 9);
  3 18034           ref:= (max_antal_operatører+k)*terminal_beskr_længde;
  3 18035           i:=monitor(4)process address:(z_gar(k),0,ia);
  3 18036           if i = 0 then
  3 18037           begin
  4 18038             fejlreaktion(4<*monitor result*>,k,<:garageterminal eksisterer ikke:>,1);
  4 18039             terminal_tab.ref.terminal_tilstand:= 4 shift 21;
  4 18040           end
  3 18041           else
  3 18042           begin
  4 18043             terminal_tab.ref.terminal_tilstand:= 
  4 18044               if garage_auto_include(k) then 0 else 7 shift 21;
  4 18045             if garage_auto_include(k) then
  4 18046               monitor(8)reserve:(z_gar(k),0,ia);
  4 18047           end;
  3 18048           cs_garage(k):= next_semch;
  3 18049       <*+3*>skriv_new_sem(out,3,cs_garage(k),<:cs-garage( ):>);
  3 18050       <*-3*>
  3 18051           i:= next_coru(300+k,<*ident*>
  3 18052                            10,<*prioritet*>
  3 18053                          true <*testmaske*>);
  3 18054           j:= new_activity(     i,
  3 18055                                 0,
  3 18056                            garage,k);
  3 18057       
  3 18057       <*+3*>skriv_newactivity(out,i,j);
  3 18058       <*-3*>
  3 18059       
  3 18059         end;
  2 18060       \f

  2 18060       message radio_initialisering side 1 - 820301/hko;
  2 18061       
  2 18061         cs_rad:= next_semch;
  2 18062       <*+3*>skriv_new_sem(out,3,cs_rad,<:cs_rad(h_mod):>);
  2 18063       <*-3*>
  2 18064       
  2 18064         i:= next_coru(400,<*ident*>
  2 18065                        10,<*prioritet*>
  2 18066                       true<*test_maske*>);
  2 18067         j:= new_activity(      i,
  2 18068                                0,
  2 18069                          h_radio);
  2 18070       <*+3*>skriv_newactivity(out,i,j);
  2 18071       <*-3*>
  2 18072       
  2 18072         opkalds_kø_ledige:= max_antal_mobilopkald;
  2 18073         nødopkald_brugt:= 0;
  2 18074         læsfil(1034,1,i);
  2 18075         tofrom(radio_områdetabel,fil(i),max_antal_områder*2);
  2 18076       
  2 18076         opkald_meldt:= opkaldskø_postlængde - op_maske_lgd;
  2 18077         for i:= system(3,j,opkaldskø) step 1 until j do
  2 18078           opkaldskø(i):= 0;
  2 18079         første_frie_opkald:=opkaldskø_postlængde;
  2 18080         første_opkald:=sidste_opkald:=
  2 18081         første_nødopkald:=sidste_nødopkald:=j:=0;
  2 18082       
  2 18082         for i:=1 step 1 until max_antal_mobil_opkald -1 do
  2 18083         begin
  3 18084           ref:=i*opkaldskø_postlængde;
  3 18085           opkaldskø.ref(1):=j:=j shift 12 +ref +opkaldskø_postlængde;
  3 18086         end;
  2 18087         ref:=ref+opkaldskø_postlængde;
  2 18088         opkaldskø.ref(1):=j shift 12;
  2 18089       
  2 18089         for ref:= 0 step 512 until (max_linienr//768*512) do
  2 18090         begin
  3 18091           i:= læs_fil(1035,ref//512+1,j);
  3 18092           if i <> 0 then
  3 18093             fejlreaktion(5<*læs_fil*>,i,<:liniefordelingstabel:>,0);
  3 18094           tofrom(radio_linietabel.ref,fil(j),
  3 18095           if (((max_linienr+1 - (ref//2*3))+2)//3*2) > 512 then 512
  3 18096           else ((max_linienr+1 - (ref//2*3))+2)//3*2);
  3 18097         end;
  2 18098       
  2 18098         for i:= system(3,j,kanal_tab) step 1 until j do
  2 18099           kanal_tab(i):= 0;
  2 18100         kanal_tilstand:= 2;
  2 18101         kanal_id1:= 4;
  2 18102         kanal_id2:= 6;
  2 18103         kanal_spec:= 8;
  2 18104         kanal_alt_id1:= 10;
  2 18105         kanal_alt_id2:= 12;
  2 18106         kanal_mon_maske:= 12;
  2 18107         kanal_alarm:= kanal_mon_maske+tv_maske_lgd;
  2 18108       
  2 18108         for i:= 1 step 1 until max_antal_kanaler do
  2 18109         begin
  3 18110           ref:= (i-1)*kanalbeskrlængde;
  3 18111           sæthexciffer(kanal_tab.ref,3,15);
  3 18112           if kanal_id(i) shift (-5) extract 3 = 2 or
  3 18113              kanal_id(i) shift (-5) extract 3 = 3 and
  3 18114              radio_id(kanal_id(i) extract 5)<=3
  3 18115           then
  3 18116           begin
  4 18117             sætbiti(kanal_tab.ref.kanal_tilstand,11,1);
  4 18118             sætbiti(kanal_tab.ref.kanal_tilstand,10,1);
  4 18119           end;
  3 18120         end;
  2 18121         tofrom(opkaldsflag,alle_operatører,op_maske_lgd);
  2 18122         tofrom(samtaleflag,ingen_operatører,op_maske_lgd);
  2 18123         tofrom(hookoff_maske,ingen_taleveje,tv_maske_lgd);
  2 18124         optaget_flag:= 0;
  2 18125       \f

  2 18125       message radio_initialisering side 2 - 810524/hko;
  2 18126       
  2 18126         bs_mobil_opkald:= next_sem;
  2 18127       
  2 18127       <*+3*>skriv_new_sem(out,1,bs_mobil_opkald,<:bs_mobil_opkald:>);
  2 18128       <*-3*>
  2 18129       
  2 18129         bs_opkaldskø_adgang:= next_sem;
  2 18130         signal_bin(bs_opkaldskø_adgang);
  2 18131       
  2 18131       <*+3*>skriv_new_sem(out,1,bs_opkaldskø_adgang,<:bs_opk.kø_adgang:>);
  2 18132       <*-3*>
  2 18133       
  2 18133         cs_radio_medd:=next_semch;
  2 18134         signal_ch(cs_radio_medd,nextop(data+6),gen_optype or rad_optype);
  2 18135       
  2 18135       <*+3*>skriv_new_sem(out,3,cs_radio_medd,<:cs_radio_medd:>);
  2 18136       <*-3*>
  2 18137       
  2 18137         i:= next_coru(403,
  2 18138                         5,<*prioritet*>
  2 18139                       true<*testmaske*>);
  2 18140       
  2 18140         j:= new_activity(      i,
  2 18141                                0,
  2 18142                radio_medd_opkald);
  2 18143       
  2 18143       <*+3*>skriv_newactivity(out,i,j);
  2 18144       <*-3*>
  2 18145       
  2 18145       cs_radio_adm:= nextsemch;
  2 18146       <*+3*>skriv_new_sem(out,3,cs_radio_adm,<:cs_radio_adm:>);
  2 18147       <*-3*>
  2 18148       
  2 18148       i:= next_coru(404,
  2 18149                      10,
  2 18150                    true);
  2 18151       j:= new_activity(i,
  2 18152                        0,
  2 18153                        radio_adm,next_op(data+radio_op_længde));
  2 18154       <*+3*>skriv_new_activity(out,i,j);
  2 18155       <*-3*>
  2 18156       \f

  2 18156       message radio_initialisering side 3 - 810526/hko;
  2 18157        for k:= 1 step 1 until max_antal_taleveje do
  2 18158        begin
  3 18159       
  3 18159         cs_radio(k):=next_semch;
  3 18160       
  3 18160       <*+3*>skriv_new_sem(out,3,cs_radio(k),<:cs_radio(  ):>);
  3 18161       <*-3*>
  3 18162       
  3 18162         bs_talevej_udkoblet(k):= nextsem;
  3 18163       <*+3*>skriv_new_sem(out,1,bs_talevej_udkoblet(k),<:bs_talevej_udkoblet( ):>);
  3 18164       <*-3*>
  3 18165       
  3 18165         i:=next_coru(410+k,
  3 18166                       10,
  3 18167                      true);
  3 18168       
  3 18168         j:=new_activity(     i,
  3 18169                              0,
  3 18170                         radio,k,next_op(data + radio_op_længde));
  3 18171       
  3 18171       <*+3*>skriv_newactivity(out,i,j);
  3 18172       <*-3*>
  3 18173        end;
  2 18174       
  2 18174         cs_radio_pulje:=next_semch;
  2 18175       
  2 18175       <*+3*>skriv_new_sem(out,3,cs_radio_pulje,<:cs-radio-pulje:>);
  2 18176       <*-3*>
  2 18177       
  2 18177         for i:= 1 step 1 until radiopulje_størrelse do
  2 18178           signal_ch(cs_radio_pulje,
  2 18179                     next_op(60),
  2 18180                     gen_optype or rad_optype);
  2 18181       
  2 18181         cs_radio_kø:= next_semch;
  2 18182       
  2 18182       <*+3*>skriv_new_sem(out,3,cs_radio_kø,<:cs_radio_kø:>);
  2 18183       <*-3*>
  2 18184       
  2 18184         mobil_opkald_aktiveret:= true;
  2 18185       \f

  2 18185       message radio_initialisering side 4 - 810522/hko;
  2 18186       
  2 18186           laf:=raf:=0;
  2 18187       
  2 18187           open(z_fr_in,8,radio_fr_navn,radio_giveup);
  2 18188           i:= monitor(8)reserve process:(z_fr_in,0,ia);
  2 18189           j:=1;
  2 18190           if i <> 0 then
  2 18191             fejlreaktion(4<*monitor resultat*>,i,
  2 18192               string radio_fr_navn.raf(increase(j)),1);
  2 18193           open(z_fr_out,4 shift 12 + 8,radio_fr_navn,radio_giveup);
  2 18194           i:= monitor(8)reserve process:(z_fr_out,0,ia);
  2 18195           j:=1;
  2 18196           if i <> 0 then
  2 18197             fejlreaktion(4,i,string radio_fr_navn.raf(increase(j)),1);
  2 18198           ia(1):= 3 <*canonical*>;
  2 18199           ia(2):= 0 <*no echo*>;
  2 18200           ia(3):= 0 <*prompt*>;
  2 18201           ia(4):= 5 <*timeout*>;
  2 18202           setcspterm(radio_fr_navn.laf,ia);
  2 18203       
  2 18203           open(z_rf_in,8,radio_rf_navn,radio_giveup);
  2 18204           i:= monitor(8)reserve process:(z_rf_in,0,ia);
  2 18205           j:= 1;
  2 18206           if i <> 0 then
  2 18207             fejlreaktion(4<*monitor resultat*>,i,
  2 18208               string radio_rf_navn.raf(increase(j)),1);
  2 18209           open(z_rf_out,4 shift 12 + 8,radio_rf_navn,radio_giveup);
  2 18210           i:= monitor(8)reserve process:(z_rf_out,0,ia);
  2 18211           j:= 1;
  2 18212           if i <> 0 then
  2 18213             fejlreaktion(4,i,string radio_rf_navn.raf(increase(j)),1);
  2 18214           ia(1):= 3 <*canonical*>;
  2 18215           ia(2):= 0 <*no echo*>;
  2 18216           ia(3):= 0 <*prompt*>;
  2 18217           ia(4):= 5 <*timeout*>;
  2 18218           setcspterm(radio_rf_navn.laf,ia);
  2 18219       \f

  2 18219       message radio_initialisering side 5 - 810521/hko;
  2 18220           for k:= 1 step 1 until max_antal_kanaler do
  2 18221           begin
  3 18222       
  3 18222             ss_radio_aktiver(k):=next_sem;
  3 18223       <*+3*>skriv_new_sem(out,2,ss_radio_aktiver(k),<:ss_rad_aktiver( ):>);
  3 18224       <*-3*>
  3 18225       
  3 18225             ss_samtale_nedlagt(k):=next_sem;
  3 18226       <*+3*>skriv_new_sem(out,2,ss_samtale_nedlagt(k),<:ss_samtale_nedlagt(  ):>);
  3 18227       <*-3*>
  3 18228           end;
  2 18229       
  2 18229           cs_radio_ind:= next_semch;
  2 18230       <*+3*>skriv_new_sem(out,3,cs_radio_ind,<:cs_radio_ind:>);
  2 18231       <*-3*>
  2 18232       
  2 18232           i:= next_coru(401,<*ident radio_ind*>
  2 18233                            3, <*prioritet*>
  2 18234                          true <*testmaske*>);
  2 18235           j:= new_activity(      i,
  2 18236                                  0,
  2 18237                            radio_ind,next_op(data + 64));
  2 18238       
  2 18238       <*+3*>skriv_newactivity(out,i,j);
  2 18239       <*-3*>
  2 18240       
  2 18240           cs_radio_ud:=next_semch;
  2 18241       <*+3*>skriv_new_sem(out,3,cs_radio_ud,<:cs_radio_ud:>);
  2 18242       <*-3*>
  2 18243       
  2 18243           i:= next_coru(402,<*ident radio_out*>
  2 18244                            10,<*prioritet*>
  2 18245                          true <*testmaske*>);
  2 18246           j:= new_activity(         i,
  2 18247                                     0,
  2 18248                            radio_ud,next_op(data + 64));
  2 18249       
  2 18249       <*+3*>skriv_newactivity(out,i,j);
  2 18250       <*-3*>
  2 18251       \f

  2 18251       message vogntabel initialisering side 1 - 820301;
  2 18252       
  2 18252       sidste_bus:= sidste_linie_løb:= 0;
  2 18253       
  2 18253       tf_vogntabel:= 1 shift 10 + 2;
  2 18254       tf_gruppedef:= ia(4):= 1 shift 10 +3;
  2 18255       tf_gruppeidenter:= 1 shift 10 +6;
  2 18256       tf_springdef:= 1 shift 10 +7;
  2 18257       hent_fil_dim(ia);
  2 18258       max_antal_i_gruppe:= ia(2);
  2 18259       if ia(1) < max_antal_grupper then
  2 18260         max_antal_grupper:= ia(1);
  2 18261       
  2 18261       <* initialisering af interne vogntabeller *>
  2 18262       begin
  3 18263         long array field laf1,laf2;
  3 18264         integer array fdim(1:8);
  3 18265         zone z(128,1,stderror);
  3 18266         integer busnr,i,j,zi,s,pant,ll_nr,b_nr,res,tegn,g_nr,o_nr;
  3 18267         long omr,garageid;
  3 18268         integer field ll, bn;
  3 18269         boolean binær, test24;
  3 18270       
  3 18270         ll:= 2; bn:= 4;
  3 18271         
  3 18271         <* nulstil tabellerne *>
  3 18272         laf1:= -2;
  3 18273         laf2:=  2;
  3 18274         bustabel1.laf2(0):=
  3 18275         bustabel.laf2(0):= bustilstand.laf2(0):= linie_løb_tabel.laf2(0):= 
  3 18276         bus_indeks.laf2(0):= linie_løb_indeks.laf2(0):= extend 0;
  3 18277         tofrom(bustabel.laf2,bustabel.laf1,(max_antal_busser+1)*2-4);
  3 18278         tofrom(bustabel1.laf2,bustabel1.laf1,(max_antal_busser+1)*2-4);
  3 18279         tofrom(linie_løb_tabel.laf2,linie_løb_tabel.laf1,(max_antal_linie_løb+1)*2-4);
  3 18280         tofrom(busindeks.laf2,busindeks.laf1,max_antal_linie_løb-4);
  3 18281         tofrom(linie_løb_indeks.laf2,linie_løb_indeks.laf1,max_antal_busser-4);
  3 18282         tofrom(bustilstand.laf2,bustilstand.laf1,max_antal_busser-4);
  3 18283       \f

  3 18283       message vogntabel initialisering side 1a - 810505/cl;
  3 18284       
  3 18284       
  3 18284         <* initialisering af intern busnummertabel *>
  3 18285         open(z,4,<:busnumre:>,0);
  3 18286         busnr:= -1;
  3 18287         read(z,busnr);
  3 18288         while busnr > 0 do
  3 18289         begin
  4 18290           if busnr < bustabel(sidste_bus) extract 14 or busnr >= 1 shift 14 then
  4 18291             fejlreaktion(10,busnr,<:fejl i busnrfil:>,0);
  4 18292           sidste_bus:= sidste_bus+1;
  4 18293           if sidste_bus > max_antal_busser then
  4 18294             fejlreaktion(10,busnr,<:for mange busser i busnrfil:>,0);
  4 18295           repeatchar(z); readchar(z,tegn);
  4 18296           garageid:= extend 0; binær:= false; omr:= extend 0;
  4 18297           g_nr:= o_nr:= 0;
  4 18298           if tegn='!' then
  4 18299           begin
  5 18300             binær:= true;
  5 18301             readchar(z,tegn);
  5 18302           end;
  4 18303           if tegn='/' then <*garageid*>
  4 18304           begin
  5 18305             readchar(z,tegn); repeatchar(z);
  5 18306             if '0'<=tegn and tegn<='9' then
  5 18307             begin
  6 18308               read(z,g_nr); if g_nr<1 or g_nr>max_antal_operatører then g_nr:= 0;
  6 18309               if g_nr<>0 then garageid:=bpl_navn(g_nr);
  6 18310               if g_nr<>0 and garageid=long<::> then
  6 18311               begin
  7 18312                 fejlreaktion(10,busnr,<:ukendt garageidentifikation for bus:>,1);
  7 18313                 g_nr:= 0;
  7 18314               end;
  6 18315             end
  5 18316             else
  5 18317             begin
  6 18318               while ('A'<= tegn and tegn <='Å') or ('0'<=tegn and tegn<='9') do
  6 18319               begin
  7 18320                 garageid:= garageid shift 8 + tegn;
  7 18321                 readchar(z,tegn);
  7 18322               end;
  6 18323               while garageid shift (-40) extract 8 = 0 do
  6 18324                 garageid:= garageid shift 8;
  6 18325               g_nr:= find_bpl(garageid);
  6 18326               if g_nr=0 then
  6 18327                 fejlreaktion(10,busnr,<:ukendt garageidentifikation for bus:>,1);
  6 18328             end;
  5 18329             repeatchar(z); readchar(z,tegn);
  5 18330           end;
  4 18331           if tegn=';' then
  4 18332           begin
  5 18333             readchar(z,tegn); repeatchar(z);
  5 18334             if '0'<=tegn and tegn<='9' then
  5 18335             begin
  6 18336               read(z,o_nr);
  6 18337               if o_nr<1 or max_antal_områder<o_nr then o_nr:= 0;
  6 18338               if o_nr<>0 then omr:= område_navn(o_nr);
  6 18339               if o_nr<>0 and omr=long<::> then
  6 18340               begin
  7 18341                 fejlreaktion(10,busnr,<:ukendt områdeidentifikation for bus:>,1);
  7 18342                 o_nr:= 0;
  7 18343               end;
  6 18344             end
  5 18345             else
  5 18346             begin
  6 18347               while ('A'<=tegn and tegn<='Å') or ('0'<=tegn and tegn<='9') do
  6 18348               begin
  7 18349                 omr:= omr shift 8 + tegn;
  7 18350                 readchar(z,tegn);
  7 18351               end;
  6 18352               while omr shift (-40) extract 8 = 0 do
  6 18353                 omr:= omr shift 8;
  6 18354               if omr=long<:TCT:> then omr:=long<:KBH:>;
  6 18355               i:= 1;
  6 18356               while i<=max_antal_områder and o_nr=0 do
  6 18357               begin
  7 18358                 if omr=område_navn(i) then o_nr:= i;
  7 18359                 i:= i+1;
  7 18360               end;
  6 18361               if o_nr=0 then
  6 18362                 fejlreaktion(10,busnr,<:ukendt områdeidentifikation for bus:>,1);
  6 18363             end;
  5 18364             repeatchar(z); readchar(z,tegn);
  5 18365           end;
  4 18366           if o_nr=0 then o_nr:= 3;
  4 18367           bustabel (sidste_bus):= g_nr shift 14 + busnr;
  4 18368           bustabel1(sidste_bus):= (binær extract 1) shift 23 + o_nr;
  4 18369       
  4 18369           busnr:= -1;
  4 18370           read(z,busnr);
  4 18371         end;
  3 18372         close(z,true);
  3 18373       \f

  3 18373       message vogntabel initialisering side 2 - 820301/cl;
  3 18374       
  3 18374         <* initialisering af intern linie/løbs-tabel og bus-indekstabel *>
  3 18375         test24:= testbit24;
  3 18376         testbit24:= false;
  3 18377         i:= 1;
  3 18378         s:= læsfil(tf_vogntabel,i,zi);
  3 18379         if s<>0 then fejlreaktion(5,s,<:vogntabelinit:>,0);
  3 18380         while fil(zi).bn<>0 do
  3 18381         begin
  4 18382           if fil(zi).ll <> 0 then
  4 18383           begin <* indsæt linie/løb *>
  5 18384             res:= binærsøg(sidste_linie_løb,linie_løb_tabel(j) -
  5 18385                     fil(zi).ll,j);
  5 18386             if res < 0 then j:= j+1;
  5 18387             if res = 0 then fejlreaktion(10,fil(zi).bn,
  5 18388               <:dobbeltregistrering i vogntabel:>,1)
  5 18389             else
  5 18390             begin
  6 18391               o_nr:= fil(zi).bn shift (-14) extract 8;
  6 18392               b_nr:= søg_omr_bus(fil(zi).bn extract 14,ll_nr,g_nr,o_nr,s,tegn);
  6 18393               if b_nr<0 then fejlreaktion(10,fil(zi).bn extract 14,
  6 18394                 <:ukendt bus i vogntabel:>,1)
  6 18395               else
  6 18396               begin
  7 18397                 if sidste_linie_løb >= max_antal_linie_løb then
  7 18398                   fejlreaktion(10,fil(zi).bn extract 14,
  7 18399                       <:for mange linie/løb i vogntabel:>,0);
  7 18400                 for ll_nr:= sidste_linie_løb step (-1) until j do
  7 18401                 begin
  8 18402                   linie_løb_tabel(ll_nr+1):= linie_løb_tabel(ll_nr);
  8 18403                   bus_indeks(ll_nr+1):= bus_indeks(ll_nr);
  8 18404                 end;
  7 18405                 linie_løb_tabel(j):= fil(zi).ll;
  7 18406                 bus_indeks(j):= false add b_nr;
  7 18407                 sidste_linie_løb:= sidste_linie_løb + 1;
  7 18408               end;
  6 18409             end;
  5 18410           end;
  4 18411           i:= i+1;
  4 18412           s:= læsfil(tf_vogntabel,i,zi);
  4 18413           if s<>0 then fejlreaktion(5,s,<:vogntabelinit:>,0);
  4 18414         end;
  3 18415       \f

  3 18415       message vogntabel initialisering side 3 - 810428/cl;
  3 18416       
  3 18416         <* initialisering af intern linie/løb-indekstabel *>
  3 18417         for ll_nr:= 1 step 1 until sidste_linie_løb do
  3 18418           linie_løb_indeks(bus_indeks(ll_nr) extract 12):= false add ll_nr;
  3 18419       
  3 18419         <* gem ny vogntabel i tabelfil *>
  3 18420         for i:= 1 step 1 until sidste_bus do
  3 18421         begin
  4 18422           s:= skriv_fil(tf_vogntabel,i,zi);
  4 18423           if s<>0 then fejlreaktion(6,s,<:vogntabelinit:>,0);
  4 18424           fil(zi).bn:= bustabel(i) extract 14 add
  4 18425                        (bustabel1(i) extract 8 shift 14);
  4 18426           fil(zi).ll:= linie_løb_tabel(linie_løb_indeks(i) extract 12);
  4 18427         end;
  3 18428         fdim(4):= tf_vogntabel;
  3 18429         hent_fil_dim(fdim);
  3 18430         pant:= fdim(3) * (256//fdim(2));
  3 18431         for i:= sidste_bus+1 step 1 until pant do
  3 18432         begin
  4 18433           s:= skriv_fil(tf_vogntabel,i,zi);
  4 18434           if s<>0 then fejlreaktion(6,s,<:vogntabelinit:>,0);
  4 18435           fil(zi).ll:= fil(zi).bn:= 0;
  4 18436         end;
  3 18437       
  3 18437         <* initialisering/nulstilling af gruppetabeller *>
  3 18438         for i:= 1 step 1 until max_antal_grupper do
  3 18439         begin
  4 18440           s:= læs_fil(tf_gruppeidenter,i,zi);
  4 18441           if s <> 0 then fejlreaktion(5,s,<:gruppetabelinit:>,0);
  4 18442           gruppetabel(i):= fil(zi).ll;
  4 18443         end;
  3 18444         for i:= 1 step 1 until max_antal_gruppeopkald do
  3 18445           gruppeopkald(i,1):= gruppeopkald(i,2):= 0;
  3 18446         testbit24:= test24;
  3 18447       end;
  2 18448       
  2 18448       
  2 18448       <*+2*>
  2 18449       <**> if testbit40 then p_vogntabel(out);
  2 18450       <**> if testbit43 then p_gruppetabel(out);
  2 18451       <*-2*>
  2 18452       
  2 18452       message vogntabel initialisering side 3a -920517/cl;
  2 18453       
  2 18453         <* initialisering for vt_log *>
  2 18454       
  2 18454         v_tid:= 4;
  2 18455         v_kode:= 6;
  2 18456         v_bus:= 8;
  2 18457         v_ll1:= 10;
  2 18458         v_ll2:= 12;
  2 18459         v_tekst:= 6;
  2 18460         for i:= 1 step 1 until 4 do vt_logdisc(i):= 0;
  2 18461         for i:= 1 step 1 until 10 do vt_log_tail(i):= 0;
  2 18462         if vt_log_aktiv then
  2 18463         begin
  3 18464           integer i;
  3 18465           real t;
  3 18466           integer array field iaf;
  3 18467           integer array
  3 18468             tail(1:10),ia(1:10),chead(1:20);
  3 18469       
  3 18469           open(zvtlog,4,<:vtlogpool:>,0); close(zvtlog,true);
  3 18470           i:= monitor(42)lookup_entry:(zvtlog,0,tail);
  3 18471           if i=0 then
  3 18472             i:=monitor(52)create_areaproc:(zvtlog,0,ia);
  3 18473           if i=0 then
  3 18474           begin
  4 18475             i:=monitor(8)reserve_process:(zvtlog,0,ia);
  4 18476             monitor(64)remove_areaproc:(zvtlog,0,ia);
  4 18477           end;
  3 18478       
  3 18478           if i=0 then
  3 18479           begin
  4 18480             iaf:= 2;
  4 18481             tofrom(vt_logdisc,tail.iaf,8);
  4 18482             i:=slices(vt_logdisc,0,tail,chead);
  4 18483             if i > (-2048) then
  4 18484             begin
  5 18485               vt_log_slicelgd:= chead(15);
  5 18486               i:= 0;
  5 18487             end;
  4 18488           end;
  3 18489       
  3 18489           if i=0 then
  3 18490           begin
  4 18491             open(zvtlog,4,<:vtlogklar:>,0); close(zvtlog,true);
  4 18492             i:=monitor(42)lookup_entry:(zvtlog,0,tail);
  4 18493             if i=0 then
  4 18494               i:= monitor(52)create_areapproc:(zvtlog,0,ia);
  4 18495             if i=0 then
  4 18496             begin
  5 18497               i:=monitor(8)reserve_process:(zvtlog,0,ia);
  5 18498               monitor(64)remove_areaproc:(zvtlog,0,ia);
  5 18499             end;
  4 18500       
  4 18500             if i<>0 then
  4 18501             begin
  5 18502               for i:= 1 step 1 until 10 do tail(i):= 0;
  5 18503               tail(1):= 1;
  5 18504               iaf:= 2;
  5 18505               tofrom(tail.iaf,vt_logdisc,8);
  5 18506               tail(6):=systime(7,0,t);
  5 18507               i:=monitor(40)create_entry:(zvtlog,0,tail);
  5 18508               if i=0 then
  5 18509                 i:=monitor(50)permanent_entry:(zvtlog,3,ia);
  5 18510             end;
  4 18511           end;
  3 18512       
  3 18512           if i<>0 then vt_log_aktiv:= false;
  3 18513         end;
  2 18514       
  2 18514       
  2 18514       \f

  2 18514       message vogntabel initialisering side 4 - 810520/cl;
  2 18515       
  2 18515       cs_vt:= nextsemch;
  2 18516       <*+3*> skriv_new_sem(out,3,cs_vt,<:cs-vt:>);
  2 18517       <*-3*>
  2 18518       
  2 18518       cs_vt_adgang:= nextsemch;
  2 18519       <*+3*> skriv_new_sem(out,3,cs_vt_adgang,<:cs-vt-adgang:>);
  2 18520       <*-3*>
  2 18521       
  2 18521       cs_vt_opd:= nextsemch;
  2 18522       <*+3*> skriv_new_sem(out,3,cs_vt_opd,<:cs-vt-opd:>);
  2 18523       <*-3*>
  2 18524       
  2 18524       cs_vt_rap:= nextsemch;
  2 18525       <*+3*> skriv_new_sem(out,3,cs_vt_rap,<:cs-vt-rap:>);
  2 18526       <*-3*>
  2 18527       
  2 18527       cs_vt_tilst:= nextsemch;
  2 18528       <*+3*> skriv_new_sem(out,3,cs_vt_tilst,<:cs-vt-tilst:>);
  2 18529       <*-3*>
  2 18530       
  2 18530       cs_vt_auto:= nextsemch;
  2 18531       <*+3*> skriv_new_sem(out,3,cs_vt_auto,<:cs-vt-auto:>);
  2 18532       <*-3*>
  2 18533       
  2 18533       cs_vt_grp:= nextsemch;
  2 18534       <*+3*> skriv_new_sem(out,3,cs_vt_grp,<:cs-vt-grp:>);
  2 18535       <*-3*>
  2 18536       
  2 18536       cs_vt_spring:= nextsemch;
  2 18537       <*+3*> skriv_new_sem(out,3,cs_vt_spring,<:cs-vt-spring:>);
  2 18538       <*-3*>
  2 18539       
  2 18539       cs_vt_log:= nextsemch;
  2 18540       <*+3*> skriv_new_sem(out,3,cs_vt_log,<:cs-vt-log:>);
  2 18541       <*-3*>
  2 18542       
  2 18542       cs_vt_logpool:= nextsemch;
  2 18543       <*+3*> skriv_new_sem(out,3,cs_vt_logpool,<:cs-vt-logpool:>);
  2 18544       <*-3*>
  2 18545       
  2 18545       vt_op:= nextop(vt_op_længde);
  2 18546       signalch(cs_vt_adgang,vt_op,gen_optype or vt_optype);
  2 18547       
  2 18547       vt_logop(1):= nextop(vt_op_længde);
  2 18548       signalch(cs_vt_logpool,vt_logop(1),vt_optype);
  2 18549       vt_logop(2):= nextop(vt_op_længde);
  2 18550       signalch(cs_vt_logpool,vt_logop(2),vt_optype);
  2 18551       
  2 18551       \f

  2 18551       message vogntabel initialisering side 5 - 81-520/cl;
  2 18552       
  2 18552       i:= nextcoru(500, <*ident*>
  2 18553                     10, <*prioitet*>
  2 18554                    true <*testmaske*>);
  2 18555       j:= new_activity( i,
  2 18556                         0,
  2 18557                        h_vogntabel);
  2 18558       <*+3*> skriv_newactivity(out,i,j);
  2 18559       <*-3*>
  2 18560       
  2 18560       i:= nextcoru(501,   <*ident*>
  2 18561                     10,   <*prioritet*>
  2 18562                    true   <*testmaske*>);
  2 18563       iaf:= nextop(filop_længde);
  2 18564       j:= new_activity(i,
  2 18565                        0,
  2 18566                        vt_opdater,iaf);
  2 18567       <*+3*> skriv_newactivity(out,i,j);
  2 18568       <*-3*>
  2 18569       
  2 18569       i:= nextcoru(502,   <*ident*>
  2 18570                     10,   <*prioritet*>
  2 18571                    true   <*testmaske*>);
  2 18572       k:= nextsemch;
  2 18573       <*+3*> skriv_new_sem(out,3,k,<:cs-fil(vt-tilst):>);
  2 18574       <*-3*>
  2 18575       iaf:= nextop(fil_op_længde);
  2 18576       j:= newactivity(i,
  2 18577                       0,
  2 18578                       vt_tilstand,
  2 18579                       k,
  2 18580                       iaf);
  2 18581       <*+3*> skriv_newactivity(out,i,j);
  2 18582       <*-3*>
  2 18583       \f

  2 18583       message vogntabel initialisering side 6 - 810520/cl;
  2 18584       
  2 18584       i:= nextcoru(503,   <*ident*>
  2 18585                     10,   <*prioritet*>
  2 18586                    true   <*testmaske*>);
  2 18587       k:= nextsemch;
  2 18588       <*+3*> skriv_new_sem(out,3,k,<:cs-fil(vt-rapport):>);
  2 18589       <*-3*>
  2 18590       iaf:= nextop(fil_op_længde);
  2 18591       j:= newactivity(i,
  2 18592                       0,
  2 18593                       vt_rapport,
  2 18594                       k,
  2 18595                       iaf);
  2 18596       <*+3*> skriv_newactivity(out,i,j);
  2 18597       <*-3*>
  2 18598       
  2 18598       i:= nextcoru(504,   <*ident*>
  2 18599                     10,   <*prioritet*>
  2 18600                    true   <*testmaske*>);
  2 18601       k:= nextsemch;
  2 18602       <*+3*> skriv_new_sem(out,3,k,<:cs-fil(vt-gruppe):>);
  2 18603       <*-3*>
  2 18604       iaf:= nextop(fil_op_længde);
  2 18605       j:= new_activity(i,
  2 18606                        0,
  2 18607                        vt_gruppe,
  2 18608                        k,
  2 18609                        iaf);
  2 18610       <*+3*> skriv_newactivity(out,i,j);
  2 18611       <*-3*>
  2 18612       \f

  2 18612       message vogntabel initialisering side 7 - 810520/cl;
  2 18613       
  2 18613       i:= nextcoru(505,   <*ident*>
  2 18614                     10,   <*prioritet*>
  2 18615                    true   <*testmaske*>);
  2 18616       k:= nextsemch;
  2 18617       <*+3*> skriv_new_sem(out,3,k,<:cs-spring-retur:>);
  2 18618       <*-3*>
  2 18619       iaf:= nextop(fil_op_længde);
  2 18620       j:= newactivity(i,
  2 18621                       0,
  2 18622                       vt_spring,
  2 18623                       k,
  2 18624                       iaf);
  2 18625       <*+3*> skriv_newactivity(out,i,j);
  2 18626       <*-3*>
  2 18627       
  2 18627       i:= nextcoru(506,   <*ident*>
  2 18628                     10,
  2 18629                    true   <*testmaske*>);
  2 18630       k:= nextsemch;
  2 18631       <*+3*> skriv_new_sem(out,3,k,<:cs-auto-retur:>);
  2 18632       <*-3*>
  2 18633       iaf:= nextop(if fil_op_længde>(data+20) then fil_op_længde else (data+20));
  2 18634       j:= newactivity(i,
  2 18635                       0,
  2 18636                       vt_auto,
  2 18637                       k,
  2 18638                       iaf);
  2 18639       <*+3*> skriv_newactivity(out,i,j);
  2 18640       <*-3*>
  2 18641       
  2 18641       i:=nextcoru(507, <*ident*>
  2 18642                    10, <*prioritet*>
  2 18643                   true <*testmaske*>);
  2 18644       j:=newactivity(i,
  2 18645                      0,
  2 18646                      vt_log);
  2 18647       <*+3*> skriv_newactivity(out,i,j);
  2 18648       <*-3*>
  2 18649       
  2 18649       <*+2*>
  2 18650       <**> if testbit42  then skriv_vt_variable(out);
  2 18651       <*-2*>
  2 18652       \f

  2 18652       message sysslut initialisering side 1 - 810406/cl;
  2 18653       begin
  3 18654         zone z(128,1,stderror);
  3 18655         integer i,coruid,j,k;
  3 18656         integer array field cor;
  3 18657       
  3 18657         open(z,4,<:overvågede:>,0);
  3 18658         for i:= read(z,coruid) while i > 0 do
  3 18659         begin
  4 18660           if coruid = 0 then
  4 18661           begin
  5 18662             for coruid:= 1 step 1 until maxcoru do
  5 18663             begin
  6 18664               cor:= coroutine(coruid);
  6 18665               d.cor.corutestmask:= d.cor.corutestmask shift 1 shift (-1);
  6 18666             end
  5 18667           end
  4 18668           else
  4 18669           begin
  5 18670             cor:= coroutine(coru_no(abs coruid));
  5 18671             if cor > 0 then
  5 18672             begin
  6 18673               d.cor.corutestmask:=
  6 18674                 (d.cor.corutestmask shift 1 shift (-1)) add
  6 18675                 ((coruid > 0) extract 1 shift 11);
  6 18676             end;
  5 18677           end;
  4 18678         end;
  3 18679         close(z,true);
  3 18680       
  3 18680         læsfil(tf_systællere,1,k);
  3 18681         rf:=iaf:= 4;
  3 18682         systællere_nulstillet:= fil(k).rf;
  3 18683         nulstil_systællere:= fil(k).iaf(1);
  3 18684         if systællere_nulstillet=real<::> then
  3 18685         begin
  4 18686           systællere_nulstillet:= 0.0;
  4 18687           nulstil_systællere:= -1;
  4 18688         end;
  3 18689         iaf:= 32;
  3 18690         tofrom(opkalds_tællere,fil(k).iaf,max_antal_områder*10);
  3 18691         iaf:= 192;
  3 18692         tofrom(operatør_tællere,fil(k).iaf,max_antal_operatører*10);
  3 18693       
  3 18693       end;
  2 18694       \f

  2 18694       message sysslut initialisering side 2 - 810603/cl;
  2 18695       
  2 18695       
  2 18695         if låsning > 0 then
  2 18696           <* låsning 1 : *>  lock(takeexternal,coru_term,mon,1); <* centrallogik *>
  2 18697       
  2 18697         if låsning > 1 then
  2 18698           <* låsning 2 : *>  lock(readchar,1,write,2);
  2 18699       
  2 18699         if låsning > 2 then
  2 18700           <* låsning 3 : *>  lock(activate,1,link,1,setposition,1);
  2 18701       
  2 18701       
  2 18701       
  2 18701       
  2 18701         if låsning > 0 then
  2 18702         begin
  3 18703           i:= locked(ia);
  3 18704           write(z_io,"nl",2,<:låsning::>,låsning,"nl",1,i,<: segmenter er låst:>);
  3 18705         end;
  2 18706       \f

  2 18706       message sysslut initialisering side 3 - 810406/cl;
  2 18707       
  2 18707       write(z_io,"nl",2,<:initialisering slut:>);
  2 18708       system(2)free core:(i,ra);
  2 18709       write(z_io,"nl",1,<:free core =:>,i,"nl",1);
  2 18710       setposition(z_io,0,0);
  2 18711       write(zbillede,"ff",0,"nl",1,<:initialisering slut :>,<<zddddd>,
  2 18712             systime(5,0,r),".",1,r,"nl",1,<:free core=:>,i,
  2 18713             "nl",1);
  2 18714       errorbits:= 3; <* ok.no warning.yes *>
  2 18715 \f

  2 18715 
  2 18715 algol list.off;
  2 18716 message coroutinemonitor - 40 ;
  2 18717 
  2 18717       if simref <> firstsem then initerror(1, false);
  2 18718       if semref <> firstop - 4 then initerror(2, false);
  2 18719       if coruref <> firstsim then initerror(3, false);
  2 18720       if opref <> optop + 6 then initerror(4, false);
  2 18721       if proccount <> maxprocext -1 then initerror(5, false);
  2 18722       goto takeexternal;
  2 18723 
  2 18723 dump:
  2 18724   op:= op;
  2 18725     \f

  2 18725     message sys trapaktion side 1 - 810521/hko/cl;
  2 18726       trap(finale);
  2 18727       write(zbillede,"ff",1,"nl",1,<:***** coroutine-monitor køer *****:>);
  2 18728       for i:= 4<*readyqueue*>, 8<*idlequeue*>, 12<*timerqueue*> do
  2 18729       begin
  3 18730         k:= 0;
  3 18731         write(zbillede,"nl",2,case i//4 of(<:readyqueue->:>,<:idlequeue ->:>,
  3 18732           <:timerqueue->:>));
  3 18733         iaf:= i;
  3 18734         for iaf:= d.iaf.next while iaf<>i do
  3 18735         begin
  4 18736           ref:= firstcoru + (iaf-firstcoru)//corusize*corusize;
  4 18737           write(zbillede,<: cr:>,<<zdd>,d.ref.coruident//1000);
  4 18738           k:=k+1; if k mod 10 = 0 then write(zbillede,"nl",1,"sp",12);
  4 18739         end;
  3 18740       end;
  2 18741       outchar(zbillede,'nl');
  2 18742     
  2 18742       skriv_opkaldstællere(zbillede);
  2 18743     
  2 18743     
  2 18743     pfilsystem(zbillede);
  2 18744     
  2 18744     
  2 18744     write(zbillede,"nl",2,"=",20,<: attentionmodul :>,"=",20,"nl",1);
  2 18745     
  2 18745     write(zbillede,"nl",1,<:attention-flag: :>,"nl",1);
  2 18746     outintbits_ia(zbillede,att_flag,1,att_maske_lgd//2);
  2 18747     
  2 18747     write(zbillede,"nl",1,<:attention-signal: :>,"nl",1);
  2 18748     outintbits_ia(zbillede,att_signal,1,att_maske_lgd//2);
  2 18749     \f

  2 18749     message operatør trapaktion1 side 1 - 810521/hko;
  2 18750       write(zbillede,"nl",2,"=",20,<: operatørmodul :>,"=",20,"nl",1);
  2 18751     
  2 18751       write(zbillede,"nl",1,<:betjeningspladsnavne::>,"nl",1);
  2 18752       for i:= 1 step 1 until max_antal_operatører do
  2 18753       begin
  3 18754         laf:= (i-1)*8;
  3 18755         write(zbillede,<<dd>,i,<:: :>,true,6,string bpl_navn(i),
  3 18756           case operatør_auto_include(i) extract 2 + 1 of (
  3 18757           <:EK    :>,<:IN(ÅB):>,<:??    :>,<:IN(ST):>),<:   :>,
  3 18758           terminal_navn.laf,"nl",1);
  3 18759       end;
  2 18760       write(zbillede,"nl",1);
  2 18761     
  2 18761       write(zbillede,"nl",1,<:top-bpl-gruppe: :>,<<d>,top_bpl_gruppe,"nl",1,
  2 18762         <:betjeningspladsgrupper::>,"nl",1);
  2 18763       for i:= 1 step 1 until 127 do
  2 18764       if bpl_navn(i)<>long<::> then
  2 18765       begin
  3 18766         k:= write(zbillede,<<dd >,i,true,6,string bpl_navn(i),<:(:>,<<d>,
  3 18767           bpl_tilst(i,1),<:/:>,bpl_tilst(i,2),<:):>);
  3 18768         write(zbillede,"sp",16-k,<:= :>);
  3 18769         iaf:= i*op_maske_lgd; j:=0;
  3 18770         for k:= 1 step 1 until max_antal_operatører do
  3 18771         begin
  4 18772           if læsbit_ia(bpl_def.iaf,k) then
  4 18773           begin
  5 18774             if j mod 6 = 0 and j > 0 then write(zbillede,"nl",1,"sp",18);
  5 18775             write(zbillede,true,6,string bpl_navn(k));
  5 18776             j:= j+1;
  5 18777           end;
  4 18778         end;
  3 18779         write(zbillede,"nl",1);
  3 18780       end;
  2 18781     
  2 18781       write(zbillede,"nl",1,<:stoptabel::>,"nl",1);
  2 18782       for i:= 1 step 1 until max_antal_operatører do
  2 18783       begin
  3 18784         write(zbillede,<<dd >,i);
  3 18785         for j:= 0 step 1 until 3 do
  3 18786         begin
  4 18787           k:= operatør_stop(i,j);
  4 18788           write(zbillede,if j=0 then <: :> else <:->:>,if k=0 then <:ALLE:>
  4 18789             else string bpl_navn(k));
  4 18790         end;
  3 18791         write(zbillede,<:  (:>,<<d>,ant_i_opkø(i),<:):>,"nl",1);
  3 18792       end;
  2 18793     
  2 18793       skriv_terminal_tab(zbillede);
  2 18794       write(zbillede,"nl",1,<:operatør-maske::>,"nl",1);
  2 18795       outintbits_ia(zbillede,operatørmaske,1,op_maske_lgd//2);
  2 18796       skriv_opk_alarm_tab(zbillede);
  2 18797       skriv_talevejs_tab(zbillede);
  2 18798       skriv_op_spool_buf(zbillede);
  2 18799       skriv_cqf_tabel(zbillede,true);
  2 18800       write(zbillede,"nl",2,"=",20,<: garagemodul :>,"=",20,"nl",1);
  2 18801       
  2 18801       write(zbillede,"nl",1,<:garageterminaler::>,"nl",1);
  2 18802       for i:= 1 step 1 until max_antal_garageterminaler do
  2 18803       begin
  3 18804         laf:= (i-1)*8;
  3 18805         write(zbillede,<<dd>,i,<:: :>, if garage_auto_include(i) then
  3 18806           <:IN,G  :> else <:EK,G  :>,garage_terminal_navn.laf,"nl",1);
  3 18807       end;
  2 18808     \f

  2 18808     message radio trapaktion side 1 - 820301/hko;
  2 18809       write(zbillede,"nl",2,"=",20,<: radiomodul :>,"=",20,"nl",1);
  2 18810       skriv_kanal_tab(zbillede);
  2 18811       skriv_opkaldskø(zbillede);
  2 18812       skriv_radio_linietabel(zbillede);
  2 18813       skriv_radio_områdetabel(zbillede);
  2 18814     
  2 18814     \f

  2 18814     message vogntabel trapaktion side 1 - 810520/cl;
  2 18815     write(zbillede,"nl",2,"=",20,<: vogntabelmodul :>,"=",20,"nl",1);
  2 18816     skriv_vt_variable(zbillede);
  2 18817     p_vogntabel(zbillede);
  2 18818     p_gruppetabel(zbillede);
  2 18819     p_springtabel(zbillede);
  2 18820     \f

  2 18820     message sysslut trapaktion side 1 - 810519/cl;
  2 18821     write(zbillede,"nl",2,"=",20,<: corutinemonitor :>,"=",20,"nl",1);
  2 18822     corutable(zbillede);
  2 18823     write(zbillede,"ff",1,<:***** simple semaphores *****:>,"nl",2,
  2 18824       <: ref værdi prev next:>,"nl",1);
  2 18825     iaf:= firstsim;
  2 18826     repeat
  2 18827       write(zbillede,<<dddd>,iaf,<< -dddd>,d.iaf.simvalue,<< dddd>,
  2 18828         d.iaf(simcoru//2-1),d.iaf.simcoru,"nl",1);
  2 18829       iaf:= iaf + simsize;
  2 18830     until iaf>=simref;
  2 18831     write(zbillede,"ff",1,<:***** chained semaphores *****:>,"nl",2,
  2 18832       <: ref prev.coru next.coru   prev.op   next.op:>,"nl",1);
  2 18833     iaf:= firstsem;
  2 18834     repeat
  2 18835       write(zbillede,<<dddd>,iaf,<<______dddd>,d.iaf(semcoru//2-1),
  2 18836         d.iaf.semcoru,d.iaf(semop//2-1),d.iaf.semop,"nl",1);
  2 18837       iaf:= iaf+semsize;
  2 18838     until iaf>=semref;
  2 18839     write(zbillede,"ff",1,<:***** operations *****:>,"nl",2);
  2 18840     iaf:= firstop;
  2 18841     repeat
  2 18842       skriv_op(zbillede,iaf);
  2 18843       iaf:= iaf+opheadsize+d.iaf.opsize;
  2 18844     until iaf>=optop;
  2 18845     write(zbillede,"ff",1,<:***** message extentions *****:>,"nl",2,
  2 18846       <:  messref messcode   messop:>,"nl",1);
  2 18847     for i:= 1 step 1 until maxmessext do
  2 18848       write(zbillede,<< dddddddd>,messref(i),messcode(i),messop(i),"nl",1);
  2 18849     write(zbillede,"nl",4,<:***** process extentions *****:>,"nl",2,
  2 18850       <:  procref proccode   procop:>,"nl",1);
  2 18851     for i:= 1 step 1 until maxprocext do
  2 18852       write(zbillede,<< dddddddd>,procref(i),proccode(i),procop(i),"nl",1);
  2 18853     
  2 18853 
  2 18853     \f

  2 18853     message sys_finale side 1 - 810428/hko;
  2 18854     
  2 18854     finale:
  2 18855        trap(slut_finale);
  2 18856     <* algol_pause:=algol_pause shift 24 shift (-24); *>
  2 18857        endaction:=0;
  2 18858     \f

  2 18858     message filsystem finale side 1 - 810428/cl;
  2 18859     
  2 18859     <* lukning af zoner *>
  2 18860     write(out,<:lukker filsystem:>); ud;
  2 18861     for i:= 1 step 1 until dbantez+dbantsz+dbanttz do
  2 18862       close(fil(i),true);
  2 18863     \f

  2 18863     message operatør_finale side 1 - 810428/hko;
  2 18864     
  2 18864     goto op_trap2_slut;
  2 18865     
  2 18865       write(out,<:lukker operatører:>); ud;
  2 18866       for k:= 1 step 1 until max_antal_operatører do
  2 18867       begin
  3 18868         close(z_op(k),true);
  3 18869       end;
  2 18870     op_trap2_slut:
  2 18871       k:=k;
  2 18872     
  2 18872     \f

  2 18872     message garage_finale side 1 - 810428/hko;
  2 18873     
  2 18873       write(out,<:lukker garager:>); ud;
  2 18874       for k:= 1 step 1 until max_antal_garageterminaler do
  2 18875       begin
  3 18876         close(z_gar(k),true);
  3 18877       end;
  2 18878     \f

  2 18878     message radio_finale side 1 - 810525/hko;
  2 18879         write(out,<:lukker radio:>); ud;
  2 18880         close(z_fr_in,true);
  2 18881         close(z_fr_out,true);
  2 18882         close(z_rf_in,true);
  2 18883         close(z_rf_out,true);
  2 18884     \f

  2 18884     message sysslut finale side 1 - 810530/cl;
  2 18885     
  2 18885     slut_finale:
  2 18886     
  2 18886     trap(exit_finale);
  2 18887     
  2 18887     outchar(zrl,'em');
  2 18888     close(zrl,true);
  2 18889     
  2 18889     write(zbillede,
  2 18890             "nl",2,<:blocksread=:>,blocksread,
  2 18891             "nl",1,<:blocksout= :>,blocksout,
  2 18892             "nl",1,<:fillæst=   :>,fillæst,
  2 18893             "nl",1,<:filskrevet=:>,filskrevet,
  2 18894             "nl",3,<:********** billede genereret :>,<<zddddd>,
  2 18895       systime(5,0,r),".",1,r,<: **********:>,"nl",1,"em",1);
  2 18896     close(zbillede,true);
  2 18897     monitor(42,zbillede,0,ia);
  2 18898     ia(6):= systime(7,0,0.0);
  2 18899     monitor(44,zbillede,0,ia);
  2 18900     setposition(z_io,0,0);
  2 18901     write(z_io,"nl",3,"sp",10,"*",15,<: busradio afsluttet :>,<<zddddd>,
  2 18902       systime(5,0,r),".",1,r,"sp",1,"*",15,"nl",1,"em",1);
  2 18903     close(z_io,true);
  2 18904     exit_finale: trapmode:= 1 shift 10;
  2 18905 
  2 18905   end;
  1 18906 
  1 18906 
  1 18906 algol list.on;
  1 18907 message programslut;
  1 18908 program_slut:
  1 18909 end
\f


 1.   7228154 10651832  611    0    0
 2.  14384074  7146392  351    0    0
 3.   2294176 16427317  420  368    0
 4.   7761538  1851563  429 1657  742
 5.  13934184  7655032  584 29975  605
 6.  14584248 11160213  585    0    0
 7.  15833432   505096  634    0    0
 8.  18899 18893 18880 18862 18849 18841 18831 18823 18812 18801
     18794 18781 18767 18758 18750 18744 18732 18719 18710 18700
     18687 18658 18633 18615 18591 18572 18550 18537 18522 18506
     18491 18470 18444 18430 18413 18393 18384 18362 18337 18312
     18294 18281 18277 18249 18234 18218 18207 18194 18179 18163
     18150 18134 18118 18096 18078 18062 18044 18027 18004 17985
     17966 17954 17940 17920 17906 17887 17874 17855 17844 17831
     17821 17804 17791 17780 17762 17749 17736 17716 17698 17685
     17662 17642 17626 17613 17596 17584 17569 17554 17535 17514
     17500 17490 17485 17475 17467 17448 17427 17407 17399 17392
     17382 17337 17292 17264 17251 17218 17191 17168 17128 17103
     17074 17018 16963 16910 16881 16848 16806 16774 16739 16683
     16645 16605 16557 16524 16499 16476 16456 16428 16409 16390
     16367 16356 16345 16325 16308 16293 16277 16250 16231 16215
     16197 16188 16181 16156 16148 16138 16118 16107 16088 16077
     16060 16045 16027 16002 15989 15978 15961 15943 15929 15922
     15914 15905 15877 15860 15843 15830 15822 15813 15794 15783
     15769 15757 15730 15715 15697 15675 15655 15642 15623 15600
     15574 15553 15542 15520 15500 15478 15460 15432 15411 15393
     15380 15372 15365 15350 15331 15324 15307 15287 15267 15253
     15228 15213 15192 15166 15154 15145 15116 15094 15074 15064
     15053 15028 15007 14987 14957 14938 14919 14899 14878 14870
     14844 14831 14814 14795 14769 14750 14733 14706 14686 14664
     14647 14627 14596 14565 14530 14503 14482 14469 14458 14437
     14429 14420 14401 14381 14358 14331 14314 14296 14283 14273
     14262 14238 14214 14195 14165 14152 14119 14084 14069 14048
     14036 14010 13989 13969 13945 13934 13904 13885 13862 13832
     13816 13793 13766 13731 13704 13697 13683 13662 13650 13636
     13628 13613 13599 13592 13585 13578 13570 13537 13522 13502
     13489 13471 13457 13429 13402 13384 13363 13345 13328 13311
     13299 13289 13265 13259 13244 13224 13208 13191 13166 13153
     13118 13101 13084 13061 13045 13033 13015 12988 12977 12969
     12946 12927 12918 12901 12886 12868 12859 12847 12838 12820
     12804 12789 12778 12759 12731 12710 12689 12673 12659 12652
     12640 12623 12591 12573 12557 12540 12524 12493 12469 12459
     12446 12431 12415 12397 12379 12355 12344 12328 12311 12295
     12278 12254 12247 12229 12202 12184 12159 12134 12090 12079
     12068 12040 12007 11977 11950 11908 11881 11860 11847 11839
     11831 11821 11792 11775 11754 11739 11719 11696 11674 11650
     11622 11600 11583 11558 11541 11525 11502 11487 11468 11449
     11425 11390 11364 11346 11327 11306 11278 11261 11239 11225
     11202 11174 11161 11148 11119 11081 11050 11007 10973 10942
     10935 10927 10919 10908 10879 10856 10841 10831 10811 10793
     10780 10771 10759 10750 10735 10727 10715 10686 10664 10646
     10592 10557 10523 10490 10431 10415 10398 10379 10366 10353
     10332 10320 10302 10289 10276 10249 10230 10213 10176 10160
     10141 10133 10123 10092 10073 10056 10045 10015  9992  9967
      9954  9945  9931  9907  9900  9890  9873  9854  9840  9821
      9809  9793  9782  9771  9746  9729  9707  9689  9671  9651
      9638  9618  9607  9581  9562  9543  9529  9519  9491  9473
      9465  9441  9429  9417  9393  9375  9359  9348  9320  9303
      9299  9282  9273  9266  9255  9241  9225  9208  9196  9184
      9165  9155  9147  9120  9104  9097  9084  9070  9053  9045
      9029  9020  9001  8964  8955  8930  8918  8904  8880  8860
      8840  8818  8778  8760  8745  8733  8715  8706  8699  8687
      8672  8661  8650  8636  8627  8606  8601  8590  8579  8563
      8555  8545  8524  8512  8500  8480  8471  8457  8447  8433
      8412  8397  8380  8370  8354  8341  8334  8317  8295  8276
      8255  8241  8224  8206  8190  8173  8162  8148  8133  8087
      8068  8031  8008  7984  7972  7950  7934  7905  7892  7867
      7850  7820  7805  7793  7773  7760  7745  7724  7715  7699
      7682  7669  7653  7626  7604  7584  7561  7536  7519  7501
      7481  7463  7449  7408  7384  7376  7354  7339  7315  7301
      7293  7275  7263  7244  7233  7212  7199  7182  7166  7147
      7120  7112  7104  7097  7076  7046  7030  7008  6992  6975
      6959  6950  6930  6915  6897  6886  6875  6864  6854  6848
      6837  6827  6808  6794  6774  6756  6740  6732  6715  6701
      6688  6651  6635  6624  6591  6565  6551  6541  6527  6515
      6505  6490  6477  6460  6443  6435  6429  6419  6399  6391
      6375  6366  6345  6331  6317  6307  6294  6277  6266  6242
      6220  6206  6179  6155  6136  6109  6090  6068  6056  6042
      6025  6011  5997  5975  5962  5952  5939  5928  5905  5874
      5857  5843  5818  5791  5778  5770  5759  5744  5733  5721
      5707  5693  5673  5654  5633  5614  5584  5572  5559  5539
      5522  5500  5485  5471  5454  5436  5420  5403  5392  5383
      5370  5352  5342  5326  5310  5298  5285  5270  5259  5242
      5224  5214  5199  5178  5154  5136  5122  5109  5092  5074
      5052  5029  5013  4997  4980  4960  4940  4916  4895  4880
      4861  4848  4825  4812  4794  4773  4753  4726  4708  4685
      4650  4635  4627  4619  4597  4571  4555  4535  4521  4505
      4467  4424  4405  4383  4359  4349  4326  4316  4307  4278
      4258  4240  4218  4199  4176  4170  4126  4114  4069  4039
      4006  3973  3937  3892  3844  3800  3771  3728  3668  3617
      3567  3533  3491  3460  3420  3367  3327  3290  3277  3258
      3243  3225  3205  3182  3167  3145  3099  3077  3044  3003
      2979  2938  2917  2887  2855  2828  2810  2673  2644  2619
      2584  2559  2519  2475  2460  2444  2429  2404  2384  2374
      2365  2340  2318  2291  2280  2259  2238  2219  2196  2167
      2144  2134  2112  2094  2081  2055  2039  2031  2004  1988
      1970  1940  1919  1906  1898  1873  1852  1832  1817  1796
      1782  1775  1762  1750  1736  1720  1707  1699  1685  1656
      1638  1606  1572  1534  1507  1478  1450  1427  1401  1386
      1355  1331  1308  1283  1273  1260  1254  1243  1216  1209
      1204  1180  1171  1162  1156  1134  1103  1083  1051  1030
       995   960   928   914   900   878   853   845   834   824
       812   788   766   735   698   663   632   590   445   344
       327   310   283   259   213   200   185   171    32     1
         1     1     1
     15833432   505096  973 506071 31003
 9.     16   434    16     4 960619 231420 buskom1
         7     3  1995   306 algftnrts
         0     1     0     2 *version
       986   400   986     4 flushout
       986    44   986     4 911004 101112 sendmessage
       987   106   987    12 910308 134214 copyout
       988   244   988    12 890821 163833 getzone6
         0   410     0     0 out
       989   178   989    12 940411 220029 testbit
       992   414   992    18 940411 222629 findfpparam
       995    46   995    18 890821 163814 system
       998   238   998    18 movestring
       998    56   998    18 890821 163907 outdate
       999   124   999    18 isotable
      1000   176   999    18 890821 163656 write
      1005   310  1005   152 intable
      1006    34  1005   152 890821 163503 read
      1010    24  1010   340 890821 163714 tofrom
       997   420   995    18 stderror
      1012    80  1012   340 890821 163740 open
      1016   112  1016   340 890821 163754 monitor
      1013   344  1012   340 close
      1014    22  1012   340 setposition
       997   378   995    18 increase
      1004    50   999    18 outchar
       999    26   999    18 replacechar
      1019    98  1019   340 951214 094619 systime
         0  1700     0     0 trapmode
      1020   302  1020   340 trap
      1020   112  1020   340 890821 163915 initzones
      1021   268  1021   340 940411 222959 læsbitia
      1022    22  1022   340 sign
      1022    28  1022   340 890821 163648 ln
      1023   432  1023   340 810409 111908 skrivhele
       988   320   988    12 setzone6
      1031    52  1031   340 inrec6
      1031    28  1031   340 890821 163732 changerec6
      1032   228  1032   340 940411 222949 sætbitia
      1006    36  1005   152 readchar
      1033   348  1033   340 940411 222633 læstegn
      1699     0     0     0 000003 rs proc
      1034   278  1034   340 940411 222636 skrivtegn
      1035   384  1035   340 940411 222639 afsluttext
      1036   394  1036   340 940411 222952 læsbiti
      1037   498  1037   340 960610 222201 systid
      1039    28  1039   340 getnumber
      1039    18  1039   340 900925 171358 putnumber
         1   656     0     0 errorbits
      1046    60  1046   342 940411 222943 sætbiti
      1047   354  1047   342 940411 222801 openbs
      1049   228  1049   342 940411 222742 hægttekst
      1031    54  1031   340 outrec6
         0  1704     0     0 alarmcause
      1050   332  1050   342 940411 222745 hægtstring
      1051   254  1051   342 940411 222749 anbringtal
      1005   288  1005   152 repeatchar
      1052   444  1052   342 940411 223002 intg
      1053   350  1053   342 940411 222739 binærsøg
      1022    20  1022   340 sgn
      1054   380  1054   342 940411 222646 skrivtext
      1031    56  1031   340 swoprec6
      1058    56  1055   342 passivate
      1055    40  1055   342 890821 163947 activity
      1060    78  1060   350 260479 150000 mon
         1  1043  1060   350 monw2
         1  1039  1060   350 monw0
         1  1041  1060   350 monw1
      1057    56  1055   342 activate
         0  1588     0     0 endaction
      1060   320  1060   350 reflectcore
      1056    50  1055   342 newactivity
      1061   372  1061   358 940327 154135 setcspterm
      1063   428  1063   358 941030 233200 slices
      1067    52  1067   358 890821 163933 lock
      1067   258  1067   358 locked
         0  1612     0     0 blocksread
         0  1642     0     0 blocksout
      1068   162  1068   358 940411 222622 fpparam
         1  1049  1069   358 nl
         1  1047  1069   358 220978 131500 bel
      1070   330  1070   446 940411 222722 ud
      1071   252  1071   446 940411 222656 taltekst
         1  1045  1060   350 monw3
       988   296   988    12 getshare6
       988   398   988    12 setshare6
           70      480 1074  446    0
algol end 1074
*if ok.no
*if warning.yes
*o c
▶EOF◀