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

⟦a4f537f2b⟧ TextFile

    Length: 993792 (0xf2a00)
    Types: TextFile
    Names: »buskomudx01 «

Derivation

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

TextFile

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

buskom1text d.5471361.1150
  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       real r;
  3   810     
  3   810       write(z,"nl",2,<:+++++ opkaldstællere +++++:>,"nl",2,
  3   811         <:omr          ud ind-alm ind-nød ej.forb optaget:>,"nl",1);
  3   812       for omr:= 1 step 1 until max_antal_områder do
  3   813       begin
  4   814         write(z,true,6,string område_navn(omr),":",1);
  4   815         for typ:= 1 step 1 until 5 do
  4   816           write(z,<< ddddddd>,opkalds_tællere((omr-1)*5+typ));
  4   817         outchar(z,'nl');
  4   818       end;
  3   819     
  3   819       write(z,"nl",1,        
  3   820         <:oper.        ud ind-alm ind-nød ej.forb optaget:>,"nl",1);
  3   821       for omr:= 1 step 1 until max_antal_operatører do
  3   822       begin
  4   823         if bpl_navn(omr)=long<::> then 
  4   824           write(z,"sp",6-write(z,<:op:>,<<d>,omr),":",1)
  4   825         else
  4   826           write(z,true,6,string bpl_navn(omr),":",1);
  4   827         for typ:= 1 step 1 until 5 do
  4   828           write(z,<< ddddddd>,operatør_tællere((omr-1)*5+typ));
  4   829         outchar(z,'nl');
  4   830       end;
  3   831       
  3   831       rpc:= replace_char(1,':');
  3   832       write(z,"nl",1,<:nulstilles :>);
  3   833       if nulstil_systællere = (-1) then write(z,<:ikke automatisk:>,"nl",1)
  3   834       else write(z,<:automatisk kl. :>,<<zd dd dd>,nulstil_systællere,"nl",1);
  3   835       replace_char(1,'.');
  3   836       write(z,<:nulstillet  d. :>,<<zd dd dd>,
  3   837         systime(4,systællere_nulstillet,r)," ",1);
  3   838       replace_char(1,':');
  3   839       write(z,<<zd dd dd>,r,"nl",1);
  3   840       replace_char(1,rpc);
  3   841     end;
  2   842     \f

  2   842     message procedure start_operation side 1 - 810521/hko;
  2   843     
  2   843       procedure start_operation(op_ref,kor,ret_sem,kode);
  2   844         value                          kor,ret_sem,kode;
  2   845         integer array field     op_ref;
  2   846         integer                        kor,ret_sem,kode;
  2   847     <*
  2   848           op_ref:  kald, reference til operation
  2   849     
  2   849           kor:     kald, kilde= hovedmodulnr*100 +løbenr
  2   850                               = korutineident.
  2   851           ret_sem: kald, retursemafor
  2   852     
  2   852           kode:    kald, suppl shift 12 + operationskode
  2   853     
  2   853           proceduren initialiserer  en operations hoved med
  2   854           parameterværdierne samt tidfeltet med aktueltid.
  2   855           resultatfelt og datafelter nulstilles.
  2   856     
  2   856     *>
  2   857         begin
  3   858           integer i;
  3   859           d.op_ref.kilde:= kor;
  3   860           systime(1,0,d.op_ref.tid);
  3   861           d.op_ref.retur:=ret_sem;
  3   862           d.op_ref.op_kode:=kode;
  3   863           d.op_ref.resultat:=0;
  3   864           for i:=(d.op_ref.opsize-data)//2 step -1 until 1 do
  3   865             d.op_ref.data(i):=0;
  3   866         end start_operation;
  2   867     \f

  2   867     message procedure afslut_operation  side 1 - 810331/hko;
  2   868     
  2   868     procedure afslut_operation(op_ref,sem);
  2   869       value                    op_ref,sem;
  2   870       integer                  op_ref,sem;
  2   871       begin
  3   872         integer array field op;
  3   873         op:=op_ref;
  3   874         if sem>0 then signal_ch(sem,op,d.op.optype) else
  3   875         if sem=-1 then signal_ch(d.op.retur,op,d.op.optype) else
  3   876         ;
  3   877       end afslut_operation;
  2   878     \f

  2   878     message procedure fejlreaktion - side 1 - 810424/cl,hko;
  2   879     
  2   879     procedure fejlreaktion(nr,værdi,str,måde);
  2   880       value nr,værdi,måde;
  2   881       integer nr,værdi,måde;
  2   882       string str;
  2   883     begin
  3   884     disable begin
  4   885       write(out,<:<10>!!! :>);
  4   886       if nr>0 and nr <=max_antal_fejltekster then
  4   887           write(out,string fejltekst(nr))
  4   888       else write(out,<:fejl nr.:>,nr);
  4   889       outchar(out,'sp');
  4   890       if måde shift (-12) extract 2=1 then
  4   891         outintbits(out,værdi)
  4   892       else
  4   893       if måde shift (-12) extract 2=2 then
  4   894         write(out,<:":>,false add værdi,1,<:":>)
  4   895       else
  4   896         write(out,værdi);
  4   897       write(out,"sp",1,str,"nl",1,<< zddddd>,systime(5,0,r),r,
  4   898                 <: korutine nr=:>,<<d>, abs curr_coruno,
  4   899                 <: ident=:>,curr_coruid,"nl",0);
  4   900       if testbit27 and måde extract 12=1 then
  4   901         trace(1);
  4   902       ud;
  4   903     end;<*disable*>
  3   904       if måde extract 12 =2 then trapmode:=1 shift 13;
  3   905       if måde extract 12= 0 then trap(-1)
  3   906       else if måde extract 12 = 2 then trap(-2);
  3   907     end fejlreaktion;
  2   908     
  2   908     procedure trace(n);
  2   909       value         n;
  2   910       integer       n;
  2   911       begin
  3   912         trap(finis);
  3   913         trap(n);
  3   914     finis:
  3   915       end trace;
  2   916     \f

  2   916     message procedure overvåget side 1 - 810413/cl;
  2   917     
  2   917     boolean procedure overvåget;
  2   918     begin
  3   919       disable begin
  4   920         integer i,måde;
  4   921         integer array field cor;
  4   922         integer array ia(1:12);
  4   923     
  4   923         i:= system(12,0,ia);
  4   924         if i > 0 then
  4   925         begin
  5   926           i:= system(12,1,ia);
  5   927           måde:= ia(3);
  5   928         end
  4   929         else måde:= 0;
  4   930     
  4   930         if måde<>0 then
  4   931         begin
  5   932           cor:= coroutine(abs ia(3));
  5   933           overvåget:= d.cor.corutestmask shift (-11);
  5   934         end
  4   935         else overvåget:= cl_overvåget;
  4   936       end;
  3   937     end;
  2   938     \f

  2   938     message procedure antal_bits_ia side 1 - 940424/cl;
  2   939     
  2   939     integer procedure antal_bits_ia(ia,n,ø);
  2   940       value                            n,ø;
  2   941       integer array                 ia;
  2   942       integer                          n,ø;
  2   943     begin
  3   944       integer i, ant;
  3   945     
  3   945       ant:= 0;
  3   946       for i:= n step 1 until ø do
  3   947         if læsbit_ia(ia,i) then ant:= ant+1;
  3   948     end;
  2   949     
  2   949     message procedure trunk_til_omr side 1 - 881006/cl;
  2   950     
  2   950     integer procedure trunk_til_omr(trunk);
  2   951       value trunk; integer trunk;
  2   952     begin
  3   953       integer i,j;
  3   954     
  3   954       j:=0;
  3   955       for i:= 1 step 1 until max_antal_områder do
  3   956         if område_id(i,2) extract 12 = trunk extract 12 then j:=i;
  3   957       trunk_til_omr:=j;
  3   958     end;
  2   959     
  2   959     integer procedure omr_til_trunk(omr);
  2   960       value omr; integer omr;
  2   961     begin
  3   962       omr_til_trunk:= område_id(omr,2) extract 12;
  3   963     end;
  2   964     
  2   964     integer procedure port_til_omr(port);
  2   965       value port; integer port;
  2   966     begin
  3   967       if port shift (-6) extract 6 = 2 then
  3   968         port_til_omr:= pabx_id(port extract 6)
  3   969       else
  3   970       if port shift (-6) extract 6 = 3 then
  3   971         port_til_omr:= radio_id(port extract 6)
  3   972       else
  3   973         port_til_omr:= 0;
  3   974     end;
  2   975     
  2   975     integer procedure kanal_til_port(kanal);
  2   976       value kanal; integer kanal;
  2   977     begin
  3   978       kanal_til_port:= kanal_id(kanal) shift (-5) extract 3 shift 6 +
  3   979                        kanal_id(kanal) extract 5;
  3   980     end;
  2   981     
  2   981     integer procedure port_til_kanal(port);
  2   982       value port; integer port;
  2   983     begin
  3   984       integer i,j;
  3   985     
  3   985       j:=0;
  3   986       for i:= 1 step 1 until max_antal_kanaler do
  3   987         if kanal_id(i) = port shift (-6) shift 5 + port extract 5 then j:=i;
  3   988       port_til_kanal:= j;
  3   989     end;
  2   990     
  2   990     integer procedure kanal_til_omr(kanal);
  2   991       value kanal; integer kanal;
  2   992     begin
  3   993       kanal_til_omr:= port_til_omr( kanal_til_port(kanal) );
  3   994     end;
  2   995     
  2   995     \f

  2   995     message procedure out_xxx_bits side 1 - 810406/cl;
  2   996     
  2   996     procedure outboolbits(zud,b);
  2   997       value                   b;
  2   998       zone                zud;
  2   999       boolean                 b;
  2  1000     begin
  3  1001       integer i;
  3  1002     
  3  1002       for i:= -11 step 1 until 0 do
  3  1003       outchar(zud,if b shift i then '1' else '.');
  3  1004     end;
  2  1005     
  2  1005     procedure outintbits(zud,j);
  2  1006       value                  j;
  2  1007       zone               zud;
  2  1008       integer                j;
  2  1009     begin
  3  1010       integer i;
  3  1011     
  3  1011       for i:= -23 step 1 until 0 do
  3  1012       begin
  4  1013         outchar(zud,if j shift i extract 1 = 1 then '1' else '.');
  4  1014         if i<>0 and abs(i) mod 6 = 0 then outchar(zud,'sp');
  4  1015       end;
  3  1016     end;
  2  1017     
  2  1017     procedure outintbits_ia(zud,ia,n,ø);
  2  1018       value                        n,ø;
  2  1019       zone                  zud;
  2  1020       integer array             ia;
  2  1021       integer                      n,ø;
  2  1022     begin
  3  1023       integer i;
  3  1024     
  3  1024       for i:= n step 1 until ø do
  3  1025       begin
  4  1026         outintbits(zud,ia(i));
  4  1027         outchar(zud,'nl');
  4  1028       end;
  3  1029     end;
  2  1030                          
  2  1030     real procedure now;
  2  1031     begin
  3  1032       real f,r,r1; long l;
  3  1033     
  3  1033       systime(1,0,r); l:=r*100; f:=(l mod 100)/100;
  3  1034       systime(4,r,r1);
  3  1035       now:= r1+f;
  3  1036     end;
  2  1037     \f

  2  1037     message procedure skriv_id side 1 - 820301/cl;
  2  1038     
  2  1038     procedure skriv_id(z,id,lgd);
  2  1039       value              id,lgd;
  2  1040       integer            id,lgd;
  2  1041       zone             z;
  2  1042     begin
  3  1043       integer type,p,li,lø,bo;
  3  1044     
  3  1044       type:= id shift (-22);
  3  1045       case type+1 of
  3  1046       begin
  4  1047         <* 1: bus *>
  4  1048         begin
  5  1049           p:= write(z,<<d>,id extract 14);
  5  1050           if id shift (-14) <> 0 then
  5  1051             p:= p + write(z,".",1,string bpl_navn(id shift (-14)));
  5  1052         end;
  4  1053     
  4  1053         <* 2: linie/løb *>
  4  1054         begin
  5  1055           li:= id shift (-12) extract 10;
  5  1056           bo:= id shift (-7) extract 5;
  5  1057           if bo<>0 then bo:= bo + 'A' - 1;
  5  1058           lø:= id extract 7;
  5  1059           p:= write(z,<<d>,li,false add bo,(bo<>0) extract 1,"/",1,lø);
  5  1060         end;
  4  1061     
  4  1061         <* 3: gruppe *>
  4  1062         begin
  5  1063           if id shift (-21) = 4 <* linie-gruppe *> then
  5  1064           begin
  6  1065             li:= id shift (-5) extract 10;
  6  1066             bo:= id extract 5;
  6  1067             if bo<>0 then bo:= bo + 'A' - 1;
  6  1068             p:= write(z,<<d>,li,false add bo,(bo<>0) extract 1);
  6  1069           end
  5  1070           else <* special-gruppe *>
  5  1071             p:= write(z,"G",1,<<d>,id extract 7);
  5  1072         end;
  4  1073     
  4  1073         <* 4: telefon *>
  4  1074         begin
  5  1075           bo:= id shift (-20) extract 2;
  5  1076           li:= id extract 20;
  5  1077           case bo+1 of
  5  1078           begin
  6  1079             p:= write(z,string kanalnavn(li));
  6  1080             p:= write(z,<:K*:>);
  6  1081             p:= write(z,<:OMR :>,string områdenavn(li));
  6  1082             p:= write(z,<:OMR*:>);
  6  1083           end;
  5  1084         end;
  4  1085       end case;
  3  1086       write(z,"sp",lgd-p);
  3  1087     end skriv_id;
  2  1088     <*+3*>
  2  1089     \f

  2  1089     message skriv_new_sem side 1 - 810520/cl;
  2  1090     
  2  1090     procedure skriv_new_sem(z,type,ref,navn);
  2  1091       value                   type,ref;
  2  1092       zone                  z;
  2  1093       integer                 type,ref;
  2  1094       string                           navn;
  2  1095     <* skriver en identifikation af en semafor 'ref' i zonen z.
  2  1096     
  2  1096         type:       1=binær sem
  2  1097                     2=simpel sem
  2  1098                     3=kædet sem
  2  1099     
  2  1099         ref:        semaforreference
  2  1100     
  2  1100         navn:       semafornavn, max 18 tegn
  2  1101     *>
  2  1102     begin
  3  1103       disable if testbit29 then
  3  1104         write(z,"nl",1,"sp",26*(type-1),case type of(<:bs:>,<:ss:>,<:cs:>),
  3  1105           true,5,<<zddd>,ref,true,19,navn);
  3  1106     end;
  2  1107     \f

  2  1107     message procedure skriv_newactivity  side 1 - 810520/hko/cl;
  2  1108     
  2  1108     <**>  procedure skriv_newactivity(zud,actno,cause);
  2  1109     <**>    value                         actno,cause;
  2  1110     <**>    zone                      zud;
  2  1111     <**>    integer                       actno,cause;
  2  1112     <**>    begin
  3  1113     <*+2*>
  3  1114     <**>      if testbit28 then
  3  1115     <**>      begin integer array field cor;
  4  1116     <**>        cor:= coroutine(actno);
  4  1117     <**>        write(zud,<:  coroutine::>,<< dd>,actno,<:  ident::>,
  4  1118     <**>          << zdd>,d.cor.coruident//1000);
  4  1119     <**>      end;
  3  1120     <**>      if -, testbit23 then goto skriv_newact_slut;
  3  1121     <*-2*>
  3  1122     <**>      write(zud,"nl",1,<:newactivity(:>,<<d>,actno,
  3  1123     <**>                <:) cause=:>,<<-d>,cause);
  3  1124     <**>      if cause<1 then write(zud,<: !!!:>);
  3  1125     <**>      skriv_coru(zud,actno);
  3  1126     <**> skriv_newact_slut:
  3  1127     <**>    end skriv_newactivity;
  2  1128     <*-3*>
  2  1129     <*+99*>
  2  1130     \f

  2  1130     message procedure skriv_activity  side 1 - 810313/hko;
  2  1131     
  2  1131     <**> procedure skriv_activity(zud,actno);
  2  1132     <**>    value                     actno;
  2  1133     <**>    zone                  zud;
  2  1134     <**>    integer                     actno;
  2  1135     <**>    begin
  3  1136     <**>      integer i;
  3  1137     <**>      integer array iact(1:12);
  3  1138     <**>
  3  1139     <**>      i:=system(12,actno,iact);
  3  1140     <**>      write(zud,"nl",1,<:  activity(:>,<<d>,actno,<:) af :>,i,"sp",1,
  3  1141     <**>                if i=0 then <:neutral:> else (case sign(iact(3))+2 of
  3  1142     <**>                (<:disable:>,<:monitor:>,<:activity:>)),<: mode:>);
  3  1143     <**>      if i>0 and actno>0 and actno<=i then
  3  1144     <**>      begin
  4  1145     <**>        write(zud,"nl",1,"sp",4,<:tilstand= :>,case iact(8)+1 of
  4  1146     <**>                  (<:tom:>,<:passivate:>,
  4  1147     <**>                   <:implicit passivate:>,<:activate:>));
  4  1148     <**>        if iact(1)<>0 then
  4  1149     <**>         write(zud,<: ventende på message:>,iact(1));
  4  1150     <**>        if iact(7)>0 then
  4  1151     <**>          write(zud,"nl",1,"sp",4,<:virtuel stak::>,iact(7),"sp",2,
  4  1152     <**>                    <:hovedlager stak benyttes af activity(:>,<<d>,
  4  1153     <**>                    iact(2));
  4  1154     <**>        write(zud,"nl",1,"sp",4,<:stak(top,bund,sidst,csr,cza)=:>,
  4  1155     <**>                  iact(4),iact(5),iact(6),iact(10),iact(11));
  4  1156     <**>        if iact(9)<> 1 shift 22 then
  4  1157     <**>           write(zud,"nl",1,"sp",4,<:'head of zonechain'=:>,iact(9));
  4  1158     <**>         write(zud,"nl",1,"sp",4,<:'trap chain'=:>,iact(12));
  4  1159     <**>       end;
  3  1160     <**>     end skriv_activity
  2  1161     <*-99*>
  2  1162     <*+98*>
  2  1163     \f

  2  1163     message procedure identificer side 1 - 810520/cl;
  2  1164     
  2  1164     procedure identificer(z);
  2  1165       zone                z;
  2  1166     begin
  3  1167     disable write(z,<:coroutine::>,<< dd>,curr_coruno,
  3  1168               <:  ident::>,<< zdd >,curr_coruid);
  3  1169     end;
  2  1170     \f

  2  1170     message procedure skriv_coru  side 1 - 810317/cl;
  2  1171     
  2  1171     <**> procedure skriv_coru(zud,cor_no);
  2  1172     <**>   value                  cor_no;
  2  1173     <**>   zone               zud;
  2  1174     <**>   integer                cor_no;
  2  1175     <**> begin
  3  1176     <**>   integer i;
  3  1177     <**>   integer array field cor;
  3  1178     <**>
  3  1179     <**>
  3  1180     <**>   write(zud,"nl",1,<:  coroutine: :>,<<d>,cor_no);
  3  1181     <**>
  3  1182     <**>   cor:= coroutine(cor_no);
  3  1183     <**>   if cor = -1 then
  3  1184     <**>     write(zud,<: eksisterer ikke !!!:>)
  3  1185     <**>   else
  3  1186     <**>   begin
  4  1187     <**>     write(zud,<:;      ident = :>,<<zdd>,d.cor.coruident//1000,
  4  1188     <**>       <:      refbyte: :>,<<d>,cor,"nl",1,
  4  1189     <**>       <:    prev:             :>,<<dddd>,d.cor.prev,"nl",1,
  4  1190     <**>       <:    next:             :>,d.cor.next,"nl",1,
  4  1191     <**>       <:    timerchain.prev:  :>,d.cor(corutimerchain//2-1),"nl",1,
  4  1192     <**>       <:    timerchain.next:  :>,d.cor.corutimerchain,"nl",1,
  4  1193     <**>       <:    opchain.prev:     :>,d.cor(coruop//2-1),"nl",1,
  4  1194     <**>       <:    opchain.next:     :>,d.cor.coruop,"nl",1,
  4  1195     <**>       <:    timer:            :>,d.cor.corutimer,"nl",1,
  4  1196     <**>       <:    priority:         :>,d.cor.corupriority,"nl",1,
  4  1197     <**>       <:    typeset:          :>);
  4  1198     <**>     for i:= -11 step 1 until 0 do
  4  1199     <**>       write(zud,if d.cor.corutypeset shift i then <:1:> else <:.:>);
  4  1200     <**>     write(zud,"nl",1,<:    testmask:         :>);
  4  1201     <**>     for i:= -11 step 1 until 0 do
  4  1202     <**>       write(zud,if d.cor.corutestmask shift i then <:1:> else <:.:>);
  4  1203     <*+99*>
  4  1204     <**>     skriv_activity(zud,cor_no);
  4  1205     <*-99*>
  4  1206     <**>   end;
  3  1207     <**> end skriv_coru;
  2  1208     <*-98*>
  2  1209     <*+98*>
  2  1210     \f

  2  1210     message procedure skriv_op side 1 - 810409/cl;
  2  1211     
  2  1211     <**> procedure skriv_op(zud,opref);
  2  1212     <**>   value                opref;
  2  1213     <**>   integer              opref;
  2  1214     <**>   zone             zud;
  2  1215     <**> begin
  3  1216     <**>   integer array field op;
  3  1217     <**>   real array field raf;
  3  1218     <**>   integer lgd,i;
  3  1219     <**>   real t;
  3  1220     <**>
  3  1221     <**>   raf:= data;
  3  1222     <**>   op:= opref;
  3  1223     <**>   write(zud,"nl",1,<:op:>,<<d>,opref,<:::>);
  3  1224     <**>   if opref<first_op ! optop<=opref then
  3  1225     <**>   begin
  4  1226     <**>     write(zud,<:  !!! illegal reference !!!:>,"nl",1);
  4  1227     <**>     goto slut_skriv_op;
  4  1228     <**>   end;
  3  1229     <**>
  3  1230     <**>   lgd:= d.op.opsize;
  3  1231     <**>   write(zud,"nl",1,<<d>,
  3  1232     <**>     <:  opsize     :>,d.op.opsize,"nl",1,
  3  1233     <**>     <:  optype     :>);
  3  1234     <**>   for i:= -11 step 1 until 0 do
  3  1235     <**>     write(zud,if d.op.optype shift i then <:1:> else <:.:>);
  3  1236     <**>   write(zud,"nl",1,<<d>,
  3  1237     <**>     <:  prev       :>,d.op.prev,"nl",1,
  3  1238     <**>     <:  next       :>,d.op.next);
  3  1239     <**>   if lgd=0 then goto slut_skriv_op;
  3  1240     <**>   write(zud,"nl",1,<<d>,
  3  1241     <**>     <:  kilde      :>,d.op.kilde extract 10,"nl",1,
  3  1242     <**>     <:  tid        :>,<<zddddd>,systime(4,d.op.tid,t),<:.:>,t,"nl",1,<<d>,
  3  1243     <**>     <:  retur-sem  :>,if d.op.retur<>0 then <:cs:> else <:--:>,<<b>,
  3  1244                                d.op.retur,"nl",1,
  3  1245     <**>     <:  opkode     :>,<<b>,d.op.opkode shift (-12),"sp",1,<<d>,
  3  1246     <**>                       d.op.opkode extract 12,"nl",1,
  3  1247     <**>     <:  resultat   :>,d.op.resultat,"nl",2,
  3  1248     <**>     <:data::>);
  3  1249     <**>   skriv_hele(zud,d.op.raf,lgd-data,1278);
  3  1250     <**>slut_skriv_op:
  3  1251     <**> end skriv_op;
  2  1252     <*-98*>
  2  1253     \f

  2  1253     message procedure corutable side 1 - 810406/cl;
  2  1254     
  2  1254     procedure corutable(zud);
  2  1255       zone              zud;
  2  1256     begin
  3  1257       integer i;
  3  1258       integer array field cor;
  3  1259     
  3  1259       write(zud,"ff",1,<:***** coroutines *****:>,"nl",2,
  3  1260         <:no  id  ref   chain    timerch   opchain  timer pr:>,
  3  1261         <:    typeset    testmask:>,"nl",2);
  3  1262       for i:= 1 step 1 until maxcoru do
  3  1263       begin
  4  1264         cor:= coroutine(i);
  4  1265         write(zud,<<zd>,i,<< zdd>,d.cor.coruident//1000,<< dddd>,cor,
  4  1266           d.cor.prev,d.cor.next,d.cor(corutimerchain//2-1),
  4  1267           d.cor.corutimerchain,d.cor(coruop//2-1),d.cor.coruop,<< ddddd>,
  4  1268           d.cor.corutimer,<< dd>,d.cor.corupriority);
  4  1269         outchar(zud,'sp');
  4  1270         outboolbits(zud,d.cor.corutypeset);
  4  1271         outchar(zud,'sp');
  4  1272         outboolbits(zud,d.cor.corutestmask);
  4  1273         outchar(zud,'nl');
  4  1274       end;
  3  1275     end;
  2  1276     \f

  2  1276     message filglobal side 1 - 790302/jg;
  2  1277     
  2  1277     integer
  2  1278       dbantsf,dbkatsfri,
  2  1279       dbantb,dbkatbfri,
  2  1280       dbantef,dbkatefri,
  2  1281       dbsidstesz,dbsidstetz,
  2  1282       dbsegmax,
  2  1283       filskrevet,fillæst;
  2  1284     integer
  2  1285       bs_kats_fri, bs_kate_fri,
  2  1286       cs_opret_fil, cs_tilknyt_fil,
  2  1287       cs_frigiv_fil, cs_slet_fil,
  2  1288       cs_opret_spoolfil, cs_opret_eksternfil;
  2  1289     integer array
  2  1290       dbkatt(1:dbmaxtf,1:2),
  2  1291       dbkats(1:dbmaxsf,1:2),
  2  1292       dbkate(1:dbmaxef,1:6),
  2  1293       dbkatz(1:dbantez+dbantsz+dbanttz,1:2);
  2  1294     boolean array
  2  1295       dbkatb(1:dbmaxb);
  2  1296     zone array
  2  1297       fil(dbantez+dbantsz+dbanttz,128,1,stderror);
  2  1298     \f

  2  1298     message hentfildim side 1 - 781120/jg;
  2  1299     
  2  1299     
  2  1299     integer procedure hentfildim(fdim);
  2  1300     integer array fdim;
  2  1301     <*inddata filref i fdim(4),uddata fdim(1:8)*>
  2  1302     
  2  1302     begin integer ftype,fno,katf,i,s;
  3  1303       ftype:=fdim(4) shift (-10);
  3  1304       fno:=fdim(4) extract 10;
  3  1305       if ftype>3 or ftype=0 or fno=0 then
  3  1306         begin s:=1; goto udgang; end;
  3  1307       if fno>(case ftype of(dbmaxtf,dbmaxsf,dbmaxef)) then
  3  1308         begin s:=1; goto udgang end; <*paramfejl*>
  3  1309       katf:=case ftype of(dbkatt(fno,1),dbkats(fno,1),dbkate(fno,1));
  3  1310       if katf extract 9 = 0 then
  3  1311         begin s:=2; goto udgang end; <*tom indgang*>
  3  1312     
  3  1312       fdim(1):=katf shift (-9); <*post antal*>
  3  1313       fdim(2):=katf extract 9;  <*post længde*>
  3  1314       fdim(3):=case ftype of(   <*seg antal*>
  3  1315         dbkatt(fno,2) extract 18 - (if fno=1 then dbblokt else dbkatt(fno-1,2)
  3  1316         extract 18), dbkats(fno,2) shift (-12) extract 6 * dbbidlængde,
  3  1317         dbkate(fno,2) extract 18);
  3  1318       for i:=5 step 1 until 8 do <*externt filnavn*>
  3  1319         fdim(i):=if ftype=3 then dbkate(fno,i-2) else 0;
  3  1320       s:=0;
  3  1321     udgang:
  3  1322       hentfildim:=s;
  3  1323     <*+2*>
  3  1324     <*tz*> if testbit24 and overvåget then                         <*zt*>
  3  1325     <*tz*>   begin                                                 <*zt*>
  4  1326     <*tz*>     write(out,<:<10>hentfildim::>,s,<: :>);             <*zt*>
  4  1327     <*tz*>     pfdim(fdim);                                        <*zt*>
  4  1328     <*tz*>     ud;                                                 <*zt*>
  4  1329     <*tz*>   end;                                                  <*zt*>
  3  1330     <*-2*>
  3  1331     end hentfildim;
  2  1332     \f

  2  1332     message sætfildim side 1 - 780916/jg;
  2  1333     
  2  1333     integer procedure sætfildim(fdim);
  2  1334     integer array fdim;
  2  1335     <*inddata fdim(1:4), segant ingen effekt for tabel- og spoolfil*>
  2  1336     
  2  1336     begin
  3  1337       integer ftype,fno,katf,s,pl;
  3  1338       integer array gdim(1:8);
  3  1339       gdim(4):=fdim(4);
  3  1340       s:=hentfildim(gdim);
  3  1341       if s>0 then
  3  1342         goto udgang;
  3  1343       fno:=fdim(4) extract 10;
  3  1344       ftype:=fdim(4) shift (-10);
  3  1345       pl:= fdim(2) extract 12;
  3  1346       if fdim(1)<0 or pl<1 or pl>256 or fdim(3)<0 then
  3  1347         begin
  4  1348           s:=1; <*parameter fejl*>
  4  1349           goto udgang
  4  1350         end;
  3  1351       if fdim(1)>256//pl*fdim(3) then
  3  1352         begin
  4  1353           s:=1;
  4  1354           goto udgang;
  4  1355         end;
  3  1356     
  3  1356       <*segant*>
  3  1357       if ftype=3 then
  3  1358         begin integer segant;
  4  1359           segant:= fdim(3);
  4  1360           if segant > dbsegmax then
  4  1361             begin
  5  1362               s:=4; <*ingen plads*>
  5  1363               goto udgang
  5  1364             end;
  4  1365     \f

  4  1365     message sætfildim side 2 - 780916/jg;
  4  1366     
  4  1366     
  4  1366           if segant<>gdim(3) then
  4  1367             begin integer i,z,s; array field enavn; integer array tail(1:10);
  5  1368               z:=dbkate(fno,2) shift (-19); if z>0 then begin
  6  1369               if dbkatz(z,1) extract 12=fdim(4) then <*zone tilknyttet*>
  6  1370                 begin integer array zd(1:20);
  7  1371                   getzone6(fil(z),zd);
  7  1372                   if zd(13)>5 and zd(9)>=segant then
  7  1373                     begin <*dødt segment skal ikke udskrives*>
  8  1374                       zd(13):=5;
  8  1375                       setzone6(fil(z),zd)
  8  1376                     end
  7  1377                 end end;
  5  1378     \f

  5  1378     message sætfildim side 3 - 801031/jg;
  5  1379     
  5  1379     
  5  1379               enavn:=8;  <*ændr fil størrelse*>
  5  1380               i:=1;
  5  1381               open(zdummy,0,string gdim.enavn(increase(i)),0);
  5  1382               s:=monitor(42,zdummy,0,tail); <*lookup*>
  5  1383               if s>0 then
  5  1384                 fejlreaktion(1,s,<:lookup entry:>,0);
  5  1385               tail(1):=segant;
  5  1386               s:=monitor(44,zdummy,0,tail); <*change entry*>
  5  1387               close(zdummy,false);
  5  1388               if s<>0 then
  5  1389                 begin
  6  1390                 if s=6 then
  6  1391                   begin  <*ingen plads*>
  7  1392                     s:=4; goto udgang
  7  1393                   end
  6  1394                 else fejlreaktion(1,s,<:change entry:>,0);
  6  1395                 end;
  5  1396               dbkate(fno,2):=dbkate(fno,2) shift (-18) shift (18)
  5  1397                 add segant;
  5  1398     \f

  5  1398     message sætfildim side 4 - 801013/jg;
  5  1399     
  5  1399     
  5  1399             end;
  4  1400           fdim(3):=segant
  4  1401         end
  3  1402       else
  3  1403         if fdim(3)>gdim(3) then
  3  1404           begin
  4  1405             s:=4; <*altid ingen plads*>
  4  1406             goto udgang
  4  1407           end
  3  1408         else fdim(3):=gdim(3); <*samme længde*>
  3  1409       <*postantal,postlængde*>
  3  1410       katf:=fdim(1) shift 9  add pl;
  3  1411       case ftype of begin
  4  1412         dbkatt(fno,1):=katf;
  4  1413         dbkats(fno,1):=katf;
  4  1414         dbkate(fno,1):=katf end;
  3  1415     udgang:
  3  1416       sætfildim:=s;
  3  1417     <*+2*>
  3  1418     <*tz*> if testbit24 and overvåget then                          <*zt*>
  3  1419     <*tz*>   begin integer i;                                       <*zt*>
  4  1420     <*tz*>     write(out,<:<10>sætfildim::>,s,<: :>);               <*zt*>
  4  1421     <*tz*>     for i:=1 step 1 until 3 do gdim(i):=fdim(i);         <*zt*>
  4  1422     <*tz*>     pfdim(gdim);                                         <*zt*>
  4  1423     <*tz*>     ud;                                                  <*zt*>
  4  1424     <*tz*>   end;                                                   <*zt*>
  3  1425     <*-2*>
  3  1426     end sætfildim;
  2  1427     \f

  2  1427     message findfilenavn side 1 - 780916/jg;
  2  1428     
  2  1428     integer procedure findfilenavn(navn);
  2  1429     real array navn;
  2  1430     
  2  1430     begin
  3  1431       integer fno; array field enavn;
  3  1432       for fno:=1 step 1 until dbmaxef do
  3  1433        if dbkate(fno,1) extract 9>0 then <*optaget indgang*>
  3  1434           begin
  4  1435             enavn:=fno*12+4;
  4  1436             if navn(1)=dbkate.enavn(1) and
  4  1437                navn(2)=dbkate.enavn(2) then
  4  1438               begin
  5  1439                 findfilenavn:=fno;
  5  1440                 goto udgang
  5  1441               end
  4  1442           end;
  3  1443       findfilenavn:=0;
  3  1444     udgang:
  3  1445     end findfilenavn;
  2  1446     \f

  2  1446     message læsfil side 1 - 781120/jg;
  2  1447     
  2  1447     integer procedure læsfil(filref,postindex,zoneno);
  2  1448     value filref,postindex;
  2  1449     integer filref,postindex,zoneno;
  2  1450     <*+2*>
  2  1451     <*tz*> begin integer i,o,s;                                       <*zt*>
  3  1452     <*tz*> i:=fillæst;o:=filskrevet; s:=                              <*zt*>
  3  1453     <*-2*>
  3  1454     
  3  1454     læsfil:=tilgangfil(filref,postindex,zoneno,5);
  3  1455     
  3  1455     <*+2*>
  3  1456     <*tz*> if testbit24 and overvåget then                            <*zt*>
  3  1457     <*tz*>   begin                                                    <*zt*>
  4  1458     <*tz*>     write(out,<:<10>læsfil::>,s,filref,postindex,zoneno,   <*zt*>
  4  1459     <*tz*>     <: io::>,fillæst-i,filskrevet-o);ud;                   <*zt*>
  4  1460     <*tz*>   end;                                                     <*zt*>
  3  1461     <*tz*> end procedure;                                             <*zt*>
  2  1462     <*-2*>
  2  1463     \f

  2  1463     message skrivfil side 1 - 781120/jg;
  2  1464     
  2  1464     integer procedure skrivfil(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     skrivfil:=tilgangfil(filref,postindex,zoneno,6);
  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>skrivfil::>,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 modiffil side 1 - 781120/jg;
  2  1481     
  2  1481     integer procedure modiffil(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     modiffil:=tilgangfil(filref,postindex,zoneno,7);
  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>modiffil::>,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 tilgangfil side 1 - 781003/jg;
  2  1498     
  2  1498     integer procedure tilgangfil(filref,postindex,zoneno,operation);
  2  1499     value filref,postindex,operation;
  2  1500     integer filref,postindex,zoneno,operation;
  2  1501     <*proceduren kaldes fra læsfil,skrivfil og modiffil*>
  2  1502     
  2  1502     begin
  3  1503       integer ftype,fno,f,pl,pr,pps,seg,zno,zstate,katf,st;
  3  1504       integer array zd(1:20),fdim(1:8);
  3  1505     
  3  1505     
  3  1505     
  3  1505                 <*hent katalog*>
  3  1506     
  3  1506       fdim(4):=filref;
  3  1507       st:=hentfildim(fdim);
  3  1508       if st<>0 then
  3  1509         goto udgang; <*parameter fejl eller fil findes ikke*>
  3  1510       fno:=filref extract 10;
  3  1511       ftype:=filref shift (-10);
  3  1512       pl:=fdim(2);
  3  1513       katf:=case ftype of(dbkatt(fno,2),dbkats(fno,2),dbkate(fno,2));
  3  1514     \f

  3  1514     message tilgangfil side 2 - 781003/jg;
  3  1515     
  3  1515     
  3  1515     
  3  1515                 <*find segment adr og check postindex*>
  3  1516     
  3  1516       pps:=256//pl; <*poster pr segment*>
  3  1517       seg:=(postindex-1)//pps; <*relativt segment*>
  3  1518       pr:=(postindex-1) mod pps; <*post relativ til seg*>
  3  1519       if postindex <1 then
  3  1520         begin <*parameter fejl*>
  4  1521           st:=1;
  4  1522           goto udgang
  4  1523         end;
  3  1524       if seg>=fdim(3) then
  3  1525         begin <*post findes ikke*>
  4  1526           st:=3;
  4  1527           goto udgang
  4  1528         end;
  3  1529       case ftype of
  3  1530         begin <*find absolut segment*>
  4  1531     
  4  1531           <*tabelfil*>
  4  1532           seg:=seg+(if fno=1 then dbblokt else dbkatt(fno-1,2) extract 18);
  4  1533     
  4  1533           begin <*spoolfil*>
  5  1534             integer i,bidno;
  5  1535             bidno:=katf extract 12;
  5  1536             for i:=seg//dbbidlængde step -1 until 1 do
  5  1537               bidno:=dbkatb(bidno) extract 12;
  5  1538             seg:=(bidno-1)*dbbidlængde+seg mod dbbidlængde
  5  1539           end;
  4  1540     
  4  1540           <*extern fil,seg ok*>
  4  1541     
  4  1541         end case find abs seg;
  3  1542     \f

  3  1542     message tilgangfil side 3 - 801030/jg;
  3  1543     
  3  1543                 <*alloker zone*>
  3  1544     
  3  1544       zno:=katf shift(-19);
  3  1545       case ftype of begin
  4  1546     
  4  1546         begin <*tabelfil*>
  5  1547           integer førstetz;
  5  1548           førstetz:=dbkatz(dbsidstetz,2);
  5  1549           if zno=0 then
  5  1550             zno:=førstetz
  5  1551           else if dbkatz(zno,1)<>filref then
  5  1552             zno:=førstetz
  5  1553           else if zno <> førstetz and zno <> dbsidstetz then
  5  1554             begin integer z;
  6  1555               for z:=zno,dbkatz(z,2) while dbkatz(z,2)<>zno do;
  6  1556               dbkatz(z,2):=dbkatz(zno,2);
  6  1557               dbkatz(zno,2):=førstetz;
  6  1558               dbkatz(dbsidstetz,2):=zno;
  6  1559             end;
  5  1560           dbsidstetz:=zno
  5  1561         end;
  4  1562     \f

  4  1562     message tilgangfil side 4 - 801030/jg;
  4  1563     
  4  1563     
  4  1563         begin <*spoolfil*>
  5  1564           integer p,zslut,z;
  5  1565           if zno>0 then begin if dbkatz(zno,1) =filref then
  6  1566             goto udgangs end; <*strategi 1*>
  5  1567           p:=0;
  5  1568           zno:=dbsidstesz; <*strategi 4 hvis bedre ikke findes*>
  5  1569           zslut:= <*if dbantez>dbantef then 1 else*> dbantez+1;
  5  1570           for z:=dbantez+dbantsz step -1 until zslut do
  5  1571           begin integer zfref;
  6  1572             zfref:=dbkatz(z,1);
  6  1573             if zfref extract 10=0 then <*fri zone*>
  6  1574               begin <*strategi 2*>
  7  1575                 zno:=z;
  7  1576                 goto udgangs
  7  1577               end
  6  1578             else
  6  1579               if zfref shift (-10)=2 then
  6  1580                 begin <*zone tilknyttet spoolfil*>
  7  1581                   integer q;
  7  1582                   q:=dbkatz(z,2); <*prioritet*>
  7  1583                   if q>p then
  7  1584                     begin <*strategi 3*>
  8  1585                       p:=q;
  8  1586                       zno:=z
  8  1587                     end
  7  1588                 end;
  6  1589           end z;
  5  1590         udgangs:
  5  1591           if zno> dbantez then dbsidstesz:=zno;
  5  1592         end;
  4  1593     \f

  4  1593     message tilgangfil side 5 - 780916/jg;
  4  1594     
  4  1594         begin <*extern fil*>
  5  1595           integer z;
  5  1596           if zno=0 then
  5  1597             zno:=1 
  5  1598           else if dbkatz(zno,1) = filref then
  5  1599                  goto udgange; <*strategi  1*>
  5  1600           for z:=1 step 1 until dbantez do
  5  1601           begin integer zfref;
  6  1602             zfref:=dbkatz(z,1);
  6  1603             if zfref=0 then <*zone fri*>
  6  1604               begin zno:=z; goto udgange end <*strategi 2*>
  6  1605             else if zfref shift (-10) =2 then <*spoolfil*>
  6  1606                    zno:=z; <*strategi 3*>  <*else strategi 4-5*>
  6  1607           end z;
  5  1608         udgange:
  5  1609         end
  4  1610       end case alloker zone;
  3  1611     
  3  1611     
  3  1611     
  3  1611              <*åbn zone*>
  3  1612     
  3  1612       if zno<=dbantez then
  3  1613         begin <*extern zone;spool og tabel zoner altid åbne*>
  4  1614           integer zfref;
  4  1615           zfref:=dbkatz(zno,1);
  4  1616           if zfref<>0 and zfref<>filref and ftype=3 then
  4  1617                 begin <*luk hvis ny extern fil*>
  5  1618                   getzone6(fil(zno),zd);
  5  1619                   if zd(13)>5 then filskrevet:=filskrevet+1;
  5  1620                   zfref:=0;
  5  1621                   close(fil(zno),false); 
  5  1622                 end;
  4  1623           if zfref=0 then
  4  1624             begin <*åbn zone*>
  5  1625               array field enavn; integer i;
  5  1626               enavn:=4*2; i:=1;
  5  1627               open(fil(zno),4,case ftype-1 of(string dbsnavn(increase(i)),
  5  1628                 string fdim.enavn(increase(i))),0)
  5  1629             end
  4  1630         end;
  3  1631     \f

  3  1631     message tilgangfil side 6 - 780916/jg;
  3  1632     
  3  1632     
  3  1632     
  3  1632                 <*hent segment og sæt zone descriptor*>
  3  1633     
  3  1633       getzone6(fil(zno),zd);
  3  1634       zstate:=zd(13);
  3  1635       if zstate=0 or zd(9)<>seg then
  3  1636         begin <*positioner*>
  4  1637           if zstate>5 then
  4  1638             filskrevet:=filskrevet+1;
  4  1639           setposition(fil(zno),0,seg);
  4  1640           if -,(operation=6 and pr=0) then
  4  1641             begin <*læs seg medmindre op er skriv første post*>
  5  1642               inrec6(fil(zno),512);
  5  1643               fillæst:=fillæst+1
  5  1644             end;
  4  1645           zstate:=operation
  4  1646         end
  3  1647       else <*zstate:=max(operation,zone state)*>
  3  1648         if operation>zstate then
  3  1649           zstate:=operation;
  3  1650       zd(9):=seg;
  3  1651       zd(13):=zstate;
  3  1652       zd(16):=pl shift 1;
  3  1653       zd(14):=zd(19)+pr*zd(16);
  3  1654       setzone6(fil(zno),zd);
  3  1655     \f

  3  1655     message tilgangfil side 7 - 780916/jg;
  3  1656     
  3  1656     
  3  1656     
  3  1656              <*opdater kataloger*>
  3  1657     
  3  1657       katf:=zno shift 19 add (katf extract 19);
  3  1658       case ftype of
  3  1659         begin
  4  1660           dbkatt(fno,2):=katf;
  4  1661           dbkats(fno,2):=katf;
  4  1662           dbkate(fno,2):=katf
  4  1663         end;
  3  1664       dbkatz(zno,1):= filref;
  3  1665      if ftype=3 then dbkatz(zno,2):=0 else
  3  1666       <*if ftype=1 then allerede opd under zoneallokering*>
  3  1667       if ftype=2 then dbkatz(zno,2):= <*prioritet spoolfil*>
  3  1668         if zstate=5 then (if pr=pps-1 then 2 else 1)
  3  1669         else if zstate=6 and pr=pps-1 then 3 else 0;
  3  1670     
  3  1670     
  3  1670     
  3  1670                 <*udgang*>
  3  1671     
  3  1671     udgang:
  3  1672       if st=0 then
  3  1673         zoneno:=zno
  3  1674       else zoneno:=0; <*fejl*>
  3  1675       tilgangfil:=st;
  3  1676     end tilgangfil;
  2  1677     \f

  2  1677     
  2  1677     message pfilsystem side 1 - 781003/jg;
  2  1678     
  2  1678     procedure pfilparm(z);
  2  1679       zone z;
  2  1680     write(z,<:<10>dbantez=:>,dbantez,<: dbantsz=:>,dbantsz,<: dbanttz=:>,
  2  1681       dbanttz,<:<10>dbmaxtf=:>,dbmaxtf,<: dbblokt=:>,dbblokt,<: dbmaxsf=:>,dbmaxsf,
  2  1682       <:<10>dbmaxb=:>,dbmaxb,<:  dbbidlængde=:>,dbbidlængde,<:   dbbidmax=:>,
  2  1683       dbbidmax,<:<10>dbmaxef=:>,dbmaxef);
  2  1684     
  2  1684     procedure pfilglobal(z);
  2  1685       zone z;
  2  1686     write(z,<:<10>dbantsf=:>,dbantsf,<: dbkatsfri=:>,dbkatsfri,
  2  1687       <:<10>dbantb=:>,dbantb,<:  dbkatbfri=:>,dbkatbfri,
  2  1688       <:<10>dbantef=:>,dbantef,<: dbkatefri=:>,dbkatefri,
  2  1689       <:<10>dbsidstesz=:>,dbsidstesz,<: dbsidstetz=:>,dbsidstetz,
  2  1690       <:<10>filskrevet=:>,filskrevet,<: fillæst=:>,fillæst,
  2  1691       <:<10>dbsnavn=:>,dbsnavn,<: dbtnavn=:>,dbtnavn);
  2  1692     
  2  1692     
  2  1692     procedure pdbkate(z,i);
  2  1693     value i; integer i;
  2  1694       zone z;
  2  1695     begin integer j; array field navn;
  3  1696       navn:=i*12+4; j:=1;
  3  1697       write(z,<:<10>dbkate(:>,i,<:)=:>,
  3  1698       dbkate(i,1) shift (-9),
  3  1699       dbkate(i,1) extract 9,
  3  1700       dbkate(i,2) shift (-19),
  3  1701       dbkate(i,2) shift (-18) extract 1,
  3  1702       dbkate(i,2) extract 18,
  3  1703       <: :>,string dbkate.navn(increase(j)));
  3  1704     end;
  2  1705     \f

  2  1705     message pfilsystem side 2 - 781003/jg;
  2  1706     
  2  1706     
  2  1706     
  2  1706     procedure pdbkats(z,i);
  2  1707     value i; integer i;
  2  1708       zone z;
  2  1709     write(z,<:<10>dbkats(:>,i,<:)=:>,
  2  1710       dbkats(i,1) shift (-9),
  2  1711       dbkats(i,1) extract 9,
  2  1712       dbkats(i,2) shift (-19),
  2  1713       dbkats(i,2) shift (-18) extract 1,
  2  1714       dbkats(i,2) shift (-12) extract 6,
  2  1715       dbkats(i,2) extract 12);
  2  1716     
  2  1716     procedure pdbkatb(z,i);
  2  1717     value i;integer i;
  2  1718       zone z;
  2  1719     write(z,<:<10>dbkatb(:>,i,<:)=:>,
  2  1720       dbkatb(i) extract 12);
  2  1721     
  2  1721     procedure pdbkatt(z,i);
  2  1722     value i; integer i;
  2  1723       zone z;
  2  1724     write(z,<:<10>dbkatt(:>,i,<:)=:>,
  2  1725       dbkatt(i,1) shift (-9),
  2  1726       dbkatt(i,1) extract 9,
  2  1727       dbkatt(i,2) shift (-19),
  2  1728       dbkatt(i,2) shift (-18) extract 1,
  2  1729       dbkatt(i,2) extract 18);
  2  1730     
  2  1730     procedure pdbkatz(z,i);
  2  1731     value i; integer i;
  2  1732       zone z;
  2  1733     write(z,<:<10>dbkatz(:>,i,<:)=:>,
  2  1734       dbkatz(i,1),dbkatz(i,2));
  2  1735     \f

  2  1735     message pfilsystem side 3 - 781003/jg;
  2  1736     
  2  1736     
  2  1736     
  2  1736     procedure pfil(z,i);
  2  1737     value i; integer i;
  2  1738       zone z;
  2  1739     begin integer j,k; array field navn; integer array zd(1:20);
  3  1740       navn:=2; k:=1;
  3  1741       getzone6(fil(i),zd);
  3  1742       write(z,<:<10>fil(:>,i,<:)=:>,
  3  1743       zd(1) shift (-12),<:+:>,zd(1) extract 12,<: :>,
  3  1744       string zd.navn(increase(k)));
  3  1745       for j:=6 step 1 until 10 do write(z,zd(j));
  3  1746       write(z,<:<10>:>);
  3  1747       for j:=11 step 1 until 20 do write(z,zd(j));
  3  1748     end;
  2  1749     
  2  1749     procedure pfilsystem(z);
  2  1750       zone z;
  2  1751     begin integer i;
  3  1752     
  3  1752       write(z,<:<12>udskrift af variable i filsystem:>);
  3  1753           write(z,<:<10><10>filparm::>);
  3  1754           pfilparm(z);
  3  1755           write(z,<:<10><10>filglobal::>);
  3  1756           pfilglobal(z);
  3  1757           write(z,<:<10><10>fil: zone descriptor:>);
  3  1758       for i:=1 step 1 until dbantez+dbantsz+dbanttz do pfil(z,i);
  3  1759       write(z,<:<10><10>dbkatz: filref ezdis/szprioritet/tzref:>);
  3  1760           for i:=1 step 1 until dbantez+dbantsz+dbanttz do pdbkatz(z,i);
  3  1761           write(z,<:<10><10>dbkate: pa pl zref dis stot/kateref enavn:>);
  3  1762           for i :=1 step 1 until dbmaxef do pdbkate(z,i);
  3  1763           write(z,<:<10><10>dbkats: pa pl zref dis bant bref/katsref:>);
  3  1764           for i:=1 step 1 until dbmaxsf do pdbkats(z,i);
  3  1765           write(z,<:<10><10>dbkatb: katbref:>);
  3  1766           for i:=1 step 1 until dbmaxb do pdbkatb(z,i);
  3  1767           write(z,<:<10><10>dbkatt: pa pl zref dis stot:>);
  3  1768           for i:=1 step 1 until dbmaxtf do pdbkatt(z,i);
  3  1769     end pfilsystem;
  2  1770     \f

  2  1770     message pfilsystem side 4 - 781003/jg;
  2  1771     
  2  1771     
  2  1771     
  2  1771     procedure pfdim(fdim);
  2  1772     integer array fdim;
  2  1773     begin
  3  1774       integer i;
  3  1775       array field navn;
  3  1776       i:=1;navn:=8;
  3  1777       write(out,<:fdim::>,fdim(1),fdim(2),fdim(3),fdim(4),<: :>,
  3  1778       string fdim.navn(increase(i)));
  3  1779     end pfdim;
  2  1780     \f

  2  1780     message opretfil side 0 - 810529/cl;
  2  1781     
  2  1781     procedure opretfil;
  2  1782       <* checker parametre og vidresender operation
  2  1783          til opret_spoolfil eller opret_eksternfil *>
  2  1784     
  2  1784     begin
  3  1785       integer array field op;
  3  1786       integer status,pant,pl,segant,p_nøgle,fno,ftype;
  3  1787     
  3  1787       procedure skriv_opret_fil(z,omfang);
  3  1788         value                    omfang;
  3  1789         zone                   z;
  3  1790         integer                  omfang;
  3  1791       begin
  4  1792         write(z,"nl",1,<:+++ opret fil            :>);
  4  1793         if omfang > 0 then
  4  1794         disable
  4  1795         begin
  5  1796           skriv_coru(z,abs curr_coruno);
  5  1797           write(z,"nl",1,<<d>,
  5  1798             <:op     :>,op,"nl",1,
  5  1799             <:status :>,status,"nl",1,
  5  1800             <:pant   :>,pant,"nl",1,
  5  1801             <:pl     :>,pl,"nl",1,
  5  1802             <:segant :>,segant,"nl",1,
  5  1803             <:p-nøgle:>,p_nøgle,"nl",1,
  5  1804             <:fno    :>,fno,"nl",1,
  5  1805             <:ftype  :>,ftype,"nl",1,
  5  1806             <::>);
  5  1807         end;
  4  1808       end skriv_opret_fil;
  3  1809     \f

  3  1809     message opretfil side 1 - 810526/cl;
  3  1810     
  3  1810       trap(opretfil_trap);
  3  1811     <*+2*>
  3  1812     <**>  disable if testbit28 then
  3  1813     <**>    skriv_opret_fil(out,0);
  3  1814     <*-2*>
  3  1815     
  3  1815       stack_claim(if cm_test then 200 else 150);
  3  1816     
  3  1816     <*+2*>
  3  1817     <**> if testbit28 then write(out,"nl",1,<:+++ opret fil            :>);
  3  1818     <*-2*>
  3  1819     
  3  1819     trin1:
  3  1820       waitch(cs_opret_fil,op,true,-1);
  3  1821     
  3  1821     trin2: <* check parametre *>
  3  1822       disable begin
  4  1823     
  4  1823         ftype:= d.op.data(4) shift (-10);
  4  1824         fno:= d.op.data(4) extract 10;
  4  1825         if ftype<2 or ftype>3 or fno<>0 then
  4  1826         begin
  5  1827           status:= 1; <*parameterfejl*>
  5  1828           goto returner;
  5  1829         end;
  4  1830     
  4  1830         pant:= d.op.data(1);
  4  1831         pl:= d.op.data(2);
  4  1832         segant:= d.op.data(3);
  4  1833         p_nøgle:= d.op.opkode shift (-12);
  4  1834         if pant<0 or pl<1 or pl>256 or segant<(case ftype-1 of(1,0))
  4  1835           or p_nøgle<>0 and p_nøgle<>2 and p_nøgle<>3 then
  4  1836             status:= 1 <*parameterfejl *>
  4  1837         else
  4  1838         if pant>256//pl*segant then status:= 1 else
  4  1839         if segant>(case ftype-1 of(dbbidmax*dbbidlængde,dbsegmax)) then
  4  1840           status:= 4 <*ingen plads*>
  4  1841         else
  4  1842           status:=0;
  4  1843     \f

  4  1843     message opretfil side 2 - 810526/cl;
  4  1844     
  4  1844     
  4  1844     returner:
  4  1845     
  4  1845         d.op.data(9):= status;
  4  1846     
  4  1846     <*+2*>
  4  1847     <*tz*> if testbit24 and overvåget and status<>0 then    <*zt*>
  4  1848     <*tz*> begin                                            <*zt*>
  5  1849     <*tz*>   write(out,<:<10>opretfil::>,status,<: :>);     <*zt*>
  5  1850     <*tz*>   pfdim(d.op.data);                              <*zt*>
  5  1851     <*tz*>   write(out,<: op::>,op,d.op.retur); ud;         <*zt*>
  5  1852     <*tz*> end;                                             <*zt*>
  4  1853     <*-2*>
  4  1854     
  4  1854         <*returner eller vidresend operation*>
  4  1855         signalch(if status>0 then d.op.retur else
  4  1856           case ftype-1 of(cs_opret_spoolfil,cs_opret_eksternfil),
  4  1857           op,d.op.optype);
  4  1858       end;
  3  1859       goto trin1;
  3  1860     opretfil_trap:
  3  1861       disable skriv_opret_fil(zbillede,1);
  3  1862     
  3  1862     end opretfil;
  2  1863     \f

  2  1863     message tilknytfil side 0 - 810526/cl;
  2  1864     
  2  1864     procedure tilknytfil;
  2  1865       <* tilknytter ekstern fil og returnerer intern filid *>
  2  1866     
  2  1866     begin
  3  1867       integer array field op;
  3  1868       integer status,i,fno,segant,pa,pl,sliceant,s;
  3  1869       array field enavn;
  3  1870       integer array tail(1:10);
  3  1871     
  3  1871       procedure skriv_tilknyt_fil(z,omfang);
  3  1872         value                       omfang;
  3  1873         zone                      z;
  3  1874         integer                     omfang;
  3  1875       begin
  4  1876         write(z,"nl",1,<:+++ tilknyt fil          :>);
  4  1877         if omfang > 0 then
  4  1878         disable
  4  1879         begin real array field raf;
  5  1880           skriv_coru(z,abs curr_coruno);
  5  1881           write(z,"nl",1,<<d>,
  5  1882             <:op      :>,op,"nl",1,
  5  1883             <:status  :>,status,"nl",1,
  5  1884             <:i       :>,i,"nl",1,
  5  1885             <:fno     :>,fno,"nl",1,
  5  1886             <:segant  :>,segant,"nl",1,
  5  1887             <:pa      :>,pa,"nl",1,
  5  1888             <:pl      :>,pl,"nl",1,
  5  1889             <:sliceant:>,sliceant,"nl",1,
  5  1890             <:s       :>,s,"nl",1,
  5  1891             <::>);
  5  1892           raf:= 0;
  5  1893           write(z,<:tail::>); skriv_hele(z,tail.raf,20,128);
  5  1894           write(z,<:ia::>); skriv_hele(z,ia.raf,20,128);
  5  1895         end;
  4  1896       end skriv_tilknyt_fil;
  3  1897     \f

  3  1897     message tilknytfil side 1 - 810529/cl;
  3  1898     
  3  1898       stack_claim(if cm_test then 200 else 150);
  3  1899       trap(tilknytfil_trap);
  3  1900     
  3  1900     <*+2*>
  3  1901     <**> if testbit28 then
  3  1902     <**>   skriv_tilknyt_fil(out,0);
  3  1903     <*-2*>
  3  1904     
  3  1904     trin1:
  3  1905       waitch(cs_tilknyt_fil,op,true,-1);
  3  1906     
  3  1906     trin2:
  3  1907       wait(bs_kate_fri);
  3  1908     
  3  1908     trin3:
  3  1909       disable begin
  4  1910     
  4  1910         <* find ekstern rapportfil *>
  4  1911         enavn:= 8;
  4  1912         if find_fil_enavn(d.op.data.enavn)>0 then
  4  1913         begin
  5  1914           status:= 6; <* fil i brug *>
  5  1915           goto returner;
  5  1916         end;
  4  1917         open(zdummy,0,d.op.data.enavn,0);
  4  1918         s:= monitor(42)lookup entry:(zdummy,0,tail);
  4  1919         if s<>0 then
  4  1920         begin
  5  1921           if s=3 then status:= 2 <* fil findes ikke *>
  5  1922          else if s=6 then status:= 1 <* parameterfejl, navn *>
  5  1923          else fejlreaktion(1,s,<:lookup entry:>,0);
  5  1924           goto returner;
  5  1925         end;
  4  1926         if tail(9)<>d.op.data(4) <* contentskey,subno *> then
  4  1927         begin
  5  1928           status:= 5; <* forkert indhold *> goto returner;
  5  1929         end;
  4  1930         segant:= tail(1);
  4  1931         if segant>db_seg_max then
  4  1932           segant:= db_seg_max;
  4  1933         pa:= tail(10);
  4  1934         pl:= tail(7) extract 12;
  4  1935         if pl < 1 or pl > 256 then
  4  1936         begin status:= 7; goto returner; end;
  4  1937     \f

  4  1937     message tilknytfil side 2 - 810529/cl;
  4  1938         if pa>256//pl*segant then
  4  1939         begin status:= 7; goto returner; end;
  4  1940     
  4  1940         <* reserver *>
  4  1941         s:= monitor(52)create area:(zdummy,0,ia);
  4  1942         if s<>0 then
  4  1943         begin
  5  1944           if s=3 then status:= 2 <* fil findes ikke *>
  5  1945           else if s=1 <* areaclaims exeeded *> then
  5  1946           begin
  6  1947             status:= 4;
  6  1948             fejlreaktion(1,s,<:create area:>,1);
  6  1949           end
  5  1950           else fejlreaktion(1,s,<:create area:>,0);
  5  1951           goto returner;
  5  1952         end;
  4  1953     
  4  1953         s:= monitor(8)reserve:(zdummy,0,ia);
  4  1954         if s<>0 then
  4  1955         begin
  5  1956           if s<3 then status:= 6 <* i brug *>
  5  1957           else fejlreaktion(1,s,<:reserve:>,0);
  5  1958           monitor(64)remove area:(zdummy,0,ia);
  5  1959           goto returner;
  5  1960         end;
  4  1961     
  4  1961         tail(7):= 1 shift 12 +pl; <* tilknyttet *>
  4  1962         s:= monitor(44)change entry:(zdummy,0,tail);
  4  1963         if s<>0 then fejlreaktion(1,s,<:change entry:>,0);
  4  1964     
  4  1964         <* opdater katalog *>
  4  1965         dbantef:= dbantef+1;
  4  1966         fno:= dbkatefri;
  4  1967         dbkatefri:= dbkate(fno,2);
  4  1968         dbkate(fno,1):= pa shift 9 add pl; <* postantal,postlængde *>
  4  1969         dbkate(fno,2):= segant;
  4  1970         for i:= 5 step 1 until 8 do
  4  1971           dbkate(fno,i-2):= d.op.data(i);
  4  1972     
  4  1972         <* returparametre *>
  4  1973         d.op.data(1):= pa;
  4  1974         d.op.data(2):= pl;
  4  1975         d.op.data(3):= segant;
  4  1976         d.op.data(4):= 3 shift 10 +fno;
  4  1977         status:= 0;
  4  1978     \f

  4  1978     message tilknytfil side 3 - 810526/cl;
  4  1979     
  4  1979     
  4  1979     returner:
  4  1980         close(zdummy,false);
  4  1981         d.op.data(9):= status;
  4  1982     
  4  1982     
  4  1982     <*+2*>
  4  1983     <*tz*> if testbit24 and overvåget then                 <*zt*>
  4  1984     <*tz*> begin                                           <*zt*>
  5  1985     <*tz*>   write(out,<:<10>tilknytfil::>,status,<: :>);  <*zt*>
  5  1986     <*tz*>   pfdim(d.op.data);                             <*zt*>
  5  1987     <*tz*>   write(out,<: op::>,op,d.op.retur); ud;        <*zt*>
  5  1988     <*tz*> end;                                            <*zt*>
  4  1989     <*-2*>
  4  1990     
  4  1990         signalch(d.op.retur,op,d.op.optype);
  4  1991         if dbantef < dbmaxef then
  4  1992           signalbin(bs_kate_fri);
  4  1993       end;
  3  1994       goto trin1;
  3  1995     tilknytfil_trap:
  3  1996       disable skriv_tilknyt_fil(zbillede,1);
  3  1997     end tilknyt_fil;
  2  1998     \f

  2  1998     message frigivfil side 0 - 810529/cl;
  2  1999     
  2  1999     procedure frigivfil;
  2  2000       <* frigiver en tilknyttet ekstern fil *>
  2  2001     
  2  2001     begin
  3  2002       integer array field op;
  3  2003       integer status,fref,ftype,fno,s,i,z;
  3  2004       array field enavn;
  3  2005       integer array tail(1:10);
  3  2006     
  3  2006       procedure skriv_frigiv_fil(zud,omfang);
  3  2007         value                        omfang;
  3  2008         zone                     zud;
  3  2009         integer                      omfang;
  3  2010       begin
  4  2011         write(zud,"nl",1,<:+++ frigiv fil           :>);
  4  2012         if omfang > 0 then
  4  2013         disable
  4  2014         begin real array field raf;
  5  2015           skriv_coru(zud,abs curr_coruno);
  5  2016           write(zud,"nl",1,<<d>,
  5  2017             <:op    :>,op,"nl",1,
  5  2018             <:status:>,status,"nl",1,
  5  2019             <:fref  :>,fref,"nl",1,
  5  2020             <:ftype :>,ftype,"nl",1,
  5  2021             <:fno   :>,fno,"nl",1,
  5  2022             <:s     :>,s,"nl",1,
  5  2023             <:i     :>,i,"nl",1,
  5  2024             <:z     :>,z,"nl",1,
  5  2025             <::>);
  5  2026           raf:= 0;
  5  2027           write(zud,<:tail::>); skriv_hele(zud,tail.raf,20,128);
  5  2028         end;
  4  2029       end skriv_frigiv_fil;
  3  2030     \f

  3  2030     message frigivfil side 1 - 810526/cl;
  3  2031     
  3  2031     
  3  2031       stack_claim(if cm_test then 200 else 150);
  3  2032       trap(frigivfil_trap);
  3  2033     
  3  2033     <*+2*>
  3  2034     <**>  disable if testbit28 then
  3  2035     <**>    skriv_frigiv_fil(out,0);
  3  2036     <*-2*>
  3  2037     
  3  2037     trin1:
  3  2038       waitch(cs_frigiv_fil,op,true,-1);
  3  2039     
  3  2039     trin2:
  3  2040       disable begin
  4  2041     
  4  2041         <* find fil *>
  4  2042         fref:= d.op.data(4);
  4  2043         ftype:= fref shift (-10);
  4  2044         fno:= fref extract 10;
  4  2045         if ftype=0 or ftype>3 or fno=0 then
  4  2046         begin status:= 1; goto returner; end;
  4  2047         if fno>(case ftype of(dbmaxtf,dbmaxsf,dbmaxef)) then
  4  2048         begin status:= 1; goto returner; end;
  4  2049         if case ftype of(dbkatt(fno,1),dbkats(fno,1),dbkate(fno,1))
  4  2050            extract 9 = 0 then
  4  2051         begin
  5  2052          status:= 2; <* fil findes ikke *>
  5  2053          goto returner;
  5  2054         end;
  4  2055         if ftype <> 3 then
  4  2056         begin status:= 5; goto returner; end;
  4  2057     
  4  2057         <* frigiv evt. tilknyttet zone og areaprocess *>
  4  2058         z:= dbkate(fno,2) shift (-19);
  4  2059         if z > 0 then
  4  2060         begin
  5  2061           if dbkatz(z,1)=fref then
  5  2062           begin integer array zd(1:20);
  6  2063             getzone6(fil(z),zd);
  6  2064             if zd(13)>5 then filskrevet:= filskrevet +1;
  6  2065             close(fil(z),true);
  6  2066             dbkatz(z,1):= 0;
  6  2067           end;
  5  2068         end;
  4  2069     \f

  4  2069     message frigivfil side 2 - 810526/cl;
  4  2070     
  4  2070         <* opdater tail *>
  4  2071         enavn:= fno*12+4;
  4  2072         open(zdummy,0,dbkate.enavn,0);
  4  2073         s:= monitor(42)lookup entry:(zdummy,0,tail);
  4  2074         if s<>0 then fejlreaktion(1,s,<:lookup entry:>,0);
  4  2075         tail(7):= dbkate(fno,1) extract 9; <* ej tilknyttet,postlængde *>
  4  2076         tail(10):=dbkate(fno,1) shift (-9);<* postantal *>
  4  2077         s:= monitor(44)change entry:(zdummy,0,tail);
  4  2078         if s<>0 then fejlreaktion(1,s,<:change entry:>,0);
  4  2079         monitor(64)remove process:(zdummy,0,tail);
  4  2080         close(zdummy,true);
  4  2081     
  4  2081         <* frigiv indgang *>
  4  2082         for i:= 1, 3 step 1 until 6 do
  4  2083           dbkate(fno,1):= 0;
  4  2084         dbkate(fno,2):= dbkatefri;
  4  2085         dbkatefri:= fno;
  4  2086         dbantef:= dbantef -1;
  4  2087         signalbin(bs_kate_fri);
  4  2088         d.op.data(4):= 0; <* filref null *>
  4  2089         status:= 0;
  4  2090     
  4  2090     returner:
  4  2091         d.op.data(9):= status;
  4  2092     <*+2*>
  4  2093     <*tz*> if testbit24 and overvåget then                  <*zt*>
  4  2094     <*tz*> begin                                            <*zt*>
  5  2095     <*tz*>   write(out,<:<10>frigivfil::>,status,<: :>);    <*zt*>
  5  2096     <*tz*>   pfdim(d.op.data);                              <*zt*>
  5  2097     <*tz*>   write(out,<: op::>,op,d.op.retur); ud;         <*zt*>
  5  2098     <*tz*> end;                                             <*zt*>
  4  2099     <*-2*>
  4  2100     
  4  2100         signalch(d.op.retur,op,d.op.optype);
  4  2101       end;
  3  2102       goto trin1;
  3  2103     frigiv_fil_trap:
  3  2104        disable skriv_frigiv_fil(zbillede,1);
  3  2105     end frigivfil;
  2  2106     \f

  2  2106     message sletfil side 0 - 810526/cl;
  2  2107     
  2  2107     procedure sletfil;
  2  2108       <* sletter en spool- eller ekstern fil *>
  2  2109     
  2  2109     begin
  3  2110       integer array field op;
  3  2111       integer fref,fno,ftype,status;
  3  2112     
  3  2112       procedure skriv_slet_fil(z,omfang);
  3  2113         value                    omfang;
  3  2114         zone                   z;
  3  2115         integer                  omfang;
  3  2116       begin
  4  2117         write(z,"nl",1,<:+++ slet fil             :>);
  4  2118         if omfang > 0 then
  4  2119         disable
  4  2120         begin
  5  2121           skriv_coru(z,abs curr_coruno);
  5  2122           write(z,"nl",1,<<d>,
  5  2123             <:op    :>,op,"nl",1,
  5  2124             <:fref  :>,fref,"nl",1,
  5  2125             <:fno   :>,fno,"nl",1,
  5  2126             <:ftype :>,ftype,"nl",1,
  5  2127             <:status:>,status,"nl",1,
  5  2128             <::>);
  5  2129         end;
  4  2130       end skriv_slet_fil;
  3  2131     \f

  3  2131     message sletfil side 1 - 810526/cl;
  3  2132     
  3  2132       stack_claim(if cm_test then 200 else 150);
  3  2133     
  3  2133       trap(sletfil_trap);
  3  2134     <*+2*>
  3  2135     <**>  disable if testbit28 then
  3  2136     <**>    skriv_slet_fil(out,0);
  3  2137     <*-2*>
  3  2138     
  3  2138     trin1:
  3  2139       waitch(cs_slet_fil,op,true,-1);
  3  2140     
  3  2140     trin2:
  3  2141       disable begin
  4  2142     
  4  2142         <* find fil *>
  4  2143         fref:= d.op.data(4);
  4  2144         ftype:= fref shift (-10);
  4  2145         fno:= fref extract 10;
  4  2146         if ftype=0 or ftype>3 or fno=0 then
  4  2147         begin status:= 1; goto returner; end;
  4  2148         if fno>(case ftype of(dbmaxtf,dbmaxsf,dbmaxef)) then
  4  2149         begin status:= 1; goto returner; end;
  4  2150         if case ftype of(dbkatt(fno,1),dbkats(fno,1),dbkate(fno,1))
  4  2151           extract 9 = 0 then
  4  2152         begin
  5  2153           status:= 2; <* fil findes ikke *>
  5  2154           goto returner;
  5  2155         end;
  4  2156     
  4  2156     
  4  2156         <* slet spool- eller ekstern fil *>
  4  2157         case ftype of
  4  2158         begin
  5  2159     
  5  2159           <* tabelfil - ingen aktion *>
  5  2160           ;
  5  2161     \f

  5  2161     message sletfil side 2 - 810203/cl;
  5  2162     
  5  2162           <* spoolfil *>
  5  2163           begin
  6  2164             integer z,bidno,bf,bidant,i;
  6  2165     
  6  2165             <* hvis tilknyttet så frigiv *>
  6  2166             z:= dbkats(fno,2) shift (-19);
  6  2167             if z>0 then
  6  2168             begin
  7  2169               if dbkatz(z,1)=fref then
  7  2170               begin integer array zd(1:20);
  8  2171                 dbkatz(z,1):= 2 shift 10;
  8  2172                 getzone6(fil(z),zd); <*annuler evt. udskrivning*>
  8  2173                 if zd(13)>5 then
  8  2174                 begin zd(13):= 0; setzone6(fil(z),zd); end;
  8  2175               end;
  7  2176             end;
  6  2177     
  6  2177             <* frigiv bidder *>
  6  2178             bidno:= bf:= dbkats(fno,2) extract 12; <*bid start*>
  6  2179             bidant:= dbkats(fno,2) shift (-12) extract 6;
  6  2180             for i:= bidant -1 step -1 until 1 do
  6  2181               bidno:= dbkatb(bidno) extract 12;
  6  2182             dbkatb(bidno):= false add dbkatbfri;
  6  2183             dbkatbfri:= bf;
  6  2184             dbantb:= dbantb-bidant;
  6  2185     
  6  2185             <* frigiv indgang *>
  6  2186             dbkats(fno,1):= 0;
  6  2187             dbkats(fno,2):= dbkatsfri;
  6  2188             dbkatsfri:= fno;
  6  2189             dbantsf:= dbantsf -1;
  6  2190             signalbin(bs_kats_fri);
  6  2191           end spoolfil;
  5  2192     \f

  5  2192     message sletfil side 3 - 810203/cl;
  5  2193     
  5  2193           <* extern fil *>
  5  2194           begin
  6  2195             integer i,s,z;
  6  2196             real array field enavn;
  6  2197             integer array tail(1:10);
  6  2198     
  6  2198             <* find head and tail *>
  6  2199             enavn:= fno*12+4;
  6  2200             open(zdummy,0,dbkate.enavn,0);
  6  2201             s:= monitor(42)lookup entry:(zdummy,0,tail);
  6  2202             if s<>0 then fejlreaktion(1,s,<:lookup entry:>,0);
  6  2203     
  6  2203             <*frigiv evt. tilknyttet zone og areaprocess*>
  6  2204             z:=dbkate(fno,2) shift (-19);
  6  2205             if z>0 then
  6  2206             begin
  7  2207               if dbkatz(z,1)=fref then
  7  2208               begin integer array zd(1:20);
  8  2209                 getzone6(fil(z),zd);
  8  2210                 if zd(13)>5 then <* udskrivning *>
  8  2211                 begin <*annuler*>
  9  2212                   zd(13):= 0;
  9  2213                   setzone6(fil(z),zd);
  9  2214                 end;
  8  2215                 close(fil(z),true);
  8  2216                 dbkatz(z,1):= 0;
  8  2217               end;
  7  2218             end;
  6  2219     
  6  2219             <* fjern entry *>
  6  2220             s:= monitor(48)remove entry:(zdummy,0,tail);
  6  2221             if s<>0 then fejlreaktion(1,s,<:remove entry:>,0);
  6  2222             close(zdummy,true);
  6  2223     
  6  2223             <* frigiv indgang *>
  6  2224             for i:=1, 3 step 1 until 6 do
  6  2225               dbkate(fno,i):= 0;
  6  2226             dbkate(fno,2):= dbkatefri;
  6  2227             dbkatefri:= fno;
  6  2228             dbantef:= dbantef -1;
  6  2229             signalbin(bs_kate_fri);
  6  2230           end eksternfil;
  5  2231     
  5  2231         end ftype;
  4  2232     \f

  4  2232     message sletfil side 4 - 810526/cl;
  4  2233     
  4  2233     
  4  2233         status:= 0;
  4  2234         if ftype > 1 then
  4  2235           d.op.data(4):= 0; <*filref null*>
  4  2236     
  4  2236     returner:
  4  2237         d.op.data(9):= status;
  4  2238     
  4  2238     <*+2*>
  4  2239     <*tz*> if testbit24 and overvåget then                  <*zt*>
  4  2240     <*tz*> begin                                            <*zt*>
  5  2241     <*tz*>   write(out,<:<10>sletfil::>,status,<: :>);      <*zt*>
  5  2242     <*tz*>   pfdim(d.op.data);                              <*zt*>
  5  2243     <*tz*>   write(out,<: op::>,op,d.op.retur); ud;         <*zt*>
  5  2244     <*tz*> end;                                             <*zt*>
  4  2245     <*-2*>
  4  2246         
  4  2246          signalch(d.op.retur,op,d.op.optype);
  4  2247       end;
  3  2248       goto trin1;
  3  2249     sletfil_trap:
  3  2250         disable skriv_slet_fil(zbillede,1);
  3  2251     end sletfil;
  2  2252     \f

  2  2252     message opretspoolfil side 0 - 810526/cl;
  2  2253     
  2  2253     procedure opretspoolfil;
  2  2254       <* opretter en spoolfil og returnerer intern filid *>
  2  2255     
  2  2255     begin
  3  2256       integer array field op;
  3  2257       integer bidantal,fno,i,bs,bidstart;
  3  2258     
  3  2258       procedure skriv_opret_spoolfil(z,omfang);
  3  2259         value                          omfang;
  3  2260         zone                         z;
  3  2261         integer                        omfang;
  3  2262       begin
  4  2263         write(z,"nl",1,<:+++ opret spoolfil       :>);
  4  2264         if omfang > 0 then
  4  2265         disable
  4  2266         begin
  5  2267           skriv_coru(z,abs curr_coruno);
  5  2268           write(z,"nl",1,<<d>,
  5  2269             <:op      :>,op,"nl",1,
  5  2270             <:bidantal:>,bidantal,"nl",1,
  5  2271             <:fno     :>,fno,"nl",1,
  5  2272             <:i       :>,i,"nl",1,
  5  2273             <:bs      :>,bs,"nl",1,
  5  2274             <:bidstart:>,bidstart,"nl",1,
  5  2275             <::>);
  5  2276           end;
  4  2277         end skriv_opret_spoolfil;
  3  2278     \f

  3  2278     message opretspoolfil side 1 - 810526/cl;
  3  2279     
  3  2279       stack_claim(if cm_test then 200 else 150);
  3  2280     
  3  2280       signalbin(bs_kats_fri); <*initialiseres til åben*>
  3  2281     
  3  2281       trap(opretspool_trap);
  3  2282     <*+2*>
  3  2283     <**>  disable if testbit28 then
  3  2284     <**>    skriv_opret_spoolfil(out,0);
  3  2285     <*-2*>
  3  2286     trin1:
  3  2287       waitch(cs_opret_spoolfil,op,true,-1);
  3  2288     
  3  2288     trin2:
  3  2289       bidantal:= (d.op.data(3)<*segant*> - 1)//dbbidlængde +1;
  3  2290       wait(bs_kats_fri);
  3  2291     
  3  2291     trin3:
  3  2292       if bidantal>dbmaxb-dbantb then <*ikke plads,vent*>
  3  2293       begin
  4  2294         wait(bs_kats_fri);
  4  2295         goto trin3;
  4  2296       end;
  3  2297       disable begin
  4  2298     
  4  2298         <*alloker bidder*>
  4  2299         bs:= bidstart:= dbkatbfri;
  4  2300         for i:= bidantal-1 step -1 until 1 do
  4  2301           bs:= dbkatb(bs) extract 12;
  4  2302         dbkatbfri:= dbkatb(bs) extract 12;
  4  2303         dbkatb(bs):= false; <*sidste ref null*>
  4  2304         dbantb:= dbantb+bidantal;
  4  2305     
  4  2305         <*alloker indgang*>
  4  2306         fno:= dbkatsfri;
  4  2307         dbkatsfri:= dbkats(fno,2);
  4  2308         dbantsf:= dbantsf +1;
  4  2309         dbkats(fno,1):= d.op.data(1) shift 9 <*postantal*> add
  4  2310                         d.op.data(2) extract 9; <*postlængde*>
  4  2311         dbkats(fno,2):= bidantal shift 12 add bidstart; <*zone null*>
  4  2312     \f

  4  2312     message opretspoolfil side 2 - 810526/cl;
  4  2313     
  4  2313         <*returner*>
  4  2314         d.op.data(3):= bidantal*dbbidlængde; <*segantal*>
  4  2315         d.op.data(4):= 2 shift 10 add fno; <*filref*>
  4  2316         for i:= 5 step 1 until 8 do <*filnavn null*>
  4  2317           d.op.data(i):= 0;
  4  2318         d.op.data(9):= 0; <*status ok*>
  4  2319     
  4  2319     <*+2*>
  4  2320     <*tz*> if testbit24 and overvåget then                  <*zt*>
  4  2321     <*tz*> begin                                            <*zt*>
  5  2322     <*tz*>   write(out,<:<10>opretfil::>,0,<: :>);          <*zt*>
  5  2323     <*tz*>   pfdim(d.op.data);                              <*zt*>
  5  2324     <*tz*>   write(out,<: op:>,op,d.op.retur); ud;          <*zt*>
  5  2325     <*tz*> end;                                             <*zt*>
  4  2326     <*-2*>
  4  2327     
  4  2327         signalch(d.op.retur,op,d.op.optype);
  4  2328         if dbantsf<dbmaxsf then signalbin(bs_kats_fri);
  4  2329       end;
  3  2330       goto trin1;
  3  2331     
  3  2331     opretspool_trap:
  3  2332         disable skriv_opret_spoolfil(zbillede,1);
  3  2333     
  3  2333     end opretspoolfil;
  2  2334     \f

  2  2334     message opreteksternfil side 0 - 810526/cl;
  2  2335     
  2  2335     procedure opreteksternfil;
  2  2336       <* opretter og knytter en ekstern fil *>
  2  2337     
  2  2337     begin
  3  2338       integer array field op;
  3  2339       integer status,s,i,fno,p_nøgle;
  3  2340       integer array tail(1:10),zd(1:20);
  3  2341       real r;
  3  2342       real array field enavn;
  3  2343     
  3  2343       procedure skriv_opret_ekstfil(z,omfang);
  3  2344         value                         omfang;
  3  2345         zone                        z;
  3  2346         integer                       omfang;
  3  2347       begin
  4  2348         write(z,"nl",1,<:+++ opret ekstern fil    :>);
  4  2349         if omfang > 0 then
  4  2350         disable
  4  2351         begin real array field raf;
  5  2352           skriv_coru(z,abs curr_coruno);
  5  2353           write(z,"nl",1,<<d>,
  5  2354             <:op     :>,op,"nl",1,
  5  2355             <:status :>,status,"nl",1,
  5  2356             <:s      :>,s,"nl",1,
  5  2357             <:i      :>,i,"nl",1,
  5  2358             <:fno    :>,fno,"nl",1,
  5  2359             <:p-nøgle:>,p_nøgle,"nl",1,
  5  2360             <::>);
  5  2361           raf:= 0;
  5  2362           write(z,<:tail::>); skriv_hele(z,tail.raf,20,128);
  5  2363           write(z,<:zd::>); skriv_hele(z,zd.raf,40,28);
  5  2364         end;
  4  2365       end skriv_opret_ekstfil;
  3  2366     \f

  3  2366     message opreteksternfil side 1 - 810526/cl;
  3  2367     
  3  2367       stack_claim(if cm_test then 200 else 150);
  3  2368     
  3  2368       signalbin(bs_kate_fri); <*initialiseres til åben*>
  3  2369     
  3  2369       trap(opretekst_trap);
  3  2370     <*+2*>
  3  2371     <**>  disable if testbit28 then
  3  2372     <**>    skriv_opret_ekstfil(out,0);
  3  2373     <*-2*>
  3  2374     trin1:
  3  2375       waitch(cs_opret_eksternfil,op,true,-1);
  3  2376     
  3  2376     trin2:
  3  2377       wait(bs_kate_fri);
  3  2378     
  3  2378     trin3:
  3  2379       <*opret temporær fil og tilknyt den*>
  3  2380       disable begin
  4  2381     
  4  2381         enavn:= 8;
  4  2382         <*opret*>
  4  2383         open(zdummy,0,d.op.data.enavn,0);
  4  2384         tail(1):= d.op.data(3); <*segant*>
  4  2385         tail(2):= 1;
  4  2386         tail(6):= systime(7,0,r); <*shortclock*>
  4  2387         tail(7):= 1 shift 12 +d.op.data(2) extract 12; <*tilknyttet,postlgd*>
  4  2388         tail(8):= 0;
  4  2389         tail(9):= 31 shift 12; <*contentskey=ekstern fil,subnr=0*>
  4  2390         tail(10):= d.op.data(1); <*postantal*>
  4  2391         s:= monitor(40)create entry:(zdummy,0,tail);
  4  2392         if s<>0 then
  4  2393         begin
  5  2394           if s=4 <*claims exeeded*> then
  5  2395           begin
  6  2396             status:= 4;
  6  2397             fejlreaktion(1,s,<:create entry:>,1);
  6  2398             goto returner;
  6  2399           end;
  5  2400           if s=3 <*navn ikke unikt*> then
  5  2401           begin status:= 6; goto returner; end;
  5  2402           fejlreaktion(1,s,<:create entry:>,0);
  5  2403         end;
  4  2404     \f

  4  2404     message opreteksternfil side 2 - 810203/cl;
  4  2405     
  4  2405         p_nøgle:= d.op.opkode shift (-12);
  4  2406         s:= monitor(50)permanent_entry:(zdummy,p_nøgle,tail);
  4  2407         if s<>0 then
  4  2408         begin
  5  2409           if s=6 then
  5  2410           begin <*claims exeeded*>
  6  2411             status:= 4;
  6  2412             fejlreaktion(1,s,<:permanent entry:>,1);
  6  2413             monitor(48)remove entry:(zdummy,0,tail);
  6  2414             goto returner;
  6  2415           end
  5  2416           else fejlreaktion(1,s,<:permanent entry:>,0);
  5  2417         end;
  4  2418     
  4  2418         <*reserver*>
  4  2419         s:= monitor(52)create areaprocess:(zdummy,0,zd);
  4  2420         if s<>0 then
  4  2421         begin
  5  2422           fejlreaktion(1,s,<:create area:>,if s=1 then 1 else 0);
  5  2423           status:= 4;
  5  2424           monitor(48)remove entry:(zdummy,0,zd);
  5  2425           goto returner;
  5  2426         end;
  4  2427     
  4  2427         s:= monitor(8)reserve:(zdummy,0,zd);
  4  2428         if s<>0 then fejlreaktion(1,s,<:reserve:>,0);
  4  2429     
  4  2429         <*tilknyt*>
  4  2430         dbantef:= dbantef +1;
  4  2431         fno:= dbkatefri;
  4  2432         dbkatefri:= dbkate(fno,2);
  4  2433         dbkate(fno,1):= tail(10) shift 9 add (tail(7) extract 12);
  4  2434         dbkate(fno,2):= tail(1);
  4  2435         getzone6(zdummy,zd);
  4  2436         for i:= 2 step 1 until 5 do
  4  2437           dbkate(fno,i+1):= d.op.data(3+i):= zd(i); <*navn*>
  4  2438         d.op.data(3):= tail(1);
  4  2439         d.op.data(4):= 3 shift 10 +fno;
  4  2440         status:= 0;
  4  2441     \f

  4  2441     message opreteksternfil side 3 - 810526/cl;
  4  2442     
  4  2442     returner:
  4  2443     
  4  2443         close(zdummy,false);
  4  2444         d.op.data(9):= status;
  4  2445     
  4  2445     <*+2*>
  4  2446     <*tz*> if testbit24 and overvåget then                  <*zt*>
  4  2447     <*tz*> begin                                            <*zt*>
  5  2448     <*tz*>   write(out,<:<10>opretfil::>,status,<: :>);     <*zt*>
  5  2449     <*tz*>   pfdim(d.op.data);                              <*zt*>
  5  2450     <*tz*>   write(out,<: op::>,op,d.op.retur); ud;         <*zt*>
  5  2451     <*tz*> end;                                             <*zt*>
  4  2452     <*-2*>
  4  2453     
  4  2453         signalch(d.op.retur,op,d.op.optype);
  4  2454         if dbantef<dbmaxef then signalbin(bs_kate_fri);
  4  2455       end;
  3  2456       goto trin1;
  3  2457     
  3  2457     opretekst_trap:
  3  2458         disable skriv_opret_ekstfil(zbillede,1);
  3  2459     
  3  2459     end opreteksternfil;
  2  2460     
  2  2460     \f

  2  2460     message attention_erklæringer side 1 - 850820/cl;
  2  2461     
  2  2461       integer
  2  2462         tf_kommandotabel,
  2  2463         cs_att_pulje,
  2  2464         bs_fortsæt_adgang,
  2  2465         att_proc_ref;
  2  2466     
  2  2466       integer array
  2  2467         att_flag,
  2  2468         att_signal(1:att_maske_lgd//2);
  2  2469     
  2  2469       integer array
  2  2470        terminal_tab(1:terminal_beskr_længde//2*(1<*io*>+
  2  2471                             max_antal_operatører+max_antal_garageterminaler)),
  2  2472        fortsæt(1:32);
  2  2473     \f

  2  2473     message procedure afslut_kommando side 1 - 810507/hko;
  2  2474     
  2  2474       procedure afslut_kommando(op_ref);
  2  2475         integer array field     op_ref;
  2  2476         begin integer nr,i,sem;
  3  2477           i:= d.op_ref.kilde;
  3  2478           nr:= if i=299 then max_antal_operatører+max_antal_garageterminaler+1
  3  2479                else case i//100 of (0,i mod 100,max_antal_operatører+(i mod 100));
  3  2480           sætbit_ia(att_flag,nr,0);
  3  2481           d.op_ref.optype:=gen_optype;
  3  2482     <* "husket" attention disabled ****************
  3  2483           if sætbit_ia(att_signal,nr,0)=1 then
  3  2484           begin
  3  2485             sem:=if i=299 then cs_talevejsswitch else
  3  2486                  case i//100 of (cs_io_komm,cs_operatør(i mod 100),
  3  2487                                  cs_garage(i mod 100));
  3  2488             afslut_operation(op_ref,0);
  3  2489             start_operation(op_ref,i,cs_att_pulje,0);
  3  2490             signal_ch(sem,op_ref,gen_optype);
  3  2491          end
  3  2492          else
  3  2493     ********************* disable "husket" attention *>
  3  2494             afslut_operation(op_ref,cs_att_pulje);
  3  2495         end;
  2  2496     \f

  2  2496     message procedure læs_store side 1 - 880919/cl;
  2  2497     
  2  2497     integer procedure læs_store(z,c);
  2  2498       zone                      z;
  2  2499       integer                     c;
  2  2500     begin
  3  2501       læs_store:= readchar(z,c);
  3  2502       if 'a' <= c and c <= 'å' then c:= c - 'a' + 'A';
  3  2503     end;
  2  2504     \f

  2  2504     message procedure param side 1 - 810226/cl;
  2  2505     
  2  2505     
  2  2505     
  2  2505     integer procedure param(txt,pos,spec,tabel_id,type,værdi,sep);
  2  2506     value tabel_id;
  2  2507     integer pos, tabel_id, type, sep;
  2  2508     integer array txt, spec, værdi;
  2  2509     
  2  2509     
  2  2509     
  2  2509            <*************************************>
  2  2510            <*                                   *>
  2  2511            <*   CLAUS LARSEN:  15.07.77         *>
  2  2512            <*                                   *>
  2  2513            <*************************************>
  2  2514     
  2  2514     
  2  2514     
  2  2514     
  2  2514     <*   param syntax-analyserer en parameterliste, og   *>
  2  2515     <*   bestemmer næste parameter og den separator der  *>
  2  2516     <*   afslutter parameteren                           *>
  2  2517     
  2  2517     
  2  2517     
  2  2517     begin
  3  2518        integer array klasse(0:127), aktuel_param(1:4), fdim(1:8);
  3  2519        real array indgang(1:2);
  3  2520        integer i, j, tegn, tegn_pos, tal, hashnøgle,
  3  2521           zone_nr, top, max_segm, start_segm, lpos;
  3  2522        boolean  minus, separator;
  3  2523        lpos := pos;
  3  2524        type:=-1;
  3  2525        for i:=1 step 1 until 4 do værdi(i):=0;
  3  2526     \f

  3  2526     message procedure param side 2 - 810428/cl,hko;
  3  2527     
  3  2527     
  3  2527     
  3  2527        <* grænsecheck for pos *>
  3  2528        begin
  4  2529           integer nedre, øvre;
  4  2530     
  4  2530           nedre := system(3,øvre,txt);
  4  2531           nedre := nedre * 3 - 2;
  4  2532           øvre  := øvre  * 3;
  4  2533           if lpos < (nedre - 1) or øvre < lpos then
  4  2534           begin
  5  2535             sep:= -1;
  5  2536             param:= 5;
  5  2537             goto slut;
  5  2538           end;
  4  2539     
  4  2539           <* er parameterlisten slut *>
  4  2540           lpos:= lpos+1;
  4  2541           læs_tegn(txt,lpos,tegn);
  4  2542           if tegn = 'em' or tegn = 'nl' or tegn = 'nul' then
  4  2543           begin
  5  2544              lpos := lpos - 2;
  5  2545              sep := tegn;
  5  2546              param := 5;
  5  2547     
  5  2547              goto slut;
  5  2548           end else lpos:= lpos-1;
  4  2549        end;
  3  2550     \f

  3  2550     message procedure param side 3 - 810428/cl;
  3  2551     
  3  2551     
  3  2551        <* initialisering *>
  3  2552        for i := 1 step 1 until 4 do
  3  2553           aktuel_param(i) := 0;
  3  2554        minus := separator := false;
  3  2555     
  3  2555        <* initialiser klassetabel *>
  3  2556        for i := 65 step 1 until 93,
  3  2557                 97 step 1 until 125 do klasse(i) := 1;
  3  2558        for i := 48 step 1 until 57 do klasse(i) := 2;
  3  2559        for i := 0 step 1 until 47, 58 step 1 until 64, 
  3  2560                 94, 95, 96, 126, 127 do klasse(i) := 4;
  3  2561     
  3  2561     
  3  2561        <* sæt specialtegn *>
  3  2562        i := 1;
  3  2563        læs_tegn(spec,i,tegn);
  3  2564        while tegn <> 0 do
  3  2565        begin
  4  2566           if klasse(tegn) = 4 and tegn <> 'sp' and tegn <> 'nl' then
  4  2567              klasse(tegn) := 3;
  4  2568           læs_tegn(spec,i,tegn);
  4  2569        end;
  3  2570     \f

  3  2570     message procedure param side 4 - 810226/cl;
  3  2571     
  3  2571     
  3  2571        <* læs første tegn i ny parameter og bestem typen *>
  3  2572        læs_tegn(txt,lpos,tegn);
  3  2573     
  3  2573        case klasse(tegn) of 
  3  2574        begin
  4  2575     
  4  2575           <* case 1 - bogstav *>
  4  2576           begin
  5  2577              type := 0;
  5  2578              param := 0;
  5  2579              tegn_pos := 1;
  5  2580              hashnøgle := 0;
  5  2581     
  5  2581              <* læs parameter *>
  5  2582              while tegn_pos < 12 and klasse(tegn) <> 4 do
  5  2583              begin
  6  2584                 hashnøgle := hashnøgle + tegn;
  6  2585                 skriv_tegn(aktuel_param,tegn_pos,tegn);
  6  2586                 læs_tegn(txt,lpos,tegn);
  6  2587              end;
  5  2588     
  5  2588              <* find separator *>
  5  2589              while klasse(tegn) <> 4 do læs_tegn(txt,lpos,tegn);
  5  2590              sep := tegn;
  5  2591     \f

  5  2591     message procedure param side 5 - 810226/cl;
  5  2592     
  5  2592              <* tabelopslag *>
  5  2593              if tabel_id <> 0 then
  5  2594              begin
  6  2595                 <* hent max_segm *>
  6  2596     
  6  2596                 fdim(4) := tabel_id;
  6  2597                 j := hent_fil_dim(fdim);
  6  2598                 if j > 0 then
  6  2599                 begin
  7  2600                    param := 4;
  7  2601                    for i := 1 step 1 until 4 do 
  7  2602                       værdi(i) := aktuel_param(i);
  7  2603                    goto slut;
  7  2604                 end;
  6  2605                 max_segm := fdim(3);
  6  2606     
  6  2606                 <* forbered opslag *>
  6  2607                 start_segm := (hashnøgle mod max_segm) + 1;
  6  2608                 indgang(1) := 0.0 shift 48 add aktuel_param(1)
  6  2609                    shift 24 add aktuel_param(2);
  6  2610                 indgang(2) := 0.0 shift 48 add aktuel_param(3)
  6  2611                    shift 24 add aktuel_param(4);
  6  2612                 hashnøgle := start_segm;
  6  2613     \f

  6  2613     message procedure param side 6 - 810226/cl;
  6  2614     
  6  2614                 <* søg navn *>
  6  2615                 repeat
  6  2616                    <* læs segment *>
  6  2617                    læs_fil(tabel_id,hashnøgle,zone_nr);
  6  2618     
  6  2618                    <* beregn sidste element *>
  6  2619                    top := fil(zone_nr,1) extract 24;
  6  2620                    top := (top - 1) * 4 + 2;
  6  2621     
  6  2621                    <* søg *>
  6  2622                    for i := 2 step 4 until top do
  6  2623                       if fil(zone_nr,i) = indgang(1) and
  6  2624                          fil(zone_nr,i+1) = indgang(2) then
  6  2625                       begin
  7  2626                          <* fundet *>
  7  2627                          værdi(1) := fil(zone_nr,i+2) shift (-24)
  7  2628                                        extract 24;
  7  2629                          værdi(2) := fil(zone_nr,i+2) extract 24;
  7  2630                          værdi(3) := fil(zone_nr,i+3) shift (-24)
  7  2631                                      extract 24;
  7  2632                          værdi(4) := fil(zone_nr,i+3) extract 24;
  7  2633                          goto fundet;
  7  2634                       end;
  6  2635     
  6  2635                    if top = 122 then <*overløb *>
  6  2636                       hashnøgle := (hashnøgle mod max_segm) + 1;
  6  2637                 until top < 122 or hashnøgle = start_segm;
  6  2638     
  6  2638                 <* navn findes ikke *>
  6  2639                 param := 2;
  6  2640                 for j := 1 step 1 until 4 do
  6  2641                    værdi(j) := aktuel_param(j);
  6  2642     fundet: ;
  6  2643              end <*tabel_id <> 0 *>
  5  2644              else
  5  2645                 for i := 1 step 1 until 4 do
  5  2646                    værdi(i) := aktuel_param(i);
  5  2647           end <* case 1 *>;
  4  2648     \f

  4  2648     message procedure param side 7 - 810310/cl,hko;
  4  2649     
  4  2649           <* case 2 - ciffer *>
  4  2650     cif:  begin
  5  2651                type:=tal := 0;
  5  2652              while klasse(tegn) = 2 do
  5  2653              begin
  6  2654                 type:=type+1;
  6  2655                 tal := tal * 10 + (tegn - 48);
  6  2656                 læs_tegn(txt,lpos,tegn);
  6  2657              end;
  5  2658              if minus then tal := -tal;
  5  2659              værdi(1) := tal;
  5  2660              sep := tegn;
  5  2661              param := 0;
  5  2662           end <* case 2 *>;
  4  2663     \f

  4  2663     message procedure param side 8 - 810428/cl;
  4  2664     
  4  2664           <* case 3 - specialtegn *>
  4  2665     spc:  begin
  5  2666              if tegn = '-' then
  5  2667              begin
  6  2668                 læs_tegn(txt,lpos,tegn);
  6  2669                 if klasse(tegn) = 2 then
  6  2670                 begin
  7  2671                    minus := true;
  7  2672                    goto cif;
  7  2673                 end
  6  2674                 else
  6  2675                 begin
  7  2676                    tegn := '-';
  7  2677                    lpos := lpos - 1;
  7  2678                 end;
  6  2679              end;
  5  2680              <* syntaxfejl *>
  5  2681              param := if separator then 1 else 3;
  5  2682              sep := tegn;
  5  2683           end <* case 3 *>;
  4  2684     
  4  2684           <* case 4 - separator *>
  4  2685           begin
  5  2686              separator := true;
  5  2687              goto spc;
  5  2688           end <* case 4 *>;
  4  2689     
  4  2689        end <* case *>;
  3  2690     
  3  2690        lpos := lpos - 1;
  3  2691     slut: 
  3  2692        pos := lpos;
  3  2693     end;
  2  2694     \f

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

  2  2730     message procedure læs_param_sæt side 2 - 810428/hko;
  2  2731     
  2  2731        parm              skal omfatte elementerne 1 til 4.
  2  2732        (retur,int.arr.)  ved returstatus<=0 indeholder alle elemen-
  2  2733                          terne værdien 0.
  2  2734     
  2  2734                          type (element,indhold)
  2  2735                            1: 1-4,teksten
  2  2736                          2-3: 1, talværdien
  2  2737                            4: 1, tal shift 5 +tegnværdi (A=1,B=2,--,Å=29)
  2  2738                            5: 1, talværdi (uden G)
  2  2739                            6: 1, (som'4') shift 7 + løb
  2  2740                            7: 1, bus
  2  2741                               2, linie/løb som '6'
  2  2742                            8: 1, tal shift 5 eller som '4'
  2  2743                               2, tekst (1-3 bogstaver)
  2  2744                               3, løb
  2  2745                            9: 1 og 2, som '8'
  2  2746                           10: 1, talværdi
  2  2747                               2, talværdi
  2  2748                           11: 1, som '5'
  2  2749                               2, vogn (bus eller linie/løb)
  2  2750                           12: 1, dato
  2  2751                               2, tid
  2  2752     
  2  2752        term              iso-tegnværdien for tegnet der afslutter
  2  2753        (retur,int)       parameter_sættet.
  2  2754     
  2  2754        res               som læs_param_sæt.
  2  2755        (retur,int)
  2  2756     
  2  2756     *>
  2  2757     \f

  2  2757     message procedure læs_param_sæt side 3 - 810310/hko;
  2  2758     
  2  2758       begin
  3  2759         integer max_ant;
  3  2760     
  3  2760         max_ant:= 3;
  3  2761     
  3  2761         begin
  4  2762           integer
  4  2763             i,j,k,              <* hjælpe variable *>
  4  2764             nr,                 <* nummer på parameter i sættet *>
  4  2765             apos,               <* aktuel tegnposition *>
  4  2766             cifre,             <* parametertype (param: 0=tekst, >1=tal) *>
  4  2767             sep;                <* afsluttende skilletegn ved param *>
  4  2768     
  4  2768           integer array field
  4  2769             iaf;                <* hjælpe variabel *>
  4  2770     
  4  2770           integer array
  4  2771             par(1:4*max_ant),   <* 4 elementer for hver aktuel parameter *>
  4  2772             s,                  <* 1 element med separator for hver parameter *>
  4  2773             t(1:max_ant),       <* 1 element med typen for hver parameter *>
  4  2774             værdi(1:4),         <* værdi af aktuel parameter jvf. param *>
  4  2775             spec(1:1);          <* specialtegn i navne jvf. param *>
  4  2776     
  4  2776     <*          de interne typer af enkeltparametre er
  4  2777     
  4  2777                 type  parameter
  4  2778     
  4  2778                   1:  1-3 tegn tekst (1 ord)
  4  2779                   2:  4-6 tegn       (2 ord)
  4  2780                   3:  7-9 tegn       (3 ord)
  4  2781                   4:10-11 tegn       (4 ord)
  4  2782                   5:  positivt heltal
  4  2783                   6:  negativt heltal
  4  2784                   7:  positivt heltal<1000 efterfulgt af stort bogstav
  4  2785                   8:  G efterfulgt af positivt heltal<100
  4  2786     
  4  2786     *>
  4  2787     \f

  4  2787     message procedure læs_param_sæt side 4 - 810408/hko;
  4  2788     
  4  2788           nr:= 0;
  4  2789           res:= -1;
  4  2790           spec(1):= 0; <* ingen specialtegn *>
  4  2791           apos:= pos;
  4  2792           for i:= 1 step 1 until 4 do parm(i):= 0;
  4  2793           for i:= 1 step 1 until max_ant do
  4  2794           begin
  5  2795             s(i):= t(i):= 0;
  5  2796             for j:= 1 step 1 until 4 do par((i-1)*4+j):= 0;
  5  2797           end;
  4  2798           repeat
  4  2799             <* skip foranstillede sp-tegn *>
  4  2800             for i:= param(tekst,apos,spec,0<*intet tabelopslag*>,cifre,værdi,sep)
  4  2801                 while i=1 and sep='sp' do;
  4  2802     <*+2*>    
  4  2803             begin
  5  2804               if testbit25 and testbit26 then
  5  2805               disable begin
  6  2806                 write(out,"nl",1,<:param (apos,cifre,sep):>,<< -dddd>,
  6  2807                       i,apos,cifre,sep);
  6  2808                 laf:=0;
  6  2809                 if cifre<>0 then
  6  2810                    write(out,<:  værdi(1-4)::>,
  6  2811                          << -dddd>,værdi(1),værdi(2),værdi(3),værdi(4))
  6  2812                 else write(out,<:  værdi::>,værdi.laf);
  6  2813                 ud;
  6  2814               end;
  5  2815             end;
  4  2816     <*-2*>
  4  2817             ;
  4  2818             if i<>0 then <* ikke ok *>
  4  2819             begin
  5  2820               if i=1 and (sep=',' or sep=';') then <* slut_tegn*>
  5  2821               begin
  6  2822                 apos:= apos -1;
  6  2823                 res:= 0;
  6  2824               end
  5  2825               else if i=1 then res:=-26 <* skilletegn *>
  5  2826               else <* i=5 *> res:= -25 <* parameter mangler *>
  5  2827             end
  4  2828             else <* i=0 *>
  4  2829             begin
  5  2830               if sep=',' or sep=';' then apos:=apos-1;
  5  2831               iaf:= nr*8;
  5  2832               nr:= nr +1;
  5  2833     \f

  5  2833     message procedure læs_param_sæt side 5 - 810520/hko/cl;
  5  2834     
  5  2834               if cifre=0 <* navne_parameter *> then
  5  2835               begin
  6  2836                 if værdi(2)=0
  6  2837                    and læstegn(værdi,1,i)='G'
  6  2838                    and læstegn(værdi,2,j)>'0' and j<='9'
  6  2839                    and (læstegn(værdi,3,k)=0 or (k>='0' and k<='9'))
  6  2840                 then
  6  2841                 begin <* gruppenavn, repræsenteres som tal *>
  7  2842                   t(nr):= 8;
  7  2843                   j:= j -'0';
  7  2844                   par.iaf(1):= if k=0 then j else (j*10+(k-'0'));
  7  2845                   s(nr):= sep;
  7  2846                 end
  6  2847                 else
  6  2848                 begin <* generel tekst *>
  7  2849                   i:= 0;
  7  2850                   for i:= i +1 while i<=4 do
  7  2851                   begin
  8  2852                     if værdi(i)<>0 then
  8  2853                     begin
  9  2854                       t(nr):= i;
  9  2855                       par.iaf(i):= værdi(i);
  9  2856                     end
  8  2857                     else i:= 4;
  8  2858                   end;
  7  2859                   s(nr):= sep;
  7  2860                 end <* generel tekst *>
  6  2861               end <* navne_parameter *>
  5  2862               else
  5  2863               begin <* talparameter *>
  6  2864                 i:= if værdi(1)<0 then 6 <* neg.tal *>
  6  2865                   else if værdi(1)>0 and værdi(1)<1000
  6  2866                           and sep>='A' and sep<='Å' then 7
  6  2867                   else 5 <* positivt tal *>;
  6  2868                 t(nr):= i;
  6  2869                 par.iaf(1):= if i<>7 then værdi(1)
  6  2870                              else værdi(1) shift 5 +(sep+1-'A');
  6  2871                 par.iaf(2):= cifre;
  6  2872                 apos:= apos+1;
  6  2873                 s(nr):= if i=7 then læstegn(tekst,apos,sep) else sep;
  6  2874                 apos:= apos-1;
  6  2875               end;
  5  2876             end;<* i=0 *>
  4  2877           until (ant>0 and nr=ant)
  4  2878                 or nr=max_ant
  4  2879                 or res<> -1
  4  2880                 or sep='sp' or sep=';' or sep='em'
  4  2881                 or sep=',' or sep='nl' or sep='nul';
  4  2882     \f

  4  2882     message procedure læs_param_sæt side 6 - 810508/hko;
  4  2883     
  4  2883           if ant>nr then res:= -25 <*parameter mangler*>
  4  2884           else
  4  2885           if nr=0 or t(1)=0 then
  4  2886           begin  <* ingen parameter før skilletegn *>
  5  2887             if res=-25 then res:= 0;
  5  2888           end
  4  2889           else if sep<>'sp' and sep<>'nl' and sep <> 'em'
  4  2890                   and sep<>';' and sep<>',' then
  4  2891           begin <* ulovligt afsluttende skilletegn *>
  5  2892             res:= -26;
  5  2893           end
  4  2894           else
  4  2895           begin <* en eller flere lovligt afsluttede parametre *>
  5  2896             if t(1)<5 and nr=1 then
  5  2897     
  5  2897     <* 1 navne_parameter *>
  5  2898     
  5  2898             begin
  6  2899               res:= 1;
  6  2900               tofrom(parm,par,8);
  6  2901             end
  5  2902             else if <*t(1)<9 and *> nr=1 then
  5  2903     
  5  2903     <* 1 parameter af anden type *>
  5  2904     
  5  2904             begin <*tal,linie eller gruppe *>
  6  2905               res:= t(1) -3;
  6  2906               parm(1):= par(1);
  6  2907             end
  5  2908             else if t(1)=5 <* pos.tal *> or t(1)=7 <*linie*> then
  5  2909     
  5  2909     <* mere end 1 parameter, hvoraf 1. er pos.tal eller linienr *>
  5  2910     
  5  2910             begin
  6  2911               i:= par(1); <* lovlige parametre er alle repræsenteret i et ord *>
  6  2912               j:= par(5); <* internt                                          *>
  6  2913               k:= par(9); <*                                                  *>
  6  2914               if nr=2 then
  6  2915               <* 2 parametre i sættet *>
  6  2916               begin
  7  2917                 res:= if (s(1)='/' or s(1)='.') and t(2)=5 <*pos.tal*> then 6
  7  2918                       else if s(1)='.' and t(2)=1 then 9
  7  2919                       else if s(1)='-' and t(1)=5 and t(2)=5 then 10
  7  2920                       else if s(1)<>'/' and s(1)<>'.'
  7  2921                                         and s(1)<>'-' then -26 <* skilletegn *>
  7  2922                       else -27;<* parametertype*>
  7  2923     \f

  7  2923     message procedure læs_param_sæt side 7 - 810501/hko;
  7  2924     
  7  2924     <* mere end 1 parameter, hvoraf 1. er pos.tal eller linienr *>
  7  2925     
  7  2925                 <* 2 parametre i sættet *>
  7  2926                 if res=6 then
  7  2927                 begin
  8  2928                   if (i<1 or i>999) and t(1)=5 then
  8  2929                     res:= -5 <* ulovligt linienr *>
  8  2930                   else if (j<1 or j>99) then
  8  2931                     res:= -6 <* ulovligt løbsnr *>
  8  2932                   else
  8  2933                   begin
  9  2934                     if t(1)=5 then i:= i shift 5;
  9  2935                     parm(1):= i shift 7 +j;
  9  2936                   end;
  8  2937                 end <* res=6 *>
  7  2938                 else if res=9 then
  7  2939                 begin
  8  2940                   if t(1)=5 and (i<1 or 999<i) then
  8  2941                     res:= -5 <*ulovligt linienr*>
  8  2942                   else
  8  2943                   begin
  9  2944                     if t(1)=5 then i:=i shift 5;
  9  2945                     parm(1):= i;
  9  2946                     parm(2):= j;
  9  2947                   end;
  8  2948                 end <* res=9 *>
  7  2949                 else if res=10 then
  7  2950                 begin
  8  2951                   begin
  9  2952                     parm(1):= i;
  9  2953                     parm(2):= j;
  9  2954                   end;
  8  2955                 end; <* res=10 *>
  7  2956               end <* nr=2 *>
  6  2957               else
  6  2958               if nr=3 then
  6  2959               <* 3 paramtre i sættet *>
  6  2960               begin
  7  2961                 res:= if (s(1)='/' or s(1)='.') and
  7  2962                          (s(2)='/' or s(2)='.') then 7
  7  2963                       else if s(1)='.' and s(2)=':' then 8
  7  2964                       else -26; <* skilletegn *>
  7  2965     \f

  7  2965     message procedure læs_param_sæt side 8 - 810501/hko;
  7  2966     
  7  2966     <* mere end 1 parameter, hvoraf 1. er pos.tal eller linienr *>
  7  2967                 <* 3 parametre i sættet *>
  7  2968                 if res=7 then
  7  2969                 begin
  8  2970                   if t(1)<>5 or (t(2)<>5 and t(2)<>7)
  8  2971                      or t(3)<>5 then
  8  2972                     res:= -27 <* parametertype *>
  8  2973                   else
  8  2974                   if i<1 or i>9999 then res:= -7 <* ulovligt busnr *>
  8  2975                   else if t(2)=5 and (j<1 or j>999) then res:=-5 <* linie *>
  8  2976                   else if k<1 or k>99 then res:= -6 <* løb *>
  8  2977                   else
  8  2978                   begin <* ok *>
  9  2979                     parm(1):= i;
  9  2980                     if t(2)=5 then j:= j shift 5;
  9  2981                     parm(2):= j shift 7 +k;
  9  2982                   end;
  8  2983                 end
  7  2984                 else if res=8 then
  7  2985                 begin
  8  2986                   if t(2)<>1 or t(3)<>5 then res:= -27
  8  2987                   else if t(1)=5 and (i<1 or i>999) then res:= -5
  8  2988                   else if k<1 or k>99 then res:= -6
  8  2989                   else
  8  2990                   begin
  9  2991                     if t(1)=5 then i:= i shift 5;
  9  2992                     parm(1):= i;
  9  2993                     parm(2):= j;
  9  2994                     parm(3):= k;
  9  2995                   end;
  8  2996                 end;
  7  2997               end <* nr=3 *>
  6  2998               else res:=-24; <* syntaks *>
  6  2999     \f

  6  2999     message procedure læs_param_sæt side 9 - 810428/hko;
  6  3000     
  6  3000             end <* mere end 1 parameter,hvoraf 1. er pos.tal eller linienr *>
  5  3001             else if t(1)=8 <* gruppe_id *> then
  5  3002             begin
  6  3003     <* mere end 1 parameter , hvoraf den første
  6  3004        er en gruppe_identifikation ved navn.
  6  3005        lovlige parametre er alle internt repræsenteret i et ord *>
  6  3006     
  6  3006               i:=par(1);
  6  3007               j:=par(5);
  6  3008               k:=par(9);
  6  3009     
  6  3009               if nr=2 then
  6  3010               <* 2 parametre *>
  6  3011               begin
  7  3012                 res:=if s(1)=':' and t(2)=5 then 11
  7  3013                      else if s(1)<>':' then -26 <* skilletegn *>
  7  3014                      else -27; <*param.type *>
  7  3015                 if res=11 then
  7  3016                 begin
  8  3017                   if j<1 or j>9999 then res:=-7 <* ulovligt busnr *>
  8  3018                   else
  8  3019                   begin
  9  3020                     parm(1):=i;
  9  3021                     parm(2):=j;
  9  3022                   end;
  8  3023                 end;
  7  3024     \f

  7  3024     message procedure læs_param_sæt side 10 - 810428/hko;
  7  3025     
  7  3025     <* mere end 1 parameter, hvoraf 1. er en gruppeidentifikation ved navn *>
  7  3026     
  7  3026               end <*nr=2*>
  6  3027               else if nr=3 then
  6  3028               <* 3 parametre *>
  6  3029               begin
  7  3030                 res:=if s(1)=':' and s(2)='/' then 11
  7  3031                      else -26; <* skilletegn *>
  7  3032                 if res=11 then
  7  3033                 begin
  8  3034                   if (t(2)<>5 and t(2)<>7) or t(3)<>5 then res:=-27 <*param.type*>
  8  3035                   else
  8  3036                   begin
  9  3037                     if t(2)=5 and (j<1 or j>999) then res:=-5 <* linie *>
  9  3038                     else
  9  3039                     begin
 10  3040                       parm(1):=i;
 10  3041                       if t(2)=5 then j:=j shift 5;
 10  3042                       parm(2):= 1 shift 22 +j shift 7 +k;
 10  3043                     end;
  9  3044                   end;
  8  3045                 end;
  7  3046               end <* nr=3 *>
  6  3047               else res:=-24; <* syntaks *>
  6  3048     \f

  6  3048     message procedure læs_param_sæt side 11 - 810501/hko;
  6  3049     
  6  3049             end <* t(1)=8 *>
  5  3050             else if t(1)=1 and par(1)= 'D' shift 16 then
  5  3051             begin
  6  3052     <* mere end 1 parameter i sættet og 1. parameter er et 'D'.
  6  3053                  lovlige parametre er alle internt repræsenteret i et ord. *>
  6  3054               i:=par(1);
  6  3055               j:=par(5);
  6  3056               k:=par(9);
  6  3057     
  6  3057               if nr=3 then
  6  3058               begin
  7  3059                 res:=if s(1)='.' and s(2)='.' then 12
  7  3060                      else -26; <* skilletegn *>
  7  3061                 if res=12 then
  7  3062                 begin
  8  3063                   if t(2)<>5 or t(3)<>5 then res:=-27 <* param. type *>
  8  3064                   else
  8  3065                   begin
  9  3066                     integer år,md,dg,tt,mm,ss;
  9  3067                     real dato,tid;
  9  3068                     år:=j//10000;
  9  3069                     md:=(j//100) mod 100;
  9  3070                     dg:=j mod 100;
  9  3071                     cifre:= par(10);
  9  3072                     tt:=if cifre>4 then k//10000 else if cifre>2 then k//100
  9  3073                            else k;
  9  3074                     mm:=if cifre>4 then (k//100) mod 100
  9  3075                            else if cifre>2 then k mod 100 else 0;
  9  3076                     ss:=if cifre>4 then k mod 100 else 0;
  9  3077     \f

  9  3077     message procedure læs_param_sæt side 12 - 810501/hko;
  9  3078     
  9  3078                     dato:=systime(5,0.0,tid);
  9  3079                     if j=0 then dg:=round dato mod 100;
  9  3080                     if år=0 and md=0 then md:=(round dato//100) mod 100;
  9  3081                     if år=0 then år:=round dato//10000;
  9  3082                     if år>99 or md<1 or md>12 or tt>23 or mm>59 or ss>59 then
  9  3083                       res:=-24 <* syntaks *>
  9  3084                     else if dg<1 or dg > (case md of (
  9  3085                            31,(if år mod 4=0 then 29 else 28),31, 30,31,30,
  9  3086                            31,31,30, 31,30,31)) then res:=-24
  9  3087                     else
  9  3088                     begin
 10  3089                       parm(1):=år*10000+md*100+dg;
 10  3090                       parm(2):=tt*10000+mm*100+ss;
 10  3091                     end;
  9  3092                   end;
  8  3093     
  8  3093                 end; <* res=12 *>
  7  3094               end <* nr=3 *>
  6  3095               else res:=-24; <*syntaks*>
  6  3096             end <* t(1)=1 and par(1)='D' shift 16 *>
  5  3097     
  5  3097             else res:=-27;<*parametertype*>
  5  3098           end; <* en eller flere parametre *>
  4  3099     
  4  3099           læs_param_sæt:= res;
  4  3100           term:= sep;
  4  3101           if res>= 0 then pos:= apos;
  4  3102         end;
  3  3103       end læs_param_sæt;
  2  3104     \f

  2  3104     message procedure læs_kommando side 1 - 810428/hko;
  2  3105     
  2  3105     integer procedure læs_kommando(z,kilde,op_ref,pos,indeks,sep,slut_tegn);
  2  3106       value                           kilde;
  2  3107       zone                          z;
  2  3108       integer                         kilde,       pos,indeks,sep,slut_tegn;
  2  3109       integer array field                   op_ref;
  2  3110     
  2  3110     <* proceduren indlæser er kommmando fra en terminal (telex,
  2  3111        skærm eller skrivemaskine). ved indlæsning fra skærm eller
  2  3112        skrivemaskine inviteres først ved udskrivning af '>'-tegn.
  2  3113        for terminalers vedkommendeslettes linie 23 og 24 og 'cursor' positioneres til
  2  3114        23'ende linie inden invitation.
  2  3115     *>
  2  3116     \f

  2  3116     message procedure læs_kommando side 2 - 810428/hko;
  2  3117     
  2  3117     begin
  3  3118       integer
  3  3119         a_pos,
  3  3120         a_res,res,
  3  3121         i,j,k;
  3  3122       boolean
  3  3123         skip;
  3  3124     
  3  3124     <*V*>setposition(z,0,0);
  3  3125     
  3  3125       case kilde//100 of
  3  3126       begin
  4  3127         begin <* io *>
  5  3128           write(z,"nl",1,">",1);
  5  3129         end;
  4  3130     
  4  3130         begin <* operatør *>
  5  3131           cursor(z,24,1);
  5  3132           write(z,"esc" add 128,1,<:ÆK:>);
  5  3133           cursor(z,23,1);
  5  3134           write(z,"esc" add 128,1,<:ÆK:>);
  5  3135           outchar(z,'>');
  5  3136         end;
  4  3137     
  4  3137         begin <* garageterminal *> ;
  5  3138           outchar(z,'nl');
  5  3139         end
  4  3140       end;
  3  3141     
  3  3141     <*V*>setposition(z,0,0);
  3  3142     \f

  3  3142     message procedure læs_kommando side 3 - 810921/hko,cl;
  3  3143     
  3  3143         res:=0;
  3  3144         skip:= false;
  3  3145     <*V*>
  3  3146         k:=læs_store(z,i);
  3  3147     
  3  3147         apos:= 1;
  3  3148         while k<=6 <*klasse=bogstav*> do
  3  3149         begin
  4  3150           if a_pos<3 then skriv_tegn(d.op_ref.data,apos,i);
  4  3151     <*V*> k:= læs_store(z,i);
  4  3152         end;
  3  3153     
  3  3153         skip:= skip or i='?' or (a_pos=1 and (i=',' or i=';'));
  3  3154     
  3  3154         if i=',' and a_pos>1 then
  3  3155         begin
  4  3156           skrivtegn(d.op_ref.data,a_pos,i);
  4  3157           repeat
  4  3158       <*V*> k:= læs_store(z,i);
  4  3159             if a_pos=4 and k=6 then skriv_tegn(d.op_ref.data,a_pos,i);
  4  3160           until k>=7;
  4  3161         end;
  3  3162     
  3  3162         pos:=a_pos;
  3  3163         while k<8 do
  3  3164         begin
  4  3165           if a_pos< (att_op_længde//2*3-2) then
  4  3166             skriv_tegn(d.op_ref.data,a_pos,i);
  4  3167           skip:= skip or i='?';
  4  3168     <*V*> k:= læs_store(z,i);
  4  3169           pos:=pos+1;
  4  3170         end;
  3  3171     
  3  3171         skip:= skip or i='?' or i='esc';
  3  3172         slut_tegn:= i;
  3  3173         skrivtegn(d.op_ref.data,apos,'em');
  3  3174         afslut_text(d.op_ref.data,apos);
  3  3175     \f

  3  3175     message procedure læs_kommando side 4 - 820301/hko/cl;
  3  3176     
  3  3176       disable
  3  3177       begin
  4  3178         integer
  4  3179           i1,
  4  3180           nr,
  4  3181           partype,
  4  3182           cifre;
  4  3183         integer array
  4  3184           spec(1:1),
  4  3185           værdi(1:4);
  4  3186     
  4  3186     <*+2*>
  4  3187         if testbit25 and overvåget then
  4  3188         disable begin
  5  3189           real array field raf;
  5  3190           write(out,"nl",1,<:kommando læst::>);
  5  3191           laf:=data;
  5  3192           write(out,d.op_ref.laf,<:<'<'>sluttegn<'>'>=:>,<<d>,sluttegn,
  5  3193                     <: skip=:>,if skip then <:true:> else <:false:>);
  5  3194           ud;
  5  3195         end;
  4  3196     <*-2*>
  4  3197     
  4  3197         for i:=1 step 1 until 32 do ia(i):=0;
  4  3198     
  4  3198         if skip then
  4  3199         begin
  5  3200           res:=53; <*annulleret*>
  5  3201           pos:= -1;
  5  3202           goto slut_læskommando;
  5  3203         end;
  4  3204     \f

  4  3204     message procedure læs_kommando side 5 - 850820/cl;
  4  3205     
  4  3205         i:= kilde//100; <* hovedmodul *>
  4  3206         k:= kilde mod 100; <* løbenr *>
  4  3207     <*  if pos>79 then linieoverløb; *>
  4  3208         pos:=a_pos:=0;
  4  3209         spec(1):= ',' shift 16;
  4  3210     
  4  3210     <*+4*>
  4  3211         if k<1 or k>(case i of (1,max_antal_operatører,
  4  3212                                   max_antal_garageterminaler)) then
  4  3213         begin
  5  3214           fejlreaktion(3<*programfejl*>,kilde,<:ukendt kilde til kommando:>,1);
  5  3215           res:=31;
  5  3216         end
  4  3217         else
  4  3218     <*-4*>
  4  3219         if i>0 and i<4 then <* io, operatør eller garageterminal *>
  4  3220         begin
  5  3221           <* læs operationskode *>
  5  3222           j:=param(d.op_ref.data,apos,spec,tf_kommandotabel,cifre,værdi,sep);
  5  3223     
  5  3223           res:= if j=1 and sep='.' and i=2<*operatør*> then -1 <* skærmopdatering *>
  5  3224                 else if cifre>0 or j=1 or j=3 or j=5 then  24 <* syntaks *>
  5  3225                 else if j=2 then 4 <*ukendt kommando*>
  5  3226                 else if j=4 then 31 <*systemfejl: ukendt tabelfil*>
  5  3227                 else if sep<>'sp' and sep<>','
  5  3228                         and sep<>'nl' and sep<>';'
  5  3229                         and sep<>'nul' and sep<>'em' then 26
  5  3230                                                            <*skilletegn*>
  5  3231                 else if -, læsbit_i(værdi(4),i-1) then 4 
  5  3232     <*                  logand(extend 0 add værdi(4)
  5  3233                                extend 1 shift (case i of (0,k,8+k)))=0 then 4
  5  3234     *>                                                   <*ukendt kommando*>
  5  3235                 else 1;
  5  3236     \f

  5  3236     message procedure læs_kommando side 5a- 810409/hko;
  5  3237     
  5  3237     <*+2*>if testbit25 and overvåget then
  5  3238           begin
  6  3239             write(out,"nl",0,<:funk opslag: param,apos,cifre,sep,res::>,
  6  3240                   << -dddd>,j,apos,cifre,sep,res,
  6  3241                   <:   værdi(1-4)::>,værdi(1),værdi(2),værdi(3),værdi(4),
  6  3242                   "nl",0);
  6  3243             if j<>0 then skriv_op(out,op_ref);
  6  3244             ud;
  6  3245           end;
  5  3246     <*-2*>
  5  3247     
  5  3247           if res=31 then fejlreaktion(18<*tabelfil*>,j,
  5  3248                                       <:=res, filnr 1025, læskommando:>,0);
  5  3249     
  5  3249           if res=1 then <* operationskode ok *>
  5  3250           begin
  6  3251             if sep<>'sp' then apos:=apos-1;
  6  3252             d.op_ref.opkode:=værdi(1);
  6  3253             indeks:=værdi(2);
  6  3254             partype:= værdi(3);
  6  3255             nr:= 0;
  6  3256             pos:= apos;
  6  3257     \f

  6  3257     message procedure læs_kommando side 6 - 810409/hko;
  6  3258     
  6  3258             while res=1 do
  6  3259             begin
  7  3260               læs_param_sæt(d.op_ref.data,apos,0<*indtil 3 enkeltparametre*>,
  7  3261                             værdi,sep,a_res);
  7  3262               nr:= nr +1;
  7  3263               i1:= værdi(1);
  7  3264     <*+2*>  if testbit25 and overvåget then
  7  3265             begin
  8  3266               write(out,"nl",1,<:param sæt: apos,sep,ares::>,<< -dddddd>,
  8  3267                     apos,sep,ares,<:   værdi(1-4)::>,
  8  3268                     værdi(1),værdi(2),værdi(3),værdi(4),
  8  3269                     "nl",0);
  8  3270               ud;
  8  3271            end;
  7  3272     <*-2*>
  7  3273               case par_type of
  7  3274               begin
  8  3275     
  8  3275     <*1: (<ingenting>!<busnr> (<omr>)!<linienr>/<løbnr> (<omr>)) *>
  8  3276     
  8  3276                 begin
  9  3277                   if nr=1 then
  9  3278                   begin
 10  3279                     if a_res=0 then res:=2 <*godkendt*>
 10  3280                     else if a_res=2 and (i1<1 or i1>9999)
 10  3281                          then res:=7 <*busnr ulovligt*>
 10  3282                     else if a_res=2 or a_res=6 then
 10  3283                     begin
 11  3284                       ia(1):= if a_res=2 then i1
 11  3285                                          else 1 shift 22 +i1;
 11  3286                     end
 10  3287                     else res:= 27; <*parametertype*>
 10  3288                     if res<4 then pos:= apos;
 10  3289                   end <*nr=1*>
  9  3290                   else
  9  3291                   if nr=2 then
  9  3292                   begin
 10  3293                     if ares=0 then res:= 2 <*godkendt*>
 10  3294                     else if ares=1 then
 10  3295                     begin
 11  3296                       ia(2):= find_område(i1);
 11  3297                       if ia(2)=0 then res:= 17; <* kanal-nr ukendt *>
 11  3298                     end
 10  3299                     else res:= 27; <* syntaks, parametertype *>
 10  3300                   end
  9  3301                   else
  9  3302                   if ares=0 then res:= 2<*godkendt*> else res:= 24 <* syntaks *>;
  9  3303                 end;
  8  3304     \f

  8  3304     message procedure læs_kommando side 7 - 810226/hko;
  8  3305     
  8  3305     <*2: (<busnr> (<område>)!<linie>/<løbnr>) *>
  8  3306     
  8  3306                 begin
  9  3307                   if nr=1 then
  9  3308                   begin
 10  3309                     if a_res=0 then res:=25 <*parameter mangler*>
 10  3310                     else if a_res=2 and (i1<1 or i1>9999)
 10  3311                          then res:=7 <*busnr ulovligt*>
 10  3312                     else if a_res=2 or a_res=6 then
 10  3313                     begin
 11  3314                       ia(1):=if a_res=2 then i1
 11  3315                                         else 1 shift 22 +i1;
 11  3316                     end
 10  3317                     else res:= 27; <*parametertype*>
 10  3318                     if res<4 then pos:=a_pos;
 10  3319                   end
  9  3320                   else
  9  3321                   if nr=2 then
  9  3322                   begin
 10  3323                     if ares=0 then res:= 2 <*godkendt*> else
 10  3324                     if ares=1 and ia(1) shift (-21) = 0 then
 10  3325                     begin
 11  3326                       ia(2):= findområde(i1);
 11  3327                       if ia(2)=0 then res:= 56; <*område ukendt*>
 11  3328                     end
 10  3329                     else res:= 27;
 10  3330                     if res<4 then pos:= apos;
 10  3331                   end
  9  3332                   else
  9  3333                   if ares=0 then res:= 2 else res:= 24<*syntaks*>;
  9  3334                 end;
  8  3335     \f

  8  3335     message procedure læs_kommando side 8 - 810223/hko;
  8  3336     
  8  3336     <*3: (<linie>!G<nr>) *>
  8  3337     
  8  3337                 begin
  9  3338                   if nr=1 then
  9  3339                   begin
 10  3340                     if a_res=0 then res:=25 <*parameter mangler*>
 10  3341                     else if a_res=2 and (i1<1 or i1>999) then res:=5
 10  3342                                                         <*linienr ulovligt*>
 10  3343                     else if a_res=2 or a_res=4 or a_res=5 then
 10  3344                     begin
 11  3345                       ia(1):=
 11  3346                         if a_res=2 then      4 shift 21 +i1 shift 5
 11  3347                         else if a_res=4 then 4 shift 21 +i1
 11  3348                         else <* a_res=5 *>   5 shift 21 +i1;
 11  3349                     end
 10  3350                     else res:=27; <* parametertype *>
 10  3351                     if res<4 then pos:= a_pos;
 10  3352                   end
  9  3353                   else
  9  3354                   res:= if nr=2 and a_res<>0 then 24<*syntaks*>
  9  3355                                              else 2;<*godkendt*>
  9  3356                 end;
  8  3357     
  8  3357     <*4:  <ingenting> *>
  8  3358     
  8  3358                 begin
  9  3359                   res:= if a_res<>0 then 24<*syntaks*>
  9  3360                                     else 2;<*godkendt*>
  9  3361                 end;
  8  3362     \f

  8  3362     message procedure læs_kommando side 9 - 810226/hko;
  8  3363     
  8  3363     <*5: (<kanalnr>) *>
  8  3364     
  8  3364                 begin
  9  3365                   long field lf;
  9  3366     
  9  3366                   if nr=1 then
  9  3367                   begin
 10  3368                     if a_res=0 then res:= 25
 10  3369                     else if a_res<>1 then res:=27<*parametertype*>
 10  3370                     else
 10  3371                     begin
 11  3372                       j:= 0; lf:= 4;
 11  3373                       for i:= 1 step 1 until max_antal_kanaler do
 11  3374                         if kanal_navn(i)=værdi.lf then j:= i;
 11  3375                       if j<>0 then
 11  3376                       begin
 12  3377                         ia(1):= 3 shift 22 + j;
 12  3378                         res:= 2;
 12  3379                       end
 11  3380                       else
 11  3381                         res:= 17; <* kanal ukendt *>
 11  3382                     end;
 10  3383                     if res<4 then pos:= a_pos;
 10  3384                   end
  9  3385                   else
  9  3386                   res:=if nr=2 and a_res<>0 then 24<*syntaks*>
  9  3387                                             else 2;<*godkendt*>
  9  3388                 end;
  8  3389     \f

  8  3389     message procedure læs_kommando side 10 - 810415/hko;
  8  3390     
  8  3390     <*6:  <busnr>/<linie>/<løb> (<område>) *>
  8  3391     
  8  3391                 begin
  9  3392                   if nr=1 then
  9  3393                   begin
 10  3394                     if a_res=0 then res:=25<*parameter mangler*>
 10  3395                     else if a_res=7 then
 10  3396                     begin
 11  3397                       ia(1):= i1;
 11  3398                       ia(2):= 1 shift 22 + værdi(2);
 11  3399                     end
 10  3400                     else res:=27;<*parametertype*>
 10  3401                     if res<4 then pos:= apos;
 10  3402                   end
  9  3403                   else
  9  3404                   if nr=2 then
  9  3405                   begin
 10  3406                     if ares=0 then res:= 2 <*godkendt*> else
 10  3407                     if ares=1 then
 10  3408                     begin
 11  3409                       ia(3):= findområde(i1);
 11  3410                       if ia(3)=0 then res:= 56; <* område ukendt *>
 11  3411                     end
 10  3412                     else res:= 27; <*parametertype*>
 10  3413                     if res<4 then pos:= apos;
 10  3414                   end
  9  3415                   else
  9  3416                   if ares=0 then res:= 2 else res:= 24;
  9  3417                 end;
  8  3418     \f

  8  3418     message procedure læs_kommando side 11 - 810512/hko/cl;
  8  3419     
  8  3419     
  8  3419     <*                                                 att_op_længde//2-2 *>
  8  3420     <*7:  <linienr>.<indeks>:<løbnr> (<interval>.<løb>)                   *>
  8  3421     <*                                                  1                 *>
  8  3422     
  8  3422                 begin
  9  3423                   if nr=1 then
  9  3424                   begin
 10  3425                     if a_res=0 then res:=25 <*parameter mangler*>
 10  3426                     else if a_res=8 then
 10  3427                     begin
 11  3428                       ia(1):= 4 shift 21 + i1;
 11  3429                       ia(2):= værdi(2);
 11  3430                       ia(3):= værdi(3);
 11  3431                       indeks:= 3;
 11  3432                     end
 10  3433                     else res:=27;<*parametertype*>
 10  3434                   end
  9  3435                   else if nr<=att_op_længde//2-2 then
  9  3436                   begin
 10  3437                     if a_res=0 and (sep=',' or nr>2) then res:=2<*godkendt*>
 10  3438                     else if a_res=0 then res:=25 <* parameter mangler *>
 10  3439                     else if a_res=10 then
 10  3440                     begin
 11  3441                       if i1>0 and i1<100 and værdi(2)>0 and værdi(2)<100 then
 11  3442                       begin
 12  3443                         ia(nr+2):= i1 shift 12 + værdi(2);
 12  3444                         indeks:= nr +2;
 12  3445                       end
 11  3446                       else if i1<1 or i1>99 then res:=44 <*intervalstr. ulovlig*>
 11  3447                       else res:=6; <*løb-nr ulovligt*>
 11  3448                     end
 10  3449                     else res:=27;<*parametertype*>
 10  3450                   end
  9  3451                   else
  9  3452                     res:= if a_res=0 then 2 else 24;<* syntaks *>
  9  3453                   if res<4 then pos:=a_pos;
  9  3454                 end;
  8  3455     \f

  8  3455     message procedure læs_kommando side 12 - 810306/hko;
  8  3456     
  8  3456     <*8: (<operatør>!<radiokanal>!<garageterminal>) *>
  8  3457     
  8  3457                 begin
  9  3458                   if nr=1 then
  9  3459                   begin
 10  3460                     if a_res=0 then res:=25 <* parameter mangler *>
 10  3461                     else if a_res=2 then
 10  3462                     begin
 11  3463                       j:=d.op_ref.opkode;
 11  3464                       ia(1):=i1;
 11  3465                       k:=(j+1)//2;
 11  3466                       if k<1 or k=3 or k>4 then
 11  3467                         fejlreaktion(3<*programfejl*>,j,<:opkode, partype=8:>,1)
 11  3468                       else
 11  3469                       begin
 12  3470                         if k=4 then k:=3;
 12  3471                         if i1<1 or i1> (case k of
 12  3472                           (max_antal_operatører,max_antal_radiokanaler,
 12  3473                            max_antal_garageterminaler))
 12  3474                         then res:=case k of (28,29,17);
 12  3475                       end;
 11  3476                     end
 10  3477                     else if a_res=1 and (d.op_ref.opkode+1)//2=1 then
 10  3478                     begin
 11  3479                       laf:= 0;
 11  3480                       ia(1):= find_bpl(værdi.laf(1));
 11  3481                       if ia(1)<1 or ia(1)>max_antal_operatører then res:=28;
 11  3482                     end
 10  3483                     else res:=27; <*parametertype*>
 10  3484                   end
  9  3485                   else
  9  3486                   if nr=2 and d.opref.opkode=1 then
  9  3487                   begin
 10  3488                     <* åbningstilstand for operatørplads *>
 10  3489                     if a_res=0 then res:= 2 <*godkendt*>
 10  3490                     else if a_res<>1 then res:= 27 <*parametertype*>
 10  3491                     else begin
 11  3492                       res:= 2<*godkendt*>;
 11  3493                       j:= værdi(1) shift (-16);
 11  3494                       if j='S' then ia(2):= 3 else
 11  3495                       if j<>'Å' then res:= 24; <*syntaks*>
 11  3496                     end;
 10  3497                   end
  9  3498                   else 
  9  3499                   begin
 10  3500                     res:=if a_res=0 then  2 <* godkendt *>
 10  3501                                     else 24;<* syntaks *>
 10  3502                   end;
  9  3503                   if res<4 then pos:=a_pos;
  9  3504                 end; <* partype 8 *>
  8  3505     \f

  8  3505     message procedure læs_kommando side 13 - 810306/hko;
  8  3506     
  8  3506     
  8  3506     <*                              att_op_længde//2 *>
  8  3507     <*9:  <operatør>((+!-)<linienr>)                 *>
  8  3508     <*                              1                *>
  8  3509     
  8  3509                 begin
  9  3510                   if nr=1 then
  9  3511                   begin
 10  3512                     if a_res=0 then res:=25 <* parameter mangler *>
 10  3513                     else if a_res=2 then
 10  3514                     begin
 11  3515                       ia(1):=i1;
 11  3516                       if i1<1 or i1>max_antal_operatører then res:=28;
 11  3517                     end
 10  3518                     else if a_res=1 then
 10  3519                     begin
 11  3520                       laf:= 0;
 11  3521                       ia(1):= find_bpl(værdi.laf(1));
 11  3522                       if ia(1)<1 or ia(1)>max_antal_operatører then res:=28;
 11  3523                     end
 10  3524                     else res:=27; <* parametertype *>
 10  3525                   end
  9  3526                   else if nr<=att_op_længde//2 then
  9  3527                   begin <* nr>1 *>
 10  3528                     if a_res=0 then res:=(if nr>2 then 2 else 25)
 10  3529                     else if a_res=2 or a_res=3 then
 10  3530                     begin
 11  3531                       ia(nr):=i1; indeks:= nr;
 11  3532                       if i1=0 or abs(i1)>999 then res:=5;
 11  3533                     end
 10  3534                     else res:=27; <* parametertype *>
 10  3535                     if res<4 then pos:=a_pos;
 10  3536                   end
  9  3537                   else
  9  3538                     res:=if a_res<>0 then 24 <* syntaks (for mange parametre) *>
  9  3539                                      else 2;
  9  3540                 end; <* partype 9 *>
  8  3541     \f

  8  3541     message procedure læs_kommando side 14 - 810428/hko;
  8  3542     
  8  3542     <*         2 *>
  8  3543     <*10: (bus)  *>
  8  3544     <*         1 *>
  8  3545     
  8  3545                 begin
  9  3546                   if a_res=0 and nr=1 then res:=25 <* parameter mangler *>
  9  3547                   else if a_res<>0 and nr>2 then res:=24 <* syntaks (for mange) *>
  9  3548                   else if a_res=0 then res:=2 <* godkendt *>
  9  3549                   else if a_res<>2 then res:=27 <* parametertype *>
  9  3550                   else if i1<1 or i1>9999 then res:=7 <*ulovligt busnr *>
  9  3551                   else
  9  3552                     ia(nr):=i1;
  9  3553                 end;
  8  3554     
  8  3554     <*             5 *>
  8  3555     <*11: (<linie>)  *>
  8  3556     <*             1 *>
  8  3557     
  8  3557                 begin
  9  3558                   if a_res=0 and nr=1 then res:=25
  9  3559                   else if a_res<>0 and nr>5 then res:=24
  9  3560                   else if a_res=0 then res:=2
  9  3561                   else if a_res<>2 and a_res<>4 then res:=27
  9  3562                   else if a_res=2 and (i1<1 or i1>999) then res:=5 <* ulovl.linie *>
  9  3563                   else
  9  3564                     ia(nr):=
  9  3565                       (if a_res=4 then i1 else i1 shift 5) + 4 shift 21;
  9  3566                 end;
  8  3567     \f

  8  3567     message procedure læs_kommando side 15 - 810306/hko;
  8  3568     
  8  3568     <*12: (<ingenting>!<navn>) *>
  8  3569     
  8  3569                 begin
  9  3570                   if nr=1 then
  9  3571                   begin
 10  3572                     if a_res=0 then res:=2 <*godkendt*>
 10  3573                     else if a_res=1 then
 10  3574                       tofrom(ia,værdi,8)
 10  3575                     else res:=27; <* parametertype *>
 10  3576                   end
  9  3577                   else
  9  3578                     res:=if a_res<>0 then 24 <* syntaks (for mange) *>
  9  3579                                      else  2;
  9  3580                 end; <* partype 12 *>
  8  3581     \f

  8  3581     message procedure læs_kommando side 16 - 810512/hko/cl;
  8  3582     
  8  3582     <*                                                         15 *>
  8  3583     <*13: G<grp.nr>:(<bus>!<linie>/<løb>) (<bus>!<linie>/<løb>)   *>
  8  3584     <*                                                         1  *>
  8  3585     
  8  3585                 begin
  9  3586                   if nr=1 then
  9  3587                   begin
 10  3588                     if a_res=0 then res:=25 <* parameter mangler *>
 10  3589                     else
 10  3590                     if a_res=11 then
 10  3591                     begin
 11  3592                       ia(1):= 5 shift 21 + i1;
 11  3593                       ia(2):=værdi(2);
 11  3594                       indeks:= 2;
 11  3595                     end
 10  3596                     else res:=27; <* parametertype *>
 10  3597                   end
  9  3598                   else if nr<= att_op_længde//2-1 then
  9  3599                   begin
 10  3600                     if a_res=0 and(sep=',' or nr>2)then res:=2 <* godkendt *>
 10  3601                     else if a_res=0 then res:=25 <* parameter mangler *>
 10  3602                     else if ares=2 and (i1<1 or i1>9999) then
 10  3603                             res:= 7 <*busnr ulovligt*>
 10  3604                     else if a_res=2 or a_res=6 then
 10  3605                     begin
 11  3606                       ia(nr+1):=i1+ (if a_res=6 then 1 shift 22 else 0);
 11  3607                       indeks:= nr+1;
 11  3608                     end
 10  3609                     else res:=27; <* parametertype *>
 10  3610                   end
  9  3611                   else
  9  3612                     res:=if a_res=0 then  2 <*godkendt *>
  9  3613                                     else 24;<* syntaks *>
  9  3614                   if res<4 then pos:=a_pos;
  9  3615                 end; <* partype 13 *>
  8  3616     \f

  8  3616     message procedure læs_kommando side 17 - 810311/hko;
  8  3617     
  8  3617     <*14: <linie>.<indeks> *>
  8  3618     
  8  3618                 begin
  9  3619                   if nr=1 then
  9  3620                   begin
 10  3621                     if a_res=0 then res:=25 <* parameter mangler *>
 10  3622                     else if a_res=9 then
 10  3623                     begin
 11  3624                       ia(1):= 1 shift 23 +i1;
 11  3625                       ia(2):= værdi(2);
 11  3626                     end
 10  3627                     else res:=27; <* parametertype *>
 10  3628                   end
  9  3629                   else <* nr>1 *>
  9  3630                     res:= if a_res=0 then  2 <* godkendt *>
  9  3631                                      else 24;<* syntaks *>
  9  3632                 end; <* partype 14 *>
  8  3633     \f

  8  3633     message procedure læs_kommando side 18 - 810313/hko;
  8  3634     
  8  3634     <*15: <linie>.<indeks> <bus> *>
  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 if nr=2 then
  9  3647                   begin
 10  3648                     if a_res=0 then res:=25
 10  3649                     else if a_res=2 then
 10  3650                     begin
 11  3651                       if i1<1 or i1>9999 then res:=7 <* ulovligt busnr *>
 11  3652                       else ia(3):= i1;
 11  3653                     end
 10  3654                     else res:=27; <*parametertype *>
 10  3655                   end
  9  3656                   else
  9  3657                     res:=if a_res=0 then  2 <* godkendt *>
  9  3658                                     else 24;<* syntaks *>
  9  3659                   if res<4 then pos:=a_pos;
  9  3660                 end; <* partype 15 *>
  8  3661     \f

  8  3661     message procedure læs_kommando side 19 - 810311/hko;
  8  3662     
  8  3662     <*16: (<ingenting>!D.<dato>.<klokkeslet> *>
  8  3663     
  8  3663                 begin
  9  3664                   if nr=1 then
  9  3665                   begin
 10  3666                     if a_res=0 then res:=2 <* godkendt *>
 10  3667                     else if a_res=12 then
 10  3668                     begin
 11  3669                       raf:=0;
 11  3670                       ia.raf(1):= systid(i1,værdi(2));
 11  3671                     end
 10  3672                     else res:=27; <* parametertype *>
 10  3673                   end
  9  3674                   else
  9  3675                     res:= if a_res=0 then  2 <* godkendt *>
  9  3676                                      else 24;<* syntaks *>
  9  3677                   if res<4 then pos:=a_pos;
  9  3678                 end; <* partype 16 *>
  8  3679     \f

  8  3679     message procedure læs_kommando side 20 - 810511/hko;
  8  3680     
  8  3680     <*17: G<grp.nr> *>
  8  3681     
  8  3681                 begin
  9  3682                   if nr=1 then
  9  3683                   begin
 10  3684                     if a_res=0 then res:=25 <*parameter mangler *>
 10  3685                     else if a_res=5 then
 10  3686                     begin
 11  3687                       ia(1):= 5 shift 21 +i1;
 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                 end; <* partype 17 *>
  8  3695     
  8  3695     <*               att_op_længde//2 *>
  8  3696     <*18: (<heltal>)                  *>
  8  3697     <*               1                *>
  8  3698     
  8  3698                 begin
  9  3699                   if nr=1 and a_res=0 then res:= 25 <*parameter mangler*>
  9  3700                   else
  9  3701                   if nr<=att_op_længde//2 then
  9  3702                   begin
 10  3703                     if a_res=2 or a_res=3 <* pos/neg heltal *> then
 10  3704                     begin
 11  3705                       ia(nr):= i1; indeks:= nr;
 11  3706                     end
 10  3707                     else if a_res=0 then res:= 2
 10  3708                     else res:= 27; <*parametertype*>
 10  3709                   end
  9  3710                   else
  9  3711                   res:= if a_res=0 then 2 else 24;<*syntaks (for mange)*>
  9  3712                 end;
  8  3713     \f

  8  3713     message procedure læs_kommando side 21 - 820302/cl;
  8  3714     
  8  3714     <*19: <linie>/<løb>  <linie>/<løb> *>
  8  3715     
  8  3715                 begin
  9  3716                   if nr<3 and a_res=0 then res:= 25 <*parameter mangler*>
  9  3717                   else if nr<3 and a_res<>6 then res:= 27 <*parametertype*>
  9  3718                   else if nr<3 then
  9  3719                   begin
 10  3720                     ia(nr):=i1 + 1 shift 22;
 10  3721                   end
  9  3722                   else
  9  3723                     res:= if a_res=0 then 2 <*godkendt*>
  9  3724                                     else 24;<*syntaks (for mange)*>
  9  3725                   if res<4 then pos:= a_pos;
  9  3726                 end; <* partype 19 *>
  8  3727     
  8  3727     <*20: <busnr> <kortnavn> *>
  8  3728                 begin
  9  3729                   if nr=1 then
  9  3730                   begin
 10  3731                     if ares=0 then res:= 25 else
 10  3732                     if ares=2 and (i1<1 or 9999<i1) then res:= 24 else
 10  3733                     if ares<>2 then res:= 27 else ia(1):= i1;
 10  3734                   end
  9  3735                   else
  9  3736                   if nr=2 then
  9  3737                   begin
 10  3738                     if ares=1 and værdi(2) extract 8 = 0 then
 10  3739                     begin
 11  3740                       ia(2):= værdi(1); ia(3):= værdi(2);
 11  3741                     end
 10  3742                     else res:= if ares=0 then 25 else if ares=1 then 62 else 27;
 10  3743                   end
  9  3744                   else
  9  3745                   if ares=0 then res:= 2 else res:= 24;
  9  3746                 end; <* partype 20 *>
  8  3747     \f

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

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

  3  4189     
  3  4189     <*30*><:rapport kan ikke dannes:>,
  3  4190     <*31*><:systemfejl:>,
  3  4191     <*32*><:ingen fri plads:>,
  3  4192     <*33*><:gruppe for stor:>,
  3  4193     <*34*><:gruppe allerede defineret:>,
  3  4194     
  3  4194     <*35*><:springsekvens for stor:>,
  3  4195     <*36*><:spring allerede defineret:>,
  3  4196     <*37*><:spring ukendt:>,
  3  4197     <*38*><:spring allerede igangsat:>,
  3  4198     <*39*><:bus ikke reserveret:>,
  3  4199     
  3  4199     <*40*><:gruppe ikke reserveret:>,
  3  4200     <*41*><:spring ikke igangsat:>,
  3  4201     <*42*><:intet frit linie/løb:>,
  3  4202     <*43*><:ændring af dato/tid ikke lovlig:>,
  3  4203     <*44*><:interval-størrelse ulovlig:>,
  3  4204     
  3  4204     <*45*><:ikke implementeret:>,
  3  4205     <*46*><:navn ukendt:>,
  3  4206     <*47*><:forkert indhold:>,
  3  4207     <*48*><:i brug:>,
  3  4208     <*49*><:ingen samtale igang:>,
  3  4209     
  3  4209     <*50*><:kanal:>,
  3  4210     <*51*><:afvist:>,
  3  4211     <*52*><:kanal optaget :>,
  3  4212     <*53*><:annulleret:>,
  3  4213     <*54*><:ingen busser at kalde op:>,
  3  4214     
  3  4214     <*55*><:garagenavn ukendt:>,
  3  4215     <*56*><:område ukendt:>,
  3  4216     <*57*><:område nødvendigt:>,
  3  4217     <*58*><:ulovligt område for bus:>,
  3  4218     <*59*><:radiofejl :>,
  3  4219     
  3  4219     <*60*><:område kan ikke opdateres:>,
  3  4220     <*61*><:ingen talevej:>,
  3  4221     <*62*><:ulovligt navn:>,
  3  4222     <*63*><:alarmlængde: :>,
  3  4223     <*64*><:ulovligt tal:>,
  3  4224     
  3  4224     <*99*><:- <'?'> -:>));
  3  4225     \f

  3  4225     message procedure skriv_kvittering side 3 - 820301/hko;
  3  4226        if res=3 and op<>0 then
  3  4227         begin
  4  4228           if d.op.opkode=20 or d.op.opkode=11 then <*vogntabel,flyt -,indsæt*>
  4  4229           begin
  5  4230             i:= d.op.data(if d.op.opkode=20 then 4 else 3) extract 14;
  5  4231             if i<>0 then write(z,i,<: udtaget:>);
  5  4232           end;
  4  4233         end;
  3  4234         if res = 11 or res = 12 then
  3  4235           i:=ref;
  3  4236         if res=11 then write(z,i shift(-12) extract 10,
  3  4237                                if i shift(-7) extract 5 =0 then false
  3  4238                                else "A" add (i shift(-7) extract 5 -1),1,
  3  4239                                <:/:>,<<d>,i extract 7) else
  3  4240         if res=12 then write(z,i extract 14) else
  3  4241         if res = 20 or res = 52 or res = 59 then
  3  4242         begin
  4  4243           i:= d.op.data(12);
  4  4244           if i <> 0 then skriv_id(z,i,8);
  4  4245           i:=d.op.data(2);
  4  4246           if i=0 then i:=d.op.data(9);
  4  4247           if i=0 then i:=d.op.data(8);
  4  4248           skriv_id(z,i,8);
  4  4249         end;
  3  4250         if res=63 then
  3  4251         begin
  4  4252           i:= ref;
  4  4253           if i<0 then write(z,<:uendelig:>) else write(z,<<d>,i,<: sek.:>);
  4  4254         end;
  3  4255     
  3  4255         if pos>=0 then
  3  4256         begin
  4  4257           pos:=pos+1;
  4  4258           outchar(z,':');
  4  4259           tegn:=-1;
  4  4260           while tegn<>10 and tegn<>0 do
  4  4261             outchar(z,læs_tegn(d.op.data,pos,tegn));
  4  4262         end;
  3  4263     <*V*>setposition(z,0,0);
  3  4264       end skriv_kvittering;
  2  4265     \f

  2  4265     message procedure cursor, side 1 - 810213/hko;
  2  4266     
  2  4266     procedure cursor(z,linie,pos);
  2  4267       value            linie,pos;
  2  4268       zone           z;
  2  4269       integer          linie,pos;
  2  4270       begin
  3  4271         if linie>0 and linie<25
  3  4272            and pos>0 and pos<81 then
  3  4273         begin
  4  4274           write(z,"esc" add 128,1,<:Æ:>,
  4  4275             <<d>,linie,<:;:>,pos,<:H:>);
  4  4276         end;
  3  4277       end cursor;
  2  4278     \f

  2  4278     message procedure attention side 1 - 810529/hko;
  2  4279     
  2  4279       procedure attention;
  2  4280       begin
  3  4281         integer i, j, k;
  3  4282         integer array field op_ref,mess_ref;
  3  4283         integer array att_message(1:9);
  3  4284         long array field laf1, laf2;
  3  4285         boolean optaget;
  3  4286       procedure skriv_attention(zud,omfang);
  3  4287         integer                     omfang;
  3  4288         zone                    zud;
  3  4289       begin
  4  4290         write(zud,"nl",1,<:+++ attention            :>);
  4  4291         if omfang <> 0 then
  4  4292         disable begin integer x;
  5  4293           trap(slut);
  5  4294           write(zud,"nl",1,
  5  4295             <:  i:         :>,i,"nl",1,
  5  4296             <:  j:         :>,j,"nl",1,
  5  4297             <:  k:         :>,k,"nl",1,
  5  4298             <:  op-ref:    :>,op_ref,"nl",1,
  5  4299             <:  mess-ref:  :>,mess_ref,"nl",1,
  5  4300             <:  optaget:   :>,if optaget then <:true:>else<:false:>,"nl",1,
  5  4301             <:  laf2       :>,laf2,"nl",1,
  5  4302             <:  att-message::>,"nl",1,
  5  4303             <::>);
  5  4304           raf:= 0;
  5  4305           skriv_hele(zud,att_message.raf,18,127);
  5  4306           skriv_coru(zud,coru_no(010));
  5  4307     slut:
  5  4308         end;
  4  4309       end skriv_attention;
  3  4310     
  3  4310       integer procedure udtag_tal(tekst,pos);
  3  4311         long array tekst;
  3  4312         integer pos;
  3  4313       begin
  4  4314         integer i;
  4  4315     
  4  4315         if getnumber(tekst,pos,i) >= 0 then
  4  4316           udtag_tal:= i
  4  4317         else
  4  4318           udtag_tal:= 0;
  4  4319       end;
  3  4320     
  3  4320       for i:= 1 step 1 until att_maske_lgd//2 do
  3  4321          att_signal(i):=att_flag(i):=0;
  3  4322       trap(att_trap);
  3  4323       stack_claim((if cm_test then 198 else 146)+50);
  3  4324     <*+2*>
  3  4325       if testbit26 and overvåget or testbit28 then
  3  4326         skriv_attention(out,0);
  3  4327     <*-2*>
  3  4328     \f

  3  4328     message procedure attention side 2 - 810406/hko;
  3  4329     
  3  4329       repeat
  3  4330     
  3  4330         wait_ch(cs_att_pulje,opref,true,-1<*vent ubegrænset*>);
  3  4331     
  3  4331         repeat
  3  4332     <*V*> c_wait_message(att_proc_ref,att_message,mess_ref,-1<*vent ubegrænset*>);
  3  4333           raf:= laf1:= 0;
  3  4334           laf:=core.mess_ref(4)+2;  <* reference til sender-procesnavn *>
  3  4335     
  3  4335     <*+2*>if testbit7 and overvåget then
  3  4336           disable begin
  4  4337             laf2:= abs(laf);
  4  4338             write(out,"nl",1,<:attention - :>);
  4  4339             if laf<=0 then write(out,<:Regrettet :>);
  4  4340             write(out,<:Message modtaget fra :>);
  4  4341             if laf2 > 0 then write(out,core.laf2) else write(out,<:???:>);
  4  4342             skriv_hele(out,att_message.raf,16,127);
  4  4343             ud;
  4  4344           end;
  3  4345     <*-2*>
  3  4346     \f

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

  3  4401     message procedure attention side 4 - 810424/hko;
  3  4402     
  3  4402         sætbit_ia(att_flag,j,1);
  3  4403     
  3  4403         start_operation(op_ref,i,cs_att_pulje,0);
  3  4404     
  3  4404         signal_ch(case i//100 of (cs_io,cs_op,cs_gar),op_ref,gen_optype);
  3  4405     
  3  4405       until false;
  3  4406     
  3  4406     att_trap:
  3  4407     
  3  4407       skriv_attention(zbillede,1);
  3  4408     
  3  4408     
  3  4408       end attention;
  2  4409     
  2  4409     \f

  2  4409     message io_erklæringer side 1 - 810421/hko;
  2  4410     
  2  4410       integer
  2  4411         cs_io,
  2  4412         cs_io_komm,
  2  4413         cs_io_fil,
  2  4414         cs_io_spool,
  2  4415         cs_io_medd,
  2  4416         cs_io_nulstil,
  2  4417         ss_io_spool_tomme,
  2  4418         ss_io_spool_fulde,
  2  4419         bs_zio_adgang,
  2  4420         io_spool_fil,
  2  4421         io_spool_postantal,
  2  4422         io_spool_postlængde;
  2  4423     
  2  4423       integer array field
  2  4424         io_spool_post;
  2  4425     
  2  4425       zone z_io(32,1,io_fejl);
  2  4426     
  2  4426       procedure io_fejl(z,s,b);
  2  4427         integer           s,b;
  2  4428         zone            z;
  2  4429       begin
  3  4430         disable begin
  4  4431           integer array iz(1:20);
  4  4432           integer i,j,k;
  4  4433           integer array field iaf;
  4  4434           real array field raf;
  4  4435           if s<>(1 shift 21 + 2) then
  4  4436           begin
  5  4437             getzone6(z,iz);
  5  4438             raf:=2;
  5  4439             iaf:=0;
  5  4440             k:=1;
  5  4441     
  5  4441             j:= terminal_tab.iaf.terminal_tilstand;
  5  4442             if j shift(-21)<>6 then
  5  4443               fejlreaktion(17<*ydre enhed status*>,s,string iz.raf(increase(k)),
  5  4444                            1 shift 12 <*binært*> +1 <*fortsæt*>);
  5  4445             terminal_tab.iaf.terminal_tilstand:= 6 shift 21
  5  4446                 + terminal_tab.iaf.terminal_tilstand extract 21;
  5  4447           end;
  4  4448           z(1):=real <:<'?'><'?'><'em'>:>;
  4  4449           b:=2;
  4  4450         end; <*disable*>
  3  4451       end io_fejl;
  2  4452     \f

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

  5  4496     message procedure skriv_auto_spring_medd side 2 - 810507/hko;
  5  4497     
  5  4497               linie:= løb shift(-12) extract 10;
  5  4498               bogst:= løb shift(-7) extract 5;
  5  4499               if bogst > 0 then bogst:= bogst +'A'-1;
  5  4500               løb:= løb extract 7;
  5  4501               if medd(3) <> 0 or kode <> 5 then
  5  4502               begin
  6  4503                 write(z,<<z>,linie,false add bogst,1,"/",1,løb,"sp",1);
  6  4504                 if kode = 5 or kode = 6 then write(z,<:er frit :>);
  6  4505               end;
  5  4506               if kode = 7 or kode = 8 then
  5  4507                 write(z,<*indeks,"sp",1,*>
  5  4508                   if kode=7 then <:udtaget :> else <:indsat :>);
  5  4509     
  5  4509               dato:= systime(4,tid,t);
  5  4510               kl:= t/100.0;
  5  4511               løb:= replace_char(1<*space in number*>,'.');
  5  4512               write(z,<<zd_dd_dd>,dato,<< zd_dd>,kl);
  5  4513               replace_char(1,løb);
  5  4514             end
  4  4515             else <*kode < 1 or kode > 8*>
  4  4516               fejlreaktion(3<*programfejl*>,kode,<:spon.medd. kode:>,1);
  4  4517           end; <*disable*>
  3  4518         end skriv_auto_spring_medd;
  2  4519     \f

  2  4519     message procedure h_io side 1 - 810507/hko;
  2  4520     
  2  4520       <* hovedmodulkorutine for io *>
  2  4521       procedure h_io;
  2  4522       begin
  3  4523         integer array field op_ref;
  3  4524         integer k,dest_sem;
  3  4525         procedure skriv_hio(zud,omfang);
  3  4526           value                     omfang;
  3  4527           zone                  zud;
  3  4528           integer                   omfang;
  3  4529           begin
  4  4530     
  4  4530             write(zud,"nl",1,<:+++ hovedmodul io        :>);
  4  4531             if omfang>0 then
  4  4532             disable begin integer x;
  5  4533               trap(slut);
  5  4534               write(zud,"nl",1,
  5  4535                 <:  op_ref:    :>,op_ref,"nl",1,
  5  4536                 <:  k:         :>,k,"nl",1,
  5  4537                 <:  dest_sem:  :>,dest_sem,"nl",1,
  5  4538                 <::>);
  5  4539               skriv_coru(zud,coru_no(100));
  5  4540     slut:
  5  4541             end;
  4  4542          end skriv_hio;
  3  4543     
  3  4543       trap(hio_trap);
  3  4544       stack_claim(if cm_test then 198 else 146);
  3  4545     
  3  4545     <*+2*>
  3  4546       if testbit0 and overvåget or testbit28 then
  3  4547         skriv_hio(out,0);
  3  4548     <*-2*>
  3  4549     \f

  3  4549     message procedure h_io side 2 - 810507/hko;
  3  4550     
  3  4550       repeat
  3  4551         wait_ch(cs_io,op_ref,true,-1);
  3  4552     <*+4*>
  3  4553         if (d.op_ref.optype and (io_optype or gen_optype)) extract 12 =0
  3  4554         then fejlreaktion(12<*operationstype*>,op_ref,<:operation til io:>,1);
  3  4555     <*-4*>
  3  4556     
  3  4556         k:=d.op_ref.opkode extract 12;
  3  4557         dest_sem:=
  3  4558           if k =  0 <*attention*> then cs_io_komm else
  3  4559           
  3  4559           if k = 22 <*auto vt opdatering*>
  3  4560           or k = 23 <*generel meddelelse*>
  3  4561           or k = 36 <*spring meddelelse*>
  3  4562           or k = 44 <*udeladt i gruppeopkald*>
  3  4563           or k = 45 <*nødopkald modtaget*>
  3  4564           or k = 46 <*nødopkald besvaret*> then cs_io_spool else
  3  4565     
  3  4565           if k = 38 <*meddelelse til alle skærme*> then cs_io_medd else
  3  4566           0;
  3  4567     <*+4*>
  3  4568         if dest_sem = 0 then
  3  4569         begin
  4  4570           fejl_reaktion(2<*operationskode*>,k,<:hovedmodul io:>,1);
  4  4571           signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  4  4572         end
  3  4573         else
  3  4574     <*-4*>
  3  4575         begin
  4  4576           signal_ch(dest_sem,op_ref,d.op_ref.optype);
  4  4577         end;
  3  4578       until false;
  3  4579     
  3  4579     hio_trap:
  3  4580       disable skriv_hio(zbillede,1);
  3  4581       end h_io;
  2  4582     \f

  2  4582     message procedure io_komm side 1 - 810507/hko;
  2  4583     
  2  4583       procedure io_komm;
  2  4584       begin
  3  4585         integer array field op_ref,ref,vt_op,iaf;
  3  4586         integer kode,aktion,status,opgave,dest_sem,vogn,ll,omr,
  3  4587                 pos,indeks,sep,sluttegn,operatør,i,j,k;
  3  4588         long navn;
  3  4589     
  3  4589         procedure skriv_io_komm(zud,omfang);
  3  4590           value                     omfang;
  3  4591           zone                  zud;
  3  4592           integer                   omfang;
  3  4593           begin
  4  4594     
  4  4594         disable
  4  4595     
  4  4595             write(zud,"nl",1,<:+++ io_komm              :>);
  4  4596             if omfang > 0 then
  4  4597             disable begin integer x;
  5  4598               trap(slut);
  5  4599               write(zud,"nl",1,
  5  4600                 <:  op-ref:    :>,op_ref,"nl",1,
  5  4601                 <:  kode:      :>,kode,"nl",1,
  5  4602                 <:  aktion:    :>,aktion,"nl",1,
  5  4603                 <:  ref:       :>,ref,"nl",1,
  5  4604                 <:  vt_op:     :>,vt_op,"nl",1,
  5  4605                 <:  status:    :>,status,"nl",1,
  5  4606                 <:  opgave:    :>,opgave,"nl",1,
  5  4607                 <:  dest-sem:  :>,dest_sem,"nl",1,
  5  4608                 <:  iaf:       :>,iaf,"nl",1,
  5  4609                 <:  i:         :>,i,"nl",1,
  5  4610                 <:  j:         :>,j,"nl",1,
  5  4611                 <:  k:         :>,k,"nl",1,
  5  4612                 <:  navn:      :>,string navn,"nl",1,
  5  4613                 <:  pos:       :>,pos,"nl",1,
  5  4614                 <:  indeks:    :>,indeks,"nl",1,
  5  4615                 <:  sep:       :>,sep,"nl",1,
  5  4616                 <:  sluttegn:  :>,sluttegn,"nl",1,
  5  4617                 <:  vogn:      :>,vogn,"nl",1,
  5  4618                 <:  ll:        :>,ll,"nl",1,
  5  4619                 <:  omr:       :>,omr,"nl",1,
  5  4620                 <:  operatør:  :>,operatør,"nl",1,
  5  4621                 <::>);
  5  4622               skriv_coru(zud,coru_no(101));
  5  4623     slut:
  5  4624             end;
  4  4625           end skriv_io_komm;
  3  4626     \f

  3  4626     message procedure io_komm side 2 - 810424/hko;
  3  4627     
  3  4627         trap(io_komm_trap);
  3  4628         stack_claim((if cm_test then 200 else 146)+24+200);
  3  4629     
  3  4629         ref:=0;
  3  4630         navn:= long<::>;
  3  4631         
  3  4631     <*+2*>
  3  4632         if testbit0 and overvåget or testbit28 then
  3  4633           skriv_io_komm(out,0);
  3  4634     <*-2*>
  3  4635     
  3  4635         repeat
  3  4636     
  3  4636     <*V*> wait_ch(cs_io_komm,
  3  4637                   op_ref,
  3  4638                   true,
  3  4639                   -1<*timeout*>);
  3  4640     <*+2*>
  3  4641           if testbit1 and overvåget then
  3  4642           disable begin
  4  4643             skriv_io_komm(out,0);
  4  4644             write(out,"nl",1,<:operation fra cs:>,<<d>,cs_io,
  4  4645                              <: til io :>);
  4  4646             skriv_op(out,op_ref);
  4  4647           end;
  3  4648     <*-2*>
  3  4649     
  3  4649           kode:= d.op_ref.op_kode;
  3  4650           i:= terminal_tab.ref.terminal_tilstand;
  3  4651           status:= i shift(-21);
  3  4652           opgave:=
  3  4653             if kode=0 then 1 <* indlæs kommando *> else
  3  4654             0; <* afvises *>
  3  4655     
  3  4655           aktion:= if opgave = 0 then 0 else
  3  4656                      (case status +1 of(
  3  4657           <* status         *>
  3  4658           <* 0 klar         *>(1),
  3  4659           <* 1 -            *>(-1),<* ulovlig tilstand *>
  3  4660           <* 2 -            *>(-1),<* ulovlig tilstand *>
  3  4661           <* 3 stoppet      *>(2),
  3  4662           <* 4 noneksist    *>(-1),<* ulovlig tilstand *>
  3  4663           <* 5 -            *>(-1),<* ulovlig tilstand *>
  3  4664           <* 6 -            *>(-1),<* ulovlig tilstand *>
  3  4665           <* 7 ej knyttet   *>(-1),<* ulovlig tilstand *>
  3  4666                               -1));
  3  4667     \f

  3  4667     message procedure io_komm side 3 - 810428/hko;
  3  4668     
  3  4668           case aktion+6 of
  3  4669           begin
  4  4670             begin
  5  4671               <*-5: terminal optaget *>
  5  4672     
  5  4672               d.op_ref.resultat:= 16;
  5  4673               afslut_operation(op_ref,-1);
  5  4674             end;
  4  4675     
  4  4675             begin
  5  4676               <*-4: operation uden virkning *>
  5  4677     
  5  4677               afslut_operation(op_ref,-1);
  5  4678             end;
  4  4679     
  4  4679             begin
  5  4680               <*-3: ulovlig operationskode *>
  5  4681     
  5  4681               fejl_reaktion(2<*operationskode*>,kode,<:ulovlig:>,1);
  5  4682               afslut_operation(op_ref,-1);
  5  4683             end;
  4  4684     
  4  4684             begin
  5  4685               <*-2: ulovlig aktion *>
  5  4686     
  5  4686               fejl_reaktion(3<*programfejl*>,-2,<: ulovlig aktion:>,0);
  5  4687               afslut_operation(op_ref,-1);
  5  4688             end;
  4  4689     
  4  4689             begin
  5  4690               <*-1: ulovlig io_tilstand *>
  5  4691     
  5  4691               fejl_reaktion(3<*programfejl*>,status,<: ulovlig io-status:>,0);
  5  4692               afslut_operation(op_ref,-1);
  5  4693             end;
  4  4694     
  4  4694             begin
  5  4695               <* 0: ikke implementeret *>
  5  4696     
  5  4696               fejl_reaktion(2<*operationskode*>,kode,<: ikke implementeret:>,1);
  5  4697               afslut_operation(op_ref,-1);
  5  4698             end;
  4  4699     
  4  4699             begin
  5  4700     \f

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

  9  4748     message procedure io_komm side 5 - 810424/hko;
  9  4749     
  9  4749                       <* 1: inkluder/ekskluder ydre enhed *>
  9  4750     
  9  4750                       d.op_ref.retur:= cs_io_komm;
  9  4751                       if kode=1 then d.opref.opkode:= 
  9  4752                         ia(2) shift 12 + d.opref.opkode extract 12;
  9  4753                       d.op_ref.data(1):= ia(1);
  9  4754                       signal_ch(if kode < 5 or kode>=72 then cs_rad
  9  4755                                             else cs_gar,
  9  4756                                 op_ref,gen_optype or io_optype);
  9  4757                       indeks:= op_ref;
  9  4758                       wait_ch(cs_io_komm,
  9  4759                               op_ref,
  9  4760                               true,
  9  4761                               -1<*timeout*>);
  9  4762     <*+4*>            if op_ref <> indeks then
  9  4763                         fejlreaktion(11<*fremmed post*>,op_ref,<:io_kommando:>,0);
  9  4764     <*-4*>
  9  4765     <*V*>             setposition(z_io,0,0);
  9  4766                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  4767                       skriv_kvittering(z_io,op_ref,-1,
  9  4768                                        d.op_ref.resultat);
  9  4769                     end;
  8  4770     
  8  4770                     begin
  9  4771     \f

  9  4771     message procedure io_komm side 6 - 810501/hko;
  9  4772     
  9  4772                       <* 2: tid/attention,ja/attention,nej
  9  4773                             slut/slut med billede *>
  9  4774     
  9  4774                       case d.op_ref.opkode -79 of
  9  4775                       begin
 10  4776     
 10  4776           <* 80: TI *>  begin
 11  4777                           setposition(z_io,0,0);
 11  4778                           if sluttegn<>'nl' then outchar(z_io,'nl');
 11  4779                           if ia(1) <> 0 or ia(2) <> 0 then
 11  4780                           begin real field rf;
 12  4781                             rf:= 4;
 12  4782                             trap(forbudt);
 12  4783     <*V*>                   setposition(z_io,0,0);
 12  4784                             systime(3,ia.rf,0.0);
 12  4785                             if false then
 12  4786                             begin
 13  4787                               forbudt: skriv_kvittering(z_io,0,-1,
 13  4788                                          43<*ændring af dato/tid ikke lovlig*>);
 13  4789                             end
 12  4790                             else
 12  4791                               skriv_kvittering(z_io,0,-1,3);
 12  4792                           end
 11  4793                           else
 11  4794                           begin
 12  4795                             setposition(z_io,0,0);
 12  4796                             write(z_io,<<zddddd>,systime(5,0,r),".",1,r);
 12  4797                           end;
 11  4798                         end TI;
 10  4799     \f

 10  4799     message procedure io_komm side 7 - 810424/hko;
 10  4800     
 10  4800           <*81: AT,J*>  begin
 11  4801     <*V*>                 setposition(z_io,0,0);
 11  4802                           if sluttegn <> 'nl' then outchar(zio,'nl');
 11  4803                           monitor(10)release process:(z_io,0,ia);
 11  4804                           skriv_kvittering(z_io,0,-1,3);
 11  4805                         end;
 10  4806     
 10  4806           <* 82: AT,N*> begin
 11  4807                           i:= monitor(8)reserve process:(z_io,0,ia);
 11  4808     <*V*>                 setposition(z_io,0,0);
 11  4809                           if sluttegn <> 'nl' then outchar(zio,'nl');
 11  4810                           skriv_kvittering(z_io,0,-1,
 11  4811                             if i = 0 then 3 else 0);
 11  4812                         end;
 10  4813     
 10  4813           <* 83: SL *>  begin
 11  4814                           errorbits:=0; <* warning.no ok.yes *>
 11  4815                           trapmode:= 1 shift 13;
 11  4816                           trap(-2);
 11  4817                         end;
 10  4818     
 10  4818           <* 84: SL,B *>begin
 11  4819                           errorbits:=1; <* warning.no ok.no *>
 11  4820                           trap(-3);
 11  4821                         end;
 10  4822           <* 85: SL,K *>begin
 11  4823                           errorbits:=1; <* warning.no ok.no *>
 11  4824                           disable sæt_bit_i(trapmode,15,0);
 11  4825                           trap(-3);
 11  4826                         end;
 10  4827     \f

 10  4827     message procedure io_komm side 7a - 810511/cl;
 10  4828     
 10  4828           <* 86: TE,J *>begin
 11  4829                           setposition(z_io,0,0);
 11  4830                           if sluttegn <> 'nl' then outchar(z_io,'nl');
 11  4831                           for i:= 1 step 1 until indeks do
 11  4832                           if 0<=ia(i) and ia(i)<=47 then
 11  4833                           begin
 12  4834                             case (ia(i)+1) of
 12  4835                             begin
 13  4836                               testbit0 := true;testbit1 := true;testbit2 := true;
 13  4837                               testbit3 := true;testbit4 := true;testbit5 := true;
 13  4838                               testbit6 := true;testbit7 := true;testbit8 := true;
 13  4839                               testbit9 := true;testbit10:= true;testbit11:= true;
 13  4840                               testbit12:= true;testbit13:= true;testbit14:= true;
 13  4841                               testbit15:= true;testbit16:= true;testbit17:= true;
 13  4842                               testbit18:= true;testbit19:= true;testbit20:= true;
 13  4843                               testbit21:= true;testbit22:= true;testbit23:= true;
 13  4844                               testbit24:= true;testbit25:= true;testbit26:= true;
 13  4845                               testbit27:= true;testbit28:= true;testbit29:= true;
 13  4846                               testbit30:= true;testbit31:= true;testbit32:= true;
 13  4847                               testbit33:= true;testbit34:= true;testbit35:= true;
 13  4848                               testbit36:= true;testbit37:= true;testbit38:= true;
 13  4849                               testbit39:= true;testbit40:= true;testbit41:= true;
 13  4850                               testbit42:= true;testbit43:= true;testbit44:= true;
 13  4851                               testbit45:= true;testbit46:= true;testbit47:= true;
 13  4852                             end;
 12  4853                           end;
 11  4854                           skriv_kvittering(z_io,0,-1,3);
 11  4855                         end;
 10  4856     \f

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

  9  4928     message procedure io_komm side 8 - 810424/hko;
  9  4929     
  9  4929                       <* 3: vogntabel,linienr/-,busnr*>
  9  4930     
  9  4930                       d.op_ref.retur:= cs_io_komm;
  9  4931                       tofrom(d.op_ref.data,ia,10);
  9  4932                       indeks:= op_ref;
  9  4933                       signal_ch(cs_vt,op_ref,gen_optype or io_optype);
  9  4934                       wait_ch(cs_io_komm,
  9  4935                               op_ref,
  9  4936                               io_optype,
  9  4937                               -1<*timeout*>);
  9  4938     <*+2*>            if testbit2 and overvåget then
  9  4939                       disable begin
 10  4940                         skriv_io_komm(out,0);
 10  4941                         write(out,"nl",1,<:io operation retur fra vt:>);
 10  4942                         skriv_op(out,op_ref);
 10  4943                       end;
  9  4944     <*-2*>
  9  4945     <*+4*>            if indeks <> op_ref then
  9  4946                         fejlreaktion(11<*fremmed post*>,op_ref,<:io_kommando:>,0);
  9  4947     <*-4*>
  9  4948     
  9  4948                       i:=d.op_ref.resultat;
  9  4949                       if i<1 or i>3 then
  9  4950                       begin
 10  4951     <*V*>               setposition(z_io,0,0);
 10  4952                         if sluttegn<>'nl' then outchar(z_io,'nl');
 10  4953                         skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat);
 10  4954                       end
  9  4955                       else
  9  4956                       begin
 10  4957     \f

 10  4957     message procedure io_komm side 9 - 820301/hko,cl;
 10  4958     
 10  4958                         integer antal,filref;
 10  4959     
 10  4959                         antal:= d.op_ref.data(6);
 10  4960                         fil_ref:= d.op_ref.data(7);
 10  4961                         pos:= 0;
 10  4962     <*V*>               setposition(zio,0,0);
 10  4963                         if sluttegn <> 'nl' then outchar(z_io,'nl');
 10  4964                         for pos:= pos +1 while pos <= antal do
 10  4965                         begin
 11  4966                           integer bogst,løb;
 11  4967     
 11  4967                           disable i:= læsfil(fil_ref,pos,j);
 11  4968                           if i <> 0 then
 11  4969                             fejlreaktion(5<*læs_fel*>,i,<:io komm., vo,l/vo,b:>,0);
 11  4970                           vogn:= fil(j,1) shift (-24) extract 24;
 11  4971                           løb:= fil(j,1) extract 24;
 11  4972                           if d.op_ref.opkode=9 then
 11  4973                             begin i:=vogn; vogn:=løb; løb:=i; end;
 11  4974                           ll:= løb shift(-12) extract 10;
 11  4975                           bogst:= løb shift(-7) extract 5;
 11  4976                           if bogst > 0 then bogst:=  bogst+'A'-1;
 11  4977                           løb:= løb extract 7;
 11  4978                           vogn:= vogn extract 14;
 11  4979                           i:= d.op_ref.opkode -8;
 11  4980                           for i:= i,i +1 do
 11  4981                           begin
 12  4982                             j:= (i+1) extract 1;
 12  4983                             case j+1 of
 12  4984                             begin
 13  4985                               write(zio,"sp",if bogst=0 then 1 else 0,<<ddd>,ll,
 13  4986                                   false add bogst,1,"/",1,true,3,<<d>,løb);
 13  4987                               write(zio,<<dddd>,vogn,"sp",1);
 13  4988                             end;
 12  4989                           end;
 11  4990                           if pos mod 5 = 0 then
 11  4991                           begin
 12  4992                             outchar(zio,'nl');
 12  4993     <*V*>                   setposition(zio,0,0);
 12  4994                           end
 11  4995                           else write(zio,"sp",3);
 11  4996                         end;
 10  4997                         write(zio,"*",1);
 10  4998     \f

 10  4998     message procedure io_komm side 9a - 810505/hko;
 10  4999     
 10  4999                         d.op_ref.opkode:=104;<*slet fil*>
 10  5000                         d.op_ref.data(4):=filref;
 10  5001                         indeks:=op_ref;
 10  5002                         signal_ch(cs_slet_fil,op_ref,genoptype or iooptype);
 10  5003     <*V*>               wait_ch(cs_io_komm,op_ref,io_optype,-1);
 10  5004     
 10  5004     <*+2*>              if testbit2 and overvåget then
 10  5005                         disable begin
 11  5006                           skriv_io_komm(out,0);
 11  5007                           write(out,"nl",1,<:io operation retur fra sletfil:>);
 11  5008                           skriv_op(out,op_ref);
 11  5009                         end;
 10  5010     <*-2*>
 10  5011     
 10  5011     <*+4*>              if op_ref<>indeks then
 10  5012                           fejlreaktion(11<*fr.post*>,op_ref,<:io-komm, sletfil:>,0);
 10  5013     <*-4*>
 10  5014                         if d.op_ref.data(9)<>0 then
 10  5015                           fejlreaktion(3<*prg.fejl*>,d.op_ref.data(9),
 10  5016                                <:io-komm, sletfil:>,1);
 10  5017                       end;
  9  5018                     end;
  8  5019     
  8  5019                     begin
  9  5020     \f

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

  9  5069     message procedure io_komm side 11 - 810428/hko;
  9  5070     
  9  5070                       <* 5 autofil-skift
  9  5071                            gruppe,slet
  9  5072                            spring  (igangsæt)
  9  5073                            spring,annuler
  9  5074                            spring,reserve     *>
  9  5075     
  9  5075                       tofrom(d.op_ref.data,ia,8);
  9  5076                       d.op_ref.retur:=cs_io_komm;
  9  5077                       indeks:=op_ref;
  9  5078                       signal_ch(cs_vt,op_ref,gen_optype or io_optype);
  9  5079     <*V*>             wait_ch(cs_io_komm,
  9  5080                               op_ref,
  9  5081                               io_optype,
  9  5082                               -1<*timeout*>);
  9  5083     <*+2*>            if testbit2 and overvåget then
  9  5084                       disable begin
 10  5085                         skriv_io_komm(out,0);
 10  5086                         write(out,"nl",1,<:io operation retur fra vt:>);
 10  5087                         skriv_op(out,op_ref);
 10  5088                       end;
  9  5089     <*-2*>
  9  5090     <*+4*>            if indeks<>op_ref then
  9  5091                         fejlreaktion(11<*fremmed post*>,op_ref,
  9  5092                                      <:io-kommando(autofil):>,0);
  9  5093     <*-4*>
  9  5094     
  9  5094     <*V*>             setposition(z_io,0,0);
  9  5095                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  5096                       skriv_kvittering(z_io,if (d.op_ref.resultat=11 or
  9  5097                           d.op_ref.resultat=12) and kode=34 <*SP,R*> then
  9  5098                           d.op_ref.data(4) else op_ref,-1,d.op_ref.resultat);
  9  5099                     end;
  8  5100     
  8  5100                     begin
  9  5101     \f

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

 10  5149     message procedure io_komm side 13 - 810512/hko/cl;
 10  5150     
 10  5150                         disable begin
 11  5151                         integer array værdi(1:4);
 11  5152                         integer a_pos,res;
 11  5153                           pos:= 0;
 11  5154                           repeat
 11  5155                             apos:= pos;
 11  5156                             læs_paramsæt(fortsæt,a_pos,0,værdi,sep,res);
 11  5157                             if res >= 0 then
 11  5158                             begin
 12  5159                               if res=0 and (sep=',' or indeks>2) then <*ok*>
 12  5160                               else if res=0 then res:= -25 <*parameter mangler*>
 12  5161                               else if res=2 and (værdi(1)<1 or værdi(1)>9999) then
 12  5162                                       res:= -7 <*busnr ulovligt*>
 12  5163                               else if res=2 or res=6 then
 12  5164                               begin
 13  5165                                 k:=modiffil(d.vt_op.data(4),indeks,j);
 13  5166                                 if k<>0 then fejlreaktion(7<*modiffil*>,k,
 13  5167                                    <:io kommando(gruppe-def):>,0);
 13  5168                                 iaf:= 0;
 13  5169                                 fil(j).iaf(1):= værdi(1) +
 13  5170                                   (if res=6 then 1 shift 22 else 0);
 13  5171                                 indeks:= indeks+1;
 13  5172                                 if sep = ',' then res:= 0;
 13  5173                               end
 12  5174                               else res:= -27; <*parametertype*>
 12  5175                             end;
 11  5176                             if res>0 then pos:= a_pos;
 11  5177                           until sep<>'sp' or res<=0;
 11  5178     
 11  5178                           if res<0 then
 11  5179                           begin
 12  5180                             d.op_ref.resultat:= -res;
 12  5181                             i:=1;
 12  5182                             hægt_tekst(d.op_ref.data,i,fortsæt,1);
 12  5183                             afsluttext(d.op_ref.data,i);
 12  5184                           end;
 11  5185                         end;
 10  5186     \f

 10  5186     message procedure io_komm side 13a - 810512/hko/cl;
 10  5187     
 10  5187                         if d.op_ref.resultat > 3 then
 10  5188                         begin
 11  5189                           setposition(z_io,0,0);
 11  5190                           if sluttegn <> 'nl' then outchar(z_io,'nl');
 11  5191                           skriv_kvittering(z_io,op_ref,pos,d.opref.resultat);
 11  5192                           goto gr_ann;
 11  5193                         end;
 10  5194                         signalbin(bs_fortsæt_adgang);
 10  5195                       end while sep = ',';
  9  5196                       d.op_ref.data(2):= d.vt_op.data(1):=indeks-1;
  9  5197                       k:= sætfildim(d.vt_op.data);
  9  5198                       if k<>0 then fejlreaktion(9,k,<:io kommando(gruppe-def):>,0);
  9  5199                       d.op_ref.data(3):= d.vt_op.data(4); <*filref*>
  9  5200                       signalch(cs_io_fil,vt_op,io_optype or gen_optype);
  9  5201                       d.op_ref.retur:=cs_io_komm;
  9  5202                       pos:=op_ref;
  9  5203                       signal_ch(cs_vt,op_ref,gen_optype or io_optype);
  9  5204     <*V*>             wait_ch(cs_io_komm,op_ref,io_optype,-1<*timeout*>);
  9  5205     <*+4*>            if pos<>op_ref then
  9  5206                         fejlreaktion(11<*fremmed post*>,op_ref,
  9  5207                           <:io kommando(gruppedef retur fra vt):>,0);
  9  5208     <*-4*>
  9  5209     
  9  5209     <*V*>             setposition(z_io,0,0);
  9  5210                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  5211                       skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat);
  9  5212     
  9  5212                       if false then
  9  5213                       begin
 10  5214               gr_ann:   signalch(cs_slet_fil,vt_op,io_optype);
 10  5215                         waitch(cs_io_komm,vt_op,io_optype,-1);
 10  5216                         signalch(cs_io_fil,vt_op,io_optype or vt_optype);
 10  5217                       end;
  9  5218                         
  9  5218                     end;
  8  5219     
  8  5219                     begin
  9  5220     \f

  9  5220     message procedure io_komm side 14 - 810525/hko/cl;
  9  5221     
  9  5221                       <* 7 gruppe(-oversigts-)rapport *>
  9  5222     
  9  5222                       d.op_ref.retur:=cs_io_komm;
  9  5223                       d.op_ref.data(1):=ia(1);
  9  5224                       indeks:=op_ref;
  9  5225                       signal_ch(cs_vt,op_ref,gen_optype or io_optype);
  9  5226     <*V*>             wait_ch(cs_io_komm,op_ref,io_optype,-1<*timeout*>);
  9  5227     
  9  5227     <*+4*>            if op_ref<>indeks then
  9  5228                         fejlreaktion(11<*fremmed post*>,op_ref,
  9  5229                           <:io-kommando(gruppe-rapport):>,0);
  9  5230     <*-4*>
  9  5231     
  9  5231     <*V*>             setposition(z_io,0,0);
  9  5232                       if sluttegn <> 'nl' then outchar(z_io,'nl');
  9  5233                       if d.op_ref.resultat<>3 then
  9  5234                       begin
 10  5235                         skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat);
 10  5236                       end
  9  5237                       else
  9  5238                       begin
 10  5239                         integer bogst,løb;
 10  5240     
 10  5240                         if kode = 27 then <* gruppe,vis *>
 10  5241                         begin
 11  5242     <*V*>                 write(z_io,"nl",1,"-",5,"sp",2,<:gruppe: :>,
 11  5243                                 "G",1,<<z>,d.op_ref.data(1) extract 7,
 11  5244                                 "sp",2,"-",5,"nl",1);
 11  5245     \f

 11  5245     message procedure io_komm side 15 - 820301/hko;
 11  5246     
 11  5246                           for pos:=1 step 1 until d.op_ref.data(2) do
 11  5247                           begin
 12  5248                             disable i:=læsfil(d.op_ref.data(3),pos,j);
 12  5249                             if i<>0 then
 12  5250                               fejlreaktion(5<*læsfil*>,i,
 12  5251                                 <:io_kommando(gruppe,vis):>,0);
 12  5252                             iaf:=0;
 12  5253                             vogn:=fil(j).iaf(1);
 12  5254                             if vogn shift(-22) =0 then
 12  5255                               write(z_io,<<ddddddd>,vogn extract 14)
 12  5256                             else
 12  5257                             begin
 13  5258                               løb:=vogn extract 7;
 13  5259                               bogst:=vogn shift(-7) extract 5;
 13  5260                               if bogst>0 then bogst:=bogst+'A'-1;
 13  5261                               ll:=vogn shift(-12) extract 10;
 13  5262                               write(z_io,"sp",if bogst=0 then 1 else 0,<<ddd>,ll,
 13  5263                                     false add bogst,1,"/",1,true,3,<<d>,løb);
 13  5264                             end;
 12  5265                             if pos mod 8 =0 then outchar(z_io,'nl')
 12  5266                             else write(z_io,"sp",2);
 12  5267                           end;
 11  5268                           write(z_io,"*",1);
 11  5269     \f

 11  5269     message procedure io_komm side 16 - 810512/hko/cl;
 11  5270     
 11  5270                         end
 10  5271                         else if kode=28 then <* gruppe,oversigt *>
 10  5272                         begin
 11  5273                           write(z_io,"nl",1,"-",5,"sp",2,<:gruppe oversigt:>,
 11  5274                                 "sp",2,"-",5,"nl",2);
 11  5275                           for pos:=1 step 1 until d.op_ref.data(1) do
 11  5276                           begin
 12  5277                             disable i:=læsfil(d.op_ref.data(2),pos,j);
 12  5278                             if i<>0 then 
 12  5279                               fejlreaktion(5<*læsfil*>,i,
 12  5280                                 <:io-kommando(gruppe-oversigt):>,0);
 12  5281                             iaf:=0;
 12  5282                             ll:=fil(j).iaf(1);
 12  5283                             write(z_io,"G",1,<<z>,true,3,ll extract 7);
 12  5284                             if pos mod 10 =0 then outchar(z_io,'nl')
 12  5285                             else write(z_io,"sp",3);
 12  5286                           end;
 11  5287                           write(z_io,"*",1);
 11  5288                         end;
 10  5289                         <* slet fil *>
 10  5290                         d.op_ref.opkode:= 104;
 10  5291                         d.op_ref.data(4):= d.op_ref.data(if kode=28 then 2 else 3);
 10  5292                         signalch(cs_slet_fil,op_ref,gen_optype or io_optype);
 10  5293                         waitch(cs_io_komm,op_ref,io_optype or gen_optype,-1);
 10  5294                       end; <* resultat=3 *>
  9  5295     
  9  5295                     end;
  8  5296     
  8  5296                     begin
  9  5297     \f

  9  5297     message procedure io_komm side 17 - 810525/cl;
  9  5298     
  9  5298                       <* 8 spring(-oversigts-)rapport *>
  9  5299     
  9  5299                       d.op_ref.retur:=cs_io_komm;
  9  5300                       tofrom(d.op_ref.data,ia,4);
  9  5301                       indeks:=op_ref;
  9  5302                       signal_ch(cs_vt,op_ref,gen_optype or io_optype);
  9  5303     <*V*>             wait_ch(cs_io_komm,op_ref,io_optype,-1<*timeout*>);
  9  5304     
  9  5304     <*+4*>            if op_ref<>indeks then
  9  5305                         fejlreaktion(11<*fremmed post*>,op_ref,
  9  5306                           <:io-kommando(spring-rapport):>,0);
  9  5307     <*-4*>
  9  5308     
  9  5308     <*V*>             setposition(z_io,0,0);
  9  5309                       if sluttegn <> 'nl' then outchar(z_io,'nl');
  9  5310                       if d.op_ref.resultat<>3 then
  9  5311                       begin
 10  5312                         skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat);
 10  5313                       end
  9  5314                       else
  9  5315                       begin
 10  5316                         boolean p_skrevet;
 10  5317                         integer bogst,løb;
 10  5318     
 10  5318                         if kode = 32 then <* spring,vis *>
 10  5319                         begin
 11  5320                           ll:= d.op_ref.data(1) shift (-5) extract 10;
 11  5321                           bogst:= d.op_ref.data(1) extract 5;
 11  5322                           if bogst<>0 then bogst:= bogst + 'A' - 1;
 11  5323     <*V*>                 write(z_io,"nl",1,"-",5,"sp",2,<:spring: :>,
 11  5324                                 <<d>,ll,false add bogst,(bogst<>0) extract 1,
 11  5325                                 <:.:>,string (extend d.op_ref.data(2) shift 24));
 11  5326                           raf:= data+8;
 11  5327                           if d.op_ref.raf(1)<>0.0 then
 11  5328                             write(z_io,<:,  startet :>,<<zddddd>,round
 11  5329                               systime(4,d.op_ref.raf(1),r),<:.:>,round r)
 11  5330                           else
 11  5331                             write(z_io,<:, ikke startet:>);
 11  5332                           write(z_io,"sp",2,"-",5,"nl",1);
 11  5333     \f

 11  5333     message procedure io_komm side 18 - 810518/cl;
 11  5334     
 11  5334                           p_skrevet:= false;
 11  5335                           for pos:=1 step 1 until d.op_ref.data(3) do
 11  5336                           begin
 12  5337                             disable i:=læsfil(d.op_ref.data(4),pos,j);
 12  5338                             if i<>0 then
 12  5339                               fejlreaktion(5<*læsfil*>,i,
 12  5340                                 <:io_kommando(spring,vis):>,0);
 12  5341                             iaf:=0;
 12  5342                             i:= fil(j).iaf(1);
 12  5343                             if i < 0 and -, p_skrevet then
 12  5344                             begin
 13  5345                               outchar(z_io,'('); p_skrevet:= true;
 13  5346                             end;
 12  5347                             if i > 0 and p_skrevet then
 12  5348                             begin
 13  5349                               outchar(z_io,')'); p_skrevet:= false;
 13  5350                             end;
 12  5351                             if pos mod 2 = 0 then
 12  5352                               write(z_io,<< dd>,abs i,<:.:>)
 12  5353                             else
 12  5354                               write(z_io,true,3,<<d>,abs i);
 12  5355                             if pos mod 21 = 0 then outchar(z_io,'nl');
 12  5356                           end;
 11  5357                           write(z_io,"*",1);
 11  5358     \f

 11  5358     message procedure io_komm side 19 - 810525/cl;
 11  5359     
 11  5359                         end
 10  5360                         else if kode=33 then <* spring,oversigt *>
 10  5361                         begin
 11  5362                           write(z_io,"nl",1,"-",5,"sp",2,<:spring oversigt:>,
 11  5363                                 "sp",2,"-",5,"nl",2);
 11  5364                           for pos:=1 step 1 until d.op_ref.data(1) do
 11  5365                           begin
 12  5366                             disable i:=læsfil(d.op_ref.data(2),pos,j);
 12  5367                             if i<>0 then 
 12  5368                               fejlreaktion(5<*læsfil*>,i,
 12  5369                                 <:io-kommando(spring-oversigt):>,0);
 12  5370                             iaf:=0;
 12  5371                             ll:=fil(j).iaf(1) shift (-5) extract 10;
 12  5372                             bogst:=fil(j).iaf(1) extract 5;
 12  5373                             if bogst<>0 then bogst:=bogst + 'A' - 1;
 12  5374                             write(z_io,"sp",(bogst=0) extract 1 + 1,<<ddd>,ll,
 12  5375                               false add bogst,(bogst<>0) extract 1,<:.:>,true,4,
 12  5376                               string (extend fil(j).iaf(2) shift 24));
 12  5377                             if fil(j,2)<>0.0 then
 12  5378                               write(z_io,<:startet :>,<<zddddd>,
 12  5379                                 round systime(4,fil(j,2),r),<:.:>,round r);
 12  5380                             outchar(z_io,'nl');
 12  5381                           end;
 11  5382                           write(z_io,"*",1);
 11  5383                         end;
 10  5384                         <* slet fil *>
 10  5385                         d.op_ref.opkode:= 104;
 10  5386                         if kode=33 then d.op_ref.data(4):= d.op_ref.data(2);
 10  5387                         signalch(cs_slet_fil,op_ref,gen_optype or io_optype);
 10  5388                         waitch(cs_io_komm,op_ref,io_optype or gen_optype,-1);
 10  5389                       end; <* resultat=3 *>
  9  5390     
  9  5390                     end;
  8  5391     
  8  5391                     begin
  9  5392     \f

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

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

 10  5500     message procedure io_komm side 22 - 810519/cl;
 10  5501     
 10  5501                         disable begin
 11  5502                         integer array værdi(1:4);
 11  5503                         integer a_pos,res;
 11  5504                           pos:= 0;
 11  5505                           repeat
 11  5506                             apos:= pos;
 11  5507                             læs_paramsæt(fortsæt,a_pos,0,værdi,sep,res);
 11  5508                             if res >= 0 then
 11  5509                             begin
 12  5510                               if res=0 and (sep=',' or indeks>2) then <*ok*>
 12  5511                               else if res=0 then res:= -25 <*parameter mangler*>
 12  5512                               else if res=10 and (værdi(1)<1 or værdi(1)>99) then
 12  5513                                   res:= -44 <*intervalstørrelse ulovlig*>
 12  5514                               else if res=10 and (værdi(2)<1 or værdi(2)>99) then
 12  5515                                   res:= -6  <*løbnr ulovligt*>
 12  5516                               else if res=10 then
 12  5517                               begin
 13  5518                                 k:=modiffil(d.vt_op.data(4),indeks-1,j);
 13  5519                                 if k<>0 then fejlreaktion(7<*modiffil*>,k,
 13  5520                                    <:io kommando(spring-def):>,0);
 13  5521                                 iaf:= 0;
 13  5522                                 fil(j).iaf(1):= værdi(1) shift 12 + værdi(2);
 13  5523                                 indeks:= indeks+1;
 13  5524                                 if sep = ',' then res:= 0;
 13  5525                               end
 12  5526                               else res:= -27; <*parametertype*>
 12  5527                             end;
 11  5528                             if res>0 then pos:= a_pos;
 11  5529                           until sep<>'sp' or res<=0;
 11  5530     
 11  5530                           if res<0 then
 11  5531                           begin
 12  5532                             d.op_ref.resultat:= -res;
 12  5533                             i:=1;
 12  5534                             hægt_tekst(d.op_ref.data,i,fortsæt,1);
 12  5535                             afsluttext(d.op_ref.data,i);
 12  5536                           end;
 11  5537                         end;
 10  5538     \f

 10  5538     message procedure io_komm side 23 - 810519/cl;
 10  5539     
 10  5539                         if d.op_ref.resultat > 3 then
 10  5540                         begin
 11  5541                           setposition(z_io,0,0);
 11  5542                           if sluttegn <> 'nl' then outchar(z_io,'nl');
 11  5543                           skriv_kvittering(z_io,op_ref,pos,d.opref.resultat);
 11  5544                           goto sp_ann;
 11  5545                         end;
 10  5546                         signalbin(bs_fortsæt_adgang);
 10  5547                       end while sep = ',';
  9  5548                       d.vt_op.data(1):= indeks-2;
  9  5549                       k:= sætfildim(d.vt_op.data);
  9  5550                       if k<>0 then fejlreaktion(9,k,<:io kommando(spring-def):>,0);
  9  5551                       d.op_ref.data(3):= d.vt_op.data(4); <*filref*>
  9  5552                       signalch(cs_io_fil,vt_op,io_optype or gen_optype);
  9  5553                       d.op_ref.retur:=cs_io_komm;
  9  5554                       pos:=op_ref;
  9  5555                       signal_ch(cs_vt,op_ref,gen_optype or io_optype);
  9  5556     <*V*>             wait_ch(cs_io_komm,op_ref,io_optype,-1<*timeout*>);
  9  5557     <*+4*>            if pos<>op_ref then
  9  5558                         fejlreaktion(11<*fremmed post*>,op_ref,
  9  5559                           <:io kommando(springdef retur fra vt):>,0);
  9  5560     <*-4*>
  9  5561     
  9  5561     <*V*>             setposition(z_io,0,0);
  9  5562                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  5563                       skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat);
  9  5564     
  9  5564                       if false then
  9  5565                       begin
 10  5566               sp_ann:   signalch(cs_slet_fil,vt_op,io_optype);
 10  5567                         waitch(cs_io_komm,vt_op,io_optype,-1);
 10  5568                         signalch(cs_io_fil,vt_op,io_optype or vt_optype);
 10  5569                         signalbin(bs_fortsæt_adgang);
 10  5570                       end;
  9  5571                         
  9  5571                     end;
  8  5572                     begin
  9  5573                       integer i,j,k,opr,lin,max_lin;
  9  5574                       boolean o_ud, t_ud;
  9  5575     \f

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

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

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

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

  9  5932     message procedure io_komm side 27 - 940522/cl;
  9  5933     
  9  5933                       <* 15 vis betjeningspladsdefinitioner *>
  9  5934     
  9  5934                       setposition(z_io,0,0);
  9  5935                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  5936                       write(z_io,"nl",1,<:operatørpladser::>,"nl",1);
  9  5937                       for i:= 1 step 1 until max_antal_operatører do
  9  5938                       begin
 10  5939                         write(z_io,<<dd>,i,<:: :>,true,6,string bpl_navn(i),
 10  5940                           case operatør_auto_include(i) extract 2 + 1 of(
 10  5941                           <:(--):>,<:(ÅB):>,<:(??):>,<:(ST):>));
 10  5942                         if i mod 4 = 0 then write(z_io,"nl",1)
 10  5943                                        else write(z_io,"sp",5);
 10  5944                       end;
  9  5945                       if max_antal_operatører mod 4 <> 0 then write(z_io,"nl",1);
  9  5946                       write(z_io,"nl",1,<:grupper::>,"nl",1);
  9  5947                       for i:= 65 step 1 until top_bpl_gruppe do
  9  5948                       begin
 10  5949                         ll:=0; iaf:= i*op_maske_lgd;
 10  5950                         if bpl_navn(i)<>long<::> then
 10  5951                         begin
 11  5952                           write(z_io,true,6,string bpl_navn(i),":",1);
 11  5953                           for j:= 1 step 1 until max_antal_operatører do
 11  5954                           begin
 12  5955                             if læsbit_ia(bpl_def.iaf,j) then
 12  5956                             begin
 13  5957                               if ll mod 8 = 0 and ll<>0 then
 13  5958                                 write(z_io,"nl",1,"sp",7);
 13  5959                               write(z_io,"sp",2,string bpl_navn(j));
 13  5960                               ll:=ll+1;
 13  5961                             end;
 12  5962                           end;
 11  5963                           write(z_io,"nl",1);
 11  5964                         end;
 10  5965                       end;
  9  5966                       write(z_io,"*",1);
  9  5967                     end;
  8  5968     
  8  5968                     begin
  9  5969     \f

  9  5969     message procedure io_komm side 28 - 940522/cl;
  9  5970     
  9  5970                       <* 16 stopniveau,definer *>
  9  5971     
  9  5971                       operatør:= ia(1);
  9  5972                       iaf:= operatør*terminal_beskr_længde;
  9  5973                       for i:= 1 step 1 until 3 do
  9  5974                         operatør_stop(operatør,i):= ia(i+1);
  9  5975                       if -,læsbit_ia(operatørmaske,operatør) then
  9  5976                       begin
 10  5977                         tofrom(opkaldsflag,alle_operatører,op_maske_lgd);
 10  5978                         signal_bin(bs_mobilopkald);
 10  5979                       end;
  9  5980                       k:=modif_fil(tf_stoptabel,operatør,ll);
  9  5981                       if k<>0 then
  9  5982                         fejlreaktion(7,k,<:stopniveau,definer:>,0);
  9  5983                       iaf:= 0;
  9  5984                       for i:= 0 step 1 until 3 do
  9  5985                         fil(ll).iaf(i+1):= operatør_stop(operatør,i);
  9  5986                       setposition(fil(ll),0,0);
  9  5987                       setposition(z_io,0,0);
  9  5988                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  5989                       skriv_kvittering(z_io,0,-1,3);
  9  5990                     end;
  8  5991     
  8  5991                     begin
  9  5992     \f

  9  5992     message procedure io_komm side 29 - 940522/cl;
  9  5993     
  9  5993                       <* 17 stopniveauer,vis *>
  9  5994     
  9  5994                       setposition(z_io,0,0);
  9  5995                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  5996     
  9  5996                       for operatør:= 1 step 1 until max_antal_operatører do
  9  5997                       begin
 10  5998                         iaf:=operatør*terminal_beskr_længde;
 10  5999                         ll:=0;
 10  6000                         ll:=write(z_io,<<dd>,operatør,<:: :>,true,6,
 10  6001                               string bpl_navn(operatør),<:(:>,
 10  6002                               case terminal_tab.iaf.terminal_tilstand shift (-21)
 10  6003                               + 1 of (<:AKTIV:>,<:AKTIV:>,<:AKTIV:>,<:PAUSE:>,
 10  6004                               <:EKSKL:>,<:EKSKL:>,<:EKSKL:>,<:EKSKL:>), <:) :>);
 10  6005                         for i:= 1 step 1 until 3 do
 10  6006                           ll:= ll+write(z_io,if i=1 then "sp" else "/",1,
 10  6007                                   if operatør_stop(operatør,i)=0 then <:ALLE:>
 10  6008                                   else string bpl_navn(operatør_stop(operatør,i)));
 10  6009                         if operatør mod 2 = 1 then
 10  6010                           write(z_io,"sp",40-ll)
 10  6011                         else
 10  6012                           write(z_io,"nl",1);
 10  6013                       end;
  9  6014                       if max_antal_operatører mod 2 <> 0 then write(z_io,"nl",1);
  9  6015                       write(z_io,"*",1);
  9  6016                     end;
  8  6017     
  8  6017                     begin
  9  6018     \f

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

  9  6137     message procedure io_komm side xx - 940522/cl;
  9  6138     
  9  6138     
  9  6138     
  9  6138     <*+3*>            fejl_reaktion(3<*programfejl*>,j,<:case 'opkode':>,2);
  9  6139     <*-3*>
  9  6140                     end
  8  6141                   end;<*case j *>
  7  6142                 end <* j > 0 *>
  6  6143                 else
  6  6144                 begin
  7  6145     <*V*>         setposition(z_io,0,0);
  7  6146                   if sluttegn<>'nl' then outchar(z_io,'nl');
  7  6147                   skriv_kvittering(z_io,op_ref,-1,
  7  6148                                    45 <* ikke implementeret *>);
  7  6149                 end;
  6  6150               end;<* godkendt *>
  5  6151     
  5  6151     <*V*>     setposition(z_io,0,0);
  5  6152               signal_bin(bs_zio_adgang);
  5  6153               d.op_ref.retur:=cs_att_pulje;
  5  6154               disable afslut_kommando(op_ref);
  5  6155             end; <* indlæs kommando *>
  4  6156     
  4  6156             begin
  5  6157     \f

  5  6157     message procedure io_komm side xx+1 - 810428/hko;
  5  6158     
  5  6158               <* 2: aktiver efter stop *>
  5  6159               terminal_tab.ref.terminal_tilstand:= 0 shift 21 +
  5  6160                 terminal_tab.ref.terminal_tilstand extract 21;
  5  6161               afslut_operation(op_ref,-1);
  5  6162               signal_bin(bs_zio_adgang);
  5  6163             end;
  4  6164     
  4  6164     <*+3*>  fejl_reaktion(3<*programfejl *>,aktion,<:case aktion:>,2)
  4  6165     <*-3*>
  4  6166           end; <* case aktion+6 *>
  3  6167     
  3  6167          until false;
  3  6168       io_komm_trap:
  3  6169         if -,(alarmcause shift (-24) extract 24 = (-2) and
  3  6170               alarmcause extract 24 = (-13)) then
  3  6171           disable skriv_io_komm(zbillede,1);
  3  6172       end io_komm;
  2  6173     \f

  2  6173     message procedure io_spool side 1 - 810507/hko;
  2  6174     
  2  6174       procedure io_spool;
  2  6175         begin
  3  6176           integer
  3  6177             næste_tomme,nr;
  3  6178           integer array field
  3  6179             op_ref;
  3  6180     
  3  6180           procedure skriv_io_spool(zud,omfang);
  3  6181             value                      omfang;
  3  6182             zone                   zud;
  3  6183             integer                    omfang;
  3  6184             begin
  4  6185               disable write(zud,"nl",1,<:+++ io_spool             :>);
  4  6186               if omfang > 0 then
  4  6187               disable begin integer x;
  5  6188                 trap(slut);
  5  6189                 write(zud,"nl",1,
  5  6190                   <:  opref:     :>,op_ref,"nl",1,
  5  6191                   <:  næstetomme::>,næste_tomme,"nl",1,
  5  6192                   <:  nr         :>,nr,"nl",1,
  5  6193                   <::>);
  5  6194                 skriv_coru(zud,coru_no(102));
  5  6195     slut:
  5  6196               end;<*disable*>
  4  6197             end skriv_io_spool;
  3  6198     
  3  6198           trap(io_spool_trap);
  3  6199           næste_tomme:= 1;
  3  6200           stack_claim((if cm_test then 200 else 146)+24 +48);
  3  6201     <*+2*>
  3  6202           if testbit0 and overvåget or testbit28 then
  3  6203             skriv_io_spool(out,0);
  3  6204     <*-2*>
  3  6205     \f

  3  6205     message procedure io_spool side 2 - 810602/hko;
  3  6206     
  3  6206           repeat
  3  6207     
  3  6207             wait_ch(cs_io_spool,
  3  6208                     op_ref,
  3  6209                     true,
  3  6210                     -1<*timeout*>);
  3  6211     
  3  6211             i:= d.op_ref.opkode;
  3  6212             if i = 22 or i = 23 or i = 36 or i = 45 or i = 46 then
  3  6213             begin
  4  6214               wait(ss_io_spool_tomme);
  4  6215               disable modif_fil(io_spoolfil,næste_tomme,nr);
  4  6216               næste_tomme:= (næste_tomme mod io_spool_postantal) +1;
  4  6217     
  4  6217               i:= d.op_ref.opsize;
  4  6218     <*+4*>    if i > io_spool_postlængde*2 -io_spool_post then
  4  6219               begin
  5  6220     <*          fejlreaktion(3,i,<:postlængde,io spool:>,1);  *>
  5  6221                 i:= io_spool_postlængde*2 -io_spool_post;
  5  6222               end;
  4  6223     <*-4*>
  4  6224               fil(nr,1):= real(extend d.op_ref.opsize shift 24);
  4  6225               tofrom(fil(nr).io_spool_post,d.op_ref,i);
  4  6226               signal(ss_io_spool_fulde);
  4  6227               d.op_ref.resultat:= 1;
  4  6228             end
  3  6229             else
  3  6230             begin
  4  6231               fejlreaktion(2<*operationskode*>,d.op_ref.opkode,
  4  6232                            <:io_spool_korutine:>,1);
  4  6233             end;
  3  6234     
  3  6234             signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  3  6235     
  3  6235           until false;
  3  6236     
  3  6236     io_spool_trap:
  3  6237     
  3  6237           disable skriv_io_spool(zbillede,1);
  3  6238         end io_spool;
  2  6239     \f

  2  6239     message procedure io_spon side 1 - 810507/hko;
  2  6240     
  2  6240       procedure io_spon;
  2  6241         begin
  3  6242           integer
  3  6243             næste_fulde,nr,i,dato,kl;
  3  6244           real t;
  3  6245     
  3  6245           procedure skriv_io_spon(zud,omfang);
  3  6246             value                     omfang;
  3  6247             zone                  zud;
  3  6248             integer                   omfang;
  3  6249             begin
  4  6250               disable write(zud,"nl",1,<:+++ io_spon              :>);
  4  6251               if omfang > 0 then
  4  6252               disable begin integer x;
  5  6253                 trap(slut);
  5  6254                 write(zud,"nl",1,
  5  6255                   <:  næste-fulde::>,næste_fulde,"nl",1,
  5  6256                   <:  nr          :>,nr,"nl",1,
  5  6257                   <::>);
  5  6258                 skriv_coru(zud,coru_no(103));
  5  6259     slut:
  5  6260               end;<*disable*>
  4  6261             end skriv_io_spon;
  3  6262     
  3  6262           trap(io_spon_trap);
  3  6263           næste_fulde:= 1;
  3  6264           stack_claim((if cm_test then 200 else 146) +24 +48);
  3  6265     <*+2*>
  3  6266           if testbit0 and overvåget or testbit28 then
  3  6267             skriv_io_spon(out,0);
  3  6268     <*-2*>
  3  6269     \f

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

  4  6320     message procedure io_spon side 3 - 810507/hko;
  4  6321     
  4  6321               if fil(nr).io_spool_post.data(3)<>0 then
  4  6322                 write(z_io," ",1,string område_navn(fil(nr).io_spool_post.data(3)));
  4  6323     
  4  6323               if k = 46 then
  4  6324               begin
  5  6325                 write(zio,<: besvaret:>,<< zd.dd>,t/100.0);
  5  6326               end;
  4  6327             end <*disable*>
  3  6328             else
  3  6329               fejlreaktion(2<*operationskode*>,k,<:io_spon_medd:>,1);
  3  6330     
  3  6330             fil(nr,1):= fil(nr,1) add 1;
  3  6331     
  3  6331     <*V*>   setposition(zio,0,0);
  3  6332     
  3  6332             signal_bin(bs_zio_adgang);
  3  6333     
  3  6333             signal(ss_io_spool_tomme);
  3  6334     
  3  6334           until false;
  3  6335     
  3  6335     io_spon_trap:
  3  6336           skriv_io_spon(zbillede,1);
  3  6337     
  3  6337         end io_spon;  
  2  6338     \f

  2  6338     message procedure io_medd side 1;
  2  6339     
  2  6339       procedure io_medd;
  2  6340       begin
  3  6341         integer array field opref;
  3  6342         integer afs, kl, i;
  3  6343         real dato, t;
  3  6344     
  3  6344     
  3  6344           procedure skriv_io_medd(zud,omfang);
  3  6345             value                     omfang;
  3  6346             zone                  zud;
  3  6347             integer                   omfang;
  3  6348             begin
  4  6349               disable write(zud,"nl",1,<:+++ io_medd              :>);
  4  6350               if omfang > 0 then
  4  6351               disable begin integer x;
  5  6352                 trap(slut);
  5  6353                 write(zud,"nl",1,
  5  6354                   <:  opref:    :>,opref,"nl",1,
  5  6355                   <:  afs:      :>,afs,"nl",1,
  5  6356                   <:  kl:       :>,kl,"nl",1,
  5  6357                   <:  i:        :>,i,"nl",1,
  5  6358                   <:  dato:     :>,<<zddddd>,dato,"nl",1,
  5  6359                   <:  t:        :>,t,"nl",1,
  5  6360                   <::>);
  5  6361                 skriv_coru(zud,coru_no(104));
  5  6362     slut:
  5  6363               end;<*disable*>
  4  6364             end skriv_io_medd;
  3  6365     
  3  6365           trap(io_medd_trap);
  3  6366           stack_claim((if cm_test then 200 else 146) +24 +48);
  3  6367     <*+2*>
  3  6368           if testbit0 and overvåget or testbit28 then
  3  6369             skriv_io_medd(out,0);
  3  6370     <*-2*>
  3  6371     \f

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

  2  6562     message operatør_erklæringer side 1 - 810602/hko;
  2  6563       integer
  2  6564         cs_op,cs_op_retur,cs_talevejsswitch,cs_tvswitch_adgang,cs_tv_switch_adm,
  2  6565         cs_tvswitch_input, cs_op_iomedd, bs_opk_alarm, cs_opk_alarm, cs_cqf,
  2  6566         cs_op_spool, cs_op_medd, ss_op_spool_tomme, ss_op_spool_fulde,
  2  6567         cs_opk_alarm_ur, cs_opk_alarm_ur_ret, sidste_tv_brugt;
  2  6568       integer array
  2  6569         cqf_tabel(1:max_cqf*cqf_lgd//2),
  2  6570         operatørmaske(1:op_maske_lgd//2),
  2  6571         op_talevej(0:max_antal_operatører),
  2  6572         tv_operatør(0:max_antal_taleveje),
  2  6573         opk_alarm(1:max_antal_operatører*(opk_alarm_tab_lgd//2)),
  2  6574         op_spool_buf(1:op_spool_postantal*(op_spool_postlgd//2)),
  2  6575         ant_i_opkø,
  2  6576         cs_operatør,
  2  6577         cs_op_fil(1:max_antal_operatører);
  2  6578       boolean
  2  6579         op_cqf_tab_ændret;
  2  6580       integer field
  2  6581         op_spool_kilde;
  2  6582       real field
  2  6583         op_spool_tid;
  2  6584       long array field
  2  6585         op_spool_text;
  2  6586       zone z_tv_in, z_tv_out(128,1,tvswitch_fejl);
  2  6587       zone array z_op(max_antal_operatører,320,1,op_fejl);
  2  6588     \f

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

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

  2  6708     message procedure skriv_opk_alarm_tab side 1;
  2  6709     
  2  6709     procedure skriv_opk_alarm_tab(z);
  2  6710     zone                          z;
  2  6711     begin
  3  6712       integer nr;
  3  6713       integer array field tab;
  3  6714       real t;
  3  6715     
  3  6715       write(z,"nl",2,<:opkaldsalarmtabel::>,"nl",1,
  3  6716         <:operatør    kmdo tilst gl.tilst længde start:>,"nl",1);
  3  6717       for nr:=1 step 1 until max_antal_operatører do
  3  6718       begin
  4  6719         tab:= (nr-1)*opk_alarm_tab_lgd;
  4  6720         write(z,<< dd >,nr,true,6,string bpl_navn(nr),<::   :>,
  4  6721           case opk_alarm.tab.alarm_kmdo+1 of ("-","B","C","F"),1,"sp",5,
  4  6722           case opk_alarm.tab.alarm_tilst+1 of ("-","B","C","?"),1,"sp",8,
  4  6723           case opk_alarm.tab.alarm_gtilst+1 of ("-","B","C","?"),1,"sp",2,
  4  6724           <<-dddd>,opk_alarm.tab.alarm_lgd,"sp",1,
  4  6725           << zddddd>,systime(4,opk_alarm.tab.alarm_start,t),t,
  4  6726           "nl",1);
  4  6727       end;
  3  6728     end;
  2  6729     \f

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

  2  6827     message procedure ht_symbol side 1 - 851001/cl;
  2  6828     
  2  6828     procedure ht_symbol(z);
  2  6829       zone              z;
  2  6830     write(z,"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>,<:
  2  6831     
  2  6831     
  2  6831     
  2  6831     
  2  6831                         @@         @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  2  6831                        @@         @@                               @@
  2  6831                       @@         @@                               @@
  2  6831                      @@         @@                               @@
  2  6831                     @@         @@@@@@@@@@@@@         @@@@@@@@@@@@@
  2  6831                    @@                               @@
  2  6831                   @@                               @@
  2  6831                  @@                               @@
  2  6831                 @@         @@@@@@@@@@@@@         @@
  2  6831                @@         @@         @@         @@
  2  6831               @@         @@         @@         @@
  2  6831              @@         @@         @@         @@
  2  6831             @@@@@@@@@@@@@         @@@@@@@@@@@@@
  2  6831     :>,"esc" add 128,1,<:Æ24;1H:>);
  2  6832     \f

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

  2  6889     message procedure skriv_terminal_tab side 1 - 820301/hko;
  2  6890     
  2  6890       procedure skriv_terminal_tab(z);
  2  6891         zone                       z;
  2  6892         begin
  3  6893           integer array field ref;
  3  6894           integer t1,i,j,id,k;
  3  6895     
  3  6895           write(z,"ff",1,<:
  3  6896           ******* terminalbeskrivelser ********
  3  6897     
  3  6897                         # a k l p m m n o
  3  6898                         1 l a y a o o ø p
  3  6899     nr tilst   -  vnt R 0 l t t s n b d t type ident    id i kø:>);
  3  6900     <*
  3  6901     01   15 .... .... X X X X X X X X X X MEDD 9999.abc 888B/77
  3  6902     *>
  3  6903           for i:=1 step 1 until max_antal_operatører do
  3  6904           begin
  4  6905             ref:=i*terminal_beskr_længde;
  4  6906             t1:=terminal_tab.ref(1);
  4  6907             id:=terminal_tab.ref(2);
  4  6908             k:=terminal_tab.ref(3);
  4  6909             write(z,"nl",1,"sp",4,<<dd>,i,<< dddd>,t1 shift(-21),
  4  6910               t1 shift(-16) extract 5,t1 shift(-12) extract 4,
  4  6911               "sp",1);
  4  6912             for j:=11 step -1 until 2 do
  4  6913               write(z,if læs_bit_i(t1,j) then "X" else "sp",1,"sp",1);
  4  6914             write(z,case t1 extract 2 +1 of (<:-   :>,<:OPK :>,<:MEDD:>,<:GNM :>),
  4  6915               "sp",1);
  4  6916             skriv_id(z,id,9);
  4  6917             skriv_id(z,k,9);
  4  6918           end;
  3  6919           write(z,"nl",2,<:samtaleflag::>,"nl",1);
  3  6920           outintbits_ia(z,samtaleflag,1,op_maske_lgd//2);
  3  6921           write(z,"nl",1);
  3  6922         end skriv_terminal_tab;
  2  6923     \f

  2  6923     message procedure h_operatør side 1 - 810520/hko;
  2  6924     
  2  6924       <* hovedmodulkorutine for operatørterminaler *>
  2  6925       procedure h_operatør;
  2  6926       begin
  3  6927         integer array field op_ref;
  3  6928         integer k,nr,ant,ref,dest_sem;
  3  6929         procedure skriv_hoperatør(zud,omfang);
  3  6930           value                     omfang;
  3  6931           zone                  zud;
  3  6932           integer                   omfang;
  3  6933           begin
  4  6934     
  4  6934             write(zud,"nl",1,<:+++ hovedmodul operatør  :>);
  4  6935             if omfang>0 then
  4  6936             disable begin integer x;
  5  6937               trap(slut);
  5  6938               write(zud,"nl",1,
  5  6939                 <:  op_ref:    :>,op_ref,"nl",1,
  5  6940                 <:  nr:        :>,nr,"nl",1,
  5  6941                 <:  ant:       :>,ant,"nl",1,
  5  6942                 <:  ref:       :>,ref,"nl",1,
  5  6943                 <:  k:         :>,k,"nl",1,
  5  6944                 <:  dest_sem:  :>,dest_sem,"nl",1,
  5  6945                 <::>);
  5  6946               skriv_coru(zud,coru_no(200));
  5  6947     slut:
  5  6948             end;
  4  6949          end skriv_hoperatør;
  3  6950     
  3  6950       trap(hop_trap);
  3  6951       stack_claim(if cm_test then 198 else 146);
  3  6952     
  3  6952     <*+2*>
  3  6953       if testbit8 and overvåget or testbit28 then
  3  6954         skriv_hoperatør(out,0);
  3  6955     <*-2*>
  3  6956     \f

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

  4  7042     message procedure h_operatør side 3 - 810601/hko;
  4  7043     
  4  7043           if k=8<*ekskluder*> then <*afbryd kommando v. timeout*>
  4  7044           begin
  5  7045             iaf:=d.op_ref.data(1)*terminal_beskr_længde;
  5  7046             terminal_tab.iaf.terminal_tilstand:= 7 shift 21
  5  7047               +terminal_tab.iaf.terminal_tilstand extract 21;
  5  7048           end;
  4  7049           signal_ch(dest_sem,op_ref,d.op_ref.optype);
  4  7050         end;
  3  7051       until false;
  3  7052     
  3  7052     hop_trap:
  3  7053       disable skriv_hoperatør(zbillede,1);
  3  7054       end h_operatør;
  2  7055     \f

  2  7055     message procedure operatør side 1 - 820304/hko;
  2  7056     
  2  7056       procedure operatør(nr);
  2  7057         value          nr;
  2  7058         integer        nr;
  2  7059       begin
  3  7060         integer array field op_ref,ref,vt_op,iaf,tab;
  3  7061         integer i,kode,aktion,status,tilstand,bv,bs,bs_tilst,
  3  7062                 kanal,opgave,pos,indeks,sep,sluttegn,rkom, par1, par2,
  3  7063                 vogn,ll,garage,skærmmåde,res,s_kanal,v_kanal;
  3  7064         real kommstart,kommslut;
  3  7065     \f

  3  7065     message procedure operatør side 1a - 820301/hko;
  3  7066     
  3  7066         procedure skriv_operatør(zud,omfang);
  3  7067           value                      omfang;
  3  7068           zone                   zud;
  3  7069           integer                    omfang;
  3  7070           begin integer i;
  4  7071     
  4  7071             i:= write(zud,"nl",1,<:+++ operatør nr::>,nr);
  4  7072             write(zud,"sp",26-i);
  4  7073             if omfang > 0 then
  4  7074             disable begin
  5  7075               integer x;
  5  7076               trap(slut);
  5  7077               write(zud,"nl",1,
  5  7078                 <:  op-ref:    :>,op_ref,"nl",1,
  5  7079                 <:  kode:      :>,kode,"nl",1,
  5  7080                 <:  aktion:    :>,aktion,"nl",1,
  5  7081                 <:  ref:       :>,ref,"nl",1,
  5  7082                 <:  vt_op:     :>,vt_op,"nl",1,
  5  7083                 <:  iaf:       :>,iaf,"nl",1,
  5  7084                 <:  status:    :>,status,"nl",1,
  5  7085                 <:  tilstand:  :>,tilstand,"nl",1,
  5  7086                 <:  bv:        :>,bv,"nl",1,
  5  7087                 <:  bs:        :>,bs,"nl",1,
  5  7088                 <:  bs-tilst:  :>,bs_tilst,"nl",1,
  5  7089                 <:  kanal:     :>,kanal,"nl",1,
  5  7090                 <:  opgave:    :>,opgave,"nl",1,
  5  7091                 <:  pos:       :>,pos,"nl",1,
  5  7092                 <:  indeks:    :>,indeks,"nl",1,
  5  7093                 <:  sep:       :>,sep,"nl",1,
  5  7094                 <:  sluttegn:  :>,sluttegn,"nl",1,
  5  7095                 <:  vogn:      :>,vogn,"nl",1,
  5  7096                 <:  ll:        :>,ll,"nl",1,
  5  7097                 <:  garage:    :>,garage,"nl",1,
  5  7098                 <:  skærmmåde: :>,skærmmåde,"nl",1,
  5  7099                 <:  res:       :>,res,"nl",1,
  5  7100                 <:  tab:       :>,tab,"nl",1,
  5  7101                 <:  rkom:      :>,rkom,"nl",1,
  5  7102                 <:  par1:      :>,par1,"nl",1,
  5  7103                 <:  par2:      :>,par2,"nl",1,
  5  7104                 <::>);
  5  7105               skriv_coru(zud,coru_no(200+nr));
  5  7106     slut:
  5  7107             end;
  4  7108           end skriv_operatør;
  3  7109     \f

  3  7109     message procedure skærmstatus side 1 - 810518/hko;
  3  7110     
  3  7110       integer
  3  7111       procedure skærmstatus(tilstand,b_v,b_s,b_s_tilst);
  3  7112         integer             tilstand,b_v,b_s,b_s_tilst;
  3  7113         begin
  4  7114           integer i,j;
  4  7115     
  4  7115           i:= terminal_tab.ref(1);
  4  7116           b_s:= terminal_tab.ref(2);
  4  7117           b_s_tilst:= i extract 12;
  4  7118           j:= b_s_tilst extract 3;
  4  7119           b_v:= i shift (-12) extract 4;
  4  7120           tilstand:= i shift (-21);
  4  7121     
  4  7121           skærmstatus:= if b_v = 0 and b_s = 0 then 0 else
  4  7122                         if b_v = 0 and j = 1<*opkald*> then 1 else
  4  7123                         if b_v = 0 and j = 2<*specialopkald*>  then 2 else
  4  7124                         if (bv<>0) and (bs<>0) and (j=3) then 4 else 3;
  4  7125         end skærmstatus;
  3  7126     \f

  3  7126     message procedure skriv_skærm side 1 - 810522/hko;
  3  7127     
  3  7127       procedure skriv_skærm(nr);
  3  7128         value               nr;
  3  7129         integer             nr;
  3  7130         begin
  4  7131           integer i;
  4  7132     
  4  7132           disable definer_taster(nr);
  4  7133     
  4  7133           skriv_skærm_maske(nr);
  4  7134           skriv_skærm_opkaldskø(nr);
  4  7135           skriv_skærm_b_v_s(nr);
  4  7136           for i:= 1 step 1 until max_antal_kanaler do
  4  7137             skriv_skærm_kanal(nr,i);
  4  7138           cursor(z_op(nr),1,1);
  4  7139     <*V*> setposition(z_op(nr),0,0);
  4  7140         end skriv_skærm;
  3  7141     \f

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

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

  3  7262     message procedure skriv_skærm_b_v_s side 1 - 810601/hko;
  3  7263     
  3  7263       procedure skriv_skærm_b_v_s(nr);
  3  7264         value                     nr;
  3  7265         integer                   nr;
  3  7266         begin
  4  7267           integer i,j,k,kv,ks,t;
  4  7268           integer array field tref,kref;
  4  7269     
  4  7269           tref:= nr*terminal_beskr_længde;
  4  7270           i:= terminal_tab.tref.terminal_tilstand;
  4  7271           kv:= i shift (-12) extract 4;
  4  7272           ks:= terminaltab.tref(2) extract 20;
  4  7273     <*V*> setposition(z_op(nr),0,0);
  4  7274           cursor(z_op(nr),18,28);
  4  7275           write(z_op(nr),"esc" add 128,1,<:ÆK:>);
  4  7276           cursor(z_op(nr),20,28);
  4  7277           write(z_op(nr),"esc" add 128,1,<:ÆK:>);
  4  7278           cursor(z_op(nr),21,28);
  4  7279           write(z_op(nr),"esc" add 128,1,<:ÆK:>);
  4  7280           cursor(z_op(nr),20,28);
  4  7281           if op_talevej(nr)<>0 then
  4  7282           begin
  5  7283             cursor(z_op(nr),18,28);
  5  7284             write(z_op(nr),<:talevej: :>,<<d>,op_talevej(nr));
  5  7285           end;
  4  7286           if kv <> 0 then
  4  7287           begin
  5  7288             kref:= (kv-1)*kanal_beskr_længde;
  5  7289             j:= if kv<>ks then kanaltab.kref.kanal_id1
  5  7290                 else kanaltab.kref.kanal_id2;
  5  7291             k:= if kv<>ks then kanaltab.kref.kanal_alt_id1
  5  7292                 else kanaltab.kref.kanal_alt_id2;
  5  7293             write(z_op(nr),true,6,string kanal_navn(kv));
  5  7294             skriv_skærm_id(nr,j,kanaltab.kref.kanaltilstand shift(-3) extract 1=1);
  5  7295             skriv_skærm_id(nr,k,false);
  5  7296             write(z_op(nr),if i extract 2 = 3 then <:GNM:> else <:VNT:>);
  5  7297           end;
  4  7298     
  4  7298           cursor(z_op(nr),21,28);
  4  7299           j:= terminal_tab.tref(2);
  4  7300           if i shift (-21) <> 0 <*ikke ledig*> then
  4  7301           begin
  5  7302     \f

  5  7302     message procedure skriv_skærm_b_v_s side 2 - 841210/cl;
  5  7303     
  5  7303             if i shift (-21) = 1 <*samtale*> then
  5  7304             begin
  6  7305               if j shift (-20) = 12 then
  6  7306               begin
  7  7307                 write(z_op(nr),true,6,string kanal_navn(ks));
  7  7308               end
  6  7309               else
  6  7310               begin
  7  7311                 write(z_op(nr),true,6,<:K*:>);
  7  7312                 k:= 0;
  7  7313                 while ks shift (-k) extract 1 = 0 and k<max_antal_kanaler do
  7  7314                   k:= k+1;
  7  7315                 ks:= k;
  7  7316               end;
  6  7317               kref:= (ks-1)*kanal_beskr_længde;
  6  7318               t:= kanaltab.kref.kanaltilstand;
  6  7319               skriv_skærm_id(nr,kanaltab.kref.kanal_id1,
  6  7320                              t shift (-3) extract 1 = 1);
  6  7321               skriv_skærm_id(nr,kanaltab.kref.kanal_alt_id1,false);
  6  7322               write(z_op(nr),if i shift (-11) extract 1 = 1 then <:-P-:> else
  6  7323                 if t shift (-5) extract 1 = 1 then <:MON :> else
  6  7324                 if t shift (-4) extract 1 = 1 then <:BSV :> else
  6  7325                 if t shift (-6) extract 1 = 1 then <:PAS :> else
  6  7326                 if t shift (-7) extract 1 = 1 then <:LYT :> else <:TAL :>);
  6  7327               if t shift (-9) extract 1 = 1 then
  6  7328                 write(z_op(nr),<:ALLE :>);
  6  7329               if t shift (-8) extract 1 = 1 then
  6  7330                 write(z_op(nr),<:KATASTROFE :>);
  6  7331               k:= kanaltab.kref.kanal_spec;
  6  7332               if t extract 2 <> 3 and t shift (-4) extract 1 = 1 then
  6  7333                 write(z_op(nr),<<zd.dd>,(k extract 12)/100);
  6  7334             end
  5  7335             else <* if i shift (-21) = 2 <+optaget+> then *>
  5  7336             begin
  6  7337               write(z_op(nr),<:K-:>,"sp",3);
  6  7338               if j <> 0 then
  6  7339                 skriv_skærm_id(nr,j,false)
  6  7340               else
  6  7341               begin
  7  7342                 j:=terminal_tab.tref(3);
  7  7343                 skriv_skærm_id(nr,j,
  7  7344                   false add (if i shift(-4) extract 1 = 1 then 2 <* mobil opk. *>
  7  7345                                                          else 0));
  7  7346               end;
  6  7347               write(z_op(nr),<:OPT:>);
  6  7348             end;
  5  7349           end;
  4  7350     <*V*> setposition(z_op(nr),0,0);
  4  7351         end skriv_skærm_b_v_s;
  3  7352     \f

  3  7352     message procedure skriv_skærm_maske side 1 - 810511/hko;
  3  7353     
  3  7353       procedure skriv_skærm_maske(nr);
  3  7354         value                     nr;
  3  7355         integer                   nr;
  3  7356         begin
  4  7357           integer i;
  4  7358     <*V*> setposition(z_op(nr),0,0);
  4  7359           write(z_op(nr),"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>,
  4  7360            "sp",26,"*",5,<: operatør :>,<<d>,nr,"sp",1,string bpl_navn(nr),
  4  7361            "sp",1,"*",5,"nl",1,"-",80);
  4  7362     
  4  7362           for i:= 3 step 1 until 21 do
  4  7363           begin
  5  7364             cursor(z_op(nr),i,26);
  5  7365             outchar(z_op(nr),'!');
  5  7366           end;
  4  7367           cursor(z_op(nr),22,1);
  4  7368           write(z_op(nr),"-",80);
  4  7369           cursor(z_op(nr),1,1);
  4  7370     <*V*> setposition(z_op(nr),0,0);
  4  7371         end skriv_skærm_maske;
  3  7372     \f

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

  4  7461     message procedure skriv_skærm_opkaldskø side 2 - 820301/hko;
  4  7462     
  4  7462           signal_bin(bs_opkaldskø_adgang);
  4  7463           if kmdo > opk_alarm.tab.alarm_tilst and 
  4  7464              kmdo > opk_alarm.tab.alarm_kmdo  then
  4  7465           begin
  5  7466             opk_alarm.tab.alarm_kmdo:= kmdo;
  5  7467             signal_bin(bs_opk_alarm);
  5  7468           end;
  4  7469           if ant > 5 then
  4  7470           begin
  5  7471             cursor(z_op(nr),13,9);
  5  7472             write(z_op(nr),<<+ddd>,ant-5);
  5  7473           end
  4  7474           else
  4  7475           begin
  5  7476             for i:= ant +1 step 1 until 6 do
  5  7477             begin
  6  7478               cursor(z_op(nr),i*2+1,1);
  6  7479               write(z_op(nr),"sp",25);
  6  7480             end;
  5  7481           end;
  4  7482           ant_i_opkø(nr):= ant;
  4  7483           cursor(z_op(nr),1,1);
  4  7484     <*V*> setposition(z_op(nr),0,0);
  4  7485         end skriv_skærm_opkaldskø;
  3  7486     \f

  3  7486     message procedure operatør side 2 - 810522/hko;
  3  7487     
  3  7487         trap(op_trap);
  3  7488         stack_claim((if cm_test then 200 else 146)+24+48+80+175);
  3  7489     
  3  7489         ref:= nr*terminal_beskr_længde;
  3  7490         tab:= (nr-1)*opk_alarm_tab_lgd;
  3  7491         skærmmåde:= 0; <*normal*>
  3  7492     
  3  7492         if operatør_auto_include(nr) then
  3  7493         begin
  4  7494           waitch(cs_att_pulje,opref,true,-1);
  4  7495           i:= operatør_auto_include(nr) extract 2;
  4  7496           if i<>3 then i:= 0;
  4  7497           start_operation(opref,101,cs_att_pulje,i shift 12 +1);
  4  7498           d.opref.data(1):= nr;
  4  7499           signalch(cs_rad,opref,gen_optype or io_optype);
  4  7500         end;
  3  7501     
  3  7501     <*+2*>
  3  7502         if testbit8 and overvåget or testbit28 then
  3  7503           skriv_operatør(out,0);
  3  7504     <*-2*>
  3  7505     \f

  3  7505     message procedure operatør side 3 - 810602/hko;
  3  7506     
  3  7506         repeat
  3  7507     
  3  7507     <*V*> wait_ch(cs_operatør(nr),
  3  7508                   op_ref,
  3  7509                   true,
  3  7510                   -1<*timeout*>);
  3  7511     <*+2*>
  3  7512           if testbit9 and overvåget then
  3  7513           disable begin
  4  7514             write(out,"nl",1,<:operation fra cs:>,<<d>,cs_operatør(nr),
  4  7515                              <: til operatør :>,nr);
  4  7516             skriv_op(out,op_ref);
  4  7517           end;
  3  7518     <*-2*>
  3  7519           monitor(8)reserve process:(z_op(nr),0,ia);
  3  7520           kode:= d.op_ref.op_kode extract 12;
  3  7521           i:= terminal_tab.ref.terminal_tilstand;
  3  7522           status:= i shift(-21);
  3  7523           opgave:=
  3  7524             if kode=0 then 1 <* indlæs kommando *> else
  3  7525             if kode=1 then 2 <* inkluder        *> else
  3  7526             if kode=2 then 3 <* ekskluder       *> else
  3  7527             if kode=40 then 4 <* opdater skærm  *> else
  3  7528             if kode=43 then 5 <* opkald etableret *> else
  3  7529             if kode=4  then 6 <* radiokanal ekskluderet *> else
  3  7530             if kode=38 then 7 <* operatør meddelelse *> else
  3  7531             0; <* afvises *>
  3  7532     
  3  7532           aktion:= case status +1 of(
  3  7533     <* status        *> <* opgave:         0   1   2   3   4   5   6   7 *>
  3  7534     <* 0 klar        *>(case opgave+1 of(  0,  1, -4,  3,  4, -4,  6,  7)),
  3  7535     <* 1 samtale     *>(case opgave+1 of(  0,  1, -4, -5,  4, -4,  6,  7)),
  3  7536     <* 2 optaget     *>(case opgave+1 of(  0,  1, -4, -5,  4,  5,  6,  7)),
  3  7537     <* 3 stoppet     *>(case opgave+1 of(  0,  2,  2,  3, -4, -4, -4,  7)),
  3  7538     <* 4 klar (fejl) *>(case opgave+1 of(  0, -4,  2,  3, -4, -4,  6, -4)),
  3  7539     <* 5 samt.(fejl) *>(case opgave+1 of(  0, -4,  2,  3, -4, -4,  6, -4)),
  3  7540     <* 6 opt. (fejl) *>(case opgave+1 of(  0, -4,  2,  3, -4,  5, -4, -4)),
  3  7541     <* 7 ej knyttet  *>(case opgave+1 of(  0, -4,  2, -4, -4, -4, -4, -4)),
  3  7542                         -1);
  3  7543     \f

  3  7543     message procedure operatør side 4 - 810424/hko;
  3  7544     
  3  7544           case aktion+6 of
  3  7545           begin
  4  7546             begin
  5  7547               <*-5: terminal optaget *>
  5  7548     
  5  7548               d.op_ref.resultat:= 16;
  5  7549               afslut_operation(op_ref,-1);
  5  7550             end;
  4  7551     
  4  7551             begin
  5  7552               <*-4: operation uden virkning *>
  5  7553     
  5  7553               afslut_operation(op_ref,-1);
  5  7554             end;
  4  7555     
  4  7555             begin
  5  7556               <*-3: ulovlig operationskode *>
  5  7557     
  5  7557               fejl_reaktion(2<*operationskode*>,kode,<:ulovlig:>,1);
  5  7558               afslut_operation(op_ref,-1);
  5  7559             end;
  4  7560     
  4  7560             begin
  5  7561               <*-2: ulovligt operatørterminal_nr *>
  5  7562     
  5  7562               fejl_reaktion(3<*programfejl*>,nr,<: ikke eksisterende operatør:>,1);
  5  7563               afslut_operation(op_ref,-1);
  5  7564             end;
  4  7565     
  4  7565             begin
  5  7566               <*-1: ulovlig operatørtilstand *>
  5  7567     
  5  7567               fejl_reaktion(3<*programfejl*>,status,<: ulovlig operatør-status:>,1);
  5  7568               afslut_operation(op_ref,-1);
  5  7569             end;
  4  7570     
  4  7570             begin
  5  7571               <* 0: ikke implementeret *>
  5  7572     
  5  7572               fejl_reaktion(2<*operationskode*>,kode,<: ikke implementeret:>,1);
  5  7573               afslut_operation(op_ref,-1);
  5  7574             end;
  4  7575     
  4  7575             begin
  5  7576     \f

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

  9  7625     message procedure operatør side 6 - 851001/cl;
  9  7626     
  9  7626                       <* 1 indsæt/udtag/flyt bus i vogntabel *>
  9  7627     
  9  7627                       vogn:=ia(1);
  9  7628                       ll:=ia(2);
  9  7629                       kanal:= if kode=11 or kode=19 then ia(3) else
  9  7630                               if kode=12 then ia(2) else 0;
  9  7631     <*V*>             wait_ch(cs_vt_adgang,
  9  7632                               vt_op,
  9  7633                               gen_optype,
  9  7634                               -1<*timeout sek*>);
  9  7635                       start_operation(vtop,200+nr,cs_operatør(nr),
  9  7636                                       kode);
  9  7637                       d.vt_op.data(1):=vogn;
  9  7638                       if kode=11 or kode=19 or kode=20 or kode=24 then
  9  7639                         d.vt_op.data(2):=ll;
  9  7640                       if kode=19 then d.vt_op.data(3):= kanal else
  9  7641                       if kode=11 or kode=12 then d.vt_op.data(4):= kanal;
  9  7642                       indeks:= vt_op;
  9  7643                       signal_ch(cs_vt,
  9  7644                                 vt_op,
  9  7645                                 gen_optype or op_optype);
  9  7646     
  9  7646     <*V*>             wait_ch(cs_operatør(nr),
  9  7647                               vt_op,
  9  7648                               op_optype,
  9  7649                               -1<*timeout sek*>);
  9  7650     <*+2*>            if testbit10 and overvåget then
  9  7651                       disable begin
 10  7652                         write(out,"nl",1,<:operatør :>,<<d>,nr,
 10  7653                               <:: operation retur fra vt:>);
 10  7654                         skriv_op(out,vt_op);
 10  7655                       end;
  9  7656     <*-2*>
  9  7657     <*+4*>            if vt_op<>indeks then
  9  7658                         fejl_reaktion(11<*fremmede op*>,op_ref,
  9  7659                                       <:operatør-kommando:>,0);
  9  7660     <*-4*>
  9  7661     <*V*>             setposition(z_op(nr),0,0);
  9  7662                       cursor(z_op(nr),24,1);
  9  7663     <*V*>             skriv_kvittering(z_op(nr),if d.vt_op.resultat = 11 or
  9  7664                         d.vt_op.resultat = 12 then d.vt_op.data(3)
  9  7665                         else vt_op,-1,d.vt_op.resultat);
  9  7666                       d.vt_op.optype:= gen_optype or vt_optype;
  9  7667                       disable afslut_operation(vt_op,cs_vt_adgang);
  9  7668                     end;
  8  7669                     begin
  9  7670     \f

  9  7670     message procedure operatør side 7 - 810921/hko,cl;
  9  7671     
  9  7671                     <* 2 vogntabel,linienr/-,busnr *>
  9  7672     
  9  7672                     d.op_ref.retur:= cs_operatør(nr);
  9  7673                     tofrom(d.op_ref.data,ia,10);
  9  7674                     indeks:= op_ref;
  9  7675                     signal_ch(cs_vt,op_ref,gen_optype or op_optype);
  9  7676                     wait_ch(cs_operatør(nr),
  9  7677                             op_ref,
  9  7678                             op_optype,
  9  7679                             -1<*timeout*>);
  9  7680     <*+2*>          if testbit10 and overvåget then
  9  7681                     disable begin
 10  7682                       write(out,"nl",1,<:operatør operation retur fra vt:>);
 10  7683                       skriv_op(out,op_ref);
 10  7684                     end;
  9  7685     <*-2*>
  9  7686     <*+4*>
  9  7687                     if indeks <> op_ref then
  9  7688                       fejlreaktion(11<*fremmed post*>,op_ref,<:operatør komm:>,0);
  9  7689     <*-4*>
  9  7690                     i:= d.op_ref.resultat;
  9  7691                     if i = 0 or i > 3 then
  9  7692                     begin
 10  7693     <*V*>             setposition(z_op(nr),0,0);
 10  7694                       cursor(z_op(nr),24,1);
 10  7695                       skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat);
 10  7696                     end
  9  7697                     else
  9  7698                     begin
 10  7699                       integer antal,fil_ref;
 10  7700     
 10  7700                       skærm_måde:= 1;
 10  7701                       antal:= d.op_ref.data(6);
 10  7702                       fil_ref:= d.op_ref.data(7);
 10  7703     <*V*>             setposition(z_op(nr),0,0);
 10  7704                       write(z_op(nr),"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>,
 10  7705                         "sp",14,"*",10,"sp",6,
 10  7706                             <:vogntabeludskrift:>,"sp",6,"*",10,"nl",2);
 10  7707     <*V*>             setposition(z_op(nr),0,0);
 10  7708     \f

 10  7708     message procedure operatør side 8 - 841213/cl;
 10  7709     
 10  7709                       pos:= 1;
 10  7710                       while pos <= antal do
 10  7711                       begin
 11  7712                         integer bogst,løb;
 11  7713     
 11  7713                         disable i:= læs_fil(fil_ref,pos,j);
 11  7714                         if i <> 0 then
 11  7715                           fejlreaktion(5<*læs_fil*>,i,<:operatør: vo,l/vo,b:>,0)
 11  7716                         else
 11  7717                         begin
 12  7718                           vogn:= fil(j,1) shift (-24) extract 24;
 12  7719                           løb:= fil(j,1) extract 24;
 12  7720                           if d.op_ref.opkode=9 then
 12  7721                             begin i:=vogn; vogn:=løb; løb:=i; end;
 12  7722                           ll:= løb shift (-12) extract 10;
 12  7723                           bogst:= løb shift (-7) extract 5;
 12  7724                           if bogst > 0 then bogst:= bogst +'A'-1;
 12  7725                           løb:= løb extract 7;
 12  7726                           vogn:= vogn extract 14;
 12  7727                           i:= d.op_ref.opkode-8;
 12  7728                           for i:= i,i+1 do
 12  7729                           begin
 13  7730                             j:= (i+1) extract 1;
 13  7731                             case j +1 of
 13  7732                             begin
 14  7733                               write(z_op(nr),"sp",(bogst=0) extract 1,<<ddd>,ll,
 14  7734                                 false add bogst,1,"/",1,<<d__>,løb);
 14  7735                               write(z_op(nr),<<dddd>,vogn,"sp",1);
 14  7736                             end;
 13  7737                           end;
 12  7738                           if pos mod 5 = 0 then
 12  7739                           begin
 13  7740                             outchar(z_op(nr),'nl');
 13  7741     <*V*>                   setposition(z_op(nr),0,0);
 13  7742                           end
 12  7743                           else write(z_op(nr),"sp",3);
 12  7744                         end;
 11  7745                         pos:=pos+1;
 11  7746                       end;
 10  7747                       write(z_op(nr),"*",1,"nl",1);
 10  7748     \f

 10  7748     message procedure operatør side 8a- 810507/hko;
 10  7749     
 10  7749                       d.opref.opkode:=104; <*slet-fil*>
 10  7750                       d.op_ref.data(4):=filref;
 10  7751                       indeks:=op_ref;
 10  7752                       signal_ch(cs_slet_fil,op_ref,gen_optype or op_optype);
 10  7753     <*V*>             wait_ch(cs_operatør(nr),op_ref,op_optype,-1);
 10  7754     
 10  7754     <*+2*>            if testbit10 and overvåget then
 10  7755                       disable begin
 11  7756                         write(out,"nl",1,<:operatør, slet-fil retur:>);
 11  7757                         skriv_op(out,op_ref);
 11  7758                       end;
 10  7759     <*-2*>
 10  7760     
 10  7760     <*+4*>            if op_ref<>indeks then
 10  7761                         fejlreaktion(11<*fr.post*>,op_ref,<:operatør,slet-fil:>,0);
 10  7762     <*-4*>
 10  7763                       if d.op_ref.data(9)<>0 then
 10  7764                         fejl_reaktion(3<*prg.fejl*>,d.op_ref.data(9),
 10  7765                             <:operatør, slet_fil:>,1);
 10  7766                     end;
  9  7767                   end;
  8  7768     
  8  7768                   begin
  9  7769     \f

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

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

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

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

  9  8233     message procedure operatør side 13 - 810518/hko;
  9  8234     
  9  8234                       <* 4 stop kommando *>
  9  8235     
  9  8235                       status:= skærm_status(tilstand,b_v,b_s,b_s_tilst);
  9  8236                       if tilstand <> 0 then
  9  8237                       begin
 10  8238                         d.op_ref.resultat:= 16; <*skærm optaget*>
 10  8239                       end
  9  8240                       else
  9  8241                       begin
 10  8242                         d.op_ref.retur:= cs_operatør(nr);
 10  8243                         d.op_ref.resultat:= 0;
 10  8244                         d.op_ref.data(1):= nr;
 10  8245                         indeks:= op_ref;
 10  8246     <*+2*>              if testbit11 and overvåget then
 10  8247                         disable begin
 11  8248                           skriv_operatør(out,0);
 11  8249                           write(out,<: stop_operation til radio:>);
 11  8250                           skriv_op(out,op_ref); ud;
 11  8251                         end;
 10  8252     <*-2*>
 10  8253                         if opk_alarm.tab.alarm_tilst > 0 then
 10  8254                         begin
 11  8255                           opk_alarm.tab.alarm_kmdo:= 3;
 11  8256                           signal_bin(bs_opk_alarm);
 11  8257                         end;
 10  8258     
 10  8258                         signal_ch(cs_rad,op_ref,gen_optype or op_optype);
 10  8259     <*V*>               wait_ch(cs_operatør(nr),op_ref,op_optype,-1);
 10  8260     <*+2*>              if testbit12 and overvåget then
 10  8261                         disable begin
 11  8262                           skriv_operatør(out,0);
 11  8263                           write(out,<: operation retur fra radio:>);
 11  8264                           skriv_op(out,op_ref); ud;
 11  8265                         end;
 10  8266     <*-2*>
 10  8267     <*+4*>              if indeks <> op_ref then
 10  8268                           fejlreaktion(11<*fr.post*>,op_ref,
 10  8269                             <: operatør, retur fra radio:>,0);
 10  8270     <*-4*>
 10  8271     \f

 10  8271     message procedure operatør side 14 - 810527/hko;
 10  8272     
 10  8272                         if d.op_ref.resultat = 3 then
 10  8273                         begin
 11  8274                           integer k,n;
 11  8275                           integer array field msk,iaf1;
 11  8276     
 11  8276                           terminal_tab.ref.terminal_tilstand:= 3 shift 21
 11  8277                             +terminal_tab.ref.terminal_tilstand extract 21;
 11  8278                           tofrom(opkaldsflag,alle_operatører,op_maske_lgd);
 11  8279                           if sæt_bit_ia(operatørmaske,nr,0)=1 then
 11  8280                           for k:= nr, 65 step 1 until top_bpl_gruppe do
 11  8281                           begin
 12  8282                             msk:= k*op_maske_lgd;
 12  8283                             if læsbit_ia(bpl_def.msk,nr) then 
 12  8284     <**>                    begin
 13  8285                               n:= 0;
 13  8286                               for i:= 1 step 1 until max_antal_operatører do
 13  8287                               if læsbit_ia(bpl_def.msk,i) then
 13  8288                               begin
 14  8289                                 iaf1:= i*terminal_beskr_længde;
 14  8290                                 if terminal_tab.iaf1.terminal_tilstand 
 14  8291                                                              shift (-21) < 3 then
 14  8292                                   n:= n+1;
 14  8293                               end;  
 13  8294                               bpl_tilst(k,1):= n;
 13  8295                             end;
 12  8296     <**> <*  
 12  8297                               bpl_tilst(k,1):= bpl_tilst(k,1)-1;
 12  8298       *>                  end;
 11  8299                           signal_bin(bs_mobil_opkald);
 11  8300     <*V*>                 setposition(z_op(nr),0,0);
 11  8301                           ht_symbol(z_op(nr));
 11  8302                         end;
 10  8303                       end;
  9  8304     <*V*>             setposition(z_op(nr),0,0);
  9  8305                       cursor(z_op(nr),24,1);
  9  8306                       if d.op_ref.resultat<> 3 then
  9  8307                         skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat);
  9  8308                     end;
  8  8309                     begin
  9  8310                       boolean l22;
  9  8311     \f

  9  8311     message procedure operatør side 15 - 810521/cl;
  9  8312     
  9  8312                       <* 5 springdefinition *>
  9  8313                       l22:= false;
  9  8314                       if sep=',' then
  9  8315                       disable begin
 10  8316                         setposition(z_op(nr),0,0);
 10  8317                         cursor(z_op(nr),22,1);
 10  8318                         write(z_op(nr),"esc" add 128,1,<:ÆK:>,">",1);
 10  8319                         l22:= true; pos:= 1;
 10  8320                         while læstegn(d.op_ref.data,pos,i)<>0 do
 10  8321                           outchar(z_op(nr),i);
 10  8322                       end;
  9  8323     
  9  8323                       tofrom(d.op_ref.data,ia,indeks*2);
  9  8324     <*V*>             wait_ch(cs_op_fil(nr),vt_op,true,-1<*timeout*>);
  9  8325                       start_operation(vt_op,200+nr,cs_operatør(nr),
  9  8326                                       101<*opret fil*>);
  9  8327                       d.vt_op.data(1):=128;<*postantal*>
  9  8328                       d.vt_op.data(2):=2;  <*postlængde*>
  9  8329                       d.vt_op.data(3):=1;  <*segmentantal*>
  9  8330                       d.vt_op.data(4):=
  9  8331                               2 shift 10;  <*spool fil*>
  9  8332                       signal_ch(cs_opret_fil,vt_op,op_optype);
  9  8333                       pos:=vt_op;<*variabel lånes*>
  9  8334     <*V*>             wait_ch(cs_operatør(nr),vt_op,op_optype,-1<*timeout*>);
  9  8335     <*+4*>            if vt_op<>pos then
  9  8336                         fejlreaktion(11<*fremmed post*>,vt_op,<:springdef:>,0);
  9  8337                       if d.vt_op.data(9)<>0 then
  9  8338                         fejlreaktion(13<*opret-fil*>,d.vt_op.data(9),
  9  8339                           <:op kommando(springdefinition):>,0);
  9  8340     <*-4*>
  9  8341                       iaf:=0;
  9  8342                       for i:=1 step 1 until indeks-2 do
  9  8343                       begin
 10  8344                         disable k:=modif_fil(d.vt_op.data(4),i,j);
 10  8345                         if k<>0 then
 10  8346                           fejlreaktion(7<*modif-fil*>,k,
 10  8347                             <:op kommando(spring-def):>,0);
 10  8348                         fil(j).iaf(1):=d.op_ref.data(i+2);
 10  8349                       end;
  9  8350     \f

  9  8350     message procedure operatør side 15a - 820301/cl;
  9  8351     
  9  8351                       while sep = ',' do
  9  8352                       begin
 10  8353                         setposition(z_op(nr),0,0);
 10  8354                         cursor(z_op(nr),23,1);
 10  8355                         write(z_op(nr),"esc" add 128,1,<:ÆK:>,<:+>:>);
 10  8356                         setposition(z_op(nr),0,0);
 10  8357                         wait(bs_fortsæt_adgang);
 10  8358                         pos:= 1; j:= 0;
 10  8359                         while læs_store(z_op(nr),i) < 8 do
 10  8360                         begin
 11  8361                           skrivtegn(fortsæt,pos,i);
 11  8362                           if i = '?' or i = 'esc' then j:= 1; <* skip kommando *>
 11  8363                         end;
 10  8364                         skrivtegn(fortsæt,pos,'em');
 10  8365                         afsluttext(fortsæt,pos);
 10  8366                         sluttegn:= i;
 10  8367                         if j<>0 then
 10  8368                         begin
 11  8369                           setposition(z_op(nr),0,0);
 11  8370                           cursor(z_op(nr),24,1);
 11  8371                           skriv_kvittering(z_op(nr),opref,-1,53);<*annulleret*>
 11  8372                           cursor(z_op(nr),1,1);
 11  8373                           goto sp_ann;
 11  8374                         end;
 10  8375     \f

 10  8375     message procedure operatør side 16 - 810521/cl;
 10  8376     
 10  8376                         disable begin
 11  8377                         integer array værdi(1:4);
 11  8378                         integer a_pos,res;
 11  8379                           pos:= 0;
 11  8380                           repeat
 11  8381                             apos:= pos;
 11  8382                             læs_paramsæt(fortsæt,a_pos,0,værdi,sep,res);
 11  8383                             if res >= 0 then
 11  8384                             begin
 12  8385                               if res=0 and (sep=',' or indeks>2) then <*ok*>
 12  8386                               else if res=0 then res:= -25 <*parameter mangler*>
 12  8387                               else if res=10 and (værdi(1)<1 or værdi(1)>99) then
 12  8388                                   res:= -44 <*intervalstørrelse ulovlig*>
 12  8389                               else if res=10 and (værdi(2)<1 or værdi(2)>99) then
 12  8390                                   res:= -6  <*løbnr ulovligt*>
 12  8391                               else if res=10 then
 12  8392                               begin
 13  8393                                 k:=modiffil(d.vt_op.data(4),indeks-1,j);
 13  8394                                 if k<>0 then fejlreaktion(7<*modiffil*>,k,
 13  8395                                    <:op kommando(spring-def):>,0);
 13  8396                                 iaf:= 0;
 13  8397                                 fil(j).iaf(1):= værdi(1) shift 12 + værdi(2);
 13  8398                                 indeks:= indeks+1;
 13  8399                                 if sep = ',' then res:= 0;
 13  8400                               end
 12  8401                               else res:= -27; <*parametertype*>
 12  8402                             end;
 11  8403                             if res>0 then pos:= a_pos;
 11  8404                           until sep<>'sp' or res<=0;
 11  8405     
 11  8405                           if res<0 then
 11  8406                           begin
 12  8407                             d.op_ref.resultat:= -res;
 12  8408                             i:=1; j:= 1;
 12  8409                             hægt_tekst(d.op_ref.data,i,fortsæt,j);
 12  8410                             afsluttext(d.op_ref.data,i);
 12  8411                           end;
 11  8412                         end;
 10  8413     \f

 10  8413     message procedure operatør side 17 - 810521/cl;
 10  8414     
 10  8414                         if d.op_ref.resultat > 3 then
 10  8415                         begin
 11  8416                           setposition(z_op(nr),0,0);
 11  8417                           if l22 then
 11  8418                           begin
 12  8419                             cursor(z_op(nr),22,1); l22:= false;
 12  8420                             write(z_op(nr),"-",80);
 12  8421                           end;
 11  8422                           cursor(z_op(nr),24,1);
 11  8423                           skriv_kvittering(z_op(nr),op_ref,pos,d.opref.resultat);
 11  8424                           goto sp_ann;
 11  8425                         end;
 10  8426                         if sep=',' then
 10  8427                         begin
 11  8428                           setposition(z_op(nr),0,0);
 11  8429                           cursor(z_op(nr),22,1);
 11  8430                           write(z_op(nr),"esc" add 128,1,<:ÆK:>,<:+>:>);
 11  8431                           pos:= 1; l22:= true;
 11  8432                           while læstegn(fortsæt,pos,i)<>0 do
 11  8433                             outchar(z_op(nr),i);
 11  8434                         end;
 10  8435                         signalbin(bs_fortsæt_adgang);
 10  8436                       end while sep = ',';
  9  8437                       d.vt_op.data(1):= indeks-2;
  9  8438                       k:= sætfildim(d.vt_op.data);
  9  8439                       if k<>0 then fejlreaktion(9,k,<:op kommando(spring-def):>,0);
  9  8440                       d.op_ref.data(3):= d.vt_op.data(4); <*filref*>
  9  8441                       signalch(cs_op_fil(nr),vt_op,op_optype or gen_optype);
  9  8442                       d.op_ref.retur:=cs_operatør(nr);
  9  8443                       pos:=op_ref;
  9  8444                       signal_ch(cs_vt,op_ref,gen_optype or op_optype);
  9  8445     <*V*>             wait_ch(cs_operatør(nr),op_ref,op_optype,-1<*timeout*>);
  9  8446     <*+4*>            if pos<>op_ref then
  9  8447                         fejlreaktion(11<*fremmed post*>,op_ref,
  9  8448                           <:op kommando(springdef retur fra vt):>,0);
  9  8449     <*-4*>
  9  8450     \f

  9  8450     message procedure operatør side 18 - 810521/cl;
  9  8451     
  9  8451     <*V*>             setposition(z_op(nr),0,0);
  9  8452                       if l22 then
  9  8453                       begin
 10  8454                         cursor(z_op(nr),22,1);
 10  8455                         write(z_op(nr),"-",80);
 10  8456                       end;
  9  8457                       cursor(z_op(nr),24,1);
  9  8458                       skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat);
  9  8459     
  9  8459                       if false then
  9  8460                       begin
 10  8461               sp_ann:   signalch(cs_slet_fil,vt_op,op_optype);
 10  8462                         waitch(cs_operatør(nr),vt_op,op_optype,-1);
 10  8463                         signalch(cs_op_fil(nr),vt_op,op_optype or vt_optype);
 10  8464                         signalbin(bs_fortsæt_adgang);
 10  8465                       end;
  9  8466                         
  9  8466                     end;
  8  8467     
  8  8467                     begin
  9  8468     \f

  9  8468     message procedure operatør side 19 - 810522/cl;
  9  8469     
  9  8469                       <* 6 spring  (igangsæt)
  9  8470                            spring,annuler
  9  8471                            spring,reserve     *>
  9  8472     
  9  8472                       tofrom(d.op_ref.data,ia,6);
  9  8473                       d.op_ref.retur:=cs_operatør(nr);
  9  8474                       indeks:=op_ref;
  9  8475                       signal_ch(cs_vt,op_ref,gen_optype or op_optype);
  9  8476     <*V*>             wait_ch(cs_operatør(nr),
  9  8477                               op_ref,
  9  8478                               op_optype,
  9  8479                               -1<*timeout*>);
  9  8480     <*+2*>            if testbit10 and overvåget then
  9  8481                       disable begin
 10  8482                         skriv_operatør(out,0);
 10  8483                         write(out,"nl",1,<:op operation retur fra vt:>);
 10  8484                         skriv_op(out,op_ref);
 10  8485                       end;
  9  8486     <*-2*>
  9  8487     <*+4*>            if indeks<>op_ref then
  9  8488                         fejlreaktion(11<*fremmed post*>,op_ref,
  9  8489                                      <:op kommando(spring):>,0);
  9  8490     <*-4*>
  9  8491     
  9  8491     <*V*>             setposition(z_op(nr),0,0);
  9  8492                       cursor(z_op(nr),24,1);
  9  8493                       skriv_kvittering(z_op(nr),if (d.op_ref.resultat=11 or
  9  8494                           d.op_ref.resultat=12) and kode=34 <*SP,R*> then
  9  8495                           d.op_ref.data(4) else op_ref,-1,d.op_ref.resultat);
  9  8496                     end;
  8  8497     
  8  8497                     begin
  9  8498     \f

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

 11  8542     message procedure operatør side 21 - 810522/cl;
 11  8543     
 11  8543                           p_skrevet:= false;
 11  8544                           for pos:=1 step 1 until d.op_ref.data(3) do
 11  8545                           begin
 12  8546                             disable i:=læsfil(d.op_ref.data(4),pos,j);
 12  8547                             if i<>0 then
 12  8548                               fejlreaktion(5<*læsfil*>,i,
 12  8549                                 <:op kommando(spring,vis):>,0);
 12  8550                             iaf:=0;
 12  8551                             i:= fil(j).iaf(1);
 12  8552                             if i < 0 and -, p_skrevet then
 12  8553                             begin
 13  8554                               outchar(z_op(nr),'('); p_skrevet:= true;
 13  8555                             end;
 12  8556                             if i > 0 and p_skrevet then
 12  8557                             begin
 13  8558                               outchar(z_op(nr),')'); p_skrevet:= false;
 13  8559                             end;
 12  8560                             if pos mod 2 = 0 then
 12  8561                               write(z_op(nr),<< dd>,abs i,<:.:>)
 12  8562                             else
 12  8563                               write(z_op(nr),true,3,<<d>,abs i);
 12  8564                             if pos mod 21 = 0 then outchar(z_op(nr),'nl');
 12  8565                           end;
 11  8566                           write(z_op(nr),"*",1);
 11  8567     \f

 11  8567     message procedure operatør side 22 - 810522/cl;
 11  8568     
 11  8568                         end
 10  8569                         else if kode=33 then <* spring,oversigt *>
 10  8570                         begin
 11  8571                           write(z_op(nr),"esc" add 128,1,<:ÆH:>,
 11  8572                             "esc" add 128,1,<:ÆJ:>,"sp",10,"*",5,"sp",5,
 11  8573                             <:spring oversigt:>,"sp",5,"*",5,"nl",2);
 11  8574     
 11  8574                           for pos:=1 step 1 until d.op_ref.data(1) do
 11  8575                           begin
 12  8576                             disable i:=læsfil(d.op_ref.data(2),pos,j);
 12  8577                             if i<>0 then 
 12  8578                               fejlreaktion(5<*læsfil*>,i,
 12  8579                                 <:op kommando(spring-oversigt):>,0);
 12  8580                             iaf:=0;
 12  8581                             ll:=fil(j).iaf(1) shift (-5) extract 10;
 12  8582                             bogst:=fil(j).iaf(1) extract 5;
 12  8583                             if bogst<>0 then bogst:=bogst + 'A' - 1;
 12  8584                             write(z_op(nr),"sp",(bogst=0) extract 1 + 1,<<ddd>,ll,
 12  8585                               false add bogst,(bogst<>0) extract 1,<:.:>,true,4,
 12  8586                               string (extend fil(j).iaf(2) shift 24));
 12  8587                             if fil(j,2)<>0.0 then
 12  8588                               write(z_op(nr),<:startet :>,<<zddddd>,
 12  8589                                 round systime(4,fil(j,2),r),<:.:>,round r);
 12  8590                             outchar(z_op(nr),'nl');
 12  8591                           end;
 11  8592                           write(z_op(nr),"*",1);
 11  8593                         end;
 10  8594                         <* slet fil *>
 10  8595                         d.op_ref.opkode:= 104;
 10  8596                         if kode=33 then d.op_ref.data(4):= d.op_ref.data(2);
 10  8597                         signalch(cs_slet_fil,op_ref,gen_optype or op_optype);
 10  8598                         waitch(cs_operatør(nr),op_ref,op_optype or gen_optype,-1);
 10  8599                       end; <* resultat=3 *>
  9  8600     
  9  8600                     end;
  8  8601     
  8  8601                     begin
  9  8602     \f

  9  8602     message procedure operatør side 23 - 940522/cl;
  9  8603     
  9  8603     
  9  8603                       <* 8 SLUT *>
  9  8604                       trapmode:= 1 shift 13;
  9  8605                       trap(-2);
  9  8606                     end;
  8  8607     
  8  8607                     begin
  9  8608                       <* 9 stopniveauer,definer *>
  9  8609                       integer fno;
  9  8610     
  9  8610                       for i:= 1 step 1 until 3 do
  9  8611                         operatør_stop(nr,i):= ia(i+1);
  9  8612                       i:= modif_fil(tf_stoptabel,nr,fno);
  9  8613                       if i<>0 then fejlreaktion(7,i,<:stoptabel:>,0);
  9  8614                       iaf:=0;
  9  8615                       for i:= 0,1,2,3 do
  9  8616                         fil(fno).iaf(i+1):= operatør_stop(nr,i);
  9  8617                       setposition(fil(fno),0,0);
  9  8618                       setposition(z_op(nr),0,0);
  9  8619                       cursor(z_op(nr),24,1);
  9  8620                       skriv_kvittering(z_op(nr),0,-1,3);
  9  8621                     end;
  8  8622     
  8  8622                     begin
  9  8623     \f

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

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

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

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

  5  9001     message procedure operatør side x+3 - 830310/hko;
  5  9002     
  5  9002               <* 5: samtale etableret *>
  5  9003     
  5  9003               res:= d.op_ref.resultat;
  5  9004               b_v:= d.op_ref.data(3) extract 4;
  5  9005               b_s:= d.op_ref.data(4);
  5  9006               signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  5  9007               if res = 3 and terminal_tab.ref(1) shift(-21) = 2 then
  5  9008               begin
  6  9009                 sætbit_i(terminal_tab.ref(1),21,1);
  6  9010                 sætbit_i(terminal_tab.ref(1),22,0);
  6  9011                 sætbit_i(terminal_tab.ref(1),2,0);
  6  9012                 sæt_hex_ciffer(terminal_tab.ref,3,b_v);
  6  9013                 terminal_tab.ref(2):= b_s;
  6  9014                 sæt_bit_i(terminal_tab.ref(1),2<* opt. *>,0);
  6  9015                 iaf:= (b_s extract 4 - 1)*kanal_beskr_længde;
  6  9016                 kanaltab.iaf.kanal_tilstand:= kanaltab.iaf.kanal_tilstand
  6  9017                   shift (-10) shift 10 + terminal_tab.ref(1) extract 10;
  6  9018     
  6  9018                 if læsbit_ia(operatørmaske,nr) and skærmmåde = 0 then
  6  9019                 begin
  7  9020     <*V*>         setposition(z_op(nr),0,0);
  7  9021                   skriv_skærm_b_v_s(nr);
  7  9022     <*V*>         setposition(z_op(nr),0,0);
  7  9023                 end;
  6  9024               end
  5  9025               else
  5  9026               if terminal_tab.ref(1) shift(-21) = 2 then
  5  9027               begin
  6  9028                 sætbit_i(terminal_tab.ref(1),22,0);
  6  9029                 sætbit_i(terminal_tab.ref(1),2,0);
  6  9030                 sæt_hex_ciffer(terminal_tab.ref,3,b_v);
  6  9031                 terminal_tab.ref(2):= 0;
  6  9032                 if læsbit_ia(operatørmaske,nr) and skærmmåde = 0 then
  6  9033                 begin
  7  9034     <*V*>         setposition(z_op(nr),0,0);
  7  9035                   cursor(z_op(nr),21,17);
  7  9036                   write(z_op(nr),<:EJ FORB:>);
  7  9037     <*V*>         setposition(z_op(nr),0,0);
  7  9038                 end;
  6  9039               end
  5  9040               else fejlreaktion(3<*prg.fejl*>,terminal_tab.ref(1) shift(-21),
  5  9041                      <:terminal tilstand:>,1);
  5  9042             end;
  4  9043     
  4  9043             begin
  5  9044     \f

  5  9044     message procedure operatør side x+4 - 810602/hko;
  5  9045     
  5  9045               <* 6: radiokanal ekskluderet *>
  5  9046     
  5  9046               læs_hex_ciffer(terminal_tab.ref,3,b_v);
  5  9047               pos:= d.op_ref.data(1);
  5  9048               signalch(d.op_ref.retur,op_ref,d.op_ref.optype);
  5  9049               indeks:= terminal_tab.ref(2);
  5  9050               b_s:= if indeks shift (-22) = 3 and indeks extract 22 = pos
  5  9051                     then indeks extract 4 else 0;
  5  9052               if b_v = pos then
  5  9053                 sæt_hex_ciffer(terminal_tab.ref,3,0);
  5  9054               if b_s = pos then
  5  9055               begin
  6  9056                 terminal_tab.ref(2):= 0;
  6  9057                 sætbit_i(terminal_tab.ref(1),21,0);
  6  9058                 sætbit_i(terminal_tab.ref(1),22,0);
  6  9059                 sætbit_i(terminal_tab.ref(1),2,0);
  6  9060               end;
  5  9061               if skærmmåde=0 then
  5  9062               begin
  6  9063                 if b_v = pos or b_s = pos then
  6  9064     <*V*>         skriv_skærm_b_v_s(nr);
  6  9065     <*V*>       skriv_skærm_kanal(nr,pos);
  6  9066                 cursor(z_op(nr),1,1);
  6  9067                 setposition(z_op(nr),0,0);
  6  9068               end;
  5  9069             end;
  4  9070     
  4  9070             begin
  5  9071     \f

  5  9071     message procedure operatør side x+5 - 950118/cl;
  5  9072     
  5  9072               <* 7: operatørmeddelelse *>
  5  9073               integer afs, kl, i;
  5  9074               real dato, t;
  5  9075     
  5  9075               cursor(z_op(nr),24,1);
  5  9076               write(z_op(nr),"esc" add 128,1,<:ÆK:>);
  5  9077               cursor(z_op(nr),23,1);
  5  9078               write(z_op(nr),"esc" add 128,1,<:ÆK:>);
  5  9079     
  5  9079               afs:= d.opref.data.op_spool_kilde;
  5  9080               dato:= systime(4,d.opref.data.op_spool_tid,t);
  5  9081               kl:= round t;
  5  9082               write(z_op(nr),<:! fra op:>,<<d>,afs,"sp",1,
  5  9083                 if afs=0 then <:SYSOP:> else string bpl_navn(afs));
  5  9084               i:= replacechar(1,'.');
  5  9085               disable write(z_op(nr),"sp",1,<<zd_dd_dd>,kl,"nl",1);
  5  9086               replacechar(1,i);
  5  9087               write(z_op(nr),d.opref.data.op_spool_text);
  5  9088     
  5  9088               if terminal_tab.ref.terminal_tilstand shift (-21) <> 3 then
  5  9089               begin
  6  9090                 if opk_alarm.tab.alarm_lgd > 0 and
  6  9091                    opk_alarm.tab.alarm_tilst < 1 and
  6  9092                    opk_alarm.tab.alarm_kmdo < 1
  6  9093                 then
  6  9094                 begin
  7  9095                   opk_alarm.tab.alarm_kmdo := 1;
  7  9096                   signalbin(bs_opk_alarm);
  7  9097                 end
  6  9098                 else
  6  9099                 if opk_alarm.tab.alarm_lgd = 0 then
  6  9100                   write(z_op(nr),"bel",1,"del",8,"bel",1,"del",8,"bel",1);
  6  9101               end;
  5  9102     
  5  9102               setposition(z_op(nr),0,0);
  5  9103               
  5  9103               signalch(d.opref.retur,opref,d.opref.optype);
  5  9104             end;
  4  9105     
  4  9105             begin
  5  9106     
  5  9106     <*+4*>    fejl_reaktion(3<*programfejl *>,aktion,<:case aktion:>,2);
  5  9107     <*-4*>
  5  9108             end
  4  9109           end; <* case aktion+6 *>
  3  9110     
  3  9110          until false;
  3  9111       op_trap:
  3  9112         skriv_operatør(zbillede,1);
  3  9113       end operatør;
  2  9114      
  2  9114     \f

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

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

  2  9385     message procedure op_medd side 1;
  2  9386     
  2  9386     procedure op_medd;
  2  9387     begin
  3  9388       integer array field opref, ref;
  3  9389       integer næste_fulde, i;
  3  9390     
  3  9390       procedure skriv_op_medd(zud,omfang);
  3  9391         value                     omfang;
  3  9392         zone                  zud;
  3  9393         integer                   omfang;
  3  9394       begin
  4  9395         write(zud,"nl",1,<:+++ op-medd:>);
  4  9396         if omfang > 0 then
  4  9397         disable begin     
  5  9398           real t;
  5  9399     
  5  9399           trap(slut);
  5  9400           write(zud,"nl",1,
  5  9401             <:  opref:       :>,opref,"nl",1,
  5  9402             <:  næste-fulde: :>,næste_fulde,"nl",1,
  5  9403             <:  ref:         :>,ref,"nl",1,
  5  9404             <:  i:           :>,i,"nl",1,
  5  9405             <::>);
  5  9406           skriv_coru(zud,coru_no(294));
  5  9407     slut:
  5  9408         end;
  4  9409       end skriv_op_medd;
  3  9410         
  3  9410       trap(op_medd_trap);
  3  9411       næste_fulde:= 0;
  3  9412       stackclaim(400);
  3  9413       
  3  9413     <*+4*>if (testbit8 and overvåget) or testbit28 then
  3  9414             skriv_op_medd(out,0);
  3  9415     <*-4*>
  3  9416     
  3  9416       repeat
  3  9417     <*V*> wait(ss_op_spool_fulde);
  3  9418     <*V*> waitch(cs_op_medd,opref,true,-1);
  3  9419     
  3  9419         ref:= næste_fulde*op_spool_postlgd;
  3  9420         næste_fulde:= (næste_fulde+1) mod op_spool_postantal;
  3  9421     
  3  9421         startoperation(opref,curr_coruid,cs_op_medd,38);
  3  9422         d.opref.resultat:= 0;
  3  9423         tofrom(d.opref.data,op_spool_buf.ref,op_spool_postlgd);
  3  9424         signalch((if op_spool_buf.ref.op_spool_kilde = 0 then cs_op else cs_io),
  3  9425           opref,gen_optype);
  3  9426         signal(ss_op_spool_tomme);
  3  9427       until false;
  3  9428     
  3  9428     op_medd_trap:
  3  9429       disable skriv_op_medd(zbillede,1);
  3  9430     end op_medd;
  2  9431     \f

  2  9431     message procedure alarmur side 1;
  2  9432     
  2  9432     procedure alarmur;
  2  9433     begin
  3  9434       integer ventetid, nr;
  3  9435       integer array field opref, tab;
  3  9436       real nu;
  3  9437       
  3  9437       procedure skriv_alarmur(zud,omfang);
  3  9438         value                     omfang;
  3  9439         zone                  zud;
  3  9440         integer                   omfang;
  3  9441       begin
  4  9442         write(zud,"nl",1,<:+++ alarmur:>);
  4  9443         if omfang > 0 then
  4  9444         disable begin     
  5  9445           real t;
  5  9446     
  5  9446           trap(slut);
  5  9447           write(zud,"nl",1,
  5  9448             <:  ventetid:  :>,ventetid,"nl",1,
  5  9449             <:  nr:        :>,nr,"nl",1,
  5  9450             <:  opref:     :>,opref,"nl",1,
  5  9451             <:  tab:       :>,tab,"nl",1,
  5  9452             <:  nu:       :>,<< zddddd>,systime(4,nu,t),t,"nl",1,
  5  9453             <::>);
  5  9454           skriv_coru(zud,coru_no(295));
  5  9455     slut:
  5  9456         end;
  4  9457       end skriv_alarmur;
  3  9458         
  3  9458       trap(alarmur_trap);
  3  9459       stackclaim(400);
  3  9460     
  3  9460       systime(1,0.0,nu);
  3  9461       ventetid:= -1;
  3  9462       repeat
  3  9463         waitch(cs_opk_alarm_ur,opref,op_optype,ventetid);
  3  9464         if opref > 0 then
  3  9465           signalch(d.opref.retur,opref,op_optype);
  3  9466     
  3  9466         ventetid:= -1;
  3  9467         systime(1,0.0,nu);
  3  9468         for nr:= 1 step 1 until max_antal_operatører do
  3  9469         begin
  4  9470           tab:= (nr-1)*opk_alarm_tab_lgd;
  4  9471           if opk_alarm.tab.alarm_tilst > 0 and
  4  9472              opk_alarm.tab.alarm_lgd >= 0 then
  4  9473           begin
  5  9474             if (nu - opk_alarm.tab.alarm_start) >= opk_alarm.tab.alarm_lgd then
  5  9475             begin
  6  9476               opk_alarm.tab.alarm_kmdo:= 3;
  6  9477               signalbin(bs_opk_alarm);
  6  9478               if ventetid > 2 or ventetid=(-1) then ventetid:= 2;
  6  9479             end
  5  9480             else
  5  9481             if (nu - opk_alarm.tab.alarm_start) < ventetid or ventetid = (-1) then
  5  9482               ventetid:= (nu - opk_alarm.tab.alarm_start);
  5  9483           end;
  4  9484         end;
  3  9485         if ventetid=0 then ventetid:= 1;
  3  9486       until false;
  3  9487     
  3  9487     alarmur_trap:
  3  9488       disable skriv_alarmur(zbillede,1);
  3  9489     end alarmur;
  2  9490     \f

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

  2  9570     message procedure tvswitch_input side 1 - 940810/cl;
  2  9571     
  2  9571       procedure tv_switch_input;
  2  9572       begin
  3  9573         integer array field opref;
  3  9574         integer tt,ant;
  3  9575         boolean ok;
  3  9576         integer array ia(1:128);
  3  9577     
  3  9577         procedure skriv_tvswitch_input(zud,omfang);
  3  9578           value                            omfang;
  3  9579           zone                         zud;
  3  9580           integer                          omfang;
  3  9581         begin
  4  9582           write(zud,"nl",1,<:+++ tvswitch-input:>);
  4  9583           if omfang>0 then
  4  9584           disable begin
  5  9585             real array field raf;
  5  9586             trap(slut);
  5  9587             raf:=0;
  5  9588             write(zud,"nl",1,
  5  9589               <:  opref:  :>,opref,"nl",1,
  5  9590               <:  ok:     :>,(if ok then <:TRUE:> else <:FALSE:>),"nl",1,
  5  9591               <:  ant:    :>,ant,"nl",1,
  5  9592               <:  tt:     :>,tt,"nl",1,
  5  9593               <::>);
  5  9594             write(zud,"nl",1,<:ia: :>);
  5  9595             skrivhele(zud,ia.raf,256,2);
  5  9596             skriv_coru(zud,coru_no(297));
  5  9597     slut:
  5  9598           end;
  4  9599         end skriv_tvswitch_input;
  3  9600     \f

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

  3  9677         trap(tvswitch_input_trap);
  3  9678         stackclaim(400);
  3  9679         for ant:= 1 step 1 until 128 do ia(ant):= 0;
  3  9680     
  3  9680     <*+2*>if (testbit8 and overvåget) or testbit28 then
  3  9681             skriv_tvswitch_input(out,0);
  3  9682     <*-2*>
  3  9683     
  3  9683         repeat
  3  9684           ok:= læs_tlgr;
  3  9685           if ok then
  3  9686           begin
  4  9687     <*V*>   waitch(cs_tvswitch_input,opref,op_optype,-1);
  4  9688             start_operation(opref,297,cs_tvswitch_input,0);
  4  9689             d.opref.resultat:= tt shift 12 + ant;
  4  9690             tofrom(d.opref.data,ia,ant*2);
  4  9691             signalch(cs_talevejsswitch,opref,op_optype);
  4  9692           end;
  3  9693         until false;
  3  9694     
  3  9694     tvswitch_input_trap:
  3  9695     
  3  9695         disable skriv_tvswitch_input(zbillede,1);
  3  9696     
  3  9696       end tvswitch_input;
  2  9697     \f

  2  9697     message procedure tv_switch_adm side 1 - 940502/cl;
  2  9698     
  2  9698       procedure tv_switch_adm;
  2  9699       begin
  3  9700         integer array field opref;
  3  9701         integer rc;
  3  9702     
  3  9702         procedure skriv_tv_switch_adm(zud,omfang);
  3  9703           value                           omfang;
  3  9704           zone                        zud;
  3  9705           integer                         omfang;
  3  9706         begin
  4  9707           write(zud,"nl",1,<:+++ tv-switch-adm:>);
  4  9708           if omfang>0 then
  4  9709           disable begin
  5  9710             trap(slut);
  5  9711             write(zud,"nl",1,
  5  9712               <:  opref:  :>,opref,"nl",1,
  5  9713               <:  rc:     :>,rc,"nl",1,
  5  9714               <::>);
  5  9715             skriv_coru(zud,coru_no(298));
  5  9716     slut:
  5  9717           end;
  4  9718         end skriv_tv_switch_adm;
  3  9719     
  3  9719         trap(tv_switch_adm_trap);
  3  9720         stackclaim(400);
  3  9721     
  3  9721     <*+2*> if (testbit8 and overvåget) or testbit28 then
  3  9722              disable skriv_tv_switch_adm(out,0);
  3  9723     <*-2*>
  3  9724     
  3  9724     
  3  9724     
  3  9724     <* !!!!!!! PASSIVER KORUTINEN - cs_tvswitch_adm SIGNALERES ALDRIG !!!!!!! 
  3  9725         waitch(cs_tvswitch_adm,opref,op_optype,-1);
  3  9726     *>
  3  9727     
  3  9727         repeat
  3  9728           waitch(cs_tvswitch_adgang,opref,op_optype,-1);
  3  9729           start_operation(opref,298,cs_tvswitch_adm,'R' shift 12 + 44);
  3  9730           rc:= 0;
  3  9731           repeat
  3  9732             signalch(cs_talevejsswitch,opref,op_optype);
  3  9733     <*V*>   waitch(cs_tvswitch_adm,opref,op_optype,-1);
  3  9734             rc:= rc+1;
  3  9735           until rc=3 or d.opref.resultat=3;
  3  9736     
  3  9736           signalch(cs_tvswitch_adgang,opref,op_optype);
  3  9737     
  3  9737     <*V*> delay(15*60);
  3  9738         until false;
  3  9739     tv_switch_adm_trap:
  3  9740         disable skriv_tv_switch_adm(zbillede,1);
  3  9741       end;
  2  9742     \f

  2  9742     message procedure talevejsswitch side 1 -940426/cl;
  2  9743     
  2  9743       procedure talevejsswitch;
  2  9744       begin
  3  9745         integer tt, ant, ventetid;
  3  9746         integer array field opref, gemt_op, tab;
  3  9747         boolean ok;
  3  9748         integer array ia(1:128);
  3  9749     
  3  9749         procedure skriv_talevejsswitch(zud,omfang);
  3  9750           value                            omfang;
  3  9751           zone                         zud;
  3  9752           integer                          omfang;
  3  9753         begin
  4  9754           write(zud,"nl",1,<:+++ talevejsswitch:>);
  4  9755           if omfang>0 then
  4  9756           disable begin
  5  9757             real array field raf;
  5  9758             trap(slut);
  5  9759             raf:= 0;
  5  9760             write(zud,"nl",1,
  5  9761               <:  tt:      :>,tt,"nl",1,
  5  9762               <:  ant:     :>,ant,"nl",1,
  5  9763               <:  ventetid: :>,ventetid,"nl",1,
  5  9764               <:  opref:    :>,opref,"nl",1,
  5  9765               <:  gemt-op:  :>,gemt_op,"nl",1,
  5  9766               <:  tab:      :>,tab,"nl",1,
  5  9767               <:  ok:       :>,(if ok then <:TRUE:> else <:FALSE:>),"nl",1,
  5  9768               <::>);
  5  9769             write(zud,"nl",1,<:ia: :>);
  5  9770             skriv_hele(zud,ia.raf,256,2);
  5  9771             skriv_coru(zud,coru_no(299));
  5  9772     slut:
  5  9773           end;
  4  9774         end skriv_talevejsswitch;
  3  9775     \f

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

  2  9985     message garage_erklæringer side 1 - 810415/hko;
  2  9986     
  2  9986       zone array z_gar(max_antal_garageterminaler,16,1,gar_fejl);
  2  9987     
  2  9987       procedure gar_fejl(z,s,b);
  2  9988         integer            s,b;
  2  9989         zone             z;
  2  9990       begin
  3  9991         disable begin
  4  9992           integer array iz(1:20);
  4  9993           integer i,j,k;
  4  9994           integer array field iaf;
  4  9995           real array field raf;
  4  9996     
  4  9996           getzone6(z,iz);
  4  9997           iaf:=raf:=2;
  4  9998           getnumber(iz.raf,7,j);
  4  9999     
  4  9999           iaf:=(max_antal_operatører+j)*terminal_beskr_længde;
  4 10000           k:=1;
  4 10001     
  4 10001           j:= terminal_tab.iaf.terminal_tilstand;
  4 10002           if j shift(-21) < 6 and s <> (1 shift 21 +2) then
  4 10003             fejlreaktion(17<*ydre enhed status*>,s,string iz.raf(increase(k)),
  4 10004                          1 shift 12 <*binært*> +1 <*fortsæt*>);
  4 10005           if s <> (1 shift 21 +2) then
  4 10006             terminal_tab.iaf.terminal_tilstand:= 6 shift 21
  4 10007               + terminal_tab.iaf.terminal_tilstand extract 21;
  4 10008           if terminal_tab.iaf.terminal_tilstand shift(-21)<>0 then
  4 10009           begin
  5 10010             z(1):=real <:<'?'><'em'>:>;
  5 10011             b:=2;
  5 10012           end;
  4 10013         end; <*disable*>
  3 10014       end gar_fejl;
  2 10015     
  2 10015       integer cs_gar;
  2 10016       integer array cs_garage(1:max_antal_garageterminaler);
  2 10017     \f

  2 10017     message procedure h_garage side 1 - 810520/hko;
  2 10018     
  2 10018       <* hovedmodulkorutine for garageterminaler *>
  2 10019       procedure h_garage;
  2 10020       begin
  3 10021         integer array field op_ref;
  3 10022         integer k,dest_sem;
  3 10023         procedure skriv_hgarage(zud,omfang);
  3 10024           value                     omfang;
  3 10025           zone                  zud;
  3 10026           integer                   omfang;
  3 10027           begin integer i;
  4 10028     
  4 10028             i:=write(zud,"nl",1,<:+++ hovedmodul garage:>);
  4 10029             write(zud,"sp",26-i);
  4 10030             if omfang>0 then
  4 10031             disable begin
  5 10032               integer x;
  5 10033               trap(slut);
  5 10034               write(zud,"nl",1,
  5 10035                 <:  op_ref:    :>,op_ref,"nl",1,
  5 10036                 <:  k:         :>,k,"nl",1,
  5 10037                 <:  dest_sem:  :>,dest_sem,"nl",1,
  5 10038                 <::>);
  5 10039               skriv_coru(zud,coru_no(300));
  5 10040     slut:
  5 10041             end;
  4 10042          end skriv_hgarage;
  3 10043     
  3 10043       trap(hgar_trap);
  3 10044       stack_claim(if cm_test then 198 else 146);
  3 10045     
  3 10045     <*+2*>
  3 10046       if testbit16 and overvåget  or testbit28 then
  3 10047         skriv_hgarage(out,0);
  3 10048     <*-2*>
  3 10049     \f

  3 10049     message procedure h_garage side 2 - 811105/hko;
  3 10050     
  3 10050       repeat
  3 10051         wait_ch(cs_gar,op_ref,true,-1);
  3 10052     <*+4*>
  3 10053         if (d.op_ref.optype and (gar_optype or gen_optype)) extract 12 =0
  3 10054         then fejlreaktion(12<*operationstype*>,op_ref,<:garage:>,1);
  3 10055     <*-4*>
  3 10056     
  3 10056         k:=d.op_ref.opkode extract 12;
  3 10057         dest_sem:=
  3 10058           if k=0 then cs_garage(d.op_ref.kilde mod 100) else
  3 10059           if k=7 or k=8 then cs_garage(d.op_ref.data(1))
  3 10060           else -1;
  3 10061     <*+4*>
  3 10062         if dest_sem=-1 then
  3 10063         begin
  4 10064           fejl_reaktion(2<*operationskode*>,k,<:hovedmodul garage:>,1);
  4 10065           signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  4 10066         end
  3 10067         else
  3 10068     <*-4*>
  3 10069         if k=7<*inkluder*> then
  3 10070         begin
  4 10071           iaf:=(max_antal_operatører+ d.op_ref.data(1))*terminal_beskr_længde;
  4 10072           if terminal_tab.iaf.terminal_tilstand shift(-21)=0 then
  4 10073           begin
  5 10074             d.op_ref.resultat:=3;
  5 10075             signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  5 10076             dest_sem:=-2;
  5 10077           end;
  4 10078         end
  3 10079         else
  3 10080         if k=8<*ekskluder*> then <*afbryd kommando v. timeout*>
  3 10081         begin
  4 10082           iaf:=(max_antal_operatører+d.op_ref.data(1))*terminal_beskr_længde;
  4 10083           terminal_tab.iaf.terminal_tilstand:= 7 shift 21
  4 10084             +terminal_tab.iaf.terminal_tilstand extract 21;
  4 10085         end;
  3 10086         if dest_sem>0 then
  3 10087           signal_ch(dest_sem,op_ref,d.op_ref.optype);
  3 10088       until false;
  3 10089     
  3 10089     hgar_trap:
  3 10090       disable skriv_hgarage(zbillede,1);
  3 10091       end h_garage;
  2 10092     \f

  2 10092     message procedure garage side 1 - 830310/cl;
  2 10093     
  2 10093       procedure garage(nr);
  2 10094         value          nr;
  2 10095         integer        nr;
  2 10096       begin
  3 10097         integer array field op_ref,ref;
  3 10098         integer i,kode,aktion,status,opgave,retur_sem,
  3 10099                 pos,indeks,sep,sluttegn,vogn,ll;
  3 10100     
  3 10100         procedure skriv_garage(zud,omfang);
  3 10101           value                    omfang;
  3 10102           zone                 zud;
  3 10103           integer                  omfang;
  3 10104           begin integer i;
  4 10105     
  4 10105             i:=write(zud,"nl",1,<:+++ garage nr::>,nr);
  4 10106             write(zud,"sp",26-i);
  4 10107             if omfang > 0 then
  4 10108             disable begin integer x;
  5 10109               trap(slut);
  5 10110               write(zud,"nl",1,
  5 10111                 <:  op-ref:    :>,op_ref,"nl",1,
  5 10112                 <:  kode:      :>,kode,"nl",1,
  5 10113                 <:  ref:       :>,ref,"nl",1,
  5 10114                 <:  i:         :>,i,"nl",1,
  5 10115                 <:  aktion:    :>,aktion,"nl",1,
  5 10116                 <:  retur-sem: :>,retur_sem,"nl",1,
  5 10117                 <:  vogn:      :>,vogn,"nl",1,
  5 10118                 <:  ll:        :>,ll,"nl",1,
  5 10119                 <:  status:    :>,status,"nl",1,
  5 10120                 <:  opgave:    :>,opgave,"nl",1,
  5 10121                 <:  pos:       :>,pos,"nl",1,
  5 10122                 <:  indeks:    :>,indeks,"nl",1,
  5 10123                 <:  sep:       :>,sep,"nl",1,
  5 10124                 <:  sluttegn:  :>,sluttegn,"nl",1,
  5 10125                 <::>);
  5 10126               skriv_coru(zud,coru_no(300+nr));
  5 10127     slut:
  5 10128             end;
  4 10129           end skriv_garage;
  3 10130     \f

  3 10130     message procedure garage side 2 - 830310/hko;
  3 10131     
  3 10131         trap(gar_trap);
  3 10132         stack_claim((if cm_test then 200 else 146)+24+48+80+75);
  3 10133     
  3 10133         ref:= (max_antal_operatører+nr)*terminal_beskr_længde;
  3 10134     
  3 10134     <*+2*>
  3 10135         if testbit16 and overvåget or testbit28 then
  3 10136           skriv_garage(out,0);
  3 10137     <*-2*>
  3 10138     
  3 10138     <* attention simulering
  3 10139     *>
  3 10140       if terminal_tab.ref.terminal_tilstand shift (-21) = 0 then
  3 10141       begin
  4 10142         wait_ch(cs_att_pulje,op_ref,true,-1);
  4 10143         start_operation(op_ref,300+nr,cs_garage(nr),0);
  4 10144         signal_ch(cs_garage(nr),op_ref,gen_optype);
  4 10145       end;
  3 10146     <*
  3 10147     *>
  3 10148     \f

  3 10148     message procedure garage side 3 - 830310/hko;
  3 10149     
  3 10149         repeat
  3 10150     
  3 10150     <*V*> wait_ch(cs_garage(nr),
  3 10151                   op_ref,
  3 10152                   true,
  3 10153                   -1<*timeout*>);
  3 10154     <*+2*>
  3 10155           if testbit17 and overvåget then
  3 10156           disable begin
  4 10157             write(out,"nl",1,<:operation fra cs:>,<<d>,cs_garage(nr),
  4 10158                              <: til garage :>,nr);
  4 10159             skriv_op(out,op_ref);
  4 10160           end;
  3 10161     <*-2*>
  3 10162     
  3 10162           kode:= d.op_ref.op_kode;
  3 10163           retur_sem:= d.op_ref.retur;
  3 10164           i:= terminal_tab.ref.terminal_tilstand;
  3 10165           status:= i shift(-21);
  3 10166           opgave:=
  3 10167             if kode=0 then 1 <* indlæs kommando *> else
  3 10168             if kode=7 then 2 <* inkluder        *> else
  3 10169             if kode=8 then 3 <* ekskluder       *> else
  3 10170             0; <* afvises *>
  3 10171     
  3 10171           aktion:= case status +1 of(
  3 10172           <* status         *> <* opgave:         0   1   2   3 *>
  3 10173           <* 0 klar         *>(case opgave+1 of(  0,  1, -4,  3)),
  3 10174           <* 1 -            *>(-1),<* ulovlig tilstand *>
  3 10175           <* 2 -            *>(-1),<* ulovlig tilstand *>
  3 10176           <* 3 stoppet      *>(case opgave+1 of(  0,  2,  2,  3)),
  3 10177           <* 4 noneksist    *>(-2),<* ulovligt garageterminalnr *>
  3 10178           <* 5 -            *>(-1),<* ulovlig tilstand *>
  3 10179           <* 6 stop v. fejl *>(case opgave+1 of(  0, -5,  2,  3)),
  3 10180           <* 7 ej knyttet   *>(case opgave+1 of(  0, -5,  2,  3)),
  3 10181                               -1);
  3 10182     \f

  3 10182     message procedure garage side 4 - 810424/hko;
  3 10183     
  3 10183           case aktion+6 of
  3 10184           begin
  4 10185             begin
  5 10186               <*-5: terminal optaget *>
  5 10187     
  5 10187               d.op_ref.resultat:= 16;
  5 10188               afslut_operation(op_ref,cs_att_pulje); <*telex*>
  5 10189             end;
  4 10190     
  4 10190             begin
  5 10191               <*-4: operation uden virkning *>
  5 10192     
  5 10192               afslut_operation(op_ref,-1);
  5 10193             end;
  4 10194     
  4 10194             begin
  5 10195               <*-3: ulovlig operationskode *>
  5 10196     
  5 10196               fejl_reaktion(2<*operationskode*>,kode,<:ulovlig:>,1);
  5 10197               afslut_operation(op_ref,-1);
  5 10198             end;
  4 10199     
  4 10199             begin
  5 10200               <*-2: ulovligt garageterminal_nr *>
  5 10201     
  5 10201               fejl_reaktion(3<*programfejl*>,nr,<: ikke eksisterende garage:>,1);
  5 10202               afslut_operation(op_ref,cs_att_pulje); <*telex*>
  5 10203             end;
  4 10204     
  4 10204             begin
  5 10205               <*-1: ulovlig operatørtilstand *>
  5 10206     
  5 10206               fejl_reaktion(3<*programfejl*>,status,<: ulovlig garage-status:>,1);
  5 10207               afslut_operation(op_ref,-1);
  5 10208             end;
  4 10209     
  4 10209             begin
  5 10210               <* 0: ikke implementeret *>
  5 10211     
  5 10211               fejl_reaktion(2<*operationskode*>,kode,<: ikke implementeret:>,1);
  5 10212               afslut_operation(op_ref,-1);
  5 10213             end;
  4 10214     
  4 10214             begin
  5 10215     \f

  5 10215     message procedure garage side 5 - 851001/cl;
  5 10216     
  5 10216               <* 1: indlæs kommando *>
  5 10217     
  5 10217     
  5 10217     <*V*>     læs_kommando(z_gar(nr),300+nr,op_ref,pos,indeks,sep,sluttegn);
  5 10218     
  5 10218               if d.op_ref.resultat > 3 then
  5 10219               begin
  6 10220     <*V*>       setposition(z_gar(nr),0,0);
  6 10221                 if sluttegn<>'nl' then outchar(z_gar(nr),'nl');
  6 10222                 skriv_kvittering(z_gar(nr),op_ref,pos,
  6 10223                                  d.op_ref.resultat);
  6 10224               end
  5 10225               else if d.op_ref.resultat>0 then
  5 10226               begin <*godkendt*>
  6 10227                 kode:=d.op_ref.opkode;
  6 10228                 i:= kode extract 12;
  6 10229                 j:= if kode=11 or kode=12 or kode=20 or kode=24 then 1
  6 10230                     else if kode=9 or kode=10 then 2
  6 10231                                          else 0;
  6 10232                 if j > 0 then
  6 10233                 begin
  7 10234                   case j of
  7 10235                   begin
  8 10236                     begin
  9 10237     \f

  9 10237     message procedure garage side 6 - 851001/cl;
  9 10238     
  9 10238                       <* 1 indsæt/udtag/flyt bus i vogntabel *>
  9 10239                       integer vogn,ll;
  9 10240                       integer array field vtop;
  9 10241     
  9 10241                       vogn:=ia(1);
  9 10242                       ll:=ia(2);
  9 10243     <*V*>             wait_ch(cs_vt_adgang,
  9 10244                               vt_op,
  9 10245                               gen_optype,
  9 10246                               -1<*timeout sek*>);
  9 10247                       start_operation(vtop,300+nr,cs_garage(nr),
  9 10248                                       kode);
  9 10249                       d.vt_op.data(1):=vogn;
  9 10250                       if kode=11 or kode=20 or kode=24 then d.vt_op.data(2):=ll;
  9 10251                       indeks:= vt_op;
  9 10252                       signal_ch(cs_vt,
  9 10253                                 vt_op,
  9 10254                                 gen_optype or gar_optype);
  9 10255     
  9 10255     <*V*>             wait_ch(cs_garage(nr),
  9 10256                               vt_op,
  9 10257                               gar_optype,
  9 10258                               -1<*timeout sek*>);
  9 10259     <*+2*>            if testbit18 and overvåget then
  9 10260                       disable begin
 10 10261                         write(out,"nl",1,<:garage :>,<<d>,nr,
 10 10262                               <:: operation retur fra vt:>);
 10 10263                         skriv_op(out,vt_op);
 10 10264                       end;
  9 10265     <*-2*>
  9 10266     <*+4*>            if vt_op<>indeks then
  9 10267                         fejl_reaktion(11<*fremmede op*>,op_ref,
  9 10268                                       <:garage-kommando:>,0);
  9 10269     <*-4*>
  9 10270     <*V*>             setposition(z_gar(nr),0,0);
  9 10271                       if sluttegn<>'nl' then outchar(z_gar(nr),'nl');
  9 10272                       skriv_kvittering(z_gar(nr),if d.vt_op.resultat = 11 or
  9 10273                         d.vt_op.resultat = 12 then d.vt_op.data(3)
  9 10274                         else vt_op,-1,d.vt_op.resultat);
  9 10275                       d.vt_op.optype:=gen_optype or vtoptype;
  9 10276                       disable afslut_operation(vt_op,cs_vt_adgang);
  9 10277                     end;
  8 10278     
  8 10278                     begin
  9 10279     \f

  9 10279     message procedure garage side 6a - 830310/cl;
  9 10280     
  9 10280                     <* 2 vogntabel,linienr/-,busnr *>
  9 10281     
  9 10281                     d.op_ref.retur:= cs_garage(nr);
  9 10282                     tofrom(d.op_ref.data,ia,10);
  9 10283                     indeks:= op_ref;
  9 10284                     signal_ch(cs_vt,op_ref,gen_optype or gar_optype);
  9 10285                     wait_ch(cs_garage(nr),
  9 10286                             op_ref,
  9 10287                             gar_optype,
  9 10288                             -1<*timeout*>);
  9 10289     <*+2*>          if testbit18 and overvåget then
  9 10290                     disable begin
 10 10291                       write(out,"nl",1,<:garage operation retur fra vt:>);
 10 10292                       skriv_op(out,op_ref);
 10 10293                     end;
  9 10294     <*-2*>
  9 10295     <*+4*>
  9 10296                     if indeks <> op_ref then
  9 10297                       fejlreaktion(11<*fremmed post*>,op_ref,<:garage komm:>,0);
  9 10298     <*-4*>
  9 10299                     i:= d.op_ref.resultat;
  9 10300                     if i = 0 or i > 3 then
  9 10301                     begin
 10 10302     <*V*>             setposition(z_gar(nr),0,0);
 10 10303                       skriv_kvittering(z_gar(nr),op_ref,-1,d.op_ref.resultat);
 10 10304                     end
  9 10305                     else
  9 10306                     begin
 10 10307                       integer antal,fil_ref;
 10 10308                       antal:= d.op_ref.data(6);
 10 10309                       fil_ref:= d.op_ref.data(7);
 10 10310     <*V*>             setposition(z_gar(nr),0,0);
 10 10311                       write(z_gar(nr),"*",24,"sp",6,
 10 10312                         <:vogntabeludskrift:>,"sp",6,"*",24,"nl",2);
 10 10313     <*V*>             setposition(z_gar(nr),0,0);
 10 10314     \f

 10 10314     message procedure garage side 6c - 841213/cl;
 10 10315     
 10 10315                       pos:= 1;
 10 10316                       while pos <= antal do
 10 10317                       begin
 11 10318                         integer bogst,løb;
 11 10319     
 11 10319                         disable i:= læs_fil(fil_ref,pos,j);
 11 10320                         if i <> 0 then
 11 10321                           fejlreaktion(5<*læs_fil*>,i,<:garage: vo,l/vo,b:>,0)
 11 10322                         else
 11 10323                         begin
 12 10324                           vogn:= fil(j,1) shift (-24) extract 24;
 12 10325                           løb:= fil(j,1) extract 24;
 12 10326                           if d.op_ref.opkode=9 then
 12 10327                             begin i:=vogn; vogn:=løb; løb:=i; end;
 12 10328                           ll:= løb shift (-12) extract 10;
 12 10329                           bogst:= løb shift (-7) extract 5;
 12 10330                           if bogst > 0 then bogst:= bogst +'A'-1;
 12 10331                           løb:= løb extract 7;
 12 10332                           vogn:= vogn extract 14;
 12 10333                           i:= d.op_ref.opkode-8;
 12 10334                           for i:= i,i+1 do
 12 10335                           begin
 13 10336                             j:= (i+1) extract 1;
 13 10337                             case j +1 of
 13 10338                             begin
 14 10339                               write(z_gar(nr),"sp",(bogst=0) extract 1,<<ddd>,ll,
 14 10340                                 false add bogst,1,"/",1,<<d__>,løb);
 14 10341                               write(z_gar(nr),<<dddd>,vogn,"sp",1);
 14 10342                             end;
 13 10343                           end;
 12 10344                           if pos mod 5 = 0 then
 12 10345                           begin
 13 10346                             write(z_gar(nr),"nl",1);
 13 10347     <*V*>                   setposition(z_gar(nr),0,0);
 13 10348                           end
 12 10349                           else write(z_gar(nr),"sp",3);
 12 10350                         end;
 11 10351                         pos:=pos+1;
 11 10352                       end;
 10 10353                       write(z_gar(nr),"nl",1,"*",77,"nl",1);
 10 10354     \f

 10 10354     message procedure garage side 6d- 830310/cl;
 10 10355     
 10 10355                       d.opref.opkode:=104; <*slet-fil*>
 10 10356                       d.op_ref.data(4):=filref;
 10 10357                       indeks:=op_ref;
 10 10358                       signal_ch(cs_slet_fil,op_ref,gen_optype or gar_optype);
 10 10359     <*V*>             wait_ch(cs_garage(nr),op_ref,gar_optype,-1);
 10 10360     
 10 10360     <*+2*>            if testbit18 and overvåget then
 10 10361                       disable begin
 11 10362                         write(out,"nl",1,<:garage, slet-fil retur:>);
 11 10363                         skriv_op(out,op_ref);
 11 10364                       end;
 10 10365     <*-2*>
 10 10366     
 10 10366     <*+4*>            if op_ref<>indeks then
 10 10367                         fejlreaktion(11<*fr.post*>,op_ref,<:garage,slet-fil:>,0);
 10 10368     <*-4*>
 10 10369                       if d.op_ref.data(9)<>0 then
 10 10370                         fejl_reaktion(3<*prg.fejl*>,d.op_ref.data(9),
 10 10371                             <:garage, slet_fil:>,1);
 10 10372                     end;
  9 10373     \f

  9 10373     message procedure garage side 7 -810424/hko;
  9 10374     
  9 10374                     end;
  8 10375     
  8 10375     <*+4*>          fejl_reaktion(3<*programfejl*>,j,<:case 'opkode':>,2);
  8 10376     <*-4*>
  8 10377                   end;<*case j *>
  7 10378                 end <* j > 0 *>
  6 10379                 else
  6 10380                 begin
  7 10381     <*V*>         setposition(z_gar(nr),0,0);
  7 10382                   if sluttegn<>'nl' then outchar(z_gar(nr),'nl');
  7 10383                   skriv_kvittering(z_gar(nr),op_ref,pos,
  7 10384                                    4 <*kommando ukendt *>);
  7 10385                 end;
  6 10386               end;<* godkendt *>
  5 10387     
  5 10387     <*V*>     setposition(z_gar(nr),0,0);
  5 10388     
  5 10388               d.op_ref.opkode:=0; <*telex*>
  5 10389     
  5 10389               disable afslut_operation(op_ref,cs_gar);
  5 10390             end; <* indlæs kommando *>
  4 10391     
  4 10391             begin
  5 10392     \f

  5 10392     message procedure garage side 8 - 841213/cl;
  5 10393     
  5 10393                   <* 2: inkluder *>
  5 10394     
  5 10394               d.op_ref.resultat:=3;
  5 10395               afslut_operation(op_ref,-1);
  5 10396               monitor(8)reserve:(z_gar(nr),0,ia);
  5 10397               terminal_tab.ref.terminal_tilstand:=
  5 10398                 terminal_tab.ref.terminal_tilstand extract 21;
  5 10399     <*V*>     wait_ch(cs_att_pulje,op_ref,true,-1);
  5 10400               start_operation(op_ref,300+nr,cs_att_pulje,0);
  5 10401               signal_ch(cs_garage(nr),op_ref,gen_optype);
  5 10402             end;
  4 10403     
  4 10403             begin
  5 10404     
  5 10404               <* 3: ekskluder *>
  5 10405               d.op_ref.resultat:= 3;
  5 10406               terminal_tab.ref.terminal_tilstand:= 7 shift 21 +
  5 10407                 terminal_tab.ref.terminal_tilstand extract 21;
  5 10408               monitor(10)release:(z_gar(nr),0,ia);
  5 10409               afslut_operation(op_ref,-1);
  5 10410     
  5 10410             end;
  4 10411     
  4 10411     <*+4*>  fejl_reaktion(3<*programfejl *>,aktion,<:case aktion:>,2);
  4 10412     <*-4*>
  4 10413           end; <* case aktion+6 *>
  3 10414     
  3 10414          until false;
  3 10415       gar_trap:
  3 10416         skriv_garage(zbillede,1);
  3 10417       end garage;
  2 10418     
  2 10418     \f

  2 10418     message procedure radio_erklæringer side 1 - 820304/hko;
  2 10419     
  2 10419     zone z_fr_in(14,1,rad_in_fejl),
  2 10420          z_rf_in(14,1,rad_in_fejl),
  2 10421          z_fr_out(14,1,rad_out_fejl),
  2 10422          z_rf_out(14,1,rad_out_fejl);
  2 10423     
  2 10423     integer array
  2 10424         radiofejl,
  2 10425         ss_samtale_nedlagt,
  2 10426         ss_radio_aktiver(1:max_antal_kanaler),
  2 10427         bs_talevej_udkoblet,
  2 10428         cs_radio(1:max_antal_taleveje),
  2 10429         radio_linietabel(1:max_linienr//3+1),
  2 10430         radio_områdetabel(0:max_antal_områder),
  2 10431         opkaldskø(opkaldskø_postlængde//2+1:
  2 10432           (max_antal_mobilopkald+1)*opkaldskø_postlængde//2),
  2 10433         kanal_tab(1:max_antal_kanaler*kanal_beskr_længde//2),
  2 10434         hookoff_maske(1:(tv_maske_lgd//2)),
  2 10435         samtaleflag, kanalflag, opkaldsflag(1:(op_maske_lgd//2));
  2 10436     
  2 10436       integer field
  2 10437         kanal_tilstand,
  2 10438         kanal_id1,
  2 10439         kanal_id2,
  2 10440         kanal_spec,
  2 10441         kanal_alt_id1,
  2 10442         kanal_alt_id2;               
  2 10443       integer array field 
  2 10444         kanal_mon_maske,
  2 10445         kanal_alarm,
  2 10446         opkald_meldt;
  2 10447     
  2 10447       integer
  2 10448         cs_rad,
  2 10449         cs_radio_medd,
  2 10450         cs_radio_adm,
  2 10451         cs_radio_ind,
  2 10452         cs_radio_ud,
  2 10453         cs_radio_pulje,
  2 10454         cs_radio_kø,
  2 10455         bs_mobil_opkald,
  2 10456         bs_opkaldskø_adgang,
  2 10457         opkaldskø_ledige,
  2 10458         nødopkald_brugt,
  2 10459         første_frie_opkald,
  2 10460         første_opkald,
  2 10461         sidste_opkald,
  2 10462         første_nødopkald,
  2 10463         sidste_nødopkald,
  2 10464         optaget_flag;
  2 10465     
  2 10465       boolean
  2 10466         mobil_opkald_aktiveret;
  2 10467     \f

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

  2 10547     message procedure rad_in_fejl side 1 - 810601/hko;
  2 10548     
  2 10548       procedure rad_in_fejl(z,s,b);
  2 10549         value                 s;
  2 10550         zone                z;
  2 10551         integer               s,b;
  2 10552         begin
  3 10553           integer array field iaf;
  3 10554           integer pos,tegn,max,i;
  3 10555           integer array ia(1:20);
  3 10556           long array field laf;
  3 10557     
  3 10557         disable begin
  4 10558           laf:= iaf:= 2;
  4 10559           i:= 1;
  4 10560           getzone6(z,ia);
  4 10561           max:= ia(16)//2*3;
  4 10562           if s shift (-21) extract 1 = 0
  4 10563              and s shift(-19) extract 1 = 0 then
  4 10564           begin
  5 10565             if b = 0 then
  5 10566             begin
  6 10567               z(1):= real<:!:>;
  6 10568               b:= 2;
  6 10569             end;
  5 10570           end;
  4 10571     \f

  4 10571     message procedure rad_in_fejl side 2 - 820304/hko;
  4 10572     
  4 10572           if (s <> 1 shift 21 +2 and s shift(-19) extract 1 = 0) then
  4 10573           begin
  5 10574             fejlreaktion(17<*ydre enhed status*>,s,string ia.laf(increase(i)),
  5 10575               1 shift 12<*binær*> +1<*fortsæt*>);
  5 10576           end
  4 10577           else
  4 10578           if s shift (-19) extract 1 = 1 then
  4 10579           begin
  5 10580             z(1):= real<:!<'nl'>:>;
  5 10581             b:= 2;
  5 10582           end
  4 10583           else
  4 10584           if s = 1 shift 21 +2  or s shift(-19) extract 1 =1 then
  4 10585           begin
  5 10586     <*
  5 10587             if b = 0 then
  5 10588             begin
  5 10589     *>
  5 10590               z(1):= real <:<'em'>:>;
  5 10591               b:= 2;
  5 10592     <*
  5 10593             end
  5 10594             else
  5 10595             begin
  5 10596               tegn:= -1;
  5 10597               iaf:= 0;
  5 10598               pos:= b//2*3-2;
  5 10599               while pos < max and tegn <> 0 do læstegn(z.iaf,pos,tegn);
  5 10600               skriv_tegn(z.iaf,pos,'?');
  5 10601               if pos<=max then
  5 10602                 afslut_text(z.iaf,pos);
  5 10603               b:= (pos-1)//3*2;
  5 10604             end;
  5 10605     *>
  5 10606           end;<* s=1 shift 21+2 *>
  4 10607         end;
  3 10608           if testbit22 and
  3 10609              (s <> 1 shift 21 +2 and s shift(-19) extract 1 = 0)
  3 10610           then
  3 10611             delay(60);
  3 10612         end rad_in_fejl;
  2 10613     \f

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

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

  2 10727     message procedure skriv_opkaldskø side 1 - 820301/hko;
  2 10728     
  2 10728       procedure skriv_opkaldskø(z);
  2 10729         zone                    z;
  2 10730         begin
  3 10731           integer i,bogst,løb,j;
  3 10732           integer array field ref;
  3 10733           write(z,"nl",2,"*",5,<: opkaldskø :>,"*",5,"nl",2,
  3 10734             <:  ref næste foreg X    bus  linie/løb tid   -  op type  :>,
  3 10735             <: sig omr :>,"nl",1);
  3 10736           for i:= 1 step 1 until max_antal_mobilopkald do
  3 10737           begin
  4 10738             ref:= i*opkaldskø_postlængde;
  4 10739             j:= opkaldskø.ref(1);
  4 10740             write(z,<< dddd>,ref,<< ddddd>,j extract 12,j shift (-12));
  4 10741             j:= opkaldskø.ref(2);
  4 10742             write(z,"sp",1,if j < 0 then "X" else "sp",1,"sp",1);
  4 10743             skriv_id(z,j extract 23,9);
  4 10744             j:= opkaldskø.ref(3);
  4 10745             skriv_id(z,j,7);
  4 10746             j:= opkaldskø.ref(4);
  4 10747             write(z,<<  zd.dd>,(j shift (-12))/100.0,
  4 10748               <<    zd>,j extract 8);
  4 10749             j:= j shift (-8) extract 4;
  4 10750             if j = 1 or j = 2 then
  4 10751               write(z,if j=1 then <: normal:> else <: nød   :>)
  4 10752             else write(z,<<dddd>,j,"sp",3);
  4 10753             j:= opkaldskø.ref(5);
  4 10754             write(z,if j shift (-20) <> 0 then <:  B  :> else <:  S  :>,
  4 10755               true,4,if 1<=(j extract 8) and (j extract 8)<=max_antal_områder then
  4 10756               string område_navn(j extract 8) else <:---:>);
  4 10757             outchar(z,'nl');
  4 10758           end;
  3 10759     
  3 10759           write(z,"nl",1,<<z>,
  3 10760             <:første_frie_opkald=:>,første_frie_opkald,"nl",1,
  3 10761             <:første_opkald=:>,første_opkald,"nl",1,
  3 10762             <:sidste_opkald=:>,sidste_opkald,"nl",1,
  3 10763             <:første_nødopkald=:>,første_nødopkald,"nl",1,
  3 10764             <:sidste_nødopkald=:>,sidste_nødopkald,"nl",1,
  3 10765             <:opkaldskø_ledige=:>,opkaldskø_ledige,"nl",1,
  3 10766             <:nødopkald_brugt= :>,nødopkald_brugt,"nl",1,
  3 10767             "nl",1,<:opkaldsflag::>,"nl",1);
  3 10768             outintbits_ia(z,opkaldsflag,1,op_maske_lgd//2);
  3 10769             write(z,"nl",2);
  3 10770         end skriv_opkaldskø;
  2 10771     \f

  2 10771     message procedure skriv_radio_linietabel side 1 - 820301/hko;
  2 10772     
  2 10772       procedure skriv_radio_linie_tabel(z);
  2 10773         zone                               z;
  2 10774         begin
  3 10775           integer i,j,k;
  3 10776     
  3 10776           write(z,"nl",2,"*",5,<: liniefordeling for operatører :>,"*",5,"nl",2);
  3 10777           k:= 0;
  3 10778           for i:= 1 step 1 until max_linienr do
  3 10779           begin
  4 10780             læstegn(radio_linietabel,i+1,j);
  4 10781             if j > 0 then
  4 10782             begin
  5 10783               k:= k +1;
  5 10784               write(z,<<dddd>,i,":",1,<<zd_>,j,"sp",if k mod 5=0 then 0 else 4,
  5 10785                 "nl",if k mod 5=0 then 1 else 0);
  5 10786             end;
  4 10787           end;
  3 10788           write(z,"nl",if k mod 5=0 then 1 else 2);
  3 10789         end skriv_radio_linietabel;
  2 10790     
  2 10790     procedure skriv_radio_områdetabel(z);
  2 10791      zone                             z;
  2 10792       begin
  3 10793         integer i;
  3 10794     
  3 10794         write(z,"nl",2,"*",5,<: områdefordeling for operatører :>,"*",5,"nl",2);
  3 10795         for i:= 1 step 1 until max_antal_områder do
  3 10796         begin
  4 10797           laf:= (i-1)*4;
  4 10798           if radio_områdetabel(i)<>0 then
  4 10799             write(z,<<dd>,i,<:. :>,områdenavn.laf,<:: :>,
  4 10800               radio_områdetabel(i),"nl",1);
  4 10801         end;
  3 10802       end skriv_radio_områdetabel;
  2 10803     \f

  2 10803     message procedure h_radio side 1 - 810520/hko;
  2 10804     
  2 10804       <* hovedmodulkorutine for radiokanaler *>
  2 10805       procedure h_radio;
  2 10806       begin
  3 10807         integer array field op_ref;
  3 10808         integer k,dest_sem;
  3 10809         procedure skriv_hradio(z,omfang);
  3 10810           value                  omfang;
  3 10811           zone                 z;
  3 10812           integer                omfang;
  3 10813           begin integer i;
  4 10814             disable i:= write(z,"nl",1,<:+++ hovedmodul radio:>);
  4 10815             write(z,"sp",26-i);
  4 10816             if omfang >0 then
  4 10817             disable begin integer x;
  5 10818               trap(slut);
  5 10819               write(z,"nl",1,
  5 10820                 <:  op_ref:    :>,op_ref,"nl",1,
  5 10821                 <:  k:         :>,k,"nl",1,
  5 10822                 <:  dest_sem:  :>,dest_sem,"nl",1,
  5 10823                 <::>);
  5 10824               skriv_coru(z,coru_no(400));
  5 10825     slut:
  5 10826             end;
  4 10827           end skriv_hradio;
  3 10828     
  3 10828       trap(hrad_trap);
  3 10829       stack_claim(if cm_test then 198 else 146);
  3 10830     
  3 10830     <*+2*> if testbit32 and overvåget or testbit28 then
  3 10831         skriv_hradio(out,0);
  3 10832     <*-2*>
  3 10833     \f

  3 10833     message procedure h_radio side 2 - 820304/hko;
  3 10834     
  3 10834       repeat
  3 10835         wait_ch(cs_rad,op_ref,true,-1);
  3 10836     <*+2*>if testbit33 and overvåget then
  3 10837           disable begin
  4 10838             skriv_h_radio(out,0);
  4 10839             write(out,<: operation modtaget:>);
  4 10840             skriv_op(out,op_ref);
  4 10841           end;
  3 10842     <*-2*>
  3 10843     <*+4*>
  3 10844         if (d.op_ref.optype and
  3 10845              (gen_optype or rad_optype or vt_optype)) extract 12 =0
  3 10846         then fejlreaktion(12<*operationstype*>,op_ref,<:h<'_'>radio:>,1);
  3 10847     <*-4*>
  3 10848     
  3 10848         k:=d.op_ref.op_kode extract 12;
  3 10849         dest_sem:=
  3 10850           if k > 0 and k < 7
  3 10851              or k=11 or k=12 or k=19
  3 10852              or (72<=k and k<=74) or k = 77
  3 10853              <*IN,O/EK,O/IN,R/EK,R/FO,L/ST/EK,K/IN,K/RA,I/FO,O*>
  3 10854           then cs_radio_adm
  3 10855           else if k=41 <* radiokommando fra operatør *>
  3 10856           then cs_radio(d.opref.data(1)) else -1;
  3 10857     <*+4*>
  3 10858         if dest_sem<1 then
  3 10859         begin
  4 10860           if dest_sem<0 then
  4 10861             fejlreaktion(2<*operationskode*>,k,<:hovedmodul radio:>,1);
  4 10862           d.op_ref.resultat:= if dest_sem=0 then 45 else 31;
  4 10863           signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  4 10864         end
  3 10865         else
  3 10866     <*-4*>
  3 10867         begin <* operationskode ok *>
  4 10868           signal_ch(dest_sem,op_ref,d.op_ref.optype);
  4 10869         end;
  3 10870       until false;
  3 10871     
  3 10871     hrad_trap:
  3 10872       disable skriv_hradio(zbillede,1);
  3 10873       end h_radio;
  2 10874     \f

  2 10874     message procedure radio side 1 - 820301/hko;
  2 10875     
  2 10875       procedure radio(talevej,op);
  2 10876       value           talevej,op;
  2 10877       integer         talevej,op;
  2 10878         begin
  3 10879           integer array field opref, rad_op, vt_op, opref1, iaf, iaf1;
  3 10880           integer nr,i,j,k,res,opgave,tilst,tekn_inf, vtop2, vtop3,
  3 10881                   sig,omr,type,bus,ll,ttmm,vogn,garage,operatør;
  3 10882           integer array felt,værdi(1:8);
  3 10883           boolean byt,nød,frigiv_samtale;
  3 10884           real kl;
  3 10885           real field rf;
  3 10886     
  3 10886           procedure skriv_radio(z,omfang);
  3 10887             value                 omfang;
  3 10888             zone                z;
  3 10889             integer               omfang;
  3 10890             begin integer i1;
  4 10891               disable i1:= write(z,"nl",1,<:+++ radio:>);
  4 10892               write(z,"sp",26-i1);
  4 10893               if omfang > 0 then
  4 10894               disable begin real x;
  5 10895                 trap(slut);
  5 10896     \f

  5 10896     message procedure radio side 1a- 820301/hko;
  5 10897     
  5 10897                 write(z,"nl",1,
  5 10898                   <:  op_ref:    :>,op_ref,"nl",1,
  5 10899                   <:  opref1:    :>,opref1,"nl",1,
  5 10900                   <:  iaf:       :>,iaf,"nl",1,
  5 10901                   <:  iaf1:      :>,iaf1,"nl",1,
  5 10902                   <:  vt-op:     :>,vt_op,"nl",1,
  5 10903                   <:  rad-op:    :>,rad_op,"nl",1,
  5 10904                   <:  rf:        :>,rf,"nl",1,
  5 10905                   <:  nr:        :>,nr,"nl",1,
  5 10906                   <:  i:         :>,i,"nl",1,
  5 10907                   <:  j:         :>,j,"nl",1,
  5 10908                   <:  k:         :>,k,"nl",1,
  5 10909                   <:  operatør:  :>,operatør,"nl",1,
  5 10910                   <:  tilst:     :>,tilst,"nl",1,
  5 10911                   <:  res:       :>,res,"nl",1,
  5 10912                   <:  opgave:    :>,opgave,"nl",1,
  5 10913                   <:  type:      :>,type,"nl",1,
  5 10914                   <:  bus:       :>,bus,"nl",1,
  5 10915                   <:  ll:        :>,ll,"nl",1,
  5 10916                   <:  ttmm:      :>,ttmm,"nl",1,
  5 10917                   <:  vogn:      :>,vogn,"nl",1,
  5 10918                   <:  tekn-inf:  :>,tekn_inf,"nl",1,
  5 10919                   <:  vtop2:     :>,vtop2,"nl",1,
  5 10920                   <:  vtop3:     :>,vtop3,"nl",1,
  5 10921                   <:  sig:       :>,sig,"nl",1,
  5 10922                   <:  omr:       :>,omr,"nl",1,
  5 10923                   <:  garage:    :>,garage,"nl",1,
  5 10924                   <<-dddddd'-dd>,
  5 10925                   <:  kl:        :>,kl,systime(4,kl,x),x,"nl",1,
  5 10926                   <:samtaleflag: :>,"nl",1);
  5 10927                 out_intbits_ia(z,samtaleflag,1,op_maske_lgd//2);
  5 10928                 skriv_coru(z,coru_no(410+talevej));
  5 10929     slut:
  5 10930               end;<*disable*>
  4 10931             end skriv_radio;
  3 10932     \f

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

  5 11010     message procedure udtag_opkald side 2 - 820304/hko;
  5 11011     
  5 11011             if ref <> 0 then
  5 11012             begin
  6 11013               b:= opkaldskø.ref(2);
  6 11014     <*+4*>    if b < 0 then
  6 11015                 fejlreaktion(19<*mobilopkald*>,bus extract 14,
  6 11016                   <:nødopkald(besvaret/ej meldt):>,1);
  6 11017     <*-4*>
  6 11018               garage:=b shift(-14) extract 8;
  6 11019               b:= b extract 14;
  6 11020               l:= opkaldskø.ref(3);
  6 11021               tm:= opkaldskø.ref(4);
  6 11022               o:= tm extract 8;
  6 11023               tm:= tm shift(-12);
  6 11024               omr:= opkaldskø.ref(5) extract 8;
  6 11025               sig:= opkaldskø.ref(5) shift (-20);
  6 11026             end
  5 11027             else res:=19; <* kø er tom *>
  5 11028           end <*vogn=0 and omr=0 *>
  4 11029           else
  4 11030           begin
  5 11031             <* vogn<>0 or omr<>0 *>
  5 11032             i:= 0; tilst:= -1;
  5 11033             if vogn shift(-22) = 1 then
  5 11034             begin
  6 11035               i:= find_busnr(vogn,nr,garage,tilst);
  6 11036               l:= vogn;
  6 11037             end
  5 11038             else
  5 11039             if vogn<>0 and (omr=0 or omr>2) then
  5 11040             begin
  6 11041               o:= 0;
  6 11042               i:= søg_omr_bus(vogn,l,garage,o,sig,tilst);
  6 11043               if i=(-2) then
  6 11044               begin
  7 11045                 o:= omr;
  7 11046                 i:= søg_omr_bus(vogn,l,garage,o,sig,tilst);
  7 11047               end;
  6 11048               nr:= vogn extract 14;
  6 11049             end
  5 11050             else nr:= vogn extract 14;
  5 11051             if i<0 then ref:= 0;
  5 11052             while ref <> 0 and res = -1 do
  5 11053             begin
  6 11054               i:= opkaldskø.ref(2) extract 14;
  6 11055               j:= opkaldskø.ref(4) extract 8; <*operatør*>
  6 11056               if nr = i and
  6 11057                  (omr=0 or omr=opkaldskø.ref(5) extract 8) then res:= 0
  6 11058               else
  6 11059               begin
  7 11060                 ref:= opkaldskø.ref(1) extract 12;
  7 11061                 if ref = 0 and t = 2 then
  7 11062                 begin
  8 11063                   ref:= første_opkald;
  8 11064                   t:= if ref = 0 then 0 else 1;
  8 11065                 end else if ref = 0 then t:= 0;
  7 11066               end;
  6 11067             end; <*while*>
  5 11068     \f

  5 11068     message procedure udtag_opkald side 3 - 810603/hko;
  5 11069     
  5 11069             if ref <> 0 then
  5 11070             begin
  6 11071               b:= nr;
  6 11072               tm:= opkaldskø.ref(4);
  6 11073               o:= tm extract 8;
  6 11074               tm:= tm shift(-12);
  6 11075               omr:= opkaldskø.ref(5) extract 4;
  6 11076               sig:= opkaldskø.ref(5) shift (-20);
  6 11077     
  6 11077     <*+4*>    if tilst <> -1 then
  6 11078                 fejlreaktion(3<*prg.fejl*>,tilst,
  6 11079                   <:vogntabel_tilstand for vogn i kø:>,1);
  6 11080     <*-4*>
  6 11081             end;
  5 11082           end;
  4 11083     
  4 11083           if ref <> 0 then
  4 11084           begin
  5 11085             næste:= opkaldskø.ref(1);
  5 11086             forrige:= næste shift(-12);
  5 11087             næste:= næste extract 12;
  5 11088             if forrige <> 0 then
  5 11089               opkaldskø.forrige(1):= opkaldskø.forrige(1) shift(-12) shift 12
  5 11090                                      + næste
  5 11091             else if t = 1 then første_opkald:= næste
  5 11092             else <*if t = 2 then*> første_nødopkald:= næste;
  5 11093     
  5 11093             if næste <> 0 then
  5 11094               opkaldskø.næste(1):= opkaldskø.næste(1) extract 12
  5 11095                                    + forrige shift 12
  5 11096             else if t = 1 then sidste_opkald:= forrige
  5 11097             else <* if t = 2 then*> sidste_nødopkald:= forrige;
  5 11098     
  5 11098             opkaldskø.ref(1):=første_frie_opkald;
  5 11099             første_frie_opkald:=ref;
  5 11100     
  5 11100             opkaldskø_ledige:=opkaldskø_ledige + 1;
  5 11101             if t=2 then nødopkald_brugt:=nødopkald_brugt - 1;
  5 11102             if -,læsbit_ia(operatør_maske,o) or o = 0 then
  5 11103               tofrom(opkaldsflag,alle_operatører,op_maske_lgd)
  5 11104             else
  5 11105             begin
  6 11106               sætbit_ia(opkaldsflag,operatør,1);
  6 11107               sætbit_ia(opkaldsflag,o,1);
  6 11108             end;
  5 11109             signal_bin(bs_mobil_opkald);
  5 11110           end;
  4 11111     \f

  4 11111     message procedure udtag_opkald side 4 - 810531/hko;
  4 11112     
  4 11112           signal_bin(bs_opkaldskø_adgang);
  4 11113           bus:= b;
  4 11114           type:= t;
  4 11115           ll:= l;
  4 11116           ttmm:= tm;
  4 11117           udtag_opkald:= res;
  4 11118         end udtag opkald;
  3 11119     \f

  3 11119     message procedure frigiv_kanal side 1 - 810603/hko;
  3 11120     
  3 11120       procedure frigiv_kanal(nr);
  3 11121         value                nr;
  3 11122         integer              nr;
  3 11123         begin
  4 11124           integer id1, id2, omr, i;
  4 11125           integer array field iaf, vt_op;
  4 11126     
  4 11126           iaf:= (nr-1)*kanal_beskrlængde;
  4 11127           id1:= kanal_tab.iaf.kanal_id1;
  4 11128           id2:= kanal_tab.iaf.kanal_id2;
  4 11129           omr:= kanal_til_omr(nr);
  4 11130           if id1 <> 0 then
  4 11131             wait(ss_samtale_nedlagt(nr));
  4 11132           if id1 shift (-22) < 3 and omr > 2 then
  4 11133           begin
  5 11134     <*V*>   waitch(cs_vt_adgang,vt_op,true,-1);
  5 11135             start_operation(vt_op,410+talevej,cs_radio(talevej),
  5 11136               if id1 shift (-22) = 2 then 18 else 17);
  5 11137             d.vt_op.data(1):= id1;
  5 11138             d.vt_op.data(4):= omr;
  5 11139             signalch(cs_vt,vt_op,vt_optype or genoptype);
  5 11140     <*V*>   waitch(cs_radio(talevej),vt_op,vt_optype,-1);
  5 11141             signalch(cs_vt_adgang,vt_op,true);
  5 11142           end;
  4 11143     
  4 11143           if id2 <> 0 and id2 shift(-20) <> 12 then
  4 11144             wait(ss_samtale_nedlagt(nr));
  4 11145           if id2 shift (-22) < 3 and omr > 2 then
  4 11146           begin
  5 11147     <*V*>   waitch(cs_vt_adgang,vt_op,true,-1);
  5 11148             start_operation(vt_op,410+talevej,cs_radio(talevej),
  5 11149               if id2 shift (-22) = 2 then 18 else 17);
  5 11150             d.vt_op.data(1):= id2;
  5 11151             d.vt_op.data(4):= omr;
  5 11152             signalch(cs_vt,vt_op,vt_optype or genoptype);
  5 11153     <*V*>   waitch(cs_radio(talevej),vt_op,vt_optype,-1);
  5 11154             signalch(cs_vt_adgang,vt_op,true);
  5 11155           end;
  4 11156     
  4 11156           kanal_tab.iaf.kanal_id1:= kanal_tab.iaf.kanal_id2:= 
  4 11157           kanal_tab.iaf.kanal_alt_id1:= kanal_tab.iaf.kanal_alt_id2:= 0;
  4 11158           kanal_tab.iaf.kanal_tilstand:= kanal_tab.iaf.kanal_tilstand
  4 11159                                         shift (-10) extract 6 shift 10;
  4 11160     <*    repeat
  4 11161             inspect(ss_samtale_nedlagt(nr),i);
  4 11162             if i>0 then wait(ss_samtale_nedlagt(nr));
  4 11163           until i<=0;
  4 11164     *>
  4 11165         end frigiv_kanal;
  3 11166     \f

  3 11166     message procedure hookoff side 1 - 880901/cl;
  3 11167     
  3 11167     integer procedure hookoff(talevej,op,retursem,flash);
  3 11168     value                     talevej,op,retursem,flash;
  3 11169     integer                   talevej,op,retursem;
  3 11170     boolean                                        flash;
  3 11171     begin
  4 11172       integer array field opref;
  4 11173     
  4 11173       opref:= op;
  4 11174       start_operation(opref,410+talevej,retursem,'A' shift 12 + 60);
  4 11175       d.opref.data(1):= talevej;
  4 11176       d.opref.data(2):= if flash then 2 else 1;
  4 11177       signalch(cs_radio_ud,opref,rad_optype);
  4 11178     <*V*> waitch(retursem,opref,rad_optype,-1);
  4 11179       hookoff:= d.opref.resultat;
  4 11180     end;
  3 11181     \f

  3 11181     message procedure hookon side 1 - 880901/cl;
  3 11182     
  3 11182     integer procedure hookon(talevej,op,retursem);
  3 11183       value                  talevej,op,retursem;
  3 11184       integer                talevej,op,retursem;
  3 11185     begin
  4 11186       integer i,res;
  4 11187       integer array field opref;
  4 11188     
  4 11188      if læsbit_ia(hookoff_maske,talevej) then
  4 11189      begin
  5 11190       inspect(bs_talevej_udkoblet(talevej),i);
  5 11191       if i<=0 then
  5 11192       begin
  6 11193         opref:= op;
  6 11194         start_operation(opref,410+talevej,retursem,'D' shift 12 + 60);
  6 11195         d.opref.data(1):= talevej;
  6 11196         signalch(cs_radio_ud,opref,rad_optype);
  6 11197     <*V*> waitch(retursem,opref,rad_optype,-1);
  6 11198         res:= d.opref.resultat;
  6 11199       end
  5 11200       else
  5 11201         res:= 0;
  5 11202     
  5 11202       if res=0 then wait(bs_talevej_udkoblet(talevej));
  5 11203      end
  4 11204      else
  4 11205        res:= 0;
  4 11206     
  4 11206      sætbit_ia(hookoff_maske,talevej,0);
  4 11207       hookon:= res;
  4 11208     end;
  3 11209     \f

  3 11209     message procedure radio side 2 - 820304/hko;
  3 11210     
  3 11210           rad_op:= op;
  3 11211     
  3 11211           trap(radio_trap);
  3 11212           stack_claim((if cm_test then 200 else 150) +200);
  3 11213     
  3 11213     <*+2*>if testbit32 and overvåget or testbit28 then
  3 11214             skriv_radio(out,0);
  3 11215     <*-2*>
  3 11216           repeat
  3 11217             waitch(cs_radio(talevej),opref,true,-1);
  3 11218     <*+2*>
  3 11219             if testbit33 and overvåget then
  3 11220             disable begin
  4 11221               skriv_radio(out,0);
  4 11222               write(out,<: operation modtaget på cs:>,<<d>,cs_radio(talevej));
  4 11223               skriv_op(out,opref);
  4 11224             end;
  3 11225     <*-2*>
  3 11226     
  3 11226             k:= d.op_ref.opkode extract 12;
  3 11227             opgave:= d.opref.opkode shift (-12);
  3 11228             operatør:= d.op_ref.data(4);
  3 11229     
  3 11229     <*+4*>  if (d.op_ref.optype and (gen_optype or io_optype or op_optype))
  3 11230               extract 12 = 0 then fejlreaktion(12<*operationstype*>,op_ref,
  3 11231                                     <:radio:>,0);
  3 11232     <*-4*>
  3 11233     \f

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

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

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

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

  6 11499     message procedure radio side 7 - 880930/cl;
  6 11500     
  6 11500                 end
  5 11501                 else
  5 11502                 begin
  6 11503                   d.opref.resultat:= res;
  6 11504                   if res=20 or res=52 then
  6 11505                   begin <* tæl ej.forb og opt.kanal *>
  7 11506                     for i:= 1 step 1 until max_antal_områder do
  7 11507                       if læsbiti(d.rad_op.data(7),i) then
  7 11508                         tæl_opkald(i,(if res=20 then 4 else 5));
  7 11509                   end;
  6 11510                   if d.opref.data(6)=0 then
  6 11511                   res:= hookon(talevej,rad_op,cs_radio(talevej));
  6 11512                   <* frigiv fra vogntabel hvis reserveret *>
  6 11513                   if (opgave<=4 or opgave=9) and
  6 11514                      (d.opref.data(3)=0 or d.opref.data(3)>2) then
  6 11515                   begin
  7 11516                     waitch(cs_vt_adgang,vt_op,true,-1);
  7 11517                     startoperation(vt_op,410+talevej,cs_radio(talevej),
  7 11518                       if opgave<=2 or opgave=9 then 17 else 18);
  7 11519                     d.vt_op.data(1):= if opgave<=2 or opgave=9 then
  7 11520                       (if vogn=0 then garage shift 14 + bus else
  7 11521                        if ll<>0 then ll else garage shift 14 + bus)
  7 11522                       else vogn;
  7 11523                     d.vt_op.data(4):= omr;
  7 11524                     signalch(cs_vt,vt_op,gen_optype or vt_optype);
  7 11525                     waitch(cs_radio(talevej),vt_op,vt_optype,-1);
  7 11526                     signalch(cs_vt_adgang,vt_op,true);
  7 11527                   end;
  6 11528                 end;
  5 11529                 signalch(d.opref.retur,opref,d.opref.optype);
  5 11530     \f

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

  5 11588     message procedure radio side 9 - 880930/cl;
  5 11589                 if res=3 then
  5 11590                 begin
  6 11591                   if kanal_tab.iaf.kanal_tilstand shift (-16) = talevej then
  6 11592                     sætbiti(kanal_tab.iaf.kanal_tilstand,5,1) <* monbit *>
  6 11593                   else
  6 11594                     sætbit_ia(kanal_tab.iaf.kanal_mon_maske,talevej,1);
  6 11595                   d.opref.data(6):= 12 shift 20 + nr;
  6 11596                   i:= kanal_tab.iaf.kanal_id2;
  6 11597                   if i<>0 then
  6 11598                   begin
  7 11599                     if i shift (-20) = 12 then
  7 11600                     begin <* ident2 henviser til anden kanal *>
  8 11601                       iaf1:= ((i extract 20)-1)*kanalbeskrlængde;
  8 11602                       if kanal_tab.iaf1.kanal_tilstand shift (-16) = talevej then
  8 11603                         sætbiti(kanal_tab.iaf.kanal_tilstand,5,1)
  8 11604                       else
  8 11605                         sætbit_ia(kanal_tab.iaf.kanal_mon_maske,talevej,1);
  8 11606                       d.opref.data(5):= 12 shift 20 + i;
  8 11607                     end
  7 11608                     else
  7 11609                       d.opref.data(5):= 12 shift 20 + nr;
  7 11610                   end
  6 11611                   else
  6 11612                     d.opref.data(5):= 0;
  6 11613                 end;
  5 11614     
  5 11614                 if res<>3 then
  5 11615                 begin
  6 11616                   res:= 0;
  6 11617                   sætbit_ia(kanalflag,operatør,1);
  6 11618                   goto radio_nedlæg;
  6 11619                 end;
  5 11620                 d.opref.resultat:= res;
  5 11621                 signalch(d.opref.retur,opref,d.opref.optype);
  5 11622     \f

  5 11622     message procedure radio side 10 - 880930/cl;
  5 11623     
  5 11623               end <* MONITERING *>
  4 11624               else
  4 11625               if opgave = 11 then <* GENNEMSTILLING *>
  4 11626               begin
  5 11627                 nr:= d.opref.data(6) extract 20;
  5 11628                 k:= if d.opref.data(5) shift (-20) = 12 then
  5 11629                       d.opref.data(5) extract 20
  5 11630                     else
  5 11631                       0;
  5 11632                 inspect(ss_samtale_nedlagt(nr),i);
  5 11633                 if k<>0 then inspect(ss_samtale_nedlagt(k),j) else j:=0;
  5 11634                 if i<>0 and j<>0 then
  5 11635                 begin
  6 11636                   res:= hookon(talevej,rad_op,cs_radio(talevej));
  6 11637                   goto radio_nedlæg;
  6 11638                 end;
  5 11639     
  5 11639                 iaf:= (nr-1)*kanal_beskr_længde;
  5 11640                 if kanal_tab.iaf.kanal_tilstand shift (-16) = talevej then
  5 11641                 begin
  6 11642                   if læsbiti(kanal_tab.iaf.kanal_tilstand,5) and
  6 11643                      kanal_tab.iaf.kanal_tilstand extract 2 = 3
  6 11644                   then
  6 11645                     res:= hookoff(talevej,rad_op,cs_radio(talevej),true)
  6 11646                   else
  6 11647                   if kanal_tab.iaf.kanal_tilstand extract 2 = 1 and
  6 11648                      d.opref.data(5)<>0
  6 11649                   then
  6 11650                     res:= 0
  6 11651                   else
  6 11652                     res:= 21; <* ingen at gennemstille til *>
  6 11653                 end
  5 11654                 else
  5 11655                   res:= 50; <* kanalnr *>
  5 11656     
  5 11656                 if res=0 then
  5 11657                   res:= hookon(talevej,rad_op,cs_radio(talevej));
  5 11658                 if res=0 then
  5 11659                 begin
  6 11660                   sætbiti(kanal_tab.iaf.kanal_tilstand,5,0);
  6 11661                   kanal_tab.iaf.kanal_tilstand:=
  6 11662                     kanal_tab.iaf.kanal_tilstand shift (-2) shift 2 + 3;
  6 11663                   d.opref.data(6):= 0;
  6 11664                   if kanal_tab.iaf.kanal_id2=0 then
  6 11665                     kanal_tab.iaf.kanal_id2:= d.opref.data(5);
  6 11666     
  6 11666                   if kanal_tab.iaf.kanal_id2 shift (-22) = 3 then
  6 11667                   begin <* gennemstillet til anden kanal *>
  7 11668                     iaf1:= ((kanal_tab.iaf.kanal_id2 extract 20) - 1)
  7 11669                                                             *kanalbeskrlængde;
  7 11670                     sætbiti(kanal_tab.iaf1.kanal_tilstand,5,0);
  7 11671                     kanal_tab.iaf1.kanal_tilstand:=
  7 11672                       kanal_tab.iaf1.kanal_tilstand shift (-2) shift 2 + 3;
  7 11673                     if kanal_tab.iaf1.kanal_id2=0 then
  7 11674                       kanal_tab.iaf1.kanal_id2:= 12 shift 20 + nr;
  7 11675                   end;
  6 11676                   d.opref.data(5):= 0;
  6 11677     
  6 11677                   res:= 3;
  6 11678                 end;
  5 11679     
  5 11679                 d.opref.resultat:= res;
  5 11680                 signalch(d.opref.retur,opref,d.opref.optype);
  5 11681     \f

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

  2 11787     message procedure radio_ind side 1 - 810521/hko;
  2 11788     
  2 11788       procedure radio_ind(op);
  2 11789           value           op;
  2 11790           integer         op;
  2 11791         begin
  3 11792           integer array field op_ref,ref,io_opref;
  3 11793           integer ac, lgd, ttyp, ptyp, pnum, pos, tegn, bs, b_pt, b_pn,
  3 11794             antal_sendt, antal_spec, sum, csum, i, j, k, filref, zno;
  3 11795           integer array typ, val(1:6), answ, tlgr(1:32);
  3 11796           integer array field spec;
  3 11797           real field rf;
  3 11798           long array field laf;
  3 11799     
  3 11799           procedure skriv_radio_ind(zud,omfang);
  3 11800             value                       omfang;
  3 11801             zone                    zud;
  3 11802             integer                     omfang;
  3 11803             begin integer ii;
  4 11804               disable ii:=write(zud,"nl",1,<:+++ radio-ind ::>);
  4 11805               if omfang > 0 then
  4 11806               disable begin integer x; long array field tx;
  5 11807                 tx:= 0;
  5 11808                 trap(slut);
  5 11809                 write(zud,"nl",1,
  5 11810                   <:  op-ref:      :>,op_ref,"nl",1,
  5 11811                   <:  ref:         :>,ref,"nl",1,
  5 11812                   <:  io-opref:    :>,io_opref,"nl",1,
  5 11813                   <:  ac:          :>,ac,"nl",1,
  5 11814                   <:  lgd:         :>,lgd,"nl",1,
  5 11815                   <:  ttyp:        :>,ttyp,"nl",1,
  5 11816                   <:  ptyp:        :>,ptyp,"nl",1,
  5 11817                   <:  pnum:        :>,pnum,"nl",1,
  5 11818                   <:  pos:         :>,pos,"nl",1,
  5 11819                   <:  tegn:        :>,tegn,"nl",1,
  5 11820                   <:  bs:          :>,bs,"nl",1,
  5 11821                   <:  b-pt:        :>,b_pt,"nl",1,
  5 11822                   <:  b-pn:        :>,b_pn,"nl",1,
  5 11823                   <:  antal-sendt: :>,antal_sendt,"nl",1,
  5 11824                   <:  antal-spec:  :>,antal_spec,"nl",1,
  5 11825                   <:  sum:         :>,sum,"nl",1,
  5 11826                   <:  csum:        :>,csum,"nl",1,
  5 11827                   <:  i:           :>,i,"nl",1,
  5 11828                   <:  j:           :>,j,"nl",1,
  5 11829                   <:  k:           :>,k,"nl",1,
  5 11830                   <:  filref       :>,filref,"nl",1,
  5 11831                   <:  zno:         :>,zno,"nl",1,
  5 11832                   <:  answ:        :>,answ.tx,"nl",1,
  5 11833                   <:  tlgr:        :>,tlgr.tx,"nl",1,
  5 11834                   <:  spec:        :>,spec,"nl",1);
  5 11835                 trap(slut);
  5 11836     slut:
  5 11837               end; <*disable*>
  4 11838             end skriv_radio_ind;
  3 11839     \f

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

  6 11911     message procedure indsæt_opkald side 1a- 820301/hko;
  6 11912     
  6 11912               if d.vt_op.resultat=18<*bus i kø*> and type=2<*nød*> then
  6 11913               begin
  7 11914                 ref:=første_opkald;
  7 11915                 tilst:=-1;
  7 11916                 while ref<>0 and tilst=-1 do
  7 11917                 begin
  8 11918                   if opkaldskø.ref(2) extract 14 = bus extract 14 then
  8 11919                   begin <* udtag normalopkald *>
  9 11920                     næste:=opkaldskø.ref(1);
  9 11921                     forrige:=næste shift(-12);
  9 11922                     næste:=næste extract 12;
  9 11923                     if forrige<>0 then
  9 11924                       opkaldskø.forrige(1):=
  9 11925                         opkaldskø.forrige(1) shift(-12) shift 12 +næste
  9 11926                     else
  9 11927                       første_opkald:=næste;
  9 11928                     if næste<>0 then
  9 11929                       opkaldskø.næste(1):=
  9 11930                         opkaldskø.næste(1) extract 12 + forrige shift 12
  9 11931                     else
  9 11932                       sidste_opkald:=forrige;
  9 11933                     opkaldskø.ref(1):=første_frie_opkald;
  9 11934                     første_frie_opkald:=ref;
  9 11935                     opkaldskø_ledige:=opkaldskø_ledige +1;
  9 11936                     tilst:=0;
  9 11937                   end
  8 11938                   else
  8 11939                     ref:=opkaldskø.ref(1) extract 12;
  8 11940                 end; <*while*>
  7 11941                 if tilst=0 then
  7 11942                   d.vt_op.resultat:=3;
  7 11943               end; <*nødopkald bus i kø*>
  6 11944     \f

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

  7 11994     message procedure indsæt_opkald side 3 - 810601/hko;
  7 11995     
  7 11995                 <* d.vt_op.resultat <> 3 *>
  7 11996     
  7 11996                 res:= d.vt_op.resultat;
  7 11997                 if res = 10 then
  7 11998                   fejlreaktion(20<*mobilopkald, bus *>,bus,
  7 11999                     <:er ikke i bustabel:>,1)
  7 12000                 else
  7 12001     <*+4*>      if res <> 14 and res <> 18 then
  7 12002                   fejlreaktion(19<*radio*>,res,<:busreservationsresultat:>,1);
  7 12003     <*-4*>
  7 12004                 ;
  7 12005               end;
  6 12006               signalbin(bs_opkaldskø_adgang);
  6 12007               signal_ch(cs_vt_adgang,vt_op,gen_optype or vt_optype);
  6 12008             end
  5 12009             else
  5 12010               res:= -2; <*timeout for cs_vt_adgang*>
  5 12011           end;
  4 12012           indsæt_opkald:= res;
  4 12013         end indsæt_opkald;
  3 12014     \f

  3 12014     message procedure afvent_telegram side 1 - 880901/cl;
  3 12015     
  3 12015     integer procedure afvent_telegram(tlgr,lgd,ttyp,ptyp,pnum);
  3 12016       integer array                   tlgr;
  3 12017       integer                              lgd,ttyp,ptyp,pnum;
  3 12018     begin
  4 12019       integer i, pos, tegn, ac, sum, csum;
  4 12020     
  4 12020       pos:= 1;
  4 12021       lgd:= 0;
  4 12022       ttyp:= 'Z';
  4 12023     <*V*> ac:= afvent_radioinput(z_fr_in,tlgr,false);
  4 12024       if ac >= 0 then
  4 12025       begin
  5 12026         lgd:= 1;
  5 12027         while læstegn(tlgr,lgd,tegn)<>0 do ;
  5 12028         lgd:= lgd-2;
  5 12029         if lgd >= 3 then
  5 12030         begin
  6 12031           i:= 1;
  6 12032           ttyp:= læstegn(tlgr,i,tegn);
  6 12033           ptyp:= læstegn(tlgr,i,tegn) - '@';
  6 12034           pnum:= læstegn(tlgr,i,tegn) - '@';
  6 12035         end
  5 12036         else ac:= 6; <* for kort telegram - retransmitter *>
  5 12037       end;
  4 12038     
  4 12038       afvent_telegram:= ac;
  4 12039     end;
  3 12040     \f

  3 12040     message procedure b_answ side 1 - 880901/cl;
  3 12041     
  3 12041     procedure b_answ(answ,ht,spec,more,ac);
  3 12042       value               ht,     more,ac;
  3 12043       integer array  answ,   spec;
  3 12044       boolean                     more;
  3 12045       integer             ht,          ac;
  3 12046     begin
  4 12047       integer pos, i, sum, tegn;
  4 12048     
  4 12048       pos:= 1;
  4 12049       skrivtegn(answ,pos,'B');
  4 12050       skrivtegn(answ,pos,if more then 'B' else ' ');
  4 12051       skrivtegn(answ,pos,ac+'@');
  4 12052       skrivtegn(answ,pos,spec(1) shift (-18) extract 6+'@');
  4 12053       skrivtegn(answ,pos,spec(1) shift (-12) extract 6+'@');
  4 12054       skrivtegn(answ,pos,'@');
  4 12055       skrivtegn(answ,pos,spec(1) shift (-8) extract 4+'@');
  4 12056       skrivtegn(answ,pos,spec(1) extract 8+'@');
  4 12057       for i:= 1 step 1 until spec(1) extract 8 do
  4 12058         if spec(1+i)=0 then skrivtegn(answ,pos,'@')
  4 12059         else
  4 12060         begin
  5 12061           skrivtegn(answ,pos,'D');
  5 12062           anbringtal(answ,pos,spec(1+i),-4);
  5 12063         end;
  4 12064       for i:= 1 step 1 until 4 do
  4 12065         skrivtegn(answ,pos,'@');
  4 12066       skrivtegn(answ,pos,ht+'@');
  4 12067       skrivtegn(answ,pos,'@');
  4 12068     
  4 12068       i:= 1; sum:= 0;
  4 12069       while i < pos do
  4 12070         sum:= (sum + læstegn(answ,i,tegn)) mod 256;
  4 12071       skrivtegn(answ,pos,(sum shift (-4)) extract 4 + '@');
  4 12072       skrivtegn(answ,pos,sum extract 4 + '@');
  4 12073       repeat skrivtegn(answ,pos,0) until (pos mod 6)=1;
  4 12074     end;
  3 12075     \f

  3 12075     message procedure ann_opkald side 1 - 881108/cl;
  3 12076     
  3 12076     integer procedure ann_opkald(vogn,omr);
  3 12077       value                      vogn,omr;
  3 12078       integer                    vogn,omr;
  3 12079     begin
  4 12080       integer array field vt_op,ref,næste,forrige;
  4 12081       integer res, t, i, o;
  4 12082     
  4 12082       waitch(cs_vt_adgang,vt_op,true,-1);
  4 12083       res:= -1;
  4 12084       wait(bs_opkaldskø_adgang);
  4 12085       ref:= første_nødopkald;
  4 12086       if ref <> 0 then
  4 12087         t:= 2
  4 12088       else
  4 12089       begin
  5 12090         ref:= første_opkald;
  5 12091         t:= if ref<>0 then 1 else 0;
  5 12092       end;
  4 12093     
  4 12093       if t=0 then
  4 12094         res:= 19 <* kø tom *>
  4 12095       else
  4 12096       begin
  5 12097         while ref<>0 and res=(-1) do
  5 12098         begin
  6 12099           if vogn=opkaldskø.ref(2) extract 14 and
  6 12100               omr=opkaldskø.ref(5) extract 8
  6 12101           then
  6 12102             res:= 0
  6 12103           else
  6 12104           begin
  7 12105             ref:= opkaldskø.ref(1) extract 12;
  7 12106             if ref=0 and t=2 then
  7 12107             begin
  8 12108               ref:= første_opkald;
  8 12109               t:= if ref=0 then 0 else 1;
  8 12110             end;
  7 12111           end;
  6 12112         end; <*while*>
  5 12113     \f

  5 12113     message procedure ann_opkald side 2 - 881108/cl;
  5 12114     
  5 12114         if ref<>0 then
  5 12115         begin
  6 12116           start_operation(vt_op,401,cs_radio_ind,17);
  6 12117           d.vt_op.data(1):= vogn;
  6 12118           d.vt_op.data(4):= omr;
  6 12119           signalch(cs_vt,vt_op,gen_optype or vt_optype);
  6 12120           waitch(cs_radio_ind,vt_op,vt_optype,-1);
  6 12121     
  6 12121           o:= opkaldskø.ref(4) extract 8;
  6 12122           næste:= opkaldskø.ref(1);
  6 12123           forrige:= næste shift (-12);
  6 12124           næste:= næste extract 12;
  6 12125           if forrige<>0 then
  6 12126             opkaldskø.forrige(1):= opkaldskø.forrige(1) shift (-12) shift 12
  6 12127                                    + næste
  6 12128           else
  6 12129           if t=2 then første_nødopkald:= næste
  6 12130           else første_opkald:= næste;
  6 12131     
  6 12131           if næste<>0 then
  6 12132             opkaldskø.næste(1):= opkaldskø.næste(1) extract 12
  6 12133                                  + forrige shift 12
  6 12134           else
  6 12135           if t=2 then sidste_nødopkald:= forrige
  6 12136           else sidste_opkald:= forrige;
  6 12137     
  6 12137           opkaldskø.ref(1):= første_frie_opkald;
  6 12138           første_frie_opkald:= ref;
  6 12139           opkaldskø_ledige:= opkaldskø_ledige + 1;
  6 12140           if t=2 then nødopkald_brugt:= nødopkald_brugt - 1;
  6 12141     
  6 12141           if -, læsbit_ia(operatør_maske,o) or o=0 then
  6 12142             tofrom(opkaldsflag,alle_operatører,op_maske_lgd)
  6 12143           else
  6 12144           begin
  7 12145             sætbit_ia(opkaldsflag,o,1);
  7 12146           end;
  6 12147           signalbin(bs_mobilopkald);
  6 12148         end;
  5 12149       end;
  4 12150     
  4 12150       signalbin(bs_opkaldskø_adgang);
  4 12151       signalch(cs_vt_adgang, vt_op, true);
  4 12152       ann_opkald:= res;
  4 12153     end;
  3 12154     \f

  3 12154     message procedure frigiv_id side 1 - 881114/cl;
  3 12155     
  3 12155     integer procedure frigiv_id(id,omr);
  3 12156       value                     id,omr;
  3 12157       integer                   id,omr;
  3 12158     begin
  4 12159       integer array field vt_op;
  4 12160     
  4 12160       if id shift (-22) < 3 and omr > 2 then
  4 12161       begin
  5 12162         waitch(cs_vt_adgang,vt_op,true,-1);
  5 12163         start_operation(vt_op,401,cs_radio_ind,
  5 12164           if id shift (-22) = 2 then 18 else 17);
  5 12165         d.vt_op.data(1):= id;
  5 12166         d.vt_op.data(4):= omr;
  5 12167         signalch(cs_vt,vt_op,vt_optype or gen_optype);
  5 12168         waitch(cs_radio_ind,vt_op,vt_optype,-1);
  5 12169         frigiv_id:= d.vt_op.resultat;
  5 12170         signalch(cs_vt_adgang,vt_op,true);
  5 12171       end;
  4 12172     end;
  3 12173     \f

  3 12173     message procedure radio_ind side 2 - 810524/hko;
  3 12174         trap(radio_ind_trap);
  3 12175         laf:= 0;
  3 12176         stack_claim((if cm_test then 200 else 150) +135+75);
  3 12177     
  3 12177     <*+2*>if testbit32 and overvåget or testbit28 then
  3 12178             skriv_radio_ind(out,0);
  3 12179     <*-2*>
  3 12180           answ.laf(1):= long<:<'nl'>:>;
  3 12181           io_opref:= op;
  3 12182     
  3 12182           repeat
  3 12183             ac:= afvent_telegram(tlgr,lgd,ttyp,ptyp,pnum);
  3 12184             pos:= 4;
  3 12185             if ac = 0 then
  3 12186             begin
  4 12187     \f

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

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

  8 12302     message procedure radio_ind side 5 - 881107/cl;
  8 12303                     end
  7 12304                     else
  7 12305                     begin
  8 12306                       integer sig_type;
  8 12307     
  8 12307                       ac:= 0;
  8 12308                       antal_spec:= d.opref.data(4);
  8 12309                       filref:= d.opref.data(5);
  8 12310                       spec:= d.opref.data(6);
  8 12311                       if antal_spec>0 then
  8 12312                       begin
  9 12313                         antal_spec:= antal_spec-1;
  9 12314                         if filref<>0 then
  9 12315                         begin
 10 12316                           læsfil(filref,1,zno);
 10 12317                           b_pt:= fil(zno).spec(1) shift (-12);
 10 12318                           sig_type:= fil(zno).spec(1) shift (-8) extract 4;
 10 12319                           b_answ(answ,d.opref.data(3),fil(zno).spec,
 10 12320                             antal_spec>0,ac);
 10 12321                           spec:= spec + (fil(zno).spec(1) extract 8 + 1)*2;
 10 12322                         end
  9 12323                         else
  9 12324                         begin
 10 12325                           b_pt:= d.opref.spec(1) shift (-12);
 10 12326                           sig_type:= d.opref.spec(1) shift (-8) extract 4;
 10 12327                           b_answ(answ,d.opref.data(3),d.opref.spec,
 10 12328                             antal_spec>0,ac);
 10 12329                           spec:= spec + d.opref.spec(1) extract 8*2 + 2;
 10 12330                         end;
  9 12331      
  9 12331                         <* send answer *>
  9 12332     <*+2*>              if (testbit36 or testbit38) and overvåget then
  9 12333                         disable begin
 10 12334                           write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf);
 10 12335                           outchar(zrl,'nl');
 10 12336                         end;
  9 12337     <*-2*>
  9 12338                         write(z_fr_out,"nl",1,answ.laf,"cr",1);
  9 12339                         disable setposition(z_fr_out,0,0);
  9 12340                         if ac<>0 then
  9 12341                         begin
 10 12342                           antal_spec:= 0;
 10 12343                           ac:= -1;
 10 12344                         end
  9 12345                         else
  9 12346                         begin
 10 12347                           for i:= 1 step 1 until max_antal_områder do
 10 12348                           if område_id(i,2)=b_pt then
 10 12349                           begin
 11 12350                             j:= (if b_pt=3 and sig_type=2 then 0 else i);
 11 12351                             if sætbiti(d.opref.data(7),j,1)=0 then 
 11 12352                               d.opref.resultat:= d.opref.resultat + 1;
 11 12353                           end;
 10 12354                         end;
  9 12355                       end;
  8 12356     \f

  8 12356     message procedure radio_ind side 6 - 881107/cl;
  8 12357     
  8 12357                       <* afvent nyt telegram *>
  8 12358                       d.opref.data(4):= antal_spec;
  8 12359                       d.opref.data(6):= spec;
  8 12360                       ac:= -1;
  8 12361                       systime(1,0.0,d.opref.tid);
  8 12362     <*+2*>            if testbit37 and overvåget then
  8 12363                       disable begin
  9 12364                         skriv_radio_ind(out,0);
  9 12365                         write(out,<:radio-ind B-op retur på cs:>,<<d>,cs_radio_ind);                    skriv_op(out,opref);
  9 12366                         ud;
  9 12367                       end;
  8 12368     <*-2*>
  8 12369                       signalch(cs_radio_ind,opref,d.opref.optype);
  8 12370                     end;
  7 12371                   end
  6 12372                   else ac:= 2;
  6 12373                 end;
  5 12374                 if ac > 0 then
  5 12375                 begin
  6 12376                   for i:= 1 step 1 until 6 do val(i):= 0;
  6 12377                   b_answ(answ,0,val,false,ac);
  6 12378     <*+2*>
  6 12379                   if (testbit36 or testbit38) and overvåget then
  6 12380                   disable begin
  7 12381                     write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf);
  7 12382                     outchar(zrl,'nl');
  7 12383                   end;
  6 12384     <*-2*>
  6 12385                   write(z_fr_out,"nl",1,answ.laf,"cr",1);
  6 12386                   disable setposition(z_fr_out,0,0);
  6 12387                   ac:= -1;
  6 12388                 end;
  5 12389     \f

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

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

  5 12552     message procedure radio_ind side 9 - 881107/cl;
  5 12553               end <* ttyp = D *>
  4 12554               else
  4 12555               if ttyp='H' then
  4 12556               begin
  5 12557                 integer htyp;
  5 12558     
  5 12558                 htyp:= læstegn(tlgr,7+læstegn(tlgr,6,tegn)-'@',tegn);
  5 12559     
  5 12559                 if htyp='A' then
  5 12560                 begin <*mobilopkald*>
  6 12561                  if (ptyp=2 and pnum<>2) or (ptyp=3 and
  6 12562                    (pnum<1 or pnum>max_antal_radiokanaler)) then
  6 12563                      ac:= 1
  6 12564                  else
  6 12565                  begin
  7 12566                   b_pt:= læstegn(tlgr,5,tegn)-'@';
  7 12567                   if læstegn(tlgr,6,tegn)='D' then
  7 12568                   begin <*teknisk nr. i telegram*>
  8 12569                     b_pn:= 0;
  8 12570                     for i:= 1 step 1 until 4 do
  8 12571                       b_pn:= b_pn*10 + læstegn(tlgr,6+i,tegn)-'0';
  8 12572                   end
  7 12573                   else b_pn:= 0;
  7 12574                   bs:= læstegn(tlgr,9+læstegn(tlgr,6,tegn)-'@',tegn)-'@'+1;
  7 12575                                           <* opkaldstype *>
  7 12576                   j:= (if ptyp=2 then pabx_id(pnum) else radio_id(pnum));
  7 12577                   if j>0 then
  7 12578                   begin
  8 12579                     if bs=10 then
  8 12580                       ann_opkald(b_pn,j)
  8 12581                     else
  8 12582                       indsæt_opkald(b_pn,bs,j,if b_pt>1 then 1 else 0);
  8 12583                     ac:= 0;
  8 12584                   end else ac:= 1;
  7 12585                  end;
  6 12586     \f

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

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

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

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

  5 12853     message procedure radio_ind side 14 - 881107/cl;
  5 12854               end
  4 12855               else
  4 12856               if ttyp='L' then
  4 12857               begin
  5 12858                 ac:= 0;
  5 12859     <****** RADIO-INFO meddelelser til hovedkonsol afhængig af testbi21 ******>
  5 12860                if testbit21 then
  5 12861                begin
  6 12862                 waitch(cs_radio_pulje,opref,true,-1);
  6 12863                 startoperation(opref,401,cs_radio_pulje,23);
  6 12864                 i:= 1;
  6 12865                 hægtstring(d.opref.data,i,<:radio-info: :>);
  6 12866                 j:= 4;
  6 12867                 while j<=lgd and i<(d.opref.opsize-data-2)//2*3 do
  6 12868                 begin
  7 12869                   skrivtegn(d.opref.data,i,læstegn(tlgr,j,tegn));
  7 12870                 end;
  6 12871                 repeat afsluttext(d.opref.data,i) until i mod 6 = 1;
  6 12872                 signalch(cs_io,opref,gen_optype or rad_optype);
  6 12873                end; <*testbit21*>
  5 12874               end
  4 12875               else
  4 12876               if ttyp='Z' then
  4 12877               begin
  5 12878     <*+2*>      if (testbit36 or testbit38) and overvåget then
  5 12879                 disable begin
  6 12880                   write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf); 
  6 12881                   outchar(zrl,'nl');
  6 12882                 end;
  5 12883     <*-2*>
  5 12884                 write(z_fr_out,"nl",1,answ.laf,"cr",1);
  5 12885                 disable setposition(z_fr_out,0,0);
  5 12886                 ac:= -1;
  5 12887               end
  4 12888               else
  4 12889                 ac:= 1;
  4 12890             end; <* telegram modtaget ok *>
  3 12891     \f

  3 12891     message procedure radio_ind side 15 - 881107/cl;
  3 12892             if ac>=0 then
  3 12893             begin
  4 12894               pos:= i:= 1; sum:= 0;
  4 12895               skrivtegn(answ,pos,ttyp);
  4 12896               skrivtegn(answ,pos,' ');
  4 12897               skrivtegn(answ,pos,ac+'@');
  4 12898               while i<pos do
  4 12899                 sum:= (sum+læstegn(answ,i,tegn)) mod 256;
  4 12900               skrivtegn(answ,pos, sum shift (-4) extract 4 + '@');
  4 12901               skrivtegn(answ,pos, sum extract 4 + '@');
  4 12902               repeat afsluttext(answ,pos) until pos mod 6 = 1;
  4 12903     <*+2*>    if (testbit36 or testbit38) and overvåget then
  4 12904               disable begin
  5 12905                 write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf); 
  5 12906                 outchar(zrl,'nl');
  5 12907               end;
  4 12908     <*-2*>
  4 12909               write(z_fr_out,"nl",1,answ.laf,"cr",1);
  4 12910               disable setposition(z_fr_out,0,0);
  4 12911               ac:= -1;
  4 12912             end;
  3 12913       
  3 12913             typ(1):= 0;
  3 12914             typ(2):= 1 shift 18 + 4 shift 12 + tid; <* lt real tid *>
  3 12915             rf:= 4;
  3 12916             systime(1,0.0,val.rf);
  3 12917             val.rf:= val.rf - 30.0;
  3 12918             typ(3):= -1;
  3 12919             repeat
  3 12920               getch(cs_radio_ind,opref,true,typ,val);
  3 12921               if opref>0 then
  3 12922               begin
  4 12923                 d.opref.resultat:= 53; <*annuleret*>
  4 12924                 signalch(d.opref.retur,opref,d.opref.optype);
  4 12925               end;
  3 12926             until opref=0;
  3 12927     
  3 12927           until false;
  3 12928     
  3 12928     radio_ind_trap:
  3 12929         
  3 12929           disable skriv_radio_ind(zbillede,1);
  3 12930       
  3 12930         end radio_ind;
  2 12931     \f

  2 12931     message procedure radio_ud side 1 - 820301/hko;
  2 12932     
  2 12932       procedure radio_ud(op);
  2 12933           value          op;
  2 12934           integer        op;
  2 12935         begin
  3 12936           integer array field opref,io_opref;
  3 12937           integer opgave, kode, pos, tegn, i, sum, rc, svar_status;
  3 12938           integer array answ, tlgr(1:32);
  3 12939           long array field laf;
  3 12940     
  3 12940           procedure skriv_radio_ud(z,omfang);
  3 12941             value                    omfang;
  3 12942             zone                   z;
  3 12943             integer                  omfang;
  3 12944             begin integer i1;
  4 12945               disable i1:= write(z,"nl",1,<:+++ radio-ud  ::>);
  4 12946               if omfang > 0 then
  4 12947               disable begin real x; long array field tx;
  5 12948                 tx:= 0;
  5 12949                 trap(slut);
  5 12950                 write(z,"nl",1,
  5 12951                     <:  opref:        :>,opref,"nl",1,
  5 12952                     <:  io-opref:     :>,io_opref,"nl",1,
  5 12953                     <:  opgave:       :>,opgave,"nl",1,
  5 12954                     <:  kode:         :>,kode,"nl",1,
  5 12955                     <:  pos:          :>,pos,"nl",1,
  5 12956                     <:  tegn:         :>,tegn,"nl",1,
  5 12957                     <:  i:            :>,i,"nl",1,
  5 12958                     <:  sum:          :>,sum,"nl",1,
  5 12959                     <:  rc:           :>,rc,"nl",1,
  5 12960                     <:  svar-status:  :>,svar_status,"nl",1,
  5 12961                     <:  tlgr:         ":>,tlgr.tx,<:":>,"nl",1,
  5 12962                     <:  answ:         ":>,answ.tx,<:":>,"nl",1,
  5 12963                     <::>);
  5 12964                skriv_coru(z,coru_no(402));
  5 12965     slut:
  5 12966              end; <*disable*>
  4 12967            end skriv_radio_ud;
  3 12968     
  3 12968           trap(radio_ud_trap);
  3 12969           laf:= 0;
  3 12970           stack_claim((if cm_test then 200 else 150) +35+100);
  3 12971     
  3 12971     <*+2*>if testbit32 and overvåget  or testbit28 then
  3 12972             skriv_radio_ud(out,0);
  3 12973     <*-2*>
  3 12974     
  3 12974           io_opref:= op;
  3 12975     \f

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

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

  4 13127     message procedure radio_ud side 5 - 881107/cl;
  4 13128     
  4 13128     radio_ud_check:
  4 13129                 rc:= rc+1;
  4 13130                 if -3<=svar_status and svar_status< -1 then
  4 13131                 disable begin
  5 13132                   write(z_rf_out,<:<'nl'>Z@@MJ<'cr'>:>);
  5 13133                   setposition(z_rf_out,0,0);
  5 13134     <*+2*>        if (testbit36 or testbit39) and overvåget then
  5 13135                   begin
  6 13136                     write(zrl,<<zd dd dd.dd >,now,<:rf-tlgr: Z@@MJ:>);
  6 13137                     outchar(zrl,'nl');
  6 13138                   end;
  5 13139     <*-2*>
  5 13140                 end
  4 13141                 else
  4 13142                 if svar_status=6 or svar_status=(-4) or svar_status=(-1) then
  4 13143                 disable begin
  5 13144                   write(z_rf_out,"nl",1,tlgr.laf,"cr",1);
  5 13145                   setposition(z_rf_out,0,0);
  5 13146     <*+2*>        if (testbit36 or testbit39) and overvåget then
  5 13147                   begin
  6 13148                     write(zrl,<<zd dd dd.dd >,now,<:rf-tlgr: :>,
  6 13149                       tlgr.laf,<: (repeat):>); outchar(zrl,'nl');
  6 13150                   end;
  5 13151     <*-2*>
  5 13152                 end
  4 13153                 else
  4 13154                 if svar_status=0 and opref<>0 then
  4 13155                   d.opref.resultat:= 0
  4 13156                 else
  4 13157                 if opref<>0 then
  4 13158                   d.opref.resultat:= 31;
  4 13159               until svar_status=0 or rc>3;
  4 13160             end;
  3 13161             if opref<>0 then
  3 13162             begin
  4 13163               if svar_status<>0 and rc>3 then
  4 13164                 d.opref.resultat:= 53; <* annulleret *>
  4 13165               signalch(d.opref.retur,opref,d.opref.optype);
  4 13166               opref:= 0;
  4 13167             end;
  3 13168           until false;
  3 13169     
  3 13169     radio_ud_trap:
  3 13170     
  3 13170           disable skriv_radio_ud(zbillede,1);
  3 13171     
  3 13171         end radio_ud;
  2 13172     \f

  2 13172     message procedure radio_medd_opkald side 1 - 810610/hko;
  2 13173     
  2 13173       procedure radio_medd_opkald;
  2 13174         begin
  3 13175           integer array field ref,op_ref;
  3 13176           integer i;
  3 13177     
  3 13177           procedure skriv_radio_medd_opkald(z,omfang);
  3 13178             value                             omfang;
  3 13179             zone                            z;
  3 13180             integer                           omfang;
  3 13181             begin integer x;
  4 13182               disable x:= write(z,"nl",1,<:+++ radio-medd-opkald:>);
  4 13183               write(z,"sp",26-x);
  4 13184               if omfang > 0 then
  4 13185               disable begin
  5 13186                 trap(slut);
  5 13187                 write(z,"nl",1,
  5 13188                   <:  ref:    :>,ref,"nl",1,
  5 13189                   <:  opref:  :>,op_ref,"nl",1,
  5 13190                   <:  i:      :>,i,"nl",1,
  5 13191                   <::>);
  5 13192                 skriv_coru(z,abs curr_coruno);
  5 13193     slut:
  5 13194               end;<*disable*>
  4 13195             end skriv_radio_medd_opkald;
  3 13196     
  3 13196           trap(radio_medd_opkald_trap);
  3 13197     
  3 13197           stack_claim((if cm_test then 200 else 150) +1);
  3 13198     
  3 13198     <*+2*>if testbit32 and overvåget or testbit28 then
  3 13199             disable skriv_radio_medd_opkald(out,0);
  3 13200     <*-2*>
  3 13201     \f

  3 13201     message procedure radio_medd_opkald side 2 - 820301/hko;
  3 13202     
  3 13202           repeat
  3 13203     
  3 13203     <*V*>   wait(bs_mobil_opkald);
  3 13204     <*V*>   wait_ch(cs_radio_medd,op_ref,genoptype or rad_optype,-1);
  3 13205     <*V*>   wait(bs_opkaldskø_adgang);
  3 13206     
  3 13206             ref:= første_nød_opkald;
  3 13207             while ref <> 0 do <* meld ikke meldt nødopkald til io *>
  3 13208             begin
  4 13209               i:= opkaldskø.ref(2);
  4 13210               if i < 0 then
  4 13211               begin
  5 13212                 <* nødopkald ikke meldt *>
  5 13213     
  5 13213                 start_operation(op_ref,403,cs_radio_medd,45<*nødop.modt.*>);
  5 13214                 d.op_ref.data(1):= <* vogn_id *>
  5 13215                   if opkaldskø.ref(3)<>0 then opkaldskø.ref(3) else i extract 22;
  5 13216                 opkaldskø.ref(2):= i extract 22;
  5 13217                 d.op_ref.data(2):= opkaldskø.ref(4) shift(-12); <* ttmm *>
  5 13218                 d.op_ref.data(3):= opkaldskø.ref(5) extract 20;
  5 13219                 i:= op_ref;
  5 13220     <*+2*>      if testbit35 and overvåget then
  5 13221                 disable begin
  6 13222                   write(out,"nl",1,<:radio nød-medd:>);
  6 13223                   skriv_op(out,op_ref);
  6 13224                   ud;
  6 13225                 end;
  5 13226     <*-2*>
  5 13227                 signal_ch(cs_io,op_ref,gen_optype or rad_optype);
  5 13228     <*V*>       wait_ch(cs_radio_medd,op_ref,rad_optype,-1);
  5 13229     <*+4*>      if i <> op_ref then
  5 13230                   fejlreaktion(11<*fremmed post*>,i,<:radio io/medd:>,0);
  5 13231     <*-4*>
  5 13232               end;<*nødopkald ikke meldt*>
  4 13233     
  4 13233               ref:= opkaldskø.ref(1) extract 12;
  4 13234             end; <* melding til io *>
  3 13235     \f

  3 13235     message procedure radio_medd_opkald side 3 - 820304/hko;
  3 13236     
  3 13236             start_operation(op_ref,403,cs_radio_medd,
  3 13237                             40<*opdater opkaldskøbill*>);
  3 13238             signal_bin(bs_opkaldskø_adgang);
  3 13239     <*+2*>  if testbit35 and overvåget then
  3 13240             disable begin
  4 13241               write(out,"nl",1,<:radio opdater opkaldskø-billede:>);
  4 13242               skriv_op(out,op_ref);
  4 13243               write(out,       <:opkaldsflag: :>,"nl",1);
  4 13244               outintbits_ia(out,opkaldsflag,1,op_maske_lgd//2);
  4 13245               write(out,"nl",1,<:kanalflag:   :>,"nl",1);
  4 13246               outintbits_ia(out,kanalflag,1,op_maske_lgd//2);
  4 13247               write(out,"nl",1,<:samtaleflag: :>,"nl",1);
  4 13248               outintbits_ia(out,samtaleflag,1,op_maske_lgd//2);
  4 13249               ud;
  4 13250             end;
  3 13251     <*-2*>
  3 13252             signal_ch(cs_op,op_ref,gen_optype or rad_optype);
  3 13253     
  3 13253           until false;
  3 13254     
  3 13254     radio_medd_opkald_trap:
  3 13255     
  3 13255           disable skriv_radio_medd_opkald(zbillede,1);
  3 13256     
  3 13256         end radio_medd_opkald;
  2 13257     \f

  2 13257     message procedure radio_adm side 1 - 820301/hko;
  2 13258     
  2 13258       procedure radio_adm(op);
  2 13259       value               op;
  2 13260       integer             op;
  2 13261         begin
  3 13262           integer array field opref, rad_op, iaf;
  3 13263           integer nr,i,j,k,res,opgave,tilst,operatør;
  3 13264     
  3 13264           procedure skriv_radio_adm(z,omfang);
  3 13265             value                 omfang;
  3 13266             zone                z;
  3 13267             integer               omfang;
  3 13268             begin integer i1;
  4 13269               disable i1:= write(z,"nl",1,<:+++ radio-adm:>);
  4 13270               write(z,"sp",26-i1);
  4 13271               if omfang > 0 then
  4 13272               disable begin real x;
  5 13273                 trap(slut);
  5 13274     \f

  5 13274     message procedure radio_adm side 2- 820301/hko;
  5 13275     
  5 13275                 write(z,"nl",1,
  5 13276                   <:  op_ref:    :>,op_ref,"nl",1,
  5 13277                   <:  iaf:       :>,iaf,"nl",1,
  5 13278                   <:  rad-op:    :>,rad_op,"nl",1,
  5 13279                   <:  nr:        :>,nr,"nl",1,
  5 13280                   <:  i:         :>,i,"nl",1,
  5 13281                   <:  j:         :>,j,"nl",1,
  5 13282                   <:  k:         :>,k,"nl",1,
  5 13283                   <:  tilst:     :>,tilst,"nl",1,
  5 13284                   <:  res:       :>,res,"nl",1,
  5 13285                   <:  opgave:    :>,opgave,"nl",1,
  5 13286                   <:  operatør:  :>,operatør,"nl",1);
  5 13287                 skriv_coru(z,coru_no(404));
  5 13288     slut:
  5 13289               end;<*disable*>
  4 13290             end skriv_radio_adm;
  3 13291     \f

  3 13291     message procedure radio_adm side 3 - 820304/hko;
  3 13292     
  3 13292           rad_op:= op;
  3 13293     
  3 13293           trap(radio_adm_trap);
  3 13294           stack_claim((if cm_test then 200 else 150) +50);
  3 13295     
  3 13295     <*+2*>if testbit32 and overvåget or testbit28 then
  3 13296             skriv_radio_adm(out,0);
  3 13297     <*-2*>
  3 13298     
  3 13298           pass;
  3 13299           if -,testbit22 then
  3 13300           begin
  4 13301             startoperation(rad_op,404,cs_radio_adm,'I' shift 12 + 60);
  4 13302             signalch(cs_radio_ud,rad_op,rad_optype);
  4 13303             waitch(cs_radio_adm,rad_op,rad_optype,-1);
  4 13304           end;
  3 13305           repeat
  3 13306             waitch(cs_radio_adm,opref,true,-1);
  3 13307     <*+2*>
  3 13308             if testbit33 and overvåget then
  3 13309             disable begin
  4 13310               skriv_radio_adm(out,0);
  4 13311               write(out,<: operation modtaget på cs:>,<<d>,cs_radio_adm);
  4 13312               skriv_op(out,opref);
  4 13313             end;
  3 13314     <*-2*>
  3 13315     
  3 13315             k:= d.op_ref.opkode extract 12;
  3 13316             opgave:= d.opref.opkode shift (-12);
  3 13317             nr:=operatør:=d.op_ref.data(1);
  3 13318     
  3 13318     <*+4*>  if (d.op_ref.optype and
  3 13319                   (gen_optype or io_optype or op_optype or vt_optype))
  3 13320               extract 12 = 0 then fejlreaktion(12<*operationstype*>,op_ref,
  3 13321                                     <:radio_adm:>,0);
  3 13322     <*-4*>
  3 13323             if k = 74 <* RA,I *> then
  3 13324             begin
  4 13325               startoperation(rad_op,404,cs_radio_adm,'I' shift 12 + 60);
  4 13326               signalch(cs_radio_ud,rad_op,rad_optype);
  4 13327               waitch(cs_radio_adm,rad_op,rad_optype,-1);
  4 13328               d.opref.resultat:= if d.rad_op.resultat=0 then 3
  4 13329                                  else d.rad_op.resultat;
  4 13330               signalch(d.opref.retur,opref,d.opref.optype);
  4 13331     \f

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

  5 13387     message procedure radio_adm side 5 - 820304/hko;
  5 13388     
  5 13388               end <*k = 5 / k = 77*>
  4 13389               else
  4 13390               begin <*k =1,2 eller 6 (IN,O - EK,O eller ST) *>
  5 13391                 res:= 3;
  5 13392                 for nr:= 1 step 1 until max_antal_kanaler do
  5 13393                 begin
  6 13394                   iaf:= (nr-1)*kanal_beskr_længde;
  6 13395                   if kanal_tab.iaf.kanal_tilstand shift (-16) = 
  6 13396                                                   op_talevej(operatør) then
  6 13397                   begin
  7 13398                     tilst:= kanal_tab.iaf.kanal_tilstand extract 2;
  7 13399                     if tilst <> 0 then
  7 13400                       res:= 16; <*skærm optaget*>
  7 13401                   end; <* kanal_tab(operatør) = operatør*>
  6 13402                 end;
  5 13403                 tofrom(opkaldsflag,alle_operatører,op_maske_lgd);
  5 13404                 sæt_bit_ia(opkaldsflag,operatør,k extract 1);
  5 13405                 signal_bin(bs_mobil_opkald);
  5 13406                 d.op_ref.resultat:= res;
  5 13407               end;<*k=1,2 eller 6 *>
  4 13408     
  4 13408     <*+2*>    if testbit35 and overvåget then
  4 13409               disable begin
  5 13410                 skriv_radio_adm(out,0);
  5 13411                 write(out,<: sender til :>,
  5 13412                   if k=5 or k=6 or k=77 or res > 3 then d.op_ref.retur
  5 13413                     else cs_op);
  5 13414                 skriv_op(out,op_ref);
  5 13415               end;
  4 13416     <*-2*>
  4 13417     
  4 13417               if k=5 or k=6 or k=77 or res > 3 then
  4 13418                 signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype)
  4 13419               else
  4 13420               begin <*k = (1 eller 2) og res = 3 *>
  5 13421                 d.op_ref.resultat:=0;
  5 13422                 signal_ch(cs_op,op_ref,d.op_ref.optype);
  5 13423               end;
  4 13424     \f

  4 13424     message procedure radio_adm side 6 - 816610/hko;
  4 13425     
  4 13425             end <*k=1,2,5 eller 6*>
  3 13426             else
  3 13427             if k=3 <*IN,R*> or k=4 <*EK,R*> then
  3 13428             begin
  4 13429               nr:= d.op_ref.data(1);
  4 13430               res:= 3;
  4 13431     
  4 13431               if nr<=3 then
  4 13432                 res:= 51 <* afvist *>
  4 13433               else
  4 13434               begin
  5 13435     
  5 13435                 <* gennemstilling af område *>
  5 13436                 j:= 1;
  5 13437                 for i:= 1 step 1 until max_antal_kanaler do
  5 13438                 begin
  6 13439                   if kanal_id(i) shift (-5) extract 3 = 3 and
  6 13440                      radio_id(kanal_id(i) extract 5) = nr then j:= i;
  6 13441                 end;
  5 13442                 nr:= j;
  5 13443                 iaf:= (nr-1)*kanalbeskrlængde;
  5 13444                 if læsbiti(kanal_tab.iaf.kanal_tilstand,11) == (k=4) then
  5 13445                 begin
  6 13446                   startoperation(radop,404,cs_radio_adm,'H' shift 12 + 60);
  6 13447                   d.rad_op.data(1):= 0;
  6 13448                   d.rad_op.data(2):= 'G'; <* gennemstil område *>
  6 13449                   d.rad_op.data(3):= kanal_id(nr) shift (-5) extract 3;
  6 13450                   d.rad_op.data(4):= kanal_id(nr) extract 5;
  6 13451                   d.rad_op.data(5):= k extract 1; <* set/slet gennemstilling *>
  6 13452                   signalch(cs_radio_ud,rad_op,rad_optype);
  6 13453                   waitch(cs_radio_adm,rad_op,rad_optype,-1);
  6 13454                   res:= d.rad_op.resultat;
  6 13455                   if res=0 then res:= 3;
  6 13456                   sætbiti(kanal_tab.iaf.kanal_tilstand,11,k extract 1);
  6 13457                   sætbiti(kanal_tab.iaf.kanal_tilstand,10,k extract 1);
  6 13458                 end;
  5 13459               end;
  4 13460               d.op_ref.resultat:=res;
  4 13461               signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  4 13462               tofrom(kanalflag,alle_operatører,op_maske_lgd);
  4 13463               signal_bin(bs_mobil_opkald);
  4 13464     \f

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

  2 13526     message vogntabel erklæringer side 1 - 820301/cl;
  2 13527     
  2 13527     integer cs_vt, cs_vt_adgang,cs_vt_logpool,cs_vt_opd,cs_vt_rap,
  2 13528             cs_vt_tilst,cs_vt_auto,cs_vt_grp,cs_vt_spring,vt_op,
  2 13529             cs_vt_log;
  2 13530     integer sidste_bus,sidste_linie_løb,tf_vogntabel,
  2 13531             max_antal_i_gruppe,tf_gruppedef,tf_gruppeidenter,tf_springdef,
  2 13532             vt_log_slicelgd;
  2 13533     integer array bustabel,bustabel1(0:max_antal_busser),
  2 13534                   linie_løb_tabel(0:max_antal_linie_løb),
  2 13535                   springtabel(1:max_antal_spring,1:3),
  2 13536                   gruppetabel(1:max_antal_grupper),
  2 13537                   gruppeopkald(1:max_antal_gruppeopkald,1:2), <* ident , filref *>
  2 13538                   vt_logop(1:2),
  2 13539                   vt_logdisc(1:4),
  2 13540                   vt_log_tail(1:10);
  2 13541     boolean array busindeks(-1:max_antal_linie_løb),
  2 13542                   bustilstand(-1:max_antal_busser),
  2 13543                   linie_løb_indeks(-1:max_antal_busser);
  2 13544     real array springtid,springstart(1:max_antal_spring);
  2 13545     real          vt_logstart;
  2 13546     integer field v_kode,v_bus,v_ll1,v_ll2;
  2 13547     integer array field v_tekst;
  2 13548     real field v_tid;
  2 13549     
  2 13549     zone zvtlog(128,1,stderror);
  2 13550     
  2 13550     \f

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

  2 13591     message procedure p_vogntabel side 1 - 820301/cl;
  2 13592     
  2 13592     procedure p_vogntabel(z);
  2 13593       zone z;
  2 13594     begin
  3 13595       integer i,b,s,o,t,li,lb,lø,g;
  3 13596       write(z,<:<10>***** udskrift af vogntabel *****<10>:>,
  3 13597         <:<10>max-antal-busser =:>,max_antal_busser,<:  sidste-bus =:>,
  3 13598         sidste_bus,<:<10>max-antal-linie-løb =:>,max_antal_linie_løb,
  3 13599         <:  sidste-linie-løb =:>,sidste_linie_løb,"nl",1);
  3 13600     
  3 13600       for i:= 1 step 1 until sidste_bus do
  3 13601       begin
  4 13602         b:= bustabel(i) extract 14;
  4 13603         g:= bustabel(i) shift (-14);
  4 13604         s:= bustabel1(i) shift (-23);
  4 13605         o:= bustabel1(i) extract 8;
  4 13606         t:= intg(bustilstand(i));
  4 13607         li:= linie_løb_tabel(linie_løb_indeks(i) extract 12);
  4 13608         lø:= li extract 7;
  4 13609         lb:= li shift (-7) extract 5;
  4 13610         lb:= if lb=0 then 32 else lb+64;
  4 13611         li:= li shift (-12) extract 10;
  4 13612         write(z,if i mod 2 = 1 then <:<10>:> else <:      :>,
  4 13613           <<zddd>,b,if s=1 then <:B:> else <: :>,"sp",1,
  4 13614           if g > 0 then string bpl_navn(g) else <:   :>,
  4 13615           ";",1,true,4,string område_navn(o),
  4 13616           <:(:>,<<-dd>,t,<:)  :>," ",if lb=' ' then 1 else 0,<<ddd>,
  4 13617           li,false add lb,if lb=' ' then 0 else 1,<:/:>,<<zd>,lø);
  4 13618       end;
  3 13619     end p_vogntabel;
  2 13620     \f

  2 13620     message procedure p_gruppetabel side 1 - 810531/cl;
  2 13621     
  2 13621     procedure p_gruppetabel(z);
  2 13622       zone                  z;
  2 13623     begin
  3 13624       integer i,nr,bogst;
  3 13625       boolean spc_gr;
  3 13626       write(z,"nl",2,<:*****  udskrift af gruppetabel  *****:>,"nl",1,
  3 13627         <:max-antal-grupper =:>,max_antal_grupper,
  3 13628         <:   max-antal-i-gruppe =:>,max_antal_i_gruppe,
  3 13629         <:   max-antal-gruppeopkald =:>,max_antal_gruppeopkald,"nl",2,
  3 13630         <:gruppetabel::>);
  3 13631       for i:= 1 step 1 until max_antal_grupper do
  3 13632         write(z,if i mod 10 = 1 then <:<10>:> else <:  :>,<<dd>,i,":",1,
  3 13633           if gruppetabel(i) <> 0 then "G" else " ",1,true,2,<<b>,
  3 13634           gruppetabel(i) extract 7);
  3 13635       write(z,"nl",2,<:gruppeopkald::>);
  3 13636       for i:= 1 step 1 until max_antal_gruppeopkald do
  3 13637       begin
  4 13638         write(z,if i mod 4 = 1 then <:<10>:> else <:   :>,<<dd>,i,":",1);
  4 13639         if gruppeopkald(i,1) = 0 then
  4 13640           write(z,"sp",11)
  4 13641         else
  4 13642         begin
  5 13643           spc_gr:= gruppeopkald(i,1) shift (-21) = 5;
  5 13644           if spc_gr then nr:= gruppeopkald(i,1) extract 7
  5 13645           else
  5 13646           begin
  6 13647             nr:= gruppeopkald(i,1) shift (-5) extract 10;
  6 13648             bogst:= gruppeopkald(i,1) extract 5 +'@';
  6 13649             if bogst = '@' then bogst:= 'sp';
  6 13650           end;
  5 13651           if spc_gr then
  5 13652             write(z,<:(G:>,<<d>,true,3,nr)
  5 13653           else
  5 13654             write(z,"(",1,<<ddd>,nr,false add bogst,1);
  5 13655           write(z,",",1,<<dddd>,gruppeopkald(i,2),")",1);
  5 13656         end;
  4 13657       end;
  3 13658     end p_gruppetabel;
  2 13659     \f

  2 13659     message procedure p_springtabel side 1 - 810519/cl;
  2 13660     
  2 13660     procedure p_springtabel(z);
  2 13661       zone                  z;
  2 13662     begin
  3 13663       integer li,bo,max,st,nr;
  3 13664       long indeks;
  3 13665       real t;
  3 13666     
  3 13666       write(z,"nl",2,<:***** springtabel *****:>,"nl",1,
  3 13667         <:max-antal-spring =:>,max_antal_spring,"nl",2,
  3 13668         <:nr spring-id max status   næste-tid:>,"nl",1);
  3 13669       for nr:= 1 step 1 until max_antal_spring do
  3 13670       begin
  4 13671         write(z,<<dd>,nr);
  4 13672         <* if springtabel(nr,1)<>0 then *>
  4 13673         begin
  5 13674           li:= springtabel(nr,1) shift (-5) extract 10;
  5 13675           bo:= springtabel(nr,1) extract 5;
  5 13676           if bo<>0 then bo:= bo + 'A' - 1;
  5 13677           indeks:= extend springtabel(nr,2) shift 24;
  5 13678           st:= extend springtabel(nr,3) shift (-12) extract 24;
  5 13679           max:= springtabel(nr,3) extract 12;
  5 13680           write(z,"sp",(bo=0) extract 1 + 2,<<ddd>,li,false add bo,1,<:.:>);
  5 13681           write(z,"sp",4-write(z,string indeks),<< dd>,max,<<    -dd>,st);
  5 13682           if springtid(nr)<>0.0 then
  5 13683             write(z,<< zddddd.dddd>,systime(4,springtid(nr),t)+t/1000000)
  5 13684           else
  5 13685             write(z,<<      d.d   >,0.0);
  5 13686           if springstart(nr)<>0.0 then
  5 13687             write(z,<< zddddd.dddd>,systime(4,springstart(nr),t)+t/1000000)
  5 13688           else
  5 13689             write(z,<<      d.d   >,0.0);
  5 13690         end
  4 13691     <*  else
  4 13692           write(z,<:  --------:>)*>;
  4 13693         write(z,"nl",1);
  4 13694       end;
  3 13695     end p_springtabel;
  2 13696     \f

  2 13696     message procedure find_busnr side 1 - 820301/cl;
  2 13697     
  2 13697     integer procedure findbusnr(ll_id,busnr,garage,tilst);
  2 13698       value   ll_id;
  2 13699       integer ll_id, busnr, garage, tilst;
  2 13700     begin
  3 13701       integer i,j;
  3 13702     
  3 13702       j:= binærsøg(sidste_linie_løb,
  3 13703             (linie_løb_tabel(i) - ll_id), i);
  3 13704       if j<>0 then <* linie/løb findes ikke *>
  3 13705       begin
  4 13706         find_busnr:= -1;
  4 13707         busnr:= 0;
  4 13708         garage:= 0;
  4 13709         tilst:= 0;
  4 13710       end
  3 13711       else
  3 13712       begin
  4 13713         busnr:= bustabel(busindeks(i) extract 12);
  4 13714         tilst:= intg(bustilstand(intg(busindeks(i))));
  4 13715         garage:= busnr shift (-14);
  4 13716         busnr:= busnr extract 14;
  4 13717         find_busnr:= busindeks(i) extract 12;
  4 13718       end;
  3 13719     end find_busnr;
  2 13720     \f

  2 13720     message procedure søg_omr_bus side 1 - 881027/cl;
  2 13721     
  2 13721     
  2 13721     integer procedure søg_omr_bus(bus,ll,gar,omr,sig,tilst);
  2 13722       value bus;
  2 13723       integer bus,ll,gar,omr,sig,tilst;
  2 13724     begin
  3 13725       integer i,j,nr,bu,bi,bl;
  3 13726     
  3 13726       j:= binærsøg(sidste_bus,((bustabel(bi) extract 14) - (bus extract 14)),bi);
  3 13727       nr:= -1;
  3 13728       if j=0 then
  3 13729       begin
  4 13730         bl:= bu:= bi;
  4 13731         while bl>1 and bustabel(bl-1) extract 14 = bus extract 14 do bl:=bl-1;
  4 13732         while bu<sidste_bus and
  4 13733           bustabel(bu+1) extract 14 = bus extract 14 do bu:= bu+1;
  4 13734     
  4 13734         if bl<>bu then
  4 13735         begin
  5 13736           <* flere busser med samme tekniske nr. omr skal passe *>
  5 13737           nr:= -2;
  5 13738           for bi:= bl step 1 until bu do
  5 13739             if bustabel1(bi) extract 8 = omr extract 8 then nr:= bi;
  5 13740         end
  4 13741         else
  4 13742           nr:= bi;
  4 13743       end;
  3 13744     
  3 13744       if nr<0 then
  3 13745       begin
  4 13746         <* bus findes ikke *>
  4 13747         ll:= gar:= tilst:= sig:= 0;
  4 13748       end
  3 13749       else
  3 13750       begin
  4 13751         tilst:= intg(bustilstand(nr));
  4 13752         gar:= bustabel(nr) shift (-14);
  4 13753         ll:= linie_løb_tabel( linie_løb_indeks(nr) extract 12 );
  4 13754         if omr=0 then omr:= bustabel1(nr) extract 8;
  4 13755         sig:= bustabel1(nr) shift (-23);
  4 13756       end;
  3 13757       søg_omr_bus:= nr;
  3 13758     end;
  2 13759     \f

  2 13759     message procedure find_linie_løb side 1 - 820301/cl;
  2 13760     
  2 13760     integer procedure find_linie_løb(busnr,linie_løb,garage,tilst);
  2 13761       value   busnr;
  2 13762       integer busnr, linie_løb, garage, tilst;
  2 13763     begin
  3 13764       integer i,j;
  3 13765     
  3 13765       j:= binærsøg(sidste_bus,((bustabel(i) extract 14) - (busnr extract 14)), i);
  3 13766     
  3 13766       if j<>0 then <* bus findes ikke *>
  3 13767       begin
  4 13768         find_linie_løb:= -1;
  4 13769         linie_løb:= 0;
  4 13770         garage:= 0;
  4 13771         tilst:= 0;
  4 13772       end
  3 13773       else
  3 13774       begin
  4 13775         tilst:= intg(bustilstand(i));
  4 13776         garage:= bustabel(i) shift (-14);
  4 13777         linie_løb:= linie_løb_tabel(linie_løb_indeks(i) extract 12);
  4 13778         find_linie_løb:= linie_løb_indeks(i) extract 12;
  4 13779       end;
  3 13780     end find_linie_løb;
  2 13781     \f

  2 13781     message procedure h_vogntabel side 1 - 810413/cl;
  2 13782     
  2 13782     <* hovedmodulcorutine for vogntabelmodul *>
  2 13783     
  2 13783     procedure h_vogntabel;
  2 13784     begin
  3 13785       integer array field op;
  3 13786       integer dest_sem,k;
  3 13787     
  3 13787       procedure skriv_h_vogntabel(zud,omfang);
  3 13788         value                         omfang;
  3 13789         zone                      zud;
  3 13790         integer                       omfang;
  3 13791       begin
  4 13792         write(zud,"nl",1,<:+++ hovedmodul vogntabel :>);
  4 13793         if omfang<>0 then
  4 13794         disable
  4 13795         begin
  5 13796           skriv_coru(zud,abs curr_coruno);
  5 13797           write(zud,"nl",1,<<d>,
  5 13798             <:cs-vt     :>,cs_vt,"nl",1,
  5 13799             <:op        :>,op,"nl",1,
  5 13800             <:dest-sem  :>,dest_sem,"nl",1,
  5 13801             <:k         :>,k,"nl",1,
  5 13802             <::>);
  5 13803         end;
  4 13804       end;
  3 13805     \f

  3 13805     message procedure h_vogntabel side 2 - 820301/cl;
  3 13806     
  3 13806       stackclaim(if cm_test then 198 else 146);
  3 13807       trap(h_vt_trap);
  3 13808     
  3 13808     <*+2*>
  3 13809     <**> disable if testbit47 and overvåget or testbit28 then
  3 13810     <**>   skriv_h_vogntabel(out,0);
  3 13811     <*-2*>
  3 13812     
  3 13812       repeat
  3 13813         waitch(cs_vt,op,true,-1);
  3 13814     <*+4*>
  3 13815       if (d.op.optype and gen_optype) extract 12 = 0 and
  3 13816          (d.op.optype and vt_optype) extract 12 = 0 then
  3 13817        fejlreaktion(12,op,<:vogntabel:>,0);
  3 13818     <*-4*>
  3 13819       disable
  3 13820       begin
  4 13821     
  4 13821         k:= d.op.opkode extract 12;
  4 13822         dest_sem:=
  4 13823           if k =   9 then cs_vt_rap else
  4 13824           if k =  10 then cs_vt_rap else
  4 13825           if k =  11 then cs_vt_opd else
  4 13826           if k =  12 then cs_vt_opd else
  4 13827           if k =  13 then cs_vt_opd else
  4 13828           if k =  14 then cs_vt_tilst else
  4 13829           if k =  15 then cs_vt_tilst else
  4 13830           if k =  16 then cs_vt_tilst else
  4 13831           if k =  17 then cs_vt_tilst else
  4 13832           if k =  18 then cs_vt_tilst else
  4 13833           if k =  19 then cs_vt_opd else
  4 13834           if k =  20 then cs_vt_opd else
  4 13835           if k =  21 then cs_vt_auto else
  4 13836           if k =  24 then cs_vt_opd else
  4 13837           if k =  25 then cs_vt_grp else
  4 13838           if k =  26 then cs_vt_grp else
  4 13839           if k =  27 then cs_vt_grp else
  4 13840           if k =  28 then cs_vt_grp else
  4 13841           if k =  30 then cs_vt_spring else
  4 13842           if k =  31 then cs_vt_spring else
  4 13843           if k =  32 then cs_vt_spring else
  4 13844           if k =  33 then cs_vt_spring else
  4 13845           if k =  34 then cs_vt_spring else
  4 13846           if k =  35 then cs_vt_spring else
  4 13847           -1;
  4 13848     \f

  4 13848     message procedure h_vogntabel side 3 - 810422/cl;
  4 13849     
  4 13849     <*+2*>
  4 13850     <**> if testbit41 and overvåget then
  4 13851     <**> begin
  5 13852     <**>   skriv_h_vogntabel(out,0); write(out,<:   modtaget operation:>);
  5 13853     <**>   skriv_op(out,op);
  5 13854     <**> end;
  4 13855     <*-2*>
  4 13856       end;
  3 13857     
  3 13857       if dest_sem = -1 then
  3 13858         fejlreaktion(2,k,<:vogntabel:>,0);
  3 13859       disable signalch(dest_sem,op,d.op.optype);
  3 13860     until false;
  3 13861     h_vt_trap:
  3 13862       disable skriv_h_vogntabel(zbillede,1);
  3 13863     end h_vogntabel;
  2 13864     \f

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

  3 13936     message procedure vt_opdater side 2 - 851001/cl;
  3 13937     
  3 13937     vent_op:
  3 13938       waitch(cs_vt_opd,op,gen_optype or vt_optype,-1);
  3 13939     
  3 13939     <*+2*>
  3 13940     <**>  disable
  3 13941     <**>  if testbit41 and overvåget then
  3 13942     <**>  begin
  4 13943     <**>    skriv_vt_opd(out,0);
  4 13944     <**>    write(out,<:   modtaget operation:>);
  4 13945     <**>    skriv_op(out,op);
  4 13946     <**>  end;
  3 13947     <*-2*>
  3 13948     
  3 13948     <*+4*>
  3 13949     <**>if op<>vt_op then
  3 13950     <**>begin
  4 13951     <**>  disable begin
  5 13952     <**>    fejlreaktion(11,op,<:vt-opdater:>,1);
  5 13953     <**>    d.op.resultat:= 31; <*systemfejl*>
  5 13954     <**>    signalch(d.op.retur,op,d.op.optype);
  5 13955     <**>  end;
  4 13956     <**>  goto vent_op;
  4 13957     <**>end;
  3 13958     <*-4*>
  3 13959       disable
  3 13960       begin integer opk;
  4 13961     
  4 13961         opk:= d.op.opkode extract 12;
  4 13962         funk:= if opk=11 then 1 else
  4 13963                if opk=12 then 2 else
  4 13964                if opk=13 then 3 else
  4 13965                if opk=19 then 4 else
  4 13966                if opk=20 then 5 else
  4 13967                if opk=24 then 6 else
  4 13968                0;
  4 13969         if funk=0 then fejlreaktion( 2,opk,<:vt_opdater:>,0);
  4 13970       end;
  3 13971       res:= 0;
  3 13972       goto case funk of (indsæt,udtag,omkod,slet,flyt,roker);
  3 13973     \f

  3 13973     message procedure vt_opdater side 3 - 820301/cl;
  3 13974     
  3 13974     indsæt:
  3 13975       begin
  4 13976         integer busnr,ll_id,ll1,omr,gar,sig,tilst,bi,li,s,zi;
  4 13977     <*+4*>
  4 13978     <**> if d.op.data(1) shift (-22) <> 0 then
  4 13979     <**> begin
  5 13980     <**>   res:= 31; fejlreaktion(10,d.op.data(1),<:indsæt busnr:>,1);
  5 13981     <**>   goto slut_indsæt;
  5 13982     <**> end;
  4 13983     <*-4*>
  4 13984         busnr:= d.op.data(1) extract 14;
  4 13985     <*+4*>
  4 13986     <**> if d.op.data(2) shift (-22) <> 1 then
  4 13987     <**> begin
  5 13988     <**>   res:= 31; fejlreaktion(10,d.op.data(2),<:indsæt linie/løb:>,1);
  5 13989     <**>   goto slut_indsæt;
  5 13990     <**> end;
  4 13991     <*-4*>
  4 13992         ll_id:= d.op.data(2);
  4 13993         s:= omr:= d.op.data(4) extract 8;
  4 13994         bi:= søg_omr_bus(busnr,ll1,gar,omr,sig,tilst);
  4 13995         if bi<0 then
  4 13996         begin
  5 13997           if bi=(-1) then res:=10 <*bus ukendt*> else
  5 13998           if s<>0 then res:= 58 <*ulovligt omr*> else res:= 57 <*omr nødv.*>;
  5 13999         end
  4 14000         else
  4 14001         if s<>0 and s<>omr then
  4 14002           res:= 58 <* ulovligt område for bus *>
  4 14003         else
  4 14004         if intg(bustilstand(bi)) <> 0 then
  4 14005           res:=(if intg(bustilstand(bi))=(-1) then 18 <* i kø *>
  4 14006                 else 14 <* optaget *>)
  4 14007         else
  4 14008         begin
  5 14009           if linie_løb_indeks(bi) extract 12 <> 0 then
  5 14010           begin <* linie/løb allerede indsat *>
  6 14011             res:= 11;
  6 14012             d.op.data(3):= linie_løb_tabel(linie_løb_indeks(bi) extract 12);
  6 14013           end
  5 14014           else
  5 14015           begin
  6 14016     \f

  6 14016     message procedure vt_opdater side 3a - 900108/cl;
  6 14017     
  6 14017             if d.op.kilde//100 <> 4 then
  6 14018             res:= opd_omr(11,gar shift 8 +
  6 14019               bustabel1(bi) extract 8,busnr,ll_id);
  6 14020             if res>3 then goto slut_indsæt;
  6 14021             s:= binærsøg(sidste_linie_løb,linie_løb_tabel(li) - ll_id,li);
  6 14022             if s=0 then <* linie/løb findes allerede *>
  6 14023             begin
  7 14024               sig:= busindeks(li) extract 12;
  7 14025               d.op.data(3):= bustabel(sig);
  7 14026               linie_løb_indeks(sig):= false;
  7 14027               disable modiffil(tf_vogntabel,sig,zi);
  7 14028               fil(zi).ll:= 0;
  7 14029               fil(zi).bn:= bustabel(sig) extract 14 add
  7 14030                            (bustabel1(sig) extract 8 shift 14);
  7 14031               opd_log(d.op.kilde,2,bustabel(sig),ll_id,0);
  7 14032     
  7 14032               linie_løb_indeks(bi):= false add li;
  7 14033               busindeks(li):= false add bi;
  7 14034               disable modiffil(tf_vogntabel,bi,zi);
  7 14035               fil(zi).ll:= ll_id;
  7 14036               fil(zi).bn:= bustabel(bi) extract 14 add
  7 14037                            (bustabel1(bi) extract 8 shift 14);
  7 14038               opd_log(d.op.kilde,1,busnr,0,ll_id);
  7 14039               res:= 3;
  7 14040             end
  6 14041             else
  6 14042             begin
  7 14043     \f

  7 14043     message procedure vt_opdater side 4 - 810527/cl;
  7 14044     
  7 14044               if s<0 then li:= li +1;
  7 14045               if sidste_linie_løb=max_antal_linie_løb then
  7 14046               begin
  8 14047                 fejlreaktion(10,max_antal_linie_løb,<:for mange linie/løb:>,1);
  8 14048                 res:= 31;
  8 14049               end
  7 14050               else
  7 14051               begin
  8 14052                 for i:= sidste_linie_løb step -1 until li do
  8 14053                 begin
  9 14054                   linie_løb_tabel(i+1):=linie_løb_tabel(i);
  9 14055                   linie_løb_indeks(bus_indeks(i) extract 12):=false add (i+1);
  9 14056                   bus_indeks(i+1):=bus_indeks(i);
  9 14057                 end;
  8 14058                 sidste_linie_løb:= sidste_linie_løb +1;
  8 14059                 linie_løb_tabel(li):= ll_id;
  8 14060                 linie_løb_indeks(bi):= false add li;
  8 14061                 busindeks(li):= false add bi;
  8 14062                 disable s:= modiffil(tf_vogntabel,bi,zi);
  8 14063                 if s<>0 then fejlreaktion(7,s,<:vt_indsæt:>,0);
  8 14064                 fil(zi).bn:= busnr extract 14 add
  8 14065                              (bustabel1(bi) extract 8 shift 14);
  8 14066                 fil(zi).ll:= ll_id;
  8 14067                 opd_log(d.op.kilde,1,busnr,0,ll_id);
  8 14068                 res:= 3; <* ok *>
  8 14069               end;
  7 14070             end;
  6 14071           end;
  5 14072         end;
  4 14073     slut_indsæt:
  4 14074         d.op.resultat:= res;
  4 14075       end;
  3 14076       goto returner;
  3 14077     \f

  3 14077     message procedure vt_opdater side 5 - 820301/cl;
  3 14078     
  3 14078     udtag:
  3 14079       begin
  4 14080         integer busnr,ll_id,omr,gar,sig,bi,li,s,format,tilst,zi;
  4 14081     
  4 14081         busnr:= ll_id:= 0;
  4 14082         omr:= s:= d.op.data(2) extract 8;
  4 14083         format:= d.op.data(1) shift (-22);
  4 14084         if format=0 then <*busnr*>
  4 14085         begin
  5 14086           busnr:= d.op.data(1) extract 14;
  5 14087           bi:= søg_omr_bus(busnr,ll_id,gar,omr,sig,tilst);
  5 14088           if bi<0 then
  5 14089           begin
  6 14090             if bi=-1 then res:= 10 else
  6 14091             if s<>0 then res:= 58 else res:= 57;
  6 14092             goto slut_udtag;
  6 14093           end;
  5 14094           if bi>0 and s<>0 and s<>omr then
  5 14095           begin
  6 14096             res:= 58; goto slut_udtag;
  6 14097           end;
  5 14098           li:= linie_løb_indeks(bi) extract 12;
  5 14099           busnr:= bustabel(bi);
  5 14100           if li=0 or linie_løb_tabel(li)=0 then
  5 14101           begin <* bus ej indsat *>
  6 14102             res:= 13;
  6 14103             goto slut_udtag;
  6 14104           end;
  5 14105           ll_id:= linie_løb_tabel(li);
  5 14106         end
  4 14107         else
  4 14108         if format=1 then <* linie_løb *>
  4 14109         begin
  5 14110           ll_id:= d.op.data(1);
  5 14111           s:= binærsøg(sidste_linie_løb,linie_løb_tabel(li)-ll_id,li);
  5 14112           if s<>0 then
  5 14113           begin <* linie/løb findes ikke *>
  6 14114             res:= 9;
  6 14115             goto slut_udtag;
  6 14116           end;
  5 14117           bi:= busindeks(li) extract 12;
  5 14118           busnr:= bustabel(bi);
  5 14119         end
  4 14120         else <* ulovlig identifikation *>
  4 14121         begin
  5 14122           res:= 31;
  5 14123           fejlreaktion(10,d.op.data(1),<:udtag ident:>,1);
  5 14124           goto slut_udtag;
  5 14125         end;
  4 14126     \f

  4 14126     message procedure vt_opdater side 6 - 820301/cl;
  4 14127     
  4 14127        tilst:= intg(bustilstand(bi));
  4 14128         if tilst<>0 then
  4 14129         begin
  5 14130           res:= if tilst = -1 then 18<*i kø*> else 14<*optaget*>;
  5 14131           goto slut_udtag;
  5 14132         end;
  4 14133         if d.op.kilde//100 <> 4 then
  4 14134         res:= opd_omr(12, bustabel(bi) shift (-14) extract 8 shift 8 +
  4 14135                 bustabel1(bi) extract 8,bustabel(bi) extract 14,0);
  4 14136         if res>3 then goto slut_udtag;
  4 14137         linie_løb_indeks(bi):= false;
  4 14138         for i:= li step 1 until sidste_linie_løb -1 do
  4 14139         begin
  5 14140           linie_løb_tabel(i):= linie_løb_tabel(i+1);
  5 14141           linie_løb_indeks(bus_indeks(i+1) extract 12):= false add i;
  5 14142           bus_indeks(i):= bus_indeks(i+1);
  5 14143         end;
  4 14144         linie_løb_tabel(sidste_linie_løb):= 0;
  4 14145         bus_indeks(sidste_linie_løb):= false;
  4 14146         sidste_linie_løb:= sidste_linie_løb -1;
  4 14147         disable s:= modif_fil(tf_vogntabel,bi,zi);
  4 14148         if s<>0 then fejlreaktion(7,s,<:vt_udtag:>,0);
  4 14149         fil(zi).ll:= 0;
  4 14150         fil(zi).bn:= busnr add (bustabel1(bi) extract 8 shift 14);
  4 14151         opd_log(d.op.kilde,2,busnr,ll_id,0);
  4 14152         res:= 3; <* ok *>
  4 14153     slut_udtag:
  4 14154         d.op.resultat:= res;
  4 14155         d.op.data(2):= ll_id;
  4 14156         d.op.data(3):= busnr;
  4 14157       end;
  3 14158       goto returner;
  3 14159     \f

  3 14159     message procedure vt_opdater side 7 - 851001/cl;
  3 14160     
  3 14160     omkod:
  3 14161     flyt:
  3 14162     roker:
  3 14163       begin
  4 14164         integer ll_id1,ll_id2,inf1,inf2,i,s,bi1,bi2,li1,li2,tilst,zi,pm1;
  4 14165     
  4 14165         inf1:= inf2:= 0;
  4 14166         ll_id1:= d.op.data(1);
  4 14167         ll_id2:= d.op.data(2);
  4 14168         if ll_id1=ll_id2 then
  4 14169         begin
  5 14170           res:= 24; inf1:= ll_id2;
  5 14171           goto slut_flyt;
  5 14172         end;
  4 14173     <*+4*>
  4 14174     <**>  for i:= 1,2 do
  4 14175     <**>    if d.op.data(i) shift (-22) <> 1 then
  4 14176     <**>    begin
  5 14177     <**>      res:= 31;
  5 14178     <**>      fejlreaktion(10,d.op.data(i),case i of (
  5 14179     <**>        <:omkod/flyt/roker ident1:>,<:omkod/flyt/roker ident2:>),1);
  5 14180     <**>      goto slut_flyt;
  5 14181     <**>    end;
  4 14182     <*-4*>
  4 14183     
  4 14183         s:= binærsøg(sidste_linie_løb,linie_løb_tabel(li1) - ll_id1,li1);
  4 14184         if s<>0 and funk=6 <* roker *> then
  4 14185         begin
  5 14186           i:= ll_id1; ll_id1:= ll_id2; ll_id2:= i;
  5 14187           s:= binærsøg(sidste_linie_løb,linie_løb_tabel(li1) - ll_id1,li1);
  5 14188         end;
  4 14189         if s<>0 then
  4 14190         begin
  5 14191           res:= 9; <* ukendt linie/løb *>
  5 14192           goto slut_flyt;
  5 14193         end;
  4 14194         bi1:= busindeks(li1) extract 12;
  4 14195         inf1:= bustabel(bi1);
  4 14196         tilst:= intg(bustilstand(bi1));
  4 14197         if tilst<>0 then <* bus ikke fri *>
  4 14198         begin
  5 14199           res:= if tilst=-1 then 18 <* i kø *> else 14 <*optaget*>;
  5 14200           goto slut_flyt;
  5 14201         end;
  4 14202     \f

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

  5 14262     message procedure vt_opdater side 8 - 820301/cl;
  5 14263     
  5 14263         end <* ll_id2 indkodet *>
  4 14264         else
  4 14265         begin
  5 14266           if sign(s)=sign(li2-li1) then li2:=li2-sign(s);
  5 14267           <* li2 skal være indeks for sidste linie/løb der skal flyttes i vt *>
  5 14268           pm1:= sgn(li2-li1);
  5 14269           for i:= li1 step pm1 until li2-pm1 do
  5 14270           begin
  6 14271             linie_løb_tabel(i):= linie_løb_tabel(i+pm1);
  6 14272             busindeks(i):= busindeks(i+pm1);
  6 14273             linie_løb_indeks(intg(busindeks(i+pm1))):= false add i;
  6 14274           end;
  5 14275           linie_løb_tabel(li2):= ll_id2;
  5 14276           busindeks(li2):= false add bi1;
  5 14277           linie_løb_indeks(bi1):= false add li2;
  5 14278           disable s:= modiffil(tf_vogntabel,bi1,zi);
  5 14279           if s<>0 then fejlreaktion(7,s,<:vt-omkod/flyt:>,0);
  5 14280           fil(zi).ll:= ll_id2;
  5 14281           fil(zi).bn:= inf1 extract 14 add (bustabel1(bi1) extract 8 shift 14);
  5 14282           opd_log(d.op.kilde,3,bustabel(bi1),ll_id1,ll_id2);
  5 14283         end;
  4 14284         res:= 3; <*udført*>
  4 14285     slut_flyt:
  4 14286         d.op.resultat:= res;
  4 14287         d.op.data(3):= inf1;
  4 14288         if funk=5 then d.op.data(4):= inf2;
  4 14289       end;
  3 14290       goto returner;
  3 14291     \f

  3 14291     message procedure vt_opdater side 9 - 851001/cl;
  3 14292     
  3 14292     slet:
  3 14293       begin
  4 14294         integer flin,slin,finx,sinx,s,li,bi,omr,gar;
  4 14295         boolean test24;
  4 14296     
  4 14296         if d.op.data(2)=0 then d.op.data(2):= d.op.data(1);
  4 14297         omr:= d.op.data(3);
  4 14298     
  4 14298         if d.op.data(1) > d.op.data(2) then
  4 14299         begin
  5 14300           res:= 44; <* intervalstørrelse ulovlig *>
  5 14301           goto slut_slet;
  5 14302         end;
  4 14303     
  4 14303         flin:= (1 shift 22) + (d.op.data(1) extract 21 shift 7);
  4 14304         slin:= (1 shift 22) + (d.op.data(2) extract 21 shift 7) + 127;
  4 14305     
  4 14305         s:= binærsøg(sidste_linie_løb, (linie_løb_tabel(finx)-flin), finx);
  4 14306         if s<0 then finx:= finx+1;
  4 14307         s:= binærsøg(sidste_linie_løb, (linie_løb_tabel(sinx)-slin), sinx);
  4 14308         if s>0 then sinx:= sinx-1;
  4 14309     
  4 14309         for li:= finx step 1 until sinx do
  4 14310         begin
  5 14311           bi:= busindeks(li) extract 12;
  5 14312           gar:= bustabel(bi) shift (-14) extract 8;
  5 14313           if intg(bustilstand(bi))=0 and 
  5 14314              (omr = 0 or (omr > 0 and omr = gar) or
  5 14315               (omr < 0 and omr extract 8 = bustabel1(bi) extract 8)) then
  5 14316           begin
  6 14317             opd_log(d.op.kilde,2,bustabel(bi),linie_løb_tabel(li),0);
  6 14318             linie_løb_indeks(bi):= busindeks(li):= false;
  6 14319             linie_løb_tabel(li):= 0;
  6 14320           end;
  5 14321         end;
  4 14322     \f

  4 14322     message procedure vt_opdater side 10 - 850820/cl;
  4 14323     
  4 14323         sinx:= finx-1;
  4 14324         for li:= finx step 1 until sidste_linie_løb do
  4 14325         begin
  5 14326           if linie_løb_tabel(li)<>0 then
  5 14327           begin
  6 14328             sinx:= sinx+1;
  6 14329             if sinx<>li then
  6 14330             begin
  7 14331               linie_løb_tabel(sinx):= linie_løb_tabel(li);
  7 14332               busindeks(sinx):= busindeks(li);
  7 14333               linie_løb_indeks(busindeks(sinx) extract 12):= false add sinx;
  7 14334               linie_løb_tabel(li):= 0;
  7 14335               busindeks(li):= false;
  7 14336             end;
  6 14337           end;
  5 14338         end;
  4 14339         sidste_linie_løb:= sinx;
  4 14340     
  4 14340         test24:= testbit24; testbit24:= false;
  4 14341         for bi:= 1 step 1 until sidste_bus do 
  4 14342         disable
  4 14343         begin
  5 14344           s:= modiffil(tf_vogntabel,bi,finx);
  5 14345           if s<>0 then fejlreaktion(7,s,<:vt-slet:>,0);
  5 14346           fil(finx).bn:= bustabel(bi) extract 14 add
  5 14347                          (bustabel1(bi) extract 8 shift 14);
  5 14348           fil(finx).ll:= linie_løb_tabel(linie_løb_indeks(bi) extract 12);
  5 14349         end;
  4 14350         testbit24:= test24;
  4 14351         res:= 3;
  4 14352     
  4 14352     slut_slet:
  4 14353         d.op.resultat:= res;
  4 14354       end;
  3 14355       goto returner;
  3 14356     \f

  3 14356     message procedure vt_opdater side 11 - 810409/cl;
  3 14357     
  3 14357     returner:
  3 14358       disable
  3 14359       begin
  4 14360     
  4 14360     <*+2*>
  4 14361     <**>  if testbit40 and overvåget then
  4 14362     <**>  begin
  5 14363     <**>    skriv_vt_opd(out,0);
  5 14364     <**>    write(out,<:   vogntabel efter ændring:>);
  5 14365     <**>    p_vogntabel(out);
  5 14366     <**>  end;
  4 14367     <**>  if testbit41 and overvåget then
  4 14368     <**>  begin
  5 14369     <**>    skriv_vt_opd(out,0);
  5 14370     <**>    write(out,<:   returner operation:>);
  5 14371     <**>    skriv_op(out,op);
  5 14372     <**>  end;
  4 14373     <*-2*>
  4 14374     
  4 14374         signalch(d.op.retur,op,d.op.optype);
  4 14375       end;
  3 14376       goto vent_op;
  3 14377     
  3 14377     vt_opd_trap:
  3 14378       disable skriv_vt_opd(zbillede,1);
  3 14379     
  3 14379     end vt_opdater;
  2 14380     \f

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

  3 14462     message procedure vt_tilstand side 2 - 820301/cl;
  3 14463     
  3 14463       filop:= filopref;
  3 14464       stackclaim(if cm_test then 550 else 500);
  3 14465       trap(vt_tilst_trap);
  3 14466     
  3 14466     <*+2*>
  3 14467     <**> disable if testbit47 and overvåget or testbit28 then
  3 14468     <**>   skriv_vt_tilst(out,0);
  3 14469     <*-2*>
  3 14470     
  3 14470     vent_op:
  3 14471       waitch(cs_vt_tilst,op,vt_optype or gen_optype,-1);
  3 14472     <*+2*>disable
  3 14473     <**>  if (testbit41 and overvåget) or
  3 14474              (testbit46 and overvåget and
  3 14475               (d.op.opkode extract 12 = 16 or d.op.opkode extract 12 = 18))
  3 14476           then
  3 14477     <**>  begin
  4 14478     <**>    skriv_vt_tilst(out,0);
  4 14479     <**>    write(out,<:   modtaget operation:>);
  4 14480     <**>    skriv_op(out,op);
  4 14481     <**>  end;
  3 14482     <*-2*>
  3 14483     
  3 14483     <*+4*>
  3 14484     <**>  if op <> vt_op then
  3 14485     <**>  begin
  4 14486     <**>    disable begin
  5 14487     <**>      d.op.resultat:= 31;
  5 14488     <**>      fejlreaktion(11,op,<:vt-tilstand:>,1);
  5 14489     <**>  end;
  4 14490     <**>  goto returner;
  4 14491     <**>  end;
  3 14492     <*-4*>
  3 14493     
  3 14493         opk:= d.op.opkode extract 12;
  3 14494         funk:= if opk = 14 <*bus i kø*> then 1 else
  3 14495                if opk = 15 <*bus res *> then 2 else
  3 14496                if opk = 16 <*grp res *> then 4 else
  3 14497                if opk = 17 <*bus fri *> then 3 else
  3 14498                if opk = 18 <*grp fri *> then 5 else
  3 14499                0;
  3 14500         if funk = 0 then fejlreaktion(2,opk,<:vt_tilstand:>,0);
  3 14501         res:= 0;
  3 14502         format:= d.op.data(1) shift (-22);
  3 14503     
  3 14503       goto case funk of(enkelt_bus,enkelt_bus,enkelt_bus,grp_res,grp_fri);
  3 14504     \f

  3 14504     message procedure vt_tilstand side 3 - 820301/cl;
  3 14505     
  3 14505     enkelt_bus:
  3 14506       <* sæt enkelt bus i kø, reserver eller frigiv enkelt bus *>
  3 14507       disable
  3 14508       begin integer busnr,i,s,tilst,ll,gar,omr,sig;
  4 14509     <*+4*>
  4 14510     <**>if format <> 0 and format <> 1 then
  4 14511     <**>begin
  5 14512     <**>  res:= 31;
  5 14513     <**>  fejlreaktion(10,d.op.data(1),<:tilstand ident:>,1);
  5 14514     <**>  goto slut_enkelt_bus;
  5 14515     <**>end;
  4 14516     <*-4*>
  4 14517         <* find busnr og tilstand *>
  4 14518         case format+1 of
  4 14519         begin
  5 14520           <* 0: budident *>
  5 14521           begin
  6 14522             busnr:= d.op.data(1) extract 14;
  6 14523             s:= omr:= d.op.data(4) extract 8;
  6 14524             bi:= søg_omr_bus(busnr,ll,gar,omr,sig,tilst);
  6 14525             if bi<0 then
  6 14526             begin
  7 14527               res:= if bi=(-1) then 10 else (if s<>0 then 58 else 57);
  7 14528               goto slut_enkelt_bus;
  7 14529             end
  6 14530             else
  6 14531             begin
  7 14532               tilst:= intg(bustilstand(bi));
  7 14533             end;
  6 14534           end;
  5 14535     
  5 14535           <* 1: linie_løb_ident *>
  5 14536           begin
  6 14537             bi:= findbusnr(d.op.data(1),busnr,i,tilst);
  6 14538             if bi < 0 then <* ukendt linie_løb *>
  6 14539             begin
  7 14540               res:= 9;
  7 14541               goto slut_enkelt_bus;
  7 14542             end;
  6 14543           end;
  5 14544         end case;
  4 14545     \f

  4 14545     message procedure vt_tilstand side 4 - 830310/cl;
  4 14546     
  4 14546         if funk < 3 then
  4 14547         begin
  5 14548           d.op.data(2):= if linie_løb_indeks(bi) extract 12 <> 0 then
  5 14549                            linie_løb_tabel(linie_løb_indeks(bi) extract 12)
  5 14550                          else 0;
  5 14551           d.op.data(3):= bustabel(bi);
  5 14552           d.op.data(4):= bustabel1(bi);
  5 14553         end;
  4 14554     
  4 14554         <* check tilstand *>
  4 14555         if funk = 3 <*frigiv*> and tilst >= 0 <*fri/optaget_i_gruppe*> then
  4 14556           res:= 39 <* bus ikke reserveret *>
  4 14557         else
  4 14558         if tilst <> 0 and tilst <> (-1) and funk < 3 then
  4 14559           res:= 14 <* bus optaget *>
  4 14560         else
  4 14561         if funk = 1 <* i kø *>  and tilst = (-1) then
  4 14562           res:= 18 <* i kø *>
  4 14563         else
  4 14564           res:= 3; <*udført*>
  4 14565     
  4 14565         if res = 3 then
  4 14566           bustilstand(bi):= false add (case funk of (-1,-2,0));
  4 14567     
  4 14567     slut_enkelt_bus:
  4 14568         d.op.resultat:= res;
  4 14569       end <*disable*>;
  3 14570       goto returner;
  3 14571     \f

  3 14571     message procedure vt_tilstand side 5 - 810424/cl;
  3 14572     
  3 14572     grp_res:  <* reserver gruppe *>
  3 14573       disable
  3 14574       begin
  4 14575     
  4 14575     <*+4*>
  4 14576     <**>  if format <> 2 then
  4 14577     <**>  begin
  5 14578     <**>    res:= 31;
  5 14579     <**>    fejlreaktion(10,d.op.data(1),<:tilstand ident:>,1);
  5 14580     <**>    goto slut_grp_res_1;
  5 14581     <**>  end;
  4 14582     <*-4*>
  4 14583     
  4 14583         <* find frit indeks i opkaldstabel *>
  4 14584         opk_indeks:= 0;
  4 14585         for i:= max_antal_gruppeopkald step -1 until 1 do
  4 14586         begin
  5 14587           if gruppeopkald(i,1)=0 then opk_indeks:= i <*fri plads*> else
  5 14588           if gruppeopkald(i,1)=d.op.data(1) then res:= 15 <*optaget*>;
  5 14589         end;
  4 14590         if opk_indeks = 0 then res:= 32; <* ingen plads *>
  4 14591         if res <> 0 then goto slut_grp_res_1;
  4 14592         g_type:= d.op.data(1) shift (-21) extract 1;
  4 14593         if g_type = 1 <*special gruppe*> then
  4 14594         begin <*check eksistens*>
  5 14595           gr:= 0;
  5 14596           for i:= 1 step 1 until max_antal_grupper do
  5 14597             if gruppetabel(i) = d.op.data(1) then gr:= i;
  5 14598           if gr = 0 then <*gruppe ukendt*>
  5 14599           begin
  6 14600             res:= 8;
  6 14601             goto slut_grp_res_1;
  6 14602           end;
  5 14603         end;
  4 14604     
  4 14604         <* reserver i opkaldstabel *>
  4 14605         gruppeopkald(opk_indeks,1):= d.op.data(1);
  4 14606     \f

  4 14606     message procedure vt_tilstand side 6 - 810428/cl;
  4 14607     
  4 14607         <* tilknyt fil *>
  4 14608         start_operation(filop,curr_coruid,cs_fil,101);
  4 14609         d.filop.data(1):= 0;  <*postantal*>
  4 14610         d.filop.data(2):= 256;  <*postlængde*>
  4 14611         d.filop.data(3):= 1;  <*segmentantal*>
  4 14612         d.filop.data(4):= 2 shift 10;  <*spool fil*>
  4 14613         signalch(cs_opret_fil,filop,vt_optype);
  4 14614     
  4 14614     slut_grp_res_1:
  4 14615         if res <> 0 then d.op.resultat:= res;
  4 14616       end;
  3 14617       if res <> 0 then goto returner;
  3 14618     
  3 14618       waitch(cs_fil,filop,vt_optype,-1);
  3 14619     
  3 14619       <* check filsys-resultat *>
  3 14620       if d.filop.data(9) <> 0 then
  3 14621         fejlreaktion(13,d.filop.data(9),<:gruppe,res:>,0);
  3 14622       filref:= d.filop.data(4);
  3 14623     \f

  3 14623     message procedure vt_tilstand side 7 - 820301/cl;
  3 14624       disable if g_type = 0 <*linie-gruppe*> then
  3 14625       begin
  4 14626         integer s,i,ll_id;
  4 14627         integer array field iaf1;
  4 14628     
  4 14628         ll_id:= 1 shift 22 + d.op.data(1) shift 7;
  4 14629         iaf1:= 2;
  4 14630         s:= binærsøg(sidste_linie_løb,
  4 14631               linie_løb_tabel(i) - ll_id, i);
  4 14632         if s < 0 then i:= i +1;
  4 14633         antal:= ej_res:= 0;
  4 14634         skrivfil(filref,1,zi);
  4 14635         if i <= sidste_linie_løb then
  4 14636         begin
  5 14637           while linie_løb_tabel(i) shift (-7) shift 7 = ll_id do
  5 14638           begin
  6 14639             if (intg(bustilstand(intg(busindeks(i))))<>0) or
  6 14640                (bustabel1(intg(busindeks(i))) extract 8 <> 3) then
  6 14641               ej_res:= ej_res+1
  6 14642             else
  6 14643             begin
  7 14644               antal:= antal+1;
  7 14645               bi:= busindeks(i) extract 12;
  7 14646               fil(zi).iaf1(1):=
  7 14647                 område_id( bustabel1(bi) extract 8, 2) extract 12 shift 12 +
  7 14648                 (bustabel1(bi) shift (-23) + 1) shift 8 + 1;
  7 14649               fil(zi).iaf1(2):= bustabel(bi);
  7 14650               iaf1:= iaf1+4;
  7 14651               bustilstand(bi):= false add opk_indeks;
  7 14652             end;
  6 14653             i:= i +1;
  6 14654             if i > sidste_linie_løb then goto slut_l_grp;
  6 14655           end;
  5 14656         end;
  4 14657     \f

  4 14657     message procedure vt_tilstand side 8 - 820301/cl;
  4 14658     
  4 14658     slut_l_grp:
  4 14659       end
  3 14660       else
  3 14661       begin <*special gruppe*>
  4 14662         integer i,s,li,omr,gar,tilst;
  4 14663         integer array field iaf1;
  4 14664     
  4 14664         iaf1:= 2;
  4 14665         antal:= ej_res:= 0;
  4 14666         s:= læsfil(tf_gruppedef,gr,zi);
  4 14667         if s <> 0 then fejlreaktion(5,s,<:gruppe,res:>,0);
  4 14668         tofrom(identer,fil(zi),max_antal_i_gruppe*2);
  4 14669         s:= skrivfil(filref,1,zi);
  4 14670         if s<>0 then fejlreaktion(6,s,<:gruppe,res:>,0);
  4 14671         i:= 1;
  4 14672         while identer(i) <> 0 do
  4 14673         begin
  5 14674           if identer(i) shift (-22) = 0 then
  5 14675           begin <*busident*>
  6 14676             omr:= 0;
  6 14677             bi:= søg_omr_bus(identer(i),li,gar,omr,s,tilst);
  6 14678             if bi<0 then goto næste_ident;
  6 14679             li:= linie_løb_indeks(bi) extract 12;
  6 14680           end
  5 14681           else
  5 14682           begin <*linie/løb ident*>
  6 14683             s:= binærsøg(sidste_linie_løb,
  6 14684                   linie_løb_tabel(li) - identer(i), li);
  6 14685             if s <> 0 then goto næste_ident;
  6 14686             bi:= busindeks(li) extract 12;
  6 14687           end;
  5 14688           if (intg(bustilstand(bi))<>0) or
  5 14689              (bustabel1(bi) extract 8 <> 3) then
  5 14690             ej_res:= ej_res+1
  5 14691           else
  5 14692           begin
  6 14693             antal:= antal +1;
  6 14694             fil(zi).iaf1(1):=
  6 14695               område_id( bustabel1(bi) extract 8, 2) extract 12 shift 12 +
  6 14696               (bustabel1(bi) shift (-23) + 1) shift 8 + 1;
  6 14697             fil(zi).iaf1(2):= bustabel(bi);
  6 14698             iaf1:= iaf1+4;
  6 14699             bustilstand(bi):= false add opk_indeks;
  6 14700           end;
  5 14701     næste_ident:
  5 14702           i:= i +1;
  5 14703           if i > max_antal_i_gruppe then goto slut_s_grp;
  5 14704         end;
  4 14705     slut_s_grp:
  4 14706       end;
  3 14707     \f

  3 14707     message procedure vt_tilstand side 9 - 820301/cl;
  3 14708     
  3 14708       if antal > 0 then <*ok*>
  3 14709       disable begin
  4 14710         integer array field spec,akt;
  4 14711         integer a;
  4 14712         integer field antal_spec;
  4 14713     
  4 14713         antal_spec:= 2; a:= 0;
  4 14714         spec:= 2; akt:= 2;
  4 14715         sorter_gruppe(fil(zi).spec,1,antal);
  4 14716         fil(zi).antal_spec:= 0;
  4 14717         while akt//4 < antal do
  4 14718         begin
  5 14719           fil(zi).spec(1):= fil(zi).akt(1) shift (-8) shift 8;
  5 14720           a:= 0;
  5 14721           while fil(zi).akt(1) shift (-8) = fil(zi).spec(1) shift (-8)
  5 14722             and a<15 do
  5 14723           begin
  6 14724             a:= a+1;
  6 14725             fil(zi).spec(1+a):= fil(zi).akt(2) extract 14;
  6 14726             akt:= akt+4;
  6 14727           end;
  5 14728           fil(zi).spec(1):= fil(zi).spec(1) + a;
  5 14729           fil(zi).antal_spec:= fil(zi).antal_spec+1;
  5 14730           spec:= spec + 2*a + 2;
  5 14731         end;
  4 14732         antal:= fil(zi).antal_spec;
  4 14733         gruppeopkald(opk_indeks,2):= filref;
  4 14734         d.op.resultat:= 3;
  4 14735         d.op.data(2):= antal;
  4 14736         d.op.data(3):= filref;
  4 14737         d.op.data(4):= ej_res;
  4 14738       end
  3 14739       else
  3 14740       begin
  4 14741         disable begin
  5 14742           d.filop.opkode:= 104; <*slet fil*>
  5 14743           signalch(cs_slet_fil,filop,vt_optype);
  5 14744           gruppeopkald(opk_indeks,1):= 0; <*fri*>
  5 14745           d.op.resultat:= 54;
  5 14746           d.op.data(2):= antal;
  5 14747           d.op.data(3):= 0;
  5 14748           d.op.data(4):= ej_res;
  5 14749         end;
  4 14750         waitch(cs_fil,filop,vt_optype,-1);
  4 14751         if d.filop.data(9) <> 0 then
  4 14752           fejlreaktion(16,d.filop.data(9),<:gruppe,res:>,0);
  4 14753       end;
  3 14754       goto returner;
  3 14755     \f

  3 14755     message procedure vt_tilstand side 10 - 820301/cl;
  3 14756     
  3 14756     grp_fri:  <* frigiv gruppe *>
  3 14757       disable
  3 14758       begin integer i,j,s,ll,gar,omr,tilst;
  4 14759         integer array field spec;
  4 14760     
  4 14760     <*+4*>
  4 14761     <**>  if format <> 2 then
  4 14762     <**>  begin
  5 14763     <**>    res:= 31;
  5 14764     <**>    fejlreaktion(10,d.op.data(1),<:tilstand ident:>,1);
  5 14765     <**>    goto slut_grp_fri;
  5 14766     <**>  end;
  4 14767     <*-4*>
  4 14768     
  4 14768         <* find indeks i opkaldstabel *>
  4 14769         opk_indeks:= 0;
  4 14770         for i:= 1 step 1 until max_antal_gruppeopkald do
  4 14771           if gruppeopkald(i,1) = d.op.data(1) then opk_indeks:= i;
  4 14772         if opk_indeks = 0 <*ikke fundet*> then
  4 14773         begin
  5 14774           res:= 40; <*gruppe ej reserveret*>
  5 14775           goto slut_grp_fri;
  5 14776         end;
  4 14777         filref:= gruppeopkald(opk_indeks,2);
  4 14778         start_operation(filop,curr_coruid,cs_fil,104);
  4 14779         d.filop.data(4):= filref;
  4 14780         hentfildim(d.filop.data);
  4 14781         læsfil(filref,1,zi);
  4 14782         spec:= 0;
  4 14783         antal:= fil(zi).spec(1);
  4 14784         spec:= spec+2;
  4 14785         for i:= 1 step 1 until antal do
  4 14786         begin
  5 14787           for j:= 1 step 1 until fil(zi).spec(1) extract 8 do
  5 14788           begin
  6 14789             busid:= fil(zi).spec(1+j) extract 14;
  6 14790             omr:= 0;
  6 14791             bi:= søg_omr_bus(busid,ll,gar,omr,s,tilst);
  6 14792             if bi>=0 then bustilstand(bi):= false;
  6 14793           end;
  5 14794           spec:= spec + 2*(fil(zi).spec(1) extract 8) + 2;
  5 14795         end;
  4 14796     
  4 14796     slut_grp_fri:
  4 14797         d.op.resultat:= res;
  4 14798       end;
  3 14799       if res <> 0 then goto returner;
  3 14800       gruppeopkald(opk_indeks,1):= gruppeopkald(opk_indeks,2):= 0;
  3 14801       signalch(cs_slet_fil,filop,vt_optype);
  3 14802     \f

  3 14802     message procedure vt_tilstand side 11 - 810424/cl;
  3 14803     
  3 14803       waitch(cs_fil,filop,vt_optype,-1);
  3 14804     
  3 14804       if d.filop.data(9) <> 0 then
  3 14805         fejlreaktion(16,d.filop.data(9),<:gruppe,fri:>,0);
  3 14806       d.op.resultat:= 3;
  3 14807     
  3 14807     returner:
  3 14808       disable
  3 14809       begin
  4 14810     <*+2*>
  4 14811     <**>  if testbit40 and overvåget then
  4 14812     <**>  begin
  5 14813     <**>    skriv_vt_tilst(out,0);
  5 14814     <**>    write(out,<:   vogntabel efter ændring:>);
  5 14815     <**>    p_vogntabel(out);
  5 14816     <**>  end;
  4 14817     <**>  if testbit43 and overvåget and (funk=4 or funk=5) then
  4 14818     <**>  begin
  5 14819     <**>    skriv_vt_tilst(out,0); write(out,<:   gruppetabel efter ændring:>);
  5 14820     <**>    p_gruppetabel(out);
  5 14821     <**>  end;
  4 14822     <**>  if (testbit41 and overvåget) or
  4 14823     <**>     (testbit46 and overvåget and (funk=4 or funk=5)) then
  4 14824     <**>  begin
  5 14825     <**>    skriv_vt_tilst(out,0);
  5 14826     <**>    write(out,<:   returner operation:>);
  5 14827     <**>    skriv_op(out,op);
  5 14828     <**>  end;
  4 14829     <*-2*>
  4 14830         signalch(d.op.retur,op,d.op.optype);
  4 14831       end;
  3 14832       goto vent_op;
  3 14833     
  3 14833     vt_tilst_trap:
  3 14834       disable skriv_vt_tilst(zbillede,1);
  3 14835     
  3 14835     end vt_tilstand;
  2 14836     \f

  2 14836     message procedure vt_rapport side 1 - 810428/cl;
  2 14837     
  2 14837     procedure vt_rapport(cs_fil,fil_opref);
  2 14838       value              cs_fil,fil_opref;
  2 14839       integer            cs_fil,fil_opref;
  2 14840     begin
  3 14841       integer array field op,filop;
  3 14842       integer funk,filref,antal,id_ant,res;
  3 14843       integer field i1,i2;
  3 14844     
  3 14844       procedure skriv_vt_rap(z,omfang);
  3 14845         value                  omfang;
  3 14846         zone                 z;
  3 14847         integer                omfang;
  3 14848       begin
  4 14849         write(z,"nl",1,<:+++ vt_rapport           :>);
  4 14850         if omfang <> 0 then
  4 14851         begin
  5 14852           skriv_coru(z,abs curr_coruno);
  5 14853           write(z,"nl",1,<<d>,
  5 14854             <:  cs_fil  :>,cs_fil,"nl",1,
  5 14855             <:  filop   :>,filop,"nl",1,
  5 14856             <:  op      :>,op,"nl",1,
  5 14857             <:  funk    :>,funk,"nl",1,
  5 14858             <:  filref  :>,filref,"nl",1,
  5 14859             <:  antal   :>,antal,"nl",1,
  5 14860             <:  id-ant  :>,id_ant,"nl",1,
  5 14861             <:  res     :>,res,"nl",1,
  5 14862             <::>);
  5 14863     
  5 14863           end;
  4 14864       end skriv_vt_rap;
  3 14865     
  3 14865       stackclaim(if cm_test then 198 else 146);
  3 14866       filop:= fil_opref;
  3 14867       i1:= 2; i2:= 4;
  3 14868       trap(vt_rap_trap);
  3 14869     
  3 14869     <*+2*>
  3 14870     <**> disable if testbit47 and overvåget or testbit28 then
  3 14871     <**>   skriv_vt_rap(out,0);
  3 14872     <*-2*>
  3 14873     \f

  3 14873     message procedure vt_rapport side 2 - 810505/cl;
  3 14874     
  3 14874     vent_op:
  3 14875       waitch(cs_vt_rap,op,gen_optype or vt_optype,-1);
  3 14876     
  3 14876     <*+2*>
  3 14877     <**>  disable begin
  4 14878     <**>  if testbit41 and overvåget then
  4 14879     <**>  begin
  5 14880     <**>    skriv_vt_rap(out,0);
  5 14881     <**>    write(out,<:   modtaget operation:>);
  5 14882     <**>    skriv_op(out,op);
  5 14883     <**>    ud;
  5 14884     <**>  end;
  4 14885     <**>  end;<*disable*>
  3 14886     <*-2*>
  3 14887     
  3 14887       disable
  3 14888       begin
  4 14889         integer opk;
  4 14890     
  4 14890         opk:= d.op.opkode extract 12;
  4 14891         funk:= if opk = 9 then 1 else
  4 14892                if opk =10 then 2 else
  4 14893                0;
  4 14894         if funk = 0 then fejlreaktion(2,opk,<:vt_gruppe:>,0);
  4 14895     
  4 14895         <* opret og tilknyt fil *>
  4 14896         start_operation(filop,curr_coruid,cs_fil,101);
  4 14897         d.filop.data(1):= 0; <*postantal(midlertidigt)*>
  4 14898         d.filop.data(2):= 2; <*postlængde*>
  4 14899         d.filop.data(3):=10; <*segmenter*>
  4 14900         d.filop.data(4):= 2 shift 10; <*spool fil*>
  4 14901         signalch(cs_opretfil,filop,vt_optype);
  4 14902       end;
  3 14903     
  3 14903       waitch(cs_fil,filop,vt_optype,-1);
  3 14904     
  3 14904       <* check resultat *>
  3 14905       if d.filop.data(9) <> 0 then
  3 14906        fejlreaktion(13,d.filop.data(9),<:vt-rapport:>,0);
  3 14907       filref:= d.filop.data(4);
  3 14908       antal:= 0;
  3 14909       goto case funk of (l_rapport,b_rapport);
  3 14910     \f

  3 14910     message procedure vt_rapport side 3 - 850820/cl;
  3 14911     
  3 14911     l_rapport:
  3 14912       disable
  3 14913       begin
  4 14914         integer i,j,s,ll,zi;
  4 14915         idant:= 0;
  4 14916         for id_ant:= id_ant+1 while d.op.data(id_ant)<>0 and id_ant<5 do 
  4 14917     <*+4*>
  4 14918     <**> if d.op.data(id_ant) shift (-22) <> 2 then
  4 14919     <**> begin
  5 14920     <**>   res:= 31;
  5 14921     <**>   fejlreaktion(10,d.op.data(id_ant),<:l-rapport ident:>,1);
  5 14922     <**>   goto l_rap_slut;
  5 14923     <**> end;
  4 14924     <*-4*>
  4 14925         ;
  4 14926     
  4 14926         for i:= 1 step 1 until id_ant do
  4 14927         begin
  5 14928           ll:= (1 shift 22) + d.op.data(i) extract 15 shift 7;
  5 14929           s:= binærsøg(sidste_linie_løb,
  5 14930                      linie_løb_tabel(j) - ll, j);
  5 14931           if s < 0 then j:= j +1;
  5 14932     
  5 14932           if j<= sidste_linie_løb then
  5 14933           begin <* skriv identer *>
  6 14934             while linie_løb_tabel(j) shift (-7) shift 7 = ll do
  6 14935             begin
  7 14936               antal:= antal +1;
  7 14937               s:= skrivfil(filref,antal,zi);
  7 14938               if s <> 0 then fejlreaktion(6,s,<:vt_rapport:>,0);
  7 14939               fil(zi).i1:= linie_løb_tabel(j);
  7 14940               fil(zi).i2:= bustabel(busindeks(j) extract 12);
  7 14941               j:= j +1;
  7 14942               if j > sidste_bus then goto linie_slut;
  7 14943             end;
  6 14944           end;
  5 14945     linie_slut:
  5 14946         end;
  4 14947         res:= 3;
  4 14948     l_rap_slut:
  4 14949       end <*disable*>;
  3 14950       goto returner;
  3 14951     \f

  3 14951     message procedure vt_rapport side 4 - 820301/cl;
  3 14952     
  3 14952     b_rapport:
  3 14953       disable
  3 14954       begin
  4 14955         integer i,j,s,zi,busnr1,busnr2;
  4 14956     <*+4*>
  4 14957     <**> for i:= 1,2 do
  4 14958     <**>   if d.op.data(i) shift (-14) <> 0 then
  4 14959     <**>   begin
  5 14960     <**>     res:= 31;
  5 14961     <**>     fejlreaktion(10,d.op.data(i),<:b-rapport ident:>,1);
  5 14962     <**>     goto bus_slut;
  5 14963     <**>   end;
  4 14964     <*-4*>
  4 14965     
  4 14965         busnr1:= d.op.data(1) extract 14;
  4 14966         busnr2:= if d.op.data(2) = 0 then busnr1 else d.op.data(2) extract 14;
  4 14967         if busnr1 = 0 or busnr2 < busnr1 then
  4 14968         begin
  5 14969           res:= 7; <* fejl i busnr *>
  5 14970           goto bus_slut;
  5 14971         end;
  4 14972     
  4 14972         s:= binærsøg(sidste_bus,bustabel(j) extract 14
  4 14973                        - busnr1,j);
  4 14974         if s < 0 then j:= j +1;
  4 14975         while j>1 and bustabel(j-1) extract 14 >= busnr1 do j:= j-1;
  4 14976         if j <= sidste_bus then
  4 14977         begin <* skriv identer *>
  5 14978           while bustabel(j) extract 14 <= busnr2 do
  5 14979           begin
  6 14980             i:= linie_løb_indeks(j) extract 12;
  6 14981             if i<>0 then
  6 14982             begin
  7 14983               antal:= antal +1;
  7 14984               s:= skriv_fil(filref,antal,zi);
  7 14985               if s <> 0 then fejlreaktion(6,s,<:vt-rapport:>,0);
  7 14986               fil(zi).i1:= bustabel(j);
  7 14987               fil(zi).i2:= linie_løb_tabel(i);
  7 14988             end;
  6 14989             j:= j +1;
  6 14990             if j > sidste_bus then goto bus_slut;
  6 14991           end;
  5 14992         end;
  4 14993     bus_slut:
  4 14994       end <*disable*>;
  3 14995       res:= 3; <*ok*>
  3 14996     \f

  3 14996     message procedure vt_rapport side 5 - 810409/cl;
  3 14997     
  3 14997     returner:
  3 14998       disable
  3 14999       begin
  4 15000         d.op.resultat:= res;
  4 15001         d.op.data(6):= antal;
  4 15002         d.op.data(7):= filref;
  4 15003         d.filop.data(1):= antal;
  4 15004         d.filop.data(3):= (antal*d.filop.data(2) -1)//256 +1;
  4 15005         i:= sæt_fil_dim(d.filop.data);
  4 15006         if i <> 0 then fejlreaktion(9,i,<:vt-rapport:>,0);
  4 15007     <*+2*>
  4 15008     <**>  if testbit41 and overvåget then
  4 15009     <**>  begin
  5 15010     <**>    skriv_vt_rap(out,0);
  5 15011     <**>    write(out,<:   returner operation:>);
  5 15012     <**>    skriv_op(out,op);
  5 15013     <**>  end;
  4 15014     <*-2*>
  4 15015         signalch(d.op.retur,op,d.op.optype);
  4 15016       end;
  3 15017       goto vent_op;
  3 15018     
  3 15018     vt_rap_trap:
  3 15019       disable skriv_vt_rap(zbillede,1);
  3 15020     
  3 15020     end vt_rapport;
  2 15021     \f

  2 15021     message procedure vt_gruppe side 1 - 810428/cl;
  2 15022     
  2 15022     procedure vt_gruppe(cs_fil,fil_opref);
  2 15023     
  2 15023       value             cs_fil,fil_opref;
  2 15024       integer           cs_fil,fil_opref;
  2 15025     begin
  3 15026       integer array field op, fil_op, iaf;
  3 15027       integer funk, res, filref, gr, i, antal, zi, s;
  3 15028       integer array identer(1:(if max_antal_grupper>max_antal_i_gruppe then
  3 15029                               max_antal_grupper else max_antal_i_gruppe));
  3 15030     
  3 15030       procedure skriv_vt_gruppe(zud,omfang);
  3 15031         value                       omfang;
  3 15032         integer                     omfang;
  3 15033         zone                    zud;
  3 15034       begin
  4 15035         integer øg;
  4 15036     
  4 15036         write(zud,"nl",1,<:+++ vt_gruppe            :>);
  4 15037         if omfang <> 0 then
  4 15038         disable
  4 15039         begin
  5 15040           skriv_coru(zud,abs curr_coruno);
  5 15041           write(zud,"nl",1,<<d>,
  5 15042             <:  cs_fil :>,cs_fil,"nl",1,
  5 15043             <:  op     :>,op,"nl",1,
  5 15044             <:  filop  :>,filop,"nl",1,
  5 15045             <:  funk   :>,funk,"nl",1,
  5 15046             <:  res    :>,res,"nl",1,
  5 15047             <:  filref :>,filref,"nl",1,
  5 15048             <:  gr     :>,gr,"nl",1,
  5 15049             <:  i      :>,i,"nl",1,
  5 15050             <:  antal  :>,antal,"nl",1,
  5 15051             <:  zi     :>,zi,"nl",1,
  5 15052             <:  s      :>,s,"nl",1,
  5 15053             <::>);
  5 15054           raf:= 0;
  5 15055           system(3,øg,identer);
  5 15056           write(zud,"nl",1,<:identer::>);
  5 15057           skriv_hele(zud,identer.raf,øg*2,2);
  5 15058         end;
  4 15059       end;
  3 15060     
  3 15060       stackclaim(if cm_test then 198 else 146);
  3 15061       filop:= fil_opref;
  3 15062       trap(vt_grp_trap);
  3 15063       iaf:= 0;
  3 15064     \f

  3 15064     message procedure vt_gruppe side 2 - 810409/cl;
  3 15065     
  3 15065     <*+2*>
  3 15066     <**> disable if testbit47 and overvåget or testbit28 then
  3 15067     <**>   skriv_vt_gruppe(out,0);
  3 15068     <*-2*>
  3 15069     
  3 15069     vent_op:
  3 15070       waitch(cs_vt_grp,op,gen_optype or vt_optype,-1);
  3 15071     <*+2*>
  3 15072     <**>disable
  3 15073     <**>begin
  4 15074     <**>  if testbit41 and overvåget then
  4 15075     <**>  begin
  5 15076     <**>    skriv_vt_gruppe(out,0);
  5 15077     <**>    write(out,<:   modtaget operation:>);
  5 15078     <**>    skriv_op(out,op);
  5 15079     <**>    ud;
  5 15080     <**>  end;
  4 15081     <**>end;
  3 15082     <*-2*>
  3 15083     
  3 15083       disable
  3 15084       begin
  4 15085         integer opk;
  4 15086     
  4 15086         opk:= d.op.opkode extract 12;
  4 15087         funk:= if opk=25 then 1 else
  4 15088                if opk=26 then 2 else
  4 15089                if opk=27 then 3 else
  4 15090                if opk=28 then 4 else
  4 15091                0;
  4 15092         if funk=0 then fejlreaktion(2,opk,<:vt_gruppe:>,0);
  4 15093       end;
  3 15094     <*+4*>
  3 15095     <**> if funk<4 and d.op.data(1) shift (-21) <> 5 then
  3 15096     <**> begin
  4 15097     <**>   disable begin
  5 15098     <**>     d.op.resultat:= 31;
  5 15099     <**>     fejlreaktion(10,d.op.data(1),<:gruppe ident:>,1);
  5 15100     <**>   end;
  4 15101     <**>   goto returner;
  4 15102     <**> end;
  3 15103     <*-4*>
  3 15104     
  3 15104       goto case funk of(definer,slet,vis,oversigt);
  3 15105     \f

  3 15105     message procedure vt_gruppe side 3 - 810505/cl;
  3 15106     
  3 15106     definer:
  3 15107       disable
  3 15108       begin
  4 15109         gr:= 0; res:= 0;
  4 15110         for i:= max_antal_grupper step -1 until 1 do
  4 15111         begin
  5 15112           if gruppetabel(i)=0 then gr:= i <*fri plads*> else
  5 15113           if gruppetabel(i)=d.op.data(1) then res:= 34; <*allerede defineret*>
  5 15114         end;
  4 15115         if gr=0 then res:= 32; <*ingen plads*>
  4 15116       end;
  3 15117       if res<>0 then goto slut_definer;
  3 15118       disable
  3 15119       begin <*fri plads fundet*>
  4 15120         antal:= d.op.data(2);
  4 15121         if antal <=0 or max_antal_i_gruppe<antal then
  4 15122           res:= 33 <*fejl i gruppestørrelse*>
  4 15123         else
  4 15124         begin
  5 15125           for i:= 1 step 1 until antal do
  5 15126           begin
  6 15127             s:= læsfil(d.op.data(3),i,zi);
  6 15128             if s<>0 then fejlreaktion(5,s,<:gruppe,def:>,0);
  6 15129             identer(i):= fil(zi).iaf(1);
  6 15130           end;
  5 15131           s:= modif_fil(tf_gruppedef,gr,zi);
  5 15132           if s<>0 then fejlreaktion(7,s,<:gruppe,def:>,0);
  5 15133           tofrom(fil(zi).iaf,identer,antal*2);
  5 15134           for i:= antal+1 step 1 until max_antal_i_gruppe do
  5 15135             fil(zi).iaf(i):= 0;
  5 15136           gruppetabel(gr):= d.op.data(1);
  5 15137           s:= modiffil(tf_gruppeidenter,gr,zi);
  5 15138           if s<>0 then fejlreaktion(7,s,<:gruppe,def:>,0);
  5 15139           fil(zi).iaf(1):= gruppetabel(gr);
  5 15140           res:= 3;
  5 15141         end;
  4 15142       end;
  3 15143     slut_definer:
  3 15144       <*slet fil*>
  3 15145       start_operation(fil_op,curr_coruid,cs_fil,104);
  3 15146       d.filop.data(4):= d.op.data(3);
  3 15147       signalch(cs_slet_fil,filop,vt_optype);
  3 15148       waitch(cs_fil,filop,vt_optype,-1);
  3 15149       if d.filop.data(9)<>0 then fejlreaktion(16,d.filop.data(9),<:gruppe,def:>,0);
  3 15150       d.op.resultat:= res;
  3 15151       goto returner;
  3 15152     \f

  3 15152     message procedure vt_gruppe side 4 - 810409/cl;
  3 15153     
  3 15153     slet:
  3 15154       disable
  3 15155       begin
  4 15156         gr:= 0; res:= 0;
  4 15157         for i:= 1 step 1 until max_antal_grupper do
  4 15158         begin
  5 15159           if gruppetabel(i)=d.op.data(1) then gr:= i;
  5 15160         end;
  4 15161         if gr = 0 then res:= 8 <*gruppe ej defineret*>
  4 15162         else
  4 15163         begin
  5 15164           for i:= 1 step 1 until max_antal_gruppeopkald do
  5 15165             if gruppeopkald(i,1)=d.op.data(1) then res:=15; <*gruppe optaget*>
  5 15166           if res = 0 then
  5 15167           begin
  6 15168             gruppetabel(gr):= 0;
  6 15169             s:= modif_fil(tf_gruppeidenter,gr,zi);
  6 15170             if s<>0 then fejlreaktion(7,s,<:gruppe,slet:>,0);
  6 15171             fil(zi).iaf(1):= gruppetabel(gr);
  6 15172             res:= 3;
  6 15173           end;
  5 15174         end;
  4 15175         d.op.resultat:= res;
  4 15176       end;
  3 15177       goto returner;
  3 15178     \f

  3 15178     message procedure vt_gruppe side 5 - 810505/cl;
  3 15179     
  3 15179     vis:
  3 15180       disable
  3 15181       begin
  4 15182         res:= 0; gr:= 0; antal:= 0; filref:= 0;
  4 15183         for i:= 1 step 1 until max_antal_grupper do
  4 15184           if gruppetabel(i) = d.op.data(1) then gr:= i;
  4 15185         if gr = 0 then res:= 8
  4 15186         else
  4 15187         begin
  5 15188           s:= læsfil(tf_gruppedef,gr,zi);
  5 15189           if s<>0 then fejlreaktion(5,s,<:gruppe,vis:>,0);
  5 15190           for i:= 1 step 1 until max_antal_i_gruppe do
  5 15191           begin
  6 15192             identer(i):= fil(zi).iaf(i);
  6 15193             if identer(i) <> 0 then antal:= antal +1;
  6 15194           end;
  5 15195           start_operation(filop,curr_coruid,cs_fil,101);
  5 15196           d.filop.data(1):= antal;  <*postantal*>
  5 15197           d.filop.data(2):= 1;      <*postlængde*>
  5 15198           d.filop.data(3):= (antal-1)//256 + 1; <*segmenter*>
  5 15199           d.filop.data(4):= 2 shift 10; <*spool fil*>
  5 15200           d.filop.data(5):= d.filop.data(6):=
  5 15201           d.filop.data(7):= d.filop.data(8):= 0;   <*navn*>
  5 15202           signalch(cs_opret_fil,filop,vt_optype);
  5 15203         end;
  4 15204       end;
  3 15205       if res <> 0 then goto slut_vis;
  3 15206       waitch(cs_fil,filop,vt_optype,-1);
  3 15207       disable
  3 15208       begin
  4 15209         if d.filop.data(9) <> 0 then
  4 15210           fejlreaktion(13,d.filop.data(9),<:gruppe,vis:>,0);
  4 15211         filref:= d.filop.data(4);
  4 15212         for i:= 1 step 1 until antal do
  4 15213         begin
  5 15214           s:= skrivfil(filref,i,zi);
  5 15215           if s <> 0 then fejlreaktion(6,s,<:gruppe,vis:>,0);
  5 15216           fil(zi).iaf(1):= identer(i);
  5 15217         end;
  4 15218         res:= 3;
  4 15219       end;
  3 15220     slut_vis:
  3 15221       d.op.resultat:= res; d.op.data(2):= antal; d.op.data(3):= filref;
  3 15222       goto returner;
  3 15223     \f

  3 15223     message procedure vt_gruppe side 6 - 810508/cl;
  3 15224     
  3 15224     oversigt:
  3 15225       disable
  3 15226       begin
  4 15227         res:= 0; antal:= 0; filref:= 0; iaf:= 0;
  4 15228         for i:= 1 step 1 until max_antal_grupper do
  4 15229         begin
  5 15230           if gruppetabel(i) <> 0 then
  5 15231           begin
  6 15232             antal:= antal +1;
  6 15233             identer(antal):= gruppetabel(i);
  6 15234           end;
  5 15235         end;
  4 15236         start_operation(filop,curr_coruid,cs_fil,101);
  4 15237         d.filop.data(1):= antal;  <*postantal*>
  4 15238         d.filop.data(2):= 1;      <*postlængde*>
  4 15239         d.filop.data(3):= if antal = 0 then 1 else
  4 15240                           (antal-1)//256 +1; <*segm.antal*>
  4 15241         d.filop.data(4):= 2 shift 10; <*spool fil*>
  4 15242         d.filop.data(5):= d.filop.data(6):=
  4 15243         d.filop.data(7):= d.filop.data(8):= 0; <*navn*>
  4 15244         signalch(cs_opretfil,filop,vt_optype);
  4 15245       end;
  3 15246       waitch(cs_fil,filop,vt_optype,-1);
  3 15247       disable
  3 15248       begin
  4 15249         if d.filop.data(9) <> 0 then
  4 15250           fejlreaktion(13,d.filop.data(9),<:grupper,over:>,0);
  4 15251         filref:= d.filop.data(4);
  4 15252         for i:= 1 step 1 until antal do
  4 15253         begin
  5 15254           s:= skriv_fil(filref,i,zi);
  5 15255           if s <> 0 then fejlreaktion(6,s,<:gruppe,over:>,0);
  5 15256           fil(zi).iaf(1):= identer(i);
  5 15257         end;
  4 15258         d.op.resultat:= 3; <*ok*>
  4 15259         d.op.data(1):= antal;
  4 15260         d.op.data(2):= filref;
  4 15261       end;
  3 15262     \f

  3 15262     message procedure vt_gruppe side 7 - 810505/cl;
  3 15263     
  3 15263     returner:
  3 15264       disable
  3 15265       begin
  4 15266     <*+2*>
  4 15267     <**>  if testbit43 and overvåget and (funk=1 or funk=2) then
  4 15268     <**>  begin
  5 15269     <**>    skriv_vt_gruppe(out,0);
  5 15270     <**>    write(out,<:   gruppetabel efter ændring:>);
  5 15271     <**>    p_gruppetabel(out);
  5 15272     <**>  end;
  4 15273     <**>  if testbit41 and overvåget then
  4 15274     <**>  begin
  5 15275     <**>    skriv_vt_gruppe(out,0);
  5 15276     <**>    write(out,<:  returner operation:>);
  5 15277     <**>    skriv_op(out,op);
  5 15278     <**>  end;
  4 15279     <*-2*>
  4 15280       signalch(d.op.retur,op,d.op.optype);
  4 15281       end;
  3 15282       goto vent_op;
  3 15283     
  3 15283     vt_grp_trap:
  3 15284       disable skriv_vt_gruppe(zbillede,1);
  3 15285     
  3 15285     end vt_gruppe;
  2 15286     \f

  2 15286     message procedure vt_spring side 1 - 810506/cl;
  2 15287     
  2 15287     procedure vt_spring(cs_spring_retur,spr_opref);
  2 15288       value             cs_spring_retur,spr_opref;
  2 15289       integer           cs_spring_retur,spr_opref;
  2 15290     begin
  3 15291       integer array field komm_op,spr_op,iaf;
  3 15292       real nu;
  3 15293       integer funk,interval,nr,i,s,id1,id2,res,res_inf,medd_kode,zi;
  3 15294     
  3 15294       procedure skriv_vt_spring(zud,omfang);
  3 15295         value                       omfang;
  3 15296         zone                    zud;
  3 15297         integer                     omfang;
  3 15298       begin
  4 15299         write(zud,"nl",1,<:+++ vt_spring            :>);
  4 15300         if omfang <> 0 then
  4 15301         begin
  5 15302           skriv_coru(zud,abs curr_coruno);
  5 15303           write(zud,"nl",1,<<d>,
  5 15304             <:cs-spring-retur:>,cs_spring_retur,"nl",1,
  5 15305             <:spr-op         :>,spr_op,"nl",1,
  5 15306             <:komm-op        :>,komm_op,"nl",1,
  5 15307             <:funk           :>,funk,"nl",1,
  5 15308             <:interval       :>,interval,"nl",1,
  5 15309             <:nr             :>,nr,"nl",1,
  5 15310             <:i              :>,i,"nl",1,
  5 15311             <:s              :>,s,"nl",1,
  5 15312             <:id1            :>,id1,"nl",1,
  5 15313             <:id2            :>,id2,"nl",1,
  5 15314             <:res            :>,res,"nl",1,
  5 15315             <:res-inf        :>,res_inf,"nl",1,
  5 15316             <:medd-kode      :>,medd_kode,"nl",1,
  5 15317             <:zi             :>,zi,"nl",1,
  5 15318             <:nu             :>,<<zddddd.dddd>,nu,"nl",1,
  5 15319             <::>);
  5 15320         end;
  4 15321       end;
  3 15322     \f

  3 15322     message procedure vt_spring side 2 - 810506/cl;
  3 15323     
  3 15323       procedure vt_operation(aktion,id1,id2,res,res_inf);
  3 15324         value             aktion,id1,id2;
  3 15325         integer           aktion,id1,id2,res,res_inf;
  3 15326       begin  <* aktion: 11=indsæt, 12=udtag, 13=omkod *>
  4 15327         integer array field akt_op;
  4 15328     
  4 15328         <* vent på adgang til vogntabel *>
  4 15329         waitch(cs_vt_adgang,akt_op,true,-1);
  4 15330     
  4 15330         <* start operation *>
  4 15331         disable
  4 15332         begin
  5 15333           start_operation(akt_op,curr_coruid,cs_spring_retur,aktion);
  5 15334           d.akt_op.data(1):= id1;
  5 15335           d.akt_op.data(2):= id2;
  5 15336           signalch(cs_vt_opd,akt_op,vt_optype);
  5 15337         end;
  4 15338     
  4 15338         <* afvent svar *>
  4 15339         waitch(cs_spring_retur,akt_op,vt_optype,-1);
  4 15340         res:= d.akt_op.resultat;
  4 15341         res_inf:= d.akt_op.data(3);
  4 15342     <*+2*>
  4 15343     <**> disable
  4 15344     <**>  if testbit45 and overvåget then
  4 15345     <**>  begin
  5 15346     <**>    real t;
  5 15347     <**>    skriv_vt_spring(out,0);
  5 15348     <**>    write(out,"nl",1,<<zddddd>,systime(4,d.akt_op.tid,t),<:.:>,t);
  5 15349     <**>    skriv_id(out,springtabel(nr,1),0);
  5 15350     <**>    write(out,<:.:>,string(extend springtabel(nr,2) shift 24),<:(:>,
  5 15351     <**>      <<d>,extend springtabel(nr,3) shift (-12) extract 24,<:)::>,
  5 15352     <**>      if aktion=11 then <:indsæt:> else if aktion=12 then <:udtag:> else
  5 15353     <**>      if aktion=13 then <:omkod:> else <:***:>,<: - res=:>,
  5 15354     <**>      d.akt_op.resultat,"sp",2);
  5 15355     <**>    skriv_id(out,d.akt_op.data(1),8);
  5 15356     <**>    skriv_id(out,d.akt_op.data(2),8);
  5 15357     <**>    skriv_id(out,d.akt_op.data(3),8);
  5 15358     <**>    systime(4,springtid(nr),t);
  5 15359     <**>    write(out,<:  springtid: :>,<<zd.dd>,entier(t/100),"nl",1);
  5 15360     <**>  end;
  4 15361     <*-2*>
  4 15362     
  4 15362         <* åbn adgang til vogntabel *>
  4 15363         disable signalch(cs_vt_adgang,akt_op,gen_optype or vt_optype);
  4 15364       end vt_operation;
  3 15365     \f

  3 15365     message procedure vt_spring side 2a - 810506/cl;
  3 15366     
  3 15366       procedure io_meddelelse(medd_no,bus,linie,springno);
  3 15367         value                 medd_no,bus,linie,springno;
  3 15368         integer               medd_no,bus,linie,springno;
  3 15369       begin
  4 15370         disable start_operation(spr_op,curr_coruid,cs_spring_retur,36);
  4 15371         d.spr_op.data(1):= medd_no;
  4 15372         d.spr_op.data(2):= bus;
  4 15373         d.spr_op.data(3):= linie;
  4 15374         d.spr_op.data(4):= springtabel(springno,1);
  4 15375         d.spr_op.data(5):= springtabel(springno,2);
  4 15376         disable signalch(cs_io,spr_op,io_optype or gen_optype);
  4 15377         waitch(cs_spring_retur,spr_op,io_optype or gen_optype,-1);
  4 15378       end;
  3 15379     
  3 15379       procedure returner_op(op,res);
  3 15380         value                  res;
  3 15381         integer array field op;
  3 15382         integer                res;
  3 15383       begin
  4 15384     <*+2*>
  4 15385     <**>  disable
  4 15386     <**>  if testbit41 and overvåget then
  4 15387     <**>  begin
  5 15388     <**>    skriv_vt_spring(out,0); write(out,<:   returner operation::>);
  5 15389     <**>    skriv_op(out,op);
  5 15390     <**>  end;
  4 15391     <*-2*>
  4 15392         d.op.resultat:= res;
  4 15393         signalch(d.op.retur,op,d.op.optype);
  4 15394       end;
  3 15395     \f

  3 15395     message procedure vt_spring side 3 - 810603/cl;
  3 15396     
  3 15396       iaf:= 0;
  3 15397       spr_op:= spr_opref;
  3 15398       stack_claim((if cm_test then 198 else 146) + 24);
  3 15399     
  3 15399       trap(vt_spring_trap);
  3 15400     
  3 15400       for i:= 1 step 1 until max_antal_spring do
  3 15401       begin
  4 15402         springtabel(i,1):= springtabel(i,2):= springtabel(i,3):= 0;
  4 15403         springtid(i):= springstart(i):= 0.0;
  4 15404       end;
  3 15405     
  3 15405     <*+2*>
  3 15406     <**> disable
  3 15407     <**> if testbit44 and overvåget then
  3 15408     <**> begin
  4 15409     <**>    skriv_vt_spring(out,0);
  4 15410     <**>    write(out,<:   springtabel efter initialisering:>);
  4 15411     <**>    p_springtabel(out); ud;
  4 15412     <**> end;
  3 15413     <*-2*>
  3 15414     
  3 15414     <*+2*>
  3 15415     <**> disable if testbit47 and overvåget or testbit28 then
  3 15416     <**>   skriv_vt_spring(out,0);
  3 15417     <*-2*>
  3 15418     \f

  3 15418     message procedure vt_spring side 4 - 810609/cl;
  3 15419     
  3 15419     næste_tid: <* find næste tid *>
  3 15420       disable
  3 15421       begin
  4 15422         interval:= -1; <*vent uendeligt*>
  4 15423         systime(1,0.0,nu);
  4 15424         for i:= 1 step 1 until max_antal_spring do
  4 15425           if springtabel(i,3) < 0 then
  4 15426             interval:= 5
  4 15427           else
  4 15428           if springtid(i) <> 0.0 and
  4 15429           ( (springtid(i)-nu) < interval or interval < 0 ) then
  4 15430             interval:= (if springtid(i) <= nu then 0 else
  4 15431                    round(springtid(i) -nu));
  4 15432         if interval=0 then interval:= 1;
  4 15433       end;
  3 15434     \f

  3 15434     message procedure vt_spring side 4a - 810525/cl;
  3 15435     
  3 15435       <* afvent operation eller timeout *>
  3 15436       waitch(cs_vt_spring,komm_op,vt_optype or gen_optype,interval);
  3 15437       if komm_op <> 0 then goto afkod_operation;
  3 15438     
  3 15438       <* timeout *>
  3 15439       systime(1,0.0,nu);
  3 15440       nr:= 1;
  3 15441     næste_sekv:
  3 15442       if nr > max_antal_spring then goto næste_tid;
  3 15443       if springtid(nr) > nu and springtabel(nr,3) > 0 or springstart(nr)=0.0 then
  3 15444       begin
  4 15445         nr:= nr +1;
  4 15446         goto næste_sekv;
  4 15447       end;
  3 15448       disable s:= modif_fil(tf_springdef,nr,zi);
  3 15449       if s <> 0 then fejlreaktion(7,s,<:spring:>,0);
  3 15450       if springtabel(nr,3) < 0 then
  3 15451       begin <* hængende spring *>
  4 15452         if springtid(nr) <= nu then
  4 15453         begin <* spring ikke udført indenfor angivet interval - annuler *>
  5 15454           <* find frit løb *>
  5 15455            disable
  5 15456            begin
  6 15457              id2:= 0;
  6 15458              for i:= 1 step 1 until springtabel(nr,3) extract 12 do
  6 15459                if fil(zi).iaf(2+i) shift (-22) = 1 then
  6 15460                id2:= fil(zi).iaf(1) extract 15 shift 7
  6 15461                    + fil(zi).iaf(2+i) shift (-12) extract 7 +1 shift 22;
  6 15462           end;
  5 15463           <* send meddelelse til io *>
  5 15464           io_meddelelse(5,0,id2,nr);
  5 15465     
  5 15465           <* annuler spring*>
  5 15466           for i:= 1,2,3 do springtabel(nr,i):= 0;
  5 15467           springtid(nr):= springstart(nr):= 0.0;
  5 15468         end
  4 15469         else
  4 15470         begin <* forsøg igen *>
  5 15471     \f

  5 15471     message procedure vt_spring side 5 - 810525/cl;
  5 15472     
  5 15472           i:= abs(extend springtabel(nr,3) shift (-12) extract 24);
  5 15473           if i = 2 <* første spring ej udført *> then
  5 15474           begin
  6 15475             id1:= fil(zi).iaf(1) extract 15 shift 7
  6 15476                 + fil(zi).iaf(3) shift (-12) extract 7 +1 shift 22;
  6 15477             id2:= id1;
  6 15478             vt_operation(12<*udtag*>,id1,id2,res,res_inf);
  6 15479           end
  5 15480           else
  5 15481           begin
  6 15482             id1:= fil(zi).iaf(1) extract 15 shift 7
  6 15483                 + fil(zi).iaf(2+i-1) shift (-12) extract 7 +1 shift 22;
  6 15484             id2:= id1 shift (-7) shift 7
  6 15485                 + fil(zi).iaf(2+i-2) shift (-12) extract 7;
  6 15486             vt_operation(13<*omkod*>,id1,id2,res,res_inf);
  6 15487           end;
  5 15488     
  5 15488           <* check resultat *>
  5 15489           medd_kode:= if res = 3 and i = 2 then 7 else
  5 15490                       if res = 3 and i > 2 then 8 else
  5 15491                    <* if res = 9 then 1 else
  5 15492                       if res =12 then 2 else
  5 15493                       if res =14 then 4 else
  5 15494                       if res =18 then 3 else *>
  5 15495                       0;
  5 15496           if medd_kode > 0 then
  5 15497             io_meddelelse(medd_kode,res_inf,if res=3 or res=12 then
  5 15498               id2 else id1,nr);
  5 15499           if res = 3 then
  5 15500           begin <* spring udført *>
  6 15501             disable s:= modiffil(tf_springdef,nr,zi); 
  6 15502             if s<>0 then fejlreaktion(7,s,<:spring:>,0);
  6 15503             springtabel(nr,3):= i shift 12 +springtabel(nr,3) extract 12;
  6 15504             fil(zi).iaf(2+i-1):= 1 shift 22 +fil(zi).iaf(2+i-1) extract 22;
  6 15505             if i > 2 then fil(zi).iaf(2+i-2):=
  6 15506               fil(zi).iaf(2+i-2) extract 22 add (1 shift 23);
  6 15507           end;
  5 15508         end;
  4 15509       end <* hængende spring *>
  3 15510       else
  3 15511       begin
  4 15512         i:= spring_tabel(nr,3) shift (-12);
  4 15513         id1:= fil(zi).iaf(1) extract 15 shift 7
  4 15514             + fil(zi).iaf(2+i) shift (-12) extract 7 +1 shift 22;
  4 15515         id2:= fil(zi).iaf(2+i-1) shift (-12) extract 7
  4 15516             + id1 shift (-7) shift 7;
  4 15517         vt_operation(13<*omkod*>,id1,id2,res,res_inf);
  4 15518     \f

  4 15518     message procedure vt_spring side 6 - 820304/cl;
  4 15519     
  4 15519         <* check resultat *>
  4 15520         medd_kode:= if res = 3 then 8 else
  4 15521                     if res = 9 then 1 else
  4 15522                     if res =12 then 2 else
  4 15523                     if res =14 then 4 else
  4 15524                     if res =18 then 3 else 
  4 15525                     if res =60 then 9 else 0;
  4 15526         if medd_kode > 0 then
  4 15527           io_meddelelse(medd_kode,res_inf,if res=3 or res=12 then id2 else id1,nr);
  4 15528     
  4 15528         <* opdater springtabel *>
  4 15529         disable s:= modiffil(tf_springdef,nr,zi);
  4 15530         if s<>0 then fejlreaktion(7,s,<:spring:>,0);
  4 15531         if fil(zi).iaf(2+i) extract 12 = 0 <*sidste løb*> then
  4 15532         begin
  5 15533           io_meddelelse(if res=3 then 6 else 5,0,
  5 15534             if res=3 then id1 else id2,nr);
  5 15535           for i:= 1,2,3 do springtabel(nr,i):= 0; <*annuleret*>
  5 15536           springtid(nr):= springstart(nr):= 0.0;
  5 15537         end
  4 15538         else
  4 15539         begin
  5 15540           springtid(nr):= springtid(nr) +(fil(zi).iaf(2+i) extract 12)*60.0;
  5 15541           if res = 3 then
  5 15542           begin
  6 15543             fil(zi).iaf(2+i-1):= (1 shift 23) add
  6 15544                                  (fil(zi).iaf(2+i-1) extract 22);
  6 15545             fil(zi).iaf(2+i)  := (1 shift 22) add
  6 15546                                  (fil(zi).iaf(2+i)   extract 22);
  6 15547             springtabel(nr,3):=(i+1) shift 12 add (springtabel(nr,3) extract 12);
  6 15548           end
  5 15549           else
  5 15550           springtabel(nr,3):= (-i-1) shift 12 add (springtabel(nr,3) extract 12);
  5 15551         end;
  4 15552       end;
  3 15553     <*+2*>
  3 15554     <**> disable
  3 15555     <**> if testbit44 and overvåget then
  3 15556     <**> begin
  4 15557     <**>   skriv_vt_spring(out,0); write(out,<:   springtabel efter ændring:>);
  4 15558     <**>   p_springtabel(out); ud;
  4 15559     <**> end;
  3 15560     <*-2*>
  3 15561     
  3 15561       nr:= nr +1;
  3 15562       goto næste_sekv;
  3 15563     \f

  3 15563     message procedure vt_spring side 7 - 810506/cl;
  3 15564     
  3 15564     afkod_operation:
  3 15565     <*+2*>
  3 15566     <**>  disable
  3 15567     <**>  if testbit41 and overvåget then
  3 15568     <**>  begin
  4 15569     <**>    skriv_vt_spring(out,0); write(out,<:   modtaget operation:>);
  4 15570     <**>    skriv_op(out,komm_op);
  4 15571     <**>  end;
  3 15572     <*-2*>
  3 15573     
  3 15573       disable
  3 15574       begin integer opk;
  4 15575     
  4 15575         opk:= d.komm_op.opkode extract 12;
  4 15576         funk:= if opk = 30 <*sp,d*> then 5 else
  4 15577                if opk = 31 <*sp. *> then 1 else
  4 15578                if opk = 32 <*sp,v*> then 4 else
  4 15579                if opk = 33 <*sp,o*> then 6 else
  4 15580                if opk = 34 <*sp,r*> then 2 else
  4 15581                if opk = 35 <*sp,a*> then 3 else
  4 15582                   0;
  4 15583         if funk = 0 then fejlreaktion(2,opk,<:vt_spring:>,0);
  4 15584     
  4 15584         if funk <> 6 <*sp,o*> then
  4 15585         begin <* find nr i springtabel *>
  5 15586           nr:= 0;
  5 15587           for i:= 1 step 1 until max_antal_spring do
  5 15588             if springtabel(i,1) = d.komm_op.data(1) and
  5 15589                springtabel(i,2) = d.komm_op.data(2) then nr:= i;
  5 15590         end;
  4 15591       end;
  3 15592       if funk = 6 then goto oversigt;
  3 15593       if funk = 5 then goto definer;
  3 15594     
  3 15594       if nr = 0 then
  3 15595       begin
  4 15596         returner_op(komm_op,37<*spring ukendt*>);
  4 15597         goto næste_tid;
  4 15598     end;
  3 15599     
  3 15599       goto case funk of(start,indsæt,annuler,vis);
  3 15600     \f

  3 15600     message procedure vt_spring side 8 - 810525/cl;
  3 15601     
  3 15601     start:
  3 15602       if springtabel(nr,3) shift (-12) <> 0 then
  3 15603       begin returner_op(komm_op,38); goto næste_tid; end;
  3 15604       disable
  3 15605       begin <* find linie_løb_og_udtag *>
  4 15606         s:= modif_fil(tf_springdef,nr,zi);
  4 15607         if s <> 0 then fejlreaktion(7,s,<:spring,start:>,0);
  4 15608         id1:= fil(zi).iaf(1) extract 15 shift 7
  4 15609             + fil(zi).iaf(3) shift (-12) extract 7 +1 shift 22;
  4 15610         id2:= 0;
  4 15611       end;
  3 15612       vt_operation(12,id1,id2,res,res_inf);
  3 15613     
  3 15613       disable <* check resultat *>
  3 15614         medd_kode:= if res = 3 <*ok*> then 7 else
  3 15615                     if res = 9 <*linie/løb ukendt*> then 1 else
  3 15616                     if res =14 <*optaget*> then 4 else
  3 15617                     if res =18 <*i kø*> then 3 else 0;
  3 15618       returner_op(komm_op,3);
  3 15619       if medd_kode = 0 then goto næste_tid;
  3 15620     
  3 15620       <* send spring-meddelelse til io *>
  3 15621       io_meddelelse(medd_kode,res_inf,id1,nr);
  3 15622     
  3 15622       <* opdater springtabel *>
  3 15623       disable
  3 15624       begin
  4 15625         s:= modif_fil(tf_springdef,nr,zi);
  4 15626         if s <> 0 then fejlreaktion(7,s,<:spring,start:>,0);
  4 15627         springtabel(nr,3):= (if res = 3 then 2 else (-2)) shift 12
  4 15628                             add (springtabel(nr,3) extract 12);
  4 15629         systime(1,0.0,nu);
  4 15630         springstart(nr):= nu;
  4 15631         springtid(nr):= nu +fil(zi).iaf(3) extract 12 *60.0;
  4 15632         if res = 3 then fil(zi).iaf(3):= fil(zi).iaf(3) add (1 shift 22);
  4 15633       end;
  3 15634     <*+2*>
  3 15635     <**> disable
  3 15636     <**> if testbit44 and overvåget then
  3 15637     <**> begin
  4 15638     <**>   skriv_vt_spring(out,0); write(out,<:   springtabel efter ændring:>);
  4 15639     <**>   p_springtabel(out); ud;
  4 15640     <**> end;
  3 15641     <*-2*>
  3 15642     
  3 15642       goto næste_tid;
  3 15643     \f

  3 15643     message procedure vt_spring side 9 - 810506/cl;
  3 15644     
  3 15644     indsæt:
  3 15645       if springtabel(nr,3) shift (-12) = 0 then
  3 15646       begin <* ikke igangsat *>
  4 15647         returner_op(komm_op,41);
  4 15648        goto næste_tid;
  4 15649       end;
  3 15650       <* find frie linie/løb *>
  3 15651       disable
  3 15652       begin
  4 15653         s:= læs_fil(tf_springdef,nr,zi);
  4 15654         if s <> 0 then fejlreaktion(5,s,<:spring,reserve:>,0);
  4 15655         id2:= 0;
  4 15656         for i:= 1 step 1 until springtabel(nr,3) extract 12 do
  4 15657           if fil(zi).iaf(2+i) shift (-22) = 1 then
  4 15658           id2:= 1 shift 22 +fil(zi).iaf(1) extract 15 shift 7
  4 15659                            +fil(zi).iaf(2+i) shift (-12) extract 7;
  4 15660           id1:= d.komm_op.data(3);
  4 15661       end;
  3 15662     
  3 15662       if id2<>0 then
  3 15663         vt_operation(11,id1,id2,res,res_inf)
  3 15664       else
  3 15665         res:= 42;
  3 15666     
  3 15666       disable <* check resultat *>
  3 15667       medd_kode:= if res = 3 <*ok*> then 8 else
  3 15668                   if res =10 <*bus ukendt*> then 0 else
  3 15669                   if res =11 <*bus allerede indsat*> then 0 else
  3 15670                   if res =12 <*linie/løb allerede besat*> then 2 else
  3 15671                   if res =42 <*intet frit linie/løb*> then 5 else 0;
  3 15672       if res = 11 or res = 12 then d.komm_op.data(4):= res_inf;
  3 15673       returner_op(komm_op,res);
  3 15674       if medd_kode = 0 then goto næste_tid;
  3 15675       
  3 15675       <* send springmeddelelse til io *>
  3 15676       if res<>42 then io_meddelelse(medd_kode,id1,id2,nr);
  3 15677       io_meddelelse(5,0,0,nr);
  3 15678     \f

  3 15678     message procedure vt_spring side 9a - 810525/cl;
  3 15679     
  3 15679       <* annuler springtabel *>
  3 15680       for i:= 1,2,3 do springtabel(nr,i):= 0;
  3 15681       springtid(nr):=  springstart(nr):= 0.0;
  3 15682     <*+2*>
  3 15683     <**> disable
  3 15684     <**> if testbit44 and overvåget then
  3 15685     <**> begin
  4 15686     <**>   skriv_vt_spring(out,0); write(out,<:   springtabel efter ændring:>);
  4 15687     <**>   p_springtabel(out); ud;
  4 15688     <**> end;
  3 15689     <*-2*>
  3 15690     
  3 15690       goto næste_tid;
  3 15691     \f

  3 15691     message procedure vt_spring side 10 - 810525/cl;
  3 15692     
  3 15692     annuler:
  3 15693       disable
  3 15694       begin <* find evt. frit linie/løb *>
  4 15695         s:= læs_fil(tf_springdef,nr,zi);
  4 15696         if s <> 0 then fejlreaktion(5,s,<:spring,annuler:>,0);
  4 15697         id1:= id2:= 0;
  4 15698         for i:= 1 step 1 until springtabel(nr,3) extract 12 do
  4 15699           if fil(zi).iaf(2+i) shift (-22) = 1 then
  4 15700             id2:= fil(zi).iaf(1) extract 15 shift 7
  4 15701                 + fil(zi).iaf(2+i) shift (-12) extract 7 +1 shift 22;
  4 15702         returner_op(komm_op,3);
  4 15703       end;
  3 15704     
  3 15704       <* send springmeddelelse til io *>
  3 15705       io_meddelelse(5,id1,id2,nr);
  3 15706     
  3 15706       <* annuler springtabel *>
  3 15707       for i:= 1,2,3 do springtabel(nr,i):= 0;
  3 15708       springtid(nr):= springstart(nr):= 0.0;
  3 15709     <*+2*>
  3 15710     <**> disable
  3 15711     <**> if testbit44 and overvåget then
  3 15712     <**> begin
  4 15713     <**>   skriv_vt_spring(out,0); write(out,<:   springtabel efter ændring:>);
  4 15714     <**>   p_springtabel(out); ud;
  4 15715     <**> end;
  3 15716     <*-2*>
  3 15717     
  3 15717       goto næste_tid;
  3 15718     
  3 15718     definer:
  3 15719       if nr <> 0 then <* allerede defineret *>
  3 15720       begin
  4 15721         res:= 36;
  4 15722         goto slut_definer;
  4 15723       end;
  3 15724     
  3 15724       <* find frit nr *>
  3 15725       i:= 0;
  3 15726       for i:= i+1 while i<= max_antal_spring and nr = 0 do
  3 15727         if springtabel(i,1) = 0 then nr:= i;
  3 15728       if nr = 0 then
  3 15729       begin
  4 15730         res:= 32; <* ingen fri plads *>
  4 15731         goto slut_definer;
  4 15732       end;
  3 15733     \f

  3 15733     message procedure vt_spring side 11 - 810525/cl;
  3 15734     
  3 15734       disable
  3 15735       begin integer array fdim(1:8),ia(1:32);
  4 15736         <* læs sekvens *>
  4 15737         fdim(4):= d.komm_op.data(3);
  4 15738         s:= hent_fil_dim(fdim);
  4 15739         if s <> 0 then fejlreaktion(8,s,<:spring,def:>,0);
  4 15740         if fdim(1) > 30 then
  4 15741           res:= 35 <* springsekvens for stor *>
  4 15742         else
  4 15743         begin
  5 15744           for i:= 1 step 1 until fdim(1) do
  5 15745           begin
  6 15746             s:= læs_fil(fdim(4),i,zi);
  6 15747             if s <> 0 then fejlreaktion(5,s,<:spring,def:>,0);
  6 15748             ia(i):= fil(zi).iaf(1) shift 12;
  6 15749             if i>1 then ia(i-1):= ia(i-1) + fil(zi).iaf(1) shift (-12);
  6 15750           end;
  5 15751           s:= modif_fil(tf_springdef,nr,zi);
  5 15752           if s <> 0 then fejlreaktion(7,s,<:spring,def:>,0);
  5 15753           fil(zi).iaf(1):= springtabel(nr,1):= d.komm_op.data(1);
  5 15754           fil(zi).iaf(2):= springtabel(nr,2):= d.komm_op.data(2);
  5 15755           iaf:= 4;
  5 15756           tofrom(fil(zi).iaf,ia,60);
  5 15757           iaf:= 0;
  5 15758           springtabel(nr,3):= fdim(1);
  5 15759           springtid(nr):= springstart(nr):= 0.0;
  5 15760           res:= 3;
  5 15761         end;
  4 15762       end;
  3 15763     \f

  3 15763     message procedure vt_spring side 11a - 81-525/cl;
  3 15764     
  3 15764     slut_definer:
  3 15765     
  3 15765       <* slet fil *>
  3 15766       start_operation(spr_op,curr_coruid,cs_spring_retur,104);
  3 15767       d.spr_op.data(4):= d.komm_op.data(3); <* filref *>
  3 15768       signalch(cs_slet_fil,spr_op,vt_optype);
  3 15769       waitch(cs_spring_retur,spr_op,vt_optype,-1);
  3 15770       if d.spr_op.data(9) <> 0 then
  3 15771         fejlreaktion(16,d.spr_op.data(9),<:spring,def:>,0);
  3 15772       returner_op(komm_op,res);
  3 15773     <*+2*>
  3 15774     <**> disable
  3 15775     <**> if testbit44 and overvåget then
  3 15776     <**> begin
  4 15777     <**>   skriv_vt_spring(out,0); write(out,<:    springtabel efter ændring:>);
  4 15778     <**>   p_springtabel(out); ud;
  4 15779     <**> end;
  3 15780     <*-2*>
  3 15781       goto næste_tid;
  3 15782     \f

  3 15782     message procedure vt_spring side 12 - 810525/cl;
  3 15783     
  3 15783     vis:
  3 15784       disable
  3 15785       begin
  4 15786         <* tilknyt fil *>
  4 15787         start_operation(spr_op,curr_coruid,cs_spring_retur,101);
  4 15788         d.spr_op.data(1):= (springtabel(nr,3) extract 12)*2;
  4 15789         d.spr_op.data(2):= 1;
  4 15790         d.spr_op.data(3):= (d.spr_op.data(1) -1)//256 +1;
  4 15791         d.spr_op.data(4):= 2 shift 10; <* spoolfil *>
  4 15792         signalch(cs_opret_fil,spr_op,vt_optype);
  4 15793       end;
  3 15794     
  3 15794       <* afvent svar *>
  3 15795       waitch(cs_spring_retur,spr_op,vt_optype,-1);
  3 15796       if d.spr_op.data(9) <> 0 then
  3 15797        fejlreaktion(13,d.spr_op.data(9),<:spring,vis:>,0);
  3 15798       disable
  3 15799       begin integer array ia(1:30);
  4 15800         s:= læs_fil(tf_springdef,nr,zi);
  4 15801         if s <> 0 then fejlreaktion(5,s,<:spring,vis:>,0);
  4 15802         iaf:= 4;
  4 15803         tofrom(ia,fil(zi).iaf,60);
  4 15804         iaf:= 0;
  4 15805         for i:= 1 step 1 until d.spr_op.data(1) do
  4 15806         begin
  5 15807           s:= skriv_fil(d.spr_op.data(4),(i-1)*2+1,zi);
  5 15808           if s <> 0 then fejlreaktion(6,s,<:spring,vis:>,0);
  5 15809           fil(zi).iaf(1):= if ia(i) shift (-22) = 0 then
  5 15810                            ia(i) shift (-12) extract 7
  5 15811                          else -(ia(i) shift (-12) extract 7);
  5 15812           s:= skriv_fil(d.spr_op.data(4),2*i,zi);
  5 15813           if s <> 0 then fejlreaktion(6,s,<:spring,vis:>,0);
  5 15814           fil(zi).iaf(1):= if i < d.spr_op.data(1) then
  5 15815                              (if ia(i+1) shift (-22) <> 0 then -(ia(i) extract 12)
  5 15816                               else ia(i) extract 12)
  5 15817                            else 0;
  5 15818         end;
  4 15819         d.spr_op.data(1):= d.spr_op.data(1) - 1;
  4 15820         sæt_fil_dim(d.spr_op.data);
  4 15821         d.komm_op.data(3):= d.spr_op.data(1);
  4 15822         d.komm_op.data(4):= d.spr_op.data(4);
  4 15823         raf:= data+8;
  4 15824         d.komm_op.raf(1):= springstart(nr);
  4 15825         returner_op(komm_op,3);
  4 15826       end;
  3 15827       goto næste_tid;
  3 15828     \f

  3 15828     message procedure vt_spring side 13 - 810525/cl;
  3 15829     
  3 15829     oversigt:
  3 15830       disable
  3 15831       begin
  4 15832         <* opret fil *>
  4 15833         start_operation(spr_op,curr_coruid,cs_spring_retur,101);
  4 15834         d.spr_op.data(1):= max_antal_spring;
  4 15835         d.spr_op.data(2):= 4;
  4 15836         d.spr_op.data(3):= (max_antal_spring -1)//64 +1;
  4 15837         d.spr_op.data(4):= 2 shift 10; <* spoolfil *>
  4 15838         signalch(cs_opret_fil,spr_op,vt_optype);
  4 15839       end;
  3 15840     
  3 15840       <* afvent svar *>
  3 15841       waitch(cs_spring_retur,spr_op,vt_optype,-1);
  3 15842       if d.spr_op.data(9) <> 0 then
  3 15843         fejlreaktion(13,d.spr_op.data(9),<:spring,over:>,0);
  3 15844       disable
  3 15845       begin
  4 15846         nr:= 0;
  4 15847         for i:= 1 step 1 until max_antal_spring do
  4 15848         begin
  5 15849           if springtabel(i,1) <> 0 then
  5 15850           begin
  6 15851             nr:= nr +1;
  6 15852             s:= skriv_fil(d.spr_op.data(4),nr,zi);
  6 15853             if s <> 0 then fejlreaktion(6,s,<:spring,over:>,0);
  6 15854             fil(zi).iaf(1):= springtabel(i,1);
  6 15855             fil(zi).iaf(2):= springtabel(i,2);
  6 15856             fil(zi,2):= springstart(i);
  6 15857           end;
  5 15858         end;
  4 15859         d.spr_op.data(1):= nr;
  4 15860         s:= sæt_fil_dim(d.spr_op.data);
  4 15861         if s <> 0 then fejlreaktion(9,s,<:spring,over:>,0);
  4 15862         d.komm_op.data(1):= nr;
  4 15863         d.komm_op.data(2):= d.spr_op.data(4);
  4 15864         returner_op(komm_op,3);
  4 15865       end;
  3 15866       goto næste_tid;
  3 15867     
  3 15867     vt_spring_trap:
  3 15868       disable skriv_vt_spring(zbillede,1);
  3 15869     
  3 15869     end vt_spring;
  2 15870     \f

  2 15870     message procedure vt_auto side 1 - 810505/cl;
  2 15871     
  2 15871     procedure vt_auto(cs_auto_retur,auto_opref);
  2 15872       value           cs_auto_retur,auto_opref;
  2 15873       integer         cs_auto_retur,auto_opref;
  2 15874     begin
  3 15875       integer array field op,auto_op,iaf;
  3 15876       integer filref,id1,id2,aktion,postnr,sidste_post,interval,res,
  3 15877               res_inf,i,s,zi,kl,døgnstart;
  3 15878       real t,nu,næste_tid;
  3 15879       boolean optaget;
  3 15880       integer array filnavn,nytnavn(1:4);
  3 15881     
  3 15881       procedure skriv_vt_auto(zud,omfang);
  3 15882         value                     omfang;
  3 15883         zone                  zud;
  3 15884         integer                   omfang;
  3 15885       begin
  4 15886         long array field laf;
  4 15887     
  4 15887         laf:= 0;
  4 15888         write(zud,"nl",1,<:+++ vt_auto              :>);
  4 15889         if omfang<>0 then
  4 15890         begin
  5 15891           skriv_coru(zud,abs curr_coruno);
  5 15892           write(zud,"nl",1,<<d>,
  5 15893             <:cs-auto-retur  :>,cs_auto_retur,"nl",1,
  5 15894             <:op             :>,op,"nl",1,
  5 15895             <:auto-op        :>,auto_op,"nl",1,
  5 15896             <:filref         :>,filref,"nl",1,
  5 15897             <:id1            :>,id1,"nl",1,
  5 15898             <:id2            :>,id2,"nl",1,
  5 15899             <:aktion         :>,aktion,"nl",1,
  5 15900             <:postnr         :>,postnr,"nl",1,
  5 15901             <:sidste-post    :>,sidste_post,"nl",1,
  5 15902             <:interval       :>,interval,"nl",1,
  5 15903             <:res            :>,res,"nl",1,
  5 15904             <:res-inf        :>,res_inf,"nl",1,
  5 15905             <:i              :>,i,"nl",1,
  5 15906             <:s              :>,s,"nl",1,
  5 15907             <:zi             :>,zi,"nl",1,
  5 15908             <:kl             :>,kl,"nl",1,
  5 15909             <:døgnstart      :>,døgnstart,"nl",1,
  5 15910             <:optaget        :>,if optaget then <:true:> else <:false:>,"nl",1,
  5 15911             <:t              :>,<<zddddd.dddd>,t,"nl",1,
  5 15912             <:nu             :>,nu,"nl",1,
  5 15913             <:næste-tid      :>,næste_tid,"nl",1,
  5 15914             <:filnavn        :>,filnavn.laf,"nl",1,
  5 15915             <:nytnavn        :>,nytnavn.laf,"nl",1,
  5 15916             <::>);
  5 15917         end;
  4 15918       end skriv_vt_auto;
  3 15919     \f

  3 15919     message procedure vt_auto side 2 - 810507/cl;
  3 15920     
  3 15920       iaf:= 0;
  3 15921       auto_op:= auto_opref;
  3 15922       filref:= id1:= id2:= aktion:= postnr:= sidste_post:= 0;
  3 15923       optaget:= false;
  3 15924       næste_tid:= 0.0;
  3 15925       for i:= 1,2,3,4 do filnavn(i):=nytnavn(i):=0;
  3 15926       stack_claim(if cm_test then 298 else 246);
  3 15927       trap(vt_auto_trap);
  3 15928     
  3 15928     <*+2*>
  3 15929     <**> disable if testbit47 and overvåget or testbit28 then
  3 15930     <**>   skriv_vt_auto(out,0);
  3 15931     <*-2*>
  3 15932     
  3 15932     vent:
  3 15933     
  3 15933       systime(1,0.0,nu);
  3 15934       interval:= if filref=0 then (-1) <*uendeligt*> else
  3 15935                  if næste_tid > nu then round(næste_tid-nu) else
  3 15936                  if optaget then 5 else 0;
  3 15937       if interval=0 then interval:= 1;
  3 15938     
  3 15938     <*v*> waitch(cs_vt_auto,op,vt_optype or gen_optype,interval);
  3 15939     
  3 15939       if op<>0 then goto filskift;
  3 15940     
  3 15940       <* vent på adgang til vogntabel *>
  3 15941     <*v*> waitch(cs_vt_adgang,op,vt_optype,-1);
  3 15942     
  3 15942       <* afsend relevant operation til opdatering af vogntabel *>
  3 15943       start_operation(op,curr_coruid,cs_auto_retur,aktion);
  3 15944       d.op.data(1):= id1;
  3 15945       d.op.data(2):= id2;
  3 15946       signalch(cs_vt_opd,op,vt_optype);
  3 15947     <*v*> waitch(cs_auto_retur,op,vt_optype,-1);
  3 15948       res:= d.op.resultat;
  3 15949       id2:= d.op.data(2);
  3 15950       res_inf:= d.op.data(3);
  3 15951     
  3 15951       <* åbn for vogntabel *>
  3 15952       signalch(cs_vt_adgang,op,vt_optype or gen_optype);
  3 15953     \f

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

  3 15999     message procedure vt_auto side 4 - 810507/cl;
  3 16000     
  3 16000       <* find næste post *>
  3 16001       disable
  3 16002       begin
  4 16003         if postnr=sidste_post then
  4 16004         begin <* døgnskift *>
  5 16005           postnr:= 1;
  5 16006           døgnstart:= systime(4,systid(døgnstart+1,120000),t);
  5 16007         end
  4 16008         else postnr:= postnr+1;
  4 16009         s:= læsfil(filref,postnr,zi);
  4 16010         if s<>0 then fejlreaktion(5,s,<:auto:>,0);
  4 16011         aktion:= fil(zi).iaf(1);
  4 16012         næste_tid:= systid(døgnstart,fil(zi).iaf(2));
  4 16013         id1:= fil(zi).iaf(3);
  4 16014         id2:= fil(zi).iaf(4);
  4 16015       end;
  3 16016       goto vent;
  3 16017     \f

  3 16017     message procedure vt_auto side 5 - 810507/cl;
  3 16018     
  3 16018     filskift:
  3 16019     
  3 16019     <*+2*>
  3 16020     <**> disable
  3 16021     <**> if testbit41 and overvåget then
  3 16022     <**> begin
  4 16023     <**>   skriv_vt_auto(out,0);
  4 16024     <**>   write(out,<:   modtaget operation::>);
  4 16025     <**>   skriv_op(out,op);
  4 16026     <**> end;
  3 16027     <*-2*>
  3 16028       for i:= 1 step 1 until 4 do filnavn(i):=nytnavn(i):= 0;
  3 16029       res:= 46;
  3 16030       if d.op.opkode extract 12 <> 21 then
  3 16031         fejlreaktion(2,d.op.opkode extract 12,<:auto,filskift:>,0);
  3 16032       if filref = 0 then goto knyt;
  3 16033     
  3 16033       <* gem filnavn til io-meddelelse *>
  3 16034       disable begin
  4 16035         integer array fdim(1:8);
  4 16036         integer array field navn;
  4 16037         fdim(4):= filref;
  4 16038         hentfildim(fdim);
  4 16039         navn:= 8;
  4 16040         tofrom(filnavn,fdim.navn,8);
  4 16041       end;
  3 16042     
  3 16042       <* frivgiv tilknyttet autofil *>
  3 16043       disable start_operation(auto_op,curr_coruid,cs_auto_retur,103);
  3 16044       d.auto_op.data(4):= filref;
  3 16045       signalch(cs_frigiv_fil,auto_op,vt_optype);
  3 16046     <*v*> waitch(cs_auto_retur,auto_op,vt_optype,-1);
  3 16047       if d.auto_op.data(9) <> 0 then
  3 16048         fejlreaktion(15,d.auto_op.data(9),<:auto,filskift:>,0);
  3 16049       filref:= aktion:= id1:= id2:= postnr:= sidste_post:= 0;
  3 16050       optaget:= false;
  3 16051       næste_tid:= 0.0;
  3 16052       res:= 3;
  3 16053     \f

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

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

  2 16526 
  2 16526 algol list.off;
  2 16527 message coroutinemonitor - 11 ;
  2 16528   
  2 16528 
  2 16528     <*************** coroutine monitor procedures ***************>
  2 16529 
  2 16529 
  2 16529     <***** delay *****
  2 16530 
  2 16530     this procedure links the calling coroutine into the timerqueue and sets
  2 16531     the timeout value to 'timeout'. *>
  2 16532 
  2 16532 
  2 16532     procedure delay (timeout);
  2 16533     value timeout;
  2 16534     integer timeout;
  2 16535     begin
  3 16536       link(current, idlequeue);
  3 16537       link(current + corutimerchain, timerqueue);
  3 16538       d.current.corutimer:= timeout;
  3 16539 
  3 16539 
  3 16539       passivate;
  3 16540       d.current.corutimer:= 0;
  3 16541     end;
  2 16542 \f

  2 16542 
  2 16542 message coroutinemonitor - 12 ;
  2 16543 
  2 16543 
  2 16543     <***** pass *****
  2 16544 
  2 16544     this procedure moves the calling coroutine from the head of the ready 
  2 16545     queue down below all coroutines of lower or equal priority. *>
  2 16546   
  2 16546   
  2 16546     procedure pass;
  2 16547     begin
  3 16548       linkprio(current, readyqueue);
  3 16549 
  3 16549 
  3 16549       passivate;
  3 16550     end;
  2 16551 
  2 16551 
  2 16551     <***** signal ****
  2 16552 
  2 16552     this procedure increases the value af 'semaphore' by 1.
  2 16553     in case some coroutine is already waiting, it is linked into the ready 
  2 16554     queue for activation. the calling coroutine continues execution. *>
  2 16555   
  2 16555 
  2 16555     procedure signal (semaphore);
  2 16556     value semaphore;
  2 16557     integer semaphore;
  2 16558     begin
  3 16559       integer array field sem;
  3 16560       sem:= semaphore;
  3 16561       if d.sem.simvalue < 0 then linkprio(d.sem.simcoru, readyqueue);
  3 16562       d.sem.simvalue:= d.sem.simvalue + 1;
  3 16563 
  3 16563 
  3 16563     end;
  2 16564 \f

  2 16564 
  2 16564 message coroutinemonitor - 13 ;
  2 16565 
  2 16565 
  2 16565     <***** wait *****
  2 16566 
  2 16566     this procedure decreases the value of 'semaphore' by 1.
  2 16567     in case the value of the semaphore is negative after the decrease, the
  2 16568     calling coroutine is linked into the semaphore queue waiting for a
  2 16569     coroutine to signal this semaphore. *>
  2 16570   
  2 16570   
  2 16570     procedure wait (semaphore);
  2 16571     value semaphore;
  2 16572     integer semaphore;
  2 16573     begin
  3 16574       integer array field sem;
  3 16575       sem:= semaphore;
  3 16576       d.sem.simvalue:= d.sem.simvalue - 1;
  3 16577 
  3 16577 
  3 16577       linkprio(current, if d.sem.simvalue < 0 then sem+simcoru else readyqueue);
  3 16578       passivate;
  3 16579     end;
  2 16580 \f

  2 16580 
  2 16580 message coroutinemonitor - 14 ;
  2 16581 
  2 16581 
  2 16581     <***** inspect *****
  2 16582 
  2 16582     this procedure inspects the value of the semaphore and returns it in
  2 16583     'elements'.
  2 16584     the semaphore is left unchanged. *>
  2 16585 
  2 16585 
  2 16585     procedure inspect (semaphore, elements);
  2 16586     value semaphore;
  2 16587     integer semaphore, elements;
  2 16588     begin
  3 16589       integer array field sem;
  3 16590       sem:= semaphore;
  3 16591       elements:= d.sem.simvalue;
  3 16592 
  3 16592 
  3 16592     end;
  2 16593 \f

  2 16593 
  2 16593 message coroutinemonitor - 15 ;
  2 16594 
  2 16594 
  2 16594     <***** signalch *****
  2 16595 
  2 16595     this procedure delivers an operation at 'semaphore'.
  2 16596     in case another coroutine is already waiting for an operation of the
  2 16597     kind 'operationtype' this coroutine will get the operation and it will
  2 16598     be put into the ready queue for activation.
  2 16599     in case no coroutine is waiting for the actial kind of operation it is
  2 16600     linked into the semaphore queue, at the end of the queue
  2 16601     if operation is positive and at the beginning if operation is negative. 
  2 16602     the calling coroutine continues execution. *>
  2 16603   
  2 16603   
  2 16603     procedure signalch (semaphore, operation, operationtype);
  2 16604     value semaphore, operation, operationtype;
  2 16605     integer semaphore, operation;
  2 16606     boolean operationtype;
  2 16607     begin
  3 16608       integer array field firstcoru, currcoru, op,currop;
  3 16609       op:= abs  operation;
  3 16610       d.op.optype:= operationtype;
  3 16611       firstcoru:= semaphore + semcoru;
  3 16612       currcoru:= d.firstcoru.next;
  3 16613       while currcoru <> firstcoru do
  3 16614       begin
  4 16615         if (d.currcoru.corutypeset and operationtype) extract 12 <> 0 then
  4 16616         begin
  5 16617           link(operation, 0);
  5 16618           d.currcoru.coruop:= operation;
  5 16619           linkprio(currcoru, readyqueue);
  5 16620           link(currcoru + corutimerchain, idlequeue);
  5 16621           goto exit;
  5 16622         end else currcoru:= d.currcoru.next;
  4 16623       end;
  3 16624       currop:=semaphore + semop;
  3 16625       if operation < 0 then currop:=d.currop.next;
  3 16626       link(op, currop);
  3 16627   exit:
  3 16628 
  3 16628 
  3 16628     end;
  2 16629 \f

  2 16629 
  2 16629 message coroutinemonitor - 16 ;
  2 16630 
  2 16630 
  2 16630     <***** waitch *****
  2 16631 
  2 16631     this procedure fetches an operation from a semaphore.
  2 16632     in case an operation matching 'operationtypeset' is already waiting at
  2 16633     'semaphore' it is handed over to the calling coroutine.
  2 16634     in case no matching operation is waiting, the calling coroutine is
  2 16635     linked to the semaphore.
  2 16636     in any case the calling coroutine will be stopped and all corouti-
  2 16637     nes are rescheduled. *>
  2 16638   
  2 16638   
  2 16638     procedure waitch (semaphore, operation, operationtypeset, timeout);
  2 16639     value semaphore, operationtypeset, timeout;
  2 16640     integer semaphore, operation, timeout;
  2 16641     boolean operationtypeset;
  2 16642     begin
  3 16643       integer array field firstop, currop;
  3 16644       firstop:= semaphore + semop;
  3 16645       currop:= d.firstop.next;
  3 16646 
  3 16646 
  3 16646       while currop <> firstop do
  3 16647       begin
  4 16648         if (d.currop.optype and operationtypeset) extract 12 <> 0 then
  4 16649         begin
  5 16650           link(currop, 0);
  5 16651           d.current.coruop:= currop;
  5 16652           operation:= currop;
  5 16653 \f

  5 16653 
  5 16653 message coroutinemonitor - 17 ;
  5 16654 
  5 16654           linkprio(current, readyqueue);
  5 16655           passivate;
  5 16656           goto exit;
  5 16657         end else currop:= d.currop.next;
  4 16658       end;
  3 16659       linkprio(current, semaphore + semcoru);
  3 16660       if timeout > 0 then
  3 16661       begin
  4 16662         link(current + corutimerchain, timerqueue);
  4 16663         d.current.corutimer:= timeout;
  4 16664       end else d.current.corutimer:= 0;
  3 16665       d.current.corutypeset:= operationtypeset;
  3 16666       passivate;
  3 16667       if d.current.corutimer < 0 then operation:= 0
  3 16668                                  else operation:= d.current.coruop;
  3 16669       d.current.corutimer:= 0;
  3 16670       currop:= operation;
  3 16671       d.current.coruop:= currop;
  3 16672       link(current+corutimerchain, idlequeue);
  3 16673   exit:
  3 16674 
  3 16674 
  3 16674     end;
  2 16675 \f

  2 16675 
  2 16675 message coroutinemonitor - 18 ;
  2 16676 
  2 16676 
  2 16676     <***** inspectch *****
  2 16677 
  2 16677     this procedure inspects the queue of operations waiting at 'semaphore'.
  2 16678     the number of matching operations are counted and delivered in 'elements'.
  2 16679 if no operations are found the number of coroutines waiting
  2 16680 for operations of the typeset are counted and delivered as
  2 16681 negative value in 'elements'.
  2 16682     the semaphore is left unchanged. *>
  2 16683   
  2 16683   
  2 16683     procedure inspectch (semaphore, operationtypeset, elements);
  2 16684     value semaphore, operationtypeset;
  2 16685     integer semaphore, elements;
  2 16686     boolean operationtypeset;
  2 16687     begin
  3 16688       integer array field firstop, currop,firstcoru,currcoru;
  3 16689       integer counter;
  3 16690       counter:= 0;
  3 16691       firstop:= semaphore + semop;
  3 16692       currop:= d.firstop.next;
  3 16693       while currop <> firstop do
  3 16694       begin
  4 16695         if (operationtypeset and d.currop.optype) extract 12 <> 0 then
  4 16696           counter:= counter + 1;
  4 16697         currop:= d.currop.next;
  4 16698       end;
  3 16699       if counter=0 then
  3 16700       begin
  4 16701         firstcoru:=semaphore + sem_coru;
  4 16702         curr_coru:=d.firstcoru.next;
  4 16703         while curr_coru<>first_coru do
  4 16704         begin
  5 16705           if (operationtypeset and d.curr_coru.corutypeset) extract 12 <>0 then
  5 16706             counter:=counter - 1;
  5 16707           curr_coru:=d.curr_coru.next;
  5 16708         end;
  4 16709       end;
  3 16710       elements:= counter;
  3 16711 
  3 16711 
  3 16711     end;
  2 16712 \f

  2 16712 
  2 16712 message coroutinemonitor - 19 ;
  2 16713 
  2 16713 
  2 16713     <***** csendmessage *****
  2 16714 
  2 16714     this procedure sends the message in 'mess' to the process defined by the name
  2 16715     in 'receiver', and returns an identification of the message extension used
  2 16716     for sending the message (this identification is to be used for calling 'cwait-
  2 16717     answer' or 'cregretmessage'. *>
  2 16718   
  2 16718   
  2 16718     procedure csendmessage (receiver, mess, messextension);
  2 16719     real array receiver;
  2 16720     integer array mess;
  2 16721     integer messextension;
  2 16722     begin
  3 16723       integer bufref, messext;
  3 16724       messref(maxmessext):= 0;
  3 16725       messext:= 1;
  3 16726       while messref(messext) <> 0 do messext:= messext + 1;
  3 16727       if messext = maxmessext then <* no resources *> messext:= 0 else
  3 16728       begin
  4 16729         messcode(messext):= 1 shift 12 add 2;
  4 16730         mon(16) send message :(0, mess, 0, receiver);
  4 16731         messref(messext):= monw2;
  4 16732         if monw2 > 0 then messextension:= messext else messextension:= 0;
  4 16733       end;
  3 16734 
  3 16734 
  3 16734     end;
  2 16735 \f

  2 16735 
  2 16735 message coroutinemonitor - 20 ;
  2 16736 
  2 16736 
  2 16736     <***** cwaitanswer *****
  2 16737 
  2 16737     this procedure asks the coroutine monitor to get an answer to the message
  2 16738     corresponding to 'messextension'. in case the answer has already arrived
  2 16739     it stays in the eventqueue until 'cwaitanswer' is called.
  2 16740     in case 'timeout' is positive, the coroutine is linked into the timer
  2 16741     queue, and in case the answer does not arrive within 'timout' seconds the
  2 16742     coroutine is restarted with result = 0. *>
  2 16743   
  2 16743   
  2 16743     procedure cwaitanswer (messextension, answer, result, timeout);
  2 16744     value messextension, timeout;
  2 16745     integer messextension, result, timeout;
  2 16746     integer array answer;
  2 16747     begin
  3 16748       integer messext;
  3 16749       messext:= messextension;
  3 16750       messcode(messext):= messcode(messext) extract 12;
  3 16751       link(current, idlequeue);
  3 16752       messop(messext):= current;
  3 16753       if timeout > 0 then
  3 16754       begin
  4 16755         link(current + corutimerchain, timerqueue);
  4 16756         d.current.corutimer:= timeout;
  4 16757       end else d.current.corutimer:= 0;
  3 16758 
  3 16758 
  3 16758       passivate;
  3 16759       if d.current.corutimer < 0 then result:= 0 else
  3 16760       begin
  4 16761         mon(18) wait answer :(0, answer, messref(messextension), 0);
  4 16762         result:= monw0;
  4 16763         baseevent:= 0;
  4 16764         messref(messextension):= 0;
  4 16765       end;
  3 16766       d.current.corutimer:= 0;
  3 16767       link(current+corutimerchain, idlequeue);
  3 16768     end;
  2 16769 \f

  2 16769 
  2 16769 message coroutinemonitor - 21 ;
  2 16770 
  2 16770 
  2 16770     <***** cwaitmessage *****
  2 16771 
  2 16771     this procedure asks the coroutine monitor to give it a message, when some-
  2 16772     one arrives. in case a message has arrived already it stays at the event queue
  2 16773     until 'cwaitmessage' is called.
  2 16774     in case 'timeout' is positive, the coroutine is linked into the timer queue,
  2 16775     if no message arrives within 'timeout' seconds, the coroutine is restarted
  2 16776     with messbufferref = 0. *>
  2 16777   
  2 16777   
  2 16777     procedure cwaitmessage (processextension, mess, messbufferref, timeout);
  2 16778     value timeout, processextension;
  2 16779     integer processextension, messbufferref, timeout;
  2 16780     integer array mess;
  2 16781     begin
  3 16782       integer i;
  3 16783       integer array field messbuf;
  3 16784       proccode(processextension):= 2;
  3 16785       procop(processextension):= current;
  3 16786       link(current, idlequeue);
  3 16787       if timeout > 0 then
  3 16788       begin
  4 16789         link(current + corutimerchain, timerqueue);
  4 16790         d.current.corutimer:= timeout;
  4 16791       end else d.current.corutimer:= 0;
  3 16792 
  3 16792 
  3 16792       passivate;
  3 16793       if d.current.corutimer < 0 then messbufferref:= 0 else
  3 16794       begin
  4 16795         messbuf:= procop(processextension);
  4 16796         for i:=1 step 1 until 8 do mess(i):= core.messbuf(4+i);
  4 16797         proccode(procext):= 1 shift 12;
  4 16798         messbufferref:= messbuf;
  4 16799         baseevent:= 0;
  4 16800       end;
  3 16801       d.current.corutimer:= 0;
  3 16802       link(current+corutimerchain, idlequeue);
  3 16803     end;
  2 16804 \f

  2 16804 
  2 16804 message coroutinemonitor - 22 ;
  2 16805 
  2 16805 
  2 16805     <***** cregretmessage *****
  2 16806 
  2 16806     this procedure regrets the message corresponding to messageexten-
  2 16807     sion, to release message buffer and message extension.
  2 16808     i/o messages are not regretable. *>
  2 16809 
  2 16809   
  2 16809   
  2 16809     procedure cregretmessage (messageextension);
  2 16810     value messageextension;
  2 16811     integer messageextension;
  2 16812     begin
  3 16813       integer array field messbuf;
  3 16814       messbuf:= messref(messageextension);
  3 16815       mon(82) regret message :(0, 0, messbuf, 0);
  3 16816       messref(messageextension):= 0;
  3 16817 
  3 16817 
  3 16817     end;
  2 16818 \f

  2 16818 
  2 16818 message coroutinemonitor - 23 ;
  2 16819 
  2 16819 
  2 16819     <***** semsendmessage *****
  2 16820 
  2 16820     this procedure sends the message 'mess' to 'receiver' and at the same time it
  2 16821     defines a 'signalch(semaphore, operation, operationtype)' to be performed
  2 16822     by the monitor, when the answer arrives.
  2 16823     in case there are too few resources to send the message, the operation is
  2 16824     returned immediately with the result field set to zero. *>
  2 16825   
  2 16825   
  2 16825     procedure semsendmessage (receiver, mess, semaphore, operation, operationtype);
  2 16826     value semaphore, operation, operationtype;
  2 16827     real array receiver;
  2 16828     integer array mess;
  2 16829     integer semaphore, operation;
  2 16830     boolean operationtype;
  2 16831     begin
  3 16832       integer array field op;
  3 16833       integer messext;
  3 16834       op:= operation;
  3 16835       messref(maxmessext):= 0;
  3 16836       messext:= 1;
  3 16837       while messref(messext) <> 0 do messext:= messext + 1;
  3 16838       if messext < maxmessext then
  3 16839       begin
  4 16840         messop(messext):= op;
  4 16841         messcode(messext):=1;
  4 16842         d.op(1):= semaphore;
  4 16843         d.op.optype:= operationtype;
  4 16844         mon(16) send message :(0, mess, 0, receiver);
  4 16845         messref(messext):= monw2;
  4 16846       end;
  3 16847 
  3 16847 
  3 16847       if messext = maxmessext or messref(messext) = 0 <* no resources *> then
  3 16848       begin   <* return the operation immediately with result = 0 *>
  4 16849         d.op(9):= 0;
  4 16850         signalch(semaphore, op, operationtype);
  4 16851       end;
  3 16852     end;
  2 16853 \f

  2 16853 
  2 16853 message coroutinemonitor - 24 ;
  2 16854 
  2 16854 
  2 16854     <***** semwaitmessage *****
  2 16855 
  2 16855     this procedure defines a 'signalch(semaphore, operation, operationtype)' to
  2 16856     be performed by the coroutine monitor when a message arrives to the process
  2 16857     corresponding to 'processextension'. *>
  2 16858   
  2 16858   
  2 16858     procedure semwaitmessage (processextension, semaphore, operation, operationtype);
  2 16859     value processextension, semaphore, operation, operationtype;
  2 16860     integer processextension, semaphore, operation;
  2 16861     boolean operationtype;
  2 16862     begin
  3 16863       integer array field op;
  3 16864       op:= operation;
  3 16865       procop(processextension):= operation;
  3 16866       d.op(1):= semaphore;
  3 16867       d.op.optype:= operationtype;
  3 16868       proccode(processextension):= 1;
  3 16869 
  3 16869 
  3 16869     end;
  2 16870 \f

  2 16870 
  2 16870 message coroutinemonitor - 25 ;
  2 16871 
  2 16871 
  2 16871     <***** semregretmessage *****
  2 16872 
  2 16872     this procedure regrets a message sent by semsendmessage.
  2 16873     the message is identified by the operation in which the answer should be
  2 16874     returned.
  2 16875     the procedure sets the result field of the operation to zero, and then
  2 16876     returns it by performing a signalch. *>
  2 16877   
  2 16877   
  2 16877     procedure semregretmessage (operation);
  2 16878     value operation;
  2 16879     integer operation;
  2 16880     begin
  3 16881       integer i, j;
  3 16882       integer array field op, sem;
  3 16883       op:= operation;
  3 16884       i:= 1;
  3 16885       while i < maxmessext do
  3 16886       begin
  4 16887         if messref(i) > 0 and (messcode(i) = 1 and messop(i) = op) then
  4 16888         begin
  5 16889           mon(82) regret message :(0, 0, messref(i), 0);
  5 16890           messref(i):= 0;
  5 16891           sem:= d.op(1);
  5 16892           for j:=1 step 1 until 9 do d.op(j):= 0;
  5 16893           signalch(sem, op, d.op.optype);
  5 16894           i:= maxmessext;
  5 16895         end;
  4 16896         i:= i + 1;
  4 16897       end;
  3 16898 
  3 16898 
  3 16898     end;
  2 16899 \f

  2 16899 
  2 16899 message coroutinemonitor - 26 ;
  2 16900 
  2 16900 
  2 16900     <***** link *****
  2 16901 
  2 16901     this procedure links an object (allocated in the descriptor array 'd') into
  2 16902     a queue of alements (allocated in the descriptor array 'd'). the queues
  2 16903     are all double chained, and the chainhead is of the same format as the chain
  2 16904     fields of the objects.
  2 16905     the procedure links the object immediately after the head. *>
  2 16906   
  2 16906   
  2 16906     procedure link (object, chainhead);
  2 16907     value object, chainhead;
  2 16908     integer object, chainhead;
  2 16909     begin
  3 16910       integer array field prevelement, nextelement, chead, obj;
  3 16911       obj:= object;
  3 16912       chead:= chainhead;
  3 16913       prevelement:= d.obj.prev;
  3 16914       nextelement:= d.obj.next;
  3 16915       d.prevelement.next:= nextelement;
  3 16916       d.nextelement.prev:= prevelement;
  3 16917       if chead > 0 then <* link into queue *>
  3 16918       begin
  4 16919         prevelement:= d.chead.prev;
  4 16920         d.obj.prev:= prevelement;
  4 16921         d.prevelement.next:= obj;
  4 16922         d.obj.next:= chead;
  4 16923         d.chead.prev:= obj;
  4 16924       end else
  3 16925       begin  <* link onto itself *>
  4 16926         d.obj.prev:= obj;
  4 16927         d.obj.next:= obj;
  4 16928       end;
  3 16929     end;
  2 16930 \f

  2 16930 
  2 16930 message coroutinemonitor - 27 ;
  2 16931 
  2 16931 
  2 16931     <***** linkprio *****
  2 16932 
  2 16932     this procedure is used to link coroutines into queues corresponding to
  2 16933     the priorities of the actual coroutine and the queue elements.
  2 16934     the object is linked immediately before the first coroutine of lower prio-
  2 16935     rity. *>
  2 16936   
  2 16936   
  2 16936     procedure linkprio (object, chainhead);
  2 16937     value object, chainhead;
  2 16938     integer object, chainhead;
  2 16939     begin
  3 16940       integer array field currelement, chead, obj;
  3 16941       obj:= object;
  3 16942       chead:= chainhead;
  3 16943       currelement:= d.chead.next;
  3 16944       while currelement <> chead
  3 16945             and d.currelement.corupriority <= d.obj.corupriority 
  3 16946               do currelement:= d.currelement.next;
  3 16947       link(obj, currelement);
  3 16948     end;
  2 16949 \f

  2 16949 
  2 16949 message coroutinemonitor - 28 ;
  2 16950 
  2 16950 \f

  2 16950 
  2 16950 message coroutinemonitor - 30a ;
  2 16951 
  2 16951 
  2 16951     <*************** extention to coroutine monitor procedures **********>
  2 16952 
  2 16952     <***** signalbin *****
  2 16953 
  2 16953     this procedure simulates a binary semaphore on a simple semaphore
  2 16954     by testing the value of the semaphore before signaling the
  2 16955     semaphore. if the value of the semaphore is one (=open) nothing is
  2 16956     done, otherwise a normal signal is carried out. *>
  2 16957 
  2 16957 
  2 16957     procedure signalbin(semaphore);
  2 16958     value semaphore;
  2 16959     integer semaphore;
  2 16960     begin
  3 16961       integer array field sem;
  3 16962       integer val;
  3 16963       sem:= semaphore;
  3 16964       inspect(sem,val);
  3 16965       if val<1 then signal(sem);
  3 16966     end;
  2 16967 \f

  2 16967 
  2 16967 message coroutinemonitor - 30b ;
  2 16968 
  2 16968   <***** coruno *****
  2 16969 
  2 16969   delivers the coroutinenumber for a give coroutine id.
  2 16970   if the coroutine does not exists the value 0 is delivered *>
  2 16971 
  2 16971   integer procedure coru_no(coru_id);
  2 16972   value                     coru_id;
  2 16973   integer                   coru_id;
  2 16974   begin
  3 16975     integer array field cor;
  3 16976 
  3 16976     coru_no:= 0;
  3 16977     for cor:= firstcoru step corusize until (coruref-1) do
  3 16978       if d.cor.coruident//1000 = coru_id then
  3 16979       coru_no:= d.cor.coruident mod 1000;
  3 16980   end;
  2 16981 \f

  2 16981 
  2 16981 message coroutinemonitor - 30c ;
  2 16982 
  2 16982   <***** coroutine *****
  2 16983 
  2 16983   delivers the referencebyte for the coroutinedescriptor for
  2 16984   a coroutine identified by coroutinenumber *>
  2 16985 
  2 16985   integer procedure coroutine(cor_no);
  2 16986     value                     cor_no;
  2 16987     integer                   cor_no;
  2 16988   coroutine:= if cor_no <= 0 or maxcoru < cor_no then -1 else
  2 16989               firstcoru + (cor_no-1)*corusize;
  2 16990 \f

  2 16990 
  2 16990 message coroutinemonitor - 30d ;
  2 16991 
  2 16991 <***** curr_coruno *****
  2 16992 
  2 16992 delivers number of calling coroutine 
  2 16993     curr_coruno:
  2 16994         < 0     = -current_coroutine_number in disabled mode
  2 16995         = 0     = procedure not called from coroutine
  2 16996         > 0     = current_coroutine_number in enabled mode   *>
  2 16997 
  2 16997 integer procedure curr_coruno;
  2 16998 begin
  3 16999   integer i;
  3 17000   integer array ia(1:12);
  3 17001 
  3 17001   i:= system(12,0,ia);
  3 17002   if i > 0 then
  3 17003   begin
  4 17004     i:= system(12,1,ia);
  4 17005     curr_coruno:= ia(3);
  4 17006   end else curr_coruno:= 0;
  3 17007 end curr_coruno;
  2 17008 \f

  2 17008 
  2 17008 message coroutinemonitor - 30e ;
  2 17009 
  2 17009 <***** curr_coruid *****
  2 17010 
  2 17010 delivers coruident of calling coroutine :
  2 17011 
  2 17011     curr_coruid:
  2 17012         > 0     = coruident of calling coroutine
  2 17013         = 0     = procedure not called from coroutine  *>
  2 17014 
  2 17014 integer procedure curr_coruid;
  2 17015 begin
  3 17016   integer cor_no;
  3 17017   integer array field cor;
  3 17018 
  3 17018   cor_no:= abs curr_coruno;
  3 17019   if cor_no <> 0 then
  3 17020   begin
  4 17021     cor:= coroutine(cor_no);
  4 17022     curr_coruid:= d.cor.coruident // 1000;
  4 17023   end
  3 17024   else curr_coruid:= 0;
  3 17025 end curr_coruid;
  2 17026 \f

  2 17026 message coroutinemonitor - 30f.1 ;
  2 17027 
  2 17027     <**** getch *****
  2 17028 
  2 17028     this procedure searches the queue of operations waiting at 'semaphore'
  2 17029     to find an operation that matches the operationstypeset and a set of
  2 17030     select-values. each select value is specified by type and fieldvalue
  2 17031     in integer array 'type' and by the value in integer array 'val'.
  2 17032 
  2 17032 0: eq  0:   not used
  2 17033 1: lt  1:   boolean
  2 17034 2: le  2:   integer
  2 17035 3: gt  3:   long
  2 17036 4: ge  4:   real
  2 17037 5: ne
  2 17038 *>
  2 17039 
  2 17039     procedure getch(semaphore,operation,operationtypeset,type,val);
  2 17040     value semaphore,operationtypeset;
  2 17041     integer semaphore,operation;
  2 17042     boolean operationtypeset;
  2 17043     integer array type,val;
  2 17044     begin
  3 17045       integer array field firstop,currop;
  3 17046       integer ø,n,i,f,t,rel,i1,i2;
  3 17047       boolean field bf,bfval;
  3 17048       integer field intf;
  3 17049       long field lf,lfval; long l1,l2;
  3 17050       real field rf,rfval; real r1,r2;
  3 17051   
  3 17051       boolean match;
  3 17052 
  3 17052       operation:= 0;
  3 17053       n:= system(3,ø,type);
  3 17054       match:= false;
  3 17055       firstop:= semaphore + semop;
  3 17056       currop:= d.firstop.next;
  3 17057       while currop <> firstop and -,match do
  3 17058       begin
  4 17059         if (operationtypeset and d.currop.optype) extract 12 <> 0 then
  4 17060         begin
  5 17061           i:= n;
  5 17062           match:= true;
  5 17063 \f

  5 17063 message coroutinemonitor - 30f.2 ;
  5 17064 
  5 17064           while match and (if i <= ø then type(i) >= 0 else false) do
  5 17065           begin
  6 17066             rel:= type(i) shift(-18);
  6 17067             t:= type(i) shift(-12) extract 6;
  6 17068             f:= type(i) extract 12;
  6 17069             if f > 2047 then f:= f -4096;
  6 17070             case t+1 of
  6 17071             begin
  7 17072               ; <* not used *>
  7 17073 
  7 17073               begin <*boolean or signed short integer*>
  8 17074                 bf:= f;
  8 17075                 bfval:= 2*i;
  8 17076                 i1:= d.currop.bf extract 12;
  8 17077                 if i1 > 2047 then i1:= i1-4096;
  8 17078                 i2:= val.bfval extract 12;
  8 17079                 if i2 > 2047 then i2:= i2-4096;
  8 17080                 match:= case rel+1 of (i1=i2,i1<i2,i1<=i2,i1>i2,i1>=i2,i1<>i2);
  8 17081               end;
  7 17082 
  7 17082               begin <*integer*>
  8 17083                 intf:= f;
  8 17084                 i1:= d.currop.intf;
  8 17085                 i2:= val(i);
  8 17086                 match:= case rel+1 of (i1=i2,i1<i2,i1<=i2,i1>i2,i1>=i2,i1<>i2);
  8 17087               end;
  7 17088 
  7 17088               begin <*long*>
  8 17089                 lf:= f;
  8 17090                 lfval:= i*2;
  8 17091                 l1:= d.currop.lf;
  8 17092                 l2:= val.lfval;
  8 17093                 match:= case rel+1 of (l1=l2,l1<l2,l1<=l2,l1>l2,l1>=l2,l1<>l2);
  8 17094               end;
  7 17095 
  7 17095               begin <*real*>
  8 17096                 rf:= f;
  8 17097                 rfval:= i*2;
  8 17098                 r1:= d.currop.rf;
  8 17099                 r2:= val.rfval;
  8 17100                 match:= case rel+1 of (r1=r2,r1<r2,r1<=r2,r1>r2,r1>=r2,r1<>r2);
  8 17101               end;
  7 17102 
  7 17102             end;<*case t+1*>
  6 17103 
  6 17103             i:= i+1;
  6 17104           end; <*while match and i<=ø and t>=0 *>
  5 17105 \f

  5 17105 message coroutinemonitor - 30f.3 ;
  5 17106 
  5 17106         end; <* if operationtypeset and ---*>
  4 17107         if -,match then currop:= d.currop.next;
  4 17108       end; <*while currop <> firstop and -,match*>
  3 17109 
  3 17109       if match then
  3 17110       begin
  4 17111         link(currop,0);
  4 17112         d.current.coruop:= currop;
  4 17113         operation:= currop;
  4 17114       end;
  3 17115     end getch;
  2 17116 \f

  2 17116 
  2 17116 message coroutinemonitor - 31 ;
  2 17117 
  2 17117     activity(maxcoru);
  2 17118 
  2 17118     goto initialization;
  2 17119 
  2 17119 
  2 17119 
  2 17119     <*************** event handling ***************>
  2 17120 
  2 17120 
  2 17120   
  2 17120   takeexternal:
  2 17121     currevent:= baseevent;
  2 17122     eventqueueempty:= false;
  2 17123     repeat
  2 17124       current:= 0;
  2 17125       prevevent:= currevent;
  2 17126       mon(66) test event :(0, 0, currevent, 0);
  2 17127       currevent:= monw2;
  2 17128       if monw0 < 0 <* no event *> then goto takeinternal;
  2 17129       if monw0 = 1 and monw1 > 0 and monw1 <= maxcoru then
  2 17130         cmi:= monw1
  2 17131       else
  2 17132         cmi:= - monw0;
  2 17133 
  2 17133       if cmi > 0 then
  2 17134         begin <* answer to activity zone *>
  3 17135           current:= firstcoru + (cmi - 1) * corusize;
  3 17136           linkprio(current, readyqueue);
  3 17137           baseevent:= 0;
  3 17138         end else
  2 17139   
  2 17139       if cmi = 0 then
  2 17140         begin <* message arrived *>
  3 17141 \f

  3 17141 
  3 17141 message coroutinemonitor - 32 ;
  3 17142 
  3 17142           receiver:= core.currevent(3);
  3 17143           if receiver < 0 then receiver:= - receiver;
  3 17144           procref(maxprocext):= receiver;
  3 17145           procext:= 1;
  3 17146           while procref(procext) <> receiver do procext:= procext + 1;
  3 17147           if procext = maxprocext then
  3 17148           begin <* receiver unknown *>
  4 17149             <* leave the message unchanged *>
  4 17150           end else
  3 17151           if proccode(procext) shift (-12) = 0 then
  3 17152           begin  <* the receiver is ready for accepting messages *>
  4 17153             mon(26) get event :(0, 0, currevent, 0);
  4 17154             case proccode(procext) of
  4 17155             begin
  5 17156               begin <* message received by semwaitmessage *>
  6 17157                 op:= procop(procext);
  6 17158                 sem:= d.op(1);
  6 17159                 for cmj:=1 step 1 until 8 do d.op(cmj):= core.currevent(4+cmj);
  6 17160                 d.op(9):= currevent;
  6 17161                 signalch(sem, op, d.op.optype);
  6 17162                 proccode(procext):= 1 shift 12;
  6 17163               end;
  5 17164               begin <* message received by cwaitmessage *>
  6 17165                 current:= procop(procext);
  6 17166                 procop(procext):= currevent;
  6 17167                 linkprio(current, readyqueue);
  6 17168                 link(current + corutimerchain, idlequeue);
  6 17169 
  6 17169 
  6 17169               end;
  5 17170             end; <* case *>
  4 17171             currevent:= baseevent;
  4 17172             proccode(procext):= 1 shift 12;
  4 17173           end;
  3 17174         end <* message *> else
  2 17175   
  2 17175       if cmi = -1 then
  2 17176         begin  <* answer arrived *>
  3 17177 \f

  3 17177 
  3 17177 message coroutinemonitor - 33 ;
  3 17178 
  3 17178           if currevent = timermessage then
  3 17179           begin
  4 17180             mon(26) get event :(0, 0, currevent, 0);
  4 17181             coru:= d.timerqueue.next;
  4 17182             while coru <> timerqueue do
  4 17183             begin
  5 17184               current:= coru - corutimerchain;
  5 17185               d.current.corutimer:= d.current.corutimer - clockmess(2);
  5 17186               coru:= d.coru.next;
  5 17187               if d.current.corutimer <= 0 then
  5 17188               begin <* timer perion expired *>
  6 17189                 d.current.corutimer:= -1;
  6 17190                 linkprio(current, readyqueue);
  6 17191                 link(current + corutimerchain, idlequeue);
  6 17192               end;
  5 17193             end;
  4 17194             mon(16) send message :(0, clockmess, 0, clock);
  4 17195             timermessage:= monw2;
  4 17196             currevent:= baseevent;
  4 17197           end <* timer answer *> else
  3 17198           begin
  4 17199             messref(maxmessext):= currevent;
  4 17200             messext:= 1;
  4 17201             while messref(messext) <> currevent do messext:= messext + 1;
  4 17202             if messext = maxmessext then
  4 17203             begin <* the answer is unknown *>
  5 17204               <* leave the answer unchanged - it may belong to an activity *>
  5 17205             end else
  4 17206             if messcode(messext) shift (-12) = 0 then
  4 17207             begin
  5 17208               case messcode(messext) extract 12 of
  5 17209               begin
  6 17210 \f

  6 17210 
  6 17210 message coroutinemonitor - 34 ;
  6 17211                 begin <* answer arrived after semsendmessage *>
  7 17212                   op:= messop(messext);
  7 17213                   sem:= d.op(1);
  7 17214                   mon(18) wait answer :(0, d.op, currevent, 0);
  7 17215                   d.op(9):= monw0;
  7 17216                   signalch(sem, op, d.op.optype);
  7 17217                   messref(messext):= 0;
  7 17218                   baseevent:= 0;
  7 17219                 end;
  6 17220                 begin <* answer arrived after csendmessage *>
  7 17221                   current:= messop(messext);
  7 17222                   linkprio(current, readyqueue);
  7 17223                   link(current + corutimerchain, idlequeue);
  7 17224 
  7 17224 
  7 17224                 end;
  6 17225               end;
  5 17226             end else baseevent:= currevent;
  4 17227           end;
  3 17228         end;
  2 17229     until eventqueueempty;
  2 17230 \f

  2 17230 
  2 17230 message coroutinemonitor - 35 ;
  2 17231 
  2 17231 
  2 17231 
  2 17231     <*************** coroutine activation ***************>
  2 17232 
  2 17232 takeinternal:
  2 17233   
  2 17233     current:= d.readyqueue.next;
  2 17234     if current = readyqueue then
  2 17235     begin
  3 17236       mon(24) wait event :(0, 0, prevevent, 0);
  3 17237       goto takeexternal;
  3 17238     end;
  2 17239 
  2 17239 <*+2*> if testbit30 and d.current.corutestmask shift(-11) then
  2 17240 <**>   begin
  3 17241 <**>     systime(5,0,r);
  3 17242 <**>     write(out,"nl",1,<<zd dd dd>,r,<: coroutine: :>,<<dd>,
  3 17243 <**>       d.current.coruident mod 1000,<:  ident: :>,<<ddd>,
  3 17244 <**>       d.current.coruident//1000,<: aktiveres:>);
  3 17245 <**>   end;
  2 17246 <*-2*>
  2 17247 
  2 17247     corustate:= activate(d.current.coruident mod 1000);
  2 17248     cmi:= corustate extract 24;
  2 17249 <*+2*> if testbit30 and d.current.corutestmask shift(-11) then
  2 17250 <**>   begin
  3 17251 <**>     systime(5,0,r);
  3 17252 <**>     write(out,"nl",1,<<zd dd dd>,r,<: coroutine: :>,<<dd>,
  3 17253 <**>       d.current.coruident mod 1000,<:  ident: :>,<<ddd>,
  3 17254 <**>       d.current.coruident//1000,<: afbrudt, årsag=:>,cmi);
  3 17255 <**>   end;
  2 17256 <*-2*>
  2 17257 
  2 17257     if cmi = 1 then
  2 17258     begin  <* programmed passivate *>
  3 17259       goto takeexternal;
  3 17260     end;
  2 17261 
  2 17261     if cmi = 2 then
  2 17262     begin <* implicit passivate in activity *>
  3 17263 
  3 17263 
  3 17263       link(current, idlequeue);
  3 17264       goto takeexternal;
  3 17265     end;
  2 17266 \f

  2 17266 
  2 17266 message coroutinemonitor - 36 ;
  2 17267 
  2 17267     <* coroutine termination (normal or abnormal) *>
  2 17268 
  2 17268 <* aktioner ved normal og unormal coroutineterminering insættes her *>
  2 17269 coru_term:
  2 17270 
  2 17270     begin
  3 17271       if false and alarmcause extract 24 = (-9) <* break *> and
  3 17272          alarmcause shift (-24) extract 24 = 0 then
  3 17273       begin
  4 17274         endaction:= 2;
  4 17275         goto program_slut;
  4 17276       end;
  3 17277       if alarmcause extract 24 = (-9) <* break *> and
  3 17278          alarmcause shift (-24) = 8 <* parent *>
  3 17279       then sæt_bit_i(trapmode,15<*killed activities*>,0<*normal output*>);
  3 17280       if alarmcause shift (-24) extract  24 <> -2 or
  3 17281          alarmcause extract 24 <> -13 then
  3 17282       begin
  4 17283         write(zbillede,"nl",1,<:alarmcause(param,cause)=:>,<<d>,
  4 17284               alarmcause shift (-24),<:,:>,
  4 17285               alarmcause extract 24);
  4 17286         for i:=1 step 1 until max_coru do
  4 17287           j:=activate(-i); <* kill *>
  4 17288 <*      skriv billede *>
  4 17289       end
  3 17290       else
  3 17291       begin
  4 17292         errorbits:= 0; <* ok.yes warning.no *>
  4 17293         goto finale;
  4 17294       end;
  3 17295     end;
  2 17296 
  2 17296 goto dump;
  2 17297 
  2 17297     link(current, idlequeue);
  2 17298     goto takeexternal;
  2 17299 \f

  2 17299 
  2 17299 message coroutinemonitor - 37 ;
  2 17300 
  2 17300 
  2 17300 
  2 17300   initialization:
  2 17301 
  2 17301 
  2 17301     <*************** initialization ***************>
  2 17302   
  2 17302     <* chain head *>
  2 17303   
  2 17303        prev:= -2;                         <* -2  prev *>
  2 17304        next:= 0;                          <* +0  next *>
  2 17305   
  2 17305     <* corutine descriptor *>
  2 17306   
  2 17306                                           <* -2  prev *>
  2 17307                                           <* +0  next *>
  2 17308                                           <* +2  (link field) *>
  2 17309        corutimerchain:= next + 4;         <* +4  corutimerchain *>
  2 17310                                           <* +6  (link field) *>
  2 17311        coruop:= corutimerchain + 4;       <* +8  coruop *>
  2 17312        corutimer:= coruop + 2;            <*+10  corutimer *>
  2 17313        coruident:= corutimer + 2;         <*+12  coruident *>
  2 17314        corupriority:= coruident + 2;      <*+14  corupriority *>
  2 17315        corutypeset:= corupriority + 1;    <*+15  corutypeset *>
  2 17316        corutestmask:= corutypeset + 1;    <*+16  corutestmask *>
  2 17317   
  2 17317     <* simple semaphore *>
  2 17318   
  2 17318                                           <* -2  (link field) *>
  2 17319        simcoru:= next;                    <* +0  simcoru *>
  2 17320        simvalue:= simcoru + 2;            <* +2  simvalue *>
  2 17321   
  2 17321     <* chained semaphore *>
  2 17322   
  2 17322                                           <* -2  (link field) *>
  2 17323        semcoru:= next;                    <* +0  semcoru *>
  2 17324                                           <* +2  (link field) *>
  2 17325        semop:= semcoru + 4;               <* +4  semop *>
  2 17326 \f

  2 17326 
  2 17326 message coroutinemonitor - 38 ;
  2 17327   
  2 17327     <* operation *>
  2 17328   
  2 17328        opsize:= next - 6;                 <* -6  opsize *>
  2 17329        optype:= opsize + 1;               <* -5  optype *>
  2 17330                                           <* -2  prev *>
  2 17331                                           <* +0  next *>
  2 17332                                           <* +2  operation(1) *>
  2 17333                                           <* +4  operation(2) *>
  2 17334                                           <* +6      -        *>
  2 17335                                           <*  .      -        *>
  2 17336                                           <*  .      -        *>
  2 17337   
  2 17337 \f

  2 17337 
  2 17337 message coroutinemonitor - 39 ;
  2 17338   
  2 17338       trap(dump);
  2 17339       systime(1, 0, starttime);
  2 17340       for cmi:= 1 step 1 until maxmessext do messref(cmi):= 0;
  2 17341       clockmess(1):= 0;
  2 17342       clockmess(2):= timeinterval;  
  2 17343       clock(1):= real <:clock:>;
  2 17344       clock(2):= real <::>;
  2 17345       mon(16) send message :(0, clockmess, 0, clock);
  2 17346       timermessage:= monw2;
  2 17347       readyqueue:= 4;
  2 17348       initchain(readyqueue);
  2 17349       idlequeue:= readyqueue + 4;
  2 17350       initchain(idlequeue);
  2 17351       timerqueue:= idlequeue + 4;
  2 17352       initchain(timerqueue);
  2 17353       current:= 0;
  2 17354       corucount:= 0;
  2 17355       proccount:= 0;
  2 17356       baseevent:= 0;
  2 17357       coruref:= timerqueue + 4;
  2 17358       firstcoru:= coruref;
  2 17359       simref:= coruref + maxcoru * corusize;
  2 17360       firstsim:= simref;
  2 17361       semref:= simref + maxsem * simsize;
  2 17362       firstsem:= semref;
  2 17363       opref:= semref + maxsemch * semsize + 4;
  2 17364       firstop:= opref;
  2 17365       optop:= opref + maxop * opheadsize + maxnettoop - 6;
  2 17366       for cmi:= coruref step 2 until optop - 2 do d(cmi/2):= 0;
  2 17367       reflectcore(core);
  2 17368 
  2 17368 algol list.on;
  2 17369   
  2 17369       \f

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

  2 17484       message fil_init side 1 - 801030/jg;
  2 17485       
  2 17485       begin integer i,antz,tz,s;
  3 17486             real array field raf;
  3 17487       
  3 17487       filskrevet:=fillæst:=0;                                    <*fil*>
  3 17488       dbsegmax:= 2**18-1;
  3 17489       
  3 17489       tz:=dbantez+dbantsz; antz:=tz+dbanttz;
  3 17490       for i:=1 step 1 until dbantez do
  3 17491         begin open(fil(i),4,<::>,0); close(fil(i),false) end;
  3 17492       for i:=dbantez+1 step 1 until tz do
  3 17493         open(fil(i),4,dbsnavn,0);
  3 17494       for i:=tz+1 step 1 until antz do
  3 17495         open(fil(i),4,dbtnavn,0);
  3 17496       
  3 17496       for i:=1 step 1 until dbantez do                        <*dbkatz*>
  3 17497         dbkatz(i,1):=dbkatz(i,2):=0;
  3 17498       for i:=dbantez+1 step 1 until tz do
  3 17499         begin dbkatz(i,1):=2 shift 10;dbkatz(i,2):=0 end;
  3 17500       for i:=tz+1 step 1 until antz do
  3 17501         begin dbkatz(i,1):=1 shift 10;dbkatz(i,2):=i+1 end;
  3 17502       dbkatz(antz,2):=tz+1;
  3 17503       dbsidstetz:=antz;
  3 17504       dbsidstesz:=tz;
  3 17505       
  3 17505       for i:=1 step 1 until dbmaxef do                        <*dbkate*>
  3 17506         begin integer j;
  4 17507           for j:=1,3 step 1 until 6 do
  4 17508             dbkate(i,j):=0;
  4 17509           dbkate(i,2):=i+1;
  4 17510         end;
  3 17511       dbkate(dbmaxef,2):=0;
  3 17512       dbkatefri:=1;
  3 17513       dbantef:=0;
  3 17514       \f

  3 17514       message fil_init side 2 - 801030/jg;
  3 17515       
  3 17515       
  3 17515       for i:= 1 step 1 until dbmaxsf do                       <*dbkats*>
  3 17516         begin
  4 17517           dbkats(i,1):=0;
  4 17518           dbkats(i,2):=i+1;
  4 17519         end;
  3 17520       dbkats(dbmaxsf,2):=0;
  3 17521       dbkatsfri:=1;
  3 17522       dbantsf:=0;
  3 17523       
  3 17523       for i:=1 step 1 until dbmaxb do                         <*dbkatb*>
  3 17524         dbkatb(i):=false add (i+1);
  3 17525       dbkatb(dbmaxb):=false;
  3 17526       dbkatbfri:=1;
  3 17527       dbantb:=0;
  3 17528       raf:=4;
  3 17529       for i:=1 step 1 until dbmaxtf do
  3 17530         begin
  4 17531           inrec6(fil(antz),4);
  4 17532           dbkatt.raf(i):=fil(antz,1);
  4 17533         end;
  3 17534       inrec6(fil(antz),4);
  3 17535       if fil(antz,1)<>real extend 8388607 shift 24 add 8388607 then
  3 17536         fejl_reaktion(1,dbmaxtf,<:tabelfil init:>,0);
  3 17537       setposition(fil(antz),0,0);
  3 17538       
  3 17538       end filsystem;
  2 17539       \f

  2 17539       message fil_init side 3 - 810209/cl;
  2 17540       
  2 17540       bs_kats_fri:= nextsem;
  2 17541       <*+3*> skriv_new_sem(out,1,bs_kats_fri,<:bs-kats-fri:>);
  2 17542       <*-3*>
  2 17543       bs_kate_fri:= nextsem;
  2 17544       <*+3*> skriv_new_sem(out,1,bs_kate_fri,<:bs-kate-fri:>);
  2 17545       <*-3*>
  2 17546       cs_opret_fil:= nextsemch;
  2 17547       <*+3*> skriv_new_sem(out,3,cs_opret_fil,<:cs-opret-fil:>);
  2 17548       <*-3*>
  2 17549       cs_tilknyt_fil:= nextsemch;
  2 17550       <*+3*> skriv_new_sem(out,3,cs_tilknyt_fil,<:cs-tilknyt-fil:>);
  2 17551       <*-3*>
  2 17552       cs_frigiv_fil:= nextsemch;
  2 17553       <*+3*> skriv_new_sem(out,3,cs_frigiv_fil,<:cs-frigiv-fil:>);
  2 17554       <*-3*>
  2 17555       cs_slet_fil:= nextsemch;
  2 17556       <*+3*> skriv_new_sem(out,3,cs_slet_fil,<:cs-slet-fil:>);
  2 17557       <*-3*>
  2 17558       cs_opret_spoolfil:= nextsemch;
  2 17559       <*+3*> skriv_new_sem(out,3,cs_opret_spoolfil,<:cs-opret-spoolfil:>);
  2 17560       <*-3*>
  2 17561       cs_opret_eksternfil:= nextsemch;
  2 17562       <*+3*> skriv_new_sem(out,3,cs_opret_eksternfil,<:cs-opret-ekst-fil:>);
  2 17563       <*-3*>
  2 17564       \f

  2 17564       message fil_init side 4 810209/cl;
  2 17565       
  2 17565       
  2 17565       <* initialisering af filsystemcoroutiner *>
  2 17566       
  2 17566       i:= nextcoru(001,10,true);
  2 17567       j:= newactivity(i,0,opretfil);
  2 17568       <*+3*> skriv_newactivity(out,i,j);
  2 17569       <*-3*>
  2 17570       
  2 17570       i:= nextcoru(002,10,true);
  2 17571       j:= newactivity(i,0,tilknytfil);
  2 17572       <*+3*> skriv_newactivity(out,i,j);
  2 17573       <*-3*>
  2 17574       
  2 17574       i:= nextcoru(003,10,true);
  2 17575       j:= newactivity(i,0,frigivfil);
  2 17576       <*+3*> skriv_newactivity(out,i,j);
  2 17577       <*-3*>
  2 17578       
  2 17578       i:= nextcoru(004,10,true);
  2 17579       j:= newactivity(i,0,sletfil);
  2 17580       <*+3*> skriv_newactivity(out,i,j);
  2 17581       <*-3*>
  2 17582       
  2 17582       i:= nextcoru(005,10,true);
  2 17583       j:= newactivity(i,0,opretspoolfil);
  2 17584       <*+3*> skriv_newactivity(out,i,j);
  2 17585       <*-3*>
  2 17586       
  2 17586       i:= nextcoru(006,10,true);
  2 17587       j:= newactivity(i,0,opreteksternfil);
  2 17588       <*+3*> skriv_newactivity(out,i,j);
  2 17589       <*-3*>
  2 17590       \f

  2 17590       message attention_initialisering side 1 - 850820/cl;
  2 17591       
  2 17591         tf_kommandotabel:= 1 shift 10 + 1;
  2 17592       
  2 17592         begin
  3 17593           integer i, s, zno;
  3 17594           zone z(128,1,stderror);
  3 17595           integer array fdim(1:8);
  3 17596       
  3 17596           fdim(4):= tf_kommandotabel;
  3 17597           hentfildim(fdim);
  3 17598       
  3 17598           open(z,4,<:htkommando:>,0);
  3 17599           for i:= 1 step 1 until fdim(3) do
  3 17600           begin
  4 17601             inrec6(z,512);
  4 17602             s:= skrivfil(tf_kommandotabel,i,zno);
  4 17603             if s<>0 then fejlreaktion(6,s,<:kommandotabelinit:>,0);
  4 17604             tofrom(fil(zno),z,512);
  4 17605           end;
  3 17606           close(z,true);
  3 17607         end;
  2 17608       \f

  2 17608       message attention_initialisering side 1a - 810428/hko;
  2 17609       
  2 17609         for j:= system(3,i,terminal_tab) step 1 until i do
  2 17610           terminal_tab(j):= 0;
  2 17611       
  2 17611         cs_att_pulje:=next_semch;
  2 17612       <*+3*> skriv_new_sem(out,3,cs_att_pulje,<:cs-att-pulje:>);
  2 17613       <*-3*>
  2 17614       
  2 17614         bs_fortsæt_adgang:= nextsem;
  2 17615       <*+3*> skriv_new_sem(out,1,bs_fortsæt_adgang,<:bs-fortsæt-adgang:>);
  2 17616       <*-3*>
  2 17617         signalbin(bs_fortsæt_adgang);
  2 17618       
  2 17618         for i:= 1,
  2 17619             1 step 1 until max_antal_operatører,
  2 17620             1 step 1 until max_antal_garageterminaler do
  2 17621       
  2 17621         <* initialisering af pulje med attention_operationer *>
  2 17622       
  2 17622           signalch(cs_att_pulje,    <* pulje_semafor   *>
  2 17623                    nextop(data+att_op_længde), <* næste_operation *>
  2 17624                    gen_optype);
  2 17625       
  2 17625         att_proc_ref:=next_proc_ext(system(6<* own process*>,i,ra));
  2 17626       
  2 17626         i:=next_coru(010,<*ident*>
  2 17627                        2,<*prioritet*>
  2 17628                      true<*test_maske*>);
  2 17629         j:=newactivity(        i, <*activityno     *>
  2 17630                                0, <*ikke virtual   *>
  2 17631                        attention);<*ingen parametre*>
  2 17632       
  2 17632       <*+3*>skriv_newactivity(out,i,j);
  2 17633       <*-3*>
  2 17634       
  2 17634       \f

  2 17634       message io_initialisering side 1 - 810507/hko;
  2 17635       
  2 17635         io_spoolfil:= 1028;
  2 17636         begin
  3 17637           integer array fdim(1:8);
  3 17638           fdim(4):= io_spoolfil;
  3 17639           hent_fildim(fdim);
  3 17640           io_spool_postantal:= fdim(1);
  3 17641           io_spool_postlængde:= fdim(2);
  3 17642         end;
  2 17643       
  2 17643         io_spool_post:= 4;
  2 17644       
  2 17644           cs_io:= next_semch;
  2 17645       <*+3*> skriv_new_sem(out,3,cs_io,<:cs-io:>);
  2 17646       <*-3*>
  2 17647       
  2 17647           i:= next_coru(100,<*ident *>
  2 17648                          5,<*prioritet *>
  2 17649                         true<*test_maske*>);
  2 17650       
  2 17650           j:= new_activity(   i,
  2 17651                               0,
  2 17652                            h_io);
  2 17653       
  2 17653       <*+3*>skriv_newactivity(out,i,j);
  2 17654       <*-3*>
  2 17655         cs_io_komm:= next_semch;
  2 17656       <*+3*> skriv_new_sem(out,3,cs_io_komm,<:cs-io-komm:>);
  2 17657       <*-3*>
  2 17658       
  2 17658         i:= next_coru(101,<*ident*>
  2 17659                        10,<*prioritet*>
  2 17660                      true <*testmaske*>);
  2 17661         j:= new_activity(          i,
  2 17662                                    0,
  2 17663                          io_komm);<*ingen parametre*>
  2 17664       
  2 17664       <*+3*>skriv_newactivity(out,i,j);
  2 17665       <*-3*>
  2 17666       \f

  2 17666       message io_initialisering side 2 - 810520/hko/cl;
  2 17667       
  2 17667         bs_zio_adgang:= next_sem;
  2 17668       <*+3*> skriv_new_sem(out,1,bs_zio_adgang,<:bs-zio-adgang:>);
  2 17669       <*-3*>
  2 17670         signal_bin(bs_zio_adgang);
  2 17671       
  2 17671         cs_io_spool:= next_semch;
  2 17672       <*+3*> skriv_new_sem(out,3,cs_io_spool,<:cs-io-spool:>);
  2 17673       <*-3*>
  2 17674       
  2 17674         cs_io_fil:=next_semch;
  2 17675       <*+3*> skriv_new_sem(out,3,cs_io_fil,<:cs-io-fil:>);
  2 17676       <*-3*>
  2 17677         signal_ch(cs_io_fil,next_op(data+18),gen_optype);
  2 17678       
  2 17678         ss_io_spool_fulde:= next_sem;
  2 17679       <*+3*> skriv_new_sem(out,2,ss_io_spool_fulde,<:ss-io-spool-fulde:>);
  2 17680       <*-3*>
  2 17681       
  2 17681         ss_io_spool_tomme:= next_sem;
  2 17682       <*+3*> skriv_new_sem(out,2,ss_io_spool_tomme,<:ss-io-spool-tomme:>);
  2 17683       <*-3*>
  2 17684         for i:= 1 step 1 until io_spool_postantal do
  2 17685           signal(ss_io_spool_tomme);
  2 17686       \f

  2 17686       message io_initialisering side 3 - 880901/cl;
  2 17687       
  2 17687         i:= next_coru(102,
  2 17688                        5,
  2 17689                       true);
  2 17690         j:= new_activity(i,0,io_spool);
  2 17691       
  2 17691       <*+3*>skriv_newactivity(out,i,j);
  2 17692       <*-3*>
  2 17693       
  2 17693         i:= next_coru(103,
  2 17694                        10,
  2 17695                       true);
  2 17696         j:= new_activity(i,0,io_spon);
  2 17697       
  2 17697       <*+3*>skriv_newactivity(out,i,j);
  2 17698       <*-3*>
  2 17699       
  2 17699           cs_io_medd:= next_semch;
  2 17700       <*+3*> skriv_new_sem(out,3,cs_io_medd,<:cs-io-medd:>);
  2 17701       <*-3*>
  2 17702       
  2 17702           i:= next_coru(104,<*ident *>
  2 17703                         10,<*prioritet *>
  2 17704                         true<*test_maske*>);
  2 17705       
  2 17705           j:= new_activity(   i,
  2 17706                               0,
  2 17707                         io_medd);
  2 17708       
  2 17708       <*+3*>skriv_newactivity(out,i,j);
  2 17709       <*-3*>
  2 17710       
  2 17710           cs_io_nulstil:= next_semch;
  2 17711       <*+3*> skriv_new_sem(out,3,cs_io_nulstil,<:cs-io-nulstil:>);
  2 17712       <*-3*>
  2 17713       
  2 17713           i:= next_coru(105,<*ident *>
  2 17714                         10,<*prioritet *>
  2 17715                         true<*test_maske*>);
  2 17716       
  2 17716           j:= new_activity(   i,
  2 17717                               0,
  2 17718                         io_nulstil_tællere);
  2 17719       
  2 17719       <*+3*>skriv_newactivity(out,i,j);
  2 17720       <*-3*>
  2 17721       
  2 17721         open(z_io,8,konsol_navn,1 shift 21 + 1 shift 9);
  2 17722         i:= monitor(8)reserve process:(z_io,0,ia);
  2 17723         if i <> 0 then
  2 17724         begin
  3 17725           fejlreaktion(4<*monitor result*>,+i,<:io reservation:>,0);
  3 17726         end
  2 17727         else
  2 17728         begin
  3 17729           ref:= 0;
  3 17730           terminal_tab.ref.terminal_tilstand:= 0;
  3 17731           write(z_io,"nl",3,"sp",10,"*",15,<: busradio startet :>,
  3 17732                   <<zddddd>,systime(5,0.0,r),".",1,r,
  3 17733                   "sp",1,"*",15,"nl",1);
  3 17734           setposition(z_io,0,0);
  3 17735         end;
  2 17736       \f

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

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

  2 18001       message garage_initialisering side 1 - 810521/hko;
  2 18002       
  2 18002         cs_gar:= next_semch;
  2 18003       <*+3*>skriv_new_sem(out,3,cs_gar,<:cs-gar(hovedmodul):>);
  2 18004       <*-3*>
  2 18005       
  2 18005         i:= next_coru(300,<*ident*>
  2 18006                        10,<*prioritet*>
  2 18007                       true<*test_maske*>);
  2 18008       
  2 18008         j:= new_activity(       i,
  2 18009                                 0,
  2 18010                          h_garage);
  2 18011       
  2 18011       <*+3*>skriv_newactivity(out,i,j);
  2 18012       <*-3*>
  2 18013       
  2 18013         for k:= 1 step 1 until max_antal_garageterminaler do
  2 18014         begin
  3 18015           ref:= (k-1)*8;
  3 18016           open(z_gar(k),8,garage_terminal_navn.raf,1 shift 21 + 1 shift 9);
  3 18017           ref:= (max_antal_operatører+k)*terminal_beskr_længde;
  3 18018           i:=monitor(4)process address:(z_gar(k),0,ia);
  3 18019           if i = 0 then
  3 18020           begin
  4 18021             fejlreaktion(4<*monitor result*>,k,<:garageterminal eksisterer ikke:>,1);
  4 18022             terminal_tab.ref.terminal_tilstand:= 4 shift 21;
  4 18023           end
  3 18024           else
  3 18025           begin
  4 18026             terminal_tab.ref.terminal_tilstand:= 
  4 18027               if garage_auto_include(k) then 0 else 7 shift 21;
  4 18028             if garage_auto_include(k) then
  4 18029               monitor(8)reserve:(z_gar(k),0,ia);
  4 18030           end;
  3 18031           cs_garage(k):= next_semch;
  3 18032       <*+3*>skriv_new_sem(out,3,cs_garage(k),<:cs-garage( ):>);
  3 18033       <*-3*>
  3 18034           i:= next_coru(300+k,<*ident*>
  3 18035                            10,<*prioritet*>
  3 18036                          true <*testmaske*>);
  3 18037           j:= new_activity(     i,
  3 18038                                 0,
  3 18039                            garage,k);
  3 18040       
  3 18040       <*+3*>skriv_newactivity(out,i,j);
  3 18041       <*-3*>
  3 18042       
  3 18042         end;
  2 18043       \f

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

  2 18108       message radio_initialisering side 2 - 810524/hko;
  2 18109       
  2 18109         bs_mobil_opkald:= next_sem;
  2 18110       
  2 18110       <*+3*>skriv_new_sem(out,1,bs_mobil_opkald,<:bs_mobil_opkald:>);
  2 18111       <*-3*>
  2 18112       
  2 18112         bs_opkaldskø_adgang:= next_sem;
  2 18113         signal_bin(bs_opkaldskø_adgang);
  2 18114       
  2 18114       <*+3*>skriv_new_sem(out,1,bs_opkaldskø_adgang,<:bs_opk.kø_adgang:>);
  2 18115       <*-3*>
  2 18116       
  2 18116         cs_radio_medd:=next_semch;
  2 18117         signal_ch(cs_radio_medd,nextop(data+6),gen_optype or rad_optype);
  2 18118       
  2 18118       <*+3*>skriv_new_sem(out,3,cs_radio_medd,<:cs_radio_medd:>);
  2 18119       <*-3*>
  2 18120       
  2 18120         i:= next_coru(403,
  2 18121                         5,<*prioritet*>
  2 18122                       true<*testmaske*>);
  2 18123       
  2 18123         j:= new_activity(      i,
  2 18124                                0,
  2 18125                radio_medd_opkald);
  2 18126       
  2 18126       <*+3*>skriv_newactivity(out,i,j);
  2 18127       <*-3*>
  2 18128       
  2 18128       cs_radio_adm:= nextsemch;
  2 18129       <*+3*>skriv_new_sem(out,3,cs_radio_adm,<:cs_radio_adm:>);
  2 18130       <*-3*>
  2 18131       
  2 18131       i:= next_coru(404,
  2 18132                      10,
  2 18133                    true);
  2 18134       j:= new_activity(i,
  2 18135                        0,
  2 18136                        radio_adm,next_op(data+radio_op_længde));
  2 18137       <*+3*>skriv_new_activity(out,i,j);
  2 18138       <*-3*>
  2 18139       \f

  2 18139       message radio_initialisering side 3 - 810526/hko;
  2 18140        for k:= 1 step 1 until max_antal_taleveje do
  2 18141        begin
  3 18142       
  3 18142         cs_radio(k):=next_semch;
  3 18143       
  3 18143       <*+3*>skriv_new_sem(out,3,cs_radio(k),<:cs_radio(  ):>);
  3 18144       <*-3*>
  3 18145       
  3 18145         bs_talevej_udkoblet(k):= nextsem;
  3 18146       <*+3*>skriv_new_sem(out,1,bs_talevej_udkoblet(k),<:bs_talevej_udkoblet( ):>);
  3 18147       <*-3*>
  3 18148       
  3 18148         i:=next_coru(410+k,
  3 18149                       10,
  3 18150                      true);
  3 18151       
  3 18151         j:=new_activity(     i,
  3 18152                              0,
  3 18153                         radio,k,next_op(data + radio_op_længde));
  3 18154       
  3 18154       <*+3*>skriv_newactivity(out,i,j);
  3 18155       <*-3*>
  3 18156        end;
  2 18157       
  2 18157         cs_radio_pulje:=next_semch;
  2 18158       
  2 18158       <*+3*>skriv_new_sem(out,3,cs_radio_pulje,<:cs-radio-pulje:>);
  2 18159       <*-3*>
  2 18160       
  2 18160         for i:= 1 step 1 until radiopulje_størrelse do
  2 18161           signal_ch(cs_radio_pulje,
  2 18162                     next_op(60),
  2 18163                     gen_optype or rad_optype);
  2 18164       
  2 18164         cs_radio_kø:= next_semch;
  2 18165       
  2 18165       <*+3*>skriv_new_sem(out,3,cs_radio_kø,<:cs_radio_kø:>);
  2 18166       <*-3*>
  2 18167       
  2 18167         mobil_opkald_aktiveret:= true;
  2 18168       \f

  2 18168       message radio_initialisering side 4 - 810522/hko;
  2 18169       
  2 18169           laf:=raf:=0;
  2 18170       
  2 18170           open(z_fr_in,8,radio_fr_navn,radio_giveup);
  2 18171           i:= monitor(8)reserve process:(z_fr_in,0,ia);
  2 18172           j:=1;
  2 18173           if i <> 0 then
  2 18174             fejlreaktion(4<*monitor resultat*>,i,
  2 18175               string radio_fr_navn.raf(increase(j)),1);
  2 18176           open(z_fr_out,4 shift 12 + 8,radio_fr_navn,radio_giveup);
  2 18177           i:= monitor(8)reserve process:(z_fr_out,0,ia);
  2 18178           j:=1;
  2 18179           if i <> 0 then
  2 18180             fejlreaktion(4,i,string radio_fr_navn.raf(increase(j)),1);
  2 18181           ia(1):= 3 <*canonical*>;
  2 18182           ia(2):= 0 <*no echo*>;
  2 18183           ia(3):= 0 <*prompt*>;
  2 18184           ia(4):= 5 <*timeout*>;
  2 18185           setcspterm(radio_fr_navn.laf,ia);
  2 18186       
  2 18186           open(z_rf_in,8,radio_rf_navn,radio_giveup);
  2 18187           i:= monitor(8)reserve process:(z_rf_in,0,ia);
  2 18188           j:= 1;
  2 18189           if i <> 0 then
  2 18190             fejlreaktion(4<*monitor resultat*>,i,
  2 18191               string radio_rf_navn.raf(increase(j)),1);
  2 18192           open(z_rf_out,4 shift 12 + 8,radio_rf_navn,radio_giveup);
  2 18193           i:= monitor(8)reserve process:(z_rf_out,0,ia);
  2 18194           j:= 1;
  2 18195           if i <> 0 then
  2 18196             fejlreaktion(4,i,string radio_rf_navn.raf(increase(j)),1);
  2 18197           ia(1):= 3 <*canonical*>;
  2 18198           ia(2):= 0 <*no echo*>;
  2 18199           ia(3):= 0 <*prompt*>;
  2 18200           ia(4):= 5 <*timeout*>;
  2 18201           setcspterm(radio_rf_navn.laf,ia);
  2 18202       \f

  2 18202       message radio_initialisering side 5 - 810521/hko;
  2 18203           for k:= 1 step 1 until max_antal_kanaler do
  2 18204           begin
  3 18205       
  3 18205             ss_radio_aktiver(k):=next_sem;
  3 18206       <*+3*>skriv_new_sem(out,2,ss_radio_aktiver(k),<:ss_rad_aktiver( ):>);
  3 18207       <*-3*>
  3 18208       
  3 18208             ss_samtale_nedlagt(k):=next_sem;
  3 18209       <*+3*>skriv_new_sem(out,2,ss_samtale_nedlagt(k),<:ss_samtale_nedlagt(  ):>);
  3 18210       <*-3*>
  3 18211           end;
  2 18212       
  2 18212           cs_radio_ind:= next_semch;
  2 18213       <*+3*>skriv_new_sem(out,3,cs_radio_ind,<:cs_radio_ind:>);
  2 18214       <*-3*>
  2 18215       
  2 18215           i:= next_coru(401,<*ident radio_ind*>
  2 18216                            3, <*prioritet*>
  2 18217                          true <*testmaske*>);
  2 18218           j:= new_activity(      i,
  2 18219                                  0,
  2 18220                            radio_ind,next_op(data + 64));
  2 18221       
  2 18221       <*+3*>skriv_newactivity(out,i,j);
  2 18222       <*-3*>
  2 18223       
  2 18223           cs_radio_ud:=next_semch;
  2 18224       <*+3*>skriv_new_sem(out,3,cs_radio_ud,<:cs_radio_ud:>);
  2 18225       <*-3*>
  2 18226       
  2 18226           i:= next_coru(402,<*ident radio_out*>
  2 18227                            10,<*prioritet*>
  2 18228                          true <*testmaske*>);
  2 18229           j:= new_activity(         i,
  2 18230                                     0,
  2 18231                            radio_ud,next_op(data + 64));
  2 18232       
  2 18232       <*+3*>skriv_newactivity(out,i,j);
  2 18233       <*-3*>
  2 18234       \f

  2 18234       message vogntabel initialisering side 1 - 820301;
  2 18235       
  2 18235       sidste_bus:= sidste_linie_løb:= 0;
  2 18236       
  2 18236       tf_vogntabel:= 1 shift 10 + 2;
  2 18237       tf_gruppedef:= ia(4):= 1 shift 10 +3;
  2 18238       tf_gruppeidenter:= 1 shift 10 +6;
  2 18239       tf_springdef:= 1 shift 10 +7;
  2 18240       hent_fil_dim(ia);
  2 18241       max_antal_i_gruppe:= ia(2);
  2 18242       if ia(1) < max_antal_grupper then
  2 18243         max_antal_grupper:= ia(1);
  2 18244       
  2 18244       <* initialisering af interne vogntabeller *>
  2 18245       begin
  3 18246         long array field laf1,laf2;
  3 18247         integer array fdim(1:8);
  3 18248         zone z(128,1,stderror);
  3 18249         integer busnr,i,j,zi,s,pant,ll_nr,b_nr,res,tegn,g_nr,o_nr;
  3 18250         long omr,garageid;
  3 18251         integer field ll, bn;
  3 18252         boolean binær, test24;
  3 18253       
  3 18253         ll:= 2; bn:= 4;
  3 18254         
  3 18254         <* nulstil tabellerne *>
  3 18255         laf1:= -2;
  3 18256         laf2:=  2;
  3 18257         bustabel1.laf2(0):=
  3 18258         bustabel.laf2(0):= bustilstand.laf2(0):= linie_løb_tabel.laf2(0):= 
  3 18259         bus_indeks.laf2(0):= linie_løb_indeks.laf2(0):= extend 0;
  3 18260         tofrom(bustabel.laf2,bustabel.laf1,(max_antal_busser+1)*2-4);
  3 18261         tofrom(bustabel1.laf2,bustabel1.laf1,(max_antal_busser+1)*2-4);
  3 18262         tofrom(linie_løb_tabel.laf2,linie_løb_tabel.laf1,(max_antal_linie_løb+1)*2-4);
  3 18263         tofrom(busindeks.laf2,busindeks.laf1,max_antal_linie_løb-4);
  3 18264         tofrom(linie_løb_indeks.laf2,linie_løb_indeks.laf1,max_antal_busser-4);
  3 18265         tofrom(bustilstand.laf2,bustilstand.laf1,max_antal_busser-4);
  3 18266       \f

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

  3 18356       message vogntabel initialisering side 2 - 820301/cl;
  3 18357       
  3 18357         <* initialisering af intern linie/løbs-tabel og bus-indekstabel *>
  3 18358         test24:= testbit24;
  3 18359         testbit24:= false;
  3 18360         i:= 1;
  3 18361         s:= læsfil(tf_vogntabel,i,zi);
  3 18362         if s<>0 then fejlreaktion(5,s,<:vogntabelinit:>,0);
  3 18363         while fil(zi).bn<>0 do
  3 18364         begin
  4 18365           if fil(zi).ll <> 0 then
  4 18366           begin <* indsæt linie/løb *>
  5 18367             res:= binærsøg(sidste_linie_løb,linie_løb_tabel(j) -
  5 18368                     fil(zi).ll,j);
  5 18369             if res < 0 then j:= j+1;
  5 18370             if res = 0 then fejlreaktion(10,fil(zi).bn,
  5 18371               <:dobbeltregistrering i vogntabel:>,1)
  5 18372             else
  5 18373             begin
  6 18374               o_nr:= fil(zi).bn shift (-14) extract 8;
  6 18375               b_nr:= søg_omr_bus(fil(zi).bn extract 14,ll_nr,g_nr,o_nr,s,tegn);
  6 18376               if b_nr<0 then fejlreaktion(10,fil(zi).bn extract 14,
  6 18377                 <:ukendt bus i vogntabel:>,1)
  6 18378               else
  6 18379               begin
  7 18380                 if sidste_linie_løb >= max_antal_linie_løb then
  7 18381                   fejlreaktion(10,fil(zi).bn extract 14,
  7 18382                       <:for mange linie/løb i vogntabel:>,0);
  7 18383                 for ll_nr:= sidste_linie_løb step (-1) until j do
  7 18384                 begin
  8 18385                   linie_løb_tabel(ll_nr+1):= linie_løb_tabel(ll_nr);
  8 18386                   bus_indeks(ll_nr+1):= bus_indeks(ll_nr);
  8 18387                 end;
  7 18388                 linie_løb_tabel(j):= fil(zi).ll;
  7 18389                 bus_indeks(j):= false add b_nr;
  7 18390                 sidste_linie_løb:= sidste_linie_løb + 1;
  7 18391               end;
  6 18392             end;
  5 18393           end;
  4 18394           i:= i+1;
  4 18395           s:= læsfil(tf_vogntabel,i,zi);
  4 18396           if s<>0 then fejlreaktion(5,s,<:vogntabelinit:>,0);
  4 18397         end;
  3 18398       \f

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

  2 18497       message vogntabel initialisering side 4 - 810520/cl;
  2 18498       
  2 18498       cs_vt:= nextsemch;
  2 18499       <*+3*> skriv_new_sem(out,3,cs_vt,<:cs-vt:>);
  2 18500       <*-3*>
  2 18501       
  2 18501       cs_vt_adgang:= nextsemch;
  2 18502       <*+3*> skriv_new_sem(out,3,cs_vt_adgang,<:cs-vt-adgang:>);
  2 18503       <*-3*>
  2 18504       
  2 18504       cs_vt_opd:= nextsemch;
  2 18505       <*+3*> skriv_new_sem(out,3,cs_vt_opd,<:cs-vt-opd:>);
  2 18506       <*-3*>
  2 18507       
  2 18507       cs_vt_rap:= nextsemch;
  2 18508       <*+3*> skriv_new_sem(out,3,cs_vt_rap,<:cs-vt-rap:>);
  2 18509       <*-3*>
  2 18510       
  2 18510       cs_vt_tilst:= nextsemch;
  2 18511       <*+3*> skriv_new_sem(out,3,cs_vt_tilst,<:cs-vt-tilst:>);
  2 18512       <*-3*>
  2 18513       
  2 18513       cs_vt_auto:= nextsemch;
  2 18514       <*+3*> skriv_new_sem(out,3,cs_vt_auto,<:cs-vt-auto:>);
  2 18515       <*-3*>
  2 18516       
  2 18516       cs_vt_grp:= nextsemch;
  2 18517       <*+3*> skriv_new_sem(out,3,cs_vt_grp,<:cs-vt-grp:>);
  2 18518       <*-3*>
  2 18519       
  2 18519       cs_vt_spring:= nextsemch;
  2 18520       <*+3*> skriv_new_sem(out,3,cs_vt_spring,<:cs-vt-spring:>);
  2 18521       <*-3*>
  2 18522       
  2 18522       cs_vt_log:= nextsemch;
  2 18523       <*+3*> skriv_new_sem(out,3,cs_vt_log,<:cs-vt-log:>);
  2 18524       <*-3*>
  2 18525       
  2 18525       cs_vt_logpool:= nextsemch;
  2 18526       <*+3*> skriv_new_sem(out,3,cs_vt_logpool,<:cs-vt-logpool:>);
  2 18527       <*-3*>
  2 18528       
  2 18528       vt_op:= nextop(vt_op_længde);
  2 18529       signalch(cs_vt_adgang,vt_op,gen_optype or vt_optype);
  2 18530       
  2 18530       vt_logop(1):= nextop(vt_op_længde);
  2 18531       signalch(cs_vt_logpool,vt_logop(1),vt_optype);
  2 18532       vt_logop(2):= nextop(vt_op_længde);
  2 18533       signalch(cs_vt_logpool,vt_logop(2),vt_optype);
  2 18534       
  2 18534       \f

  2 18534       message vogntabel initialisering side 5 - 81-520/cl;
  2 18535       
  2 18535       i:= nextcoru(500, <*ident*>
  2 18536                     10, <*prioitet*>
  2 18537                    true <*testmaske*>);
  2 18538       j:= new_activity( i,
  2 18539                         0,
  2 18540                        h_vogntabel);
  2 18541       <*+3*> skriv_newactivity(out,i,j);
  2 18542       <*-3*>
  2 18543       
  2 18543       i:= nextcoru(501,   <*ident*>
  2 18544                     10,   <*prioritet*>
  2 18545                    true   <*testmaske*>);
  2 18546       iaf:= nextop(filop_længde);
  2 18547       j:= new_activity(i,
  2 18548                        0,
  2 18549                        vt_opdater,iaf);
  2 18550       <*+3*> skriv_newactivity(out,i,j);
  2 18551       <*-3*>
  2 18552       
  2 18552       i:= nextcoru(502,   <*ident*>
  2 18553                     10,   <*prioritet*>
  2 18554                    true   <*testmaske*>);
  2 18555       k:= nextsemch;
  2 18556       <*+3*> skriv_new_sem(out,3,k,<:cs-fil(vt-tilst):>);
  2 18557       <*-3*>
  2 18558       iaf:= nextop(fil_op_længde);
  2 18559       j:= newactivity(i,
  2 18560                       0,
  2 18561                       vt_tilstand,
  2 18562                       k,
  2 18563                       iaf);
  2 18564       <*+3*> skriv_newactivity(out,i,j);
  2 18565       <*-3*>
  2 18566       \f

  2 18566       message vogntabel initialisering side 6 - 810520/cl;
  2 18567       
  2 18567       i:= nextcoru(503,   <*ident*>
  2 18568                     10,   <*prioritet*>
  2 18569                    true   <*testmaske*>);
  2 18570       k:= nextsemch;
  2 18571       <*+3*> skriv_new_sem(out,3,k,<:cs-fil(vt-rapport):>);
  2 18572       <*-3*>
  2 18573       iaf:= nextop(fil_op_længde);
  2 18574       j:= newactivity(i,
  2 18575                       0,
  2 18576                       vt_rapport,
  2 18577                       k,
  2 18578                       iaf);
  2 18579       <*+3*> skriv_newactivity(out,i,j);
  2 18580       <*-3*>
  2 18581       
  2 18581       i:= nextcoru(504,   <*ident*>
  2 18582                     10,   <*prioritet*>
  2 18583                    true   <*testmaske*>);
  2 18584       k:= nextsemch;
  2 18585       <*+3*> skriv_new_sem(out,3,k,<:cs-fil(vt-gruppe):>);
  2 18586       <*-3*>
  2 18587       iaf:= nextop(fil_op_længde);
  2 18588       j:= new_activity(i,
  2 18589                        0,
  2 18590                        vt_gruppe,
  2 18591                        k,
  2 18592                        iaf);
  2 18593       <*+3*> skriv_newactivity(out,i,j);
  2 18594       <*-3*>
  2 18595       \f

  2 18595       message vogntabel initialisering side 7 - 810520/cl;
  2 18596       
  2 18596       i:= nextcoru(505,   <*ident*>
  2 18597                     10,   <*prioritet*>
  2 18598                    true   <*testmaske*>);
  2 18599       k:= nextsemch;
  2 18600       <*+3*> skriv_new_sem(out,3,k,<:cs-spring-retur:>);
  2 18601       <*-3*>
  2 18602       iaf:= nextop(fil_op_længde);
  2 18603       j:= newactivity(i,
  2 18604                       0,
  2 18605                       vt_spring,
  2 18606                       k,
  2 18607                       iaf);
  2 18608       <*+3*> skriv_newactivity(out,i,j);
  2 18609       <*-3*>
  2 18610       
  2 18610       i:= nextcoru(506,   <*ident*>
  2 18611                     10,
  2 18612                    true   <*testmaske*>);
  2 18613       k:= nextsemch;
  2 18614       <*+3*> skriv_new_sem(out,3,k,<:cs-auto-retur:>);
  2 18615       <*-3*>
  2 18616       iaf:= nextop(if fil_op_længde>(data+20) then fil_op_længde else (data+20));
  2 18617       j:= newactivity(i,
  2 18618                       0,
  2 18619                       vt_auto,
  2 18620                       k,
  2 18621                       iaf);
  2 18622       <*+3*> skriv_newactivity(out,i,j);
  2 18623       <*-3*>
  2 18624       
  2 18624       i:=nextcoru(507, <*ident*>
  2 18625                    10, <*prioritet*>
  2 18626                   true <*testmaske*>);
  2 18627       j:=newactivity(i,
  2 18628                      0,
  2 18629                      vt_log);
  2 18630       <*+3*> skriv_newactivity(out,i,j);
  2 18631       <*-3*>
  2 18632       
  2 18632       <*+2*>
  2 18633       <**> if testbit42  then skriv_vt_variable(out);
  2 18634       <*-2*>
  2 18635       \f

  2 18635       message sysslut initialisering side 1 - 810406/cl;
  2 18636       begin
  3 18637         zone z(128,1,stderror);
  3 18638         integer i,coruid,j,k;
  3 18639         integer array field cor;
  3 18640       
  3 18640         open(z,4,<:overvågede:>,0);
  3 18641         for i:= read(z,coruid) while i > 0 do
  3 18642         begin
  4 18643           if coruid = 0 then
  4 18644           begin
  5 18645             for coruid:= 1 step 1 until maxcoru do
  5 18646             begin
  6 18647               cor:= coroutine(coruid);
  6 18648               d.cor.corutestmask:= d.cor.corutestmask shift 1 shift (-1);
  6 18649             end
  5 18650           end
  4 18651           else
  4 18652           begin
  5 18653             cor:= coroutine(coru_no(abs coruid));
  5 18654             if cor > 0 then
  5 18655             begin
  6 18656               d.cor.corutestmask:=
  6 18657                 (d.cor.corutestmask shift 1 shift (-1)) add
  6 18658                 ((coruid > 0) extract 1 shift 11);
  6 18659             end;
  5 18660           end;
  4 18661         end;
  3 18662         close(z,true);
  3 18663       
  3 18663         læsfil(tf_systællere,1,k);
  3 18664         rf:=iaf:= 4;
  3 18665         systællere_nulstillet:= fil(k).rf;
  3 18666         nulstil_systællere:= fil(k).iaf(1);
  3 18667         if systællere_nulstillet=real<::> then
  3 18668         begin
  4 18669           systællere_nulstillet:= 0.0;
  4 18670           nulstil_systællere:= -1;
  4 18671         end;
  3 18672         iaf:= 32;
  3 18673         tofrom(opkalds_tællere,fil(k).iaf,max_antal_områder*10);
  3 18674         iaf:= 192;
  3 18675         tofrom(operatør_tællere,fil(k).iaf,max_antal_operatører*10);
  3 18676       
  3 18676       end;
  2 18677       \f

  2 18677       message sysslut initialisering side 2 - 810603/cl;
  2 18678       
  2 18678       
  2 18678         if låsning > 0 then
  2 18679           <* låsning 1 : *>  lock(takeexternal,coru_term,mon,1); <* centrallogik *>
  2 18680       
  2 18680         if låsning > 1 then
  2 18681           <* låsning 2 : *>  lock(readchar,1,write,2);
  2 18682       
  2 18682         if låsning > 2 then
  2 18683           <* låsning 3 : *>  lock(activate,1,link,1,setposition,1);
  2 18684       
  2 18684       
  2 18684       
  2 18684       
  2 18684         if låsning > 0 then
  2 18685         begin
  3 18686           i:= locked(ia);
  3 18687           write(z_io,"nl",2,<:låsning::>,låsning,"nl",1,i,<: segmenter er låst:>);
  3 18688         end;
  2 18689       \f

  2 18689       message sysslut initialisering side 3 - 810406/cl;
  2 18690       
  2 18690       write(z_io,"nl",2,<:initialisering slut:>);
  2 18691       system(2)free core:(i,ra);
  2 18692       write(z_io,"nl",1,<:free core =:>,i,"nl",1);
  2 18693       setposition(z_io,0,0);
  2 18694       write(zbillede,"ff",0,"nl",1,<:initialisering slut :>,<<zddddd>,
  2 18695             systime(5,0,r),".",1,r,"nl",1,<:free core=:>,i,
  2 18696             "nl",1);
  2 18697       errorbits:= 3; <* ok.no warning.yes *>
  2 18698 \f

  2 18698 
  2 18698 algol list.off;
  2 18699 message coroutinemonitor - 40 ;
  2 18700 
  2 18700       if simref <> firstsem then initerror(1, false);
  2 18701       if semref <> firstop - 4 then initerror(2, false);
  2 18702       if coruref <> firstsim then initerror(3, false);
  2 18703       if opref <> optop + 6 then initerror(4, false);
  2 18704       if proccount <> maxprocext -1 then initerror(5, false);
  2 18705       goto takeexternal;
  2 18706 
  2 18706 dump:
  2 18707   op:= op;
  2 18708     \f

  2 18708     message sys trapaktion side 1 - 810521/hko/cl;
  2 18709       trap(finale);
  2 18710       write(zbillede,"ff",1,"nl",1,<:***** coroutine-monitor køer *****:>);
  2 18711       for i:= 4<*readyqueue*>, 8<*idlequeue*>, 12<*timerqueue*> do
  2 18712       begin
  3 18713         k:= 0;
  3 18714         write(zbillede,"nl",2,case i//4 of(<:readyqueue->:>,<:idlequeue ->:>,
  3 18715           <:timerqueue->:>));
  3 18716         iaf:= i;
  3 18717         for iaf:= d.iaf.next while iaf<>i do
  3 18718         begin
  4 18719           ref:= firstcoru + (iaf-firstcoru)//corusize*corusize;
  4 18720           write(zbillede,<: cr:>,<<zdd>,d.ref.coruident//1000);
  4 18721           k:=k+1; if k mod 10 = 0 then write(zbillede,"nl",1,"sp",12);
  4 18722         end;
  3 18723       end;
  2 18724       outchar(zbillede,'nl');
  2 18725     
  2 18725       skriv_opkaldstællere(zbillede);
  2 18726     
  2 18726     
  2 18726     pfilsystem(zbillede);
  2 18727     
  2 18727     
  2 18727     write(zbillede,"nl",2,"=",20,<: attentionmodul :>,"=",20,"nl",1);
  2 18728     
  2 18728     write(zbillede,"nl",1,<:attention-flag: :>,"nl",1);
  2 18729     outintbits_ia(zbillede,att_flag,1,att_maske_lgd//2);
  2 18730     
  2 18730     write(zbillede,"nl",1,<:attention-signal: :>,"nl",1);
  2 18731     outintbits_ia(zbillede,att_signal,1,att_maske_lgd//2);
  2 18732     \f

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

  2 18791     message radio trapaktion side 1 - 820301/hko;
  2 18792       write(zbillede,"nl",2,"=",20,<: radiomodul :>,"=",20,"nl",1);
  2 18793       skriv_kanal_tab(zbillede);
  2 18794       skriv_opkaldskø(zbillede);
  2 18795       skriv_radio_linietabel(zbillede);
  2 18796       skriv_radio_områdetabel(zbillede);
  2 18797     
  2 18797     \f

  2 18797     message vogntabel trapaktion side 1 - 810520/cl;
  2 18798     write(zbillede,"nl",2,"=",20,<: vogntabelmodul :>,"=",20,"nl",1);
  2 18799     skriv_vt_variable(zbillede);
  2 18800     p_vogntabel(zbillede);
  2 18801     p_gruppetabel(zbillede);
  2 18802     p_springtabel(zbillede);
  2 18803     \f

  2 18803     message sysslut trapaktion side 1 - 810519/cl;
  2 18804     write(zbillede,"nl",2,"=",20,<: corutinemonitor :>,"=",20,"nl",1);
  2 18805     corutable(zbillede);
  2 18806     write(zbillede,"ff",1,<:***** simple semaphores *****:>,"nl",2,
  2 18807       <: ref værdi prev next:>,"nl",1);
  2 18808     iaf:= firstsim;
  2 18809     repeat
  2 18810       write(zbillede,<<dddd>,iaf,<< -dddd>,d.iaf.simvalue,<< dddd>,
  2 18811         d.iaf(simcoru//2-1),d.iaf.simcoru,"nl",1);
  2 18812       iaf:= iaf + simsize;
  2 18813     until iaf>=simref;
  2 18814     write(zbillede,"ff",1,<:***** chained semaphores *****:>,"nl",2,
  2 18815       <: ref prev.coru next.coru   prev.op   next.op:>,"nl",1);
  2 18816     iaf:= firstsem;
  2 18817     repeat
  2 18818       write(zbillede,<<dddd>,iaf,<<______dddd>,d.iaf(semcoru//2-1),
  2 18819         d.iaf.semcoru,d.iaf(semop//2-1),d.iaf.semop,"nl",1);
  2 18820       iaf:= iaf+semsize;
  2 18821     until iaf>=semref;
  2 18822     write(zbillede,"ff",1,<:***** operations *****:>,"nl",2);
  2 18823     iaf:= firstop;
  2 18824     repeat
  2 18825       skriv_op(zbillede,iaf);
  2 18826       iaf:= iaf+opheadsize+d.iaf.opsize;
  2 18827     until iaf>=optop;
  2 18828     write(zbillede,"ff",1,<:***** message extentions *****:>,"nl",2,
  2 18829       <:  messref messcode   messop:>,"nl",1);
  2 18830     for i:= 1 step 1 until maxmessext do
  2 18831       write(zbillede,<< dddddddd>,messref(i),messcode(i),messop(i),"nl",1);
  2 18832     write(zbillede,"nl",4,<:***** process extentions *****:>,"nl",2,
  2 18833       <:  procref proccode   procop:>,"nl",1);
  2 18834     for i:= 1 step 1 until maxprocext do
  2 18835       write(zbillede,<< dddddddd>,procref(i),proccode(i),procop(i),"nl",1);
  2 18836     
  2 18836 
  2 18836     \f

  2 18836     message sys_finale side 1 - 810428/hko;
  2 18837     
  2 18837     finale:
  2 18838        trap(slut_finale);
  2 18839     <* algol_pause:=algol_pause shift 24 shift (-24); *>
  2 18840        endaction:=0;
  2 18841     \f

  2 18841     message filsystem finale side 1 - 810428/cl;
  2 18842     
  2 18842     <* lukning af zoner *>
  2 18843     write(out,<:lukker filsystem:>); ud;
  2 18844     for i:= 1 step 1 until dbantez+dbantsz+dbanttz do
  2 18845       close(fil(i),true);
  2 18846     \f

  2 18846     message operatør_finale side 1 - 810428/hko;
  2 18847     
  2 18847     goto op_trap2_slut;
  2 18848     
  2 18848       write(out,<:lukker operatører:>); ud;
  2 18849       for k:= 1 step 1 until max_antal_operatører do
  2 18850       begin
  3 18851         close(z_op(k),true);
  3 18852       end;
  2 18853     op_trap2_slut:
  2 18854       k:=k;
  2 18855     
  2 18855     \f

  2 18855     message garage_finale side 1 - 810428/hko;
  2 18856     
  2 18856       write(out,<:lukker garager:>); ud;
  2 18857       for k:= 1 step 1 until max_antal_garageterminaler do
  2 18858       begin
  3 18859         close(z_gar(k),true);
  3 18860       end;
  2 18861     \f

  2 18861     message radio_finale side 1 - 810525/hko;
  2 18862         write(out,<:lukker radio:>); ud;
  2 18863         close(z_fr_in,true);
  2 18864         close(z_fr_out,true);
  2 18865         close(z_rf_in,true);
  2 18866         close(z_rf_out,true);
  2 18867     \f

  2 18867     message sysslut finale side 1 - 810530/cl;
  2 18868     
  2 18868     slut_finale:
  2 18869     
  2 18869     trap(exit_finale);
  2 18870     
  2 18870     outchar(zrl,'em');
  2 18871     close(zrl,true);
  2 18872     
  2 18872     write(zbillede,
  2 18873             "nl",2,<:blocksread=:>,blocksread,
  2 18874             "nl",1,<:blocksout= :>,blocksout,
  2 18875             "nl",1,<:fillæst=   :>,fillæst,
  2 18876             "nl",1,<:filskrevet=:>,filskrevet,
  2 18877             "nl",3,<:********** billede genereret :>,<<zddddd>,
  2 18878       systime(5,0,r),".",1,r,<: **********:>,"nl",1,"em",1);
  2 18879     close(zbillede,true);
  2 18880     monitor(42,zbillede,0,ia);
  2 18881     ia(6):= systime(7,0,0.0);
  2 18882     monitor(44,zbillede,0,ia);
  2 18883     setposition(z_io,0,0);
  2 18884     write(z_io,"nl",3,"sp",10,"*",15,<: busradio afsluttet :>,<<zddddd>,
  2 18885       systime(5,0,r),".",1,r,"sp",1,"*",15,"nl",1,"em",1);
  2 18886     close(z_io,true);
  2 18887     exit_finale: trapmode:= 1 shift 10;
  2 18888 
  2 18888   end;
  1 18889 
  1 18889 
  1 18889 algol list.on;
  1 18890 message programslut;
  1 18891 program_slut:
  1 18892 end
\f


 1.   7176169  5773192  611    0    0
 2.  14250758 14831191  350    0    0
 3.   2082959   723891  419  368    0
 4.   7452191  1133338  428 1653  742
 5.  13216116 12659754  583 29937  605
 6.  13521659  2704629  584    0    0
 7.  14133811  5737491  633    0    0
 8.  18882 18876 18863 18845 18832 18824 18814 18806 18795 18784
     18777 18764 18750 18741 18733 18727 18715 18702 18693 18683
     18670 18641 18616 18598 18574 18555 18533 18520 18505 18489
     18474 18453 18427 18413 18396 18376 18367 18345 18320 18295
     18277 18264 18260 18232 18217 18201 18190 18177 18162 18146
     18133 18117 18101 18079 18061 18045 18027 18010 17987 17968
     17949 17937 17923 17903 17889 17870 17857 17838 17827 17814
     17804 17787 17774 17763 17745 17732 17719 17699 17681 17668
     17645 17625 17609 17596 17579 17567 17552 17537 17518 17497
     17483 17473 17468 17458 17450 17431 17410 17390 17382 17375
     17365 17320 17275 17247 17234 17201 17174 17151 17111 17086
     17057 17001 16946 16893 16864 16831 16789 16757 16722 16666
     16628 16588 16540 16507 16482 16459 16439 16411 16392 16373
     16350 16339 16328 16308 16291 16276 16260 16233 16214 16198
     16180 16171 16164 16139 16131 16121 16101 16090 16071 16060
     16043 16028 16010 15985 15972 15961 15944 15926 15912 15905
     15897 15888 15860 15843 15826 15813 15805 15796 15777 15766
     15752 15740 15713 15698 15680 15658 15638 15625 15606 15583
     15557 15536 15525 15503 15483 15461 15443 15415 15394 15376
     15363 15355 15348 15333 15314 15307 15290 15270 15250 15236
     15211 15196 15175 15149 15137 15128 15099 15077 15057 15047
     15036 15011 14990 14970 14940 14921 14902 14882 14861 14853
     14827 14814 14797 14778 14752 14733 14716 14689 14669 14647
     14630 14610 14579 14548 14513 14486 14465 14452 14441 14420
     14412 14403 14384 14364 14341 14314 14297 14279 14266 14256
     14245 14221 14197 14178 14148 14135 14102 14067 14052 14031
     14019 13993 13972 13952 13928 13917 13887 13868 13845 13815
     13799 13776 13749 13714 13687 13680 13666 13645 13633 13619
     13611 13596 13582 13575 13568 13561 13553 13520 13505 13485
     13472 13454 13440 13412 13385 13367 13346 13328 13311 13294
     13282 13272 13248 13242 13227 13207 13191 13174 13149 13136
     13101 13084 13067 13044 13028 13016 12998 12971 12960 12952
     12929 12910 12901 12884 12869 12851 12842 12830 12821 12803
     12787 12772 12761 12742 12714 12693 12672 12656 12642 12635
     12623 12606 12574 12556 12540 12523 12507 12476 12452 12442
     12429 12414 12398 12380 12362 12338 12327 12311 12294 12278
     12261 12237 12230 12212 12185 12167 12142 12117 12073 12062
     12051 12023 11990 11960 11933 11891 11864 11843 11830 11822
     11814 11804 11775 11758 11737 11722 11702 11679 11657 11633
     11605 11583 11566 11541 11524 11508 11485 11470 11451 11432
     11408 11373 11347 11329 11310 11289 11261 11244 11222 11208
     11185 11157 11144 11131 11102 11064 11033 10990 10956 10925
     10918 10910 10902 10891 10862 10839 10824 10814 10794 10776
     10763 10754 10742 10733 10718 10710 10698 10669 10647 10629
     10575 10540 10506 10473 10414 10398 10381 10362 10349 10336
     10315 10303 10285 10272 10259 10232 10213 10196 10159 10143
     10124 10116 10106 10075 10056 10039 10028  9998  9975  9950
      9937  9928  9914  9890  9883  9873  9856  9837  9823  9804
      9792  9776  9765  9754  9729  9712  9690  9672  9654  9634
      9621  9601  9590  9564  9545  9526  9512  9502  9474  9456
      9448  9424  9412  9400  9376  9358  9342  9331  9303  9286
      9282  9265  9256  9249  9238  9224  9208  9191  9179  9167
      9148  9138  9130  9103  9087  9080  9067  9053  9036  9028
      9012  9003  8984  8947  8938  8913  8901  8887  8863  8843
      8823  8801  8761  8743  8728  8716  8698  8689  8682  8670
      8655  8644  8633  8619  8610  8589  8584  8573  8562  8546
      8538  8528  8507  8495  8483  8463  8454  8440  8430  8416
      8395  8380  8363  8353  8337  8324  8317  8300  8278  8259
      8238  8224  8207  8189  8173  8156  8145  8131  8116  8070
      8051  8014  7991  7967  7955  7933  7917  7888  7875  7850
      7833  7803  7788  7776  7756  7743  7728  7707  7698  7682
      7665  7652  7636  7609  7587  7567  7544  7519  7502  7484
      7464  7446  7432  7391  7367  7359  7337  7322  7298  7284
      7276  7258  7246  7227  7216  7195  7182  7165  7149  7130
      7103  7095  7087  7080  7059  7029  7013  6991  6975  6958
      6942  6933  6913  6898  6880  6869  6858  6847  6837  6831
      6820  6810  6791  6777  6757  6739  6723  6715  6698  6684
      6671  6634  6618  6607  6574  6548  6534  6524  6510  6498
      6488  6473  6460  6443  6426  6418  6412  6402  6382  6374
      6358  6349  6328  6314  6300  6290  6277  6260  6249  6225
      6203  6189  6162  6138  6119  6092  6073  6051  6039  6025
      6008  5994  5980  5958  5945  5935  5922  5911  5888  5857
      5840  5826  5801  5774  5761  5753  5742  5727  5716  5704
      5690  5676  5656  5637  5616  5597  5567  5555  5542  5522
      5505  5483  5468  5454  5437  5419  5403  5386  5375  5366
      5353  5335  5325  5309  5293  5281  5268  5253  5242  5225
      5207  5197  5182  5161  5137  5119  5105  5092  5075  5057
      5035  5012  4996  4980  4963  4943  4923  4899  4878  4863
      4844  4831  4808  4795  4777  4756  4736  4709  4691  4668
      4633  4618  4610  4602  4580  4554  4538  4518  4504  4488
      4450  4407  4388  4366  4342  4332  4309  4299  4290  4261
      4241  4223  4201  4182  4159  4153  4109  4097  4052  4022
      3989  3956  3920  3875  3827  3783  3754  3711  3651  3600
      3550  3516  3474  3443  3403  3350  3310  3273  3260  3241
      3226  3208  3188  3165  3150  3128  3082  3060  3027  2986
      2962  2921  2900  2870  2838  2811  2793  2656  2627  2602
      2567  2542  2502  2458  2443  2427  2412  2387  2367  2357
      2348  2323  2301  2274  2263  2242  2221  2202  2179  2150
      2127  2117  2095  2077  2064  2038  2022  2014  1987  1971
      1953  1923  1902  1889  1881  1856  1835  1815  1800  1779
      1765  1758  1745  1733  1719  1703  1690  1682  1668  1639
      1621  1589  1555  1517  1490  1461  1433  1410  1384  1369
      1338  1314  1291  1266  1256  1243  1237  1226  1199  1192
      1187  1163  1154  1145  1139  1117  1086  1066  1034  1013
       978   943   911   897   883   861   836   828   817   803
       785   755   731   694   644   618   572   390   338   322
       308   281   234   209   196   181   168     1     1     1
         1     1
     14133811  5737491  972 506071 31003
 9.     16   120    16     4 960618 215056 buskom1
         7     3  1995   306 algftnrts
         0     1     0     2 *version
       984   400   984     4 flushout
       984    44   984     4 911004 101112 sendmessage
       985   106   985    12 910308 134214 copyout
       986   244   986    12 890821 163833 getzone6
         0   410     0     0 out
       987   178   987    12 940411 220029 testbit
       990   414   990    18 940411 222629 findfpparam
       993    46   993    18 890821 163814 system
       996   238   996    18 movestring
       996    56   996    18 890821 163907 outdate
       997   124   997    18 isotable
       998   176   997    18 890821 163656 write
      1003   310  1003   152 intable
      1004    34  1003   152 890821 163503 read
      1008    24  1008   340 890821 163714 tofrom
       995   420   993    18 stderror
      1010    80  1010   340 890821 163740 open
      1014   112  1014   340 890821 163754 monitor
      1011   344  1010   340 close
      1012    22  1010   340 setposition
       995   378   993    18 increase
      1002    50   997    18 outchar
       997    26   997    18 replacechar
      1017    98  1017   340 951214 094619 systime
         0  1700     0     0 trapmode
      1018   302  1018   340 trap
      1018   112  1018   340 890821 163915 initzones
      1019   268  1019   340 940411 222959 læsbitia
      1020    22  1020   340 sign
      1020    28  1020   340 890821 163648 ln
      1021   432  1021   340 810409 111908 skrivhele
       986   320   986    12 setzone6
      1029    52  1029   340 inrec6
      1029    28  1029   340 890821 163732 changerec6
      1030   228  1030   340 940411 222949 sætbitia
      1004    36  1003   152 readchar
      1031   348  1031   340 940411 222633 læstegn
      1699     0     0     0 000003 rs proc
      1032   278  1032   340 940411 222636 skrivtegn
      1033   384  1033   340 940411 222639 afsluttext
      1034   394  1034   340 940411 222952 læsbiti
      1035   498  1035   340 960610 222201 systid
      1037    28  1037   340 getnumber
      1037    18  1037   340 900925 171358 putnumber
         1   656     0     0 errorbits
      1044    60  1044   342 940411 222943 sætbiti
      1045   354  1045   342 940411 222801 openbs
      1047   228  1047   342 940411 222742 hægttekst
      1029    54  1029   340 outrec6
         0  1704     0     0 alarmcause
      1048   332  1048   342 940411 222745 hægtstring
      1049   254  1049   342 940411 222749 anbringtal
      1003   288  1003   152 repeatchar
      1050   444  1050   342 940411 223002 intg
      1051   350  1051   342 940411 222739 binærsøg
      1020    20  1020   340 sgn
      1052   380  1052   342 940411 222646 skrivtext
      1029    56  1029   340 swoprec6
      1056    56  1053   342 passivate
      1053    40  1053   342 890821 163947 activity
      1058    78  1058   350 260479 150000 mon
         1  1043  1058   350 monw2
         1  1039  1058   350 monw0
         1  1041  1058   350 monw1
      1055    56  1053   342 activate
         0  1588     0     0 endaction
      1058   320  1058   350 reflectcore
      1054    50  1053   342 newactivity
      1059   372  1059   358 940327 154135 setcspterm
      1061   428  1061   358 941030 233200 slices
      1065    52  1065   358 890821 163933 lock
      1065   258  1065   358 locked
         0  1612     0     0 blocksread
         0  1642     0     0 blocksout
      1066   162  1066   358 940411 222622 fpparam
         1  1049  1067   358 nl
         1  1047  1067   358 220978 131500 bel
      1068   330  1068   446 940411 222722 ud
      1069   252  1069   446 940411 222656 taltekst
         1  1045  1058   350 monw3
       986   296   986    12 getshare6
       986   398   986    12 setshare6
           70      480 1072  446    0
algol end 1072
*if ok.no
*if warning.yes
*o c
▶EOF◀