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

⟦8a8e66824⟧ TextFile

    Length: 993024 (0xf2700)
    Types: TextFile
    Names: »buskomudx03 «

Derivation

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

TextFile

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  2 16947 
  2 16947 message coroutinemonitor - 28 ;
  2 16948 
  2 16948 \f

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


 1.   7174606  3014035  611    0    0
 2.  14246163   217984  350    0    0
 3.   2074693  4935822  419  368    0
 4.   7439386  4502864  428 1653  742
 5.  13190438 14155789  583 29935  605
 6.  13485989 15897506  584    0    0
 7.  14086591 11128880  633    0    0
 8.  18880 18874 18861 18843 18830 18822 18812 18804 18793 18782
     18775 18762 18748 18739 18731 18725 18713 18700 18691 18681
     18668 18639 18614 18596 18572 18553 18531 18518 18503 18487
     18472 18451 18425 18411 18394 18374 18365 18343 18318 18293
     18275 18262 18258 18230 18215 18199 18188 18175 18160 18144
     18131 18115 18099 18077 18059 18043 18025 18008 17985 17966
     17947 17935 17921 17901 17887 17868 17855 17836 17825 17812
     17802 17785 17772 17761 17743 17730 17717 17697 17679 17666
     17643 17623 17607 17594 17577 17565 17550 17535 17516 17495
     17481 17471 17466 17456 17448 17429 17408 17388 17380 17373
     17363 17318 17273 17245 17232 17199 17172 17149 17109 17084
     17055 16999 16944 16891 16862 16829 16787 16755 16720 16664
     16626 16586 16538 16505 16480 16457 16437 16409 16390 16371
     16348 16337 16326 16306 16289 16274 16258 16231 16212 16196
     16178 16169 16162 16137 16129 16119 16099 16088 16069 16058
     16041 16026 16008 15983 15970 15959 15942 15924 15910 15903
     15895 15886 15858 15841 15824 15811 15803 15794 15775 15764
     15750 15738 15711 15696 15678 15656 15636 15623 15604 15581
     15555 15534 15523 15501 15481 15459 15441 15413 15392 15374
     15361 15353 15346 15331 15312 15305 15288 15268 15248 15234
     15209 15194 15173 15147 15135 15126 15097 15075 15055 15045
     15034 15009 14988 14968 14938 14919 14900 14880 14859 14851
     14825 14812 14795 14776 14750 14731 14714 14687 14667 14645
     14628 14608 14577 14546 14511 14484 14463 14450 14439 14418
     14410 14401 14382 14362 14339 14312 14295 14277 14264 14254
     14243 14219 14195 14176 14146 14133 14100 14065 14050 14029
     14017 13991 13970 13950 13926 13915 13885 13866 13843 13813
     13797 13774 13747 13712 13685 13678 13664 13643 13631 13617
     13609 13594 13580 13573 13566 13559 13551 13518 13503 13483
     13470 13452 13438 13410 13383 13365 13344 13326 13309 13292
     13280 13270 13246 13240 13225 13205 13189 13172 13147 13134
     13099 13082 13065 13042 13026 13014 12996 12969 12958 12950
     12927 12908 12899 12882 12867 12849 12840 12828 12819 12801
     12785 12770 12759 12740 12712 12691 12670 12654 12640 12633
     12621 12604 12572 12554 12538 12521 12505 12474 12450 12440
     12427 12412 12396 12378 12360 12336 12325 12309 12292 12276
     12259 12235 12228 12210 12183 12165 12140 12115 12071 12060
     12049 12021 11988 11958 11931 11889 11862 11841 11828 11820
     11812 11802 11773 11756 11735 11720 11700 11677 11655 11631
     11603 11581 11564 11539 11522 11506 11483 11468 11449 11430
     11406 11371 11345 11327 11308 11287 11259 11242 11220 11206
     11183 11155 11142 11129 11100 11062 11031 10988 10954 10923
     10916 10908 10900 10889 10860 10837 10822 10812 10792 10774
     10761 10752 10740 10731 10716 10708 10696 10667 10645 10627
     10573 10538 10504 10471 10412 10396 10379 10360 10347 10334
     10313 10301 10283 10270 10257 10230 10211 10194 10157 10141
     10122 10114 10104 10073 10054 10037 10026  9996  9973  9948
      9935  9926  9912  9888  9881  9871  9854  9835  9821  9802
      9790  9774  9763  9752  9727  9710  9688  9670  9652  9632
      9619  9599  9588  9562  9543  9524  9510  9500  9472  9454
      9446  9422  9410  9398  9374  9356  9340  9329  9301  9284
      9280  9263  9254  9247  9236  9222  9206  9189  9177  9165
      9146  9136  9128  9101  9085  9078  9065  9051  9034  9026
      9010  9001  8982  8945  8936  8911  8899  8885  8861  8841
      8821  8799  8759  8741  8726  8714  8696  8687  8680  8668
      8653  8642  8631  8617  8608  8587  8582  8571  8560  8544
      8536  8526  8505  8493  8481  8461  8452  8438  8428  8414
      8393  8378  8361  8351  8335  8322  8315  8298  8276  8257
      8236  8222  8205  8187  8171  8154  8143  8129  8114  8068
      8049  8012  7989  7966  7952  7931  7915  7886  7872  7850
      7831  7800  7785  7773  7754  7741  7725  7706  7695  7680
      7664  7652  7634  7604  7583  7562  7539  7516  7499  7483
      7460  7443  7425  7388  7365  7358  7333  7321  7298  7284
      7275  7256  7244  7227  7215  7194  7182  7164  7146  7124
      7102  7094  7086  7079  7053  7026  7008  6988  6970  6954
      6942  6922  6913  6896  6879  6868  6857  6846  6836  6831
      6819  6809  6790  6777  6750  6739  6723  6715  6697  6681
      6670  6634  6618  6604  6572  6545  6533  6523  6510  6497
      6488  6472  6459  6440  6425  6418  6411  6401  6381  6373
      6357  6349  6325  6310  6299  6288  6274  6258  6237  6224
      6200  6187  6160  6131  6118  6090  6065  6049  6038  6022
      6006  5989  5977  5955  5943  5934  5920  5907  5885  5854
      5839  5824  5800  5773  5760  5752  5740  5726  5715  5703
      5687  5673  5655  5636  5610  5593  5566  5552  5541  5519
      5501  5479  5467  5449  5433  5417  5401  5382  5375  5363
      5349  5332  5324  5306  5291  5278  5266  5250  5238  5222
      5204  5192  5176  5156  5134  5118  5103  5087  5066  5051
      5026  5007  4993  4974  4960  4941  4922  4897  4874  4861
      4841  4830  4807  4791  4774  4755  4732  4708  4691  4654
      4632  4617  4609  4601  4578  4553  4536  4516  4503  4471
      4446  4404  4386  4360  4341  4330  4306  4297  4277  4258
      4239  4219  4197  4178  4158  4141  4106  4086  4045  4013
      3986  3948  3910  3863  3815  3777  3742  3701  3641  3593
      3547  3503  3471  3439  3395  3343  3297  3273  3258  3240
      3223  3197  3177  3159  3146  3124  3080  3055  3015  2980
      2958  2919  2890  2867  2837  2810  2790  2652  2623  2590
      2560  2533  2481  2453  2437  2422  2402  2384  2363  2356
      2337  2322  2290  2272  2255  2239  2215  2200  2173  2144
      2124  2102  2086  2074  2055  2029  2019  2005  1985  1963
      1948  1917  1894  1886  1876  1851  1831  1808  1798  1777
      1763  1755  1743  1728  1713  1699  1688  1681  1660  1633
      1616  1571  1545  1507  1476  1456  1421  1394  1381  1354
      1324  1305  1270  1262  1246  1242  1234  1207  1195  1189
      1175  1157  1150  1141  1122  1105  1079  1052  1027  1000
       963   927   901   893   874   857   834   824   814   795
       781   743   714   678   637   605   509   374   331   315
       284   271   217   203   189   175   102     1     1     1
         1
     14086591 11128880  971 506071 31003
 9.     16   310    16     4 960614 001931 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◀