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

⟦34a526afd⟧ TextFile

    Length: 991488 (0xf2100)
    Types: TextFile
    Names: »buskomudx05 «

Derivation

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

TextFile

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

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

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

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

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

  9  5955     message procedure io_komm side 28 - 940522/cl;
  9  5956     
  9  5956                       <* 16 stopniveau,definer *>
  9  5957     
  9  5957                       operatør:= ia(1);
  9  5958                       iaf:= operatør*terminal_beskr_længde;
  9  5959                       for i:= 1 step 1 until 3 do
  9  5960                         operatør_stop(operatør,i):= ia(i+1);
  9  5961                       if -,læsbit_ia(operatørmaske,operatør) then
  9  5962                       begin
 10  5963                         tofrom(opkaldsflag,alle_operatører,op_maske_lgd);
 10  5964                         signal_bin(bs_mobilopkald);
 10  5965                       end;
  9  5966                       k:=modif_fil(tf_stoptabel,operatør,ll);
  9  5967                       if k<>0 then
  9  5968                         fejlreaktion(7,k,<:stopniveau,definer:>,0);
  9  5969                       iaf:= 0;
  9  5970                       for i:= 0 step 1 until 3 do
  9  5971                         fil(ll).iaf(i+1):= operatør_stop(operatør,i);
  9  5972                       setposition(fil(ll),0,0);
  9  5973                       setposition(z_io,0,0);
  9  5974                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  5975                       skriv_kvittering(z_io,0,-1,3);
  9  5976                     end;
  8  5977     
  8  5977                     begin
  9  5978     \f

  9  5978     message procedure io_komm side 29 - 940522/cl;
  9  5979     
  9  5979                       <* 17 stopniveauer,vis *>
  9  5980     
  9  5980                       setposition(z_io,0,0);
  9  5981                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  5982     
  9  5982                       for operatør:= 1 step 1 until max_antal_operatører do
  9  5983                       begin
 10  5984                         iaf:=operatør*terminal_beskr_længde;
 10  5985                         ll:=0;
 10  5986                         ll:=write(z_io,<<dd>,operatør,<:: :>,true,6,
 10  5987                               string bpl_navn(operatør),<:(:>,
 10  5988                               case terminal_tab.iaf.terminal_tilstand shift (-21)
 10  5989                               + 1 of (<:AKTIV:>,<:AKTIV:>,<:AKTIV:>,<:PAUSE:>,
 10  5990                               <:EKSKL:>,<:EKSKL:>,<:EKSKL:>,<:EKSKL:>), <:) :>);
 10  5991                         for i:= 1 step 1 until 3 do
 10  5992                           ll:= ll+write(z_io,if i=1 then "sp" else "/",1,
 10  5993                                   if operatør_stop(operatør,i)=0 then <:ALLE:>
 10  5994                                   else string bpl_navn(operatør_stop(operatør,i)));
 10  5995                         if operatør mod 2 = 1 then
 10  5996                           write(z_io,"sp",40-ll)
 10  5997                         else
 10  5998                           write(z_io,"nl",1);
 10  5999                       end;
  9  6000                       if max_antal_operatører mod 2 <> 0 then write(z_io,"nl",1);
  9  6001                       write(z_io,"*",1);
  9  6002                     end;
  8  6003     
  8  6003                     begin
  9  6004     \f

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

  9  6123     message procedure io_komm side xx - 940522/cl;
  9  6124     
  9  6124     
  9  6124     
  9  6124     <*+3*>            fejl_reaktion(3<*programfejl*>,j,<:case 'opkode':>,2);
  9  6125     <*-3*>
  9  6126                     end
  8  6127                   end;<*case j *>
  7  6128                 end <* j > 0 *>
  6  6129                 else
  6  6130                 begin
  7  6131     <*V*>         setposition(z_io,0,0);
  7  6132                   if sluttegn<>'nl' then outchar(z_io,'nl');
  7  6133                   skriv_kvittering(z_io,op_ref,-1,
  7  6134                                    45 <* ikke implementeret *>);
  7  6135                 end;
  6  6136               end;<* godkendt *>
  5  6137     
  5  6137     <*V*>     setposition(z_io,0,0);
  5  6138               signal_bin(bs_zio_adgang);
  5  6139               d.op_ref.retur:=cs_att_pulje;
  5  6140               disable afslut_kommando(op_ref);
  5  6141             end; <* indlæs kommando *>
  4  6142     
  4  6142             begin
  5  6143     \f

  5  6143     message procedure io_komm side xx+1 - 810428/hko;
  5  6144     
  5  6144               <* 2: aktiver efter stop *>
  5  6145               terminal_tab.ref.terminal_tilstand:= 0 shift 21 +
  5  6146                 terminal_tab.ref.terminal_tilstand extract 21;
  5  6147               afslut_operation(op_ref,-1);
  5  6148               signal_bin(bs_zio_adgang);
  5  6149             end;
  4  6150     
  4  6150     <*+3*>  fejl_reaktion(3<*programfejl *>,aktion,<:case aktion:>,2)
  4  6151     <*-3*>
  4  6152           end; <* case aktion+6 *>
  3  6153     
  3  6153          until false;
  3  6154       io_komm_trap:
  3  6155         if -,(alarmcause shift (-24) extract 24 = (-2) and
  3  6156               alarmcause extract 24 = (-13)) then
  3  6157           disable skriv_io_komm(zbillede,1);
  3  6158       end io_komm;
  2  6159     \f

  2  6159     message procedure io_spool side 1 - 810507/hko;
  2  6160     
  2  6160       procedure io_spool;
  2  6161         begin
  3  6162           integer
  3  6163             næste_tomme,nr;
  3  6164           integer array field
  3  6165             op_ref;
  3  6166     
  3  6166           procedure skriv_io_spool(zud,omfang);
  3  6167             value                      omfang;
  3  6168             zone                   zud;
  3  6169             integer                    omfang;
  3  6170             begin
  4  6171               disable write(zud,"nl",1,<:+++ io_spool             :>);
  4  6172               if omfang > 0 then
  4  6173               disable begin integer x;
  5  6174                 trap(slut);
  5  6175                 write(zud,"nl",1,
  5  6176                   <:  opref:     :>,op_ref,"nl",1,
  5  6177                   <:  næstetomme::>,næste_tomme,"nl",1,
  5  6178                   <:  nr         :>,nr,"nl",1,
  5  6179                   <::>);
  5  6180                 skriv_coru(zud,coru_no(102));
  5  6181     slut:
  5  6182               end;<*disable*>
  4  6183             end skriv_io_spool;
  3  6184     
  3  6184           trap(io_spool_trap);
  3  6185           næste_tomme:= 1;
  3  6186           stack_claim((if cm_test then 200 else 146)+24 +48);
  3  6187     <*+2*>
  3  6188           if testbit0 and overvåget or testbit28 then
  3  6189             skriv_io_spool(out,0);
  3  6190     <*-2*>
  3  6191     \f

  3  6191     message procedure io_spool side 2 - 810602/hko;
  3  6192     
  3  6192           repeat
  3  6193     
  3  6193             wait_ch(cs_io_spool,
  3  6194                     op_ref,
  3  6195                     true,
  3  6196                     -1<*timeout*>);
  3  6197     
  3  6197             i:= d.op_ref.opkode;
  3  6198             if i = 22 or i = 23 or i = 36 or i = 45 or i = 46 then
  3  6199             begin
  4  6200               wait(ss_io_spool_tomme);
  4  6201               disable modif_fil(io_spoolfil,næste_tomme,nr);
  4  6202               næste_tomme:= (næste_tomme mod io_spool_postantal) +1;
  4  6203     
  4  6203               i:= d.op_ref.opsize;
  4  6204     <*+4*>    if i > io_spool_postlængde*2 -io_spool_post then
  4  6205               begin
  5  6206     <*          fejlreaktion(3,i,<:postlængde,io spool:>,1);  *>
  5  6207                 i:= io_spool_postlængde*2 -io_spool_post;
  5  6208               end;
  4  6209     <*-4*>
  4  6210               fil(nr,1):= real(extend d.op_ref.opsize shift 24);
  4  6211               tofrom(fil(nr).io_spool_post,d.op_ref,i);
  4  6212               signal(ss_io_spool_fulde);
  4  6213               d.op_ref.resultat:= 1;
  4  6214             end
  3  6215             else
  3  6216             begin
  4  6217               fejlreaktion(2<*operationskode*>,d.op_ref.opkode,
  4  6218                            <:io_spool_korutine:>,1);
  4  6219             end;
  3  6220     
  3  6220             signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  3  6221     
  3  6221           until false;
  3  6222     
  3  6222     io_spool_trap:
  3  6223     
  3  6223           disable skriv_io_spool(zbillede,1);
  3  6224         end io_spool;
  2  6225     \f

  2  6225     message procedure io_spon side 1 - 810507/hko;
  2  6226     
  2  6226       procedure io_spon;
  2  6227         begin
  3  6228           integer
  3  6229             næste_fulde,nr,i,dato,kl;
  3  6230           real t;
  3  6231     
  3  6231           procedure skriv_io_spon(zud,omfang);
  3  6232             value                     omfang;
  3  6233             zone                  zud;
  3  6234             integer                   omfang;
  3  6235             begin
  4  6236               disable write(zud,"nl",1,<:+++ io_spon              :>);
  4  6237               if omfang > 0 then
  4  6238               disable begin integer x;
  5  6239                 trap(slut);
  5  6240                 write(zud,"nl",1,
  5  6241                   <:  næste-fulde::>,næste_fulde,"nl",1,
  5  6242                   <:  nr          :>,nr,"nl",1,
  5  6243                   <::>);
  5  6244                 skriv_coru(zud,coru_no(103));
  5  6245     slut:
  5  6246               end;<*disable*>
  4  6247             end skriv_io_spon;
  3  6248     
  3  6248           trap(io_spon_trap);
  3  6249           næste_fulde:= 1;
  3  6250           stack_claim((if cm_test then 200 else 146) +24 +48);
  3  6251     <*+2*>
  3  6252           if testbit0 and overvåget or testbit28 then
  3  6253             skriv_io_spon(out,0);
  3  6254     <*-2*>
  3  6255     \f

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

  4  6306     message procedure io_spon side 3 - 810507/hko;
  4  6307     
  4  6307               if fil(nr).io_spool_post.data(3)<>0 then
  4  6308                 write(z_io," ",1,string område_navn(fil(nr).io_spool_post.data(3)));
  4  6309     
  4  6309               if k = 46 then
  4  6310               begin
  5  6311                 write(zio,<: besvaret:>,<< zd.dd>,t/100.0);
  5  6312               end;
  4  6313             end <*disable*>
  3  6314             else
  3  6315               fejlreaktion(2<*operationskode*>,k,<:io_spon_medd:>,1);
  3  6316     
  3  6316             fil(nr,1):= fil(nr,1) add 1;
  3  6317     
  3  6317     <*V*>   setposition(zio,0,0);
  3  6318     
  3  6318             signal_bin(bs_zio_adgang);
  3  6319     
  3  6319             signal(ss_io_spool_tomme);
  3  6320     
  3  6320           until false;
  3  6321     
  3  6321     io_spon_trap:
  3  6322           skriv_io_spon(zbillede,1);
  3  6323     
  3  6323         end io_spon;  
  2  6324     \f

  2  6324     message procedure io_medd side 1;
  2  6325     
  2  6325       procedure io_medd;
  2  6326       begin
  3  6327         integer array field opref;
  3  6328         integer afs, kl, i;
  3  6329         real dato, t;
  3  6330     
  3  6330     
  3  6330           procedure skriv_io_medd(zud,omfang);
  3  6331             value                     omfang;
  3  6332             zone                  zud;
  3  6333             integer                   omfang;
  3  6334             begin
  4  6335               disable write(zud,"nl",1,<:+++ io_medd              :>);
  4  6336               if omfang > 0 then
  4  6337               disable begin integer x;
  5  6338                 trap(slut);
  5  6339                 write(zud,"nl",1,
  5  6340                   <:  opref:    :>,opref,"nl",1,
  5  6341                   <:  afs:      :>,afs,"nl",1,
  5  6342                   <:  kl:       :>,kl,"nl",1,
  5  6343                   <:  i:        :>,i,"nl",1,
  5  6344                   <:  dato:     :>,<<zddddd>,dato,"nl",1,
  5  6345                   <:  t:        :>,t,"nl",1,
  5  6346                   <::>);
  5  6347                 skriv_coru(zud,coru_no(104));
  5  6348     slut:
  5  6349               end;<*disable*>
  4  6350             end skriv_io_medd;
  3  6351     
  3  6351           trap(io_medd_trap);
  3  6352           stack_claim((if cm_test then 200 else 146) +24 +48);
  3  6353     <*+2*>
  3  6354           if testbit0 and overvåget or testbit28 then
  3  6355             skriv_io_medd(out,0);
  3  6356     <*-2*>
  3  6357     \f

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

  2  6543     message operatør_erklæringer side 1 - 810602/hko;
  2  6544       integer
  2  6545         cs_op,cs_op_retur,cs_talevejsswitch,cs_tvswitch_adgang,cs_tv_switch_adm,
  2  6546         cs_tvswitch_input, cs_op_iomedd, bs_opk_alarm, cs_opk_alarm, cs_cqf,
  2  6547         cs_op_spool, cs_op_medd, ss_op_spool_tomme, ss_op_spool_fulde,
  2  6548         cs_opk_alarm_ur, cs_opk_alarm_ur_ret, sidste_tv_brugt;
  2  6549       integer array
  2  6550         cqf_tabel(1:max_cqf*cqf_lgd//2),
  2  6551         operatørmaske(1:op_maske_lgd//2),
  2  6552         op_talevej(0:max_antal_operatører),
  2  6553         tv_operatør(0:max_antal_taleveje),
  2  6554         opk_alarm(1:max_antal_operatører*(opk_alarm_tab_lgd//2)),
  2  6555         op_spool_buf(1:op_spool_postantal*(op_spool_postlgd//2)),
  2  6556         ant_i_opkø,
  2  6557         cs_operatør,
  2  6558         cs_op_fil(1:max_antal_operatører);
  2  6559       boolean
  2  6560         op_cqf_tab_ændret;
  2  6561       integer field
  2  6562         op_spool_kilde;
  2  6563       real field
  2  6564         op_spool_tid;
  2  6565       long array field
  2  6566         op_spool_text;
  2  6567       zone z_tv_in, z_tv_out(128,1,tvswitch_fejl);
  2  6568       zone array z_op(max_antal_operatører,320,1,op_fejl);
  2  6569     \f

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

  2  6635     message procedure tvswitch_fejl side 1 - 940426/cl;
  2  6636     
  2  6636       procedure tvswitch_fejl(z,s,b);
  2  6637         integer                 s,b;
  2  6638         zone                  z;
  2  6639       begin
  3  6640         disable begin
  4  6641           integer array iz(1:20);
  4  6642           integer i,j,k;
  4  6643           integer array field iaf;
  4  6644           boolean input;
  4  6645           real array field raf;
  4  6646     
  4  6646           getzone6(z,iz);
  4  6647           iaf:=raf:=2;
  4  6648           input:= iz(13) = 1;
  4  6649     <*+2*> if testbit31 then
  4  6650     <**>   begin
  5  6651     <**>     write(out,"nl",1,<:blockprocedure: tvswitch:>,"nl",1,
  5  6652     <**>       <:s=:>); outintbits(out,s);
  5  6653     <**>     write(out,"nl",1,<:b=:>,b,"sp",1,if input then <:input:>
  5  6654     <**>       else <:output:>,"nl",1);
  5  6655     <**>     skrivhele(out,z,b,5);
  5  6656     <**>     setposition(out,0,0);
  5  6657     <**>   end;
  4  6658     <*-2*>
  4  6659           k:=1;
  4  6660           if s <> (1 shift 21 +2) then
  4  6661             fejlreaktion(17<*ydre enhed status*>,s,string iz.raf(increase(k)),
  4  6662                          1 shift 12 <*binært*> +1 <*fortsæt*>);
  4  6663     
  4  6663           if input or -,input then
  4  6664           begin
  5  6665             z(1):=real <:<'em'>:>;
  5  6666             b:=2;
  5  6667           end;
  4  6668         end; <*disable*>
  3  6669         if testbit22 and (s <> (1 shift 21 +2)) then delay(60);
  3  6670       end tvswitch_fejl;
  2  6671     
  2  6671     procedure skriv_talevejs_tab(z);
  2  6672       zone z;
  2  6673     begin
  3  6674       write(z,"nl",2,<:talevejsswitch::>);
  3  6675       write(z,"nl",1,<:  operatører::>,"nl",1);
  3  6676       for i:= 1 step 1 until max_antal_operatører do
  3  6677       begin
  4  6678         write(z,<< dd>,i,":",1,op_talevej(i));
  4  6679         if i mod 8=0 then outchar(z,'nl');
  4  6680       end;
  3  6681       write(z,"nl",1,<:  taleveje::>,"nl",1);
  3  6682       for i:= 1 step 1 until max_antal_taleveje do
  3  6683       begin
  4  6684         write(z,<< dd>,i,":",1,tv_operatør(i));
  4  6685         if i mod 8=0 then outchar(z,'nl');
  4  6686       end;
  3  6687       write(z,"nl",3);
  3  6688     end;                                                      
  2  6689     \f

  2  6689     message procedure skriv_opk_alarm_tab side 1;
  2  6690     
  2  6690     procedure skriv_opk_alarm_tab(z);
  2  6691     zone                          z;
  2  6692     begin
  3  6693       integer nr;
  3  6694       integer array field tab;
  3  6695       real t;
  3  6696     
  3  6696       write(z,"nl",2,<:opkaldsalarmtabel::>,"nl",1,
  3  6697         <:operatør    kmdo tilst gl.tilst længde start:>,"nl",1);
  3  6698       for nr:=1 step 1 until max_antal_operatører do
  3  6699       begin
  4  6700         tab:= (nr-1)*opk_alarm_tab_lgd;
  4  6701         write(z,<< dd >,nr,true,6,string bpl_navn(nr),<::   :>,
  4  6702           case opk_alarm.tab.alarm_kmdo+1 of ("-","B","C","F"),1,"sp",5,
  4  6703           case opk_alarm.tab.alarm_tilst+1 of ("-","B","C","?"),1,"sp",8,
  4  6704           case opk_alarm.tab.alarm_gtilst+1 of ("-","B","C","?"),1,"sp",2,
  4  6705           <<-dddd>,opk_alarm.tab.alarm_lgd,"sp",1,
  4  6706           << zddddd>,systime(4,opk_alarm.tab.alarm_start,t),t,
  4  6707           "nl",1);
  4  6708       end;
  3  6709     end;
  2  6710     \f

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

  2  6808     message procedure ht_symbol side 1 - 851001/cl;
  2  6809     
  2  6809     procedure ht_symbol(z);
  2  6810       zone              z;
  2  6811     write(z,"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>,<:
  2  6812     
  2  6812     
  2  6812     
  2  6812     
  2  6812                         @@         @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  2  6812                        @@         @@                               @@
  2  6812                       @@         @@                               @@
  2  6812                      @@         @@                               @@
  2  6812                     @@         @@@@@@@@@@@@@         @@@@@@@@@@@@@
  2  6812                    @@                               @@
  2  6812                   @@                               @@
  2  6812                  @@                               @@
  2  6812                 @@         @@@@@@@@@@@@@         @@
  2  6812                @@         @@         @@         @@
  2  6812               @@         @@         @@         @@
  2  6812              @@         @@         @@         @@
  2  6812             @@@@@@@@@@@@@         @@@@@@@@@@@@@
  2  6812     :>,"esc" add 128,1,<:Æ24;1H:>);
  2  6813     \f

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

  2  6870     message procedure skriv_terminal_tab side 1 - 820301/hko;
  2  6871     
  2  6871       procedure skriv_terminal_tab(z);
  2  6872         zone                       z;
  2  6873         begin
  3  6874           integer array field ref;
  3  6875           integer t1,i,j,id,k;
  3  6876     
  3  6876           write(z,"ff",1,<:
  3  6877           ******* terminalbeskrivelser ********
  3  6878     
  3  6878                         # a k l p m m n o
  3  6879                         1 l a y a o o ø p
  3  6880     nr tilst   -  vnt R 0 l t t s n b d t type ident    id i kø:>);
  3  6881     <*
  3  6882     01   15 .... .... X X X X X X X X X X MEDD 9999.abc 888B/77
  3  6883     *>
  3  6884           for i:=1 step 1 until max_antal_operatører do
  3  6885           begin
  4  6886             ref:=i*terminal_beskr_længde;
  4  6887             t1:=terminal_tab.ref(1);
  4  6888             id:=terminal_tab.ref(2);
  4  6889             k:=terminal_tab.ref(3);
  4  6890             write(z,"nl",1,"sp",4,<<dd>,i,<< dddd>,t1 shift(-21),
  4  6891               t1 shift(-16) extract 5,t1 shift(-12) extract 4,
  4  6892               "sp",1);
  4  6893             for j:=11 step -1 until 2 do
  4  6894               write(z,if læs_bit_i(t1,j) then "X" else "sp",1,"sp",1);
  4  6895             write(z,case t1 extract 2 +1 of (<:-   :>,<:OPK :>,<:MEDD:>,<:GNM :>),
  4  6896               "sp",1);
  4  6897             skriv_id(z,id,9);
  4  6898             skriv_id(z,k,9);
  4  6899           end;
  3  6900           write(z,"nl",2,<:samtaleflag::>,"nl",1);
  3  6901           outintbits_ia(z,samtaleflag,1,op_maske_lgd//2);
  3  6902           write(z,"nl",1);
  3  6903         end skriv_terminal_tab;
  2  6904     \f

  2  6904     message procedure h_operatør side 1 - 810520/hko;
  2  6905     
  2  6905       <* hovedmodulkorutine for operatørterminaler *>
  2  6906       procedure h_operatør;
  2  6907       begin
  3  6908         integer array field op_ref;
  3  6909         integer k,nr,ant,ref,dest_sem;
  3  6910         procedure skriv_hoperatør(zud,omfang);
  3  6911           value                     omfang;
  3  6912           zone                  zud;
  3  6913           integer                   omfang;
  3  6914           begin
  4  6915     
  4  6915             write(zud,"nl",1,<:+++ hovedmodul operatør  :>);
  4  6916             if omfang>0 then
  4  6917             disable begin integer x;
  5  6918               trap(slut);
  5  6919               write(zud,"nl",1,
  5  6920                 <:  op_ref:    :>,op_ref,"nl",1,
  5  6921                 <:  nr:        :>,nr,"nl",1,
  5  6922                 <:  ant:       :>,ant,"nl",1,
  5  6923                 <:  ref:       :>,ref,"nl",1,
  5  6924                 <:  k:         :>,k,"nl",1,
  5  6925                 <:  dest_sem:  :>,dest_sem,"nl",1,
  5  6926                 <::>);
  5  6927               skriv_coru(zud,coru_no(200));
  5  6928     slut:
  5  6929             end;
  4  6930          end skriv_hoperatør;
  3  6931     
  3  6931       trap(hop_trap);
  3  6932       stack_claim(if cm_test then 198 else 146);
  3  6933     
  3  6933     <*+2*>
  3  6934       if testbit8 and overvåget or testbit28 then
  3  6935         skriv_hoperatør(out,0);
  3  6936     <*-2*>
  3  6937     \f

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

  4  7023     message procedure h_operatør side 3 - 810601/hko;
  4  7024     
  4  7024           if k=8<*ekskluder*> then <*afbryd kommando v. timeout*>
  4  7025           begin
  5  7026             iaf:=d.op_ref.data(1)*terminal_beskr_længde;
  5  7027             terminal_tab.iaf.terminal_tilstand:= 7 shift 21
  5  7028               +terminal_tab.iaf.terminal_tilstand extract 21;
  5  7029           end;
  4  7030           signal_ch(dest_sem,op_ref,d.op_ref.optype);
  4  7031         end;
  3  7032       until false;
  3  7033     
  3  7033     hop_trap:
  3  7034       disable skriv_hoperatør(zbillede,1);
  3  7035       end h_operatør;
  2  7036     \f

  2  7036     message procedure operatør side 1 - 820304/hko;
  2  7037     
  2  7037       procedure operatør(nr);
  2  7038         value          nr;
  2  7039         integer        nr;
  2  7040       begin
  3  7041         integer array field op_ref,ref,vt_op,iaf,tab;
  3  7042         integer i,kode,aktion,status,tilstand,bv,bs,bs_tilst,
  3  7043                 kanal,opgave,pos,indeks,sep,sluttegn,rkom, par1, par2,
  3  7044                 vogn,ll,garage,skærmmåde,res,s_kanal,v_kanal;
  3  7045         real kommstart,kommslut;
  3  7046     \f

  3  7046     message procedure operatør side 1a - 820301/hko;
  3  7047     
  3  7047         procedure skriv_operatør(zud,omfang);
  3  7048           value                      omfang;
  3  7049           zone                   zud;
  3  7050           integer                    omfang;
  3  7051           begin integer i;
  4  7052     
  4  7052             i:= write(zud,"nl",1,<:+++ operatør nr::>,nr);
  4  7053             write(zud,"sp",26-i);
  4  7054             if omfang > 0 then
  4  7055             disable begin
  5  7056               integer x;
  5  7057               trap(slut);
  5  7058               write(zud,"nl",1,
  5  7059                 <:  op-ref:    :>,op_ref,"nl",1,
  5  7060                 <:  kode:      :>,kode,"nl",1,
  5  7061                 <:  aktion:    :>,aktion,"nl",1,
  5  7062                 <:  ref:       :>,ref,"nl",1,
  5  7063                 <:  vt_op:     :>,vt_op,"nl",1,
  5  7064                 <:  iaf:       :>,iaf,"nl",1,
  5  7065                 <:  status:    :>,status,"nl",1,
  5  7066                 <:  tilstand:  :>,tilstand,"nl",1,
  5  7067                 <:  bv:        :>,bv,"nl",1,
  5  7068                 <:  bs:        :>,bs,"nl",1,
  5  7069                 <:  bs-tilst:  :>,bs_tilst,"nl",1,
  5  7070                 <:  kanal:     :>,kanal,"nl",1,
  5  7071                 <:  opgave:    :>,opgave,"nl",1,
  5  7072                 <:  pos:       :>,pos,"nl",1,
  5  7073                 <:  indeks:    :>,indeks,"nl",1,
  5  7074                 <:  sep:       :>,sep,"nl",1,
  5  7075                 <:  sluttegn:  :>,sluttegn,"nl",1,
  5  7076                 <:  vogn:      :>,vogn,"nl",1,
  5  7077                 <:  ll:        :>,ll,"nl",1,
  5  7078                 <:  garage:    :>,garage,"nl",1,
  5  7079                 <:  skærmmåde: :>,skærmmåde,"nl",1,
  5  7080                 <:  res:       :>,res,"nl",1,
  5  7081                 <:  tab:       :>,tab,"nl",1,
  5  7082                 <:  rkom:      :>,rkom,"nl",1,
  5  7083                 <:  par1:      :>,par1,"nl",1,
  5  7084                 <:  par2:      :>,par2,"nl",1,
  5  7085                 <::>);
  5  7086               skriv_coru(zud,coru_no(200+nr));
  5  7087     slut:
  5  7088             end;
  4  7089           end skriv_operatør;
  3  7090     \f

  3  7090     message procedure skærmstatus side 1 - 810518/hko;
  3  7091     
  3  7091       integer
  3  7092       procedure skærmstatus(tilstand,b_v,b_s,b_s_tilst);
  3  7093         integer             tilstand,b_v,b_s,b_s_tilst;
  3  7094         begin
  4  7095           integer i,j;
  4  7096     
  4  7096           i:= terminal_tab.ref(1);
  4  7097           b_s:= terminal_tab.ref(2);
  4  7098           b_s_tilst:= i extract 12;
  4  7099           j:= b_s_tilst extract 3;
  4  7100           b_v:= i shift (-12) extract 4;
  4  7101           tilstand:= i shift (-21);
  4  7102     
  4  7102           skærmstatus:= if b_v = 0 and b_s = 0 then 0 else
  4  7103                         if b_v = 0 and j = 1<*opkald*> then 1 else
  4  7104                         if b_v = 0 and j = 2<*specialopkald*>  then 2 else
  4  7105                         if (bv<>0) and (bs<>0) and (j=3) then 4 else 3;
  4  7106         end skærmstatus;
  3  7107     \f

  3  7107     message procedure skriv_skærm side 1 - 810522/hko;
  3  7108     
  3  7108       procedure skriv_skærm(nr);
  3  7109         value               nr;
  3  7110         integer             nr;
  3  7111         begin
  4  7112           integer i;
  4  7113     
  4  7113           disable definer_taster(nr);
  4  7114     
  4  7114           skriv_skærm_maske(nr);
  4  7115           skriv_skærm_opkaldskø(nr);
  4  7116           skriv_skærm_b_v_s(nr);
  4  7117           for i:= 1 step 1 until max_antal_kanaler do
  4  7118             skriv_skærm_kanal(nr,i);
  4  7119           cursor(z_op(nr),1,1);
  4  7120     <*V*> setposition(z_op(nr),0,0);
  4  7121         end skriv_skærm;
  3  7122     \f

  3  7122     message procedure skriv_skærm_id side 1 - 830310/hko;
  3  7123     
  3  7123       procedure skriv_skærm_id(nr,id,nød);
  3  7124         value                  nr,id,nød;
  3  7125         integer                nr,id;
  3  7126         boolean                      nød;
  3  7127         begin
  4  7128           integer linie,løb,bogst,i,p;
  4  7129     
  4  7129           i:= id shift (-22);
  4  7130     
  4  7130           case i+1 of
  4  7131           begin
  5  7132             begin <* busnr *>
  6  7133               p:= write(z_op(nr),if nød then "*" else "sp",1,<<bddd>,
  6  7134                     (id extract 14) mod 10000);
  6  7135               if id shift (-14) extract 8 > 0 then
  6  7136                 p:= p+write(z_op(nr),".",1,
  6  7137                     string bpl_navn(id shift (-14) extract 8));
  6  7138               write(z_op(nr),"sp",11-p);
  6  7139             end;
  5  7140     
  5  7140             begin <*linie/løb*>
  6  7141               linie:= id shift (-12) extract 10;
  6  7142               bogst:= id shift (-7) extract 5;
  6  7143               if bogst > 0 then bogst:= bogst +'A'-1;
  6  7144               løb:= id extract 7;
  6  7145               write(z_op(nr),if nød then "*" else "sp",1,
  6  7146                 "sp",if bogst=0 then 1 else 0,<<ddd>,linie,<<d>,
  6  7147                 false add bogst,1,"/",1,løb,
  6  7148                 "sp",if løb > 9 then 3 else 4);
  6  7149             end;
  5  7150     
  5  7150             begin <*gruppe*>
  6  7151               write(z_op(nr),<:GRP  :>);
  6  7152               if id shift (-21) extract 1 = 1 then
  6  7153               begin <*specialgruppe*>
  7  7154                 løb:= id extract 7;
  7  7155                 write(z_op(nr),"sp",if løb > 9 then 1 else 2,<:G:>,
  7  7156                   <<d>,løb,"sp",2);
  7  7157               end
  6  7158               else
  6  7159               begin
  7  7160                 linie:= id shift (-5) extract 10;
  7  7161                 bogst:= id extract 5;
  7  7162                 if bogst > 0 then bogst:= bogst +'A'-1;
  7  7163                 write(z_op(nr),"sp",if bogst > 0 then 1 else 0,<<ddd>,linie,
  7  7164                   false add bogst,1,"sp",2);
  7  7165               end;
  6  7166             end;
  5  7167     
  5  7167             <* kanal eller område *>
  5  7168             begin
  6  7169               linie:= (id shift (-20) extract 2) + 1;
  6  7170               case linie of
  6  7171               begin
  7  7172                 write(z_op(nr),"sp",11-write(z_op(nr),
  7  7173                   string kanal_navn(id extract 20)));
  7  7174                 write(z_op(nr),<:K*:>,"sp",9);
  7  7175                 write(z_op(nr),"sp",11-write(z_op(nr),
  7  7176                   <:OMR :>,string område_navn(id extract 20)));
  7  7177                 write(z_op(nr),<:ALLE:>,"sp",7);
  7  7178               end;
  6  7179             end;
  5  7180     
  5  7180           end <* case i *>
  4  7181         end skriv_skærm_id;
  3  7182     \f

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

  3  7243     message procedure skriv_skærm_b_v_s side 1 - 810601/hko;
  3  7244     
  3  7244       procedure skriv_skærm_b_v_s(nr);
  3  7245         value                     nr;
  3  7246         integer                   nr;
  3  7247         begin
  4  7248           integer i,j,k,kv,ks,t;
  4  7249           integer array field tref,kref;
  4  7250     
  4  7250           tref:= nr*terminal_beskr_længde;
  4  7251           i:= terminal_tab.tref.terminal_tilstand;
  4  7252           kv:= i shift (-12) extract 4;
  4  7253           ks:= terminaltab.tref(2) extract 20;
  4  7254     <*V*> setposition(z_op(nr),0,0);
  4  7255           cursor(z_op(nr),18,28);
  4  7256           write(z_op(nr),"esc" add 128,1,<:ÆK:>);
  4  7257           cursor(z_op(nr),20,28);
  4  7258           write(z_op(nr),"esc" add 128,1,<:ÆK:>);
  4  7259           cursor(z_op(nr),21,28);
  4  7260           write(z_op(nr),"esc" add 128,1,<:ÆK:>);
  4  7261           cursor(z_op(nr),20,28);
  4  7262           if op_talevej(nr)<>0 then
  4  7263           begin
  5  7264             cursor(z_op(nr),18,28);
  5  7265             write(z_op(nr),<:talevej: :>,<<d>,op_talevej(nr));
  5  7266           end;
  4  7267           if kv <> 0 then
  4  7268           begin
  5  7269             kref:= (kv-1)*kanal_beskr_længde;
  5  7270             j:= if kv<>ks then kanaltab.kref.kanal_id1
  5  7271                 else kanaltab.kref.kanal_id2;
  5  7272             k:= if kv<>ks then kanaltab.kref.kanal_alt_id1
  5  7273                 else kanaltab.kref.kanal_alt_id2;
  5  7274             write(z_op(nr),true,6,string kanal_navn(kv));
  5  7275             skriv_skærm_id(nr,j,kanaltab.kref.kanaltilstand shift(-3) extract 1=1);
  5  7276             skriv_skærm_id(nr,k,false);
  5  7277             write(z_op(nr),if i extract 2 = 3 then <:GNM:> else <:VNT:>);
  5  7278           end;
  4  7279     
  4  7279           cursor(z_op(nr),21,28);
  4  7280           j:= terminal_tab.tref(2);
  4  7281           if i shift (-21) <> 0 <*ikke ledig*> then
  4  7282           begin
  5  7283     \f

  5  7283     message procedure skriv_skærm_b_v_s side 2 - 841210/cl;
  5  7284     
  5  7284             if i shift (-21) = 1 <*samtale*> then
  5  7285             begin
  6  7286               if j shift (-20) = 12 then
  6  7287               begin
  7  7288                 write(z_op(nr),true,6,string kanal_navn(ks));
  7  7289               end
  6  7290               else
  6  7291               begin
  7  7292                 write(z_op(nr),true,6,<:K*:>);
  7  7293                 k:= 0;
  7  7294                 while ks shift (-k) extract 1 = 0 and k<max_antal_kanaler do
  7  7295                   k:= k+1;
  7  7296                 ks:= k;
  7  7297               end;
  6  7298               kref:= (ks-1)*kanal_beskr_længde;
  6  7299               t:= kanaltab.kref.kanaltilstand;
  6  7300               skriv_skærm_id(nr,kanaltab.kref.kanal_id1,
  6  7301                              t shift (-3) extract 1 = 1);
  6  7302               skriv_skærm_id(nr,kanaltab.kref.kanal_alt_id1,false);
  6  7303               write(z_op(nr),if i shift (-11) extract 1 = 1 then <:-P-:> else
  6  7304                 if t shift (-5) extract 1 = 1 then <:MON :> else
  6  7305                 if t shift (-4) extract 1 = 1 then <:BSV :> else
  6  7306                 if t shift (-6) extract 1 = 1 then <:PAS :> else
  6  7307                 if t shift (-7) extract 1 = 1 then <:LYT :> else <:TAL :>);
  6  7308               if t shift (-9) extract 1 = 1 then
  6  7309                 write(z_op(nr),<:ALLE :>);
  6  7310               if t shift (-8) extract 1 = 1 then
  6  7311                 write(z_op(nr),<:KATASTROFE :>);
  6  7312               k:= kanaltab.kref.kanal_spec;
  6  7313               if t extract 2 <> 3 and t shift (-4) extract 1 = 1 then
  6  7314                 write(z_op(nr),<<zd.dd>,(k extract 12)/100);
  6  7315             end
  5  7316             else <* if i shift (-21) = 2 <+optaget+> then *>
  5  7317             begin
  6  7318               write(z_op(nr),<:K-:>,"sp",3);
  6  7319               if j <> 0 then
  6  7320                 skriv_skærm_id(nr,j,false)
  6  7321               else
  6  7322               begin
  7  7323                 j:=terminal_tab.tref(3);
  7  7324                 skriv_skærm_id(nr,j,
  7  7325                   false add (if i shift(-4) extract 1 = 1 then 2 <* mobil opk. *>
  7  7326                                                          else 0));
  7  7327               end;
  6  7328               write(z_op(nr),<:OPT:>);
  6  7329             end;
  5  7330           end;
  4  7331     <*V*> setposition(z_op(nr),0,0);
  4  7332         end skriv_skærm_b_v_s;
  3  7333     \f

  3  7333     message procedure skriv_skærm_maske side 1 - 810511/hko;
  3  7334     
  3  7334       procedure skriv_skærm_maske(nr);
  3  7335         value                     nr;
  3  7336         integer                   nr;
  3  7337         begin
  4  7338           integer i;
  4  7339     <*V*> setposition(z_op(nr),0,0);
  4  7340           write(z_op(nr),"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>,
  4  7341            "sp",26,"*",5,<: operatør :>,<<d>,nr,"sp",1,string bpl_navn(nr),
  4  7342            "sp",1,"*",5,"nl",1,"-",80);
  4  7343     
  4  7343           for i:= 3 step 1 until 21 do
  4  7344           begin
  5  7345             cursor(z_op(nr),i,26);
  5  7346             outchar(z_op(nr),'!');
  5  7347           end;
  4  7348           cursor(z_op(nr),22,1);
  4  7349           write(z_op(nr),"-",80);
  4  7350           cursor(z_op(nr),1,1);
  4  7351     <*V*> setposition(z_op(nr),0,0);
  4  7352         end skriv_skærm_maske;
  3  7353     \f

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

  4  7442     message procedure skriv_skærm_opkaldskø side 2 - 820301/hko;
  4  7443     
  4  7443           signal_bin(bs_opkaldskø_adgang);
  4  7444           if kmdo > opk_alarm.tab.alarm_tilst and 
  4  7445              kmdo > opk_alarm.tab.alarm_kmdo  then
  4  7446           begin
  5  7447             opk_alarm.tab.alarm_kmdo:= kmdo;
  5  7448             signal_bin(bs_opk_alarm);
  5  7449           end;
  4  7450           if ant > 5 then
  4  7451           begin
  5  7452             cursor(z_op(nr),13,9);
  5  7453             write(z_op(nr),<<+ddd>,ant-5);
  5  7454           end
  4  7455           else
  4  7456           begin
  5  7457             for i:= ant +1 step 1 until 6 do
  5  7458             begin
  6  7459               cursor(z_op(nr),i*2+1,1);
  6  7460               write(z_op(nr),"sp",25);
  6  7461             end;
  5  7462           end;
  4  7463           ant_i_opkø(nr):= ant;
  4  7464           cursor(z_op(nr),1,1);
  4  7465     <*V*> setposition(z_op(nr),0,0);
  4  7466         end skriv_skærm_opkaldskø;
  3  7467     \f

  3  7467     message procedure operatør side 2 - 810522/hko;
  3  7468     
  3  7468         trap(op_trap);
  3  7469         stack_claim((if cm_test then 200 else 146)+24+48+80+175);
  3  7470     
  3  7470         ref:= nr*terminal_beskr_længde;
  3  7471         tab:= (nr-1)*opk_alarm_tab_lgd;
  3  7472         skærmmåde:= 0; <*normal*>
  3  7473     
  3  7473         if operatør_auto_include(nr) then
  3  7474         begin
  4  7475           waitch(cs_att_pulje,opref,true,-1);
  4  7476           i:= operatør_auto_include(nr) extract 2;
  4  7477           if i<>3 then i:= 0;
  4  7478           start_operation(opref,101,cs_att_pulje,i shift 12 +1);
  4  7479           d.opref.data(1):= nr;
  4  7480           signalch(cs_rad,opref,gen_optype or io_optype);
  4  7481         end;
  3  7482     
  3  7482     <*+2*>
  3  7483         if testbit8 and overvåget or testbit28 then
  3  7484           skriv_operatør(out,0);
  3  7485     <*-2*>
  3  7486     \f

  3  7486     message procedure operatør side 3 - 810602/hko;
  3  7487     
  3  7487         repeat
  3  7488     
  3  7488     <*V*> wait_ch(cs_operatør(nr),
  3  7489                   op_ref,
  3  7490                   true,
  3  7491                   -1<*timeout*>);
  3  7492     <*+2*>
  3  7493           if testbit9 and overvåget then
  3  7494           disable begin
  4  7495             write(out,"nl",1,<:operation fra cs:>,<<d>,cs_operatør(nr),
  4  7496                              <: til operatør :>,nr);
  4  7497             skriv_op(out,op_ref);
  4  7498           end;
  3  7499     <*-2*>
  3  7500           monitor(8)reserve process:(z_op(nr),0,ia);
  3  7501           kode:= d.op_ref.op_kode extract 12;
  3  7502           i:= terminal_tab.ref.terminal_tilstand;
  3  7503           status:= i shift(-21);
  3  7504           opgave:=
  3  7505             if kode=0 then 1 <* indlæs kommando *> else
  3  7506             if kode=1 then 2 <* inkluder        *> else
  3  7507             if kode=2 then 3 <* ekskluder       *> else
  3  7508             if kode=40 then 4 <* opdater skærm  *> else
  3  7509             if kode=43 then 5 <* opkald etableret *> else
  3  7510             if kode=4  then 6 <* radiokanal ekskluderet *> else
  3  7511             if kode=38 then 7 <* operatør meddelelse *> else
  3  7512             0; <* afvises *>
  3  7513     
  3  7513           aktion:= case status +1 of(
  3  7514     <* status        *> <* opgave:         0   1   2   3   4   5   6   7 *>
  3  7515     <* 0 klar        *>(case opgave+1 of(  0,  1, -4,  3,  4, -4,  6,  7)),
  3  7516     <* 1 samtale     *>(case opgave+1 of(  0,  1, -4, -5,  4, -4,  6,  7)),
  3  7517     <* 2 optaget     *>(case opgave+1 of(  0,  1, -4, -5,  4,  5,  6,  7)),
  3  7518     <* 3 stoppet     *>(case opgave+1 of(  0,  2,  2,  3, -4, -4, -4,  7)),
  3  7519     <* 4 klar (fejl) *>(case opgave+1 of(  0, -4,  2,  3, -4, -4,  6, -4)),
  3  7520     <* 5 samt.(fejl) *>(case opgave+1 of(  0, -4,  2,  3, -4, -4,  6, -4)),
  3  7521     <* 6 opt. (fejl) *>(case opgave+1 of(  0, -4,  2,  3, -4,  5, -4, -4)),
  3  7522     <* 7 ej knyttet  *>(case opgave+1 of(  0, -4,  2, -4, -4, -4, -4, -4)),
  3  7523                         -1);
  3  7524     \f

  3  7524     message procedure operatør side 4 - 810424/hko;
  3  7525     
  3  7525           case aktion+6 of
  3  7526           begin
  4  7527             begin
  5  7528               <*-5: terminal optaget *>
  5  7529     
  5  7529               d.op_ref.resultat:= 16;
  5  7530               afslut_operation(op_ref,-1);
  5  7531             end;
  4  7532     
  4  7532             begin
  5  7533               <*-4: operation uden virkning *>
  5  7534     
  5  7534               afslut_operation(op_ref,-1);
  5  7535             end;
  4  7536     
  4  7536             begin
  5  7537               <*-3: ulovlig operationskode *>
  5  7538     
  5  7538               fejl_reaktion(2<*operationskode*>,kode,<:ulovlig:>,1);
  5  7539               afslut_operation(op_ref,-1);
  5  7540             end;
  4  7541     
  4  7541             begin
  5  7542               <*-2: ulovligt operatørterminal_nr *>
  5  7543     
  5  7543               fejl_reaktion(3<*programfejl*>,nr,<: ikke eksisterende operatør:>,1);
  5  7544               afslut_operation(op_ref,-1);
  5  7545             end;
  4  7546     
  4  7546             begin
  5  7547               <*-1: ulovlig operatørtilstand *>
  5  7548     
  5  7548               fejl_reaktion(3<*programfejl*>,status,<: ulovlig operatør-status:>,1);
  5  7549               afslut_operation(op_ref,-1);
  5  7550             end;
  4  7551     
  4  7551             begin
  5  7552               <* 0: ikke implementeret *>
  5  7553     
  5  7553               fejl_reaktion(2<*operationskode*>,kode,<: ikke implementeret:>,1);
  5  7554               afslut_operation(op_ref,-1);
  5  7555             end;
  4  7556     
  4  7556             begin
  5  7557     \f

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

  9  7606     message procedure operatør side 6 - 851001/cl;
  9  7607     
  9  7607                       <* 1 indsæt/udtag/flyt bus i vogntabel *>
  9  7608     
  9  7608                       vogn:=ia(1);
  9  7609                       ll:=ia(2);
  9  7610                       kanal:= if kode=11 or kode=19 then ia(3) else
  9  7611                               if kode=12 then ia(2) else 0;
  9  7612     <*V*>             wait_ch(cs_vt_adgang,
  9  7613                               vt_op,
  9  7614                               gen_optype,
  9  7615                               -1<*timeout sek*>);
  9  7616                       start_operation(vtop,200+nr,cs_operatør(nr),
  9  7617                                       kode);
  9  7618                       d.vt_op.data(1):=vogn;
  9  7619                       if kode=11 or kode=19 or kode=20 or kode=24 then
  9  7620                         d.vt_op.data(2):=ll;
  9  7621                       if kode=19 then d.vt_op.data(3):= kanal else
  9  7622                       if kode=11 or kode=12 then d.vt_op.data(4):= kanal;
  9  7623                       indeks:= vt_op;
  9  7624                       signal_ch(cs_vt,
  9  7625                                 vt_op,
  9  7626                                 gen_optype or op_optype);
  9  7627     
  9  7627     <*V*>             wait_ch(cs_operatør(nr),
  9  7628                               vt_op,
  9  7629                               op_optype,
  9  7630                               -1<*timeout sek*>);
  9  7631     <*+2*>            if testbit10 and overvåget then
  9  7632                       disable begin
 10  7633                         write(out,"nl",1,<:operatør :>,<<d>,nr,
 10  7634                               <:: operation retur fra vt:>);
 10  7635                         skriv_op(out,vt_op);
 10  7636                       end;
  9  7637     <*-2*>
  9  7638     <*+4*>            if vt_op<>indeks then
  9  7639                         fejl_reaktion(11<*fremmede op*>,op_ref,
  9  7640                                       <:operatør-kommando:>,0);
  9  7641     <*-4*>
  9  7642     <*V*>             setposition(z_op(nr),0,0);
  9  7643                       cursor(z_op(nr),24,1);
  9  7644     <*V*>             skriv_kvittering(z_op(nr),if d.vt_op.resultat = 11 or
  9  7645                         d.vt_op.resultat = 12 then d.vt_op.data(3)
  9  7646                         else vt_op,-1,d.vt_op.resultat);
  9  7647                       d.vt_op.optype:= gen_optype or vt_optype;
  9  7648                       disable afslut_operation(vt_op,cs_vt_adgang);
  9  7649                     end;
  8  7650                     begin
  9  7651     \f

  9  7651     message procedure operatør side 7 - 810921/hko,cl;
  9  7652     
  9  7652                     <* 2 vogntabel,linienr/-,busnr *>
  9  7653     
  9  7653                     d.op_ref.retur:= cs_operatør(nr);
  9  7654                     tofrom(d.op_ref.data,ia,10);
  9  7655                     indeks:= op_ref;
  9  7656                     signal_ch(cs_vt,op_ref,gen_optype or op_optype);
  9  7657                     wait_ch(cs_operatør(nr),
  9  7658                             op_ref,
  9  7659                             op_optype,
  9  7660                             -1<*timeout*>);
  9  7661     <*+2*>          if testbit10 and overvåget then
  9  7662                     disable begin
 10  7663                       write(out,"nl",1,<:operatør operation retur fra vt:>);
 10  7664                       skriv_op(out,op_ref);
 10  7665                     end;
  9  7666     <*-2*>
  9  7667     <*+4*>
  9  7668                     if indeks <> op_ref then
  9  7669                       fejlreaktion(11<*fremmed post*>,op_ref,<:operatør komm:>,0);
  9  7670     <*-4*>
  9  7671                     i:= d.op_ref.resultat;
  9  7672                     if i = 0 or i > 3 then
  9  7673                     begin
 10  7674     <*V*>             setposition(z_op(nr),0,0);
 10  7675                       cursor(z_op(nr),24,1);
 10  7676                       skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat);
 10  7677                     end
  9  7678                     else
  9  7679                     begin
 10  7680                       integer antal,fil_ref;
 10  7681     
 10  7681                       skærm_måde:= 1;
 10  7682                       antal:= d.op_ref.data(6);
 10  7683                       fil_ref:= d.op_ref.data(7);
 10  7684     <*V*>             setposition(z_op(nr),0,0);
 10  7685                       write(z_op(nr),"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>,
 10  7686                         "sp",14,"*",10,"sp",6,
 10  7687                             <:vogntabeludskrift:>,"sp",6,"*",10,"nl",2);
 10  7688     <*V*>             setposition(z_op(nr),0,0);
 10  7689     \f

 10  7689     message procedure operatør side 8 - 841213/cl;
 10  7690     
 10  7690                       pos:= 1;
 10  7691                       while pos <= antal do
 10  7692                       begin
 11  7693                         integer bogst,løb;
 11  7694     
 11  7694                         disable i:= læs_fil(fil_ref,pos,j);
 11  7695                         if i <> 0 then
 11  7696                           fejlreaktion(5<*læs_fil*>,i,<:operatør: vo,l/vo,b:>,0)
 11  7697                         else
 11  7698                         begin
 12  7699                           vogn:= fil(j,1) shift (-24) extract 24;
 12  7700                           løb:= fil(j,1) extract 24;
 12  7701                           if d.op_ref.opkode=9 then
 12  7702                             begin i:=vogn; vogn:=løb; løb:=i; end;
 12  7703                           ll:= løb shift (-12) extract 10;
 12  7704                           bogst:= løb shift (-7) extract 5;
 12  7705                           if bogst > 0 then bogst:= bogst +'A'-1;
 12  7706                           løb:= løb extract 7;
 12  7707                           vogn:= vogn extract 14;
 12  7708                           i:= d.op_ref.opkode-8;
 12  7709                           for i:= i,i+1 do
 12  7710                           begin
 13  7711                             j:= (i+1) extract 1;
 13  7712                             case j +1 of
 13  7713                             begin
 14  7714                               write(z_op(nr),"sp",(bogst=0) extract 1,<<ddd>,ll,
 14  7715                                 false add bogst,1,"/",1,<<d__>,løb);
 14  7716                               write(z_op(nr),<<dddd>,vogn,"sp",1);
 14  7717                             end;
 13  7718                           end;
 12  7719                           if pos mod 5 = 0 then
 12  7720                           begin
 13  7721                             outchar(z_op(nr),'nl');
 13  7722     <*V*>                   setposition(z_op(nr),0,0);
 13  7723                           end
 12  7724                           else write(z_op(nr),"sp",3);
 12  7725                         end;
 11  7726                         pos:=pos+1;
 11  7727                       end;
 10  7728                       write(z_op(nr),"*",1,"nl",1);
 10  7729     \f

 10  7729     message procedure operatør side 8a- 810507/hko;
 10  7730     
 10  7730                       d.opref.opkode:=104; <*slet-fil*>
 10  7731                       d.op_ref.data(4):=filref;
 10  7732                       indeks:=op_ref;
 10  7733                       signal_ch(cs_slet_fil,op_ref,gen_optype or op_optype);
 10  7734     <*V*>             wait_ch(cs_operatør(nr),op_ref,op_optype,-1);
 10  7735     
 10  7735     <*+2*>            if testbit10 and overvåget then
 10  7736                       disable begin
 11  7737                         write(out,"nl",1,<:operatør, slet-fil retur:>);
 11  7738                         skriv_op(out,op_ref);
 11  7739                       end;
 10  7740     <*-2*>
 10  7741     
 10  7741     <*+4*>            if op_ref<>indeks then
 10  7742                         fejlreaktion(11<*fr.post*>,op_ref,<:operatør,slet-fil:>,0);
 10  7743     <*-4*>
 10  7744                       if d.op_ref.data(9)<>0 then
 10  7745                         fejl_reaktion(3<*prg.fejl*>,d.op_ref.data(9),
 10  7746                             <:operatør, slet_fil:>,1);
 10  7747                     end;
  9  7748                   end;
  8  7749     
  8  7749                   begin
  9  7750     \f

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

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

 10  7955     message procedure operatør side 11 - 810529/hko;
 10  7956     
 10  7956                         res:= d.op_ref.resultat;
 10  7957                         if res < 2 or (res > 3 and (res<>49 or opgave<>11)) then
 10  7958                         begin
 11  7959     <*+4*>                if res < 2 then
 11  7960                             fejlreaktion(3<*prg.fejl*>,res,
 11  7961                               <: operatør,radio_op,resultat:>,1);
 11  7962     <*-4*>
 11  7963                           if res = 1 then res:= 0;
 11  7964                         end
 10  7965                         else
 10  7966                         begin <* res = 2 eller 3 *>
 11  7967                           s_kanal:= v_kanal:= 0;
 11  7968                           opgave:= d.opref.opkode shift (-12);
 11  7969                           bv:= d.op_ref.data(5) extract 4;
 11  7970                           bs:= d.op_ref.data(6);
 11  7971                           if opgave < 10 then
 11  7972                           begin
 12  7973                             j:= d.op_ref.data(7) <*type*>;
 12  7974                             i:= terminal_tab.ref(1) shift (-12) shift 12 extract 21;
 12  7975                             i:= i + (if opgave=2 or opgave>3 then 2 else 1);
 12  7976                             terminal_tab.ref(1):= i
 12  7977                               +(if res=2 then 4 <*optaget*> else 0)
 12  7978                               +(if (opgave=1 or opgave=9) and j = 2 <*nødopkald*>
 12  7979                                 then 8 <*nød*> else 0)
 12  7980                               +(if opgave=1 and j > 0 and j < 3 <*mobilopkald*>
 12  7981                                 then 16 else 0)
 12  7982                               + (if opgave mod 2 = 0 then 64 <*pas*> else 0)
 12  7983                               + (if opgave=9 then 128 else
 12  7984                                  if opgave>=7 then 256 else
 12  7985                                  if opgave>=5 then 512 else 0)
 12  7986                               + (if res = 2 then 2 shift 21 <*tilstand = optaget *>
 12  7987                                  else if b_s = 0 then 0     <*tilstand = ledig *>
 12  7988                                             else 1 shift 21 <*tilstand = samtale*>);
 12  7989                             if (res=3 or res=20 or res=52) and 0<=j and j<3 then
 12  7990                               disable tæl_opkald_pr_operatør(nr,
 12  7991                                 (if res=20 then 4 else if res=52 then 5 else j+1));
 12  7992                           end
 11  7993                           else if opgave=10 <*monitering*> or
 11  7994                                   opgave=14 <*ventepos  *> then
 11  7995                           begin
 12  7996     <*+4*>                  if res = 2 then
 12  7997                               fejlreaktion(3<*prg.fejl*>,res,
 12  7998                                 <: operatør,moniter,res:>,1);
 12  7999     <*-4*>
 12  8000                             iaf:= (bs extract 4 -1)*kanal_beskr_længde;
 12  8001                             i:= if bs<0 then
 12  8002                               kanaltab.iaf.kanal_tilstand extract 12 else 0;
 12  8003                             terminal_tab.ref(1):= i +
 12  8004                               (if bs < 0 then (1 shift 21) else 0);
 12  8005                             if opgave=10 then
 12  8006                             begin
 13  8007                               s_kanal:= bs;
 13  8008                               v_kanal:= d.opref.data(5);
 13  8009                             end;
 12  8010     \f

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

  9  8212     message procedure operatør side 13 - 810518/hko;
  9  8213     
  9  8213                       <* 4 stop kommando *>
  9  8214     
  9  8214                       status:= skærm_status(tilstand,b_v,b_s,b_s_tilst);
  9  8215                       if tilstand <> 0 then
  9  8216                       begin
 10  8217                         d.op_ref.resultat:= 16; <*skærm optaget*>
 10  8218                       end
  9  8219                       else
  9  8220                       begin
 10  8221                         d.op_ref.retur:= cs_operatør(nr);
 10  8222                         d.op_ref.resultat:= 0;
 10  8223                         d.op_ref.data(1):= nr;
 10  8224                         indeks:= op_ref;
 10  8225     <*+2*>              if testbit11 and overvåget then
 10  8226                         disable begin
 11  8227                           skriv_operatør(out,0);
 11  8228                           write(out,<: stop_operation til radio:>);
 11  8229                           skriv_op(out,op_ref); ud;
 11  8230                         end;
 10  8231     <*-2*>
 10  8232                         if opk_alarm.tab.alarm_tilst > 0 then
 10  8233                         begin
 11  8234                           opk_alarm.tab.alarm_kmdo:= 3;
 11  8235                           signal_bin(bs_opk_alarm);
 11  8236                         end;
 10  8237     
 10  8237                         signal_ch(cs_rad,op_ref,gen_optype or op_optype);
 10  8238     <*V*>               wait_ch(cs_operatør(nr),op_ref,op_optype,-1);
 10  8239     <*+2*>              if testbit12 and overvåget then
 10  8240                         disable begin
 11  8241                           skriv_operatør(out,0);
 11  8242                           write(out,<: operation retur fra radio:>);
 11  8243                           skriv_op(out,op_ref); ud;
 11  8244                         end;
 10  8245     <*-2*>
 10  8246     <*+4*>              if indeks <> op_ref then
 10  8247                           fejlreaktion(11<*fr.post*>,op_ref,
 10  8248                             <: operatør, retur fra radio:>,0);
 10  8249     <*-4*>
 10  8250     \f

 10  8250     message procedure operatør side 14 - 810527/hko;
 10  8251     
 10  8251                         if d.op_ref.resultat = 3 then
 10  8252                         begin
 11  8253                           integer k,n;
 11  8254                           integer array field msk,iaf1;
 11  8255     
 11  8255                           terminal_tab.ref.terminal_tilstand:= 3 shift 21
 11  8256                             +terminal_tab.ref.terminal_tilstand extract 21;
 11  8257                           tofrom(opkaldsflag,alle_operatører,op_maske_lgd);
 11  8258                           if sæt_bit_ia(operatørmaske,nr,0)=1 then
 11  8259                           for k:= nr, 65 step 1 until top_bpl_gruppe do
 11  8260                           begin
 12  8261                             msk:= k*op_maske_lgd;
 12  8262                             if læsbit_ia(bpl_def.msk,nr) then 
 12  8263     <**>                    begin
 13  8264                               n:= 0;
 13  8265                               for i:= 1 step 1 until max_antal_operatører do
 13  8266                               if læsbit_ia(bpl_def.msk,i) then
 13  8267                               begin
 14  8268                                 iaf1:= i*terminal_beskr_længde;
 14  8269                                 if terminal_tab.iaf1.terminal_tilstand 
 14  8270                                                              shift (-21) < 3 then
 14  8271                                   n:= n+1;
 14  8272                               end;  
 13  8273                               bpl_tilst(k,1):= n;
 13  8274                             end;
 12  8275     <**> <*  
 12  8276                               bpl_tilst(k,1):= bpl_tilst(k,1)-1;
 12  8277       *>                  end;
 11  8278                           signal_bin(bs_mobil_opkald);
 11  8279     <*V*>                 setposition(z_op(nr),0,0);
 11  8280                           ht_symbol(z_op(nr));
 11  8281                         end;
 10  8282                       end;
  9  8283     <*V*>             setposition(z_op(nr),0,0);
  9  8284                       cursor(z_op(nr),24,1);
  9  8285                       if d.op_ref.resultat<> 3 then
  9  8286                         skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat);
  9  8287                     end;
  8  8288                     begin
  9  8289                       boolean l22;
  9  8290     \f

  9  8290     message procedure operatør side 15 - 810521/cl;
  9  8291     
  9  8291                       <* 5 springdefinition *>
  9  8292                       l22:= false;
  9  8293                       if sep=',' then
  9  8294                       disable begin
 10  8295                         setposition(z_op(nr),0,0);
 10  8296                         cursor(z_op(nr),22,1);
 10  8297                         write(z_op(nr),"esc" add 128,1,<:ÆK:>,">",1);
 10  8298                         l22:= true; pos:= 1;
 10  8299                         while læstegn(d.op_ref.data,pos,i)<>0 do
 10  8300                           outchar(z_op(nr),i);
 10  8301                       end;
  9  8302     
  9  8302                       tofrom(d.op_ref.data,ia,indeks*2);
  9  8303     <*V*>             wait_ch(cs_op_fil(nr),vt_op,true,-1<*timeout*>);
  9  8304                       start_operation(vt_op,200+nr,cs_operatør(nr),
  9  8305                                       101<*opret fil*>);
  9  8306                       d.vt_op.data(1):=128;<*postantal*>
  9  8307                       d.vt_op.data(2):=2;  <*postlængde*>
  9  8308                       d.vt_op.data(3):=1;  <*segmentantal*>
  9  8309                       d.vt_op.data(4):=
  9  8310                               2 shift 10;  <*spool fil*>
  9  8311                       signal_ch(cs_opret_fil,vt_op,op_optype);
  9  8312                       pos:=vt_op;<*variabel lånes*>
  9  8313     <*V*>             wait_ch(cs_operatør(nr),vt_op,op_optype,-1<*timeout*>);
  9  8314     <*+4*>            if vt_op<>pos then
  9  8315                         fejlreaktion(11<*fremmed post*>,vt_op,<:springdef:>,0);
  9  8316                       if d.vt_op.data(9)<>0 then
  9  8317                         fejlreaktion(13<*opret-fil*>,d.vt_op.data(9),
  9  8318                           <:op kommando(springdefinition):>,0);
  9  8319     <*-4*>
  9  8320                       iaf:=0;
  9  8321                       for i:=1 step 1 until indeks-2 do
  9  8322                       begin
 10  8323                         disable k:=modif_fil(d.vt_op.data(4),i,j);
 10  8324                         if k<>0 then
 10  8325                           fejlreaktion(7<*modif-fil*>,k,
 10  8326                             <:op kommando(spring-def):>,0);
 10  8327                         fil(j).iaf(1):=d.op_ref.data(i+2);
 10  8328                       end;
  9  8329     \f

  9  8329     message procedure operatør side 15a - 820301/cl;
  9  8330     
  9  8330                       while sep = ',' do
  9  8331                       begin
 10  8332                         setposition(z_op(nr),0,0);
 10  8333                         cursor(z_op(nr),23,1);
 10  8334                         write(z_op(nr),"esc" add 128,1,<:ÆK:>,<:+>:>);
 10  8335                         setposition(z_op(nr),0,0);
 10  8336                         wait(bs_fortsæt_adgang);
 10  8337                         pos:= 1; j:= 0;
 10  8338                         while læs_store(z_op(nr),i) < 8 do
 10  8339                         begin
 11  8340                           skrivtegn(fortsæt,pos,i);
 11  8341                           if i = '?' or i = 'esc' then j:= 1; <* skip kommando *>
 11  8342                         end;
 10  8343                         skrivtegn(fortsæt,pos,'em');
 10  8344                         afsluttext(fortsæt,pos);
 10  8345                         sluttegn:= i;
 10  8346                         if j<>0 then
 10  8347                         begin
 11  8348                           setposition(z_op(nr),0,0);
 11  8349                           cursor(z_op(nr),24,1);
 11  8350                           skriv_kvittering(z_op(nr),opref,-1,53);<*annulleret*>
 11  8351                           cursor(z_op(nr),1,1);
 11  8352                           goto sp_ann;
 11  8353                         end;
 10  8354     \f

 10  8354     message procedure operatør side 16 - 810521/cl;
 10  8355     
 10  8355                         disable begin
 11  8356                         integer array værdi(1:4);
 11  8357                         integer a_pos,res;
 11  8358                           pos:= 0;
 11  8359                           repeat
 11  8360                             apos:= pos;
 11  8361                             læs_paramsæt(fortsæt,a_pos,0,værdi,sep,res);
 11  8362                             if res >= 0 then
 11  8363                             begin
 12  8364                               if res=0 and (sep=',' or indeks>2) then <*ok*>
 12  8365                               else if res=0 then res:= -25 <*parameter mangler*>
 12  8366                               else if res=10 and (værdi(1)<1 or værdi(1)>99) then
 12  8367                                   res:= -44 <*intervalstørrelse ulovlig*>
 12  8368                               else if res=10 and (værdi(2)<1 or værdi(2)>99) then
 12  8369                                   res:= -6  <*løbnr ulovligt*>
 12  8370                               else if res=10 then
 12  8371                               begin
 13  8372                                 k:=modiffil(d.vt_op.data(4),indeks-1,j);
 13  8373                                 if k<>0 then fejlreaktion(7<*modiffil*>,k,
 13  8374                                    <:op kommando(spring-def):>,0);
 13  8375                                 iaf:= 0;
 13  8376                                 fil(j).iaf(1):= værdi(1) shift 12 + værdi(2);
 13  8377                                 indeks:= indeks+1;
 13  8378                                 if sep = ',' then res:= 0;
 13  8379                               end
 12  8380                               else res:= -27; <*parametertype*>
 12  8381                             end;
 11  8382                             if res>0 then pos:= a_pos;
 11  8383                           until sep<>'sp' or res<=0;
 11  8384     
 11  8384                           if res<0 then
 11  8385                           begin
 12  8386                             d.op_ref.resultat:= -res;
 12  8387                             i:=1; j:= 1;
 12  8388                             hægt_tekst(d.op_ref.data,i,fortsæt,j);
 12  8389                             afsluttext(d.op_ref.data,i);
 12  8390                           end;
 11  8391                         end;
 10  8392     \f

 10  8392     message procedure operatør side 17 - 810521/cl;
 10  8393     
 10  8393                         if d.op_ref.resultat > 3 then
 10  8394                         begin
 11  8395                           setposition(z_op(nr),0,0);
 11  8396                           if l22 then
 11  8397                           begin
 12  8398                             cursor(z_op(nr),22,1); l22:= false;
 12  8399                             write(z_op(nr),"-",80);
 12  8400                           end;
 11  8401                           cursor(z_op(nr),24,1);
 11  8402                           skriv_kvittering(z_op(nr),op_ref,pos,d.opref.resultat);
 11  8403                           goto sp_ann;
 11  8404                         end;
 10  8405                         if sep=',' then
 10  8406                         begin
 11  8407                           setposition(z_op(nr),0,0);
 11  8408                           cursor(z_op(nr),22,1);
 11  8409                           write(z_op(nr),"esc" add 128,1,<:ÆK:>,<:+>:>);
 11  8410                           pos:= 1; l22:= true;
 11  8411                           while læstegn(fortsæt,pos,i)<>0 do
 11  8412                             outchar(z_op(nr),i);
 11  8413                         end;
 10  8414                         signalbin(bs_fortsæt_adgang);
 10  8415                       end while sep = ',';
  9  8416                       d.vt_op.data(1):= indeks-2;
  9  8417                       k:= sætfildim(d.vt_op.data);
  9  8418                       if k<>0 then fejlreaktion(9,k,<:op kommando(spring-def):>,0);
  9  8419                       d.op_ref.data(3):= d.vt_op.data(4); <*filref*>
  9  8420                       signalch(cs_op_fil(nr),vt_op,op_optype or gen_optype);
  9  8421                       d.op_ref.retur:=cs_operatør(nr);
  9  8422                       pos:=op_ref;
  9  8423                       signal_ch(cs_vt,op_ref,gen_optype or op_optype);
  9  8424     <*V*>             wait_ch(cs_operatør(nr),op_ref,op_optype,-1<*timeout*>);
  9  8425     <*+4*>            if pos<>op_ref then
  9  8426                         fejlreaktion(11<*fremmed post*>,op_ref,
  9  8427                           <:op kommando(springdef retur fra vt):>,0);
  9  8428     <*-4*>
  9  8429     \f

  9  8429     message procedure operatør side 18 - 810521/cl;
  9  8430     
  9  8430     <*V*>             setposition(z_op(nr),0,0);
  9  8431                       if l22 then
  9  8432                       begin
 10  8433                         cursor(z_op(nr),22,1);
 10  8434                         write(z_op(nr),"-",80);
 10  8435                       end;
  9  8436                       cursor(z_op(nr),24,1);
  9  8437                       skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat);
  9  8438     
  9  8438                       if false then
  9  8439                       begin
 10  8440               sp_ann:   signalch(cs_slet_fil,vt_op,op_optype);
 10  8441                         waitch(cs_operatør(nr),vt_op,op_optype,-1);
 10  8442                         signalch(cs_op_fil(nr),vt_op,op_optype or vt_optype);
 10  8443                         signalbin(bs_fortsæt_adgang);
 10  8444                       end;
  9  8445                         
  9  8445                     end;
  8  8446     
  8  8446                     begin
  9  8447     \f

  9  8447     message procedure operatør side 19 - 810522/cl;
  9  8448     
  9  8448                       <* 6 spring  (igangsæt)
  9  8449                            spring,annuler
  9  8450                            spring,reserve     *>
  9  8451     
  9  8451                       tofrom(d.op_ref.data,ia,6);
  9  8452                       d.op_ref.retur:=cs_operatør(nr);
  9  8453                       indeks:=op_ref;
  9  8454                       signal_ch(cs_vt,op_ref,gen_optype or op_optype);
  9  8455     <*V*>             wait_ch(cs_operatør(nr),
  9  8456                               op_ref,
  9  8457                               op_optype,
  9  8458                               -1<*timeout*>);
  9  8459     <*+2*>            if testbit10 and overvåget then
  9  8460                       disable begin
 10  8461                         skriv_operatør(out,0);
 10  8462                         write(out,"nl",1,<:op operation retur fra vt:>);
 10  8463                         skriv_op(out,op_ref);
 10  8464                       end;
  9  8465     <*-2*>
  9  8466     <*+4*>            if indeks<>op_ref then
  9  8467                         fejlreaktion(11<*fremmed post*>,op_ref,
  9  8468                                      <:op kommando(spring):>,0);
  9  8469     <*-4*>
  9  8470     
  9  8470     <*V*>             setposition(z_op(nr),0,0);
  9  8471                       cursor(z_op(nr),24,1);
  9  8472                       skriv_kvittering(z_op(nr),if (d.op_ref.resultat=11 or
  9  8473                           d.op_ref.resultat=12) and kode=34 <*SP,R*> then
  9  8474                           d.op_ref.data(4) else op_ref,-1,d.op_ref.resultat);
  9  8475                     end;
  8  8476     
  8  8476                     begin
  9  8477     \f

  9  8477     message procedure operatør side 20 - 810525/cl;
  9  8478     
  9  8478                       <* 7 spring(-oversigts-)rapport *>
  9  8479     
  9  8479                       d.op_ref.retur:=cs_operatør(nr);
  9  8480                       tofrom(d.op_ref.data,ia,4);
  9  8481                       indeks:=op_ref;
  9  8482                       signal_ch(cs_vt,op_ref,gen_optype or op_optype);
  9  8483     <*V*>             wait_ch(cs_operatør(nr),op_ref,op_optype,-1<*timeout*>);
  9  8484     <*+2*>            disable if testbit10 and overvåget then
  9  8485                       begin
 10  8486                         write(out,"nl",1,<:operatør operation retur fra vt:>);
 10  8487                         skriv_op(out,op_ref);
 10  8488                       end;
  9  8489     <*-2*>
  9  8490     
  9  8490     <*+4*>            if op_ref<>indeks then
  9  8491                         fejlreaktion(11<*fremmed post*>,op_ref,
  9  8492                           <:op kommando(spring-rapport):>,0);
  9  8493     <*-4*>
  9  8494     
  9  8494     <*V*>             setposition(z_op(nr),0,0);
  9  8495                       if d.op_ref.resultat<>3 then
  9  8496                       begin
 10  8497                         cursor(z_op(nr),24,1);
 10  8498                         skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat);
 10  8499                       end
  9  8500                       else
  9  8501                       begin
 10  8502                         boolean p_skrevet;
 10  8503                         integer bogst,løb;
 10  8504     
 10  8504                         skærmmåde:= 1;
 10  8505     
 10  8505                         if kode = 32 then <* spring,vis *>
 10  8506                         begin
 11  8507                           ll:= d.op_ref.data(1) shift (-5) extract 10;
 11  8508                           bogst:= d.op_ref.data(1) extract 5;
 11  8509                           if bogst<>0 then bogst:= bogst + 'A' - 1;
 11  8510     <*V*>                 write(z_op(nr),"esc" add 128,1,<:ÆH:>,
 11  8511                             "esc" add 128,1,<:ÆJ:>,"sp",10,"*",5,"sp",5,
 11  8512                             <:spring: :>,
 11  8513                             <<d>,ll,false add bogst,(bogst<>0) extract 1,
 11  8514                             <:.:>,string (extend d.op_ref.data(2) shift 24));
 11  8515                           raf:= data+8;
 11  8516                           if d.op_ref.raf(1)<>0.0 then
 11  8517                             write(z_op(nr),<:, startet :>,<<zddddd>,
 11  8518                               round systime(4,d.op_ref.raf(1),r),<:.:>,round r)
 11  8519                           else write(z_op(nr),<:, ikke startet:>);
 11  8520                           write(z_op(nr),"sp",5,"*",5,"nl",2);
 11  8521     \f

 11  8521     message procedure operatør side 21 - 810522/cl;
 11  8522     
 11  8522                           p_skrevet:= false;
 11  8523                           for pos:=1 step 1 until d.op_ref.data(3) do
 11  8524                           begin
 12  8525                             disable i:=læsfil(d.op_ref.data(4),pos,j);
 12  8526                             if i<>0 then
 12  8527                               fejlreaktion(5<*læsfil*>,i,
 12  8528                                 <:op kommando(spring,vis):>,0);
 12  8529                             iaf:=0;
 12  8530                             i:= fil(j).iaf(1);
 12  8531                             if i < 0 and -, p_skrevet then
 12  8532                             begin
 13  8533                               outchar(z_op(nr),'('); p_skrevet:= true;
 13  8534                             end;
 12  8535                             if i > 0 and p_skrevet then
 12  8536                             begin
 13  8537                               outchar(z_op(nr),')'); p_skrevet:= false;
 13  8538                             end;
 12  8539                             if pos mod 2 = 0 then
 12  8540                               write(z_op(nr),<< dd>,abs i,<:.:>)
 12  8541                             else
 12  8542                               write(z_op(nr),true,3,<<d>,abs i);
 12  8543                             if pos mod 21 = 0 then outchar(z_op(nr),'nl');
 12  8544                           end;
 11  8545                           write(z_op(nr),"*",1);
 11  8546     \f

 11  8546     message procedure operatør side 22 - 810522/cl;
 11  8547     
 11  8547                         end
 10  8548                         else if kode=33 then <* spring,oversigt *>
 10  8549                         begin
 11  8550                           write(z_op(nr),"esc" add 128,1,<:ÆH:>,
 11  8551                             "esc" add 128,1,<:ÆJ:>,"sp",10,"*",5,"sp",5,
 11  8552                             <:spring oversigt:>,"sp",5,"*",5,"nl",2);
 11  8553     
 11  8553                           for pos:=1 step 1 until d.op_ref.data(1) do
 11  8554                           begin
 12  8555                             disable i:=læsfil(d.op_ref.data(2),pos,j);
 12  8556                             if i<>0 then 
 12  8557                               fejlreaktion(5<*læsfil*>,i,
 12  8558                                 <:op kommando(spring-oversigt):>,0);
 12  8559                             iaf:=0;
 12  8560                             ll:=fil(j).iaf(1) shift (-5) extract 10;
 12  8561                             bogst:=fil(j).iaf(1) extract 5;
 12  8562                             if bogst<>0 then bogst:=bogst + 'A' - 1;
 12  8563                             write(z_op(nr),"sp",(bogst=0) extract 1 + 1,<<ddd>,ll,
 12  8564                               false add bogst,(bogst<>0) extract 1,<:.:>,true,4,
 12  8565                               string (extend fil(j).iaf(2) shift 24));
 12  8566                             if fil(j,2)<>0.0 then
 12  8567                               write(z_op(nr),<:startet :>,<<zddddd>,
 12  8568                                 round systime(4,fil(j,2),r),<:.:>,round r);
 12  8569                             outchar(z_op(nr),'nl');
 12  8570                           end;
 11  8571                           write(z_op(nr),"*",1);
 11  8572                         end;
 10  8573                         <* slet fil *>
 10  8574                         d.op_ref.opkode:= 104;
 10  8575                         if kode=33 then d.op_ref.data(4):= d.op_ref.data(2);
 10  8576                         signalch(cs_slet_fil,op_ref,gen_optype or op_optype);
 10  8577                         waitch(cs_operatør(nr),op_ref,op_optype or gen_optype,-1);
 10  8578                       end; <* resultat=3 *>
  9  8579     
  9  8579                     end;
  8  8580     
  8  8580                     begin
  9  8581     \f

  9  8581     message procedure operatør side 23 - 940522/cl;
  9  8582     
  9  8582     
  9  8582                       <* 8 SLUT *>
  9  8583                       trapmode:= 1 shift 13;
  9  8584                       trap(-2);
  9  8585                     end;
  8  8586     
  8  8586                     begin
  9  8587                       <* 9 stopniveauer,definer *>
  9  8588                       integer fno;
  9  8589     
  9  8589                       for i:= 1 step 1 until 3 do
  9  8590                         operatør_stop(nr,i):= ia(i+1);
  9  8591                       i:= modif_fil(tf_stoptabel,nr,fno);
  9  8592                       if i<>0 then fejlreaktion(7,i,<:stoptabel:>,0);
  9  8593                       iaf:=0;
  9  8594                       for i:= 0,1,2,3 do
  9  8595                         fil(fno).iaf(i+1):= operatør_stop(nr,i);
  9  8596                       setposition(fil(fno),0,0);
  9  8597                       setposition(z_op(nr),0,0);
  9  8598                       cursor(z_op(nr),24,1);
  9  8599                       skriv_kvittering(z_op(nr),0,-1,3);
  9  8600                     end;
  8  8601     
  8  8601                     begin
  9  8602     \f

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

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

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

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

  5  8980     message procedure operatør side x+3 - 830310/hko;
  5  8981     
  5  8981               <* 5: samtale etableret *>
  5  8982     
  5  8982               res:= d.op_ref.resultat;
  5  8983               b_v:= d.op_ref.data(3) extract 4;
  5  8984               b_s:= d.op_ref.data(4);
  5  8985               signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  5  8986               if res = 3 and terminal_tab.ref(1) shift(-21) = 2 then
  5  8987               begin
  6  8988                 sætbit_i(terminal_tab.ref(1),21,1);
  6  8989                 sætbit_i(terminal_tab.ref(1),22,0);
  6  8990                 sætbit_i(terminal_tab.ref(1),2,0);
  6  8991                 sæt_hex_ciffer(terminal_tab.ref,3,b_v);
  6  8992                 terminal_tab.ref(2):= b_s;
  6  8993                 sæt_bit_i(terminal_tab.ref(1),2<* opt. *>,0);
  6  8994                 iaf:= (b_s extract 4 - 1)*kanal_beskr_længde;
  6  8995                 kanaltab.iaf.kanal_tilstand:= kanaltab.iaf.kanal_tilstand
  6  8996                   shift (-10) shift 10 + terminal_tab.ref(1) extract 10;
  6  8997     
  6  8997                 if læsbit_ia(operatørmaske,nr) and skærmmåde = 0 then
  6  8998                 begin
  7  8999     <*V*>         setposition(z_op(nr),0,0);
  7  9000                   skriv_skærm_b_v_s(nr);
  7  9001     <*V*>         setposition(z_op(nr),0,0);
  7  9002                 end;
  6  9003               end
  5  9004               else
  5  9005               if terminal_tab.ref(1) shift(-21) = 2 then
  5  9006               begin
  6  9007                 sætbit_i(terminal_tab.ref(1),22,0);
  6  9008                 sætbit_i(terminal_tab.ref(1),2,0);
  6  9009                 sæt_hex_ciffer(terminal_tab.ref,3,b_v);
  6  9010                 terminal_tab.ref(2):= 0;
  6  9011                 if læsbit_ia(operatørmaske,nr) and skærmmåde = 0 then
  6  9012                 begin
  7  9013     <*V*>         setposition(z_op(nr),0,0);
  7  9014                   cursor(z_op(nr),21,17);
  7  9015                   write(z_op(nr),<:EJ FORB:>);
  7  9016     <*V*>         setposition(z_op(nr),0,0);
  7  9017                 end;
  6  9018               end
  5  9019               else fejlreaktion(3<*prg.fejl*>,terminal_tab.ref(1) shift(-21),
  5  9020                      <:terminal tilstand:>,1);
  5  9021             end;
  4  9022     
  4  9022             begin
  5  9023     \f

  5  9023     message procedure operatør side x+4 - 810602/hko;
  5  9024     
  5  9024               <* 6: radiokanal ekskluderet *>
  5  9025     
  5  9025               læs_hex_ciffer(terminal_tab.ref,3,b_v);
  5  9026               pos:= d.op_ref.data(1);
  5  9027               signalch(d.op_ref.retur,op_ref,d.op_ref.optype);
  5  9028               indeks:= terminal_tab.ref(2);
  5  9029               b_s:= if indeks shift (-22) = 3 and indeks extract 22 = pos
  5  9030                     then indeks extract 4 else 0;
  5  9031               if b_v = pos then
  5  9032                 sæt_hex_ciffer(terminal_tab.ref,3,0);
  5  9033               if b_s = pos then
  5  9034               begin
  6  9035                 terminal_tab.ref(2):= 0;
  6  9036                 sætbit_i(terminal_tab.ref(1),21,0);
  6  9037                 sætbit_i(terminal_tab.ref(1),22,0);
  6  9038                 sætbit_i(terminal_tab.ref(1),2,0);
  6  9039               end;
  5  9040               if skærmmåde=0 then
  5  9041               begin
  6  9042                 if b_v = pos or b_s = pos then
  6  9043     <*V*>         skriv_skærm_b_v_s(nr);
  6  9044     <*V*>       skriv_skærm_kanal(nr,pos);
  6  9045                 cursor(z_op(nr),1,1);
  6  9046                 setposition(z_op(nr),0,0);
  6  9047               end;
  5  9048             end;
  4  9049     
  4  9049             begin
  5  9050     \f

  5  9050     message procedure operatør side x+5 - 950118/cl;
  5  9051     
  5  9051               <* 7: operatørmeddelelse *>
  5  9052               integer afs, kl, i;
  5  9053               real dato, t;
  5  9054     
  5  9054               cursor(z_op(nr),24,1);
  5  9055               write(z_op(nr),"esc" add 128,1,<:ÆK:>);
  5  9056               cursor(z_op(nr),23,1);
  5  9057               write(z_op(nr),"esc" add 128,1,<:ÆK:>);
  5  9058     
  5  9058               afs:= d.opref.data.op_spool_kilde;
  5  9059               dato:= systime(4,d.opref.data.op_spool_tid,t);
  5  9060               kl:= round t;
  5  9061               write(z_op(nr),<:! fra op:>,<<d>,afs,"sp",1,
  5  9062                 if afs=0 then <:SYSOP:> else string bpl_navn(afs));
  5  9063               i:= replacechar(1,'.');
  5  9064               disable write(z_op(nr),"sp",1,<<zd_dd_dd>,kl,"nl",1);
  5  9065               replacechar(1,i);
  5  9066               write(z_op(nr),d.opref.data.op_spool_text);
  5  9067     
  5  9067               if terminal_tab.ref.terminal_tilstand shift (-21) <> 3 then
  5  9068               begin
  6  9069                 if opk_alarm.tab.alarm_lgd > 0 and
  6  9070                    opk_alarm.tab.alarm_tilst < 1 and
  6  9071                    opk_alarm.tab.alarm_kmdo < 1
  6  9072                 then
  6  9073                 begin
  7  9074                   opk_alarm.tab.alarm_kmdo := 1;
  7  9075                   signalbin(bs_opk_alarm);
  7  9076                 end
  6  9077                 else
  6  9078                 if opk_alarm.tab.alarm_lgd = 0 then
  6  9079                   write(z_op(nr),"bel",1,"del",8,"bel",1,"del",8,"bel",1);
  6  9080               end;
  5  9081     
  5  9081               setposition(z_op(nr),0,0);
  5  9082               
  5  9082               signalch(d.opref.retur,opref,d.opref.optype);
  5  9083             end;
  4  9084     
  4  9084             begin
  5  9085     
  5  9085     <*+4*>    fejl_reaktion(3<*programfejl *>,aktion,<:case aktion:>,2);
  5  9086     <*-4*>
  5  9087             end
  4  9088           end; <* case aktion+6 *>
  3  9089     
  3  9089          until false;
  3  9090       op_trap:
  3  9091         skriv_operatør(zbillede,1);
  3  9092       end operatør;
  2  9093      
  2  9093     \f

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

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

  2  9364     message procedure op_medd side 1;
  2  9365     
  2  9365     procedure op_medd;
  2  9366     begin
  3  9367       integer array field opref, ref;
  3  9368       integer næste_fulde, i;
  3  9369     
  3  9369       procedure skriv_op_medd(zud,omfang);
  3  9370         value                     omfang;
  3  9371         zone                  zud;
  3  9372         integer                   omfang;
  3  9373       begin
  4  9374         write(zud,"nl",1,<:+++ op-medd:>);
  4  9375         if omfang > 0 then
  4  9376         disable begin     
  5  9377           real t;
  5  9378     
  5  9378           trap(slut);
  5  9379           write(zud,"nl",1,
  5  9380             <:  opref:       :>,opref,"nl",1,
  5  9381             <:  næste-fulde: :>,næste_fulde,"nl",1,
  5  9382             <:  ref:         :>,ref,"nl",1,
  5  9383             <:  i:           :>,i,"nl",1,
  5  9384             <::>);
  5  9385           skriv_coru(zud,coru_no(294));
  5  9386     slut:
  5  9387         end;
  4  9388       end skriv_op_medd;
  3  9389         
  3  9389       trap(op_medd_trap);
  3  9390       næste_fulde:= 0;
  3  9391       stackclaim(400);
  3  9392       
  3  9392     <*+4*>if (testbit8 and overvåget) or testbit28 then
  3  9393             skriv_op_medd(out,0);
  3  9394     <*-4*>
  3  9395     
  3  9395       repeat
  3  9396     <*V*> wait(ss_op_spool_fulde);
  3  9397     <*V*> waitch(cs_op_medd,opref,true,-1);
  3  9398     
  3  9398         ref:= næste_fulde*op_spool_postlgd;
  3  9399         næste_fulde:= (næste_fulde+1) mod op_spool_postantal;
  3  9400     
  3  9400         startoperation(opref,curr_coruid,cs_op_medd,38);
  3  9401         d.opref.resultat:= 0;
  3  9402         tofrom(d.opref.data,op_spool_buf.ref,op_spool_postlgd);
  3  9403         signalch((if op_spool_buf.ref.op_spool_kilde = 0 then cs_op else cs_io),
  3  9404           opref,gen_optype);
  3  9405         signal(ss_op_spool_tomme);
  3  9406       until false;
  3  9407     
  3  9407     op_medd_trap:
  3  9408       disable skriv_op_medd(zbillede,1);
  3  9409     end op_medd;
  2  9410     \f

  2  9410     message procedure alarmur side 1;
  2  9411     
  2  9411     procedure alarmur;
  2  9412     begin
  3  9413       integer ventetid, nr;
  3  9414       integer array field opref, tab;
  3  9415       real nu;
  3  9416       
  3  9416       procedure skriv_alarmur(zud,omfang);
  3  9417         value                     omfang;
  3  9418         zone                  zud;
  3  9419         integer                   omfang;
  3  9420       begin
  4  9421         write(zud,"nl",1,<:+++ alarmur:>);
  4  9422         if omfang > 0 then
  4  9423         disable begin     
  5  9424           real t;
  5  9425     
  5  9425           trap(slut);
  5  9426           write(zud,"nl",1,
  5  9427             <:  ventetid:  :>,ventetid,"nl",1,
  5  9428             <:  nr:        :>,nr,"nl",1,
  5  9429             <:  opref:     :>,opref,"nl",1,
  5  9430             <:  tab:       :>,tab,"nl",1,
  5  9431             <:  nu:       :>,<< zddddd>,systime(4,nu,t),t,"nl",1,
  5  9432             <::>);
  5  9433           skriv_coru(zud,coru_no(295));
  5  9434     slut:
  5  9435         end;
  4  9436       end skriv_alarmur;
  3  9437         
  3  9437       trap(alarmur_trap);
  3  9438       stackclaim(400);
  3  9439     
  3  9439       systime(1,0.0,nu);
  3  9440       ventetid:= -1;
  3  9441       repeat
  3  9442         waitch(cs_opk_alarm_ur,opref,op_optype,ventetid);
  3  9443         if opref > 0 then
  3  9444           signalch(d.opref.retur,opref,op_optype);
  3  9445     
  3  9445         ventetid:= -1;
  3  9446         systime(1,0.0,nu);
  3  9447         for nr:= 1 step 1 until max_antal_operatører do
  3  9448         begin
  4  9449           tab:= (nr-1)*opk_alarm_tab_lgd;
  4  9450           if opk_alarm.tab.alarm_tilst > 0 and
  4  9451              opk_alarm.tab.alarm_lgd >= 0 then
  4  9452           begin
  5  9453             if (nu - opk_alarm.tab.alarm_start) >= opk_alarm.tab.alarm_lgd then
  5  9454             begin
  6  9455               opk_alarm.tab.alarm_kmdo:= 3;
  6  9456               signalbin(bs_opk_alarm);
  6  9457               if ventetid > 2 or ventetid=(-1) then ventetid:= 2;
  6  9458             end
  5  9459             else
  5  9460             if (nu - opk_alarm.tab.alarm_start) < ventetid or ventetid = (-1) then
  5  9461               ventetid:= (nu - opk_alarm.tab.alarm_start);
  5  9462           end;
  4  9463         end;
  3  9464         if ventetid=0 then ventetid:= 1;
  3  9465       until false;
  3  9466     
  3  9466     alarmur_trap:
  3  9467       disable skriv_alarmur(zbillede,1);
  3  9468     end alarmur;
  2  9469     \f

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

  2  9549     message procedure tvswitch_input side 1 - 940810/cl;
  2  9550     
  2  9550       procedure tv_switch_input;
  2  9551       begin
  3  9552         integer array field opref;
  3  9553         integer tt,ant;
  3  9554         boolean ok;
  3  9555         integer array ia(1:128);
  3  9556     
  3  9556         procedure skriv_tvswitch_input(zud,omfang);
  3  9557           value                            omfang;
  3  9558           zone                         zud;
  3  9559           integer                          omfang;
  3  9560         begin
  4  9561           write(zud,"nl",1,<:+++ tvswitch-input:>);
  4  9562           if omfang>0 then
  4  9563           disable begin
  5  9564             real array field raf;
  5  9565             trap(slut);
  5  9566             raf:=0;
  5  9567             write(zud,"nl",1,
  5  9568               <:  opref:  :>,opref,"nl",1,
  5  9569               <:  ok:     :>,(if ok then <:TRUE:> else <:FALSE:>),"nl",1,
  5  9570               <:  ant:    :>,ant,"nl",1,
  5  9571               <:  tt:     :>,tt,"nl",1,
  5  9572               <::>);
  5  9573             write(zud,"nl",1,<:ia: :>);
  5  9574             skrivhele(zud,ia.raf,256,2);
  5  9575             skriv_coru(zud,coru_no(297));
  5  9576     slut:
  5  9577           end;
  4  9578         end skriv_tvswitch_input;
  3  9579     \f

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

  3  9656         trap(tvswitch_input_trap);
  3  9657         stackclaim(400);
  3  9658         for ant:= 1 step 1 until 128 do ia(ant):= 0;
  3  9659     
  3  9659     <*+2*>if (testbit8 and overvåget) or testbit28 then
  3  9660             skriv_tvswitch_input(out,0);
  3  9661     <*-2*>
  3  9662     
  3  9662         repeat
  3  9663           ok:= læs_tlgr;
  3  9664           if ok then
  3  9665           begin
  4  9666     <*V*>   waitch(cs_tvswitch_input,opref,op_optype,-1);
  4  9667             start_operation(opref,297,cs_tvswitch_input,0);
  4  9668             d.opref.resultat:= tt shift 12 + ant;
  4  9669             tofrom(d.opref.data,ia,ant*2);
  4  9670             signalch(cs_talevejsswitch,opref,op_optype);
  4  9671           end;
  3  9672         until false;
  3  9673     
  3  9673     tvswitch_input_trap:
  3  9674     
  3  9674         disable skriv_tvswitch_input(zbillede,1);
  3  9675     
  3  9675       end tvswitch_input;
  2  9676     \f

  2  9676     message procedure tv_switch_adm side 1 - 940502/cl;
  2  9677     
  2  9677       procedure tv_switch_adm;
  2  9678       begin
  3  9679         integer array field opref;
  3  9680         integer rc;
  3  9681     
  3  9681         procedure skriv_tv_switch_adm(zud,omfang);
  3  9682           value                           omfang;
  3  9683           zone                        zud;
  3  9684           integer                         omfang;
  3  9685         begin
  4  9686           write(zud,"nl",1,<:+++ tv-switch-adm:>);
  4  9687           if omfang>0 then
  4  9688           disable begin
  5  9689             trap(slut);
  5  9690             write(zud,"nl",1,
  5  9691               <:  opref:  :>,opref,"nl",1,
  5  9692               <:  rc:     :>,rc,"nl",1,
  5  9693               <::>);
  5  9694             skriv_coru(zud,coru_no(298));
  5  9695     slut:
  5  9696           end;
  4  9697         end skriv_tv_switch_adm;
  3  9698     
  3  9698         trap(tv_switch_adm_trap);
  3  9699         stackclaim(400);
  3  9700     
  3  9700     <*+2*> if (testbit8 and overvåget) or testbit28 then
  3  9701              disable skriv_tv_switch_adm(out,0);
  3  9702     <*-2*>
  3  9703     
  3  9703     
  3  9703     
  3  9703     <* !!!!!!! PASSIVER KORUTINEN - cs_tvswitch_adm SIGNALERES ALDRIG !!!!!!! 
  3  9704         waitch(cs_tvswitch_adm,opref,op_optype,-1);
  3  9705     *>
  3  9706     
  3  9706         repeat
  3  9707           waitch(cs_tvswitch_adgang,opref,op_optype,-1);
  3  9708           start_operation(opref,298,cs_tvswitch_adm,'R' shift 12 + 44);
  3  9709           rc:= 0;
  3  9710           repeat
  3  9711             signalch(cs_talevejsswitch,opref,op_optype);
  3  9712     <*V*>   waitch(cs_tvswitch_adm,opref,op_optype,-1);
  3  9713             rc:= rc+1;
  3  9714           until rc=3 or d.opref.resultat=3;
  3  9715     
  3  9715           signalch(cs_tvswitch_adgang,opref,op_optype);
  3  9716     
  3  9716     <*V*> delay(15*60);
  3  9717         until false;
  3  9718     tv_switch_adm_trap:
  3  9719         disable skriv_tv_switch_adm(zbillede,1);
  3  9720       end;
  2  9721     \f

  2  9721     message procedure talevejsswitch side 1 -940426/cl;
  2  9722     
  2  9722       procedure talevejsswitch;
  2  9723       begin
  3  9724         integer tt, ant, ventetid;
  3  9725         integer array field opref, gemt_op, tab;
  3  9726         boolean ok;
  3  9727         integer array ia(1:128);
  3  9728     
  3  9728         procedure skriv_talevejsswitch(zud,omfang);
  3  9729           value                            omfang;
  3  9730           zone                         zud;
  3  9731           integer                          omfang;
  3  9732         begin
  4  9733           write(zud,"nl",1,<:+++ talevejsswitch:>);
  4  9734           if omfang>0 then
  4  9735           disable begin
  5  9736             real array field raf;
  5  9737             trap(slut);
  5  9738             raf:= 0;
  5  9739             write(zud,"nl",1,
  5  9740               <:  tt:      :>,tt,"nl",1,
  5  9741               <:  ant:     :>,ant,"nl",1,
  5  9742               <:  ventetid: :>,ventetid,"nl",1,
  5  9743               <:  opref:    :>,opref,"nl",1,
  5  9744               <:  gemt-op:  :>,gemt_op,"nl",1,
  5  9745               <:  tab:      :>,tab,"nl",1,
  5  9746               <:  ok:       :>,(if ok then <:TRUE:> else <:FALSE:>),"nl",1,
  5  9747               <::>);
  5  9748             write(zud,"nl",1,<:ia: :>);
  5  9749             skriv_hele(zud,ia.raf,256,2);
  5  9750             skriv_coru(zud,coru_no(299));
  5  9751     slut:
  5  9752           end;
  4  9753         end skriv_talevejsswitch;
  3  9754     \f

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

  2  9964     message garage_erklæringer side 1 - 810415/hko;
  2  9965     
  2  9965       zone array z_gar(max_antal_garageterminaler,16,1,gar_fejl);
  2  9966     
  2  9966       procedure gar_fejl(z,s,b);
  2  9967         integer            s,b;
  2  9968         zone             z;
  2  9969       begin
  3  9970         disable begin
  4  9971           integer array iz(1:20);
  4  9972           integer i,j,k;
  4  9973           integer array field iaf;
  4  9974           real array field raf;
  4  9975     
  4  9975           getzone6(z,iz);
  4  9976           iaf:=raf:=2;
  4  9977           getnumber(iz.raf,7,j);
  4  9978     
  4  9978           iaf:=(max_antal_operatører+j)*terminal_beskr_længde;
  4  9979           k:=1;
  4  9980     
  4  9980           j:= terminal_tab.iaf.terminal_tilstand;
  4  9981           if j shift(-21) < 6 and s <> (1 shift 21 +2) then
  4  9982             fejlreaktion(17<*ydre enhed status*>,s,string iz.raf(increase(k)),
  4  9983                          1 shift 12 <*binært*> +1 <*fortsæt*>);
  4  9984           if s <> (1 shift 21 +2) then
  4  9985             terminal_tab.iaf.terminal_tilstand:= 6 shift 21
  4  9986               + terminal_tab.iaf.terminal_tilstand extract 21;
  4  9987           if terminal_tab.iaf.terminal_tilstand shift(-21)<>0 then
  4  9988           begin
  5  9989             z(1):=real <:<'?'><'em'>:>;
  5  9990             b:=2;
  5  9991           end;
  4  9992         end; <*disable*>
  3  9993       end gar_fejl;
  2  9994     
  2  9994       integer cs_gar;
  2  9995       integer array cs_garage(1:max_antal_garageterminaler);
  2  9996     \f

  2  9996     message procedure h_garage side 1 - 810520/hko;
  2  9997     
  2  9997       <* hovedmodulkorutine for garageterminaler *>
  2  9998       procedure h_garage;
  2  9999       begin
  3 10000         integer array field op_ref;
  3 10001         integer k,dest_sem;
  3 10002         procedure skriv_hgarage(zud,omfang);
  3 10003           value                     omfang;
  3 10004           zone                  zud;
  3 10005           integer                   omfang;
  3 10006           begin integer i;
  4 10007     
  4 10007             i:=write(zud,"nl",1,<:+++ hovedmodul garage:>);
  4 10008             write(zud,"sp",26-i);
  4 10009             if omfang>0 then
  4 10010             disable begin
  5 10011               integer x;
  5 10012               trap(slut);
  5 10013               write(zud,"nl",1,
  5 10014                 <:  op_ref:    :>,op_ref,"nl",1,
  5 10015                 <:  k:         :>,k,"nl",1,
  5 10016                 <:  dest_sem:  :>,dest_sem,"nl",1,
  5 10017                 <::>);
  5 10018               skriv_coru(zud,coru_no(300));
  5 10019     slut:
  5 10020             end;
  4 10021          end skriv_hgarage;
  3 10022     
  3 10022       trap(hgar_trap);
  3 10023       stack_claim(if cm_test then 198 else 146);
  3 10024     
  3 10024     <*+2*>
  3 10025       if testbit16 and overvåget  or testbit28 then
  3 10026         skriv_hgarage(out,0);
  3 10027     <*-2*>
  3 10028     \f

  3 10028     message procedure h_garage side 2 - 811105/hko;
  3 10029     
  3 10029       repeat
  3 10030         wait_ch(cs_gar,op_ref,true,-1);
  3 10031     <*+4*>
  3 10032         if (d.op_ref.optype and (gar_optype or gen_optype)) extract 12 =0
  3 10033         then fejlreaktion(12<*operationstype*>,op_ref,<:garage:>,1);
  3 10034     <*-4*>
  3 10035     
  3 10035         k:=d.op_ref.opkode extract 12;
  3 10036         dest_sem:=
  3 10037           if k=0 then cs_garage(d.op_ref.kilde mod 100) else
  3 10038           if k=7 or k=8 then cs_garage(d.op_ref.data(1))
  3 10039           else -1;
  3 10040     <*+4*>
  3 10041         if dest_sem=-1 then
  3 10042         begin
  4 10043           fejl_reaktion(2<*operationskode*>,k,<:hovedmodul garage:>,1);
  4 10044           signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  4 10045         end
  3 10046         else
  3 10047     <*-4*>
  3 10048         if k=7<*inkluder*> then
  3 10049         begin
  4 10050           iaf:=(max_antal_operatører+ d.op_ref.data(1))*terminal_beskr_længde;
  4 10051           if terminal_tab.iaf.terminal_tilstand shift(-21)=0 then
  4 10052           begin
  5 10053             d.op_ref.resultat:=3;
  5 10054             signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  5 10055             dest_sem:=-2;
  5 10056           end;
  4 10057         end
  3 10058         else
  3 10059         if k=8<*ekskluder*> then <*afbryd kommando v. timeout*>
  3 10060         begin
  4 10061           iaf:=(max_antal_operatører+d.op_ref.data(1))*terminal_beskr_længde;
  4 10062           terminal_tab.iaf.terminal_tilstand:= 7 shift 21
  4 10063             +terminal_tab.iaf.terminal_tilstand extract 21;
  4 10064         end;
  3 10065         if dest_sem>0 then
  3 10066           signal_ch(dest_sem,op_ref,d.op_ref.optype);
  3 10067       until false;
  3 10068     
  3 10068     hgar_trap:
  3 10069       disable skriv_hgarage(zbillede,1);
  3 10070       end h_garage;
  2 10071     \f

  2 10071     message procedure garage side 1 - 830310/cl;
  2 10072     
  2 10072       procedure garage(nr);
  2 10073         value          nr;
  2 10074         integer        nr;
  2 10075       begin
  3 10076         integer array field op_ref,ref;
  3 10077         integer i,kode,aktion,status,opgave,retur_sem,
  3 10078                 pos,indeks,sep,sluttegn,vogn,ll;
  3 10079     
  3 10079         procedure skriv_garage(zud,omfang);
  3 10080           value                    omfang;
  3 10081           zone                 zud;
  3 10082           integer                  omfang;
  3 10083           begin integer i;
  4 10084     
  4 10084             i:=write(zud,"nl",1,<:+++ garage nr::>,nr);
  4 10085             write(zud,"sp",26-i);
  4 10086             if omfang > 0 then
  4 10087             disable begin integer x;
  5 10088               trap(slut);
  5 10089               write(zud,"nl",1,
  5 10090                 <:  op-ref:    :>,op_ref,"nl",1,
  5 10091                 <:  kode:      :>,kode,"nl",1,
  5 10092                 <:  ref:       :>,ref,"nl",1,
  5 10093                 <:  i:         :>,i,"nl",1,
  5 10094                 <:  aktion:    :>,aktion,"nl",1,
  5 10095                 <:  retur-sem: :>,retur_sem,"nl",1,
  5 10096                 <:  vogn:      :>,vogn,"nl",1,
  5 10097                 <:  ll:        :>,ll,"nl",1,
  5 10098                 <:  status:    :>,status,"nl",1,
  5 10099                 <:  opgave:    :>,opgave,"nl",1,
  5 10100                 <:  pos:       :>,pos,"nl",1,
  5 10101                 <:  indeks:    :>,indeks,"nl",1,
  5 10102                 <:  sep:       :>,sep,"nl",1,
  5 10103                 <:  sluttegn:  :>,sluttegn,"nl",1,
  5 10104                 <::>);
  5 10105               skriv_coru(zud,coru_no(300+nr));
  5 10106     slut:
  5 10107             end;
  4 10108           end skriv_garage;
  3 10109     \f

  3 10109     message procedure garage side 2 - 830310/hko;
  3 10110     
  3 10110         trap(gar_trap);
  3 10111         stack_claim((if cm_test then 200 else 146)+24+48+80+75);
  3 10112     
  3 10112         ref:= (max_antal_operatører+nr)*terminal_beskr_længde;
  3 10113     
  3 10113     <*+2*>
  3 10114         if testbit16 and overvåget or testbit28 then
  3 10115           skriv_garage(out,0);
  3 10116     <*-2*>
  3 10117     
  3 10117     <* attention simulering
  3 10118     *>
  3 10119       if terminal_tab.ref.terminal_tilstand shift (-21) = 0 then
  3 10120       begin
  4 10121         wait_ch(cs_att_pulje,op_ref,true,-1);
  4 10122         start_operation(op_ref,300+nr,cs_garage(nr),0);
  4 10123         signal_ch(cs_garage(nr),op_ref,gen_optype);
  4 10124       end;
  3 10125     <*
  3 10126     *>
  3 10127     \f

  3 10127     message procedure garage side 3 - 830310/hko;
  3 10128     
  3 10128         repeat
  3 10129     
  3 10129     <*V*> wait_ch(cs_garage(nr),
  3 10130                   op_ref,
  3 10131                   true,
  3 10132                   -1<*timeout*>);
  3 10133     <*+2*>
  3 10134           if testbit17 and overvåget then
  3 10135           disable begin
  4 10136             write(out,"nl",1,<:operation fra cs:>,<<d>,cs_garage(nr),
  4 10137                              <: til garage :>,nr);
  4 10138             skriv_op(out,op_ref);
  4 10139           end;
  3 10140     <*-2*>
  3 10141     
  3 10141           kode:= d.op_ref.op_kode;
  3 10142           retur_sem:= d.op_ref.retur;
  3 10143           i:= terminal_tab.ref.terminal_tilstand;
  3 10144           status:= i shift(-21);
  3 10145           opgave:=
  3 10146             if kode=0 then 1 <* indlæs kommando *> else
  3 10147             if kode=7 then 2 <* inkluder        *> else
  3 10148             if kode=8 then 3 <* ekskluder       *> else
  3 10149             0; <* afvises *>
  3 10150     
  3 10150           aktion:= case status +1 of(
  3 10151           <* status         *> <* opgave:         0   1   2   3 *>
  3 10152           <* 0 klar         *>(case opgave+1 of(  0,  1, -4,  3)),
  3 10153           <* 1 -            *>(-1),<* ulovlig tilstand *>
  3 10154           <* 2 -            *>(-1),<* ulovlig tilstand *>
  3 10155           <* 3 stoppet      *>(case opgave+1 of(  0,  2,  2,  3)),
  3 10156           <* 4 noneksist    *>(-2),<* ulovligt garageterminalnr *>
  3 10157           <* 5 -            *>(-1),<* ulovlig tilstand *>
  3 10158           <* 6 stop v. fejl *>(case opgave+1 of(  0, -5,  2,  3)),
  3 10159           <* 7 ej knyttet   *>(case opgave+1 of(  0, -5,  2,  3)),
  3 10160                               -1);
  3 10161     \f

  3 10161     message procedure garage side 4 - 810424/hko;
  3 10162     
  3 10162           case aktion+6 of
  3 10163           begin
  4 10164             begin
  5 10165               <*-5: terminal optaget *>
  5 10166     
  5 10166               d.op_ref.resultat:= 16;
  5 10167               afslut_operation(op_ref,cs_att_pulje); <*telex*>
  5 10168             end;
  4 10169     
  4 10169             begin
  5 10170               <*-4: operation uden virkning *>
  5 10171     
  5 10171               afslut_operation(op_ref,-1);
  5 10172             end;
  4 10173     
  4 10173             begin
  5 10174               <*-3: ulovlig operationskode *>
  5 10175     
  5 10175               fejl_reaktion(2<*operationskode*>,kode,<:ulovlig:>,1);
  5 10176               afslut_operation(op_ref,-1);
  5 10177             end;
  4 10178     
  4 10178             begin
  5 10179               <*-2: ulovligt garageterminal_nr *>
  5 10180     
  5 10180               fejl_reaktion(3<*programfejl*>,nr,<: ikke eksisterende garage:>,1);
  5 10181               afslut_operation(op_ref,cs_att_pulje); <*telex*>
  5 10182             end;
  4 10183     
  4 10183             begin
  5 10184               <*-1: ulovlig operatørtilstand *>
  5 10185     
  5 10185               fejl_reaktion(3<*programfejl*>,status,<: ulovlig garage-status:>,1);
  5 10186               afslut_operation(op_ref,-1);
  5 10187             end;
  4 10188     
  4 10188             begin
  5 10189               <* 0: ikke implementeret *>
  5 10190     
  5 10190               fejl_reaktion(2<*operationskode*>,kode,<: ikke implementeret:>,1);
  5 10191               afslut_operation(op_ref,-1);
  5 10192             end;
  4 10193     
  4 10193             begin
  5 10194     \f

  5 10194     message procedure garage side 5 - 851001/cl;
  5 10195     
  5 10195               <* 1: indlæs kommando *>
  5 10196     
  5 10196     
  5 10196     <*V*>     læs_kommando(z_gar(nr),300+nr,op_ref,pos,indeks,sep,sluttegn);
  5 10197     
  5 10197               if d.op_ref.resultat > 3 then
  5 10198               begin
  6 10199     <*V*>       setposition(z_gar(nr),0,0);
  6 10200                 if sluttegn<>'nl' then outchar(z_gar(nr),'nl');
  6 10201                 skriv_kvittering(z_gar(nr),op_ref,pos,
  6 10202                                  d.op_ref.resultat);
  6 10203               end
  5 10204               else if d.op_ref.resultat>0 then
  5 10205               begin <*godkendt*>
  6 10206                 kode:=d.op_ref.opkode;
  6 10207                 i:= kode extract 12;
  6 10208                 j:= if kode=11 or kode=12 or kode=20 or kode=24 then 1
  6 10209                     else if kode=9 or kode=10 then 2
  6 10210                                          else 0;
  6 10211                 if j > 0 then
  6 10212                 begin
  7 10213                   case j of
  7 10214                   begin
  8 10215                     begin
  9 10216     \f

  9 10216     message procedure garage side 6 - 851001/cl;
  9 10217     
  9 10217                       <* 1 indsæt/udtag/flyt bus i vogntabel *>
  9 10218                       integer vogn,ll;
  9 10219                       integer array field vtop;
  9 10220     
  9 10220                       vogn:=ia(1);
  9 10221                       ll:=ia(2);
  9 10222     <*V*>             wait_ch(cs_vt_adgang,
  9 10223                               vt_op,
  9 10224                               gen_optype,
  9 10225                               -1<*timeout sek*>);
  9 10226                       start_operation(vtop,300+nr,cs_garage(nr),
  9 10227                                       kode);
  9 10228                       d.vt_op.data(1):=vogn;
  9 10229                       if kode=11 or kode=20 or kode=24 then d.vt_op.data(2):=ll;
  9 10230                       indeks:= vt_op;
  9 10231                       signal_ch(cs_vt,
  9 10232                                 vt_op,
  9 10233                                 gen_optype or gar_optype);
  9 10234     
  9 10234     <*V*>             wait_ch(cs_garage(nr),
  9 10235                               vt_op,
  9 10236                               gar_optype,
  9 10237                               -1<*timeout sek*>);
  9 10238     <*+2*>            if testbit18 and overvåget then
  9 10239                       disable begin
 10 10240                         write(out,"nl",1,<:garage :>,<<d>,nr,
 10 10241                               <:: operation retur fra vt:>);
 10 10242                         skriv_op(out,vt_op);
 10 10243                       end;
  9 10244     <*-2*>
  9 10245     <*+4*>            if vt_op<>indeks then
  9 10246                         fejl_reaktion(11<*fremmede op*>,op_ref,
  9 10247                                       <:garage-kommando:>,0);
  9 10248     <*-4*>
  9 10249     <*V*>             setposition(z_gar(nr),0,0);
  9 10250                       if sluttegn<>'nl' then outchar(z_gar(nr),'nl');
  9 10251                       skriv_kvittering(z_gar(nr),if d.vt_op.resultat = 11 or
  9 10252                         d.vt_op.resultat = 12 then d.vt_op.data(3)
  9 10253                         else vt_op,-1,d.vt_op.resultat);
  9 10254                       d.vt_op.optype:=gen_optype or vtoptype;
  9 10255                       disable afslut_operation(vt_op,cs_vt_adgang);
  9 10256                     end;
  8 10257     
  8 10257                     begin
  9 10258     \f

  9 10258     message procedure garage side 6a - 830310/cl;
  9 10259     
  9 10259                     <* 2 vogntabel,linienr/-,busnr *>
  9 10260     
  9 10260                     d.op_ref.retur:= cs_garage(nr);
  9 10261                     tofrom(d.op_ref.data,ia,10);
  9 10262                     indeks:= op_ref;
  9 10263                     signal_ch(cs_vt,op_ref,gen_optype or gar_optype);
  9 10264                     wait_ch(cs_garage(nr),
  9 10265                             op_ref,
  9 10266                             gar_optype,
  9 10267                             -1<*timeout*>);
  9 10268     <*+2*>          if testbit18 and overvåget then
  9 10269                     disable begin
 10 10270                       write(out,"nl",1,<:garage operation retur fra vt:>);
 10 10271                       skriv_op(out,op_ref);
 10 10272                     end;
  9 10273     <*-2*>
  9 10274     <*+4*>
  9 10275                     if indeks <> op_ref then
  9 10276                       fejlreaktion(11<*fremmed post*>,op_ref,<:garage komm:>,0);
  9 10277     <*-4*>
  9 10278                     i:= d.op_ref.resultat;
  9 10279                     if i = 0 or i > 3 then
  9 10280                     begin
 10 10281     <*V*>             setposition(z_gar(nr),0,0);
 10 10282                       skriv_kvittering(z_gar(nr),op_ref,-1,d.op_ref.resultat);
 10 10283                     end
  9 10284                     else
  9 10285                     begin
 10 10286                       integer antal,fil_ref;
 10 10287                       antal:= d.op_ref.data(6);
 10 10288                       fil_ref:= d.op_ref.data(7);
 10 10289     <*V*>             setposition(z_gar(nr),0,0);
 10 10290                       write(z_gar(nr),"*",24,"sp",6,
 10 10291                         <:vogntabeludskrift:>,"sp",6,"*",24,"nl",2);
 10 10292     <*V*>             setposition(z_gar(nr),0,0);
 10 10293     \f

 10 10293     message procedure garage side 6c - 841213/cl;
 10 10294     
 10 10294                       pos:= 1;
 10 10295                       while pos <= antal do
 10 10296                       begin
 11 10297                         integer bogst,løb;
 11 10298     
 11 10298                         disable i:= læs_fil(fil_ref,pos,j);
 11 10299                         if i <> 0 then
 11 10300                           fejlreaktion(5<*læs_fil*>,i,<:garage: vo,l/vo,b:>,0)
 11 10301                         else
 11 10302                         begin
 12 10303                           vogn:= fil(j,1) shift (-24) extract 24;
 12 10304                           løb:= fil(j,1) extract 24;
 12 10305                           if d.op_ref.opkode=9 then
 12 10306                             begin i:=vogn; vogn:=løb; løb:=i; end;
 12 10307                           ll:= løb shift (-12) extract 10;
 12 10308                           bogst:= løb shift (-7) extract 5;
 12 10309                           if bogst > 0 then bogst:= bogst +'A'-1;
 12 10310                           løb:= løb extract 7;
 12 10311                           vogn:= vogn extract 14;
 12 10312                           i:= d.op_ref.opkode-8;
 12 10313                           for i:= i,i+1 do
 12 10314                           begin
 13 10315                             j:= (i+1) extract 1;
 13 10316                             case j +1 of
 13 10317                             begin
 14 10318                               write(z_gar(nr),"sp",(bogst=0) extract 1,<<ddd>,ll,
 14 10319                                 false add bogst,1,"/",1,<<d__>,løb);
 14 10320                               write(z_gar(nr),<<dddd>,vogn,"sp",1);
 14 10321                             end;
 13 10322                           end;
 12 10323                           if pos mod 5 = 0 then
 12 10324                           begin
 13 10325                             write(z_gar(nr),"nl",1);
 13 10326     <*V*>                   setposition(z_gar(nr),0,0);
 13 10327                           end
 12 10328                           else write(z_gar(nr),"sp",3);
 12 10329                         end;
 11 10330                         pos:=pos+1;
 11 10331                       end;
 10 10332                       write(z_gar(nr),"nl",1,"*",77,"nl",1);
 10 10333     \f

 10 10333     message procedure garage side 6d- 830310/cl;
 10 10334     
 10 10334                       d.opref.opkode:=104; <*slet-fil*>
 10 10335                       d.op_ref.data(4):=filref;
 10 10336                       indeks:=op_ref;
 10 10337                       signal_ch(cs_slet_fil,op_ref,gen_optype or gar_optype);
 10 10338     <*V*>             wait_ch(cs_garage(nr),op_ref,gar_optype,-1);
 10 10339     
 10 10339     <*+2*>            if testbit18 and overvåget then
 10 10340                       disable begin
 11 10341                         write(out,"nl",1,<:garage, slet-fil retur:>);
 11 10342                         skriv_op(out,op_ref);
 11 10343                       end;
 10 10344     <*-2*>
 10 10345     
 10 10345     <*+4*>            if op_ref<>indeks then
 10 10346                         fejlreaktion(11<*fr.post*>,op_ref,<:garage,slet-fil:>,0);
 10 10347     <*-4*>
 10 10348                       if d.op_ref.data(9)<>0 then
 10 10349                         fejl_reaktion(3<*prg.fejl*>,d.op_ref.data(9),
 10 10350                             <:garage, slet_fil:>,1);
 10 10351                     end;
  9 10352     \f

  9 10352     message procedure garage side 7 -810424/hko;
  9 10353     
  9 10353                     end;
  8 10354     
  8 10354     <*+4*>          fejl_reaktion(3<*programfejl*>,j,<:case 'opkode':>,2);
  8 10355     <*-4*>
  8 10356                   end;<*case j *>
  7 10357                 end <* j > 0 *>
  6 10358                 else
  6 10359                 begin
  7 10360     <*V*>         setposition(z_gar(nr),0,0);
  7 10361                   if sluttegn<>'nl' then outchar(z_gar(nr),'nl');
  7 10362                   skriv_kvittering(z_gar(nr),op_ref,pos,
  7 10363                                    4 <*kommando ukendt *>);
  7 10364                 end;
  6 10365               end;<* godkendt *>
  5 10366     
  5 10366     <*V*>     setposition(z_gar(nr),0,0);
  5 10367     
  5 10367               d.op_ref.opkode:=0; <*telex*>
  5 10368     
  5 10368               disable afslut_operation(op_ref,cs_gar);
  5 10369             end; <* indlæs kommando *>
  4 10370     
  4 10370             begin
  5 10371     \f

  5 10371     message procedure garage side 8 - 841213/cl;
  5 10372     
  5 10372                   <* 2: inkluder *>
  5 10373     
  5 10373               d.op_ref.resultat:=3;
  5 10374               afslut_operation(op_ref,-1);
  5 10375               monitor(8)reserve:(z_gar(nr),0,ia);
  5 10376               terminal_tab.ref.terminal_tilstand:=
  5 10377                 terminal_tab.ref.terminal_tilstand extract 21;
  5 10378     <*V*>     wait_ch(cs_att_pulje,op_ref,true,-1);
  5 10379               start_operation(op_ref,300+nr,cs_att_pulje,0);
  5 10380               signal_ch(cs_garage(nr),op_ref,gen_optype);
  5 10381             end;
  4 10382     
  4 10382             begin
  5 10383     
  5 10383               <* 3: ekskluder *>
  5 10384               d.op_ref.resultat:= 3;
  5 10385               terminal_tab.ref.terminal_tilstand:= 7 shift 21 +
  5 10386                 terminal_tab.ref.terminal_tilstand extract 21;
  5 10387               monitor(10)release:(z_gar(nr),0,ia);
  5 10388               afslut_operation(op_ref,-1);
  5 10389     
  5 10389             end;
  4 10390     
  4 10390     <*+4*>  fejl_reaktion(3<*programfejl *>,aktion,<:case aktion:>,2);
  4 10391     <*-4*>
  4 10392           end; <* case aktion+6 *>
  3 10393     
  3 10393          until false;
  3 10394       gar_trap:
  3 10395         skriv_garage(zbillede,1);
  3 10396       end garage;
  2 10397     
  2 10397     \f

  2 10397     message procedure radio_erklæringer side 1 - 820304/hko;
  2 10398     
  2 10398     zone z_fr_in(14,1,rad_in_fejl),
  2 10399          z_rf_in(14,1,rad_in_fejl),
  2 10400          z_fr_out(14,1,rad_out_fejl),
  2 10401          z_rf_out(14,1,rad_out_fejl);
  2 10402     
  2 10402     integer array
  2 10403         radiofejl,
  2 10404         ss_samtale_nedlagt,
  2 10405         ss_radio_aktiver(1:max_antal_kanaler),
  2 10406         bs_talevej_udkoblet,
  2 10407         cs_radio(1:max_antal_taleveje),
  2 10408         radio_linietabel(1:max_linienr//3+1),
  2 10409         radio_områdetabel(0:max_antal_områder),
  2 10410         opkaldskø(opkaldskø_postlængde//2+1:
  2 10411           (max_antal_mobilopkald+1)*opkaldskø_postlængde//2),
  2 10412         kanal_tab(1:max_antal_kanaler*kanal_beskr_længde//2),
  2 10413         hookoff_maske(1:(tv_maske_lgd//2)),
  2 10414         samtaleflag, kanalflag, opkaldsflag(1:(op_maske_lgd//2));
  2 10415     
  2 10415       integer field
  2 10416         kanal_tilstand,
  2 10417         kanal_id1,
  2 10418         kanal_id2,
  2 10419         kanal_spec,
  2 10420         kanal_alt_id1,
  2 10421         kanal_alt_id2;               
  2 10422       integer array field 
  2 10423         kanal_mon_maske,
  2 10424         kanal_alarm,
  2 10425         opkald_meldt;
  2 10426     
  2 10426       integer
  2 10427         cs_rad,
  2 10428         cs_radio_medd,
  2 10429         cs_radio_adm,
  2 10430         cs_radio_ind,
  2 10431         cs_radio_ud,
  2 10432         cs_radio_pulje,
  2 10433         cs_radio_kø,
  2 10434         bs_mobil_opkald,
  2 10435         bs_opkaldskø_adgang,
  2 10436         opkaldskø_ledige,
  2 10437         nødopkald_brugt,
  2 10438         første_frie_opkald,
  2 10439         første_opkald,
  2 10440         sidste_opkald,
  2 10441         første_nødopkald,
  2 10442         sidste_nødopkald,
  2 10443         optaget_flag;
  2 10444     
  2 10444       boolean
  2 10445         mobil_opkald_aktiveret;
  2 10446     \f

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

  2 10526     message procedure rad_in_fejl side 1 - 810601/hko;
  2 10527     
  2 10527       procedure rad_in_fejl(z,s,b);
  2 10528         value                 s;
  2 10529         zone                z;
  2 10530         integer               s,b;
  2 10531         begin
  3 10532           integer array field iaf;
  3 10533           integer pos,tegn,max,i;
  3 10534           integer array ia(1:20);
  3 10535           long array field laf;
  3 10536     
  3 10536         disable begin
  4 10537           laf:= iaf:= 2;
  4 10538           i:= 1;
  4 10539           getzone6(z,ia);
  4 10540           max:= ia(16)//2*3;
  4 10541           if s shift (-21) extract 1 = 0
  4 10542              and s shift(-19) extract 1 = 0 then
  4 10543           begin
  5 10544             if b = 0 then
  5 10545             begin
  6 10546               z(1):= real<:!:>;
  6 10547               b:= 2;
  6 10548             end;
  5 10549           end;
  4 10550     \f

  4 10550     message procedure rad_in_fejl side 2 - 820304/hko;
  4 10551     
  4 10551           if (s <> 1 shift 21 +2 and s shift(-19) extract 1 = 0) then
  4 10552           begin
  5 10553             fejlreaktion(17<*ydre enhed status*>,s,string ia.laf(increase(i)),
  5 10554               1 shift 12<*binær*> +1<*fortsæt*>);
  5 10555           end
  4 10556           else
  4 10557           if s shift (-19) extract 1 = 1 then
  4 10558           begin
  5 10559             z(1):= real<:!<'nl'>:>;
  5 10560             b:= 2;
  5 10561           end
  4 10562           else
  4 10563           if s = 1 shift 21 +2  or s shift(-19) extract 1 =1 then
  4 10564           begin
  5 10565     <*
  5 10566             if b = 0 then
  5 10567             begin
  5 10568     *>
  5 10569               z(1):= real <:<'em'>:>;
  5 10570               b:= 2;
  5 10571     <*
  5 10572             end
  5 10573             else
  5 10574             begin
  5 10575               tegn:= -1;
  5 10576               iaf:= 0;
  5 10577               pos:= b//2*3-2;
  5 10578               while pos < max and tegn <> 0 do læstegn(z.iaf,pos,tegn);
  5 10579               skriv_tegn(z.iaf,pos,'?');
  5 10580               if pos<=max then
  5 10581                 afslut_text(z.iaf,pos);
  5 10582               b:= (pos-1)//3*2;
  5 10583             end;
  5 10584     *>
  5 10585           end;<* s=1 shift 21+2 *>
  4 10586         end;
  3 10587           if testbit22 and
  3 10588              (s <> 1 shift 21 +2 and s shift(-19) extract 1 = 0)
  3 10589           then
  3 10590             delay(60);
  3 10591         end rad_in_fejl;
  2 10592     \f

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

  2 10662     message procedure skriv_kanal_tab side 1 - 820304/hko;
  2 10663     
  2 10663       procedure skriv_kanal_tab(z);
  2 10664         zone                    z;
  2 10665         begin
  3 10666           integer array field ref;
  3 10667           integer i,j,t,op,id1,id2;
  3 10668     
  3 10668           write(z,"ff",1,"nl",1,<:
  3 10669          ******** kanal-beskrivelser *******
  3 10670     
  3 10670                        a k l p m b n
  3 10671                        l a y a o s ø
  3 10672     nr    tv tilst + * l t t s n v d - type   id1      id2      ttmm/ant -ej.op:>,
  3 10673     <*
  3 10674     01 ..... ..... x x x x x x x x x x .... ........ ........   .... ....  ----
  3 10675     *>
  3 10676             "nl",1);
  3 10677           for i:=1 step 1 until max_antal_kanaler do
  3 10678           begin
  4 10679             ref:=(i-1)*kanal_beskr_længde;
  4 10680             t:=kanal_tab.ref.kanal_tilstand;
  4 10681             id1:=kanal_tab.ref.kanal_id1;
  4 10682             id2:=kanal_tab.ref.kanal_id2;
  4 10683             write(z,"nl",1,"sp",4,
  4 10684               <<dd>,i,<<-ddddd>,t shift(-16),t shift(-12) extract 4,"sp",1);
  4 10685             for j:=11 step -1 until 2 do
  4 10686               write(z,if læsbit_i(t,j) then "X" else "sp",1,"sp",1);
  4 10687             write(z,case t extract 2 +1 of
  4 10688                  (<:-   :>,<:OPK :>,<:MEDD:>,<:GNM :>),
  4 10689               "sp",1);
  4 10690             skriv_id(z,id1,9);
  4 10691             skriv_id(z,id2,9);
  4 10692             t:=kanal_tab.ref.kanal_spec;
  4 10693             write(z,"sp",1,<<-dddd>,t,t shift(-16),"sp",1,-(t extract 8));
  4 10694             write(z,"nl",1,"sp",14,<:mon: :>);
  4 10695             for j:= max_antal_taleveje step -1 until 1 do
  4 10696               write(z,(if læs_bit_ia(kanal_tab.ref.kanal_mon_maske,j) then "1"
  4 10697                     else "."),1);
  4 10698             write(z,"sp",25-max_antal_taleveje);
  4 10699             skriv_id(z,kanal_tab.ref.kanal_alt_id1,9);
  4 10700             skriv_id(z,kanal_tab.ref.kanal_alt_id2,9);
  4 10701           end;
  3 10702           write(z,"nl",2,<:kanalflag::>,"nl",1);
  3 10703           outintbits_ia(z,kanalflag,1,op_maske_lgd//2);
  3 10704           write(z,"nl",2);
  3 10705         end skriv_kanal_tab;
  2 10706     \f

  2 10706     message procedure skriv_opkaldskø side 1 - 820301/hko;
  2 10707     
  2 10707       procedure skriv_opkaldskø(z);
  2 10708         zone                    z;
  2 10709         begin
  3 10710           integer i,bogst,løb,j;
  3 10711           integer array field ref;
  3 10712           write(z,"nl",2,"*",5,<: opkaldskø :>,"*",5,"nl",2,
  3 10713             <:  ref næste foreg X    bus  linie/løb tid   -  op type  :>,
  3 10714             <: sig omr :>,"nl",1);
  3 10715           for i:= 1 step 1 until max_antal_mobilopkald do
  3 10716           begin
  4 10717             ref:= i*opkaldskø_postlængde;
  4 10718             j:= opkaldskø.ref(1);
  4 10719             write(z,<< dddd>,ref,<< ddddd>,j extract 12,j shift (-12));
  4 10720             j:= opkaldskø.ref(2);
  4 10721             write(z,"sp",1,if j < 0 then "X" else "sp",1,"sp",1);
  4 10722             skriv_id(z,j extract 23,9);
  4 10723             j:= opkaldskø.ref(3);
  4 10724             skriv_id(z,j,7);
  4 10725             j:= opkaldskø.ref(4);
  4 10726             write(z,<<  zd.dd>,(j shift (-12))/100.0,
  4 10727               <<    zd>,j extract 8);
  4 10728             j:= j shift (-8) extract 4;
  4 10729             if j = 1 or j = 2 then
  4 10730               write(z,if j=1 then <: normal:> else <: nød   :>)
  4 10731             else write(z,<<dddd>,j,"sp",3);
  4 10732             j:= opkaldskø.ref(5);
  4 10733             write(z,if j shift (-20) <> 0 then <:  B  :> else <:  S  :>,
  4 10734               true,4,if 1<=(j extract 8) and (j extract 8)<=max_antal_områder then
  4 10735               string område_navn(j extract 8) else <:---:>);
  4 10736             outchar(z,'nl');
  4 10737           end;
  3 10738     
  3 10738           write(z,"nl",1,<<z>,
  3 10739             <:første_frie_opkald=:>,første_frie_opkald,"nl",1,
  3 10740             <:første_opkald=:>,første_opkald,"nl",1,
  3 10741             <:sidste_opkald=:>,sidste_opkald,"nl",1,
  3 10742             <:første_nødopkald=:>,første_nødopkald,"nl",1,
  3 10743             <:sidste_nødopkald=:>,sidste_nødopkald,"nl",1,
  3 10744             <:opkaldskø_ledige=:>,opkaldskø_ledige,"nl",1,
  3 10745             <:nødopkald_brugt= :>,nødopkald_brugt,"nl",1,
  3 10746             "nl",1,<:opkaldsflag::>,"nl",1);
  3 10747             outintbits_ia(z,opkaldsflag,1,op_maske_lgd//2);
  3 10748             write(z,"nl",2);
  3 10749         end skriv_opkaldskø;
  2 10750     \f

  2 10750     message procedure skriv_radio_linietabel side 1 - 820301/hko;
  2 10751     
  2 10751       procedure skriv_radio_linie_tabel(z);
  2 10752         zone                               z;
  2 10753         begin
  3 10754           integer i,j,k;
  3 10755     
  3 10755           write(z,"nl",2,"*",5,<: liniefordeling for operatører :>,"*",5,"nl",2);
  3 10756           k:= 0;
  3 10757           for i:= 1 step 1 until max_linienr do
  3 10758           begin
  4 10759             læstegn(radio_linietabel,i+1,j);
  4 10760             if j > 0 then
  4 10761             begin
  5 10762               k:= k +1;
  5 10763               write(z,<<dddd>,i,":",1,<<zd_>,j,"sp",if k mod 5=0 then 0 else 4,
  5 10764                 "nl",if k mod 5=0 then 1 else 0);
  5 10765             end;
  4 10766           end;
  3 10767           write(z,"nl",if k mod 5=0 then 1 else 2);
  3 10768         end skriv_radio_linietabel;
  2 10769     
  2 10769     procedure skriv_radio_områdetabel(z);
  2 10770      zone                             z;
  2 10771       begin
  3 10772         integer i;
  3 10773     
  3 10773         write(z,"nl",2,"*",5,<: områdefordeling for operatører :>,"*",5,"nl",2);
  3 10774         for i:= 1 step 1 until max_antal_områder do
  3 10775         begin
  4 10776           laf:= (i-1)*4;
  4 10777           if radio_områdetabel(i)<>0 then
  4 10778             write(z,<<dd>,i,<:. :>,områdenavn.laf,<:: :>,
  4 10779               radio_områdetabel(i),"nl",1);
  4 10780         end;
  3 10781       end skriv_radio_områdetabel;
  2 10782     \f

  2 10782     message procedure h_radio side 1 - 810520/hko;
  2 10783     
  2 10783       <* hovedmodulkorutine for radiokanaler *>
  2 10784       procedure h_radio;
  2 10785       begin
  3 10786         integer array field op_ref;
  3 10787         integer k,dest_sem;
  3 10788         procedure skriv_hradio(z,omfang);
  3 10789           value                  omfang;
  3 10790           zone                 z;
  3 10791           integer                omfang;
  3 10792           begin integer i;
  4 10793             disable i:= write(z,"nl",1,<:+++ hovedmodul radio:>);
  4 10794             write(z,"sp",26-i);
  4 10795             if omfang >0 then
  4 10796             disable begin integer x;
  5 10797               trap(slut);
  5 10798               write(z,"nl",1,
  5 10799                 <:  op_ref:    :>,op_ref,"nl",1,
  5 10800                 <:  k:         :>,k,"nl",1,
  5 10801                 <:  dest_sem:  :>,dest_sem,"nl",1,
  5 10802                 <::>);
  5 10803               skriv_coru(z,coru_no(400));
  5 10804     slut:
  5 10805             end;
  4 10806           end skriv_hradio;
  3 10807     
  3 10807       trap(hrad_trap);
  3 10808       stack_claim(if cm_test then 198 else 146);
  3 10809     
  3 10809     <*+2*> if testbit32 and overvåget or testbit28 then
  3 10810         skriv_hradio(out,0);
  3 10811     <*-2*>
  3 10812     \f

  3 10812     message procedure h_radio side 2 - 820304/hko;
  3 10813     
  3 10813       repeat
  3 10814         wait_ch(cs_rad,op_ref,true,-1);
  3 10815     <*+2*>if testbit33 and overvåget then
  3 10816           disable begin
  4 10817             skriv_h_radio(out,0);
  4 10818             write(out,<: operation modtaget:>);
  4 10819             skriv_op(out,op_ref);
  4 10820           end;
  3 10821     <*-2*>
  3 10822     <*+4*>
  3 10823         if (d.op_ref.optype and
  3 10824              (gen_optype or rad_optype or vt_optype)) extract 12 =0
  3 10825         then fejlreaktion(12<*operationstype*>,op_ref,<:h<'_'>radio:>,1);
  3 10826     <*-4*>
  3 10827     
  3 10827         k:=d.op_ref.op_kode extract 12;
  3 10828         dest_sem:=
  3 10829           if k > 0 and k < 7
  3 10830              or k=11 or k=12 or k=19
  3 10831              or (72<=k and k<=74) or k = 77
  3 10832              <*IN,O/EK,O/IN,R/EK,R/FO,L/ST/EK,K/IN,K/RA,I/FO,O*>
  3 10833           then cs_radio_adm
  3 10834           else if k=41 <* radiokommando fra operatør *>
  3 10835           then cs_radio(d.opref.data(1)) else -1;
  3 10836     <*+4*>
  3 10837         if dest_sem<1 then
  3 10838         begin
  4 10839           if dest_sem<0 then
  4 10840             fejlreaktion(2<*operationskode*>,k,<:hovedmodul radio:>,1);
  4 10841           d.op_ref.resultat:= if dest_sem=0 then 45 else 31;
  4 10842           signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  4 10843         end
  3 10844         else
  3 10845     <*-4*>
  3 10846         begin <* operationskode ok *>
  4 10847           signal_ch(dest_sem,op_ref,d.op_ref.optype);
  4 10848         end;
  3 10849       until false;
  3 10850     
  3 10850     hrad_trap:
  3 10851       disable skriv_hradio(zbillede,1);
  3 10852       end h_radio;
  2 10853     \f

  2 10853     message procedure radio side 1 - 820301/hko;
  2 10854     
  2 10854       procedure radio(talevej,op);
  2 10855       value           talevej,op;
  2 10856       integer         talevej,op;
  2 10857         begin
  3 10858           integer array field opref, rad_op, vt_op, opref1, iaf, iaf1;
  3 10859           integer nr,i,j,k,res,opgave,tilst,tekn_inf, vtop2, vtop3,
  3 10860                   sig,omr,type,bus,ll,ttmm,vogn,garage,operatør;
  3 10861           integer array felt,værdi(1:8);
  3 10862           boolean byt,nød,frigiv_samtale;
  3 10863           real kl;
  3 10864           real field rf;
  3 10865     
  3 10865           procedure skriv_radio(z,omfang);
  3 10866             value                 omfang;
  3 10867             zone                z;
  3 10868             integer               omfang;
  3 10869             begin integer i1;
  4 10870               disable i1:= write(z,"nl",1,<:+++ radio:>);
  4 10871               write(z,"sp",26-i1);
  4 10872               if omfang > 0 then
  4 10873               disable begin real x;
  5 10874                 trap(slut);
  5 10875     \f

  5 10875     message procedure radio side 1a- 820301/hko;
  5 10876     
  5 10876                 write(z,"nl",1,
  5 10877                   <:  op_ref:    :>,op_ref,"nl",1,
  5 10878                   <:  opref1:    :>,opref1,"nl",1,
  5 10879                   <:  iaf:       :>,iaf,"nl",1,
  5 10880                   <:  iaf1:      :>,iaf1,"nl",1,
  5 10881                   <:  vt-op:     :>,vt_op,"nl",1,
  5 10882                   <:  rad-op:    :>,rad_op,"nl",1,
  5 10883                   <:  rf:        :>,rf,"nl",1,
  5 10884                   <:  nr:        :>,nr,"nl",1,
  5 10885                   <:  i:         :>,i,"nl",1,
  5 10886                   <:  j:         :>,j,"nl",1,
  5 10887                   <:  k:         :>,k,"nl",1,
  5 10888                   <:  operatør:  :>,operatør,"nl",1,
  5 10889                   <:  tilst:     :>,tilst,"nl",1,
  5 10890                   <:  res:       :>,res,"nl",1,
  5 10891                   <:  opgave:    :>,opgave,"nl",1,
  5 10892                   <:  type:      :>,type,"nl",1,
  5 10893                   <:  bus:       :>,bus,"nl",1,
  5 10894                   <:  ll:        :>,ll,"nl",1,
  5 10895                   <:  ttmm:      :>,ttmm,"nl",1,
  5 10896                   <:  vogn:      :>,vogn,"nl",1,
  5 10897                   <:  tekn-inf:  :>,tekn_inf,"nl",1,
  5 10898                   <:  vtop2:     :>,vtop2,"nl",1,
  5 10899                   <:  vtop3:     :>,vtop3,"nl",1,
  5 10900                   <:  sig:       :>,sig,"nl",1,
  5 10901                   <:  omr:       :>,omr,"nl",1,
  5 10902                   <:  garage:    :>,garage,"nl",1,
  5 10903                   <<-dddddd'-dd>,
  5 10904                   <:  kl:        :>,kl,systime(4,kl,x),x,"nl",1,
  5 10905                   <:samtaleflag: :>,"nl",1);
  5 10906                 out_intbits_ia(z,samtaleflag,1,op_maske_lgd//2);
  5 10907                 skriv_coru(z,coru_no(410+talevej));
  5 10908     slut:
  5 10909               end;<*disable*>
  4 10910             end skriv_radio;
  3 10911     \f

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

  5 10989     message procedure udtag_opkald side 2 - 820304/hko;
  5 10990     
  5 10990             if ref <> 0 then
  5 10991             begin
  6 10992               b:= opkaldskø.ref(2);
  6 10993     <*+4*>    if b < 0 then
  6 10994                 fejlreaktion(19<*mobilopkald*>,bus extract 14,
  6 10995                   <:nødopkald(besvaret/ej meldt):>,1);
  6 10996     <*-4*>
  6 10997               garage:=b shift(-14) extract 8;
  6 10998               b:= b extract 14;
  6 10999               l:= opkaldskø.ref(3);
  6 11000               tm:= opkaldskø.ref(4);
  6 11001               o:= tm extract 8;
  6 11002               tm:= tm shift(-12);
  6 11003               omr:= opkaldskø.ref(5) extract 8;
  6 11004               sig:= opkaldskø.ref(5) shift (-20);
  6 11005             end
  5 11006             else res:=19; <* kø er tom *>
  5 11007           end <*vogn=0 and omr=0 *>
  4 11008           else
  4 11009           begin
  5 11010             <* vogn<>0 or omr<>0 *>
  5 11011             i:= 0; tilst:= -1;
  5 11012             if vogn shift(-22) = 1 then
  5 11013             begin
  6 11014               i:= find_busnr(vogn,nr,garage,tilst);
  6 11015               l:= vogn;
  6 11016             end
  5 11017             else
  5 11018             if vogn<>0 and (omr=0 or omr>2) then
  5 11019             begin
  6 11020               o:= 0;
  6 11021               i:= søg_omr_bus(vogn,l,garage,o,sig,tilst);
  6 11022               if i=(-2) then
  6 11023               begin
  7 11024                 o:= omr;
  7 11025                 i:= søg_omr_bus(vogn,l,garage,o,sig,tilst);
  7 11026               end;
  6 11027               nr:= vogn extract 14;
  6 11028             end
  5 11029             else nr:= vogn extract 14;
  5 11030             if i<0 then ref:= 0;
  5 11031             while ref <> 0 and res = -1 do
  5 11032             begin
  6 11033               i:= opkaldskø.ref(2) extract 14;
  6 11034               j:= opkaldskø.ref(4) extract 8; <*operatør*>
  6 11035               if nr = i and
  6 11036                  (omr=0 or omr=opkaldskø.ref(5) extract 8) then res:= 0
  6 11037               else
  6 11038               begin
  7 11039                 ref:= opkaldskø.ref(1) extract 12;
  7 11040                 if ref = 0 and t = 2 then
  7 11041                 begin
  8 11042                   ref:= første_opkald;
  8 11043                   t:= if ref = 0 then 0 else 1;
  8 11044                 end else if ref = 0 then t:= 0;
  7 11045               end;
  6 11046             end; <*while*>
  5 11047     \f

  5 11047     message procedure udtag_opkald side 3 - 810603/hko;
  5 11048     
  5 11048             if ref <> 0 then
  5 11049             begin
  6 11050               b:= nr;
  6 11051               tm:= opkaldskø.ref(4);
  6 11052               o:= tm extract 8;
  6 11053               tm:= tm shift(-12);
  6 11054               omr:= opkaldskø.ref(5) extract 4;
  6 11055               sig:= opkaldskø.ref(5) shift (-20);
  6 11056     
  6 11056     <*+4*>    if tilst <> -1 then
  6 11057                 fejlreaktion(3<*prg.fejl*>,tilst,
  6 11058                   <:vogntabel_tilstand for vogn i kø:>,1);
  6 11059     <*-4*>
  6 11060             end;
  5 11061           end;
  4 11062     
  4 11062           if ref <> 0 then
  4 11063           begin
  5 11064             næste:= opkaldskø.ref(1);
  5 11065             forrige:= næste shift(-12);
  5 11066             næste:= næste extract 12;
  5 11067             if forrige <> 0 then
  5 11068               opkaldskø.forrige(1):= opkaldskø.forrige(1) shift(-12) shift 12
  5 11069                                      + næste
  5 11070             else if t = 1 then første_opkald:= næste
  5 11071             else <*if t = 2 then*> første_nødopkald:= næste;
  5 11072     
  5 11072             if næste <> 0 then
  5 11073               opkaldskø.næste(1):= opkaldskø.næste(1) extract 12
  5 11074                                    + forrige shift 12
  5 11075             else if t = 1 then sidste_opkald:= forrige
  5 11076             else <* if t = 2 then*> sidste_nødopkald:= forrige;
  5 11077     
  5 11077             opkaldskø.ref(1):=første_frie_opkald;
  5 11078             første_frie_opkald:=ref;
  5 11079     
  5 11079             opkaldskø_ledige:=opkaldskø_ledige + 1;
  5 11080             if t=2 then nødopkald_brugt:=nødopkald_brugt - 1;
  5 11081             if -,læsbit_ia(operatør_maske,o) or o = 0 then
  5 11082               tofrom(opkaldsflag,alle_operatører,op_maske_lgd)
  5 11083             else
  5 11084             begin
  6 11085               sætbit_ia(opkaldsflag,operatør,1);
  6 11086               sætbit_ia(opkaldsflag,o,1);
  6 11087             end;
  5 11088             signal_bin(bs_mobil_opkald);
  5 11089           end;
  4 11090     \f

  4 11090     message procedure udtag_opkald side 4 - 810531/hko;
  4 11091     
  4 11091           signal_bin(bs_opkaldskø_adgang);
  4 11092           bus:= b;
  4 11093           type:= t;
  4 11094           ll:= l;
  4 11095           ttmm:= tm;
  4 11096           udtag_opkald:= res;
  4 11097         end udtag opkald;
  3 11098     \f

  3 11098     message procedure frigiv_kanal side 1 - 810603/hko;
  3 11099     
  3 11099       procedure frigiv_kanal(nr);
  3 11100         value                nr;
  3 11101         integer              nr;
  3 11102         begin
  4 11103           integer id1, id2, omr, i;
  4 11104           integer array field iaf, vt_op;
  4 11105     
  4 11105           iaf:= (nr-1)*kanal_beskrlængde;
  4 11106           id1:= kanal_tab.iaf.kanal_id1;
  4 11107           id2:= kanal_tab.iaf.kanal_id2;
  4 11108           omr:= kanal_til_omr(nr);
  4 11109           if id1 <> 0 then
  4 11110             wait(ss_samtale_nedlagt(nr));
  4 11111           if id1 shift (-22) < 3 and omr > 2 then
  4 11112           begin
  5 11113     <*V*>   waitch(cs_vt_adgang,vt_op,true,-1);
  5 11114             start_operation(vt_op,410+talevej,cs_radio(talevej),
  5 11115               if id1 shift (-22) = 2 then 18 else 17);
  5 11116             d.vt_op.data(1):= id1;
  5 11117             d.vt_op.data(4):= omr;
  5 11118             signalch(cs_vt,vt_op,vt_optype or genoptype);
  5 11119     <*V*>   waitch(cs_radio(talevej),vt_op,vt_optype,-1);
  5 11120             signalch(cs_vt_adgang,vt_op,true);
  5 11121           end;
  4 11122     
  4 11122           if id2 <> 0 and id2 shift(-20) <> 12 then
  4 11123             wait(ss_samtale_nedlagt(nr));
  4 11124           if id2 shift (-22) < 3 and omr > 2 then
  4 11125           begin
  5 11126     <*V*>   waitch(cs_vt_adgang,vt_op,true,-1);
  5 11127             start_operation(vt_op,410+talevej,cs_radio(talevej),
  5 11128               if id2 shift (-22) = 2 then 18 else 17);
  5 11129             d.vt_op.data(1):= id2;
  5 11130             d.vt_op.data(4):= omr;
  5 11131             signalch(cs_vt,vt_op,vt_optype or genoptype);
  5 11132     <*V*>   waitch(cs_radio(talevej),vt_op,vt_optype,-1);
  5 11133             signalch(cs_vt_adgang,vt_op,true);
  5 11134           end;
  4 11135     
  4 11135           kanal_tab.iaf.kanal_id1:= kanal_tab.iaf.kanal_id2:= 
  4 11136           kanal_tab.iaf.kanal_alt_id1:= kanal_tab.iaf.kanal_alt_id2:= 0;
  4 11137           kanal_tab.iaf.kanal_tilstand:= kanal_tab.iaf.kanal_tilstand
  4 11138                                         shift (-10) extract 6 shift 10;
  4 11139     <*    repeat
  4 11140             inspect(ss_samtale_nedlagt(nr),i);
  4 11141             if i>0 then wait(ss_samtale_nedlagt(nr));
  4 11142           until i<=0;
  4 11143     *>
  4 11144         end frigiv_kanal;
  3 11145     \f

  3 11145     message procedure hookoff side 1 - 880901/cl;
  3 11146     
  3 11146     integer procedure hookoff(talevej,op,retursem,flash);
  3 11147     value                     talevej,op,retursem,flash;
  3 11148     integer                   talevej,op,retursem;
  3 11149     boolean                                        flash;
  3 11150     begin
  4 11151       integer array field opref;
  4 11152     
  4 11152       opref:= op;
  4 11153       start_operation(opref,410+talevej,retursem,'A' shift 12 + 60);
  4 11154       d.opref.data(1):= talevej;
  4 11155       d.opref.data(2):= if flash then 2 else 1;
  4 11156       signalch(cs_radio_ud,opref,rad_optype);
  4 11157     <*V*> waitch(retursem,opref,rad_optype,-1);
  4 11158       hookoff:= d.opref.resultat;
  4 11159     end;
  3 11160     \f

  3 11160     message procedure hookon side 1 - 880901/cl;
  3 11161     
  3 11161     integer procedure hookon(talevej,op,retursem);
  3 11162       value                  talevej,op,retursem;
  3 11163       integer                talevej,op,retursem;
  3 11164     begin
  4 11165       integer i,res;
  4 11166       integer array field opref;
  4 11167     
  4 11167      if læsbit_ia(hookoff_maske,talevej) then
  4 11168      begin
  5 11169       inspect(bs_talevej_udkoblet(talevej),i);
  5 11170       if i<=0 then
  5 11171       begin
  6 11172         opref:= op;
  6 11173         start_operation(opref,410+talevej,retursem,'D' shift 12 + 60);
  6 11174         d.opref.data(1):= talevej;
  6 11175         signalch(cs_radio_ud,opref,rad_optype);
  6 11176     <*V*> waitch(retursem,opref,rad_optype,-1);
  6 11177         res:= d.opref.resultat;
  6 11178       end
  5 11179       else
  5 11180         res:= 0;
  5 11181     
  5 11181       if res=0 then wait(bs_talevej_udkoblet(talevej));
  5 11182      end
  4 11183      else
  4 11184        res:= 0;
  4 11185     
  4 11185      sætbit_ia(hookoff_maske,talevej,0);
  4 11186       hookon:= res;
  4 11187     end;
  3 11188     \f

  3 11188     message procedure radio side 2 - 820304/hko;
  3 11189     
  3 11189           rad_op:= op;
  3 11190     
  3 11190           trap(radio_trap);
  3 11191           stack_claim((if cm_test then 200 else 150) +200);
  3 11192     
  3 11192     <*+2*>if testbit32 and overvåget or testbit28 then
  3 11193             skriv_radio(out,0);
  3 11194     <*-2*>
  3 11195           repeat
  3 11196             waitch(cs_radio(talevej),opref,true,-1);
  3 11197     <*+2*>
  3 11198             if testbit33 and overvåget then
  3 11199             disable begin
  4 11200               skriv_radio(out,0);
  4 11201               write(out,<: operation modtaget på cs:>,<<d>,cs_radio(talevej));
  4 11202               skriv_op(out,opref);
  4 11203             end;
  3 11204     <*-2*>
  3 11205     
  3 11205             k:= d.op_ref.opkode extract 12;
  3 11206             opgave:= d.opref.opkode shift (-12);
  3 11207             operatør:= d.op_ref.data(4);
  3 11208     
  3 11208     <*+4*>  if (d.op_ref.optype and (gen_optype or io_optype or op_optype))
  3 11209               extract 12 = 0 then fejlreaktion(12<*operationstype*>,op_ref,
  3 11210                                     <:radio:>,0);
  3 11211     <*-4*>
  3 11212     \f

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

  4 11281     message procedure radio side 4 - 880930/cl;
  4 11282     
  4 11282               if res=0 and (opgave<=4 or opgave=9) and
  4 11283                 (omr<1 or 2<omr) and
  4 11284                 (d.opref.data(3)>2 or d.opref.data(3)=0) then
  4 11285               begin <* reserver i vogntabel *>
  5 11286                 waitch(cs_vt_adgang,vt_op,true,-1);
  5 11287                 start_operation(vt_op,410+talevej,cs_radio(talevej),
  5 11288                   if opgave <=2 or opgave=9 then 15 else 16);
  5 11289                 d.vt_op.data(1):= if opgave<=2 or opgave=9 then
  5 11290                   (if vogn=0 then garage shift 14 + bus else 
  5 11291                    if ll<>0 then ll else garage shift 14 + bus)
  5 11292                   else vogn <*gruppeid*>;
  5 11293                 d.vt_op.data(4):= if d.opref.data(3)<>0 then
  5 11294                                     d.opref.data(3) extract 8
  5 11295                                   else omr extract 8;
  5 11296                 signalch(cs_vt,vt_op,gen_optype or rad_optype);
  5 11297     <*V*>       waitch(cs_radio(talevej),vt_op,rad_optype,-1);
  5 11298     
  5 11298                 res:= d.vt_op.resultat;
  5 11299                 if res=3 then res:= 0;
  5 11300                 vtop2:= d.vt_op.data(2);
  5 11301                 vtop3:= d.vt_op.data(3);
  5 11302                 tekn_inf:= d.vt_op.data(4);
  5 11303                 signalch(cs_vt_adgang,vt_op,gen_optype or vt_optype);
  5 11304               end;
  4 11305     
  4 11305               if res<>0 then
  4 11306               begin
  5 11307                 d.opref.resultat:= res;
  5 11308                 signalch(d.opref.retur,opref,d.opref.optype);
  5 11309               end
  4 11310               else
  4 11311     
  4 11311               if opgave <= 9 then
  4 11312               begin <* opkald *>
  5 11313                 res:= hookoff(talevej,rad_op,cs_radio(talevej),
  5 11314                     opgave<>9 and d.opref.data(6)<>0);
  5 11315     
  5 11315                 if res<>0 then
  5 11316                   goto returner_op;
  5 11317     
  5 11317                 if opgave=7 or opgave=8 then <* KATASTROFEOPKALD *>
  5 11318                 begin
  6 11319                   start_operation(rad_op,410+talevej,cs_radio(talevej),
  6 11320                     'H' shift 12 + 60);
  6 11321                   d.rad_op.data(1):= talevej;
  6 11322                   d.rad_op.data(2):= 'D';
  6 11323                   d.rad_op.data(3):= 6; <* rear *>
  6 11324                   d.rad_op.data(4):= 1; <* rear no *>
  6 11325                   d.rad_op.data(5):= 0; <* disconnect *>
  6 11326                   signalch(cs_radio_ud,rad_op,rad_optype);
  6 11327     <*V*>         waitch(cs_radio(talevej),rad_op,rad_optype,-1);
  6 11328                   if d.rad_op.resultat<>0 then
  6 11329                   begin
  7 11330                     res:= d.rad_op.resultat;
  7 11331                     goto returner_op;
  7 11332                   end;
  6 11333     <*
  6 11334                   while optaget_flag shift (-1) <> 0 do
  6 11335                     delay(1);
  6 11336     *>
  6 11337                 end;
  5 11338     \f

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

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

  6 11478     message procedure radio side 7 - 880930/cl;
  6 11479     
  6 11479                 end
  5 11480                 else
  5 11481                 begin
  6 11482                   d.opref.resultat:= res;
  6 11483                   if res=20 or res=52 then
  6 11484                   begin <* tæl ej.forb og opt.kanal *>
  7 11485                     for i:= 1 step 1 until max_antal_områder do
  7 11486                       if læsbiti(d.rad_op.data(7),i) then
  7 11487                         tæl_opkald(i,(if res=20 then 4 else 5));
  7 11488                   end;
  6 11489                   if d.opref.data(6)=0 then
  6 11490                   res:= hookon(talevej,rad_op,cs_radio(talevej));
  6 11491                   <* frigiv fra vogntabel hvis reserveret *>
  6 11492                   if (opgave<=4 or opgave=9) and
  6 11493                      (d.opref.data(3)=0 or d.opref.data(3)>2) then
  6 11494                   begin
  7 11495                     waitch(cs_vt_adgang,vt_op,true,-1);
  7 11496                     startoperation(vt_op,410+talevej,cs_radio(talevej),
  7 11497                       if opgave<=2 or opgave=9 then 17 else 18);
  7 11498                     d.vt_op.data(1):= if opgave<=2 or opgave=9 then
  7 11499                       (if vogn=0 then garage shift 14 + bus else
  7 11500                        if ll<>0 then ll else garage shift 14 + bus)
  7 11501                       else vogn;
  7 11502                     d.vt_op.data(4):= omr;
  7 11503                     signalch(cs_vt,vt_op,gen_optype or vt_optype);
  7 11504                     waitch(cs_radio(talevej),vt_op,vt_optype,-1);
  7 11505                     signalch(cs_vt_adgang,vt_op,true);
  7 11506                   end;
  6 11507                 end;
  5 11508                 signalch(d.opref.retur,opref,d.opref.optype);
  5 11509     \f

  5 11509     message procedure radio side 8 - 880930/cl;
  5 11510     
  5 11510               end <* opkald *>
  4 11511               else
  4 11512               if opgave = 10 <* MONITER *> then
  4 11513               begin
  5 11514                 nr:= d.opref.data(2);
  5 11515                 if nr shift (-20) <> 12 then 
  5 11516                   fejlreaktion(3,nr,<: moniter, kanalnr:>,0);
  5 11517                 nr:= nr extract 20;
  5 11518                 iaf:= (nr-1)*kanalbeskrlængde;
  5 11519                 inspect(ss_samtale_nedlagt(nr),i);
  5 11520                 k:= if kanal_tab.iaf.kanal_id2 shift (-20) = 12 then
  5 11521                       kanal_tab.iaf.kanal_id2 extract 20
  5 11522                     else
  5 11523                     if kanal_tab.iaf.kanal_id2<>0 then nr else 0;
  5 11524                 if k<>0 then inspect(ss_samtale_nedlagt(k),j) else j:=0;
  5 11525                 if kanal_tab.iaf.kanal_tilstand shift (-16) = talevej and
  5 11526                    (i<>0 or j<>0) then
  5 11527                 begin
  6 11528                   res:= 0;
  6 11529                   d.opref.data(5):= 12 shift 20 + k;
  6 11530                   d.opref.data(6):= 12 shift 20 + nr;
  6 11531                   sætbit_ia(kanalflag,operatør,1);
  6 11532                   goto radio_nedlæg;
  6 11533                 end
  5 11534                 else
  5 11535                 if i<>0 or j<>0 then
  5 11536                   res:= 49
  5 11537                 else
  5 11538                 if kanal_tab.iaf.kanal_tilstand extract 2 = 0 then
  5 11539                   res:= 49 <* ingen samtale igang *>
  5 11540                 else
  5 11541                 begin
  6 11542                   res:= hookoff(talevej,rad_op,cs_radio(talevej),false);
  6 11543                   if res=0 then
  6 11544                   begin
  7 11545                     start_operation(rad_op,410+talevej,cs_radio(talevej),
  7 11546                       'B' shift 12 + 60);
  7 11547                     d.rad_op.data(1):= talevej;
  7 11548                     d.rad_op.data(2):= 'V';
  7 11549                     d.rad_op.data(3):= 0;
  7 11550                     d.rad_op.data(4):= 1;
  7 11551                     d.rad_op.data(5):= 0;
  7 11552                     d.rad_op.data(10):=
  7 11553                       (kanal_id(nr) shift (-5) shift 18) +
  7 11554                       (kanal_id(nr) extract  5 shift 12) + 0;
  7 11555                     signalch(cs_radio_ud,rad_op,rad_optype);
  7 11556     <*V*>           waitch(cs_radio(talevej),rad_op,rad_optype,-1);
  7 11557                     res:= d.rad_op.resultat;
  7 11558                     if res=0 then
  7 11559                     begin
  8 11560                       d.opref.data(5):= 0;
  8 11561                       d.opref.data(6):= 3 shift 22 + 0 shift 20 + nr;
  8 11562                       d.opref.data(7):= kanal_tab.iaf.kanal_tilstand extract 10;
  8 11563                       res:= 3;
  8 11564                     end;
  7 11565                   end;
  6 11566                 end;
  5 11567     \f

  5 11567     message procedure radio side 9 - 880930/cl;
  5 11568                 if res=3 then
  5 11569                 begin
  6 11570                   if kanal_tab.iaf.kanal_tilstand shift (-16) = talevej then
  6 11571                     sætbiti(kanal_tab.iaf.kanal_tilstand,5,1) <* monbit *>
  6 11572                   else
  6 11573                     sætbit_ia(kanal_tab.iaf.kanal_mon_maske,talevej,1);
  6 11574                   d.opref.data(6):= 12 shift 20 + nr;
  6 11575                   i:= kanal_tab.iaf.kanal_id2;
  6 11576                   if i<>0 then
  6 11577                   begin
  7 11578                     if i shift (-20) = 12 then
  7 11579                     begin <* ident2 henviser til anden kanal *>
  8 11580                       iaf1:= ((i extract 20)-1)*kanalbeskrlængde;
  8 11581                       if kanal_tab.iaf1.kanal_tilstand shift (-16) = talevej then
  8 11582                         sætbiti(kanal_tab.iaf.kanal_tilstand,5,1)
  8 11583                       else
  8 11584                         sætbit_ia(kanal_tab.iaf.kanal_mon_maske,talevej,1);
  8 11585                       d.opref.data(5):= 12 shift 20 + i;
  8 11586                     end
  7 11587                     else
  7 11588                       d.opref.data(5):= 12 shift 20 + nr;
  7 11589                   end
  6 11590                   else
  6 11591                     d.opref.data(5):= 0;
  6 11592                 end;
  5 11593     
  5 11593                 if res<>3 then
  5 11594                 begin
  6 11595                   res:= 0;
  6 11596                   sætbit_ia(kanalflag,operatør,1);
  6 11597                   goto radio_nedlæg;
  6 11598                 end;
  5 11599                 d.opref.resultat:= res;
  5 11600                 signalch(d.opref.retur,opref,d.opref.optype);
  5 11601     \f

  5 11601     message procedure radio side 10 - 880930/cl;
  5 11602     
  5 11602               end <* MONITERING *>
  4 11603               else
  4 11604               if opgave = 11 then <* GENNEMSTILLING *>
  4 11605               begin
  5 11606                 nr:= d.opref.data(6) extract 20;
  5 11607                 k:= if d.opref.data(5) shift (-20) = 12 then
  5 11608                       d.opref.data(5) extract 20
  5 11609                     else
  5 11610                       0;
  5 11611                 inspect(ss_samtale_nedlagt(nr),i);
  5 11612                 if k<>0 then inspect(ss_samtale_nedlagt(k),j) else j:=0;
  5 11613                 if i<>0 and j<>0 then
  5 11614                 begin
  6 11615                   res:= hookon(talevej,rad_op,cs_radio(talevej));
  6 11616                   goto radio_nedlæg;
  6 11617                 end;
  5 11618     
  5 11618                 iaf:= (nr-1)*kanal_beskr_længde;
  5 11619                 if kanal_tab.iaf.kanal_tilstand shift (-16) = talevej then
  5 11620                 begin
  6 11621                   if læsbiti(kanal_tab.iaf.kanal_tilstand,5) and
  6 11622                      kanal_tab.iaf.kanal_tilstand extract 2 = 3
  6 11623                   then
  6 11624                     res:= hookoff(talevej,rad_op,cs_radio(talevej),true)
  6 11625                   else
  6 11626                   if kanal_tab.iaf.kanal_tilstand extract 2 = 1 and
  6 11627                      d.opref.data(5)<>0
  6 11628                   then
  6 11629                     res:= 0
  6 11630                   else
  6 11631                     res:= 21; <* ingen at gennemstille til *>
  6 11632                 end
  5 11633                 else
  5 11634                   res:= 50; <* kanalnr *>
  5 11635     
  5 11635                 if res=0 then
  5 11636                   res:= hookon(talevej,rad_op,cs_radio(talevej));
  5 11637                 if res=0 then
  5 11638                 begin
  6 11639                   sætbiti(kanal_tab.iaf.kanal_tilstand,5,0);
  6 11640                   kanal_tab.iaf.kanal_tilstand:=
  6 11641                     kanal_tab.iaf.kanal_tilstand shift (-2) shift 2 + 3;
  6 11642                   d.opref.data(6):= 0;
  6 11643                   if kanal_tab.iaf.kanal_id2=0 then
  6 11644                     kanal_tab.iaf.kanal_id2:= d.opref.data(5);
  6 11645     
  6 11645                   if kanal_tab.iaf.kanal_id2 shift (-22) = 3 then
  6 11646                   begin <* gennemstillet til anden kanal *>
  7 11647                     iaf1:= ((kanal_tab.iaf.kanal_id2 extract 20) - 1)
  7 11648                                                             *kanalbeskrlængde;
  7 11649                     sætbiti(kanal_tab.iaf1.kanal_tilstand,5,0);
  7 11650                     kanal_tab.iaf1.kanal_tilstand:=
  7 11651                       kanal_tab.iaf1.kanal_tilstand shift (-2) shift 2 + 3;
  7 11652                     if kanal_tab.iaf1.kanal_id2=0 then
  7 11653                       kanal_tab.iaf1.kanal_id2:= 12 shift 20 + nr;
  7 11654                   end;
  6 11655                   d.opref.data(5):= 0;
  6 11656     
  6 11656                   res:= 3;
  6 11657                 end;
  5 11658     
  5 11658                 d.opref.resultat:= res;
  5 11659                 signalch(d.opref.retur,opref,d.opref.optype);
  5 11660     \f

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

  2 11766     message procedure radio_ind side 1 - 810521/hko;
  2 11767     
  2 11767       procedure radio_ind(op);
  2 11768           value           op;
  2 11769           integer         op;
  2 11770         begin
  3 11771           integer array field op_ref,ref,io_opref;
  3 11772           integer ac, lgd, ttyp, ptyp, pnum, pos, tegn, bs, b_pt, b_pn,
  3 11773             antal_sendt, antal_spec, sum, csum, i, j, k, filref, zno;
  3 11774           integer array typ, val(1:6), answ, tlgr(1:32);
  3 11775           integer array field spec;
  3 11776           real field rf;
  3 11777           long array field laf;
  3 11778     
  3 11778           procedure skriv_radio_ind(zud,omfang);
  3 11779             value                       omfang;
  3 11780             zone                    zud;
  3 11781             integer                     omfang;
  3 11782             begin integer ii;
  4 11783               disable ii:=write(zud,"nl",1,<:+++ radio-ind ::>);
  4 11784               if omfang > 0 then
  4 11785               disable begin integer x; long array field tx;
  5 11786                 tx:= 0;
  5 11787                 trap(slut);
  5 11788                 write(zud,"nl",1,
  5 11789                   <:  op-ref:      :>,op_ref,"nl",1,
  5 11790                   <:  ref:         :>,ref,"nl",1,
  5 11791                   <:  io-opref:    :>,io_opref,"nl",1,
  5 11792                   <:  ac:          :>,ac,"nl",1,
  5 11793                   <:  lgd:         :>,lgd,"nl",1,
  5 11794                   <:  ttyp:        :>,ttyp,"nl",1,
  5 11795                   <:  ptyp:        :>,ptyp,"nl",1,
  5 11796                   <:  pnum:        :>,pnum,"nl",1,
  5 11797                   <:  pos:         :>,pos,"nl",1,
  5 11798                   <:  tegn:        :>,tegn,"nl",1,
  5 11799                   <:  bs:          :>,bs,"nl",1,
  5 11800                   <:  b-pt:        :>,b_pt,"nl",1,
  5 11801                   <:  b-pn:        :>,b_pn,"nl",1,
  5 11802                   <:  antal-sendt: :>,antal_sendt,"nl",1,
  5 11803                   <:  antal-spec:  :>,antal_spec,"nl",1,
  5 11804                   <:  sum:         :>,sum,"nl",1,
  5 11805                   <:  csum:        :>,csum,"nl",1,
  5 11806                   <:  i:           :>,i,"nl",1,
  5 11807                   <:  j:           :>,j,"nl",1,
  5 11808                   <:  k:           :>,k,"nl",1,
  5 11809                   <:  filref       :>,filref,"nl",1,
  5 11810                   <:  zno:         :>,zno,"nl",1,
  5 11811                   <:  answ:        :>,answ.tx,"nl",1,
  5 11812                   <:  tlgr:        :>,tlgr.tx,"nl",1,
  5 11813                   <:  spec:        :>,spec,"nl",1);
  5 11814                 trap(slut);
  5 11815     slut:
  5 11816               end; <*disable*>
  4 11817             end skriv_radio_ind;
  3 11818     \f

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

  6 11890     message procedure indsæt_opkald side 1a- 820301/hko;
  6 11891     
  6 11891               if d.vt_op.resultat=18<*bus i kø*> and type=2<*nød*> then
  6 11892               begin
  7 11893                 ref:=første_opkald;
  7 11894                 tilst:=-1;
  7 11895                 while ref<>0 and tilst=-1 do
  7 11896                 begin
  8 11897                   if opkaldskø.ref(2) extract 14 = bus extract 14 then
  8 11898                   begin <* udtag normalopkald *>
  9 11899                     næste:=opkaldskø.ref(1);
  9 11900                     forrige:=næste shift(-12);
  9 11901                     næste:=næste extract 12;
  9 11902                     if forrige<>0 then
  9 11903                       opkaldskø.forrige(1):=
  9 11904                         opkaldskø.forrige(1) shift(-12) shift 12 +næste
  9 11905                     else
  9 11906                       første_opkald:=næste;
  9 11907                     if næste<>0 then
  9 11908                       opkaldskø.næste(1):=
  9 11909                         opkaldskø.næste(1) extract 12 + forrige shift 12
  9 11910                     else
  9 11911                       sidste_opkald:=forrige;
  9 11912                     opkaldskø.ref(1):=første_frie_opkald;
  9 11913                     første_frie_opkald:=ref;
  9 11914                     opkaldskø_ledige:=opkaldskø_ledige +1;
  9 11915                     tilst:=0;
  9 11916                   end
  8 11917                   else
  8 11918                     ref:=opkaldskø.ref(1) extract 12;
  8 11919                 end; <*while*>
  7 11920                 if tilst=0 then
  7 11921                   d.vt_op.resultat:=3;
  7 11922               end; <*nødopkald bus i kø*>
  6 11923     \f

  6 11923     message procedure indsæt_opkald side 2 - 820304/hko;
  6 11924     
  6 11924               if d.vt_op.resultat = 3 then
  6 11925               begin
  7 11926                 ll:= d.vt_op.data(2);
  7 11927                 tilst:= d.vt_op.data(3);
  7 11928                 læstegn(radio_linietabel,(ll shift (-12) extract 10)+1,operatør);
  7 11929                 if operatør < 0 or max_antal_operatører < operatør then
  7 11930                   operatør:= 0;
  7 11931                 if operatør=0 then
  7 11932                   operatør:= (tilst shift (-14) extract 8);
  7 11933                 if operatør=0 then
  7 11934                   operatør:= radio_områdetabel(d.vt_op.data(4) extract 8);
  7 11935                 if operatør=0 or -,læsbit_ia(operatørmaske,operatør) then
  7 11936                   tofrom(opkaldsflag,alle_operatører,op_maske_lgd)
  7 11937                 else sæt_bit_ia(opkaldsflag,operatør,1);
  7 11938                 ref:= første_frie_opkald; <* forudsættes <> 0 *>
  7 11939                 første_frie_opkald:=opkaldskø.ref(1) extract 12; <*hægt ud*>
  7 11940                 forrige:= (if type = 1 then sidste_opkald
  7 11941                                        else sidste_nødopkald);
  7 11942                 opkaldskø.ref(1):= forrige shift 12;
  7 11943                 if type = 1 then
  7 11944                 begin
  8 11945                   if første_opkald = 0 then første_opkald:= ref;
  8 11946                   sidste_opkald:= ref;
  8 11947                 end
  7 11948                 else
  7 11949                 begin <*type = 2*>
  8 11950                   if første_nødopkald = 0 then første_nødopkald:= ref;
  8 11951                   sidste_nødopkald:= ref;
  8 11952                 end;
  7 11953                 if forrige <> 0 then
  7 11954                   opkaldskø.forrige(1):= opkaldskø.forrige(1) shift (-12)
  7 11955                                          shift 12 +ref;
  7 11956     
  7 11956                 opkaldskø.ref(2):= tilst extract 22 add
  7 11957                     (if type=2 then 1 shift 23 else 0);
  7 11958                 opkaldskø.ref(3):= ll;
  7 11959                 systime(5,0.0,r);
  7 11960                 ll:= round r//100;<*ttmm*>
  7 11961                 opkaldskø.ref(4):= ll shift 12 +type shift 8 +operatør extract 8;
  7 11962                 opkaldskø.ref(5):= sig shift 20 + omr;
  7 11963                 tofrom(opkaldskø.ref.opkald_meldt,ingen_operatører,op_maske_lgd);
  7 11964                 res:= 0;
  7 11965                 if type=2 then nød_opkald_brugt:=nødopkald_brugt + 1;
  7 11966                 opkaldskø_ledige:= opkaldskø_ledige -1;
  7 11967                 <*meddel opkald til berørte operatører *>
  7 11968                 signal_bin(bs_mobil_opkald);
  7 11969                 tæl_opkald(omr,type+1);
  7 11970               end <* resultat = 3 *>
  6 11971               else
  6 11972               begin
  7 11973     \f

  7 11973     message procedure indsæt_opkald side 3 - 810601/hko;
  7 11974     
  7 11974                 <* d.vt_op.resultat <> 3 *>
  7 11975     
  7 11975                 res:= d.vt_op.resultat;
  7 11976                 if res = 10 then
  7 11977                   fejlreaktion(20<*mobilopkald, bus *>,bus,
  7 11978                     <:er ikke i bustabel:>,1)
  7 11979                 else
  7 11980     <*+4*>      if res <> 14 and res <> 18 then
  7 11981                   fejlreaktion(19<*radio*>,res,<:busreservationsresultat:>,1);
  7 11982     <*-4*>
  7 11983                 ;
  7 11984               end;
  6 11985               signalbin(bs_opkaldskø_adgang);
  6 11986               signal_ch(cs_vt_adgang,vt_op,gen_optype or vt_optype);
  6 11987             end
  5 11988             else
  5 11989               res:= -2; <*timeout for cs_vt_adgang*>
  5 11990           end;
  4 11991           indsæt_opkald:= res;
  4 11992         end indsæt_opkald;
  3 11993     \f

  3 11993     message procedure afvent_telegram side 1 - 880901/cl;
  3 11994     
  3 11994     integer procedure afvent_telegram(tlgr,lgd,ttyp,ptyp,pnum);
  3 11995       integer array                   tlgr;
  3 11996       integer                              lgd,ttyp,ptyp,pnum;
  3 11997     begin
  4 11998       integer i, pos, tegn, ac, sum, csum;
  4 11999     
  4 11999       pos:= 1;
  4 12000       lgd:= 0;
  4 12001       ttyp:= 'Z';
  4 12002     <*V*> ac:= afvent_radioinput(z_fr_in,tlgr,false);
  4 12003       if ac >= 0 then
  4 12004       begin
  5 12005         lgd:= 1;
  5 12006         while læstegn(tlgr,lgd,tegn)<>0 do ;
  5 12007         lgd:= lgd-2;
  5 12008         if lgd >= 3 then
  5 12009         begin
  6 12010           i:= 1;
  6 12011           ttyp:= læstegn(tlgr,i,tegn);
  6 12012           ptyp:= læstegn(tlgr,i,tegn) - '@';
  6 12013           pnum:= læstegn(tlgr,i,tegn) - '@';
  6 12014         end
  5 12015         else ac:= 6; <* for kort telegram - retransmitter *>
  5 12016       end;
  4 12017     
  4 12017       afvent_telegram:= ac;
  4 12018     end;
  3 12019     \f

  3 12019     message procedure b_answ side 1 - 880901/cl;
  3 12020     
  3 12020     procedure b_answ(answ,ht,spec,more,ac);
  3 12021       value               ht,     more,ac;
  3 12022       integer array  answ,   spec;
  3 12023       boolean                     more;
  3 12024       integer             ht,          ac;
  3 12025     begin
  4 12026       integer pos, i, sum, tegn;
  4 12027     
  4 12027       pos:= 1;
  4 12028       skrivtegn(answ,pos,'B');
  4 12029       skrivtegn(answ,pos,if more then 'B' else ' ');
  4 12030       skrivtegn(answ,pos,ac+'@');
  4 12031       skrivtegn(answ,pos,spec(1) shift (-18) extract 6+'@');
  4 12032       skrivtegn(answ,pos,spec(1) shift (-12) extract 6+'@');
  4 12033       skrivtegn(answ,pos,'@');
  4 12034       skrivtegn(answ,pos,spec(1) shift (-8) extract 4+'@');
  4 12035       skrivtegn(answ,pos,spec(1) extract 8+'@');
  4 12036       for i:= 1 step 1 until spec(1) extract 8 do
  4 12037         if spec(1+i)=0 then skrivtegn(answ,pos,'@')
  4 12038         else
  4 12039         begin
  5 12040           skrivtegn(answ,pos,'D');
  5 12041           anbringtal(answ,pos,spec(1+i),-4);
  5 12042         end;
  4 12043       for i:= 1 step 1 until 4 do
  4 12044         skrivtegn(answ,pos,'@');
  4 12045       skrivtegn(answ,pos,ht+'@');
  4 12046       skrivtegn(answ,pos,'@');
  4 12047     
  4 12047       i:= 1; sum:= 0;
  4 12048       while i < pos do
  4 12049         sum:= (sum + læstegn(answ,i,tegn)) mod 256;
  4 12050       skrivtegn(answ,pos,(sum shift (-4)) extract 4 + '@');
  4 12051       skrivtegn(answ,pos,sum extract 4 + '@');
  4 12052       repeat skrivtegn(answ,pos,0) until (pos mod 6)=1;
  4 12053     end;
  3 12054     \f

  3 12054     message procedure ann_opkald side 1 - 881108/cl;
  3 12055     
  3 12055     integer procedure ann_opkald(vogn,omr);
  3 12056       value                      vogn,omr;
  3 12057       integer                    vogn,omr;
  3 12058     begin
  4 12059       integer array field vt_op,ref,næste,forrige;
  4 12060       integer res, t, i, o;
  4 12061     
  4 12061       waitch(cs_vt_adgang,vt_op,true,-1);
  4 12062       res:= -1;
  4 12063       wait(bs_opkaldskø_adgang);
  4 12064       ref:= første_nødopkald;
  4 12065       if ref <> 0 then
  4 12066         t:= 2
  4 12067       else
  4 12068       begin
  5 12069         ref:= første_opkald;
  5 12070         t:= if ref<>0 then 1 else 0;
  5 12071       end;
  4 12072     
  4 12072       if t=0 then
  4 12073         res:= 19 <* kø tom *>
  4 12074       else
  4 12075       begin
  5 12076         while ref<>0 and res=(-1) do
  5 12077         begin
  6 12078           if vogn=opkaldskø.ref(2) extract 14 and
  6 12079               omr=opkaldskø.ref(5) extract 8
  6 12080           then
  6 12081             res:= 0
  6 12082           else
  6 12083           begin
  7 12084             ref:= opkaldskø.ref(1) extract 12;
  7 12085             if ref=0 and t=2 then
  7 12086             begin
  8 12087               ref:= første_opkald;
  8 12088               t:= if ref=0 then 0 else 1;
  8 12089             end;
  7 12090           end;
  6 12091         end; <*while*>
  5 12092     \f

  5 12092     message procedure ann_opkald side 2 - 881108/cl;
  5 12093     
  5 12093         if ref<>0 then
  5 12094         begin
  6 12095           start_operation(vt_op,401,cs_radio_ind,17);
  6 12096           d.vt_op.data(1):= vogn;
  6 12097           d.vt_op.data(4):= omr;
  6 12098           signalch(cs_vt,vt_op,gen_optype or vt_optype);
  6 12099           waitch(cs_radio_ind,vt_op,vt_optype,-1);
  6 12100     
  6 12100           o:= opkaldskø.ref(4) extract 8;
  6 12101           næste:= opkaldskø.ref(1);
  6 12102           forrige:= næste shift (-12);
  6 12103           næste:= næste extract 12;
  6 12104           if forrige<>0 then
  6 12105             opkaldskø.forrige(1):= opkaldskø.forrige(1) shift (-12) shift 12
  6 12106                                    + næste
  6 12107           else
  6 12108           if t=2 then første_nødopkald:= næste
  6 12109           else første_opkald:= næste;
  6 12110     
  6 12110           if næste<>0 then
  6 12111             opkaldskø.næste(1):= opkaldskø.næste(1) extract 12
  6 12112                                  + forrige shift 12
  6 12113           else
  6 12114           if t=2 then sidste_nødopkald:= forrige
  6 12115           else sidste_opkald:= forrige;
  6 12116     
  6 12116           opkaldskø.ref(1):= første_frie_opkald;
  6 12117           første_frie_opkald:= ref;
  6 12118           opkaldskø_ledige:= opkaldskø_ledige + 1;
  6 12119           if t=2 then nødopkald_brugt:= nødopkald_brugt - 1;
  6 12120     
  6 12120           if -, læsbit_ia(operatør_maske,o) or o=0 then
  6 12121             tofrom(opkaldsflag,alle_operatører,op_maske_lgd)
  6 12122           else
  6 12123           begin
  7 12124             sætbit_ia(opkaldsflag,o,1);
  7 12125           end;
  6 12126           signalbin(bs_mobilopkald);
  6 12127         end;
  5 12128       end;
  4 12129     
  4 12129       signalbin(bs_opkaldskø_adgang);
  4 12130       signalch(cs_vt_adgang, vt_op, true);
  4 12131       ann_opkald:= res;
  4 12132     end;
  3 12133     \f

  3 12133     message procedure frigiv_id side 1 - 881114/cl;
  3 12134     
  3 12134     integer procedure frigiv_id(id,omr);
  3 12135       value                     id,omr;
  3 12136       integer                   id,omr;
  3 12137     begin
  4 12138       integer array field vt_op;
  4 12139     
  4 12139       if id shift (-22) < 3 and omr > 2 then
  4 12140       begin
  5 12141         waitch(cs_vt_adgang,vt_op,true,-1);
  5 12142         start_operation(vt_op,401,cs_radio_ind,
  5 12143           if id shift (-22) = 2 then 18 else 17);
  5 12144         d.vt_op.data(1):= id;
  5 12145         d.vt_op.data(4):= omr;
  5 12146         signalch(cs_vt,vt_op,vt_optype or gen_optype);
  5 12147         waitch(cs_radio_ind,vt_op,vt_optype,-1);
  5 12148         frigiv_id:= d.vt_op.resultat;
  5 12149         signalch(cs_vt_adgang,vt_op,true);
  5 12150       end;
  4 12151     end;
  3 12152     \f

  3 12152     message procedure radio_ind side 2 - 810524/hko;
  3 12153         trap(radio_ind_trap);
  3 12154         laf:= 0;
  3 12155         stack_claim((if cm_test then 200 else 150) +135+75);
  3 12156     
  3 12156     <*+2*>if testbit32 and overvåget or testbit28 then
  3 12157             skriv_radio_ind(out,0);
  3 12158     <*-2*>
  3 12159           answ.laf(1):= long<:<'nl'>:>;
  3 12160           io_opref:= op;
  3 12161     
  3 12161           repeat
  3 12162             ac:= afvent_telegram(tlgr,lgd,ttyp,ptyp,pnum);
  3 12163             pos:= 4;
  3 12164             if ac = 0 then
  3 12165             begin
  4 12166     \f

  4 12166     message procedure radio_ind side 3 - 881107/cl;
  4 12167               if ttyp = 'A' then
  4 12168               begin
  5 12169                 if ptyp<>4 or pnum<1 or pnum>max_antal_taleveje then
  5 12170                   ac:= 1
  5 12171                 else
  5 12172                 begin
  6 12173                   typ(1):= 1 shift 12 + (opkode - 1); <* eq shortint opgave *>
  6 12174                   val(1):= ttyp;
  6 12175                   typ(2):= 2 shift 12 + (data + 2);   <* eq integer  data(1) *>
  6 12176                   val(2):= pnum;
  6 12177                   typ(3):= -1;
  6 12178                   getch(cs_radio_ind,opref,rad_optype,typ,val);
  6 12179                   if opref>0 then
  6 12180                   begin
  7 12181                     if læstegn(tlgr,pos,tegn)<>'@' <*BST*> or
  7 12182                        læstegn(tlgr,pos,tegn)<>'A' <*PET*> or
  7 12183                        læstegn(tlgr,pos,tegn)<>d.opref.data(2)+'@' <*CTYP*> or
  7 12184                        læstegn(tlgr,pos,tegn)<>'@' <*TNO*>
  7 12185                     then
  7 12186                     begin
  8 12187                       ac:= 1; d.opref.resultat:= 31; <* systemfejl *>
  8 12188                     end
  7 12189                     else
  7 12190                     begin
  8 12191                       ac:= 0;
  8 12192                       d.opref.resultat:= 0;
  8 12193                       sætbit_ia(hookoff_maske,pnum,1);
  8 12194                     end;
  7 12195                     signalch(d.opref.retur,opref,d.opref.optype);
  7 12196                   end
  6 12197                   else
  6 12198                     ac:= 2;
  6 12199                 end;
  5 12200                 pos:= 1;
  5 12201                 skrivtegn(answ,pos,'A');
  5 12202                 skrivtegn(answ,pos,' ');
  5 12203                 skrivtegn(answ,pos,ac+'@');
  5 12204                 for i:= 1 step 1 until 5 do
  5 12205                   skrivtegn(answ,pos,'@');
  5 12206                 skrivtegn(answ,pos,'0');
  5 12207                 i:= 1; sum:= 0;
  5 12208                 while i < pos do
  5 12209                   sum:= (sum + læstegn(answ,i,tegn)) mod 256;
  5 12210                 skrivtegn(answ,pos,sum shift (-4) extract 4 + '@');
  5 12211                 skrivtegn(answ,pos,sum extract 4 + '@');
  5 12212                 repeat afsluttext(answ,pos) until pos mod 6 = 1;
  5 12213                 write(z_fr_out,"nl",1,answ.laf,"cr",1);
  5 12214     <*+2*>      if (testbit36 or testbit38) and overvåget then
  5 12215                 disable begin
  6 12216                   write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf);
  6 12217                   outchar(zrl,'nl');
  6 12218                 end;
  5 12219     <*-2*>
  5 12220                 disable setposition(z_fr_out,0,0);
  5 12221                 ac:= -1;
  5 12222     \f

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

  8 12281     message procedure radio_ind side 5 - 881107/cl;
  8 12282                     end
  7 12283                     else
  7 12284                     begin
  8 12285                       integer sig_type;
  8 12286     
  8 12286                       ac:= 0;
  8 12287                       antal_spec:= d.opref.data(4);
  8 12288                       filref:= d.opref.data(5);
  8 12289                       spec:= d.opref.data(6);
  8 12290                       if antal_spec>0 then
  8 12291                       begin
  9 12292                         antal_spec:= antal_spec-1;
  9 12293                         if filref<>0 then
  9 12294                         begin
 10 12295                           læsfil(filref,1,zno);
 10 12296                           b_pt:= fil(zno).spec(1) shift (-12);
 10 12297                           sig_type:= fil(zno).spec(1) shift (-8) extract 4;
 10 12298                           b_answ(answ,d.opref.data(3),fil(zno).spec,
 10 12299                             antal_spec>0,ac);
 10 12300                           spec:= spec + (fil(zno).spec(1) extract 8 + 1)*2;
 10 12301                         end
  9 12302                         else
  9 12303                         begin
 10 12304                           b_pt:= d.opref.spec(1) shift (-12);
 10 12305                           sig_type:= d.opref.spec(1) shift (-8) extract 4;
 10 12306                           b_answ(answ,d.opref.data(3),d.opref.spec,
 10 12307                             antal_spec>0,ac);
 10 12308                           spec:= spec + d.opref.spec(1) extract 8*2 + 2;
 10 12309                         end;
  9 12310      
  9 12310                         <* send answer *>
  9 12311     <*+2*>              if (testbit36 or testbit38) and overvåget then
  9 12312                         disable begin
 10 12313                           write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf);
 10 12314                           outchar(zrl,'nl');
 10 12315                         end;
  9 12316     <*-2*>
  9 12317                         write(z_fr_out,"nl",1,answ.laf,"cr",1);
  9 12318                         disable setposition(z_fr_out,0,0);
  9 12319                         if ac<>0 then
  9 12320                         begin
 10 12321                           antal_spec:= 0;
 10 12322                           ac:= -1;
 10 12323                         end
  9 12324                         else
  9 12325                         begin
 10 12326                           for i:= 1 step 1 until max_antal_områder do
 10 12327                           if område_id(i,2)=b_pt then
 10 12328                           begin
 11 12329                             j:= (if b_pt=3 and sig_type=2 then 0 else i);
 11 12330                             if sætbiti(d.opref.data(7),j,1)=0 then 
 11 12331                               d.opref.resultat:= d.opref.resultat + 1;
 11 12332                           end;
 10 12333                         end;
  9 12334                       end;
  8 12335     \f

  8 12335     message procedure radio_ind side 6 - 881107/cl;
  8 12336     
  8 12336                       <* afvent nyt telegram *>
  8 12337                       d.opref.data(4):= antal_spec;
  8 12338                       d.opref.data(6):= spec;
  8 12339                       ac:= -1;
  8 12340                       systime(1,0.0,d.opref.tid);
  8 12341     <*+2*>            if testbit37 and overvåget then
  8 12342                       disable begin
  9 12343                         skriv_radio_ind(out,0);
  9 12344                         write(out,<:radio-ind B-op retur på cs:>,<<d>,cs_radio_ind);                    skriv_op(out,opref);
  9 12345                         ud;
  9 12346                       end;
  8 12347     <*-2*>
  8 12348                       signalch(cs_radio_ind,opref,d.opref.optype);
  8 12349                     end;
  7 12350                   end
  6 12351                   else ac:= 2;
  6 12352                 end;
  5 12353                 if ac > 0 then
  5 12354                 begin
  6 12355                   for i:= 1 step 1 until 6 do val(i):= 0;
  6 12356                   b_answ(answ,0,val,false,ac);
  6 12357     <*+2*>
  6 12358                   if (testbit36 or testbit38) and overvåget then
  6 12359                   disable begin
  7 12360                     write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf);
  7 12361                     outchar(zrl,'nl');
  7 12362                   end;
  6 12363     <*-2*>
  6 12364                   write(z_fr_out,"nl",1,answ.laf,"cr",1);
  6 12365                   disable setposition(z_fr_out,0,0);
  6 12366                   ac:= -1;
  6 12367                 end;
  5 12368     \f

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

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

  5 12531     message procedure radio_ind side 9 - 881107/cl;
  5 12532               end <* ttyp = D *>
  4 12533               else
  4 12534               if ttyp='H' then
  4 12535               begin
  5 12536                 integer htyp;
  5 12537     
  5 12537                 htyp:= læstegn(tlgr,7+læstegn(tlgr,6,tegn)-'@',tegn);
  5 12538     
  5 12538                 if htyp='A' then
  5 12539                 begin <*mobilopkald*>
  6 12540                  if (ptyp=2 and pnum<>2) or (ptyp=3 and
  6 12541                    (pnum<1 or pnum>max_antal_radiokanaler)) then
  6 12542                      ac:= 1
  6 12543                  else
  6 12544                  begin
  7 12545                   b_pt:= læstegn(tlgr,5,tegn)-'@';
  7 12546                   if læstegn(tlgr,6,tegn)='D' then
  7 12547                   begin <*teknisk nr. i telegram*>
  8 12548                     b_pn:= 0;
  8 12549                     for i:= 1 step 1 until 4 do
  8 12550                       b_pn:= b_pn*10 + læstegn(tlgr,6+i,tegn)-'0';
  8 12551                   end
  7 12552                   else b_pn:= 0;
  7 12553                   bs:= læstegn(tlgr,9+læstegn(tlgr,6,tegn)-'@',tegn)-'@'+1;
  7 12554                                           <* opkaldstype *>
  7 12555                   j:= (if ptyp=2 then pabx_id(pnum) else radio_id(pnum));
  7 12556                   if j>0 then
  7 12557                   begin
  8 12558                     if bs=10 then
  8 12559                       ann_opkald(b_pn,j)
  8 12560                     else
  8 12561                       indsæt_opkald(b_pn,bs,j,if b_pt>1 then 1 else 0);
  8 12562                     ac:= 0;
  8 12563                   end else ac:= 1;
  7 12564                  end;
  6 12565     \f

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

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

  7 12704     message procedure radio_ind side 12 - 881107/cl;
  7 12705                   end
  6 12706                   else
  6 12707                   if tegn='H' then <*udkodning*>
  6 12708                   begin
  7 12709                     pos:= 10; i:= 0;
  7 12710                     while læstegn(tlgr,pos,tegn)>='0' and tegn<='9' and pos<=14 do
  7 12711                       i:= i*10 + (tegn-'0');
  7 12712                     b_pt:= i;
  7 12713                     b_pn:= 0;
  7 12714                     bs:= 12;
  7 12715                   end
  6 12716                   else
  6 12717                   if tegn='I' then <*slet tabel*>
  6 12718                   begin
  7 12719                     b_pt:= 1; b_pn:= 999; bs:= 19;
  7 12720                     pos:= 10; i:= 0;
  7 12721                     i:= hex_to_dec(læstegn(tlgr,pos,tegn))*16 +
  7 12722                         hex_to_dec(læstegn(tlgr,pos,tegn));
  7 12723                     zno:= i;
  7 12724                   end
  6 12725                   else ac:= 2;
  6 12726                   if ac<0 then
  6 12727                     ac:= 0
  6 12728                   else
  6 12729     
  6 12729                   if ac=0 then
  6 12730                   begin
  7 12731                     waitch(cs_vt_adgang,opref,true,-1);
  7 12732                     startoperation(opref,401,cs_vt_adgang,bs);
  7 12733                     d.opref.data(1):= b_pt;
  7 12734                     d.opref.data(2):= b_pn;
  7 12735                     d.opref.data(if bs=19 then 3 else 4):= zno;
  7 12736                     signalch(cs_vt,opref,gen_optype or vt_optype);
  7 12737                   end;
  6 12738                 end
  5 12739                 else
  5 12740                   ac:= 2;
  5 12741     
  5 12741                 pos:= 1;
  5 12742                 skrivtegn(answ,pos,'H');
  5 12743                 skrivtegn(answ,pos,' ');
  5 12744                 skrivtegn(answ,pos,ac+'@');
  5 12745                 i:= 1; sum:= 0;
  5 12746                 while i < pos do
  5 12747                   sum:= (sum + læstegn(answ,i,tegn)) mod 256;
  5 12748                 skriv_tegn(answ,pos, sum shift (-4) extract 4 +'@');
  5 12749                 skriv_tegn(answ,pos, sum extract 4 +'@');
  5 12750                 repeat afsluttext(answ,pos) until pos mod 6 = 1;
  5 12751     <*+2*>      if (testbit36 or testbit38) and overvåget then
  5 12752                 disable begin
  6 12753                   write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf);
  6 12754                   outchar(zrl,'nl');
  6 12755                 end;
  5 12756     <*-2*>
  5 12757                 write(z_fr_out,"nl",1,answ.laf,"cr",1);
  5 12758                 disable setposition(z_fr_out,0,0);
  5 12759                 ac:= -1;
  5 12760     \f

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

  5 12832     message procedure radio_ind side 14 - 881107/cl;
  5 12833               end
  4 12834               else
  4 12835               if ttyp='L' then
  4 12836               begin
  5 12837                 ac:= 0;
  5 12838     <****** RADIO-INFO meddelelser til hovedkonsol afhængig af testbi21 ******>
  5 12839                if testbit21 then
  5 12840                begin
  6 12841                 waitch(cs_radio_pulje,opref,true,-1);
  6 12842                 startoperation(opref,401,cs_radio_pulje,23);
  6 12843                 i:= 1;
  6 12844                 hægtstring(d.opref.data,i,<:radio-info: :>);
  6 12845                 j:= 4;
  6 12846                 while j<=lgd and i<(d.opref.opsize-data-2)//2*3 do
  6 12847                 begin
  7 12848                   skrivtegn(d.opref.data,i,læstegn(tlgr,j,tegn));
  7 12849                 end;
  6 12850                 repeat afsluttext(d.opref.data,i) until i mod 6 = 1;
  6 12851                 signalch(cs_io,opref,gen_optype or rad_optype);
  6 12852                end; <*testbit21*>
  5 12853               end
  4 12854               else
  4 12855               if ttyp='Z' then
  4 12856               begin
  5 12857     <*+2*>      if (testbit36 or testbit38) and overvåget then
  5 12858                 disable begin
  6 12859                   write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf); 
  6 12860                   outchar(zrl,'nl');
  6 12861                 end;
  5 12862     <*-2*>
  5 12863                 write(z_fr_out,"nl",1,answ.laf,"cr",1);
  5 12864                 disable setposition(z_fr_out,0,0);
  5 12865                 ac:= -1;
  5 12866               end
  4 12867               else
  4 12868                 ac:= 1;
  4 12869             end; <* telegram modtaget ok *>
  3 12870     \f

  3 12870     message procedure radio_ind side 15 - 881107/cl;
  3 12871             if ac>=0 then
  3 12872             begin
  4 12873               pos:= i:= 1; sum:= 0;
  4 12874               skrivtegn(answ,pos,ttyp);
  4 12875               skrivtegn(answ,pos,' ');
  4 12876               skrivtegn(answ,pos,ac+'@');
  4 12877               while i<pos do
  4 12878                 sum:= (sum+læstegn(answ,i,tegn)) mod 256;
  4 12879               skrivtegn(answ,pos, sum shift (-4) extract 4 + '@');
  4 12880               skrivtegn(answ,pos, sum extract 4 + '@');
  4 12881               repeat afsluttext(answ,pos) until pos mod 6 = 1;
  4 12882     <*+2*>    if (testbit36 or testbit38) and overvåget then
  4 12883               disable begin
  5 12884                 write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf); 
  5 12885                 outchar(zrl,'nl');
  5 12886               end;
  4 12887     <*-2*>
  4 12888               write(z_fr_out,"nl",1,answ.laf,"cr",1);
  4 12889               disable setposition(z_fr_out,0,0);
  4 12890               ac:= -1;
  4 12891             end;
  3 12892       
  3 12892             typ(1):= 0;
  3 12893             typ(2):= 1 shift 18 + 4 shift 12 + tid; <* lt real tid *>
  3 12894             rf:= 4;
  3 12895             systime(1,0.0,val.rf);
  3 12896             val.rf:= val.rf - 30.0;
  3 12897             typ(3):= -1;
  3 12898             repeat
  3 12899               getch(cs_radio_ind,opref,true,typ,val);
  3 12900               if opref>0 then
  3 12901               begin
  4 12902                 d.opref.resultat:= 53; <*annuleret*>
  4 12903                 signalch(d.opref.retur,opref,d.opref.optype);
  4 12904               end;
  3 12905             until opref=0;
  3 12906     
  3 12906           until false;
  3 12907     
  3 12907     radio_ind_trap:
  3 12908         
  3 12908           disable skriv_radio_ind(zbillede,1);
  3 12909       
  3 12909         end radio_ind;
  2 12910     \f

  2 12910     message procedure radio_ud side 1 - 820301/hko;
  2 12911     
  2 12911       procedure radio_ud(op);
  2 12912           value          op;
  2 12913           integer        op;
  2 12914         begin
  3 12915           integer array field opref,io_opref;
  3 12916           integer opgave, kode, pos, tegn, i, sum, rc, svar_status;
  3 12917           integer array answ, tlgr(1:32);
  3 12918           long array field laf;
  3 12919     
  3 12919           procedure skriv_radio_ud(z,omfang);
  3 12920             value                    omfang;
  3 12921             zone                   z;
  3 12922             integer                  omfang;
  3 12923             begin integer i1;
  4 12924               disable i1:= write(z,"nl",1,<:+++ radio-ud  ::>);
  4 12925               if omfang > 0 then
  4 12926               disable begin real x; long array field tx;
  5 12927                 tx:= 0;
  5 12928                 trap(slut);
  5 12929                 write(z,"nl",1,
  5 12930                     <:  opref:        :>,opref,"nl",1,
  5 12931                     <:  io-opref:     :>,io_opref,"nl",1,
  5 12932                     <:  opgave:       :>,opgave,"nl",1,
  5 12933                     <:  kode:         :>,kode,"nl",1,
  5 12934                     <:  pos:          :>,pos,"nl",1,
  5 12935                     <:  tegn:         :>,tegn,"nl",1,
  5 12936                     <:  i:            :>,i,"nl",1,
  5 12937                     <:  sum:          :>,sum,"nl",1,
  5 12938                     <:  rc:           :>,rc,"nl",1,
  5 12939                     <:  svar-status:  :>,svar_status,"nl",1,
  5 12940                     <:  tlgr:         ":>,tlgr.tx,<:":>,"nl",1,
  5 12941                     <:  answ:         ":>,answ.tx,<:":>,"nl",1,
  5 12942                     <::>);
  5 12943                skriv_coru(z,coru_no(402));
  5 12944     slut:
  5 12945              end; <*disable*>
  4 12946            end skriv_radio_ud;
  3 12947     
  3 12947           trap(radio_ud_trap);
  3 12948           laf:= 0;
  3 12949           stack_claim((if cm_test then 200 else 150) +35+100);
  3 12950     
  3 12950     <*+2*>if testbit32 and overvåget  or testbit28 then
  3 12951             skriv_radio_ud(out,0);
  3 12952     <*-2*>
  3 12953     
  3 12953           io_opref:= op;
  3 12954     \f

  3 12954     message procedure radio_ud side 2 - 810529/hko;
  3 12955     
  3 12955           repeat
  3 12956     
  3 12956     <*V*>   wait_ch(cs_radio_ud,op_ref,gen_optype or rad_optype,-1);
  3 12957             kode:= d.op_ref.opkode;
  3 12958             opgave:= kode shift(-12);
  3 12959             kode:= kode extract 12;
  3 12960             if opgave < 'A' or opgave > 'I' then
  3 12961             begin
  4 12962               d.opref.resultat:= 31;
  4 12963             end
  3 12964             else
  3 12965             begin
  4 12966               pos:= 1;
  4 12967               if opgave='A' or opgave='B' or opgave='D' or opgave='H' then
  4 12968               begin
  5 12969                 skrivtegn(tlgr,pos,opgave);
  5 12970                 if d.opref.data(1) = 0 then
  5 12971                 begin
  6 12972                   skrivtegn(tlgr,pos,'G');
  6 12973                   skrivtegn(tlgr,pos,'A');
  6 12974                 end
  5 12975                 else
  5 12976                 begin
  6 12977                   skrivtegn(tlgr,pos,'D');
  6 12978                   skrivtegn(tlgr,pos,d.opref.data(1)+'@'); <*talevejsnr*>
  6 12979                 end;
  5 12980                 if opgave='A' then
  5 12981                 begin
  6 12982                   skrivtegn(tlgr,pos,d.opref.data(2)+'@'); <*calltype*>
  6 12983                 end
  5 12984                 else
  5 12985                 if opgave='B' then
  5 12986                 begin
  6 12987                   skrivtegn(tlgr,pos,d.opref.data(2));
  6 12988                   if d.opref.data(2)='V' then
  6 12989                   begin
  7 12990                     skrivtegn(tlgr,pos,
  7 12991                         d.opref.data(10) shift (-18) extract 6+'@'); <*trunktype*>
  7 12992                     skrivtegn(tlgr,pos,
  7 12993                         d.opref.data(10) shift (-12) extract 6+'@'); <*trunknum.*>
  7 12994                   end;
  6 12995                   d.opref.data(7):= d.opref.data(8):= d.opref.data(9):= 0;
  6 12996                   d.opref.data(6):= if d.opref.data(5)<>0 then 2 else data+18;
  6 12997                 end
  5 12998                 else
  5 12999                 if opgave='H' then
  5 13000                 begin
  6 13001                   skrivtegn(tlgr,pos,d.opref.data(3)+'@'); <*trunktype*>
  6 13002                   skrivtegn(tlgr,pos,d.opref.data(4)+'@'); <*trunknum.*>
  6 13003                   hægtstring(tlgr,pos,<:@@@:>);
  6 13004                   skrivtegn(tlgr,pos,d.opref.data(2)); <*H_tlgr_type*>
  6 13005                   skrivtegn(tlgr,pos,'A');
  6 13006                   skrivtegn(tlgr,pos,(if d.opref.data(2)='L' and
  6 13007                      d.opref.data(5)=8 then 7 else d.opref.data(5))+'@'); 
  6 13008                   if d.opref.data(2)='L' then
  6 13009                   begin
  7 13010                     if d.opref.data(5)=7 then
  7 13011                     begin
  8 13012                       anbringtal(tlgr,pos,
  8 13013                         d.opref.data(8) shift (-12) extract 10,-4);
  8 13014                       anbringtal(tlgr,pos,
  8 13015                         d.opref.data(8) extract 7,-2);
  8 13016                     end
  7 13017                     else
  7 13018                     if d.opref.data(5)=8 then
  7 13019                     begin
  8 13020                       hægtstring(tlgr,pos,<:FFFFFF:>);
  8 13021                     end;
  7 13022                     if d.opref.data(5)<>9 then
  7 13023                       anbringtal(tlgr,pos,d.opref.data(7),-4);
  7 13024                     skrivtegn(tlgr,pos,
  7 13025                       dec_to_hex(d.opref.data(6) shift (-4) extract 4));
  7 13026                     skrivtegn(tlgr,pos,
  7 13027                       dec_to_hex(d.opref.data(6) extract 4));
  7 13028                     skrivtegn(tlgr,10,pos-11+'@');
  7 13029                   end;
  6 13030                 end;
  5 13031               end
  4 13032               else
  4 13033               if opgave='I' then
  4 13034               begin
  5 13035                 hægtstring(tlgr,pos,<:IGA:>);
  5 13036               end
  4 13037               else d.opref.resultat:= 31; <*systemfejl*>
  4 13038             end;
  3 13039     \f

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

  4 13106     message procedure radio_ud side 5 - 881107/cl;
  4 13107     
  4 13107     radio_ud_check:
  4 13108                 rc:= rc+1;
  4 13109                 if -3<=svar_status and svar_status< -1 then
  4 13110                 disable begin
  5 13111                   write(z_rf_out,<:<'nl'>Z@@MJ<'cr'>:>);
  5 13112                   setposition(z_rf_out,0,0);
  5 13113     <*+2*>        if (testbit36 or testbit39) and overvåget then
  5 13114                   begin
  6 13115                     write(zrl,<<zd dd dd.dd >,now,<:rf-tlgr: Z@@MJ:>);
  6 13116                     outchar(zrl,'nl');
  6 13117                   end;
  5 13118     <*-2*>
  5 13119                 end
  4 13120                 else
  4 13121                 if svar_status=6 or svar_status=(-4) or svar_status=(-1) then
  4 13122                 disable begin
  5 13123                   write(z_rf_out,"nl",1,tlgr.laf,"cr",1);
  5 13124                   setposition(z_rf_out,0,0);
  5 13125     <*+2*>        if (testbit36 or testbit39) and overvåget then
  5 13126                   begin
  6 13127                     write(zrl,<<zd dd dd.dd >,now,<:rf-tlgr: :>,
  6 13128                       tlgr.laf,<: (repeat):>); outchar(zrl,'nl');
  6 13129                   end;
  5 13130     <*-2*>
  5 13131                 end
  4 13132                 else
  4 13133                 if svar_status=0 and opref<>0 then
  4 13134                   d.opref.resultat:= 0
  4 13135                 else
  4 13136                 if opref<>0 then
  4 13137                   d.opref.resultat:= 31;
  4 13138               until svar_status=0 or rc>3;
  4 13139             end;
  3 13140             if opref<>0 then
  3 13141             begin
  4 13142               if svar_status<>0 and rc>3 then
  4 13143                 d.opref.resultat:= 53; <* annulleret *>
  4 13144               signalch(d.opref.retur,opref,d.opref.optype);
  4 13145               opref:= 0;
  4 13146             end;
  3 13147           until false;
  3 13148     
  3 13148     radio_ud_trap:
  3 13149     
  3 13149           disable skriv_radio_ud(zbillede,1);
  3 13150     
  3 13150         end radio_ud;
  2 13151     \f

  2 13151     message procedure radio_medd_opkald side 1 - 810610/hko;
  2 13152     
  2 13152       procedure radio_medd_opkald;
  2 13153         begin
  3 13154           integer array field ref,op_ref;
  3 13155           integer i;
  3 13156     
  3 13156           procedure skriv_radio_medd_opkald(z,omfang);
  3 13157             value                             omfang;
  3 13158             zone                            z;
  3 13159             integer                           omfang;
  3 13160             begin integer x;
  4 13161               disable x:= write(z,"nl",1,<:+++ radio-medd-opkald:>);
  4 13162               write(z,"sp",26-x);
  4 13163               if omfang > 0 then
  4 13164               disable begin
  5 13165                 trap(slut);
  5 13166                 write(z,"nl",1,
  5 13167                   <:  ref:    :>,ref,"nl",1,
  5 13168                   <:  opref:  :>,op_ref,"nl",1,
  5 13169                   <:  i:      :>,i,"nl",1,
  5 13170                   <::>);
  5 13171                 skriv_coru(z,abs curr_coruno);
  5 13172     slut:
  5 13173               end;<*disable*>
  4 13174             end skriv_radio_medd_opkald;
  3 13175     
  3 13175           trap(radio_medd_opkald_trap);
  3 13176     
  3 13176           stack_claim((if cm_test then 200 else 150) +1);
  3 13177     
  3 13177     <*+2*>if testbit32 and overvåget or testbit28 then
  3 13178             disable skriv_radio_medd_opkald(out,0);
  3 13179     <*-2*>
  3 13180     \f

  3 13180     message procedure radio_medd_opkald side 2 - 820301/hko;
  3 13181     
  3 13181           repeat
  3 13182     
  3 13182     <*V*>   wait(bs_mobil_opkald);
  3 13183     <*V*>   wait_ch(cs_radio_medd,op_ref,genoptype or rad_optype,-1);
  3 13184     <*V*>   wait(bs_opkaldskø_adgang);
  3 13185     
  3 13185             ref:= første_nød_opkald;
  3 13186             while ref <> 0 do <* meld ikke meldt nødopkald til io *>
  3 13187             begin
  4 13188               i:= opkaldskø.ref(2);
  4 13189               if i < 0 then
  4 13190               begin
  5 13191                 <* nødopkald ikke meldt *>
  5 13192     
  5 13192                 start_operation(op_ref,403,cs_radio_medd,45<*nødop.modt.*>);
  5 13193                 d.op_ref.data(1):= <* vogn_id *>
  5 13194                   if opkaldskø.ref(3)<>0 then opkaldskø.ref(3) else i extract 22;
  5 13195                 opkaldskø.ref(2):= i extract 22;
  5 13196                 d.op_ref.data(2):= opkaldskø.ref(4) shift(-12); <* ttmm *>
  5 13197                 d.op_ref.data(3):= opkaldskø.ref(5) extract 20;
  5 13198                 i:= op_ref;
  5 13199     <*+2*>      if testbit35 and overvåget then
  5 13200                 disable begin
  6 13201                   write(out,"nl",1,<:radio nød-medd:>);
  6 13202                   skriv_op(out,op_ref);
  6 13203                   ud;
  6 13204                 end;
  5 13205     <*-2*>
  5 13206                 signal_ch(cs_io,op_ref,gen_optype or rad_optype);
  5 13207     <*V*>       wait_ch(cs_radio_medd,op_ref,rad_optype,-1);
  5 13208     <*+4*>      if i <> op_ref then
  5 13209                   fejlreaktion(11<*fremmed post*>,i,<:radio io/medd:>,0);
  5 13210     <*-4*>
  5 13211               end;<*nødopkald ikke meldt*>
  4 13212     
  4 13212               ref:= opkaldskø.ref(1) extract 12;
  4 13213             end; <* melding til io *>
  3 13214     \f

  3 13214     message procedure radio_medd_opkald side 3 - 820304/hko;
  3 13215     
  3 13215             start_operation(op_ref,403,cs_radio_medd,
  3 13216                             40<*opdater opkaldskøbill*>);
  3 13217             signal_bin(bs_opkaldskø_adgang);
  3 13218     <*+2*>  if testbit35 and overvåget then
  3 13219             disable begin
  4 13220               write(out,"nl",1,<:radio opdater opkaldskø-billede:>);
  4 13221               skriv_op(out,op_ref);
  4 13222               write(out,       <:opkaldsflag: :>,"nl",1);
  4 13223               outintbits_ia(out,opkaldsflag,1,op_maske_lgd//2);
  4 13224               write(out,"nl",1,<:kanalflag:   :>,"nl",1);
  4 13225               outintbits_ia(out,kanalflag,1,op_maske_lgd//2);
  4 13226               write(out,"nl",1,<:samtaleflag: :>,"nl",1);
  4 13227               outintbits_ia(out,samtaleflag,1,op_maske_lgd//2);
  4 13228               ud;
  4 13229             end;
  3 13230     <*-2*>
  3 13231             signal_ch(cs_op,op_ref,gen_optype or rad_optype);
  3 13232     
  3 13232           until false;
  3 13233     
  3 13233     radio_medd_opkald_trap:
  3 13234     
  3 13234           disable skriv_radio_medd_opkald(zbillede,1);
  3 13235     
  3 13235         end radio_medd_opkald;
  2 13236     \f

  2 13236     message procedure radio_adm side 1 - 820301/hko;
  2 13237     
  2 13237       procedure radio_adm(op);
  2 13238       value               op;
  2 13239       integer             op;
  2 13240         begin
  3 13241           integer array field opref, rad_op, iaf;
  3 13242           integer nr,i,j,k,res,opgave,tilst,operatør;
  3 13243     
  3 13243           procedure skriv_radio_adm(z,omfang);
  3 13244             value                 omfang;
  3 13245             zone                z;
  3 13246             integer               omfang;
  3 13247             begin integer i1;
  4 13248               disable i1:= write(z,"nl",1,<:+++ radio-adm:>);
  4 13249               write(z,"sp",26-i1);
  4 13250               if omfang > 0 then
  4 13251               disable begin real x;
  5 13252                 trap(slut);
  5 13253     \f

  5 13253     message procedure radio_adm side 2- 820301/hko;
  5 13254     
  5 13254                 write(z,"nl",1,
  5 13255                   <:  op_ref:    :>,op_ref,"nl",1,
  5 13256                   <:  iaf:       :>,iaf,"nl",1,
  5 13257                   <:  rad-op:    :>,rad_op,"nl",1,
  5 13258                   <:  nr:        :>,nr,"nl",1,
  5 13259                   <:  i:         :>,i,"nl",1,
  5 13260                   <:  j:         :>,j,"nl",1,
  5 13261                   <:  k:         :>,k,"nl",1,
  5 13262                   <:  tilst:     :>,tilst,"nl",1,
  5 13263                   <:  res:       :>,res,"nl",1,
  5 13264                   <:  opgave:    :>,opgave,"nl",1,
  5 13265                   <:  operatør:  :>,operatør,"nl",1);
  5 13266                 skriv_coru(z,coru_no(404));
  5 13267     slut:
  5 13268               end;<*disable*>
  4 13269             end skriv_radio_adm;
  3 13270     \f

  3 13270     message procedure radio_adm side 3 - 820304/hko;
  3 13271     
  3 13271           rad_op:= op;
  3 13272     
  3 13272           trap(radio_adm_trap);
  3 13273           stack_claim((if cm_test then 200 else 150) +50);
  3 13274     
  3 13274     <*+2*>if testbit32 and overvåget or testbit28 then
  3 13275             skriv_radio_adm(out,0);
  3 13276     <*-2*>
  3 13277     
  3 13277           pass;
  3 13278           if -,testbit22 then
  3 13279           begin
  4 13280             startoperation(rad_op,404,cs_radio_adm,'I' shift 12 + 60);
  4 13281             signalch(cs_radio_ud,rad_op,rad_optype);
  4 13282             waitch(cs_radio_adm,rad_op,rad_optype,-1);
  4 13283           end;
  3 13284           repeat
  3 13285             waitch(cs_radio_adm,opref,true,-1);
  3 13286     <*+2*>
  3 13287             if testbit33 and overvåget then
  3 13288             disable begin
  4 13289               skriv_radio_adm(out,0);
  4 13290               write(out,<: operation modtaget på cs:>,<<d>,cs_radio_adm);
  4 13291               skriv_op(out,opref);
  4 13292             end;
  3 13293     <*-2*>
  3 13294     
  3 13294             k:= d.op_ref.opkode extract 12;
  3 13295             opgave:= d.opref.opkode shift (-12);
  3 13296             nr:=operatør:=d.op_ref.data(1);
  3 13297     
  3 13297     <*+4*>  if (d.op_ref.optype and
  3 13298                   (gen_optype or io_optype or op_optype or vt_optype))
  3 13299               extract 12 = 0 then fejlreaktion(12<*operationstype*>,op_ref,
  3 13300                                     <:radio_adm:>,0);
  3 13301     <*-4*>
  3 13302             if k = 74 <* RA,I *> then
  3 13303             begin
  4 13304               startoperation(rad_op,404,cs_radio_adm,'I' shift 12 + 60);
  4 13305               signalch(cs_radio_ud,rad_op,rad_optype);
  4 13306               waitch(cs_radio_adm,rad_op,rad_optype,-1);
  4 13307               d.opref.resultat:= if d.rad_op.resultat=0 then 3
  4 13308                                  else d.rad_op.resultat;
  4 13309               signalch(d.opref.retur,opref,d.opref.optype);
  4 13310     \f

  4 13310     message procedure radio_adm side 4 - 820301/hko;
  4 13311             end
  3 13312             else
  3 13313     
  3 13313             if k = 1<*IN,O*> or k = 2<*EK,O*> or k = 77<*FO,O*> or
  3 13314                k = 5<*FO,L*> or k = 6<*ST  *>                   then
  3 13315             begin
  4 13316               if k = 5 or k=77 then
  4 13317               begin
  5 13318     
  5 13318     <*V*>       wait(bs_opkaldskø_adgang);
  5 13319                 if k=5 then
  5 13320                 begin
  6 13321                   disable for iaf:= 0 step 512 until (max_linienr//768*512) do
  6 13322                   begin
  7 13323                     i:= læs_fil(1035,iaf//512+1,nr);
  7 13324                     if i <> 0 then
  7 13325                       fejlreaktion(5<*læs_fil*>,i,<:liniefordelingstabel:>,0);
  7 13326                     tofrom(radio_linietabel.iaf,fil(nr),
  7 13327                       if (((max_linienr+1 - (iaf//2*3))+2)//3*2) > 512 then 512
  7 13328                       else ((max_linienr+1 - (iaf//2*3))+2)//3*2);
  7 13329                   end;
  6 13330     
  6 13330                   for i:= 1 step 1 until max_antal_mobilopkald do
  6 13331                   begin
  7 13332                     iaf:= i*opkaldskø_postlængde;
  7 13333                     nr:= opkaldskø.iaf(3) shift (-12) extract 10; <*linienr*>
  7 13334                     if nr>0 then
  7 13335                     begin
  8 13336                       læs_tegn(radio_linietabel,nr+1,operatør);
  8 13337                       if operatør>max_antal_operatører then operatør:= 0;
  8 13338                       opkaldskø.iaf(4):= opkaldskø.iaf(4) shift(-8) shift 8 +
  8 13339                                          operatør;
  8 13340                     end;
  7 13341                   end;
  6 13342                 end
  5 13343                 else
  5 13344                 if k=77 then
  5 13345                 begin
  6 13346                   disable i:= læsfil(1034,1,nr);
  6 13347                   if i<>0 then fejlreaktion(5,i,<:områdefordelingstabel:>,0);
  6 13348                   tofrom(radio_områdetabel,fil(nr),max_antal_områder*2);
  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(5) extract 4;
  7 13353                     operatør:= radio_områdetabel(nr);
  7 13354                     if operatør < 0 or max_antal_operatører < operatør then
  7 13355                       operatør:= 0;
  7 13356                     if opkaldskø.iaf(4) extract 8=0 and
  7 13357                        opkaldskø.iaf(3) shift (-12) extract 10 = 0 then
  7 13358                           opkaldskø.iaf(4):= opkaldskø.iaf(4) shift(-8) shift 8 +
  7 13359                                              operatør;
  7 13360                   end;
  6 13361                 end;
  5 13362     
  5 13362                 tofrom(opkaldsflag,alle_operatører,op_maske_lgd);
  5 13363                 signal_bin(bs_opkaldskø_adgang);
  5 13364     
  5 13364                 signal_bin(bs_mobil_opkald);
  5 13365     
  5 13365                 d.op_ref.resultat:= res:= 3;
  5 13366     \f

  5 13366     message procedure radio_adm side 5 - 820304/hko;
  5 13367     
  5 13367               end <*k = 5 / k = 77*>
  4 13368               else
  4 13369               begin <*k =1,2 eller 6 (IN,O - EK,O eller ST) *>
  5 13370                 res:= 3;
  5 13371                 for nr:= 1 step 1 until max_antal_kanaler do
  5 13372                 begin
  6 13373                   iaf:= (nr-1)*kanal_beskr_længde;
  6 13374                   if kanal_tab.iaf.kanal_tilstand shift (-16) = 
  6 13375                                                   op_talevej(operatør) then
  6 13376                   begin
  7 13377                     tilst:= kanal_tab.iaf.kanal_tilstand extract 2;
  7 13378                     if tilst <> 0 then
  7 13379                       res:= 16; <*skærm optaget*>
  7 13380                   end; <* kanal_tab(operatør) = operatør*>
  6 13381                 end;
  5 13382                 tofrom(opkaldsflag,alle_operatører,op_maske_lgd);
  5 13383                 sæt_bit_ia(opkaldsflag,operatør,k extract 1);
  5 13384                 signal_bin(bs_mobil_opkald);
  5 13385                 d.op_ref.resultat:= res;
  5 13386               end;<*k=1,2 eller 6 *>
  4 13387     
  4 13387     <*+2*>    if testbit35 and overvåget then
  4 13388               disable begin
  5 13389                 skriv_radio_adm(out,0);
  5 13390                 write(out,<: sender til :>,
  5 13391                   if k=5 or k=6 or k=77 or res > 3 then d.op_ref.retur
  5 13392                     else cs_op);
  5 13393                 skriv_op(out,op_ref);
  5 13394               end;
  4 13395     <*-2*>
  4 13396     
  4 13396               if k=5 or k=6 or k=77 or res > 3 then
  4 13397                 signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype)
  4 13398               else
  4 13399               begin <*k = (1 eller 2) og res = 3 *>
  5 13400                 d.op_ref.resultat:=0;
  5 13401                 signal_ch(cs_op,op_ref,d.op_ref.optype);
  5 13402               end;
  4 13403     \f

  4 13403     message procedure radio_adm side 6 - 816610/hko;
  4 13404     
  4 13404             end <*k=1,2,5 eller 6*>
  3 13405             else
  3 13406             if k=3 <*IN,R*> or k=4 <*EK,R*> then
  3 13407             begin
  4 13408               nr:= d.op_ref.data(1);
  4 13409               res:= 3;
  4 13410     
  4 13410               if nr<=3 then
  4 13411                 res:= 51 <* afvist *>
  4 13412               else
  4 13413               begin
  5 13414     
  5 13414                 <* gennemstilling af område *>
  5 13415                 j:= 1;
  5 13416                 for i:= 1 step 1 until max_antal_kanaler do
  5 13417                 begin
  6 13418                   if kanal_id(i) shift (-5) extract 3 = 3 and
  6 13419                      radio_id(kanal_id(i) extract 5) = nr then j:= i;
  6 13420                 end;
  5 13421                 nr:= j;
  5 13422                 iaf:= (nr-1)*kanalbeskrlængde;
  5 13423                 if læsbiti(kanal_tab.iaf.kanal_tilstand,11) == (k=4) then
  5 13424                 begin
  6 13425                   startoperation(radop,404,cs_radio_adm,'H' shift 12 + 60);
  6 13426                   d.rad_op.data(1):= 0;
  6 13427                   d.rad_op.data(2):= 'G'; <* gennemstil område *>
  6 13428                   d.rad_op.data(3):= kanal_id(nr) shift (-5) extract 3;
  6 13429                   d.rad_op.data(4):= kanal_id(nr) extract 5;
  6 13430                   d.rad_op.data(5):= k extract 1; <* set/slet gennemstilling *>
  6 13431                   signalch(cs_radio_ud,rad_op,rad_optype);
  6 13432                   waitch(cs_radio_adm,rad_op,rad_optype,-1);
  6 13433                   res:= d.rad_op.resultat;
  6 13434                   if res=0 then res:= 3;
  6 13435                   sætbiti(kanal_tab.iaf.kanal_tilstand,11,k extract 1);
  6 13436                   sætbiti(kanal_tab.iaf.kanal_tilstand,10,k extract 1);
  6 13437                 end;
  5 13438               end;
  4 13439               d.op_ref.resultat:=res;
  4 13440               signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  4 13441               tofrom(kanalflag,alle_operatører,op_maske_lgd);
  4 13442               signal_bin(bs_mobil_opkald);
  4 13443     \f

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

  2 13505     message vogntabel erklæringer side 1 - 820301/cl;
  2 13506     
  2 13506     integer cs_vt, cs_vt_adgang,cs_vt_logpool,cs_vt_opd,cs_vt_rap,
  2 13507             cs_vt_tilst,cs_vt_auto,cs_vt_grp,cs_vt_spring,vt_op,
  2 13508             cs_vt_log;
  2 13509     integer sidste_bus,sidste_linie_løb,tf_vogntabel,
  2 13510             max_antal_i_gruppe,tf_gruppedef,tf_gruppeidenter,tf_springdef,
  2 13511             vt_log_slicelgd;
  2 13512     integer array bustabel,bustabel1(0:max_antal_busser),
  2 13513                   linie_løb_tabel(0:max_antal_linie_løb),
  2 13514                   springtabel(1:max_antal_spring,1:3),
  2 13515                   gruppetabel(1:max_antal_grupper),
  2 13516                   gruppeopkald(1:max_antal_gruppeopkald,1:2), <* ident , filref *>
  2 13517                   vt_logop(1:2),
  2 13518                   vt_logdisc(1:4),
  2 13519                   vt_log_tail(1:10);
  2 13520     boolean array busindeks(-1:max_antal_linie_løb),
  2 13521                   bustilstand(-1:max_antal_busser),
  2 13522                   linie_løb_indeks(-1:max_antal_busser);
  2 13523     real array springtid,springstart(1:max_antal_spring);
  2 13524     real          vt_logstart;
  2 13525     integer field v_kode,v_bus,v_ll1,v_ll2;
  2 13526     integer array field v_tekst;
  2 13527     real field v_tid;
  2 13528     
  2 13528     zone zvtlog(128,1,stderror);
  2 13529     
  2 13529     \f

  2 13529     message vogntabel erklæringer side 2 - 851001/cl;
  2 13530     
  2 13530     procedure skriv_vt_variable(zud);
  2 13531       zone                      zud;
  2 13532     begin integer i; long array field laf;
  3 13533       laf:= 0;
  3 13534       write(zud,"nl",1,<:+++++ vogntabel variable::>,"nl",1,<<d>,
  3 13535         <:vt-op-længde       :>,vt_op_længde,"nl",1,
  3 13536         <:cs-vt              :>,cs_vt,"nl",1,
  3 13537         <:cs-vt-adgang       :>,cs_vt_adgang,"nl",1,
  3 13538         <:cs-vt-logpool      :>,cs_vt_logpool,"nl",1,
  3 13539         <:cs-vt-opd          :>,cs_vt_opd,"nl",1,
  3 13540         <:cs-vt-rap          :>,cs_vt_rap,"nl",1,
  3 13541         <:cs-vt-tilst        :>,cs_vt_tilst,"nl",1,
  3 13542         <:cs-vt-auto         :>,cs_vt_auto,"nl",1,
  3 13543         <:cs-vt-grp          :>,cs_vt_grp,"nl",1,
  3 13544         <:cs-vt-spring       :>,cs_vt_spring,"nl",1,
  3 13545         <:cs-vt-log          :>,cs_vt_log,"nl",1,
  3 13546         <:vt-op              :>,vt_op,"nl",1,
  3 13547         <:vt-logop(1)        :>,vt_logop(1),"nl",1,
  3 13548         <:vt-logop(2)        :>,vt_logop(2),"nl",1,
  3 13549         <:sidste-bus         :>,sidste_bus,"nl",1,
  3 13550         <:sidste-linie-løb   :>,sidste_linie_løb,"nl",1,
  3 13551         <:max-antal-i-gruppe :>,max_antal_i_gruppe,"nl",1,
  3 13552         <:tf-vogntabel       :>,tf_vogntabel,"nl",1,
  3 13553         <:tf-gruppedef       :>,tf_gruppedef,"nl",1,
  3 13554         <:tf-gruppeidenter   :>,tf_gruppeidenter,"nl",1,
  3 13555         <:tf-springdef       :>,tf_springdef,"nl",1,
  3 13556         <:vt-logskift        :>,vt_logskift,"nl",1,
  3 13557         <:vt-logdisc         :>,vt_logdisc.laf,"nl",1,
  3 13558         <:vt-log-slicelgd    :>,vt_log_slicelgd,"nl",1,
  3 13559         <:vt-log-aktiv       :>,
  3 13560            if vt_log_aktiv then <:true:> else <:false:>,"nl",1,
  3 13561         <:vt-logstart        :>,<<zdddddd.dd>,vt_logstart,"nl",1,
  3 13562         <::>);
  3 13563       write(zud,"nl",1,<:vt-logtail:<'nl'>:>);
  3 13564       laf:= 2;
  3 13565       write(zud,"sp",2,<<d>,vt_logtail(1),"sp",1,vt_logtail.laf);
  3 13566       for i:= 6 step 1 until 10 do
  3 13567         write(zud,"sp",1,<<d>,vt_logtail(i));
  3 13568       write(zud,"nl",1);
  3 13569     end;
  2 13570     \f

  2 13570     message procedure p_vogntabel side 1 - 820301/cl;
  2 13571     
  2 13571     procedure p_vogntabel(z);
  2 13572       zone z;
  2 13573     begin
  3 13574       integer i,b,s,o,t,li,lb,lø,g;
  3 13575       write(z,<:<10>***** udskrift af vogntabel *****<10>:>,
  3 13576         <:<10>max-antal-busser =:>,max_antal_busser,<:  sidste-bus =:>,
  3 13577         sidste_bus,<:<10>max-antal-linie-løb =:>,max_antal_linie_løb,
  3 13578         <:  sidste-linie-løb =:>,sidste_linie_løb,"nl",1);
  3 13579     
  3 13579       for i:= 1 step 1 until sidste_bus do
  3 13580       begin
  4 13581         b:= bustabel(i) extract 14;
  4 13582         g:= bustabel(i) shift (-14);
  4 13583         s:= bustabel1(i) shift (-23);
  4 13584         o:= bustabel1(i) extract 8;
  4 13585         t:= intg(bustilstand(i));
  4 13586         li:= linie_løb_tabel(linie_løb_indeks(i) extract 12);
  4 13587         lø:= li extract 7;
  4 13588         lb:= li shift (-7) extract 5;
  4 13589         lb:= if lb=0 then 32 else lb+64;
  4 13590         li:= li shift (-12) extract 10;
  4 13591         write(z,if i mod 2 = 1 then <:<10>:> else <:      :>,
  4 13592           <<zddd>,b,if s=1 then <:B:> else <: :>,"sp",1,
  4 13593           if g > 0 then string bpl_navn(g) else <:   :>,
  4 13594           ";",1,true,4,string område_navn(o),
  4 13595           <:(:>,<<-dd>,t,<:)  :>," ",if lb=' ' then 1 else 0,<<ddd>,
  4 13596           li,false add lb,if lb=' ' then 0 else 1,<:/:>,<<zd>,lø);
  4 13597       end;
  3 13598     end p_vogntabel;
  2 13599     \f

  2 13599     message procedure p_gruppetabel side 1 - 810531/cl;
  2 13600     
  2 13600     procedure p_gruppetabel(z);
  2 13601       zone                  z;
  2 13602     begin
  3 13603       integer i,nr,bogst;
  3 13604       boolean spc_gr;
  3 13605       write(z,"nl",2,<:*****  udskrift af gruppetabel  *****:>,"nl",1,
  3 13606         <:max-antal-grupper =:>,max_antal_grupper,
  3 13607         <:   max-antal-i-gruppe =:>,max_antal_i_gruppe,
  3 13608         <:   max-antal-gruppeopkald =:>,max_antal_gruppeopkald,"nl",2,
  3 13609         <:gruppetabel::>);
  3 13610       for i:= 1 step 1 until max_antal_grupper do
  3 13611         write(z,if i mod 10 = 1 then <:<10>:> else <:  :>,<<dd>,i,":",1,
  3 13612           if gruppetabel(i) <> 0 then "G" else " ",1,true,2,<<b>,
  3 13613           gruppetabel(i) extract 7);
  3 13614       write(z,"nl",2,<:gruppeopkald::>);
  3 13615       for i:= 1 step 1 until max_antal_gruppeopkald do
  3 13616       begin
  4 13617         write(z,if i mod 4 = 1 then <:<10>:> else <:   :>,<<dd>,i,":",1);
  4 13618         if gruppeopkald(i,1) = 0 then
  4 13619           write(z,"sp",11)
  4 13620         else
  4 13621         begin
  5 13622           spc_gr:= gruppeopkald(i,1) shift (-21) = 5;
  5 13623           if spc_gr then nr:= gruppeopkald(i,1) extract 7
  5 13624           else
  5 13625           begin
  6 13626             nr:= gruppeopkald(i,1) shift (-5) extract 10;
  6 13627             bogst:= gruppeopkald(i,1) extract 5 +'@';
  6 13628             if bogst = '@' then bogst:= 'sp';
  6 13629           end;
  5 13630           if spc_gr then
  5 13631             write(z,<:(G:>,<<d>,true,3,nr)
  5 13632           else
  5 13633             write(z,"(",1,<<ddd>,nr,false add bogst,1);
  5 13634           write(z,",",1,<<dddd>,gruppeopkald(i,2),")",1);
  5 13635         end;
  4 13636       end;
  3 13637     end p_gruppetabel;
  2 13638     \f

  2 13638     message procedure p_springtabel side 1 - 810519/cl;
  2 13639     
  2 13639     procedure p_springtabel(z);
  2 13640       zone                  z;
  2 13641     begin
  3 13642       integer li,bo,max,st,nr;
  3 13643       long indeks;
  3 13644       real t;
  3 13645     
  3 13645       write(z,"nl",2,<:***** springtabel *****:>,"nl",1,
  3 13646         <:max-antal-spring =:>,max_antal_spring,"nl",2,
  3 13647         <:nr spring-id max status   næste-tid:>,"nl",1);
  3 13648       for nr:= 1 step 1 until max_antal_spring do
  3 13649       begin
  4 13650         write(z,<<dd>,nr);
  4 13651         <* if springtabel(nr,1)<>0 then *>
  4 13652         begin
  5 13653           li:= springtabel(nr,1) shift (-5) extract 10;
  5 13654           bo:= springtabel(nr,1) extract 5;
  5 13655           if bo<>0 then bo:= bo + 'A' - 1;
  5 13656           indeks:= extend springtabel(nr,2) shift 24;
  5 13657           st:= extend springtabel(nr,3) shift (-12) extract 24;
  5 13658           max:= springtabel(nr,3) extract 12;
  5 13659           write(z,"sp",(bo=0) extract 1 + 2,<<ddd>,li,false add bo,1,<:.:>);
  5 13660           write(z,"sp",4-write(z,string indeks),<< dd>,max,<<    -dd>,st);
  5 13661           if springtid(nr)<>0.0 then
  5 13662             write(z,<< zddddd.dddd>,systime(4,springtid(nr),t)+t/1000000)
  5 13663           else
  5 13664             write(z,<<      d.d   >,0.0);
  5 13665           if springstart(nr)<>0.0 then
  5 13666             write(z,<< zddddd.dddd>,systime(4,springstart(nr),t)+t/1000000)
  5 13667           else
  5 13668             write(z,<<      d.d   >,0.0);
  5 13669         end
  4 13670     <*  else
  4 13671           write(z,<:  --------:>)*>;
  4 13672         write(z,"nl",1);
  4 13673       end;
  3 13674     end p_springtabel;
  2 13675     \f

  2 13675     message procedure find_busnr side 1 - 820301/cl;
  2 13676     
  2 13676     integer procedure findbusnr(ll_id,busnr,garage,tilst);
  2 13677       value   ll_id;
  2 13678       integer ll_id, busnr, garage, tilst;
  2 13679     begin
  3 13680       integer i,j;
  3 13681     
  3 13681       j:= binærsøg(sidste_linie_løb,
  3 13682             (linie_løb_tabel(i) - ll_id), i);
  3 13683       if j<>0 then <* linie/løb findes ikke *>
  3 13684       begin
  4 13685         find_busnr:= -1;
  4 13686         busnr:= 0;
  4 13687         garage:= 0;
  4 13688         tilst:= 0;
  4 13689       end
  3 13690       else
  3 13691       begin
  4 13692         busnr:= bustabel(busindeks(i) extract 12);
  4 13693         tilst:= intg(bustilstand(intg(busindeks(i))));
  4 13694         garage:= busnr shift (-14);
  4 13695         busnr:= busnr extract 14;
  4 13696         find_busnr:= busindeks(i) extract 12;
  4 13697       end;
  3 13698     end find_busnr;
  2 13699     \f

  2 13699     message procedure søg_omr_bus side 1 - 881027/cl;
  2 13700     
  2 13700     
  2 13700     integer procedure søg_omr_bus(bus,ll,gar,omr,sig,tilst);
  2 13701       value bus;
  2 13702       integer bus,ll,gar,omr,sig,tilst;
  2 13703     begin
  3 13704       integer i,j,nr,bu,bi,bl;
  3 13705     
  3 13705       j:= binærsøg(sidste_bus,((bustabel(bi) extract 14) - (bus extract 14)),bi);
  3 13706       nr:= -1;
  3 13707       if j=0 then
  3 13708       begin
  4 13709         bl:= bu:= bi;
  4 13710         while bl>1 and bustabel(bl-1) extract 14 = bus extract 14 do bl:=bl-1;
  4 13711         while bu<sidste_bus and
  4 13712           bustabel(bu+1) extract 14 = bus extract 14 do bu:= bu+1;
  4 13713     
  4 13713         if bl<>bu then
  4 13714         begin
  5 13715           <* flere busser med samme tekniske nr. omr skal passe *>
  5 13716           nr:= -2;
  5 13717           for bi:= bl step 1 until bu do
  5 13718             if bustabel1(bi) extract 8 = omr extract 8 then nr:= bi;
  5 13719         end
  4 13720         else
  4 13721           nr:= bi;
  4 13722       end;
  3 13723     
  3 13723       if nr<0 then
  3 13724       begin
  4 13725         <* bus findes ikke *>
  4 13726         ll:= gar:= tilst:= sig:= 0;
  4 13727       end
  3 13728       else
  3 13729       begin
  4 13730         tilst:= intg(bustilstand(nr));
  4 13731         gar:= bustabel(nr) shift (-14);
  4 13732         ll:= linie_løb_tabel( linie_løb_indeks(nr) extract 12 );
  4 13733         if omr=0 then omr:= bustabel1(nr) extract 8;
  4 13734         sig:= bustabel1(nr) shift (-23);
  4 13735       end;
  3 13736       søg_omr_bus:= nr;
  3 13737     end;
  2 13738     \f

  2 13738     message procedure find_linie_løb side 1 - 820301/cl;
  2 13739     
  2 13739     integer procedure find_linie_løb(busnr,linie_løb,garage,tilst);
  2 13740       value   busnr;
  2 13741       integer busnr, linie_løb, garage, tilst;
  2 13742     begin
  3 13743       integer i,j;
  3 13744     
  3 13744       j:= binærsøg(sidste_bus,((bustabel(i) extract 14) - (busnr extract 14)), i);
  3 13745     
  3 13745       if j<>0 then <* bus findes ikke *>
  3 13746       begin
  4 13747         find_linie_løb:= -1;
  4 13748         linie_løb:= 0;
  4 13749         garage:= 0;
  4 13750         tilst:= 0;
  4 13751       end
  3 13752       else
  3 13753       begin
  4 13754         tilst:= intg(bustilstand(i));
  4 13755         garage:= bustabel(i) shift (-14);
  4 13756         linie_løb:= linie_løb_tabel(linie_løb_indeks(i) extract 12);
  4 13757         find_linie_løb:= linie_løb_indeks(i) extract 12;
  4 13758       end;
  3 13759     end find_linie_løb;
  2 13760     \f

  2 13760     message procedure h_vogntabel side 1 - 810413/cl;
  2 13761     
  2 13761     <* hovedmodulcorutine for vogntabelmodul *>
  2 13762     
  2 13762     procedure h_vogntabel;
  2 13763     begin
  3 13764       integer array field op;
  3 13765       integer dest_sem,k;
  3 13766     
  3 13766       procedure skriv_h_vogntabel(zud,omfang);
  3 13767         value                         omfang;
  3 13768         zone                      zud;
  3 13769         integer                       omfang;
  3 13770       begin
  4 13771         write(zud,"nl",1,<:+++ hovedmodul vogntabel :>);
  4 13772         if omfang<>0 then
  4 13773         disable
  4 13774         begin
  5 13775           skriv_coru(zud,abs curr_coruno);
  5 13776           write(zud,"nl",1,<<d>,
  5 13777             <:cs-vt     :>,cs_vt,"nl",1,
  5 13778             <:op        :>,op,"nl",1,
  5 13779             <:dest-sem  :>,dest_sem,"nl",1,
  5 13780             <:k         :>,k,"nl",1,
  5 13781             <::>);
  5 13782         end;
  4 13783       end;
  3 13784     \f

  3 13784     message procedure h_vogntabel side 2 - 820301/cl;
  3 13785     
  3 13785       stackclaim(if cm_test then 198 else 146);
  3 13786       trap(h_vt_trap);
  3 13787     
  3 13787     <*+2*>
  3 13788     <**> disable if testbit47 and overvåget or testbit28 then
  3 13789     <**>   skriv_h_vogntabel(out,0);
  3 13790     <*-2*>
  3 13791     
  3 13791       repeat
  3 13792         waitch(cs_vt,op,true,-1);
  3 13793     <*+4*>
  3 13794       if (d.op.optype and gen_optype) extract 12 = 0 and
  3 13795          (d.op.optype and vt_optype) extract 12 = 0 then
  3 13796        fejlreaktion(12,op,<:vogntabel:>,0);
  3 13797     <*-4*>
  3 13798       disable
  3 13799       begin
  4 13800     
  4 13800         k:= d.op.opkode extract 12;
  4 13801         dest_sem:=
  4 13802           if k =   9 then cs_vt_rap else
  4 13803           if k =  10 then cs_vt_rap else
  4 13804           if k =  11 then cs_vt_opd else
  4 13805           if k =  12 then cs_vt_opd else
  4 13806           if k =  13 then cs_vt_opd else
  4 13807           if k =  14 then cs_vt_tilst else
  4 13808           if k =  15 then cs_vt_tilst else
  4 13809           if k =  16 then cs_vt_tilst else
  4 13810           if k =  17 then cs_vt_tilst else
  4 13811           if k =  18 then cs_vt_tilst else
  4 13812           if k =  19 then cs_vt_opd else
  4 13813           if k =  20 then cs_vt_opd else
  4 13814           if k =  21 then cs_vt_auto else
  4 13815           if k =  24 then cs_vt_opd else
  4 13816           if k =  25 then cs_vt_grp else
  4 13817           if k =  26 then cs_vt_grp else
  4 13818           if k =  27 then cs_vt_grp else
  4 13819           if k =  28 then cs_vt_grp else
  4 13820           if k =  30 then cs_vt_spring else
  4 13821           if k =  31 then cs_vt_spring else
  4 13822           if k =  32 then cs_vt_spring else
  4 13823           if k =  33 then cs_vt_spring else
  4 13824           if k =  34 then cs_vt_spring else
  4 13825           if k =  35 then cs_vt_spring else
  4 13826           -1;
  4 13827     \f

  4 13827     message procedure h_vogntabel side 3 - 810422/cl;
  4 13828     
  4 13828     <*+2*>
  4 13829     <**> if testbit41 and overvåget then
  4 13830     <**> begin
  5 13831     <**>   skriv_h_vogntabel(out,0); write(out,<:   modtaget operation:>);
  5 13832     <**>   skriv_op(out,op);
  5 13833     <**> end;
  4 13834     <*-2*>
  4 13835       end;
  3 13836     
  3 13836       if dest_sem = -1 then
  3 13837         fejlreaktion(2,k,<:vogntabel:>,0);
  3 13838       disable signalch(dest_sem,op,d.op.optype);
  3 13839     until false;
  3 13840     h_vt_trap:
  3 13841       disable skriv_h_vogntabel(zbillede,1);
  3 13842     end h_vogntabel;
  2 13843     \f

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

  3 13915     message procedure vt_opdater side 2 - 851001/cl;
  3 13916     
  3 13916     vent_op:
  3 13917       waitch(cs_vt_opd,op,gen_optype or vt_optype,-1);
  3 13918     
  3 13918     <*+2*>
  3 13919     <**>  disable
  3 13920     <**>  if testbit41 and overvåget then
  3 13921     <**>  begin
  4 13922     <**>    skriv_vt_opd(out,0);
  4 13923     <**>    write(out,<:   modtaget operation:>);
  4 13924     <**>    skriv_op(out,op);
  4 13925     <**>  end;
  3 13926     <*-2*>
  3 13927     
  3 13927     <*+4*>
  3 13928     <**>if op<>vt_op then
  3 13929     <**>begin
  4 13930     <**>  disable begin
  5 13931     <**>    fejlreaktion(11,op,<:vt-opdater:>,1);
  5 13932     <**>    d.op.resultat:= 31; <*systemfejl*>
  5 13933     <**>    signalch(d.op.retur,op,d.op.optype);
  5 13934     <**>  end;
  4 13935     <**>  goto vent_op;
  4 13936     <**>end;
  3 13937     <*-4*>
  3 13938       disable
  3 13939       begin integer opk;
  4 13940     
  4 13940         opk:= d.op.opkode extract 12;
  4 13941         funk:= if opk=11 then 1 else
  4 13942                if opk=12 then 2 else
  4 13943                if opk=13 then 3 else
  4 13944                if opk=19 then 4 else
  4 13945                if opk=20 then 5 else
  4 13946                if opk=24 then 6 else
  4 13947                0;
  4 13948         if funk=0 then fejlreaktion( 2,opk,<:vt_opdater:>,0);
  4 13949       end;
  3 13950       res:= 0;
  3 13951       goto case funk of (indsæt,udtag,omkod,slet,flyt,roker);
  3 13952     \f

  3 13952     message procedure vt_opdater side 3 - 820301/cl;
  3 13953     
  3 13953     indsæt:
  3 13954       begin
  4 13955         integer busnr,ll_id,ll1,omr,gar,sig,tilst,bi,li,s,zi;
  4 13956     <*+4*>
  4 13957     <**> if d.op.data(1) shift (-22) <> 0 then
  4 13958     <**> begin
  5 13959     <**>   res:= 31; fejlreaktion(10,d.op.data(1),<:indsæt busnr:>,1);
  5 13960     <**>   goto slut_indsæt;
  5 13961     <**> end;
  4 13962     <*-4*>
  4 13963         busnr:= d.op.data(1) extract 14;
  4 13964     <*+4*>
  4 13965     <**> if d.op.data(2) shift (-22) <> 1 then
  4 13966     <**> begin
  5 13967     <**>   res:= 31; fejlreaktion(10,d.op.data(2),<:indsæt linie/løb:>,1);
  5 13968     <**>   goto slut_indsæt;
  5 13969     <**> end;
  4 13970     <*-4*>
  4 13971         ll_id:= d.op.data(2);
  4 13972         s:= omr:= d.op.data(4) extract 8;
  4 13973         bi:= søg_omr_bus(busnr,ll1,gar,omr,sig,tilst);
  4 13974         if bi<0 then
  4 13975         begin
  5 13976           if bi=(-1) then res:=10 <*bus ukendt*> else
  5 13977           if s<>0 then res:= 58 <*ulovligt omr*> else res:= 57 <*omr nødv.*>;
  5 13978         end
  4 13979         else
  4 13980         if s<>0 and s<>omr then
  4 13981           res:= 58 <* ulovligt område for bus *>
  4 13982         else
  4 13983         if intg(bustilstand(bi)) <> 0 then
  4 13984           res:=(if intg(bustilstand(bi))=(-1) then 18 <* i kø *>
  4 13985                 else 14 <* optaget *>)
  4 13986         else
  4 13987         begin
  5 13988           if linie_løb_indeks(bi) extract 12 <> 0 then
  5 13989           begin <* linie/løb allerede indsat *>
  6 13990             res:= 11;
  6 13991             d.op.data(3):= linie_løb_tabel(linie_løb_indeks(bi) extract 12);
  6 13992           end
  5 13993           else
  5 13994           begin
  6 13995     \f

  6 13995     message procedure vt_opdater side 3a - 900108/cl;
  6 13996     
  6 13996             if d.op.kilde//100 <> 4 then
  6 13997             res:= opd_omr(11,gar shift 8 +
  6 13998               bustabel1(bi) extract 8,busnr,ll_id);
  6 13999             if res>3 then goto slut_indsæt;
  6 14000             s:= binærsøg(sidste_linie_løb,linie_løb_tabel(li) - ll_id,li);
  6 14001             if s=0 then <* linie/løb findes allerede *>
  6 14002             begin
  7 14003               sig:= busindeks(li) extract 12;
  7 14004               d.op.data(3):= bustabel(sig);
  7 14005               linie_løb_indeks(sig):= false;
  7 14006               disable modiffil(tf_vogntabel,sig,zi);
  7 14007               fil(zi).ll:= 0;
  7 14008               fil(zi).bn:= bustabel(sig) extract 14 add
  7 14009                            (bustabel1(sig) extract 8 shift 14);
  7 14010               opd_log(d.op.kilde,2,bustabel(sig),ll_id,0);
  7 14011     
  7 14011               linie_løb_indeks(bi):= false add li;
  7 14012               busindeks(li):= false add bi;
  7 14013               disable modiffil(tf_vogntabel,bi,zi);
  7 14014               fil(zi).ll:= ll_id;
  7 14015               fil(zi).bn:= bustabel(bi) extract 14 add
  7 14016                            (bustabel1(bi) extract 8 shift 14);
  7 14017               opd_log(d.op.kilde,1,busnr,0,ll_id);
  7 14018               res:= 3;
  7 14019             end
  6 14020             else
  6 14021             begin
  7 14022     \f

  7 14022     message procedure vt_opdater side 4 - 810527/cl;
  7 14023     
  7 14023               if s<0 then li:= li +1;
  7 14024               if sidste_linie_løb=max_antal_linie_løb then
  7 14025               begin
  8 14026                 fejlreaktion(10,max_antal_linie_løb,<:for mange linie/løb:>,1);
  8 14027                 res:= 31;
  8 14028               end
  7 14029               else
  7 14030               begin
  8 14031                 for i:= sidste_linie_løb step -1 until li do
  8 14032                 begin
  9 14033                   linie_løb_tabel(i+1):=linie_løb_tabel(i);
  9 14034                   linie_løb_indeks(bus_indeks(i) extract 12):=false add (i+1);
  9 14035                   bus_indeks(i+1):=bus_indeks(i);
  9 14036                 end;
  8 14037                 sidste_linie_løb:= sidste_linie_løb +1;
  8 14038                 linie_løb_tabel(li):= ll_id;
  8 14039                 linie_løb_indeks(bi):= false add li;
  8 14040                 busindeks(li):= false add bi;
  8 14041                 disable s:= modiffil(tf_vogntabel,bi,zi);
  8 14042                 if s<>0 then fejlreaktion(7,s,<:vt_indsæt:>,0);
  8 14043                 fil(zi).bn:= busnr extract 14 add
  8 14044                              (bustabel1(bi) extract 8 shift 14);
  8 14045                 fil(zi).ll:= ll_id;
  8 14046                 opd_log(d.op.kilde,1,busnr,0,ll_id);
  8 14047                 res:= 3; <* ok *>
  8 14048               end;
  7 14049             end;
  6 14050           end;
  5 14051         end;
  4 14052     slut_indsæt:
  4 14053         d.op.resultat:= res;
  4 14054       end;
  3 14055       goto returner;
  3 14056     \f

  3 14056     message procedure vt_opdater side 5 - 820301/cl;
  3 14057     
  3 14057     udtag:
  3 14058       begin
  4 14059         integer busnr,ll_id,omr,gar,sig,bi,li,s,format,tilst,zi;
  4 14060     
  4 14060         busnr:= ll_id:= 0;
  4 14061         omr:= s:= d.op.data(2) extract 8;
  4 14062         format:= d.op.data(1) shift (-22);
  4 14063         if format=0 then <*busnr*>
  4 14064         begin
  5 14065           busnr:= d.op.data(1) extract 14;
  5 14066           bi:= søg_omr_bus(busnr,ll_id,gar,omr,sig,tilst);
  5 14067           if bi<0 then
  5 14068           begin
  6 14069             if bi=-1 then res:= 10 else
  6 14070             if s<>0 then res:= 58 else res:= 57;
  6 14071             goto slut_udtag;
  6 14072           end;
  5 14073           if bi>0 and s<>0 and s<>omr then
  5 14074           begin
  6 14075             res:= 58; goto slut_udtag;
  6 14076           end;
  5 14077           li:= linie_løb_indeks(bi) extract 12;
  5 14078           busnr:= bustabel(bi);
  5 14079           if li=0 or linie_løb_tabel(li)=0 then
  5 14080           begin <* bus ej indsat *>
  6 14081             res:= 13;
  6 14082             goto slut_udtag;
  6 14083           end;
  5 14084           ll_id:= linie_løb_tabel(li);
  5 14085         end
  4 14086         else
  4 14087         if format=1 then <* linie_løb *>
  4 14088         begin
  5 14089           ll_id:= d.op.data(1);
  5 14090           s:= binærsøg(sidste_linie_løb,linie_løb_tabel(li)-ll_id,li);
  5 14091           if s<>0 then
  5 14092           begin <* linie/løb findes ikke *>
  6 14093             res:= 9;
  6 14094             goto slut_udtag;
  6 14095           end;
  5 14096           bi:= busindeks(li) extract 12;
  5 14097           busnr:= bustabel(bi);
  5 14098         end
  4 14099         else <* ulovlig identifikation *>
  4 14100         begin
  5 14101           res:= 31;
  5 14102           fejlreaktion(10,d.op.data(1),<:udtag ident:>,1);
  5 14103           goto slut_udtag;
  5 14104         end;
  4 14105     \f

  4 14105     message procedure vt_opdater side 6 - 820301/cl;
  4 14106     
  4 14106        tilst:= intg(bustilstand(bi));
  4 14107         if tilst<>0 then
  4 14108         begin
  5 14109           res:= if tilst = -1 then 18<*i kø*> else 14<*optaget*>;
  5 14110           goto slut_udtag;
  5 14111         end;
  4 14112         if d.op.kilde//100 <> 4 then
  4 14113         res:= opd_omr(12, bustabel(bi) shift (-14) extract 8 shift 8 +
  4 14114                 bustabel1(bi) extract 8,bustabel(bi) extract 14,0);
  4 14115         if res>3 then goto slut_udtag;
  4 14116         linie_løb_indeks(bi):= false;
  4 14117         for i:= li step 1 until sidste_linie_løb -1 do
  4 14118         begin
  5 14119           linie_løb_tabel(i):= linie_løb_tabel(i+1);
  5 14120           linie_løb_indeks(bus_indeks(i+1) extract 12):= false add i;
  5 14121           bus_indeks(i):= bus_indeks(i+1);
  5 14122         end;
  4 14123         linie_løb_tabel(sidste_linie_løb):= 0;
  4 14124         bus_indeks(sidste_linie_løb):= false;
  4 14125         sidste_linie_løb:= sidste_linie_løb -1;
  4 14126         disable s:= modif_fil(tf_vogntabel,bi,zi);
  4 14127         if s<>0 then fejlreaktion(7,s,<:vt_udtag:>,0);
  4 14128         fil(zi).ll:= 0;
  4 14129         fil(zi).bn:= busnr add (bustabel1(bi) extract 8 shift 14);
  4 14130         opd_log(d.op.kilde,2,busnr,ll_id,0);
  4 14131         res:= 3; <* ok *>
  4 14132     slut_udtag:
  4 14133         d.op.resultat:= res;
  4 14134         d.op.data(2):= ll_id;
  4 14135         d.op.data(3):= busnr;
  4 14136       end;
  3 14137       goto returner;
  3 14138     \f

  3 14138     message procedure vt_opdater side 7 - 851001/cl;
  3 14139     
  3 14139     omkod:
  3 14140     flyt:
  3 14141     roker:
  3 14142       begin
  4 14143         integer ll_id1,ll_id2,inf1,inf2,i,s,bi1,bi2,li1,li2,tilst,zi,pm1;
  4 14144     
  4 14144         inf1:= inf2:= 0;
  4 14145         ll_id1:= d.op.data(1);
  4 14146         ll_id2:= d.op.data(2);
  4 14147         if ll_id1=ll_id2 then
  4 14148         begin
  5 14149           res:= 24; inf1:= ll_id2;
  5 14150           goto slut_flyt;
  5 14151         end;
  4 14152     <*+4*>
  4 14153     <**>  for i:= 1,2 do
  4 14154     <**>    if d.op.data(i) shift (-22) <> 1 then
  4 14155     <**>    begin
  5 14156     <**>      res:= 31;
  5 14157     <**>      fejlreaktion(10,d.op.data(i),case i of (
  5 14158     <**>        <:omkod/flyt/roker ident1:>,<:omkod/flyt/roker ident2:>),1);
  5 14159     <**>      goto slut_flyt;
  5 14160     <**>    end;
  4 14161     <*-4*>
  4 14162     
  4 14162         s:= binærsøg(sidste_linie_løb,linie_løb_tabel(li1) - ll_id1,li1);
  4 14163         if s<>0 and funk=6 <* roker *> then
  4 14164         begin
  5 14165           i:= ll_id1; ll_id1:= ll_id2; ll_id2:= i;
  5 14166           s:= binærsøg(sidste_linie_løb,linie_løb_tabel(li1) - ll_id1,li1);
  5 14167         end;
  4 14168         if s<>0 then
  4 14169         begin
  5 14170           res:= 9; <* ukendt linie/løb *>
  5 14171           goto slut_flyt;
  5 14172         end;
  4 14173         bi1:= busindeks(li1) extract 12;
  4 14174         inf1:= bustabel(bi1);
  4 14175         tilst:= intg(bustilstand(bi1));
  4 14176         if tilst<>0 then <* bus ikke fri *>
  4 14177         begin
  5 14178           res:= if tilst=-1 then 18 <* i kø *> else 14 <*optaget*>;
  5 14179           goto slut_flyt;
  5 14180         end;
  4 14181     \f

  4 14181     message procedure vt_opdater side 7a- 851001/cl;
  4 14182         if d.op.kilde//100 <> 4 then
  4 14183     
  4 14183         res:= opd_omr(11, bustabel(bi1) shift (-14) extract 8 shift 8 +
  4 14184                 bustabel1(bi1) extract 8, inf1 extract 14, ll_id2);
  4 14185         if res>3 then goto slut_flyt;
  4 14186     
  4 14186         s:= binærsøg(sidste_linie_løb,linie_løb_tabel(li2) - ll_id2,li2);
  4 14187         if s=0 then
  4 14188         begin <* ll_id2 er indkodet *>
  5 14189           bi2:= busindeks(li2) extract 12;
  5 14190           inf2:= bustabel(bi2);
  5 14191           tilst:= intg(bustilstand(bi2));
  5 14192           if funk=3 then res:= 12 <* ulovlig ved omkod *> else
  5 14193           if tilst=-1 then res:= 18 else if tilst<>0 then res:= 14;
  5 14194           if res>3 then
  5 14195           begin
  6 14196             inf1:= inf2; inf2:= 0;
  6 14197             goto slut_flyt;
  6 14198           end;
  5 14199     
  5 14199           if d.op.kilde//100 <> 4 then
  5 14200           res:= opd_omr(11, bustabel(bi2) shift (-14) extract 8 shift 8 +
  5 14201                   bustabel1(bi2) extract 8, inf2 extract 14, ll_id1);
  5 14202           if res>3 then goto slut_flyt;
  5 14203     
  5 14203           <* flyt bus *>
  5 14204           if funk=6 then
  5 14205             linie_løb_indeks(bi2):= false add li1
  5 14206           else
  5 14207             linie_løb_indeks(bi2):= false;
  5 14208           linie_løb_indeks(bi1):= false add li2;
  5 14209           if funk=6 then
  5 14210             busindeks(li1):= false add bi2
  5 14211           else
  5 14212             busindeks(li1):= false;
  5 14213           busindeks(li2):= false add bi1;
  5 14214     
  5 14214          if funk<>6 then
  5 14215          begin
  6 14216           <* fjern ll_id1 *>
  6 14217           for i:= li1 step 1 until sidste_linie_løb - 1 do
  6 14218           begin
  7 14219             linie_løb_tabel(i):= linie_løb_tabel(i+1);
  7 14220             linie_løb_indeks(intg(busindeks(i+1))):= false add i;
  7 14221             busindeks(i):= busindeks(i+1);
  7 14222           end;
  6 14223           linie_løb_tabel(sidste_linie_løb):= 0;
  6 14224           bus_indeks(sidste_linie_løb):= false;
  6 14225           sidste_linie_løb:= sidste_linie_løb-1;
  6 14226          end;
  5 14227     
  5 14227           <* opdater vogntabelfil *>
  5 14228           disable s:= modiffil(tf_vogntabel,bi2,zi);
  5 14229           if s<>0 then fejlreaktion(7,s,<:vt-omkod/flyt:>,0);
  5 14230           fil(zi).ll:= if funk=6 then ll_id1 else 0;
  5 14231           fil(zi).bn:= inf2 extract 14 add (bustabel1(bi2) extract 8 shift 14);
  5 14232           if funk=6 then
  5 14233             opd_log(d.op.kilde,3,bustabel(bi2),ll_id2,ll_id1)
  5 14234           else
  5 14235             opd_log(d.op.kilde,2,bustabel(bi2),ll_id2,0);
  5 14236           disable s:= modiffil(tf_vogntabel,bi1,zi);
  5 14237           if s<>0 then fejlreaktion(7,s,<:vt-omkod/flyt:>,0);
  5 14238           fil(zi).ll:= ll_id2;
  5 14239           fil(zi).bn:= inf1 extract 14 add (bustabel1(bi1) extract 8 shift 14);
  5 14240           opd_log(d.op.kilde,3,bustabel(bi1),ll_id1,ll_id2);
  5 14241     \f

  5 14241     message procedure vt_opdater side 8 - 820301/cl;
  5 14242     
  5 14242         end <* ll_id2 indkodet *>
  4 14243         else
  4 14244         begin
  5 14245           if sign(s)=sign(li2-li1) then li2:=li2-sign(s);
  5 14246           <* li2 skal være indeks for sidste linie/løb der skal flyttes i vt *>
  5 14247           pm1:= sgn(li2-li1);
  5 14248           for i:= li1 step pm1 until li2-pm1 do
  5 14249           begin
  6 14250             linie_løb_tabel(i):= linie_løb_tabel(i+pm1);
  6 14251             busindeks(i):= busindeks(i+pm1);
  6 14252             linie_løb_indeks(intg(busindeks(i+pm1))):= false add i;
  6 14253           end;
  5 14254           linie_løb_tabel(li2):= ll_id2;
  5 14255           busindeks(li2):= false add bi1;
  5 14256           linie_løb_indeks(bi1):= false add li2;
  5 14257           disable s:= modiffil(tf_vogntabel,bi1,zi);
  5 14258           if s<>0 then fejlreaktion(7,s,<:vt-omkod/flyt:>,0);
  5 14259           fil(zi).ll:= ll_id2;
  5 14260           fil(zi).bn:= inf1 extract 14 add (bustabel1(bi1) extract 8 shift 14);
  5 14261           opd_log(d.op.kilde,3,bustabel(bi1),ll_id1,ll_id2);
  5 14262         end;
  4 14263         res:= 3; <*udført*>
  4 14264     slut_flyt:
  4 14265         d.op.resultat:= res;
  4 14266         d.op.data(3):= inf1;
  4 14267         if funk=5 then d.op.data(4):= inf2;
  4 14268       end;
  3 14269       goto returner;
  3 14270     \f

  3 14270     message procedure vt_opdater side 9 - 851001/cl;
  3 14271     
  3 14271     slet:
  3 14272       begin
  4 14273         integer flin,slin,finx,sinx,s,li,bi,omr,gar;
  4 14274         boolean test24;
  4 14275     
  4 14275         if d.op.data(2)=0 then d.op.data(2):= d.op.data(1);
  4 14276         omr:= d.op.data(3);
  4 14277     
  4 14277         if d.op.data(1) > d.op.data(2) then
  4 14278         begin
  5 14279           res:= 44; <* intervalstørrelse ulovlig *>
  5 14280           goto slut_slet;
  5 14281         end;
  4 14282     
  4 14282         flin:= (1 shift 22) + (d.op.data(1) extract 21 shift 7);
  4 14283         slin:= (1 shift 22) + (d.op.data(2) extract 21 shift 7) + 127;
  4 14284     
  4 14284         s:= binærsøg(sidste_linie_løb, (linie_løb_tabel(finx)-flin), finx);
  4 14285         if s<0 then finx:= finx+1;
  4 14286         s:= binærsøg(sidste_linie_løb, (linie_løb_tabel(sinx)-slin), sinx);
  4 14287         if s>0 then sinx:= sinx-1;
  4 14288     
  4 14288         for li:= finx step 1 until sinx do
  4 14289         begin
  5 14290           bi:= busindeks(li) extract 12;
  5 14291           gar:= bustabel(bi) shift (-14) extract 8;
  5 14292           if intg(bustilstand(bi))=0 and 
  5 14293              (omr = 0 or (omr > 0 and omr = gar) or
  5 14294               (omr < 0 and omr extract 8 = bustabel1(bi) extract 8)) then
  5 14295           begin
  6 14296             opd_log(d.op.kilde,2,bustabel(bi),linie_løb_tabel(li),0);
  6 14297             linie_løb_indeks(bi):= busindeks(li):= false;
  6 14298             linie_løb_tabel(li):= 0;
  6 14299           end;
  5 14300         end;
  4 14301     \f

  4 14301     message procedure vt_opdater side 10 - 850820/cl;
  4 14302     
  4 14302         sinx:= finx-1;
  4 14303         for li:= finx step 1 until sidste_linie_løb do
  4 14304         begin
  5 14305           if linie_løb_tabel(li)<>0 then
  5 14306           begin
  6 14307             sinx:= sinx+1;
  6 14308             if sinx<>li then
  6 14309             begin
  7 14310               linie_løb_tabel(sinx):= linie_løb_tabel(li);
  7 14311               busindeks(sinx):= busindeks(li);
  7 14312               linie_løb_indeks(busindeks(sinx) extract 12):= false add sinx;
  7 14313               linie_løb_tabel(li):= 0;
  7 14314               busindeks(li):= false;
  7 14315             end;
  6 14316           end;
  5 14317         end;
  4 14318         sidste_linie_løb:= sinx;
  4 14319     
  4 14319         test24:= testbit24; testbit24:= false;
  4 14320         for bi:= 1 step 1 until sidste_bus do 
  4 14321         disable
  4 14322         begin
  5 14323           s:= modiffil(tf_vogntabel,bi,finx);
  5 14324           if s<>0 then fejlreaktion(7,s,<:vt-slet:>,0);
  5 14325           fil(finx).bn:= bustabel(bi) extract 14 add
  5 14326                          (bustabel1(bi) extract 8 shift 14);
  5 14327           fil(finx).ll:= linie_løb_tabel(linie_løb_indeks(bi) extract 12);
  5 14328         end;
  4 14329         testbit24:= test24;
  4 14330         res:= 3;
  4 14331     
  4 14331     slut_slet:
  4 14332         d.op.resultat:= res;
  4 14333       end;
  3 14334       goto returner;
  3 14335     \f

  3 14335     message procedure vt_opdater side 11 - 810409/cl;
  3 14336     
  3 14336     returner:
  3 14337       disable
  3 14338       begin
  4 14339     
  4 14339     <*+2*>
  4 14340     <**>  if testbit40 and overvåget then
  4 14341     <**>  begin
  5 14342     <**>    skriv_vt_opd(out,0);
  5 14343     <**>    write(out,<:   vogntabel efter ændring:>);
  5 14344     <**>    p_vogntabel(out);
  5 14345     <**>  end;
  4 14346     <**>  if testbit41 and overvåget then
  4 14347     <**>  begin
  5 14348     <**>    skriv_vt_opd(out,0);
  5 14349     <**>    write(out,<:   returner operation:>);
  5 14350     <**>    skriv_op(out,op);
  5 14351     <**>  end;
  4 14352     <*-2*>
  4 14353     
  4 14353         signalch(d.op.retur,op,d.op.optype);
  4 14354       end;
  3 14355       goto vent_op;
  3 14356     
  3 14356     vt_opd_trap:
  3 14357       disable skriv_vt_opd(zbillede,1);
  3 14358     
  3 14358     end vt_opdater;
  2 14359     \f

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

  3 14441     message procedure vt_tilstand side 2 - 820301/cl;
  3 14442     
  3 14442       filop:= filopref;
  3 14443       stackclaim(if cm_test then 550 else 500);
  3 14444       trap(vt_tilst_trap);
  3 14445     
  3 14445     <*+2*>
  3 14446     <**> disable if testbit47 and overvåget or testbit28 then
  3 14447     <**>   skriv_vt_tilst(out,0);
  3 14448     <*-2*>
  3 14449     
  3 14449     vent_op:
  3 14450       waitch(cs_vt_tilst,op,vt_optype or gen_optype,-1);
  3 14451     <*+2*>disable
  3 14452     <**>  if (testbit41 and overvåget) or
  3 14453              (testbit46 and overvåget and
  3 14454               (d.op.opkode extract 12 = 16 or d.op.opkode extract 12 = 18))
  3 14455           then
  3 14456     <**>  begin
  4 14457     <**>    skriv_vt_tilst(out,0);
  4 14458     <**>    write(out,<:   modtaget operation:>);
  4 14459     <**>    skriv_op(out,op);
  4 14460     <**>  end;
  3 14461     <*-2*>
  3 14462     
  3 14462     <*+4*>
  3 14463     <**>  if op <> vt_op then
  3 14464     <**>  begin
  4 14465     <**>    disable begin
  5 14466     <**>      d.op.resultat:= 31;
  5 14467     <**>      fejlreaktion(11,op,<:vt-tilstand:>,1);
  5 14468     <**>  end;
  4 14469     <**>  goto returner;
  4 14470     <**>  end;
  3 14471     <*-4*>
  3 14472     
  3 14472         opk:= d.op.opkode extract 12;
  3 14473         funk:= if opk = 14 <*bus i kø*> then 1 else
  3 14474                if opk = 15 <*bus res *> then 2 else
  3 14475                if opk = 16 <*grp res *> then 4 else
  3 14476                if opk = 17 <*bus fri *> then 3 else
  3 14477                if opk = 18 <*grp fri *> then 5 else
  3 14478                0;
  3 14479         if funk = 0 then fejlreaktion(2,opk,<:vt_tilstand:>,0);
  3 14480         res:= 0;
  3 14481         format:= d.op.data(1) shift (-22);
  3 14482     
  3 14482       goto case funk of(enkelt_bus,enkelt_bus,enkelt_bus,grp_res,grp_fri);
  3 14483     \f

  3 14483     message procedure vt_tilstand side 3 - 820301/cl;
  3 14484     
  3 14484     enkelt_bus:
  3 14485       <* sæt enkelt bus i kø, reserver eller frigiv enkelt bus *>
  3 14486       disable
  3 14487       begin integer busnr,i,s,tilst,ll,gar,omr,sig;
  4 14488     <*+4*>
  4 14489     <**>if format <> 0 and format <> 1 then
  4 14490     <**>begin
  5 14491     <**>  res:= 31;
  5 14492     <**>  fejlreaktion(10,d.op.data(1),<:tilstand ident:>,1);
  5 14493     <**>  goto slut_enkelt_bus;
  5 14494     <**>end;
  4 14495     <*-4*>
  4 14496         <* find busnr og tilstand *>
  4 14497         case format+1 of
  4 14498         begin
  5 14499           <* 0: budident *>
  5 14500           begin
  6 14501             busnr:= d.op.data(1) extract 14;
  6 14502             s:= omr:= d.op.data(4) extract 8;
  6 14503             bi:= søg_omr_bus(busnr,ll,gar,omr,sig,tilst);
  6 14504             if bi<0 then
  6 14505             begin
  7 14506               res:= if bi=(-1) then 10 else (if s<>0 then 58 else 57);
  7 14507               goto slut_enkelt_bus;
  7 14508             end
  6 14509             else
  6 14510             begin
  7 14511               tilst:= intg(bustilstand(bi));
  7 14512             end;
  6 14513           end;
  5 14514     
  5 14514           <* 1: linie_løb_ident *>
  5 14515           begin
  6 14516             bi:= findbusnr(d.op.data(1),busnr,i,tilst);
  6 14517             if bi < 0 then <* ukendt linie_løb *>
  6 14518             begin
  7 14519               res:= 9;
  7 14520               goto slut_enkelt_bus;
  7 14521             end;
  6 14522           end;
  5 14523         end case;
  4 14524     \f

  4 14524     message procedure vt_tilstand side 4 - 830310/cl;
  4 14525     
  4 14525         if funk < 3 then
  4 14526         begin
  5 14527           d.op.data(2):= if linie_løb_indeks(bi) extract 12 <> 0 then
  5 14528                            linie_løb_tabel(linie_løb_indeks(bi) extract 12)
  5 14529                          else 0;
  5 14530           d.op.data(3):= bustabel(bi);
  5 14531           d.op.data(4):= bustabel1(bi);
  5 14532         end;
  4 14533     
  4 14533         <* check tilstand *>
  4 14534         if funk = 3 <*frigiv*> and tilst >= 0 <*fri/optaget_i_gruppe*> then
  4 14535           res:= 39 <* bus ikke reserveret *>
  4 14536         else
  4 14537         if tilst <> 0 and tilst <> (-1) and funk < 3 then
  4 14538           res:= 14 <* bus optaget *>
  4 14539         else
  4 14540         if funk = 1 <* i kø *>  and tilst = (-1) then
  4 14541           res:= 18 <* i kø *>
  4 14542         else
  4 14543           res:= 3; <*udført*>
  4 14544     
  4 14544         if res = 3 then
  4 14545           bustilstand(bi):= false add (case funk of (-1,-2,0));
  4 14546     
  4 14546     slut_enkelt_bus:
  4 14547         d.op.resultat:= res;
  4 14548       end <*disable*>;
  3 14549       goto returner;
  3 14550     \f

  3 14550     message procedure vt_tilstand side 5 - 810424/cl;
  3 14551     
  3 14551     grp_res:  <* reserver gruppe *>
  3 14552       disable
  3 14553       begin
  4 14554     
  4 14554     <*+4*>
  4 14555     <**>  if format <> 2 then
  4 14556     <**>  begin
  5 14557     <**>    res:= 31;
  5 14558     <**>    fejlreaktion(10,d.op.data(1),<:tilstand ident:>,1);
  5 14559     <**>    goto slut_grp_res_1;
  5 14560     <**>  end;
  4 14561     <*-4*>
  4 14562     
  4 14562         <* find frit indeks i opkaldstabel *>
  4 14563         opk_indeks:= 0;
  4 14564         for i:= max_antal_gruppeopkald step -1 until 1 do
  4 14565         begin
  5 14566           if gruppeopkald(i,1)=0 then opk_indeks:= i <*fri plads*> else
  5 14567           if gruppeopkald(i,1)=d.op.data(1) then res:= 15 <*optaget*>;
  5 14568         end;
  4 14569         if opk_indeks = 0 then res:= 32; <* ingen plads *>
  4 14570         if res <> 0 then goto slut_grp_res_1;
  4 14571         g_type:= d.op.data(1) shift (-21) extract 1;
  4 14572         if g_type = 1 <*special gruppe*> then
  4 14573         begin <*check eksistens*>
  5 14574           gr:= 0;
  5 14575           for i:= 1 step 1 until max_antal_grupper do
  5 14576             if gruppetabel(i) = d.op.data(1) then gr:= i;
  5 14577           if gr = 0 then <*gruppe ukendt*>
  5 14578           begin
  6 14579             res:= 8;
  6 14580             goto slut_grp_res_1;
  6 14581           end;
  5 14582         end;
  4 14583     
  4 14583         <* reserver i opkaldstabel *>
  4 14584         gruppeopkald(opk_indeks,1):= d.op.data(1);
  4 14585     \f

  4 14585     message procedure vt_tilstand side 6 - 810428/cl;
  4 14586     
  4 14586         <* tilknyt fil *>
  4 14587         start_operation(filop,curr_coruid,cs_fil,101);
  4 14588         d.filop.data(1):= 0;  <*postantal*>
  4 14589         d.filop.data(2):= 256;  <*postlængde*>
  4 14590         d.filop.data(3):= 1;  <*segmentantal*>
  4 14591         d.filop.data(4):= 2 shift 10;  <*spool fil*>
  4 14592         signalch(cs_opret_fil,filop,vt_optype);
  4 14593     
  4 14593     slut_grp_res_1:
  4 14594         if res <> 0 then d.op.resultat:= res;
  4 14595       end;
  3 14596       if res <> 0 then goto returner;
  3 14597     
  3 14597       waitch(cs_fil,filop,vt_optype,-1);
  3 14598     
  3 14598       <* check filsys-resultat *>
  3 14599       if d.filop.data(9) <> 0 then
  3 14600         fejlreaktion(13,d.filop.data(9),<:gruppe,res:>,0);
  3 14601       filref:= d.filop.data(4);
  3 14602     \f

  3 14602     message procedure vt_tilstand side 7 - 820301/cl;
  3 14603       disable if g_type = 0 <*linie-gruppe*> then
  3 14604       begin
  4 14605         integer s,i,ll_id;
  4 14606         integer array field iaf1;
  4 14607     
  4 14607         ll_id:= 1 shift 22 + d.op.data(1) shift 7;
  4 14608         iaf1:= 2;
  4 14609         s:= binærsøg(sidste_linie_løb,
  4 14610               linie_løb_tabel(i) - ll_id, i);
  4 14611         if s < 0 then i:= i +1;
  4 14612         antal:= ej_res:= 0;
  4 14613         skrivfil(filref,1,zi);
  4 14614         if i <= sidste_linie_løb then
  4 14615         begin
  5 14616           while linie_løb_tabel(i) shift (-7) shift 7 = ll_id do
  5 14617           begin
  6 14618             if (intg(bustilstand(intg(busindeks(i))))<>0) or
  6 14619                (bustabel1(intg(busindeks(i))) extract 8 <> 3) then
  6 14620               ej_res:= ej_res+1
  6 14621             else
  6 14622             begin
  7 14623               antal:= antal+1;
  7 14624               bi:= busindeks(i) extract 12;
  7 14625               fil(zi).iaf1(1):=
  7 14626                 område_id( bustabel1(bi) extract 8, 2) extract 12 shift 12 +
  7 14627                 (bustabel1(bi) shift (-23) + 1) shift 8 + 1;
  7 14628               fil(zi).iaf1(2):= bustabel(bi);
  7 14629               iaf1:= iaf1+4;
  7 14630               bustilstand(bi):= false add opk_indeks;
  7 14631             end;
  6 14632             i:= i +1;
  6 14633             if i > sidste_linie_løb then goto slut_l_grp;
  6 14634           end;
  5 14635         end;
  4 14636     \f

  4 14636     message procedure vt_tilstand side 8 - 820301/cl;
  4 14637     
  4 14637     slut_l_grp:
  4 14638       end
  3 14639       else
  3 14640       begin <*special gruppe*>
  4 14641         integer i,s,li,omr,gar,tilst;
  4 14642         integer array field iaf1;
  4 14643     
  4 14643         iaf1:= 2;
  4 14644         antal:= ej_res:= 0;
  4 14645         s:= læsfil(tf_gruppedef,gr,zi);
  4 14646         if s <> 0 then fejlreaktion(5,s,<:gruppe,res:>,0);
  4 14647         tofrom(identer,fil(zi),max_antal_i_gruppe*2);
  4 14648         s:= skrivfil(filref,1,zi);
  4 14649         if s<>0 then fejlreaktion(6,s,<:gruppe,res:>,0);
  4 14650         i:= 1;
  4 14651         while identer(i) <> 0 do
  4 14652         begin
  5 14653           if identer(i) shift (-22) = 0 then
  5 14654           begin <*busident*>
  6 14655             omr:= 0;
  6 14656             bi:= søg_omr_bus(identer(i),li,gar,omr,s,tilst);
  6 14657             if bi<0 then goto næste_ident;
  6 14658             li:= linie_løb_indeks(bi) extract 12;
  6 14659           end
  5 14660           else
  5 14661           begin <*linie/løb ident*>
  6 14662             s:= binærsøg(sidste_linie_løb,
  6 14663                   linie_løb_tabel(li) - identer(i), li);
  6 14664             if s <> 0 then goto næste_ident;
  6 14665             bi:= busindeks(li) extract 12;
  6 14666           end;
  5 14667           if (intg(bustilstand(bi))<>0) or
  5 14668              (bustabel1(bi) extract 8 <> 3) then
  5 14669             ej_res:= ej_res+1
  5 14670           else
  5 14671           begin
  6 14672             antal:= antal +1;
  6 14673             fil(zi).iaf1(1):=
  6 14674               område_id( bustabel1(bi) extract 8, 2) extract 12 shift 12 +
  6 14675               (bustabel1(bi) shift (-23) + 1) shift 8 + 1;
  6 14676             fil(zi).iaf1(2):= bustabel(bi);
  6 14677             iaf1:= iaf1+4;
  6 14678             bustilstand(bi):= false add opk_indeks;
  6 14679           end;
  5 14680     næste_ident:
  5 14681           i:= i +1;
  5 14682           if i > max_antal_i_gruppe then goto slut_s_grp;
  5 14683         end;
  4 14684     slut_s_grp:
  4 14685       end;
  3 14686     \f

  3 14686     message procedure vt_tilstand side 9 - 820301/cl;
  3 14687     
  3 14687       if antal > 0 then <*ok*>
  3 14688       disable begin
  4 14689         integer array field spec,akt;
  4 14690         integer a;
  4 14691         integer field antal_spec;
  4 14692     
  4 14692         antal_spec:= 2; a:= 0;
  4 14693         spec:= 2; akt:= 2;
  4 14694         sorter_gruppe(fil(zi).spec,1,antal);
  4 14695         fil(zi).antal_spec:= 0;
  4 14696         while akt//4 < antal do
  4 14697         begin
  5 14698           fil(zi).spec(1):= fil(zi).akt(1) shift (-8) shift 8;
  5 14699           a:= 0;
  5 14700           while fil(zi).akt(1) shift (-8) = fil(zi).spec(1) shift (-8)
  5 14701             and a<15 do
  5 14702           begin
  6 14703             a:= a+1;
  6 14704             fil(zi).spec(1+a):= fil(zi).akt(2) extract 14;
  6 14705             akt:= akt+4;
  6 14706           end;
  5 14707           fil(zi).spec(1):= fil(zi).spec(1) + a;
  5 14708           fil(zi).antal_spec:= fil(zi).antal_spec+1;
  5 14709           spec:= spec + 2*a + 2;
  5 14710         end;
  4 14711         antal:= fil(zi).antal_spec;
  4 14712         gruppeopkald(opk_indeks,2):= filref;
  4 14713         d.op.resultat:= 3;
  4 14714         d.op.data(2):= antal;
  4 14715         d.op.data(3):= filref;
  4 14716         d.op.data(4):= ej_res;
  4 14717       end
  3 14718       else
  3 14719       begin
  4 14720         disable begin
  5 14721           d.filop.opkode:= 104; <*slet fil*>
  5 14722           signalch(cs_slet_fil,filop,vt_optype);
  5 14723           gruppeopkald(opk_indeks,1):= 0; <*fri*>
  5 14724           d.op.resultat:= 54;
  5 14725           d.op.data(2):= antal;
  5 14726           d.op.data(3):= 0;
  5 14727           d.op.data(4):= ej_res;
  5 14728         end;
  4 14729         waitch(cs_fil,filop,vt_optype,-1);
  4 14730         if d.filop.data(9) <> 0 then
  4 14731           fejlreaktion(16,d.filop.data(9),<:gruppe,res:>,0);
  4 14732       end;
  3 14733       goto returner;
  3 14734     \f

  3 14734     message procedure vt_tilstand side 10 - 820301/cl;
  3 14735     
  3 14735     grp_fri:  <* frigiv gruppe *>
  3 14736       disable
  3 14737       begin integer i,j,s,ll,gar,omr,tilst;
  4 14738         integer array field spec;
  4 14739     
  4 14739     <*+4*>
  4 14740     <**>  if format <> 2 then
  4 14741     <**>  begin
  5 14742     <**>    res:= 31;
  5 14743     <**>    fejlreaktion(10,d.op.data(1),<:tilstand ident:>,1);
  5 14744     <**>    goto slut_grp_fri;
  5 14745     <**>  end;
  4 14746     <*-4*>
  4 14747     
  4 14747         <* find indeks i opkaldstabel *>
  4 14748         opk_indeks:= 0;
  4 14749         for i:= 1 step 1 until max_antal_gruppeopkald do
  4 14750           if gruppeopkald(i,1) = d.op.data(1) then opk_indeks:= i;
  4 14751         if opk_indeks = 0 <*ikke fundet*> then
  4 14752         begin
  5 14753           res:= 40; <*gruppe ej reserveret*>
  5 14754           goto slut_grp_fri;
  5 14755         end;
  4 14756         filref:= gruppeopkald(opk_indeks,2);
  4 14757         start_operation(filop,curr_coruid,cs_fil,104);
  4 14758         d.filop.data(4):= filref;
  4 14759         hentfildim(d.filop.data);
  4 14760         læsfil(filref,1,zi);
  4 14761         spec:= 0;
  4 14762         antal:= fil(zi).spec(1);
  4 14763         spec:= spec+2;
  4 14764         for i:= 1 step 1 until antal do
  4 14765         begin
  5 14766           for j:= 1 step 1 until fil(zi).spec(1) extract 8 do
  5 14767           begin
  6 14768             busid:= fil(zi).spec(1+j) extract 14;
  6 14769             omr:= 0;
  6 14770             bi:= søg_omr_bus(busid,ll,gar,omr,s,tilst);
  6 14771             if bi>=0 then bustilstand(bi):= false;
  6 14772           end;
  5 14773           spec:= spec + 2*(fil(zi).spec(1) extract 8) + 2;
  5 14774         end;
  4 14775     
  4 14775     slut_grp_fri:
  4 14776         d.op.resultat:= res;
  4 14777       end;
  3 14778       if res <> 0 then goto returner;
  3 14779       gruppeopkald(opk_indeks,1):= gruppeopkald(opk_indeks,2):= 0;
  3 14780       signalch(cs_slet_fil,filop,vt_optype);
  3 14781     \f

  3 14781     message procedure vt_tilstand side 11 - 810424/cl;
  3 14782     
  3 14782       waitch(cs_fil,filop,vt_optype,-1);
  3 14783     
  3 14783       if d.filop.data(9) <> 0 then
  3 14784         fejlreaktion(16,d.filop.data(9),<:gruppe,fri:>,0);
  3 14785       d.op.resultat:= 3;
  3 14786     
  3 14786     returner:
  3 14787       disable
  3 14788       begin
  4 14789     <*+2*>
  4 14790     <**>  if testbit40 and overvåget then
  4 14791     <**>  begin
  5 14792     <**>    skriv_vt_tilst(out,0);
  5 14793     <**>    write(out,<:   vogntabel efter ændring:>);
  5 14794     <**>    p_vogntabel(out);
  5 14795     <**>  end;
  4 14796     <**>  if testbit43 and overvåget and (funk=4 or funk=5) then
  4 14797     <**>  begin
  5 14798     <**>    skriv_vt_tilst(out,0); write(out,<:   gruppetabel efter ændring:>);
  5 14799     <**>    p_gruppetabel(out);
  5 14800     <**>  end;
  4 14801     <**>  if (testbit41 and overvåget) or
  4 14802     <**>     (testbit46 and overvåget and (funk=4 or funk=5)) then
  4 14803     <**>  begin
  5 14804     <**>    skriv_vt_tilst(out,0);
  5 14805     <**>    write(out,<:   returner operation:>);
  5 14806     <**>    skriv_op(out,op);
  5 14807     <**>  end;
  4 14808     <*-2*>
  4 14809         signalch(d.op.retur,op,d.op.optype);
  4 14810       end;
  3 14811       goto vent_op;
  3 14812     
  3 14812     vt_tilst_trap:
  3 14813       disable skriv_vt_tilst(zbillede,1);
  3 14814     
  3 14814     end vt_tilstand;
  2 14815     \f

  2 14815     message procedure vt_rapport side 1 - 810428/cl;
  2 14816     
  2 14816     procedure vt_rapport(cs_fil,fil_opref);
  2 14817       value              cs_fil,fil_opref;
  2 14818       integer            cs_fil,fil_opref;
  2 14819     begin
  3 14820       integer array field op,filop;
  3 14821       integer funk,filref,antal,id_ant,res;
  3 14822       integer field i1,i2;
  3 14823     
  3 14823       procedure skriv_vt_rap(z,omfang);
  3 14824         value                  omfang;
  3 14825         zone                 z;
  3 14826         integer                omfang;
  3 14827       begin
  4 14828         write(z,"nl",1,<:+++ vt_rapport           :>);
  4 14829         if omfang <> 0 then
  4 14830         begin
  5 14831           skriv_coru(z,abs curr_coruno);
  5 14832           write(z,"nl",1,<<d>,
  5 14833             <:  cs_fil  :>,cs_fil,"nl",1,
  5 14834             <:  filop   :>,filop,"nl",1,
  5 14835             <:  op      :>,op,"nl",1,
  5 14836             <:  funk    :>,funk,"nl",1,
  5 14837             <:  filref  :>,filref,"nl",1,
  5 14838             <:  antal   :>,antal,"nl",1,
  5 14839             <:  id-ant  :>,id_ant,"nl",1,
  5 14840             <:  res     :>,res,"nl",1,
  5 14841             <::>);
  5 14842     
  5 14842           end;
  4 14843       end skriv_vt_rap;
  3 14844     
  3 14844       stackclaim(if cm_test then 198 else 146);
  3 14845       filop:= fil_opref;
  3 14846       i1:= 2; i2:= 4;
  3 14847       trap(vt_rap_trap);
  3 14848     
  3 14848     <*+2*>
  3 14849     <**> disable if testbit47 and overvåget or testbit28 then
  3 14850     <**>   skriv_vt_rap(out,0);
  3 14851     <*-2*>
  3 14852     \f

  3 14852     message procedure vt_rapport side 2 - 810505/cl;
  3 14853     
  3 14853     vent_op:
  3 14854       waitch(cs_vt_rap,op,gen_optype or vt_optype,-1);
  3 14855     
  3 14855     <*+2*>
  3 14856     <**>  disable begin
  4 14857     <**>  if testbit41 and overvåget then
  4 14858     <**>  begin
  5 14859     <**>    skriv_vt_rap(out,0);
  5 14860     <**>    write(out,<:   modtaget operation:>);
  5 14861     <**>    skriv_op(out,op);
  5 14862     <**>    ud;
  5 14863     <**>  end;
  4 14864     <**>  end;<*disable*>
  3 14865     <*-2*>
  3 14866     
  3 14866       disable
  3 14867       begin
  4 14868         integer opk;
  4 14869     
  4 14869         opk:= d.op.opkode extract 12;
  4 14870         funk:= if opk = 9 then 1 else
  4 14871                if opk =10 then 2 else
  4 14872                0;
  4 14873         if funk = 0 then fejlreaktion(2,opk,<:vt_gruppe:>,0);
  4 14874     
  4 14874         <* opret og tilknyt fil *>
  4 14875         start_operation(filop,curr_coruid,cs_fil,101);
  4 14876         d.filop.data(1):= 0; <*postantal(midlertidigt)*>
  4 14877         d.filop.data(2):= 2; <*postlængde*>
  4 14878         d.filop.data(3):=10; <*segmenter*>
  4 14879         d.filop.data(4):= 2 shift 10; <*spool fil*>
  4 14880         signalch(cs_opretfil,filop,vt_optype);
  4 14881       end;
  3 14882     
  3 14882       waitch(cs_fil,filop,vt_optype,-1);
  3 14883     
  3 14883       <* check resultat *>
  3 14884       if d.filop.data(9) <> 0 then
  3 14885        fejlreaktion(13,d.filop.data(9),<:vt-rapport:>,0);
  3 14886       filref:= d.filop.data(4);
  3 14887       antal:= 0;
  3 14888       goto case funk of (l_rapport,b_rapport);
  3 14889     \f

  3 14889     message procedure vt_rapport side 3 - 850820/cl;
  3 14890     
  3 14890     l_rapport:
  3 14891       disable
  3 14892       begin
  4 14893         integer i,j,s,ll,zi;
  4 14894         idant:= 0;
  4 14895         for id_ant:= id_ant+1 while d.op.data(id_ant)<>0 and id_ant<5 do 
  4 14896     <*+4*>
  4 14897     <**> if d.op.data(id_ant) shift (-22) <> 2 then
  4 14898     <**> begin
  5 14899     <**>   res:= 31;
  5 14900     <**>   fejlreaktion(10,d.op.data(id_ant),<:l-rapport ident:>,1);
  5 14901     <**>   goto l_rap_slut;
  5 14902     <**> end;
  4 14903     <*-4*>
  4 14904         ;
  4 14905     
  4 14905         for i:= 1 step 1 until id_ant do
  4 14906         begin
  5 14907           ll:= (1 shift 22) + d.op.data(i) extract 15 shift 7;
  5 14908           s:= binærsøg(sidste_linie_løb,
  5 14909                      linie_løb_tabel(j) - ll, j);
  5 14910           if s < 0 then j:= j +1;
  5 14911     
  5 14911           if j<= sidste_linie_løb then
  5 14912           begin <* skriv identer *>
  6 14913             while linie_løb_tabel(j) shift (-7) shift 7 = ll do
  6 14914             begin
  7 14915               antal:= antal +1;
  7 14916               s:= skrivfil(filref,antal,zi);
  7 14917               if s <> 0 then fejlreaktion(6,s,<:vt_rapport:>,0);
  7 14918               fil(zi).i1:= linie_løb_tabel(j);
  7 14919               fil(zi).i2:= bustabel(busindeks(j) extract 12);
  7 14920               j:= j +1;
  7 14921               if j > sidste_bus then goto linie_slut;
  7 14922             end;
  6 14923           end;
  5 14924     linie_slut:
  5 14925         end;
  4 14926         res:= 3;
  4 14927     l_rap_slut:
  4 14928       end <*disable*>;
  3 14929       goto returner;
  3 14930     \f

  3 14930     message procedure vt_rapport side 4 - 820301/cl;
  3 14931     
  3 14931     b_rapport:
  3 14932       disable
  3 14933       begin
  4 14934         integer i,j,s,zi,busnr1,busnr2;
  4 14935     <*+4*>
  4 14936     <**> for i:= 1,2 do
  4 14937     <**>   if d.op.data(i) shift (-14) <> 0 then
  4 14938     <**>   begin
  5 14939     <**>     res:= 31;
  5 14940     <**>     fejlreaktion(10,d.op.data(i),<:b-rapport ident:>,1);
  5 14941     <**>     goto bus_slut;
  5 14942     <**>   end;
  4 14943     <*-4*>
  4 14944     
  4 14944         busnr1:= d.op.data(1) extract 14;
  4 14945         busnr2:= if d.op.data(2) = 0 then busnr1 else d.op.data(2) extract 14;
  4 14946         if busnr1 = 0 or busnr2 < busnr1 then
  4 14947         begin
  5 14948           res:= 7; <* fejl i busnr *>
  5 14949           goto bus_slut;
  5 14950         end;
  4 14951     
  4 14951         s:= binærsøg(sidste_bus,bustabel(j) extract 14
  4 14952                        - busnr1,j);
  4 14953         if s < 0 then j:= j +1;
  4 14954         while j>1 and bustabel(j-1) extract 14 >= busnr1 do j:= j-1;
  4 14955         if j <= sidste_bus then
  4 14956         begin <* skriv identer *>
  5 14957           while bustabel(j) extract 14 <= busnr2 do
  5 14958           begin
  6 14959             i:= linie_løb_indeks(j) extract 12;
  6 14960             if i<>0 then
  6 14961             begin
  7 14962               antal:= antal +1;
  7 14963               s:= skriv_fil(filref,antal,zi);
  7 14964               if s <> 0 then fejlreaktion(6,s,<:vt-rapport:>,0);
  7 14965               fil(zi).i1:= bustabel(j);
  7 14966               fil(zi).i2:= linie_løb_tabel(i);
  7 14967             end;
  6 14968             j:= j +1;
  6 14969             if j > sidste_bus then goto bus_slut;
  6 14970           end;
  5 14971         end;
  4 14972     bus_slut:
  4 14973       end <*disable*>;
  3 14974       res:= 3; <*ok*>
  3 14975     \f

  3 14975     message procedure vt_rapport side 5 - 810409/cl;
  3 14976     
  3 14976     returner:
  3 14977       disable
  3 14978       begin
  4 14979         d.op.resultat:= res;
  4 14980         d.op.data(6):= antal;
  4 14981         d.op.data(7):= filref;
  4 14982         d.filop.data(1):= antal;
  4 14983         d.filop.data(3):= (antal*d.filop.data(2) -1)//256 +1;
  4 14984         i:= sæt_fil_dim(d.filop.data);
  4 14985         if i <> 0 then fejlreaktion(9,i,<:vt-rapport:>,0);
  4 14986     <*+2*>
  4 14987     <**>  if testbit41 and overvåget then
  4 14988     <**>  begin
  5 14989     <**>    skriv_vt_rap(out,0);
  5 14990     <**>    write(out,<:   returner operation:>);
  5 14991     <**>    skriv_op(out,op);
  5 14992     <**>  end;
  4 14993     <*-2*>
  4 14994         signalch(d.op.retur,op,d.op.optype);
  4 14995       end;
  3 14996       goto vent_op;
  3 14997     
  3 14997     vt_rap_trap:
  3 14998       disable skriv_vt_rap(zbillede,1);
  3 14999     
  3 14999     end vt_rapport;
  2 15000     \f

  2 15000     message procedure vt_gruppe side 1 - 810428/cl;
  2 15001     
  2 15001     procedure vt_gruppe(cs_fil,fil_opref);
  2 15002     
  2 15002       value             cs_fil,fil_opref;
  2 15003       integer           cs_fil,fil_opref;
  2 15004     begin
  3 15005       integer array field op, fil_op, iaf;
  3 15006       integer funk, res, filref, gr, i, antal, zi, s;
  3 15007       integer array identer(1:(if max_antal_grupper>max_antal_i_gruppe then
  3 15008                               max_antal_grupper else max_antal_i_gruppe));
  3 15009     
  3 15009       procedure skriv_vt_gruppe(zud,omfang);
  3 15010         value                       omfang;
  3 15011         integer                     omfang;
  3 15012         zone                    zud;
  3 15013       begin
  4 15014         integer øg;
  4 15015     
  4 15015         write(zud,"nl",1,<:+++ vt_gruppe            :>);
  4 15016         if omfang <> 0 then
  4 15017         disable
  4 15018         begin
  5 15019           skriv_coru(zud,abs curr_coruno);
  5 15020           write(zud,"nl",1,<<d>,
  5 15021             <:  cs_fil :>,cs_fil,"nl",1,
  5 15022             <:  op     :>,op,"nl",1,
  5 15023             <:  filop  :>,filop,"nl",1,
  5 15024             <:  funk   :>,funk,"nl",1,
  5 15025             <:  res    :>,res,"nl",1,
  5 15026             <:  filref :>,filref,"nl",1,
  5 15027             <:  gr     :>,gr,"nl",1,
  5 15028             <:  i      :>,i,"nl",1,
  5 15029             <:  antal  :>,antal,"nl",1,
  5 15030             <:  zi     :>,zi,"nl",1,
  5 15031             <:  s      :>,s,"nl",1,
  5 15032             <::>);
  5 15033           raf:= 0;
  5 15034           system(3,øg,identer);
  5 15035           write(zud,"nl",1,<:identer::>);
  5 15036           skriv_hele(zud,identer.raf,øg*2,2);
  5 15037         end;
  4 15038       end;
  3 15039     
  3 15039       stackclaim(if cm_test then 198 else 146);
  3 15040       filop:= fil_opref;
  3 15041       trap(vt_grp_trap);
  3 15042       iaf:= 0;
  3 15043     \f

  3 15043     message procedure vt_gruppe side 2 - 810409/cl;
  3 15044     
  3 15044     <*+2*>
  3 15045     <**> disable if testbit47 and overvåget or testbit28 then
  3 15046     <**>   skriv_vt_gruppe(out,0);
  3 15047     <*-2*>
  3 15048     
  3 15048     vent_op:
  3 15049       waitch(cs_vt_grp,op,gen_optype or vt_optype,-1);
  3 15050     <*+2*>
  3 15051     <**>disable
  3 15052     <**>begin
  4 15053     <**>  if testbit41 and overvåget then
  4 15054     <**>  begin
  5 15055     <**>    skriv_vt_gruppe(out,0);
  5 15056     <**>    write(out,<:   modtaget operation:>);
  5 15057     <**>    skriv_op(out,op);
  5 15058     <**>    ud;
  5 15059     <**>  end;
  4 15060     <**>end;
  3 15061     <*-2*>
  3 15062     
  3 15062       disable
  3 15063       begin
  4 15064         integer opk;
  4 15065     
  4 15065         opk:= d.op.opkode extract 12;
  4 15066         funk:= if opk=25 then 1 else
  4 15067                if opk=26 then 2 else
  4 15068                if opk=27 then 3 else
  4 15069                if opk=28 then 4 else
  4 15070                0;
  4 15071         if funk=0 then fejlreaktion(2,opk,<:vt_gruppe:>,0);
  4 15072       end;
  3 15073     <*+4*>
  3 15074     <**> if funk<4 and d.op.data(1) shift (-21) <> 5 then
  3 15075     <**> begin
  4 15076     <**>   disable begin
  5 15077     <**>     d.op.resultat:= 31;
  5 15078     <**>     fejlreaktion(10,d.op.data(1),<:gruppe ident:>,1);
  5 15079     <**>   end;
  4 15080     <**>   goto returner;
  4 15081     <**> end;
  3 15082     <*-4*>
  3 15083     
  3 15083       goto case funk of(definer,slet,vis,oversigt);
  3 15084     \f

  3 15084     message procedure vt_gruppe side 3 - 810505/cl;
  3 15085     
  3 15085     definer:
  3 15086       disable
  3 15087       begin
  4 15088         gr:= 0; res:= 0;
  4 15089         for i:= max_antal_grupper step -1 until 1 do
  4 15090         begin
  5 15091           if gruppetabel(i)=0 then gr:= i <*fri plads*> else
  5 15092           if gruppetabel(i)=d.op.data(1) then res:= 34; <*allerede defineret*>
  5 15093         end;
  4 15094         if gr=0 then res:= 32; <*ingen plads*>
  4 15095       end;
  3 15096       if res<>0 then goto slut_definer;
  3 15097       disable
  3 15098       begin <*fri plads fundet*>
  4 15099         antal:= d.op.data(2);
  4 15100         if antal <=0 or max_antal_i_gruppe<antal then
  4 15101           res:= 33 <*fejl i gruppestørrelse*>
  4 15102         else
  4 15103         begin
  5 15104           for i:= 1 step 1 until antal do
  5 15105           begin
  6 15106             s:= læsfil(d.op.data(3),i,zi);
  6 15107             if s<>0 then fejlreaktion(5,s,<:gruppe,def:>,0);
  6 15108             identer(i):= fil(zi).iaf(1);
  6 15109           end;
  5 15110           s:= modif_fil(tf_gruppedef,gr,zi);
  5 15111           if s<>0 then fejlreaktion(7,s,<:gruppe,def:>,0);
  5 15112           tofrom(fil(zi).iaf,identer,antal*2);
  5 15113           for i:= antal+1 step 1 until max_antal_i_gruppe do
  5 15114             fil(zi).iaf(i):= 0;
  5 15115           gruppetabel(gr):= d.op.data(1);
  5 15116           s:= modiffil(tf_gruppeidenter,gr,zi);
  5 15117           if s<>0 then fejlreaktion(7,s,<:gruppe,def:>,0);
  5 15118           fil(zi).iaf(1):= gruppetabel(gr);
  5 15119           res:= 3;
  5 15120         end;
  4 15121       end;
  3 15122     slut_definer:
  3 15123       <*slet fil*>
  3 15124       start_operation(fil_op,curr_coruid,cs_fil,104);
  3 15125       d.filop.data(4):= d.op.data(3);
  3 15126       signalch(cs_slet_fil,filop,vt_optype);
  3 15127       waitch(cs_fil,filop,vt_optype,-1);
  3 15128       if d.filop.data(9)<>0 then fejlreaktion(16,d.filop.data(9),<:gruppe,def:>,0);
  3 15129       d.op.resultat:= res;
  3 15130       goto returner;
  3 15131     \f

  3 15131     message procedure vt_gruppe side 4 - 810409/cl;
  3 15132     
  3 15132     slet:
  3 15133       disable
  3 15134       begin
  4 15135         gr:= 0; res:= 0;
  4 15136         for i:= 1 step 1 until max_antal_grupper do
  4 15137         begin
  5 15138           if gruppetabel(i)=d.op.data(1) then gr:= i;
  5 15139         end;
  4 15140         if gr = 0 then res:= 8 <*gruppe ej defineret*>
  4 15141         else
  4 15142         begin
  5 15143           for i:= 1 step 1 until max_antal_gruppeopkald do
  5 15144             if gruppeopkald(i,1)=d.op.data(1) then res:=15; <*gruppe optaget*>
  5 15145           if res = 0 then
  5 15146           begin
  6 15147             gruppetabel(gr):= 0;
  6 15148             s:= modif_fil(tf_gruppeidenter,gr,zi);
  6 15149             if s<>0 then fejlreaktion(7,s,<:gruppe,slet:>,0);
  6 15150             fil(zi).iaf(1):= gruppetabel(gr);
  6 15151             res:= 3;
  6 15152           end;
  5 15153         end;
  4 15154         d.op.resultat:= res;
  4 15155       end;
  3 15156       goto returner;
  3 15157     \f

  3 15157     message procedure vt_gruppe side 5 - 810505/cl;
  3 15158     
  3 15158     vis:
  3 15159       disable
  3 15160       begin
  4 15161         res:= 0; gr:= 0; antal:= 0; filref:= 0;
  4 15162         for i:= 1 step 1 until max_antal_grupper do
  4 15163           if gruppetabel(i) = d.op.data(1) then gr:= i;
  4 15164         if gr = 0 then res:= 8
  4 15165         else
  4 15166         begin
  5 15167           s:= læsfil(tf_gruppedef,gr,zi);
  5 15168           if s<>0 then fejlreaktion(5,s,<:gruppe,vis:>,0);
  5 15169           for i:= 1 step 1 until max_antal_i_gruppe do
  5 15170           begin
  6 15171             identer(i):= fil(zi).iaf(i);
  6 15172             if identer(i) <> 0 then antal:= antal +1;
  6 15173           end;
  5 15174           start_operation(filop,curr_coruid,cs_fil,101);
  5 15175           d.filop.data(1):= antal;  <*postantal*>
  5 15176           d.filop.data(2):= 1;      <*postlængde*>
  5 15177           d.filop.data(3):= (antal-1)//256 + 1; <*segmenter*>
  5 15178           d.filop.data(4):= 2 shift 10; <*spool fil*>
  5 15179           d.filop.data(5):= d.filop.data(6):=
  5 15180           d.filop.data(7):= d.filop.data(8):= 0;   <*navn*>
  5 15181           signalch(cs_opret_fil,filop,vt_optype);
  5 15182         end;
  4 15183       end;
  3 15184       if res <> 0 then goto slut_vis;
  3 15185       waitch(cs_fil,filop,vt_optype,-1);
  3 15186       disable
  3 15187       begin
  4 15188         if d.filop.data(9) <> 0 then
  4 15189           fejlreaktion(13,d.filop.data(9),<:gruppe,vis:>,0);
  4 15190         filref:= d.filop.data(4);
  4 15191         for i:= 1 step 1 until antal do
  4 15192         begin
  5 15193           s:= skrivfil(filref,i,zi);
  5 15194           if s <> 0 then fejlreaktion(6,s,<:gruppe,vis:>,0);
  5 15195           fil(zi).iaf(1):= identer(i);
  5 15196         end;
  4 15197         res:= 3;
  4 15198       end;
  3 15199     slut_vis:
  3 15200       d.op.resultat:= res; d.op.data(2):= antal; d.op.data(3):= filref;
  3 15201       goto returner;
  3 15202     \f

  3 15202     message procedure vt_gruppe side 6 - 810508/cl;
  3 15203     
  3 15203     oversigt:
  3 15204       disable
  3 15205       begin
  4 15206         res:= 0; antal:= 0; filref:= 0; iaf:= 0;
  4 15207         for i:= 1 step 1 until max_antal_grupper do
  4 15208         begin
  5 15209           if gruppetabel(i) <> 0 then
  5 15210           begin
  6 15211             antal:= antal +1;
  6 15212             identer(antal):= gruppetabel(i);
  6 15213           end;
  5 15214         end;
  4 15215         start_operation(filop,curr_coruid,cs_fil,101);
  4 15216         d.filop.data(1):= antal;  <*postantal*>
  4 15217         d.filop.data(2):= 1;      <*postlængde*>
  4 15218         d.filop.data(3):= if antal = 0 then 1 else
  4 15219                           (antal-1)//256 +1; <*segm.antal*>
  4 15220         d.filop.data(4):= 2 shift 10; <*spool fil*>
  4 15221         d.filop.data(5):= d.filop.data(6):=
  4 15222         d.filop.data(7):= d.filop.data(8):= 0; <*navn*>
  4 15223         signalch(cs_opretfil,filop,vt_optype);
  4 15224       end;
  3 15225       waitch(cs_fil,filop,vt_optype,-1);
  3 15226       disable
  3 15227       begin
  4 15228         if d.filop.data(9) <> 0 then
  4 15229           fejlreaktion(13,d.filop.data(9),<:grupper,over:>,0);
  4 15230         filref:= d.filop.data(4);
  4 15231         for i:= 1 step 1 until antal do
  4 15232         begin
  5 15233           s:= skriv_fil(filref,i,zi);
  5 15234           if s <> 0 then fejlreaktion(6,s,<:gruppe,over:>,0);
  5 15235           fil(zi).iaf(1):= identer(i);
  5 15236         end;
  4 15237         d.op.resultat:= 3; <*ok*>
  4 15238         d.op.data(1):= antal;
  4 15239         d.op.data(2):= filref;
  4 15240       end;
  3 15241     \f

  3 15241     message procedure vt_gruppe side 7 - 810505/cl;
  3 15242     
  3 15242     returner:
  3 15243       disable
  3 15244       begin
  4 15245     <*+2*>
  4 15246     <**>  if testbit43 and overvåget and (funk=1 or funk=2) then
  4 15247     <**>  begin
  5 15248     <**>    skriv_vt_gruppe(out,0);
  5 15249     <**>    write(out,<:   gruppetabel efter ændring:>);
  5 15250     <**>    p_gruppetabel(out);
  5 15251     <**>  end;
  4 15252     <**>  if testbit41 and overvåget then
  4 15253     <**>  begin
  5 15254     <**>    skriv_vt_gruppe(out,0);
  5 15255     <**>    write(out,<:  returner operation:>);
  5 15256     <**>    skriv_op(out,op);
  5 15257     <**>  end;
  4 15258     <*-2*>
  4 15259       signalch(d.op.retur,op,d.op.optype);
  4 15260       end;
  3 15261       goto vent_op;
  3 15262     
  3 15262     vt_grp_trap:
  3 15263       disable skriv_vt_gruppe(zbillede,1);
  3 15264     
  3 15264     end vt_gruppe;
  2 15265     \f

  2 15265     message procedure vt_spring side 1 - 810506/cl;
  2 15266     
  2 15266     procedure vt_spring(cs_spring_retur,spr_opref);
  2 15267       value             cs_spring_retur,spr_opref;
  2 15268       integer           cs_spring_retur,spr_opref;
  2 15269     begin
  3 15270       integer array field komm_op,spr_op,iaf;
  3 15271       real nu;
  3 15272       integer funk,interval,nr,i,s,id1,id2,res,res_inf,medd_kode,zi;
  3 15273     
  3 15273       procedure skriv_vt_spring(zud,omfang);
  3 15274         value                       omfang;
  3 15275         zone                    zud;
  3 15276         integer                     omfang;
  3 15277       begin
  4 15278         write(zud,"nl",1,<:+++ vt_spring            :>);
  4 15279         if omfang <> 0 then
  4 15280         begin
  5 15281           skriv_coru(zud,abs curr_coruno);
  5 15282           write(zud,"nl",1,<<d>,
  5 15283             <:cs-spring-retur:>,cs_spring_retur,"nl",1,
  5 15284             <:spr-op         :>,spr_op,"nl",1,
  5 15285             <:komm-op        :>,komm_op,"nl",1,
  5 15286             <:funk           :>,funk,"nl",1,
  5 15287             <:interval       :>,interval,"nl",1,
  5 15288             <:nr             :>,nr,"nl",1,
  5 15289             <:i              :>,i,"nl",1,
  5 15290             <:s              :>,s,"nl",1,
  5 15291             <:id1            :>,id1,"nl",1,
  5 15292             <:id2            :>,id2,"nl",1,
  5 15293             <:res            :>,res,"nl",1,
  5 15294             <:res-inf        :>,res_inf,"nl",1,
  5 15295             <:medd-kode      :>,medd_kode,"nl",1,
  5 15296             <:zi             :>,zi,"nl",1,
  5 15297             <:nu             :>,<<zddddd.dddd>,nu,"nl",1,
  5 15298             <::>);
  5 15299         end;
  4 15300       end;
  3 15301     \f

  3 15301     message procedure vt_spring side 2 - 810506/cl;
  3 15302     
  3 15302       procedure vt_operation(aktion,id1,id2,res,res_inf);
  3 15303         value             aktion,id1,id2;
  3 15304         integer           aktion,id1,id2,res,res_inf;
  3 15305       begin  <* aktion: 11=indsæt, 12=udtag, 13=omkod *>
  4 15306         integer array field akt_op;
  4 15307     
  4 15307         <* vent på adgang til vogntabel *>
  4 15308         waitch(cs_vt_adgang,akt_op,true,-1);
  4 15309     
  4 15309         <* start operation *>
  4 15310         disable
  4 15311         begin
  5 15312           start_operation(akt_op,curr_coruid,cs_spring_retur,aktion);
  5 15313           d.akt_op.data(1):= id1;
  5 15314           d.akt_op.data(2):= id2;
  5 15315           signalch(cs_vt_opd,akt_op,vt_optype);
  5 15316         end;
  4 15317     
  4 15317         <* afvent svar *>
  4 15318         waitch(cs_spring_retur,akt_op,vt_optype,-1);
  4 15319         res:= d.akt_op.resultat;
  4 15320         res_inf:= d.akt_op.data(3);
  4 15321     <*+2*>
  4 15322     <**> disable
  4 15323     <**>  if testbit45 and overvåget then
  4 15324     <**>  begin
  5 15325     <**>    real t;
  5 15326     <**>    skriv_vt_spring(out,0);
  5 15327     <**>    write(out,"nl",1,<<zddddd>,systime(4,d.akt_op.tid,t),<:.:>,t);
  5 15328     <**>    skriv_id(out,springtabel(nr,1),0);
  5 15329     <**>    write(out,<:.:>,string(extend springtabel(nr,2) shift 24),<:(:>,
  5 15330     <**>      <<d>,extend springtabel(nr,3) shift (-12) extract 24,<:)::>,
  5 15331     <**>      if aktion=11 then <:indsæt:> else if aktion=12 then <:udtag:> else
  5 15332     <**>      if aktion=13 then <:omkod:> else <:***:>,<: - res=:>,
  5 15333     <**>      d.akt_op.resultat,"sp",2);
  5 15334     <**>    skriv_id(out,d.akt_op.data(1),8);
  5 15335     <**>    skriv_id(out,d.akt_op.data(2),8);
  5 15336     <**>    skriv_id(out,d.akt_op.data(3),8);
  5 15337     <**>    systime(4,springtid(nr),t);
  5 15338     <**>    write(out,<:  springtid: :>,<<zd.dd>,entier(t/100),"nl",1);
  5 15339     <**>  end;
  4 15340     <*-2*>
  4 15341     
  4 15341         <* åbn adgang til vogntabel *>
  4 15342         disable signalch(cs_vt_adgang,akt_op,gen_optype or vt_optype);
  4 15343       end vt_operation;
  3 15344     \f

  3 15344     message procedure vt_spring side 2a - 810506/cl;
  3 15345     
  3 15345       procedure io_meddelelse(medd_no,bus,linie,springno);
  3 15346         value                 medd_no,bus,linie,springno;
  3 15347         integer               medd_no,bus,linie,springno;
  3 15348       begin
  4 15349         disable start_operation(spr_op,curr_coruid,cs_spring_retur,36);
  4 15350         d.spr_op.data(1):= medd_no;
  4 15351         d.spr_op.data(2):= bus;
  4 15352         d.spr_op.data(3):= linie;
  4 15353         d.spr_op.data(4):= springtabel(springno,1);
  4 15354         d.spr_op.data(5):= springtabel(springno,2);
  4 15355         disable signalch(cs_io,spr_op,io_optype or gen_optype);
  4 15356         waitch(cs_spring_retur,spr_op,io_optype or gen_optype,-1);
  4 15357       end;
  3 15358     
  3 15358       procedure returner_op(op,res);
  3 15359         value                  res;
  3 15360         integer array field op;
  3 15361         integer                res;
  3 15362       begin
  4 15363     <*+2*>
  4 15364     <**>  disable
  4 15365     <**>  if testbit41 and overvåget then
  4 15366     <**>  begin
  5 15367     <**>    skriv_vt_spring(out,0); write(out,<:   returner operation::>);
  5 15368     <**>    skriv_op(out,op);
  5 15369     <**>  end;
  4 15370     <*-2*>
  4 15371         d.op.resultat:= res;
  4 15372         signalch(d.op.retur,op,d.op.optype);
  4 15373       end;
  3 15374     \f

  3 15374     message procedure vt_spring side 3 - 810603/cl;
  3 15375     
  3 15375       iaf:= 0;
  3 15376       spr_op:= spr_opref;
  3 15377       stack_claim((if cm_test then 198 else 146) + 24);
  3 15378     
  3 15378       trap(vt_spring_trap);
  3 15379     
  3 15379       for i:= 1 step 1 until max_antal_spring do
  3 15380       begin
  4 15381         springtabel(i,1):= springtabel(i,2):= springtabel(i,3):= 0;
  4 15382         springtid(i):= springstart(i):= 0.0;
  4 15383       end;
  3 15384     
  3 15384     <*+2*>
  3 15385     <**> disable
  3 15386     <**> if testbit44 and overvåget then
  3 15387     <**> begin
  4 15388     <**>    skriv_vt_spring(out,0);
  4 15389     <**>    write(out,<:   springtabel efter initialisering:>);
  4 15390     <**>    p_springtabel(out); ud;
  4 15391     <**> end;
  3 15392     <*-2*>
  3 15393     
  3 15393     <*+2*>
  3 15394     <**> disable if testbit47 and overvåget or testbit28 then
  3 15395     <**>   skriv_vt_spring(out,0);
  3 15396     <*-2*>
  3 15397     \f

  3 15397     message procedure vt_spring side 4 - 810609/cl;
  3 15398     
  3 15398     næste_tid: <* find næste tid *>
  3 15399       disable
  3 15400       begin
  4 15401         interval:= -1; <*vent uendeligt*>
  4 15402         systime(1,0.0,nu);
  4 15403         for i:= 1 step 1 until max_antal_spring do
  4 15404           if springtabel(i,3) < 0 then
  4 15405             interval:= 5
  4 15406           else
  4 15407           if springtid(i) <> 0.0 and
  4 15408           ( (springtid(i)-nu) < interval or interval < 0 ) then
  4 15409             interval:= (if springtid(i) <= nu then 0 else
  4 15410                    round(springtid(i) -nu));
  4 15411         if interval=0 then interval:= 1;
  4 15412       end;
  3 15413     \f

  3 15413     message procedure vt_spring side 4a - 810525/cl;
  3 15414     
  3 15414       <* afvent operation eller timeout *>
  3 15415       waitch(cs_vt_spring,komm_op,vt_optype or gen_optype,interval);
  3 15416       if komm_op <> 0 then goto afkod_operation;
  3 15417     
  3 15417       <* timeout *>
  3 15418       systime(1,0.0,nu);
  3 15419       nr:= 1;
  3 15420     næste_sekv:
  3 15421       if nr > max_antal_spring then goto næste_tid;
  3 15422       if springtid(nr) > nu and springtabel(nr,3) > 0 or springstart(nr)=0.0 then
  3 15423       begin
  4 15424         nr:= nr +1;
  4 15425         goto næste_sekv;
  4 15426       end;
  3 15427       disable s:= modif_fil(tf_springdef,nr,zi);
  3 15428       if s <> 0 then fejlreaktion(7,s,<:spring:>,0);
  3 15429       if springtabel(nr,3) < 0 then
  3 15430       begin <* hængende spring *>
  4 15431         if springtid(nr) <= nu then
  4 15432         begin <* spring ikke udført indenfor angivet interval - annuler *>
  5 15433           <* find frit løb *>
  5 15434            disable
  5 15435            begin
  6 15436              id2:= 0;
  6 15437              for i:= 1 step 1 until springtabel(nr,3) extract 12 do
  6 15438                if fil(zi).iaf(2+i) shift (-22) = 1 then
  6 15439                id2:= fil(zi).iaf(1) extract 15 shift 7
  6 15440                    + fil(zi).iaf(2+i) shift (-12) extract 7 +1 shift 22;
  6 15441           end;
  5 15442           <* send meddelelse til io *>
  5 15443           io_meddelelse(5,0,id2,nr);
  5 15444     
  5 15444           <* annuler spring*>
  5 15445           for i:= 1,2,3 do springtabel(nr,i):= 0;
  5 15446           springtid(nr):= springstart(nr):= 0.0;
  5 15447         end
  4 15448         else
  4 15449         begin <* forsøg igen *>
  5 15450     \f

  5 15450     message procedure vt_spring side 5 - 810525/cl;
  5 15451     
  5 15451           i:= abs(extend springtabel(nr,3) shift (-12) extract 24);
  5 15452           if i = 2 <* første spring ej udført *> then
  5 15453           begin
  6 15454             id1:= fil(zi).iaf(1) extract 15 shift 7
  6 15455                 + fil(zi).iaf(3) shift (-12) extract 7 +1 shift 22;
  6 15456             id2:= id1;
  6 15457             vt_operation(12<*udtag*>,id1,id2,res,res_inf);
  6 15458           end
  5 15459           else
  5 15460           begin
  6 15461             id1:= fil(zi).iaf(1) extract 15 shift 7
  6 15462                 + fil(zi).iaf(2+i-1) shift (-12) extract 7 +1 shift 22;
  6 15463             id2:= id1 shift (-7) shift 7
  6 15464                 + fil(zi).iaf(2+i-2) shift (-12) extract 7;
  6 15465             vt_operation(13<*omkod*>,id1,id2,res,res_inf);
  6 15466           end;
  5 15467     
  5 15467           <* check resultat *>
  5 15468           medd_kode:= if res = 3 and i = 2 then 7 else
  5 15469                       if res = 3 and i > 2 then 8 else
  5 15470                    <* if res = 9 then 1 else
  5 15471                       if res =12 then 2 else
  5 15472                       if res =14 then 4 else
  5 15473                       if res =18 then 3 else *>
  5 15474                       0;
  5 15475           if medd_kode > 0 then
  5 15476             io_meddelelse(medd_kode,res_inf,if res=3 or res=12 then
  5 15477               id2 else id1,nr);
  5 15478           if res = 3 then
  5 15479           begin <* spring udført *>
  6 15480             disable s:= modiffil(tf_springdef,nr,zi); 
  6 15481             if s<>0 then fejlreaktion(7,s,<:spring:>,0);
  6 15482             springtabel(nr,3):= i shift 12 +springtabel(nr,3) extract 12;
  6 15483             fil(zi).iaf(2+i-1):= 1 shift 22 +fil(zi).iaf(2+i-1) extract 22;
  6 15484             if i > 2 then fil(zi).iaf(2+i-2):=
  6 15485               fil(zi).iaf(2+i-2) extract 22 add (1 shift 23);
  6 15486           end;
  5 15487         end;
  4 15488       end <* hængende spring *>
  3 15489       else
  3 15490       begin
  4 15491         i:= spring_tabel(nr,3) shift (-12);
  4 15492         id1:= fil(zi).iaf(1) extract 15 shift 7
  4 15493             + fil(zi).iaf(2+i) shift (-12) extract 7 +1 shift 22;
  4 15494         id2:= fil(zi).iaf(2+i-1) shift (-12) extract 7
  4 15495             + id1 shift (-7) shift 7;
  4 15496         vt_operation(13<*omkod*>,id1,id2,res,res_inf);
  4 15497     \f

  4 15497     message procedure vt_spring side 6 - 820304/cl;
  4 15498     
  4 15498         <* check resultat *>
  4 15499         medd_kode:= if res = 3 then 8 else
  4 15500                     if res = 9 then 1 else
  4 15501                     if res =12 then 2 else
  4 15502                     if res =14 then 4 else
  4 15503                     if res =18 then 3 else 
  4 15504                     if res =60 then 9 else 0;
  4 15505         if medd_kode > 0 then
  4 15506           io_meddelelse(medd_kode,res_inf,if res=3 or res=12 then id2 else id1,nr);
  4 15507     
  4 15507         <* opdater springtabel *>
  4 15508         disable s:= modiffil(tf_springdef,nr,zi);
  4 15509         if s<>0 then fejlreaktion(7,s,<:spring:>,0);
  4 15510         if fil(zi).iaf(2+i) extract 12 = 0 <*sidste løb*> then
  4 15511         begin
  5 15512           io_meddelelse(if res=3 then 6 else 5,0,
  5 15513             if res=3 then id1 else id2,nr);
  5 15514           for i:= 1,2,3 do springtabel(nr,i):= 0; <*annuleret*>
  5 15515           springtid(nr):= springstart(nr):= 0.0;
  5 15516         end
  4 15517         else
  4 15518         begin
  5 15519           springtid(nr):= springtid(nr) +(fil(zi).iaf(2+i) extract 12)*60.0;
  5 15520           if res = 3 then
  5 15521           begin
  6 15522             fil(zi).iaf(2+i-1):= (1 shift 23) add
  6 15523                                  (fil(zi).iaf(2+i-1) extract 22);
  6 15524             fil(zi).iaf(2+i)  := (1 shift 22) add
  6 15525                                  (fil(zi).iaf(2+i)   extract 22);
  6 15526             springtabel(nr,3):=(i+1) shift 12 add (springtabel(nr,3) extract 12);
  6 15527           end
  5 15528           else
  5 15529           springtabel(nr,3):= (-i-1) shift 12 add (springtabel(nr,3) extract 12);
  5 15530         end;
  4 15531       end;
  3 15532     <*+2*>
  3 15533     <**> disable
  3 15534     <**> if testbit44 and overvåget then
  3 15535     <**> begin
  4 15536     <**>   skriv_vt_spring(out,0); write(out,<:   springtabel efter ændring:>);
  4 15537     <**>   p_springtabel(out); ud;
  4 15538     <**> end;
  3 15539     <*-2*>
  3 15540     
  3 15540       nr:= nr +1;
  3 15541       goto næste_sekv;
  3 15542     \f

  3 15542     message procedure vt_spring side 7 - 810506/cl;
  3 15543     
  3 15543     afkod_operation:
  3 15544     <*+2*>
  3 15545     <**>  disable
  3 15546     <**>  if testbit41 and overvåget then
  3 15547     <**>  begin
  4 15548     <**>    skriv_vt_spring(out,0); write(out,<:   modtaget operation:>);
  4 15549     <**>    skriv_op(out,komm_op);
  4 15550     <**>  end;
  3 15551     <*-2*>
  3 15552     
  3 15552       disable
  3 15553       begin integer opk;
  4 15554     
  4 15554         opk:= d.komm_op.opkode extract 12;
  4 15555         funk:= if opk = 30 <*sp,d*> then 5 else
  4 15556                if opk = 31 <*sp. *> then 1 else
  4 15557                if opk = 32 <*sp,v*> then 4 else
  4 15558                if opk = 33 <*sp,o*> then 6 else
  4 15559                if opk = 34 <*sp,r*> then 2 else
  4 15560                if opk = 35 <*sp,a*> then 3 else
  4 15561                   0;
  4 15562         if funk = 0 then fejlreaktion(2,opk,<:vt_spring:>,0);
  4 15563     
  4 15563         if funk <> 6 <*sp,o*> then
  4 15564         begin <* find nr i springtabel *>
  5 15565           nr:= 0;
  5 15566           for i:= 1 step 1 until max_antal_spring do
  5 15567             if springtabel(i,1) = d.komm_op.data(1) and
  5 15568                springtabel(i,2) = d.komm_op.data(2) then nr:= i;
  5 15569         end;
  4 15570       end;
  3 15571       if funk = 6 then goto oversigt;
  3 15572       if funk = 5 then goto definer;
  3 15573     
  3 15573       if nr = 0 then
  3 15574       begin
  4 15575         returner_op(komm_op,37<*spring ukendt*>);
  4 15576         goto næste_tid;
  4 15577     end;
  3 15578     
  3 15578       goto case funk of(start,indsæt,annuler,vis);
  3 15579     \f

  3 15579     message procedure vt_spring side 8 - 810525/cl;
  3 15580     
  3 15580     start:
  3 15581       if springtabel(nr,3) shift (-12) <> 0 then
  3 15582       begin returner_op(komm_op,38); goto næste_tid; end;
  3 15583       disable
  3 15584       begin <* find linie_løb_og_udtag *>
  4 15585         s:= modif_fil(tf_springdef,nr,zi);
  4 15586         if s <> 0 then fejlreaktion(7,s,<:spring,start:>,0);
  4 15587         id1:= fil(zi).iaf(1) extract 15 shift 7
  4 15588             + fil(zi).iaf(3) shift (-12) extract 7 +1 shift 22;
  4 15589         id2:= 0;
  4 15590       end;
  3 15591       vt_operation(12,id1,id2,res,res_inf);
  3 15592     
  3 15592       disable <* check resultat *>
  3 15593         medd_kode:= if res = 3 <*ok*> then 7 else
  3 15594                     if res = 9 <*linie/løb ukendt*> then 1 else
  3 15595                     if res =14 <*optaget*> then 4 else
  3 15596                     if res =18 <*i kø*> then 3 else 0;
  3 15597       returner_op(komm_op,3);
  3 15598       if medd_kode = 0 then goto næste_tid;
  3 15599     
  3 15599       <* send spring-meddelelse til io *>
  3 15600       io_meddelelse(medd_kode,res_inf,id1,nr);
  3 15601     
  3 15601       <* opdater springtabel *>
  3 15602       disable
  3 15603       begin
  4 15604         s:= modif_fil(tf_springdef,nr,zi);
  4 15605         if s <> 0 then fejlreaktion(7,s,<:spring,start:>,0);
  4 15606         springtabel(nr,3):= (if res = 3 then 2 else (-2)) shift 12
  4 15607                             add (springtabel(nr,3) extract 12);
  4 15608         systime(1,0.0,nu);
  4 15609         springstart(nr):= nu;
  4 15610         springtid(nr):= nu +fil(zi).iaf(3) extract 12 *60.0;
  4 15611         if res = 3 then fil(zi).iaf(3):= fil(zi).iaf(3) add (1 shift 22);
  4 15612       end;
  3 15613     <*+2*>
  3 15614     <**> disable
  3 15615     <**> if testbit44 and overvåget then
  3 15616     <**> begin
  4 15617     <**>   skriv_vt_spring(out,0); write(out,<:   springtabel efter ændring:>);
  4 15618     <**>   p_springtabel(out); ud;
  4 15619     <**> end;
  3 15620     <*-2*>
  3 15621     
  3 15621       goto næste_tid;
  3 15622     \f

  3 15622     message procedure vt_spring side 9 - 810506/cl;
  3 15623     
  3 15623     indsæt:
  3 15624       if springtabel(nr,3) shift (-12) = 0 then
  3 15625       begin <* ikke igangsat *>
  4 15626         returner_op(komm_op,41);
  4 15627        goto næste_tid;
  4 15628       end;
  3 15629       <* find frie linie/løb *>
  3 15630       disable
  3 15631       begin
  4 15632         s:= læs_fil(tf_springdef,nr,zi);
  4 15633         if s <> 0 then fejlreaktion(5,s,<:spring,reserve:>,0);
  4 15634         id2:= 0;
  4 15635         for i:= 1 step 1 until springtabel(nr,3) extract 12 do
  4 15636           if fil(zi).iaf(2+i) shift (-22) = 1 then
  4 15637           id2:= 1 shift 22 +fil(zi).iaf(1) extract 15 shift 7
  4 15638                            +fil(zi).iaf(2+i) shift (-12) extract 7;
  4 15639           id1:= d.komm_op.data(3);
  4 15640       end;
  3 15641     
  3 15641       if id2<>0 then
  3 15642         vt_operation(11,id1,id2,res,res_inf)
  3 15643       else
  3 15644         res:= 42;
  3 15645     
  3 15645       disable <* check resultat *>
  3 15646       medd_kode:= if res = 3 <*ok*> then 8 else
  3 15647                   if res =10 <*bus ukendt*> then 0 else
  3 15648                   if res =11 <*bus allerede indsat*> then 0 else
  3 15649                   if res =12 <*linie/løb allerede besat*> then 2 else
  3 15650                   if res =42 <*intet frit linie/løb*> then 5 else 0;
  3 15651       if res = 11 or res = 12 then d.komm_op.data(4):= res_inf;
  3 15652       returner_op(komm_op,res);
  3 15653       if medd_kode = 0 then goto næste_tid;
  3 15654       
  3 15654       <* send springmeddelelse til io *>
  3 15655       if res<>42 then io_meddelelse(medd_kode,id1,id2,nr);
  3 15656       io_meddelelse(5,0,0,nr);
  3 15657     \f

  3 15657     message procedure vt_spring side 9a - 810525/cl;
  3 15658     
  3 15658       <* annuler springtabel *>
  3 15659       for i:= 1,2,3 do springtabel(nr,i):= 0;
  3 15660       springtid(nr):=  springstart(nr):= 0.0;
  3 15661     <*+2*>
  3 15662     <**> disable
  3 15663     <**> if testbit44 and overvåget then
  3 15664     <**> begin
  4 15665     <**>   skriv_vt_spring(out,0); write(out,<:   springtabel efter ændring:>);
  4 15666     <**>   p_springtabel(out); ud;
  4 15667     <**> end;
  3 15668     <*-2*>
  3 15669     
  3 15669       goto næste_tid;
  3 15670     \f

  3 15670     message procedure vt_spring side 10 - 810525/cl;
  3 15671     
  3 15671     annuler:
  3 15672       disable
  3 15673       begin <* find evt. frit linie/løb *>
  4 15674         s:= læs_fil(tf_springdef,nr,zi);
  4 15675         if s <> 0 then fejlreaktion(5,s,<:spring,annuler:>,0);
  4 15676         id1:= id2:= 0;
  4 15677         for i:= 1 step 1 until springtabel(nr,3) extract 12 do
  4 15678           if fil(zi).iaf(2+i) shift (-22) = 1 then
  4 15679             id2:= fil(zi).iaf(1) extract 15 shift 7
  4 15680                 + fil(zi).iaf(2+i) shift (-12) extract 7 +1 shift 22;
  4 15681         returner_op(komm_op,3);
  4 15682       end;
  3 15683     
  3 15683       <* send springmeddelelse til io *>
  3 15684       io_meddelelse(5,id1,id2,nr);
  3 15685     
  3 15685       <* annuler springtabel *>
  3 15686       for i:= 1,2,3 do springtabel(nr,i):= 0;
  3 15687       springtid(nr):= springstart(nr):= 0.0;
  3 15688     <*+2*>
  3 15689     <**> disable
  3 15690     <**> if testbit44 and overvåget then
  3 15691     <**> begin
  4 15692     <**>   skriv_vt_spring(out,0); write(out,<:   springtabel efter ændring:>);
  4 15693     <**>   p_springtabel(out); ud;
  4 15694     <**> end;
  3 15695     <*-2*>
  3 15696     
  3 15696       goto næste_tid;
  3 15697     
  3 15697     definer:
  3 15698       if nr <> 0 then <* allerede defineret *>
  3 15699       begin
  4 15700         res:= 36;
  4 15701         goto slut_definer;
  4 15702       end;
  3 15703     
  3 15703       <* find frit nr *>
  3 15704       i:= 0;
  3 15705       for i:= i+1 while i<= max_antal_spring and nr = 0 do
  3 15706         if springtabel(i,1) = 0 then nr:= i;
  3 15707       if nr = 0 then
  3 15708       begin
  4 15709         res:= 32; <* ingen fri plads *>
  4 15710         goto slut_definer;
  4 15711       end;
  3 15712     \f

  3 15712     message procedure vt_spring side 11 - 810525/cl;
  3 15713     
  3 15713       disable
  3 15714       begin integer array fdim(1:8),ia(1:32);
  4 15715         <* læs sekvens *>
  4 15716         fdim(4):= d.komm_op.data(3);
  4 15717         s:= hent_fil_dim(fdim);
  4 15718         if s <> 0 then fejlreaktion(8,s,<:spring,def:>,0);
  4 15719         if fdim(1) > 30 then
  4 15720           res:= 35 <* springsekvens for stor *>
  4 15721         else
  4 15722         begin
  5 15723           for i:= 1 step 1 until fdim(1) do
  5 15724           begin
  6 15725             s:= læs_fil(fdim(4),i,zi);
  6 15726             if s <> 0 then fejlreaktion(5,s,<:spring,def:>,0);
  6 15727             ia(i):= fil(zi).iaf(1) shift 12;
  6 15728             if i>1 then ia(i-1):= ia(i-1) + fil(zi).iaf(1) shift (-12);
  6 15729           end;
  5 15730           s:= modif_fil(tf_springdef,nr,zi);
  5 15731           if s <> 0 then fejlreaktion(7,s,<:spring,def:>,0);
  5 15732           fil(zi).iaf(1):= springtabel(nr,1):= d.komm_op.data(1);
  5 15733           fil(zi).iaf(2):= springtabel(nr,2):= d.komm_op.data(2);
  5 15734           iaf:= 4;
  5 15735           tofrom(fil(zi).iaf,ia,60);
  5 15736           iaf:= 0;
  5 15737           springtabel(nr,3):= fdim(1);
  5 15738           springtid(nr):= springstart(nr):= 0.0;
  5 15739           res:= 3;
  5 15740         end;
  4 15741       end;
  3 15742     \f

  3 15742     message procedure vt_spring side 11a - 81-525/cl;
  3 15743     
  3 15743     slut_definer:
  3 15744     
  3 15744       <* slet fil *>
  3 15745       start_operation(spr_op,curr_coruid,cs_spring_retur,104);
  3 15746       d.spr_op.data(4):= d.komm_op.data(3); <* filref *>
  3 15747       signalch(cs_slet_fil,spr_op,vt_optype);
  3 15748       waitch(cs_spring_retur,spr_op,vt_optype,-1);
  3 15749       if d.spr_op.data(9) <> 0 then
  3 15750         fejlreaktion(16,d.spr_op.data(9),<:spring,def:>,0);
  3 15751       returner_op(komm_op,res);
  3 15752     <*+2*>
  3 15753     <**> disable
  3 15754     <**> if testbit44 and overvåget then
  3 15755     <**> begin
  4 15756     <**>   skriv_vt_spring(out,0); write(out,<:    springtabel efter ændring:>);
  4 15757     <**>   p_springtabel(out); ud;
  4 15758     <**> end;
  3 15759     <*-2*>
  3 15760       goto næste_tid;
  3 15761     \f

  3 15761     message procedure vt_spring side 12 - 810525/cl;
  3 15762     
  3 15762     vis:
  3 15763       disable
  3 15764       begin
  4 15765         <* tilknyt fil *>
  4 15766         start_operation(spr_op,curr_coruid,cs_spring_retur,101);
  4 15767         d.spr_op.data(1):= (springtabel(nr,3) extract 12)*2;
  4 15768         d.spr_op.data(2):= 1;
  4 15769         d.spr_op.data(3):= (d.spr_op.data(1) -1)//256 +1;
  4 15770         d.spr_op.data(4):= 2 shift 10; <* spoolfil *>
  4 15771         signalch(cs_opret_fil,spr_op,vt_optype);
  4 15772       end;
  3 15773     
  3 15773       <* afvent svar *>
  3 15774       waitch(cs_spring_retur,spr_op,vt_optype,-1);
  3 15775       if d.spr_op.data(9) <> 0 then
  3 15776        fejlreaktion(13,d.spr_op.data(9),<:spring,vis:>,0);
  3 15777       disable
  3 15778       begin integer array ia(1:30);
  4 15779         s:= læs_fil(tf_springdef,nr,zi);
  4 15780         if s <> 0 then fejlreaktion(5,s,<:spring,vis:>,0);
  4 15781         iaf:= 4;
  4 15782         tofrom(ia,fil(zi).iaf,60);
  4 15783         iaf:= 0;
  4 15784         for i:= 1 step 1 until d.spr_op.data(1) do
  4 15785         begin
  5 15786           s:= skriv_fil(d.spr_op.data(4),(i-1)*2+1,zi);
  5 15787           if s <> 0 then fejlreaktion(6,s,<:spring,vis:>,0);
  5 15788           fil(zi).iaf(1):= if ia(i) shift (-22) = 0 then
  5 15789                            ia(i) shift (-12) extract 7
  5 15790                          else -(ia(i) shift (-12) extract 7);
  5 15791           s:= skriv_fil(d.spr_op.data(4),2*i,zi);
  5 15792           if s <> 0 then fejlreaktion(6,s,<:spring,vis:>,0);
  5 15793           fil(zi).iaf(1):= if i < d.spr_op.data(1) then
  5 15794                              (if ia(i+1) shift (-22) <> 0 then -(ia(i) extract 12)
  5 15795                               else ia(i) extract 12)
  5 15796                            else 0;
  5 15797         end;
  4 15798         d.spr_op.data(1):= d.spr_op.data(1) - 1;
  4 15799         sæt_fil_dim(d.spr_op.data);
  4 15800         d.komm_op.data(3):= d.spr_op.data(1);
  4 15801         d.komm_op.data(4):= d.spr_op.data(4);
  4 15802         raf:= data+8;
  4 15803         d.komm_op.raf(1):= springstart(nr);
  4 15804         returner_op(komm_op,3);
  4 15805       end;
  3 15806       goto næste_tid;
  3 15807     \f

  3 15807     message procedure vt_spring side 13 - 810525/cl;
  3 15808     
  3 15808     oversigt:
  3 15809       disable
  3 15810       begin
  4 15811         <* opret fil *>
  4 15812         start_operation(spr_op,curr_coruid,cs_spring_retur,101);
  4 15813         d.spr_op.data(1):= max_antal_spring;
  4 15814         d.spr_op.data(2):= 4;
  4 15815         d.spr_op.data(3):= (max_antal_spring -1)//64 +1;
  4 15816         d.spr_op.data(4):= 2 shift 10; <* spoolfil *>
  4 15817         signalch(cs_opret_fil,spr_op,vt_optype);
  4 15818       end;
  3 15819     
  3 15819       <* afvent svar *>
  3 15820       waitch(cs_spring_retur,spr_op,vt_optype,-1);
  3 15821       if d.spr_op.data(9) <> 0 then
  3 15822         fejlreaktion(13,d.spr_op.data(9),<:spring,over:>,0);
  3 15823       disable
  3 15824       begin
  4 15825         nr:= 0;
  4 15826         for i:= 1 step 1 until max_antal_spring do
  4 15827         begin
  5 15828           if springtabel(i,1) <> 0 then
  5 15829           begin
  6 15830             nr:= nr +1;
  6 15831             s:= skriv_fil(d.spr_op.data(4),nr,zi);
  6 15832             if s <> 0 then fejlreaktion(6,s,<:spring,over:>,0);
  6 15833             fil(zi).iaf(1):= springtabel(i,1);
  6 15834             fil(zi).iaf(2):= springtabel(i,2);
  6 15835             fil(zi,2):= springstart(i);
  6 15836           end;
  5 15837         end;
  4 15838         d.spr_op.data(1):= nr;
  4 15839         s:= sæt_fil_dim(d.spr_op.data);
  4 15840         if s <> 0 then fejlreaktion(9,s,<:spring,over:>,0);
  4 15841         d.komm_op.data(1):= nr;
  4 15842         d.komm_op.data(2):= d.spr_op.data(4);
  4 15843         returner_op(komm_op,3);
  4 15844       end;
  3 15845       goto næste_tid;
  3 15846     
  3 15846     vt_spring_trap:
  3 15847       disable skriv_vt_spring(zbillede,1);
  3 15848     
  3 15848     end vt_spring;
  2 15849     \f

  2 15849     message procedure vt_auto side 1 - 810505/cl;
  2 15850     
  2 15850     procedure vt_auto(cs_auto_retur,auto_opref);
  2 15851       value           cs_auto_retur,auto_opref;
  2 15852       integer         cs_auto_retur,auto_opref;
  2 15853     begin
  3 15854       integer array field op,auto_op,iaf;
  3 15855       integer filref,id1,id2,aktion,postnr,sidste_post,interval,res,
  3 15856               res_inf,i,s,zi,kl,døgnstart;
  3 15857       real t,nu,næste_tid;
  3 15858       boolean optaget;
  3 15859       integer array filnavn,nytnavn(1:4);
  3 15860     
  3 15860       procedure skriv_vt_auto(zud,omfang);
  3 15861         value                     omfang;
  3 15862         zone                  zud;
  3 15863         integer                   omfang;
  3 15864       begin
  4 15865         long array field laf;
  4 15866     
  4 15866         laf:= 0;
  4 15867         write(zud,"nl",1,<:+++ vt_auto              :>);
  4 15868         if omfang<>0 then
  4 15869         begin
  5 15870           skriv_coru(zud,abs curr_coruno);
  5 15871           write(zud,"nl",1,<<d>,
  5 15872             <:cs-auto-retur  :>,cs_auto_retur,"nl",1,
  5 15873             <:op             :>,op,"nl",1,
  5 15874             <:auto-op        :>,auto_op,"nl",1,
  5 15875             <:filref         :>,filref,"nl",1,
  5 15876             <:id1            :>,id1,"nl",1,
  5 15877             <:id2            :>,id2,"nl",1,
  5 15878             <:aktion         :>,aktion,"nl",1,
  5 15879             <:postnr         :>,postnr,"nl",1,
  5 15880             <:sidste-post    :>,sidste_post,"nl",1,
  5 15881             <:interval       :>,interval,"nl",1,
  5 15882             <:res            :>,res,"nl",1,
  5 15883             <:res-inf        :>,res_inf,"nl",1,
  5 15884             <:i              :>,i,"nl",1,
  5 15885             <:s              :>,s,"nl",1,
  5 15886             <:zi             :>,zi,"nl",1,
  5 15887             <:kl             :>,kl,"nl",1,
  5 15888             <:døgnstart      :>,døgnstart,"nl",1,
  5 15889             <:optaget        :>,if optaget then <:true:> else <:false:>,"nl",1,
  5 15890             <:t              :>,<<zddddd.dddd>,t,"nl",1,
  5 15891             <:nu             :>,nu,"nl",1,
  5 15892             <:næste-tid      :>,næste_tid,"nl",1,
  5 15893             <:filnavn        :>,filnavn.laf,"nl",1,
  5 15894             <:nytnavn        :>,nytnavn.laf,"nl",1,
  5 15895             <::>);
  5 15896         end;
  4 15897       end skriv_vt_auto;
  3 15898     \f

  3 15898     message procedure vt_auto side 2 - 810507/cl;
  3 15899     
  3 15899       iaf:= 0;
  3 15900       auto_op:= auto_opref;
  3 15901       filref:= id1:= id2:= aktion:= postnr:= sidste_post:= 0;
  3 15902       optaget:= false;
  3 15903       næste_tid:= 0.0;
  3 15904       for i:= 1,2,3,4 do filnavn(i):=nytnavn(i):=0;
  3 15905       stack_claim(if cm_test then 298 else 246);
  3 15906       trap(vt_auto_trap);
  3 15907     
  3 15907     <*+2*>
  3 15908     <**> disable if testbit47 and overvåget or testbit28 then
  3 15909     <**>   skriv_vt_auto(out,0);
  3 15910     <*-2*>
  3 15911     
  3 15911     vent:
  3 15912     
  3 15912       systime(1,0.0,nu);
  3 15913       interval:= if filref=0 then (-1) <*uendeligt*> else
  3 15914                  if næste_tid > nu then round(næste_tid-nu) else
  3 15915                  if optaget then 5 else 0;
  3 15916       if interval=0 then interval:= 1;
  3 15917     
  3 15917     <*v*> waitch(cs_vt_auto,op,vt_optype or gen_optype,interval);
  3 15918     
  3 15918       if op<>0 then goto filskift;
  3 15919     
  3 15919       <* vent på adgang til vogntabel *>
  3 15920     <*v*> waitch(cs_vt_adgang,op,vt_optype,-1);
  3 15921     
  3 15921       <* afsend relevant operation til opdatering af vogntabel *>
  3 15922       start_operation(op,curr_coruid,cs_auto_retur,aktion);
  3 15923       d.op.data(1):= id1;
  3 15924       d.op.data(2):= id2;
  3 15925       signalch(cs_vt_opd,op,vt_optype);
  3 15926     <*v*> waitch(cs_auto_retur,op,vt_optype,-1);
  3 15927       res:= d.op.resultat;
  3 15928       id2:= d.op.data(2);
  3 15929       res_inf:= d.op.data(3);
  3 15930     
  3 15930       <* åbn for vogntabel *>
  3 15931       signalch(cs_vt_adgang,op,vt_optype or gen_optype);
  3 15932     \f

  3 15932     message procedure vt_auto side 3 - 810507/cl;
  3 15933     
  3 15933       <* behandl svar fra opdatering *>
  3 15934     <*+2*>
  3 15935     <**> disable
  3 15936     <**> if testbit45 and overvåget then
  3 15937     <**> begin
  4 15938     <**>   integer li,lø,bo;
  4 15939     <**>   skriv_vt_auto(out,0);
  4 15940     <**>   write(out,"nl",1,<<zddddd>,systime(4,d.op.tid,t),<:.:>,entier t,
  4 15941     <**>     <:  POSTNR. :>,<<d>,postnr,if aktion=12 then <:: SLET:> else
  4 15942     <**>     <:: OMKOD:>,<: - RES=:>,res);
  4 15943     <**>   for i:= 1,2 do
  4 15944     <**>   begin
  5 15945     <**>     li:= d.op.data(i);
  5 15946     <**>     lø:= li extract 7; bo:= li shift (-7) extract 5;
  5 15947     <**>     if bo<>0 then bo:= bo + 'A' - 1;
  5 15948     <**>     li:= li shift (-12) extract 10;
  5 15949     <**>     write(out,<< ddd>,li,false add bo,1,"/",1,<<d>,lø);
  5 15950     <**>   end;
  4 15951     <**>   systime(4,næste_tid,t);
  4 15952     <**>   write(out,<< zddd>,d.op.data(3) extract 14,<:  - AUTOTID::>,
  4 15953     <**>     << zd.dd>,t/10000,"nl",1);
  4 15954     <**> end;
  3 15955     <*-2*>
  3 15956       if res=31 then
  3 15957         fejlreaktion(10,aktion,<:AUTO: SYSTEMFEJL:>,1)
  3 15958       else
  3 15959       if res<>3 then
  3 15960       begin
  4 15961         if -, optaget then
  4 15962         begin
  5 15963           disable start_operation(auto_op,curr_coruid,cs_auto_retur,22);
  5 15964           d.auto_op.data(1):= if res=9 then 1 else if res=12 then 2 else
  5 15965              if res=18 then 3 else if res=60 then 9 else 4;
  5 15966           d.auto_op.data(2):= res_inf;
  5 15967           d.auto_op.data(3):= if res=12 then id2 else id1;
  5 15968           signalch(cs_io,auto_op,io_optype or gen_optype);
  5 15969           waitch(cs_auto_retur,auto_op,io_optype or gen_optype,-1);
  5 15970         end;
  4 15971         if res=14 or res=18 then <* i kø eller optaget *>
  4 15972         begin
  5 15973           optaget:= true;
  5 15974           goto vent;
  5 15975         end;
  4 15976       end;
  3 15977       optaget:= false;
  3 15978     \f

  3 15978     message procedure vt_auto side 4 - 810507/cl;
  3 15979     
  3 15979       <* find næste post *>
  3 15980       disable
  3 15981       begin
  4 15982         if postnr=sidste_post then
  4 15983         begin <* døgnskift *>
  5 15984           postnr:= 1;
  5 15985           døgnstart:= systime(4,systid(døgnstart+1,120000),t);
  5 15986         end
  4 15987         else postnr:= postnr+1;
  4 15988         s:= læsfil(filref,postnr,zi);
  4 15989         if s<>0 then fejlreaktion(5,s,<:auto:>,0);
  4 15990         aktion:= fil(zi).iaf(1);
  4 15991         næste_tid:= systid(døgnstart,fil(zi).iaf(2));
  4 15992         id1:= fil(zi).iaf(3);
  4 15993         id2:= fil(zi).iaf(4);
  4 15994       end;
  3 15995       goto vent;
  3 15996     \f

  3 15996     message procedure vt_auto side 5 - 810507/cl;
  3 15997     
  3 15997     filskift:
  3 15998     
  3 15998     <*+2*>
  3 15999     <**> disable
  3 16000     <**> if testbit41 and overvåget then
  3 16001     <**> begin
  4 16002     <**>   skriv_vt_auto(out,0);
  4 16003     <**>   write(out,<:   modtaget operation::>);
  4 16004     <**>   skriv_op(out,op);
  4 16005     <**> end;
  3 16006     <*-2*>
  3 16007       for i:= 1 step 1 until 4 do filnavn(i):=nytnavn(i):= 0;
  3 16008       res:= 46;
  3 16009       if d.op.opkode extract 12 <> 21 then
  3 16010         fejlreaktion(2,d.op.opkode extract 12,<:auto,filskift:>,0);
  3 16011       if filref = 0 then goto knyt;
  3 16012     
  3 16012       <* gem filnavn til io-meddelelse *>
  3 16013       disable begin
  4 16014         integer array fdim(1:8);
  4 16015         integer array field navn;
  4 16016         fdim(4):= filref;
  4 16017         hentfildim(fdim);
  4 16018         navn:= 8;
  4 16019         tofrom(filnavn,fdim.navn,8);
  4 16020       end;
  3 16021     
  3 16021       <* frivgiv tilknyttet autofil *>
  3 16022       disable start_operation(auto_op,curr_coruid,cs_auto_retur,103);
  3 16023       d.auto_op.data(4):= filref;
  3 16024       signalch(cs_frigiv_fil,auto_op,vt_optype);
  3 16025     <*v*> waitch(cs_auto_retur,auto_op,vt_optype,-1);
  3 16026       if d.auto_op.data(9) <> 0 then
  3 16027         fejlreaktion(15,d.auto_op.data(9),<:auto,filskift:>,0);
  3 16028       filref:= aktion:= id1:= id2:= postnr:= sidste_post:= 0;
  3 16029       optaget:= false;
  3 16030       næste_tid:= 0.0;
  3 16031       res:= 3;
  3 16032     \f

  3 16032     message procedure vt_auto side 6 - 810507/cl;
  3 16033     
  3 16033       <* tilknyt evt. ny autofil *>
  3 16034     knyt:
  3 16035       if d.op.data(1)<>0 then
  3 16036       begin
  4 16037         disable startoperation(auto_op,curr_coruid,cs_auto_retur,102);
  4 16038         d.auto_op.data(4):= 30 shift 12; <* contentskey,subno *> 
  4 16039         for i:= 1,2,3,4 do d.auto_op.data(4+i):= d.op.data(i);
  4 16040         disable
  4 16041         begin integer pos1,pos2;
  5 16042           pos1:= pos2:= 13;
  5 16043           while læstegn(d.auto_op.data,pos1,i)<>0 do
  5 16044           begin
  6 16045             if 'A'<=i and i<='Å' then i:= i - 'A' + 'a';
  6 16046             skrivtegn(d.auto_op.data,pos2,i);
  6 16047           end;
  5 16048         end;
  4 16049         signalch(cs_tilknyt_fil,auto_op,vt_optype);
  4 16050     <*v*> waitch(cs_auto_retur,auto_op,vt_optype,-1);
  4 16051         s:= d.auto_op.data(9);
  4 16052         if s=0        then res:= 3  <* ok           *> else
  4 16053         if s=1 or s=2 then res:= 46 <* ukendt navn  *> else
  4 16054         if s=5 or s=7 then res:= 47 <* galt indhold *> else
  4 16055         if s=6        then res:= 48 <* i brug       *> else
  4 16056           fejlreaktion(14,2,<:auto,filskift:>,0);
  4 16057         if res<>3 then goto returner;
  4 16058     
  4 16058         tofrom(nytnavn,d.op.data,8);
  4 16059     
  4 16059         <* find første post *>
  4 16060         disable
  4 16061         begin
  5 16062           døgnstart:= systime(5,0.0,t);
  5 16063           kl:= round t;
  5 16064           filref:= d.auto_op.data(4);
  5 16065           sidste_post:= d.auto_op.data(1);
  5 16066           postnr:= 0;
  5 16067           for postnr:= postnr+1 while postnr <= sidste_post do
  5 16068           begin
  6 16069               s:= læsfil(filref,postnr,zi);
  6 16070             if s<>0 then fejlreaktion(5,s,<:auto,filskift:>,0);
  6 16071             if fil(zi).iaf(2) > kl then goto post_fundet;
  6 16072           end;
  5 16073           postnr:= 1;
  5 16074           døgnstart:= systime(4,systid(døgnstart+1,120000),t);
  5 16075     \f

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

  2 16505 
  2 16505 algol list.off;
  2 16506 message coroutinemonitor - 11 ;
  2 16507   
  2 16507 
  2 16507     <*************** coroutine monitor procedures ***************>
  2 16508 
  2 16508 
  2 16508     <***** delay *****
  2 16509 
  2 16509     this procedure links the calling coroutine into the timerqueue and sets
  2 16510     the timeout value to 'timeout'. *>
  2 16511 
  2 16511 
  2 16511     procedure delay (timeout);
  2 16512     value timeout;
  2 16513     integer timeout;
  2 16514     begin
  3 16515       link(current, idlequeue);
  3 16516       link(current + corutimerchain, timerqueue);
  3 16517       d.current.corutimer:= timeout;
  3 16518 
  3 16518 
  3 16518       passivate;
  3 16519       d.current.corutimer:= 0;
  3 16520     end;
  2 16521 \f

  2 16521 
  2 16521 message coroutinemonitor - 12 ;
  2 16522 
  2 16522 
  2 16522     <***** pass *****
  2 16523 
  2 16523     this procedure moves the calling coroutine from the head of the ready 
  2 16524     queue down below all coroutines of lower or equal priority. *>
  2 16525   
  2 16525   
  2 16525     procedure pass;
  2 16526     begin
  3 16527       linkprio(current, readyqueue);
  3 16528 
  3 16528 
  3 16528       passivate;
  3 16529     end;
  2 16530 
  2 16530 
  2 16530     <***** signal ****
  2 16531 
  2 16531     this procedure increases the value af 'semaphore' by 1.
  2 16532     in case some coroutine is already waiting, it is linked into the ready 
  2 16533     queue for activation. the calling coroutine continues execution. *>
  2 16534   
  2 16534 
  2 16534     procedure signal (semaphore);
  2 16535     value semaphore;
  2 16536     integer semaphore;
  2 16537     begin
  3 16538       integer array field sem;
  3 16539       sem:= semaphore;
  3 16540       if d.sem.simvalue < 0 then linkprio(d.sem.simcoru, readyqueue);
  3 16541       d.sem.simvalue:= d.sem.simvalue + 1;
  3 16542 
  3 16542 
  3 16542     end;
  2 16543 \f

  2 16543 
  2 16543 message coroutinemonitor - 13 ;
  2 16544 
  2 16544 
  2 16544     <***** wait *****
  2 16545 
  2 16545     this procedure decreases the value of 'semaphore' by 1.
  2 16546     in case the value of the semaphore is negative after the decrease, the
  2 16547     calling coroutine is linked into the semaphore queue waiting for a
  2 16548     coroutine to signal this semaphore. *>
  2 16549   
  2 16549   
  2 16549     procedure wait (semaphore);
  2 16550     value semaphore;
  2 16551     integer semaphore;
  2 16552     begin
  3 16553       integer array field sem;
  3 16554       sem:= semaphore;
  3 16555       d.sem.simvalue:= d.sem.simvalue - 1;
  3 16556 
  3 16556 
  3 16556       linkprio(current, if d.sem.simvalue < 0 then sem+simcoru else readyqueue);
  3 16557       passivate;
  3 16558     end;
  2 16559 \f

  2 16559 
  2 16559 message coroutinemonitor - 14 ;
  2 16560 
  2 16560 
  2 16560     <***** inspect *****
  2 16561 
  2 16561     this procedure inspects the value of the semaphore and returns it in
  2 16562     'elements'.
  2 16563     the semaphore is left unchanged. *>
  2 16564 
  2 16564 
  2 16564     procedure inspect (semaphore, elements);
  2 16565     value semaphore;
  2 16566     integer semaphore, elements;
  2 16567     begin
  3 16568       integer array field sem;
  3 16569       sem:= semaphore;
  3 16570       elements:= d.sem.simvalue;
  3 16571 
  3 16571 
  3 16571     end;
  2 16572 \f

  2 16572 
  2 16572 message coroutinemonitor - 15 ;
  2 16573 
  2 16573 
  2 16573     <***** signalch *****
  2 16574 
  2 16574     this procedure delivers an operation at 'semaphore'.
  2 16575     in case another coroutine is already waiting for an operation of the
  2 16576     kind 'operationtype' this coroutine will get the operation and it will
  2 16577     be put into the ready queue for activation.
  2 16578     in case no coroutine is waiting for the actial kind of operation it is
  2 16579     linked into the semaphore queue, at the end of the queue
  2 16580     if operation is positive and at the beginning if operation is negative. 
  2 16581     the calling coroutine continues execution. *>
  2 16582   
  2 16582   
  2 16582     procedure signalch (semaphore, operation, operationtype);
  2 16583     value semaphore, operation, operationtype;
  2 16584     integer semaphore, operation;
  2 16585     boolean operationtype;
  2 16586     begin
  3 16587       integer array field firstcoru, currcoru, op,currop;
  3 16588       op:= abs  operation;
  3 16589       d.op.optype:= operationtype;
  3 16590       firstcoru:= semaphore + semcoru;
  3 16591       currcoru:= d.firstcoru.next;
  3 16592       while currcoru <> firstcoru do
  3 16593       begin
  4 16594         if (d.currcoru.corutypeset and operationtype) extract 12 <> 0 then
  4 16595         begin
  5 16596           link(operation, 0);
  5 16597           d.currcoru.coruop:= operation;
  5 16598           linkprio(currcoru, readyqueue);
  5 16599           link(currcoru + corutimerchain, idlequeue);
  5 16600           goto exit;
  5 16601         end else currcoru:= d.currcoru.next;
  4 16602       end;
  3 16603       currop:=semaphore + semop;
  3 16604       if operation < 0 then currop:=d.currop.next;
  3 16605       link(op, currop);
  3 16606   exit:
  3 16607 
  3 16607 
  3 16607     end;
  2 16608 \f

  2 16608 
  2 16608 message coroutinemonitor - 16 ;
  2 16609 
  2 16609 
  2 16609     <***** waitch *****
  2 16610 
  2 16610     this procedure fetches an operation from a semaphore.
  2 16611     in case an operation matching 'operationtypeset' is already waiting at
  2 16612     'semaphore' it is handed over to the calling coroutine.
  2 16613     in case no matching operation is waiting, the calling coroutine is
  2 16614     linked to the semaphore.
  2 16615     in any case the calling coroutine will be stopped and all corouti-
  2 16616     nes are rescheduled. *>
  2 16617   
  2 16617   
  2 16617     procedure waitch (semaphore, operation, operationtypeset, timeout);
  2 16618     value semaphore, operationtypeset, timeout;
  2 16619     integer semaphore, operation, timeout;
  2 16620     boolean operationtypeset;
  2 16621     begin
  3 16622       integer array field firstop, currop;
  3 16623       firstop:= semaphore + semop;
  3 16624       currop:= d.firstop.next;
  3 16625 
  3 16625 
  3 16625       while currop <> firstop do
  3 16626       begin
  4 16627         if (d.currop.optype and operationtypeset) extract 12 <> 0 then
  4 16628         begin
  5 16629           link(currop, 0);
  5 16630           d.current.coruop:= currop;
  5 16631           operation:= currop;
  5 16632 \f

  5 16632 
  5 16632 message coroutinemonitor - 17 ;
  5 16633 
  5 16633           linkprio(current, readyqueue);
  5 16634           passivate;
  5 16635           goto exit;
  5 16636         end else currop:= d.currop.next;
  4 16637       end;
  3 16638       linkprio(current, semaphore + semcoru);
  3 16639       if timeout > 0 then
  3 16640       begin
  4 16641         link(current + corutimerchain, timerqueue);
  4 16642         d.current.corutimer:= timeout;
  4 16643       end else d.current.corutimer:= 0;
  3 16644       d.current.corutypeset:= operationtypeset;
  3 16645       passivate;
  3 16646       if d.current.corutimer < 0 then operation:= 0
  3 16647                                  else operation:= d.current.coruop;
  3 16648       d.current.corutimer:= 0;
  3 16649       currop:= operation;
  3 16650       d.current.coruop:= currop;
  3 16651       link(current+corutimerchain, idlequeue);
  3 16652   exit:
  3 16653 
  3 16653 
  3 16653     end;
  2 16654 \f

  2 16654 
  2 16654 message coroutinemonitor - 18 ;
  2 16655 
  2 16655 
  2 16655     <***** inspectch *****
  2 16656 
  2 16656     this procedure inspects the queue of operations waiting at 'semaphore'.
  2 16657     the number of matching operations are counted and delivered in 'elements'.
  2 16658 if no operations are found the number of coroutines waiting
  2 16659 for operations of the typeset are counted and delivered as
  2 16660 negative value in 'elements'.
  2 16661     the semaphore is left unchanged. *>
  2 16662   
  2 16662   
  2 16662     procedure inspectch (semaphore, operationtypeset, elements);
  2 16663     value semaphore, operationtypeset;
  2 16664     integer semaphore, elements;
  2 16665     boolean operationtypeset;
  2 16666     begin
  3 16667       integer array field firstop, currop,firstcoru,currcoru;
  3 16668       integer counter;
  3 16669       counter:= 0;
  3 16670       firstop:= semaphore + semop;
  3 16671       currop:= d.firstop.next;
  3 16672       while currop <> firstop do
  3 16673       begin
  4 16674         if (operationtypeset and d.currop.optype) extract 12 <> 0 then
  4 16675           counter:= counter + 1;
  4 16676         currop:= d.currop.next;
  4 16677       end;
  3 16678       if counter=0 then
  3 16679       begin
  4 16680         firstcoru:=semaphore + sem_coru;
  4 16681         curr_coru:=d.firstcoru.next;
  4 16682         while curr_coru<>first_coru do
  4 16683         begin
  5 16684           if (operationtypeset and d.curr_coru.corutypeset) extract 12 <>0 then
  5 16685             counter:=counter - 1;
  5 16686           curr_coru:=d.curr_coru.next;
  5 16687         end;
  4 16688       end;
  3 16689       elements:= counter;
  3 16690 
  3 16690 
  3 16690     end;
  2 16691 \f

  2 16691 
  2 16691 message coroutinemonitor - 19 ;
  2 16692 
  2 16692 
  2 16692     <***** csendmessage *****
  2 16693 
  2 16693     this procedure sends the message in 'mess' to the process defined by the name
  2 16694     in 'receiver', and returns an identification of the message extension used
  2 16695     for sending the message (this identification is to be used for calling 'cwait-
  2 16696     answer' or 'cregretmessage'. *>
  2 16697   
  2 16697   
  2 16697     procedure csendmessage (receiver, mess, messextension);
  2 16698     real array receiver;
  2 16699     integer array mess;
  2 16700     integer messextension;
  2 16701     begin
  3 16702       integer bufref, messext;
  3 16703       messref(maxmessext):= 0;
  3 16704       messext:= 1;
  3 16705       while messref(messext) <> 0 do messext:= messext + 1;
  3 16706       if messext = maxmessext then <* no resources *> messext:= 0 else
  3 16707       begin
  4 16708         messcode(messext):= 1 shift 12 add 2;
  4 16709         mon(16) send message :(0, mess, 0, receiver);
  4 16710         messref(messext):= monw2;
  4 16711         if monw2 > 0 then messextension:= messext else messextension:= 0;
  4 16712       end;
  3 16713 
  3 16713 
  3 16713     end;
  2 16714 \f

  2 16714 
  2 16714 message coroutinemonitor - 20 ;
  2 16715 
  2 16715 
  2 16715     <***** cwaitanswer *****
  2 16716 
  2 16716     this procedure asks the coroutine monitor to get an answer to the message
  2 16717     corresponding to 'messextension'. in case the answer has already arrived
  2 16718     it stays in the eventqueue until 'cwaitanswer' is called.
  2 16719     in case 'timeout' is positive, the coroutine is linked into the timer
  2 16720     queue, and in case the answer does not arrive within 'timout' seconds the
  2 16721     coroutine is restarted with result = 0. *>
  2 16722   
  2 16722   
  2 16722     procedure cwaitanswer (messextension, answer, result, timeout);
  2 16723     value messextension, timeout;
  2 16724     integer messextension, result, timeout;
  2 16725     integer array answer;
  2 16726     begin
  3 16727       integer messext;
  3 16728       messext:= messextension;
  3 16729       messcode(messext):= messcode(messext) extract 12;
  3 16730       link(current, idlequeue);
  3 16731       messop(messext):= current;
  3 16732       if timeout > 0 then
  3 16733       begin
  4 16734         link(current + corutimerchain, timerqueue);
  4 16735         d.current.corutimer:= timeout;
  4 16736       end else d.current.corutimer:= 0;
  3 16737 
  3 16737 
  3 16737       passivate;
  3 16738       if d.current.corutimer < 0 then result:= 0 else
  3 16739       begin
  4 16740         mon(18) wait answer :(0, answer, messref(messextension), 0);
  4 16741         result:= monw0;
  4 16742         baseevent:= 0;
  4 16743         messref(messextension):= 0;
  4 16744       end;
  3 16745       d.current.corutimer:= 0;
  3 16746       link(current+corutimerchain, idlequeue);
  3 16747     end;
  2 16748 \f

  2 16748 
  2 16748 message coroutinemonitor - 21 ;
  2 16749 
  2 16749 
  2 16749     <***** cwaitmessage *****
  2 16750 
  2 16750     this procedure asks the coroutine monitor to give it a message, when some-
  2 16751     one arrives. in case a message has arrived already it stays at the event queue
  2 16752     until 'cwaitmessage' is called.
  2 16753     in case 'timeout' is positive, the coroutine is linked into the timer queue,
  2 16754     if no message arrives within 'timeout' seconds, the coroutine is restarted
  2 16755     with messbufferref = 0. *>
  2 16756   
  2 16756   
  2 16756     procedure cwaitmessage (processextension, mess, messbufferref, timeout);
  2 16757     value timeout, processextension;
  2 16758     integer processextension, messbufferref, timeout;
  2 16759     integer array mess;
  2 16760     begin
  3 16761       integer i;
  3 16762       integer array field messbuf;
  3 16763       proccode(processextension):= 2;
  3 16764       procop(processextension):= current;
  3 16765       link(current, idlequeue);
  3 16766       if timeout > 0 then
  3 16767       begin
  4 16768         link(current + corutimerchain, timerqueue);
  4 16769         d.current.corutimer:= timeout;
  4 16770       end else d.current.corutimer:= 0;
  3 16771 
  3 16771 
  3 16771       passivate;
  3 16772       if d.current.corutimer < 0 then messbufferref:= 0 else
  3 16773       begin
  4 16774         messbuf:= procop(processextension);
  4 16775         for i:=1 step 1 until 8 do mess(i):= core.messbuf(4+i);
  4 16776         proccode(procext):= 1 shift 12;
  4 16777         messbufferref:= messbuf;
  4 16778         baseevent:= 0;
  4 16779       end;
  3 16780       d.current.corutimer:= 0;
  3 16781       link(current+corutimerchain, idlequeue);
  3 16782     end;
  2 16783 \f

  2 16783 
  2 16783 message coroutinemonitor - 22 ;
  2 16784 
  2 16784 
  2 16784     <***** cregretmessage *****
  2 16785 
  2 16785     this procedure regrets the message corresponding to messageexten-
  2 16786     sion, to release message buffer and message extension.
  2 16787     i/o messages are not regretable. *>
  2 16788 
  2 16788   
  2 16788   
  2 16788     procedure cregretmessage (messageextension);
  2 16789     value messageextension;
  2 16790     integer messageextension;
  2 16791     begin
  3 16792       integer array field messbuf;
  3 16793       messbuf:= messref(messageextension);
  3 16794       mon(82) regret message :(0, 0, messbuf, 0);
  3 16795       messref(messageextension):= 0;
  3 16796 
  3 16796 
  3 16796     end;
  2 16797 \f

  2 16797 
  2 16797 message coroutinemonitor - 23 ;
  2 16798 
  2 16798 
  2 16798     <***** semsendmessage *****
  2 16799 
  2 16799     this procedure sends the message 'mess' to 'receiver' and at the same time it
  2 16800     defines a 'signalch(semaphore, operation, operationtype)' to be performed
  2 16801     by the monitor, when the answer arrives.
  2 16802     in case there are too few resources to send the message, the operation is
  2 16803     returned immediately with the result field set to zero. *>
  2 16804   
  2 16804   
  2 16804     procedure semsendmessage (receiver, mess, semaphore, operation, operationtype);
  2 16805     value semaphore, operation, operationtype;
  2 16806     real array receiver;
  2 16807     integer array mess;
  2 16808     integer semaphore, operation;
  2 16809     boolean operationtype;
  2 16810     begin
  3 16811       integer array field op;
  3 16812       integer messext;
  3 16813       op:= operation;
  3 16814       messref(maxmessext):= 0;
  3 16815       messext:= 1;
  3 16816       while messref(messext) <> 0 do messext:= messext + 1;
  3 16817       if messext < maxmessext then
  3 16818       begin
  4 16819         messop(messext):= op;
  4 16820         messcode(messext):=1;
  4 16821         d.op(1):= semaphore;
  4 16822         d.op.optype:= operationtype;
  4 16823         mon(16) send message :(0, mess, 0, receiver);
  4 16824         messref(messext):= monw2;
  4 16825       end;
  3 16826 
  3 16826 
  3 16826       if messext = maxmessext or messref(messext) = 0 <* no resources *> then
  3 16827       begin   <* return the operation immediately with result = 0 *>
  4 16828         d.op(9):= 0;
  4 16829         signalch(semaphore, op, operationtype);
  4 16830       end;
  3 16831     end;
  2 16832 \f

  2 16832 
  2 16832 message coroutinemonitor - 24 ;
  2 16833 
  2 16833 
  2 16833     <***** semwaitmessage *****
  2 16834 
  2 16834     this procedure defines a 'signalch(semaphore, operation, operationtype)' to
  2 16835     be performed by the coroutine monitor when a message arrives to the process
  2 16836     corresponding to 'processextension'. *>
  2 16837   
  2 16837   
  2 16837     procedure semwaitmessage (processextension, semaphore, operation, operationtype);
  2 16838     value processextension, semaphore, operation, operationtype;
  2 16839     integer processextension, semaphore, operation;
  2 16840     boolean operationtype;
  2 16841     begin
  3 16842       integer array field op;
  3 16843       op:= operation;
  3 16844       procop(processextension):= operation;
  3 16845       d.op(1):= semaphore;
  3 16846       d.op.optype:= operationtype;
  3 16847       proccode(processextension):= 1;
  3 16848 
  3 16848 
  3 16848     end;
  2 16849 \f

  2 16849 
  2 16849 message coroutinemonitor - 25 ;
  2 16850 
  2 16850 
  2 16850     <***** semregretmessage *****
  2 16851 
  2 16851     this procedure regrets a message sent by semsendmessage.
  2 16852     the message is identified by the operation in which the answer should be
  2 16853     returned.
  2 16854     the procedure sets the result field of the operation to zero, and then
  2 16855     returns it by performing a signalch. *>
  2 16856   
  2 16856   
  2 16856     procedure semregretmessage (operation);
  2 16857     value operation;
  2 16858     integer operation;
  2 16859     begin
  3 16860       integer i, j;
  3 16861       integer array field op, sem;
  3 16862       op:= operation;
  3 16863       i:= 1;
  3 16864       while i < maxmessext do
  3 16865       begin
  4 16866         if messref(i) > 0 and (messcode(i) = 1 and messop(i) = op) then
  4 16867         begin
  5 16868           mon(82) regret message :(0, 0, messref(i), 0);
  5 16869           messref(i):= 0;
  5 16870           sem:= d.op(1);
  5 16871           for j:=1 step 1 until 9 do d.op(j):= 0;
  5 16872           signalch(sem, op, d.op.optype);
  5 16873           i:= maxmessext;
  5 16874         end;
  4 16875         i:= i + 1;
  4 16876       end;
  3 16877 
  3 16877 
  3 16877     end;
  2 16878 \f

  2 16878 
  2 16878 message coroutinemonitor - 26 ;
  2 16879 
  2 16879 
  2 16879     <***** link *****
  2 16880 
  2 16880     this procedure links an object (allocated in the descriptor array 'd') into
  2 16881     a queue of alements (allocated in the descriptor array 'd'). the queues
  2 16882     are all double chained, and the chainhead is of the same format as the chain
  2 16883     fields of the objects.
  2 16884     the procedure links the object immediately after the head. *>
  2 16885   
  2 16885   
  2 16885     procedure link (object, chainhead);
  2 16886     value object, chainhead;
  2 16887     integer object, chainhead;
  2 16888     begin
  3 16889       integer array field prevelement, nextelement, chead, obj;
  3 16890       obj:= object;
  3 16891       chead:= chainhead;
  3 16892       prevelement:= d.obj.prev;
  3 16893       nextelement:= d.obj.next;
  3 16894       d.prevelement.next:= nextelement;
  3 16895       d.nextelement.prev:= prevelement;
  3 16896       if chead > 0 then <* link into queue *>
  3 16897       begin
  4 16898         prevelement:= d.chead.prev;
  4 16899         d.obj.prev:= prevelement;
  4 16900         d.prevelement.next:= obj;
  4 16901         d.obj.next:= chead;
  4 16902         d.chead.prev:= obj;
  4 16903       end else
  3 16904       begin  <* link onto itself *>
  4 16905         d.obj.prev:= obj;
  4 16906         d.obj.next:= obj;
  4 16907       end;
  3 16908     end;
  2 16909 \f

  2 16909 
  2 16909 message coroutinemonitor - 27 ;
  2 16910 
  2 16910 
  2 16910     <***** linkprio *****
  2 16911 
  2 16911     this procedure is used to link coroutines into queues corresponding to
  2 16912     the priorities of the actual coroutine and the queue elements.
  2 16913     the object is linked immediately before the first coroutine of lower prio-
  2 16914     rity. *>
  2 16915   
  2 16915   
  2 16915     procedure linkprio (object, chainhead);
  2 16916     value object, chainhead;
  2 16917     integer object, chainhead;
  2 16918     begin
  3 16919       integer array field currelement, chead, obj;
  3 16920       obj:= object;
  3 16921       chead:= chainhead;
  3 16922       currelement:= d.chead.next;
  3 16923       while currelement <> chead
  3 16924             and d.currelement.corupriority <= d.obj.corupriority 
  3 16925               do currelement:= d.currelement.next;
  3 16926       link(obj, currelement);
  3 16927     end;
  2 16928 \f

  2 16928 
  2 16928 message coroutinemonitor - 28 ;
  2 16929 
  2 16929 \f

  2 16929 
  2 16929 message coroutinemonitor - 30a ;
  2 16930 
  2 16930 
  2 16930     <*************** extention to coroutine monitor procedures **********>
  2 16931 
  2 16931     <***** signalbin *****
  2 16932 
  2 16932     this procedure simulates a binary semaphore on a simple semaphore
  2 16933     by testing the value of the semaphore before signaling the
  2 16934     semaphore. if the value of the semaphore is one (=open) nothing is
  2 16935     done, otherwise a normal signal is carried out. *>
  2 16936 
  2 16936 
  2 16936     procedure signalbin(semaphore);
  2 16937     value semaphore;
  2 16938     integer semaphore;
  2 16939     begin
  3 16940       integer array field sem;
  3 16941       integer val;
  3 16942       sem:= semaphore;
  3 16943       inspect(sem,val);
  3 16944       if val<1 then signal(sem);
  3 16945     end;
  2 16946 \f

  2 16946 
  2 16946 message coroutinemonitor - 30b ;
  2 16947 
  2 16947   <***** coruno *****
  2 16948 
  2 16948   delivers the coroutinenumber for a give coroutine id.
  2 16949   if the coroutine does not exists the value 0 is delivered *>
  2 16950 
  2 16950   integer procedure coru_no(coru_id);
  2 16951   value                     coru_id;
  2 16952   integer                   coru_id;
  2 16953   begin
  3 16954     integer array field cor;
  3 16955 
  3 16955     coru_no:= 0;
  3 16956     for cor:= firstcoru step corusize until (coruref-1) do
  3 16957       if d.cor.coruident//1000 = coru_id then
  3 16958       coru_no:= d.cor.coruident mod 1000;
  3 16959   end;
  2 16960 \f

  2 16960 
  2 16960 message coroutinemonitor - 30c ;
  2 16961 
  2 16961   <***** coroutine *****
  2 16962 
  2 16962   delivers the referencebyte for the coroutinedescriptor for
  2 16963   a coroutine identified by coroutinenumber *>
  2 16964 
  2 16964   integer procedure coroutine(cor_no);
  2 16965     value                     cor_no;
  2 16966     integer                   cor_no;
  2 16967   coroutine:= if cor_no <= 0 or maxcoru < cor_no then -1 else
  2 16968               firstcoru + (cor_no-1)*corusize;
  2 16969 \f

  2 16969 
  2 16969 message coroutinemonitor - 30d ;
  2 16970 
  2 16970 <***** curr_coruno *****
  2 16971 
  2 16971 delivers number of calling coroutine 
  2 16972     curr_coruno:
  2 16973         < 0     = -current_coroutine_number in disabled mode
  2 16974         = 0     = procedure not called from coroutine
  2 16975         > 0     = current_coroutine_number in enabled mode   *>
  2 16976 
  2 16976 integer procedure curr_coruno;
  2 16977 begin
  3 16978   integer i;
  3 16979   integer array ia(1:12);
  3 16980 
  3 16980   i:= system(12,0,ia);
  3 16981   if i > 0 then
  3 16982   begin
  4 16983     i:= system(12,1,ia);
  4 16984     curr_coruno:= ia(3);
  4 16985   end else curr_coruno:= 0;
  3 16986 end curr_coruno;
  2 16987 \f

  2 16987 
  2 16987 message coroutinemonitor - 30e ;
  2 16988 
  2 16988 <***** curr_coruid *****
  2 16989 
  2 16989 delivers coruident of calling coroutine :
  2 16990 
  2 16990     curr_coruid:
  2 16991         > 0     = coruident of calling coroutine
  2 16992         = 0     = procedure not called from coroutine  *>
  2 16993 
  2 16993 integer procedure curr_coruid;
  2 16994 begin
  3 16995   integer cor_no;
  3 16996   integer array field cor;
  3 16997 
  3 16997   cor_no:= abs curr_coruno;
  3 16998   if cor_no <> 0 then
  3 16999   begin
  4 17000     cor:= coroutine(cor_no);
  4 17001     curr_coruid:= d.cor.coruident // 1000;
  4 17002   end
  3 17003   else curr_coruid:= 0;
  3 17004 end curr_coruid;
  2 17005 \f

  2 17005 message coroutinemonitor - 30f.1 ;
  2 17006 
  2 17006     <**** getch *****
  2 17007 
  2 17007     this procedure searches the queue of operations waiting at 'semaphore'
  2 17008     to find an operation that matches the operationstypeset and a set of
  2 17009     select-values. each select value is specified by type and fieldvalue
  2 17010     in integer array 'type' and by the value in integer array 'val'.
  2 17011 
  2 17011 0: eq  0:   not used
  2 17012 1: lt  1:   boolean
  2 17013 2: le  2:   integer
  2 17014 3: gt  3:   long
  2 17015 4: ge  4:   real
  2 17016 5: ne
  2 17017 *>
  2 17018 
  2 17018     procedure getch(semaphore,operation,operationtypeset,type,val);
  2 17019     value semaphore,operationtypeset;
  2 17020     integer semaphore,operation;
  2 17021     boolean operationtypeset;
  2 17022     integer array type,val;
  2 17023     begin
  3 17024       integer array field firstop,currop;
  3 17025       integer ø,n,i,f,t,rel,i1,i2;
  3 17026       boolean field bf,bfval;
  3 17027       integer field intf;
  3 17028       long field lf,lfval; long l1,l2;
  3 17029       real field rf,rfval; real r1,r2;
  3 17030   
  3 17030       boolean match;
  3 17031 
  3 17031       operation:= 0;
  3 17032       n:= system(3,ø,type);
  3 17033       match:= false;
  3 17034       firstop:= semaphore + semop;
  3 17035       currop:= d.firstop.next;
  3 17036       while currop <> firstop and -,match do
  3 17037       begin
  4 17038         if (operationtypeset and d.currop.optype) extract 12 <> 0 then
  4 17039         begin
  5 17040           i:= n;
  5 17041           match:= true;
  5 17042 \f

  5 17042 message coroutinemonitor - 30f.2 ;
  5 17043 
  5 17043           while match and (if i <= ø then type(i) >= 0 else false) do
  5 17044           begin
  6 17045             rel:= type(i) shift(-18);
  6 17046             t:= type(i) shift(-12) extract 6;
  6 17047             f:= type(i) extract 12;
  6 17048             if f > 2047 then f:= f -4096;
  6 17049             case t+1 of
  6 17050             begin
  7 17051               ; <* not used *>
  7 17052 
  7 17052               begin <*boolean or signed short integer*>
  8 17053                 bf:= f;
  8 17054                 bfval:= 2*i;
  8 17055                 i1:= d.currop.bf extract 12;
  8 17056                 if i1 > 2047 then i1:= i1-4096;
  8 17057                 i2:= val.bfval extract 12;
  8 17058                 if i2 > 2047 then i2:= i2-4096;
  8 17059                 match:= case rel+1 of (i1=i2,i1<i2,i1<=i2,i1>i2,i1>=i2,i1<>i2);
  8 17060               end;
  7 17061 
  7 17061               begin <*integer*>
  8 17062                 intf:= f;
  8 17063                 i1:= d.currop.intf;
  8 17064                 i2:= val(i);
  8 17065                 match:= case rel+1 of (i1=i2,i1<i2,i1<=i2,i1>i2,i1>=i2,i1<>i2);
  8 17066               end;
  7 17067 
  7 17067               begin <*long*>
  8 17068                 lf:= f;
  8 17069                 lfval:= i*2;
  8 17070                 l1:= d.currop.lf;
  8 17071                 l2:= val.lfval;
  8 17072                 match:= case rel+1 of (l1=l2,l1<l2,l1<=l2,l1>l2,l1>=l2,l1<>l2);
  8 17073               end;
  7 17074 
  7 17074               begin <*real*>
  8 17075                 rf:= f;
  8 17076                 rfval:= i*2;
  8 17077                 r1:= d.currop.rf;
  8 17078                 r2:= val.rfval;
  8 17079                 match:= case rel+1 of (r1=r2,r1<r2,r1<=r2,r1>r2,r1>=r2,r1<>r2);
  8 17080               end;
  7 17081 
  7 17081             end;<*case t+1*>
  6 17082 
  6 17082             i:= i+1;
  6 17083           end; <*while match and i<=ø and t>=0 *>
  5 17084 \f

  5 17084 message coroutinemonitor - 30f.3 ;
  5 17085 
  5 17085         end; <* if operationtypeset and ---*>
  4 17086         if -,match then currop:= d.currop.next;
  4 17087       end; <*while currop <> firstop and -,match*>
  3 17088 
  3 17088       if match then
  3 17089       begin
  4 17090         link(currop,0);
  4 17091         d.current.coruop:= currop;
  4 17092         operation:= currop;
  4 17093       end;
  3 17094     end getch;
  2 17095 \f

  2 17095 
  2 17095 message coroutinemonitor - 31 ;
  2 17096 
  2 17096     activity(maxcoru);
  2 17097 
  2 17097     goto initialization;
  2 17098 
  2 17098 
  2 17098 
  2 17098     <*************** event handling ***************>
  2 17099 
  2 17099 
  2 17099   
  2 17099   takeexternal:
  2 17100     currevent:= baseevent;
  2 17101     eventqueueempty:= false;
  2 17102     repeat
  2 17103       current:= 0;
  2 17104       prevevent:= currevent;
  2 17105       mon(66) test event :(0, 0, currevent, 0);
  2 17106       currevent:= monw2;
  2 17107       if monw0 < 0 <* no event *> then goto takeinternal;
  2 17108       if monw0 = 1 and monw1 > 0 and monw1 <= maxcoru then
  2 17109         cmi:= monw1
  2 17110       else
  2 17111         cmi:= - monw0;
  2 17112 
  2 17112       if cmi > 0 then
  2 17113         begin <* answer to activity zone *>
  3 17114           current:= firstcoru + (cmi - 1) * corusize;
  3 17115           linkprio(current, readyqueue);
  3 17116           baseevent:= 0;
  3 17117         end else
  2 17118   
  2 17118       if cmi = 0 then
  2 17119         begin <* message arrived *>
  3 17120 \f

  3 17120 
  3 17120 message coroutinemonitor - 32 ;
  3 17121 
  3 17121           receiver:= core.currevent(3);
  3 17122           if receiver < 0 then receiver:= - receiver;
  3 17123           procref(maxprocext):= receiver;
  3 17124           procext:= 1;
  3 17125           while procref(procext) <> receiver do procext:= procext + 1;
  3 17126           if procext = maxprocext then
  3 17127           begin <* receiver unknown *>
  4 17128             <* leave the message unchanged *>
  4 17129           end else
  3 17130           if proccode(procext) shift (-12) = 0 then
  3 17131           begin  <* the receiver is ready for accepting messages *>
  4 17132             mon(26) get event :(0, 0, currevent, 0);
  4 17133             case proccode(procext) of
  4 17134             begin
  5 17135               begin <* message received by semwaitmessage *>
  6 17136                 op:= procop(procext);
  6 17137                 sem:= d.op(1);
  6 17138                 for cmj:=1 step 1 until 8 do d.op(cmj):= core.currevent(4+cmj);
  6 17139                 d.op(9):= currevent;
  6 17140                 signalch(sem, op, d.op.optype);
  6 17141                 proccode(procext):= 1 shift 12;
  6 17142               end;
  5 17143               begin <* message received by cwaitmessage *>
  6 17144                 current:= procop(procext);
  6 17145                 procop(procext):= currevent;
  6 17146                 linkprio(current, readyqueue);
  6 17147                 link(current + corutimerchain, idlequeue);
  6 17148 
  6 17148 
  6 17148               end;
  5 17149             end; <* case *>
  4 17150             currevent:= baseevent;
  4 17151             proccode(procext):= 1 shift 12;
  4 17152           end;
  3 17153         end <* message *> else
  2 17154   
  2 17154       if cmi = -1 then
  2 17155         begin  <* answer arrived *>
  3 17156 \f

  3 17156 
  3 17156 message coroutinemonitor - 33 ;
  3 17157 
  3 17157           if currevent = timermessage then
  3 17158           begin
  4 17159             mon(26) get event :(0, 0, currevent, 0);
  4 17160             coru:= d.timerqueue.next;
  4 17161             while coru <> timerqueue do
  4 17162             begin
  5 17163               current:= coru - corutimerchain;
  5 17164               d.current.corutimer:= d.current.corutimer - clockmess(2);
  5 17165               coru:= d.coru.next;
  5 17166               if d.current.corutimer <= 0 then
  5 17167               begin <* timer perion expired *>
  6 17168                 d.current.corutimer:= -1;
  6 17169                 linkprio(current, readyqueue);
  6 17170                 link(current + corutimerchain, idlequeue);
  6 17171               end;
  5 17172             end;
  4 17173             mon(16) send message :(0, clockmess, 0, clock);
  4 17174             timermessage:= monw2;
  4 17175             currevent:= baseevent;
  4 17176           end <* timer answer *> else
  3 17177           begin
  4 17178             messref(maxmessext):= currevent;
  4 17179             messext:= 1;
  4 17180             while messref(messext) <> currevent do messext:= messext + 1;
  4 17181             if messext = maxmessext then
  4 17182             begin <* the answer is unknown *>
  5 17183               <* leave the answer unchanged - it may belong to an activity *>
  5 17184             end else
  4 17185             if messcode(messext) shift (-12) = 0 then
  4 17186             begin
  5 17187               case messcode(messext) extract 12 of
  5 17188               begin
  6 17189 \f

  6 17189 
  6 17189 message coroutinemonitor - 34 ;
  6 17190                 begin <* answer arrived after semsendmessage *>
  7 17191                   op:= messop(messext);
  7 17192                   sem:= d.op(1);
  7 17193                   mon(18) wait answer :(0, d.op, currevent, 0);
  7 17194                   d.op(9):= monw0;
  7 17195                   signalch(sem, op, d.op.optype);
  7 17196                   messref(messext):= 0;
  7 17197                   baseevent:= 0;
  7 17198                 end;
  6 17199                 begin <* answer arrived after csendmessage *>
  7 17200                   current:= messop(messext);
  7 17201                   linkprio(current, readyqueue);
  7 17202                   link(current + corutimerchain, idlequeue);
  7 17203 
  7 17203 
  7 17203                 end;
  6 17204               end;
  5 17205             end else baseevent:= currevent;
  4 17206           end;
  3 17207         end;
  2 17208     until eventqueueempty;
  2 17209 \f

  2 17209 
  2 17209 message coroutinemonitor - 35 ;
  2 17210 
  2 17210 
  2 17210 
  2 17210     <*************** coroutine activation ***************>
  2 17211 
  2 17211 takeinternal:
  2 17212   
  2 17212     current:= d.readyqueue.next;
  2 17213     if current = readyqueue then
  2 17214     begin
  3 17215       mon(24) wait event :(0, 0, prevevent, 0);
  3 17216       goto takeexternal;
  3 17217     end;
  2 17218 
  2 17218 <*+2*> if testbit30 and d.current.corutestmask shift(-11) then
  2 17219 <**>   begin
  3 17220 <**>     systime(5,0,r);
  3 17221 <**>     write(out,"nl",1,<<zd dd dd>,r,<: coroutine: :>,<<dd>,
  3 17222 <**>       d.current.coruident mod 1000,<:  ident: :>,<<ddd>,
  3 17223 <**>       d.current.coruident//1000,<: aktiveres:>);
  3 17224 <**>   end;
  2 17225 <*-2*>
  2 17226 
  2 17226     corustate:= activate(d.current.coruident mod 1000);
  2 17227     cmi:= corustate extract 24;
  2 17228 <*+2*> if testbit30 and d.current.corutestmask shift(-11) then
  2 17229 <**>   begin
  3 17230 <**>     systime(5,0,r);
  3 17231 <**>     write(out,"nl",1,<<zd dd dd>,r,<: coroutine: :>,<<dd>,
  3 17232 <**>       d.current.coruident mod 1000,<:  ident: :>,<<ddd>,
  3 17233 <**>       d.current.coruident//1000,<: afbrudt, årsag=:>,cmi);
  3 17234 <**>   end;
  2 17235 <*-2*>
  2 17236 
  2 17236     if cmi = 1 then
  2 17237     begin  <* programmed passivate *>
  3 17238       goto takeexternal;
  3 17239     end;
  2 17240 
  2 17240     if cmi = 2 then
  2 17241     begin <* implicit passivate in activity *>
  3 17242 
  3 17242 
  3 17242       link(current, idlequeue);
  3 17243       goto takeexternal;
  3 17244     end;
  2 17245 \f

  2 17245 
  2 17245 message coroutinemonitor - 36 ;
  2 17246 
  2 17246     <* coroutine termination (normal or abnormal) *>
  2 17247 
  2 17247 <* aktioner ved normal og unormal coroutineterminering insættes her *>
  2 17248 coru_term:
  2 17249 
  2 17249     begin
  3 17250       if false and alarmcause extract 24 = (-9) <* break *> and
  3 17251          alarmcause shift (-24) extract 24 = 0 then
  3 17252       begin
  4 17253         endaction:= 2;
  4 17254         goto program_slut;
  4 17255       end;
  3 17256       if alarmcause extract 24 = (-9) <* break *> and
  3 17257          alarmcause shift (-24) = 8 <* parent *>
  3 17258       then sæt_bit_i(trapmode,15<*killed activities*>,0<*normal output*>);
  3 17259       if alarmcause shift (-24) extract  24 <> -2 or
  3 17260          alarmcause extract 24 <> -13 then
  3 17261       begin
  4 17262         write(zbillede,"nl",1,<:alarmcause(param,cause)=:>,<<d>,
  4 17263               alarmcause shift (-24),<:,:>,
  4 17264               alarmcause extract 24);
  4 17265         for i:=1 step 1 until max_coru do
  4 17266           j:=activate(-i); <* kill *>
  4 17267 <*      skriv billede *>
  4 17268       end
  3 17269       else
  3 17270       begin
  4 17271         errorbits:= 0; <* ok.yes warning.no *>
  4 17272         goto finale;
  4 17273       end;
  3 17274     end;
  2 17275 
  2 17275 goto dump;
  2 17276 
  2 17276     link(current, idlequeue);
  2 17277     goto takeexternal;
  2 17278 \f

  2 17278 
  2 17278 message coroutinemonitor - 37 ;
  2 17279 
  2 17279 
  2 17279 
  2 17279   initialization:
  2 17280 
  2 17280 
  2 17280     <*************** initialization ***************>
  2 17281   
  2 17281     <* chain head *>
  2 17282   
  2 17282        prev:= -2;                         <* -2  prev *>
  2 17283        next:= 0;                          <* +0  next *>
  2 17284   
  2 17284     <* corutine descriptor *>
  2 17285   
  2 17285                                           <* -2  prev *>
  2 17286                                           <* +0  next *>
  2 17287                                           <* +2  (link field) *>
  2 17288        corutimerchain:= next + 4;         <* +4  corutimerchain *>
  2 17289                                           <* +6  (link field) *>
  2 17290        coruop:= corutimerchain + 4;       <* +8  coruop *>
  2 17291        corutimer:= coruop + 2;            <*+10  corutimer *>
  2 17292        coruident:= corutimer + 2;         <*+12  coruident *>
  2 17293        corupriority:= coruident + 2;      <*+14  corupriority *>
  2 17294        corutypeset:= corupriority + 1;    <*+15  corutypeset *>
  2 17295        corutestmask:= corutypeset + 1;    <*+16  corutestmask *>
  2 17296   
  2 17296     <* simple semaphore *>
  2 17297   
  2 17297                                           <* -2  (link field) *>
  2 17298        simcoru:= next;                    <* +0  simcoru *>
  2 17299        simvalue:= simcoru + 2;            <* +2  simvalue *>
  2 17300   
  2 17300     <* chained semaphore *>
  2 17301   
  2 17301                                           <* -2  (link field) *>
  2 17302        semcoru:= next;                    <* +0  semcoru *>
  2 17303                                           <* +2  (link field) *>
  2 17304        semop:= semcoru + 4;               <* +4  semop *>
  2 17305 \f

  2 17305 
  2 17305 message coroutinemonitor - 38 ;
  2 17306   
  2 17306     <* operation *>
  2 17307   
  2 17307        opsize:= next - 6;                 <* -6  opsize *>
  2 17308        optype:= opsize + 1;               <* -5  optype *>
  2 17309                                           <* -2  prev *>
  2 17310                                           <* +0  next *>
  2 17311                                           <* +2  operation(1) *>
  2 17312                                           <* +4  operation(2) *>
  2 17313                                           <* +6      -        *>
  2 17314                                           <*  .      -        *>
  2 17315                                           <*  .      -        *>
  2 17316   
  2 17316 \f

  2 17316 
  2 17316 message coroutinemonitor - 39 ;
  2 17317   
  2 17317       trap(dump);
  2 17318       systime(1, 0, starttime);
  2 17319       for cmi:= 1 step 1 until maxmessext do messref(cmi):= 0;
  2 17320       clockmess(1):= 0;
  2 17321       clockmess(2):= timeinterval;  
  2 17322       clock(1):= real <:clock:>;
  2 17323       clock(2):= real <::>;
  2 17324       mon(16) send message :(0, clockmess, 0, clock);
  2 17325       timermessage:= monw2;
  2 17326       readyqueue:= 4;
  2 17327       initchain(readyqueue);
  2 17328       idlequeue:= readyqueue + 4;
  2 17329       initchain(idlequeue);
  2 17330       timerqueue:= idlequeue + 4;
  2 17331       initchain(timerqueue);
  2 17332       current:= 0;
  2 17333       corucount:= 0;
  2 17334       proccount:= 0;
  2 17335       baseevent:= 0;
  2 17336       coruref:= timerqueue + 4;
  2 17337       firstcoru:= coruref;
  2 17338       simref:= coruref + maxcoru * corusize;
  2 17339       firstsim:= simref;
  2 17340       semref:= simref + maxsem * simsize;
  2 17341       firstsem:= semref;
  2 17342       opref:= semref + maxsemch * semsize + 4;
  2 17343       firstop:= opref;
  2 17344       optop:= opref + maxop * opheadsize + maxnettoop - 6;
  2 17345       for cmi:= coruref step 2 until optop - 2 do d(cmi/2):= 0;
  2 17346       reflectcore(core);
  2 17347 
  2 17347 algol list.on;
  2 17348   
  2 17348       \f

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

  2 17463       message fil_init side 1 - 801030/jg;
  2 17464       
  2 17464       begin integer i,antz,tz,s;
  3 17465             real array field raf;
  3 17466       
  3 17466       filskrevet:=fillæst:=0;                                    <*fil*>
  3 17467       dbsegmax:= 2**18-1;
  3 17468       
  3 17468       tz:=dbantez+dbantsz; antz:=tz+dbanttz;
  3 17469       for i:=1 step 1 until dbantez do
  3 17470         begin open(fil(i),4,<::>,0); close(fil(i),false) end;
  3 17471       for i:=dbantez+1 step 1 until tz do
  3 17472         open(fil(i),4,dbsnavn,0);
  3 17473       for i:=tz+1 step 1 until antz do
  3 17474         open(fil(i),4,dbtnavn,0);
  3 17475       
  3 17475       for i:=1 step 1 until dbantez do                        <*dbkatz*>
  3 17476         dbkatz(i,1):=dbkatz(i,2):=0;
  3 17477       for i:=dbantez+1 step 1 until tz do
  3 17478         begin dbkatz(i,1):=2 shift 10;dbkatz(i,2):=0 end;
  3 17479       for i:=tz+1 step 1 until antz do
  3 17480         begin dbkatz(i,1):=1 shift 10;dbkatz(i,2):=i+1 end;
  3 17481       dbkatz(antz,2):=tz+1;
  3 17482       dbsidstetz:=antz;
  3 17483       dbsidstesz:=tz;
  3 17484       
  3 17484       for i:=1 step 1 until dbmaxef do                        <*dbkate*>
  3 17485         begin integer j;
  4 17486           for j:=1,3 step 1 until 6 do
  4 17487             dbkate(i,j):=0;
  4 17488           dbkate(i,2):=i+1;
  4 17489         end;
  3 17490       dbkate(dbmaxef,2):=0;
  3 17491       dbkatefri:=1;
  3 17492       dbantef:=0;
  3 17493       \f

  3 17493       message fil_init side 2 - 801030/jg;
  3 17494       
  3 17494       
  3 17494       for i:= 1 step 1 until dbmaxsf do                       <*dbkats*>
  3 17495         begin
  4 17496           dbkats(i,1):=0;
  4 17497           dbkats(i,2):=i+1;
  4 17498         end;
  3 17499       dbkats(dbmaxsf,2):=0;
  3 17500       dbkatsfri:=1;
  3 17501       dbantsf:=0;
  3 17502       
  3 17502       for i:=1 step 1 until dbmaxb do                         <*dbkatb*>
  3 17503         dbkatb(i):=false add (i+1);
  3 17504       dbkatb(dbmaxb):=false;
  3 17505       dbkatbfri:=1;
  3 17506       dbantb:=0;
  3 17507       raf:=4;
  3 17508       for i:=1 step 1 until dbmaxtf do
  3 17509         begin
  4 17510           inrec6(fil(antz),4);
  4 17511           dbkatt.raf(i):=fil(antz,1);
  4 17512         end;
  3 17513       inrec6(fil(antz),4);
  3 17514       if fil(antz,1)<>real extend 8388607 shift 24 add 8388607 then
  3 17515         fejl_reaktion(1,dbmaxtf,<:tabelfil init:>,0);
  3 17516       setposition(fil(antz),0,0);
  3 17517       
  3 17517       end filsystem;
  2 17518       \f

  2 17518       message fil_init side 3 - 810209/cl;
  2 17519       
  2 17519       bs_kats_fri:= nextsem;
  2 17520       <*+3*> skriv_new_sem(out,1,bs_kats_fri,<:bs-kats-fri:>);
  2 17521       <*-3*>
  2 17522       bs_kate_fri:= nextsem;
  2 17523       <*+3*> skriv_new_sem(out,1,bs_kate_fri,<:bs-kate-fri:>);
  2 17524       <*-3*>
  2 17525       cs_opret_fil:= nextsemch;
  2 17526       <*+3*> skriv_new_sem(out,3,cs_opret_fil,<:cs-opret-fil:>);
  2 17527       <*-3*>
  2 17528       cs_tilknyt_fil:= nextsemch;
  2 17529       <*+3*> skriv_new_sem(out,3,cs_tilknyt_fil,<:cs-tilknyt-fil:>);
  2 17530       <*-3*>
  2 17531       cs_frigiv_fil:= nextsemch;
  2 17532       <*+3*> skriv_new_sem(out,3,cs_frigiv_fil,<:cs-frigiv-fil:>);
  2 17533       <*-3*>
  2 17534       cs_slet_fil:= nextsemch;
  2 17535       <*+3*> skriv_new_sem(out,3,cs_slet_fil,<:cs-slet-fil:>);
  2 17536       <*-3*>
  2 17537       cs_opret_spoolfil:= nextsemch;
  2 17538       <*+3*> skriv_new_sem(out,3,cs_opret_spoolfil,<:cs-opret-spoolfil:>);
  2 17539       <*-3*>
  2 17540       cs_opret_eksternfil:= nextsemch;
  2 17541       <*+3*> skriv_new_sem(out,3,cs_opret_eksternfil,<:cs-opret-ekst-fil:>);
  2 17542       <*-3*>
  2 17543       \f

  2 17543       message fil_init side 4 810209/cl;
  2 17544       
  2 17544       
  2 17544       <* initialisering af filsystemcoroutiner *>
  2 17545       
  2 17545       i:= nextcoru(001,10,true);
  2 17546       j:= newactivity(i,0,opretfil);
  2 17547       <*+3*> skriv_newactivity(out,i,j);
  2 17548       <*-3*>
  2 17549       
  2 17549       i:= nextcoru(002,10,true);
  2 17550       j:= newactivity(i,0,tilknytfil);
  2 17551       <*+3*> skriv_newactivity(out,i,j);
  2 17552       <*-3*>
  2 17553       
  2 17553       i:= nextcoru(003,10,true);
  2 17554       j:= newactivity(i,0,frigivfil);
  2 17555       <*+3*> skriv_newactivity(out,i,j);
  2 17556       <*-3*>
  2 17557       
  2 17557       i:= nextcoru(004,10,true);
  2 17558       j:= newactivity(i,0,sletfil);
  2 17559       <*+3*> skriv_newactivity(out,i,j);
  2 17560       <*-3*>
  2 17561       
  2 17561       i:= nextcoru(005,10,true);
  2 17562       j:= newactivity(i,0,opretspoolfil);
  2 17563       <*+3*> skriv_newactivity(out,i,j);
  2 17564       <*-3*>
  2 17565       
  2 17565       i:= nextcoru(006,10,true);
  2 17566       j:= newactivity(i,0,opreteksternfil);
  2 17567       <*+3*> skriv_newactivity(out,i,j);
  2 17568       <*-3*>
  2 17569       \f

  2 17569       message attention_initialisering side 1 - 850820/cl;
  2 17570       
  2 17570         tf_kommandotabel:= 1 shift 10 + 1;
  2 17571       
  2 17571         begin
  3 17572           integer i, s, zno;
  3 17573           zone z(128,1,stderror);
  3 17574           integer array fdim(1:8);
  3 17575       
  3 17575           fdim(4):= tf_kommandotabel;
  3 17576           hentfildim(fdim);
  3 17577       
  3 17577           open(z,4,<:htkommando:>,0);
  3 17578           for i:= 1 step 1 until fdim(3) do
  3 17579           begin
  4 17580             inrec6(z,512);
  4 17581             s:= skrivfil(tf_kommandotabel,i,zno);
  4 17582             if s<>0 then fejlreaktion(6,s,<:kommandotabelinit:>,0);
  4 17583             tofrom(fil(zno),z,512);
  4 17584           end;
  3 17585           close(z,true);
  3 17586         end;
  2 17587       \f

  2 17587       message attention_initialisering side 1a - 810428/hko;
  2 17588       
  2 17588         for j:= system(3,i,terminal_tab) step 1 until i do
  2 17589           terminal_tab(j):= 0;
  2 17590       
  2 17590         cs_att_pulje:=next_semch;
  2 17591       <*+3*> skriv_new_sem(out,3,cs_att_pulje,<:cs-att-pulje:>);
  2 17592       <*-3*>
  2 17593       
  2 17593         bs_fortsæt_adgang:= nextsem;
  2 17594       <*+3*> skriv_new_sem(out,1,bs_fortsæt_adgang,<:bs-fortsæt-adgang:>);
  2 17595       <*-3*>
  2 17596         signalbin(bs_fortsæt_adgang);
  2 17597       
  2 17597         for i:= 1,
  2 17598             1 step 1 until max_antal_operatører,
  2 17599             1 step 1 until max_antal_garageterminaler do
  2 17600       
  2 17600         <* initialisering af pulje med attention_operationer *>
  2 17601       
  2 17601           signalch(cs_att_pulje,    <* pulje_semafor   *>
  2 17602                    nextop(data+att_op_længde), <* næste_operation *>
  2 17603                    gen_optype);
  2 17604       
  2 17604         att_proc_ref:=next_proc_ext(system(6<* own process*>,i,ra));
  2 17605       
  2 17605         i:=next_coru(010,<*ident*>
  2 17606                        2,<*prioritet*>
  2 17607                      true<*test_maske*>);
  2 17608         j:=newactivity(        i, <*activityno     *>
  2 17609                                0, <*ikke virtual   *>
  2 17610                        attention);<*ingen parametre*>
  2 17611       
  2 17611       <*+3*>skriv_newactivity(out,i,j);
  2 17612       <*-3*>
  2 17613       \f

  2 17613       message io_initialisering side 1 - 810507/hko;
  2 17614       
  2 17614         io_spoolfil:= 1028;
  2 17615         begin
  3 17616           integer array fdim(1:8);
  3 17617           fdim(4):= io_spoolfil;
  3 17618           hent_fildim(fdim);
  3 17619           io_spool_postantal:= fdim(1);
  3 17620           io_spool_postlængde:= fdim(2);
  3 17621         end;
  2 17622       
  2 17622         io_spool_post:= 4;
  2 17623       
  2 17623           cs_io:= next_semch;
  2 17624       <*+3*> skriv_new_sem(out,3,cs_io,<:cs-io:>);
  2 17625       <*-3*>
  2 17626       
  2 17626           i:= next_coru(100,<*ident *>
  2 17627                          5,<*prioritet *>
  2 17628                         true<*test_maske*>);
  2 17629       
  2 17629           j:= new_activity(   i,
  2 17630                               0,
  2 17631                            h_io);
  2 17632       
  2 17632       <*+3*>skriv_newactivity(out,i,j);
  2 17633       <*-3*>
  2 17634         cs_io_komm:= next_semch;
  2 17635       <*+3*> skriv_new_sem(out,3,cs_io_komm,<:cs-io-komm:>);
  2 17636       <*-3*>
  2 17637       
  2 17637         i:= next_coru(101,<*ident*>
  2 17638                        10,<*prioritet*>
  2 17639                      true <*testmaske*>);
  2 17640         j:= new_activity(          i,
  2 17641                                    0,
  2 17642                          io_komm);<*ingen parametre*>
  2 17643       
  2 17643       <*+3*>skriv_newactivity(out,i,j);
  2 17644       <*-3*>
  2 17645       \f

  2 17645       message io_initialisering side 2 - 810520/hko/cl;
  2 17646       
  2 17646         bs_zio_adgang:= next_sem;
  2 17647       <*+3*> skriv_new_sem(out,1,bs_zio_adgang,<:bs-zio-adgang:>);
  2 17648       <*-3*>
  2 17649         signal_bin(bs_zio_adgang);
  2 17650       
  2 17650         cs_io_spool:= next_semch;
  2 17651       <*+3*> skriv_new_sem(out,3,cs_io_spool,<:cs-io-spool:>);
  2 17652       <*-3*>
  2 17653       
  2 17653         cs_io_fil:=next_semch;
  2 17654       <*+3*> skriv_new_sem(out,3,cs_io_fil,<:cs-io-fil:>);
  2 17655       <*-3*>
  2 17656         signal_ch(cs_io_fil,next_op(data+18),gen_optype);
  2 17657       
  2 17657         ss_io_spool_fulde:= next_sem;
  2 17658       <*+3*> skriv_new_sem(out,2,ss_io_spool_fulde,<:ss-io-spool-fulde:>);
  2 17659       <*-3*>
  2 17660       
  2 17660         ss_io_spool_tomme:= next_sem;
  2 17661       <*+3*> skriv_new_sem(out,2,ss_io_spool_tomme,<:ss-io-spool-tomme:>);
  2 17662       <*-3*>
  2 17663         for i:= 1 step 1 until io_spool_postantal do
  2 17664           signal(ss_io_spool_tomme);
  2 17665       \f

  2 17665       message io_initialisering side 3 - 880901/cl;
  2 17666       
  2 17666         i:= next_coru(102,
  2 17667                        5,
  2 17668                       true);
  2 17669         j:= new_activity(i,0,io_spool);
  2 17670       
  2 17670       <*+3*>skriv_newactivity(out,i,j);
  2 17671       <*-3*>
  2 17672       
  2 17672         i:= next_coru(103,
  2 17673                        10,
  2 17674                       true);
  2 17675         j:= new_activity(i,0,io_spon);
  2 17676       
  2 17676       <*+3*>skriv_newactivity(out,i,j);
  2 17677       <*-3*>
  2 17678       
  2 17678           cs_io_medd:= next_semch;
  2 17679       <*+3*> skriv_new_sem(out,3,cs_io_medd,<:cs-io-medd:>);
  2 17680       <*-3*>
  2 17681       
  2 17681           i:= next_coru(104,<*ident *>
  2 17682                         10,<*prioritet *>
  2 17683                         true<*test_maske*>);
  2 17684       
  2 17684           j:= new_activity(   i,
  2 17685                               0,
  2 17686                         io_medd);
  2 17687       
  2 17687       <*+3*>skriv_newactivity(out,i,j);
  2 17688       <*-3*>
  2 17689       
  2 17689           cs_io_nulstil:= next_semch;
  2 17690       <*+3*> skriv_new_sem(out,3,cs_io_nulstil,<:cs-io-nulstil:>);
  2 17691       <*-3*>
  2 17692       
  2 17692           i:= next_coru(105,<*ident *>
  2 17693                         10,<*prioritet *>
  2 17694                         true<*test_maske*>);
  2 17695       
  2 17695           j:= new_activity(   i,
  2 17696                               0,
  2 17697                         io_nulstil_tællere);
  2 17698       
  2 17698       <*+3*>skriv_newactivity(out,i,j);
  2 17699       <*-3*>
  2 17700       
  2 17700         open(z_io,8,konsol_navn,1 shift 21 + 1 shift 9);
  2 17701         i:= monitor(8)reserve process:(z_io,0,ia);
  2 17702         if i <> 0 then
  2 17703         begin
  3 17704           fejlreaktion(4<*monitor result*>,+i,<:io reservation:>,0);
  3 17705         end
  2 17706         else
  2 17707         begin
  3 17708           ref:= 0;
  3 17709           terminal_tab.ref.terminal_tilstand:= 0;
  3 17710           write(z_io,"nl",3,"sp",10,"*",15,<: busradio startet :>,
  3 17711                   <<zddddd>,systime(5,0.0,r),".",1,r,
  3 17712                   "sp",1,"*",15,"nl",1);
  3 17713           setposition(z_io,0,0);
  3 17714         end;
  2 17715       \f

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

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

  2 17980       message garage_initialisering side 1 - 810521/hko;
  2 17981       
  2 17981         cs_gar:= next_semch;
  2 17982       <*+3*>skriv_new_sem(out,3,cs_gar,<:cs-gar(hovedmodul):>);
  2 17983       <*-3*>
  2 17984       
  2 17984         i:= next_coru(300,<*ident*>
  2 17985                        10,<*prioritet*>
  2 17986                       true<*test_maske*>);
  2 17987       
  2 17987         j:= new_activity(       i,
  2 17988                                 0,
  2 17989                          h_garage);
  2 17990       
  2 17990       <*+3*>skriv_newactivity(out,i,j);
  2 17991       <*-3*>
  2 17992       
  2 17992         for k:= 1 step 1 until max_antal_garageterminaler do
  2 17993         begin
  3 17994           ref:= (k-1)*8;
  3 17995           open(z_gar(k),8,garage_terminal_navn.raf,1 shift 21 + 1 shift 9);
  3 17996           ref:= (max_antal_operatører+k)*terminal_beskr_længde;
  3 17997           i:=monitor(4)process address:(z_gar(k),0,ia);
  3 17998           if i = 0 then
  3 17999           begin
  4 18000             fejlreaktion(4<*monitor result*>,k,<:garageterminal eksisterer ikke:>,1);
  4 18001             terminal_tab.ref.terminal_tilstand:= 4 shift 21;
  4 18002           end
  3 18003           else
  3 18004           begin
  4 18005             terminal_tab.ref.terminal_tilstand:= 
  4 18006               if garage_auto_include(k) then 0 else 7 shift 21;
  4 18007             if garage_auto_include(k) then
  4 18008               monitor(8)reserve:(z_gar(k),0,ia);
  4 18009           end;
  3 18010           cs_garage(k):= next_semch;
  3 18011       <*+3*>skriv_new_sem(out,3,cs_garage(k),<:cs-garage( ):>);
  3 18012       <*-3*>
  3 18013           i:= next_coru(300+k,<*ident*>
  3 18014                            10,<*prioritet*>
  3 18015                          true <*testmaske*>);
  3 18016           j:= new_activity(     i,
  3 18017                                 0,
  3 18018                            garage,k);
  3 18019       
  3 18019       <*+3*>skriv_newactivity(out,i,j);
  3 18020       <*-3*>
  3 18021       
  3 18021         end;
  2 18022       \f

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

  2 18087       message radio_initialisering side 2 - 810524/hko;
  2 18088       
  2 18088         bs_mobil_opkald:= next_sem;
  2 18089       
  2 18089       <*+3*>skriv_new_sem(out,1,bs_mobil_opkald,<:bs_mobil_opkald:>);
  2 18090       <*-3*>
  2 18091       
  2 18091         bs_opkaldskø_adgang:= next_sem;
  2 18092         signal_bin(bs_opkaldskø_adgang);
  2 18093       
  2 18093       <*+3*>skriv_new_sem(out,1,bs_opkaldskø_adgang,<:bs_opk.kø_adgang:>);
  2 18094       <*-3*>
  2 18095       
  2 18095         cs_radio_medd:=next_semch;
  2 18096         signal_ch(cs_radio_medd,nextop(data+6),gen_optype or rad_optype);
  2 18097       
  2 18097       <*+3*>skriv_new_sem(out,3,cs_radio_medd,<:cs_radio_medd:>);
  2 18098       <*-3*>
  2 18099       
  2 18099         i:= next_coru(403,
  2 18100                         5,<*prioritet*>
  2 18101                       true<*testmaske*>);
  2 18102       
  2 18102         j:= new_activity(      i,
  2 18103                                0,
  2 18104                radio_medd_opkald);
  2 18105       
  2 18105       <*+3*>skriv_newactivity(out,i,j);
  2 18106       <*-3*>
  2 18107       
  2 18107       cs_radio_adm:= nextsemch;
  2 18108       <*+3*>skriv_new_sem(out,3,cs_radio_adm,<:cs_radio_adm:>);
  2 18109       <*-3*>
  2 18110       
  2 18110       i:= next_coru(404,
  2 18111                      10,
  2 18112                    true);
  2 18113       j:= new_activity(i,
  2 18114                        0,
  2 18115                        radio_adm,next_op(data+radio_op_længde));
  2 18116       <*+3*>skriv_new_activity(out,i,j);
  2 18117       <*-3*>
  2 18118       \f

  2 18118       message radio_initialisering side 3 - 810526/hko;
  2 18119        for k:= 1 step 1 until max_antal_taleveje do
  2 18120        begin
  3 18121       
  3 18121         cs_radio(k):=next_semch;
  3 18122       
  3 18122       <*+3*>skriv_new_sem(out,3,cs_radio(k),<:cs_radio(  ):>);
  3 18123       <*-3*>
  3 18124       
  3 18124         bs_talevej_udkoblet(k):= nextsem;
  3 18125       <*+3*>skriv_new_sem(out,1,bs_talevej_udkoblet(k),<:bs_talevej_udkoblet( ):>);
  3 18126       <*-3*>
  3 18127       
  3 18127         i:=next_coru(410+k,
  3 18128                       10,
  3 18129                      true);
  3 18130       
  3 18130         j:=new_activity(     i,
  3 18131                              0,
  3 18132                         radio,k,next_op(data + radio_op_længde));
  3 18133       
  3 18133       <*+3*>skriv_newactivity(out,i,j);
  3 18134       <*-3*>
  3 18135        end;
  2 18136       
  2 18136         cs_radio_pulje:=next_semch;
  2 18137       
  2 18137       <*+3*>skriv_new_sem(out,3,cs_radio_pulje,<:cs-radio-pulje:>);
  2 18138       <*-3*>
  2 18139       
  2 18139         for i:= 1 step 1 until radiopulje_størrelse do
  2 18140           signal_ch(cs_radio_pulje,
  2 18141                     next_op(60),
  2 18142                     gen_optype or rad_optype);
  2 18143       
  2 18143         cs_radio_kø:= next_semch;
  2 18144       
  2 18144       <*+3*>skriv_new_sem(out,3,cs_radio_kø,<:cs_radio_kø:>);
  2 18145       <*-3*>
  2 18146       
  2 18146         mobil_opkald_aktiveret:= true;
  2 18147       \f

  2 18147       message radio_initialisering side 4 - 810522/hko;
  2 18148       
  2 18148           laf:=raf:=0;
  2 18149       
  2 18149           open(z_fr_in,8,radio_fr_navn,radio_giveup);
  2 18150           i:= monitor(8)reserve process:(z_fr_in,0,ia);
  2 18151           j:=1;
  2 18152           if i <> 0 then
  2 18153             fejlreaktion(4<*monitor resultat*>,i,
  2 18154               string radio_fr_navn.raf(increase(j)),1);
  2 18155           open(z_fr_out,4 shift 12 + 8,radio_fr_navn,radio_giveup);
  2 18156           i:= monitor(8)reserve process:(z_fr_out,0,ia);
  2 18157           j:=1;
  2 18158           if i <> 0 then
  2 18159             fejlreaktion(4,i,string radio_fr_navn.raf(increase(j)),1);
  2 18160           ia(1):= 3 <*canonical*>;
  2 18161           ia(2):= 0 <*no echo*>;
  2 18162           ia(3):= 0 <*prompt*>;
  2 18163           ia(4):= 5 <*timeout*>;
  2 18164           setcspterm(radio_fr_navn.laf,ia);
  2 18165       
  2 18165           open(z_rf_in,8,radio_rf_navn,radio_giveup);
  2 18166           i:= monitor(8)reserve process:(z_rf_in,0,ia);
  2 18167           j:= 1;
  2 18168           if i <> 0 then
  2 18169             fejlreaktion(4<*monitor resultat*>,i,
  2 18170               string radio_rf_navn.raf(increase(j)),1);
  2 18171           open(z_rf_out,4 shift 12 + 8,radio_rf_navn,radio_giveup);
  2 18172           i:= monitor(8)reserve process:(z_rf_out,0,ia);
  2 18173           j:= 1;
  2 18174           if i <> 0 then
  2 18175             fejlreaktion(4,i,string radio_rf_navn.raf(increase(j)),1);
  2 18176           ia(1):= 3 <*canonical*>;
  2 18177           ia(2):= 0 <*no echo*>;
  2 18178           ia(3):= 0 <*prompt*>;
  2 18179           ia(4):= 5 <*timeout*>;
  2 18180           setcspterm(radio_rf_navn.laf,ia);
  2 18181       \f

  2 18181       message radio_initialisering side 5 - 810521/hko;
  2 18182           for k:= 1 step 1 until max_antal_kanaler do
  2 18183           begin
  3 18184       
  3 18184             ss_radio_aktiver(k):=next_sem;
  3 18185       <*+3*>skriv_new_sem(out,2,ss_radio_aktiver(k),<:ss_rad_aktiver( ):>);
  3 18186       <*-3*>
  3 18187       
  3 18187             ss_samtale_nedlagt(k):=next_sem;
  3 18188       <*+3*>skriv_new_sem(out,2,ss_samtale_nedlagt(k),<:ss_samtale_nedlagt(  ):>);
  3 18189       <*-3*>
  3 18190           end;
  2 18191       
  2 18191           cs_radio_ind:= next_semch;
  2 18192       <*+3*>skriv_new_sem(out,3,cs_radio_ind,<:cs_radio_ind:>);
  2 18193       <*-3*>
  2 18194       
  2 18194           i:= next_coru(401,<*ident radio_ind*>
  2 18195                            3, <*prioritet*>
  2 18196                          true <*testmaske*>);
  2 18197           j:= new_activity(      i,
  2 18198                                  0,
  2 18199                            radio_ind,next_op(data + 64));
  2 18200       
  2 18200       <*+3*>skriv_newactivity(out,i,j);
  2 18201       <*-3*>
  2 18202       
  2 18202           cs_radio_ud:=next_semch;
  2 18203       <*+3*>skriv_new_sem(out,3,cs_radio_ud,<:cs_radio_ud:>);
  2 18204       <*-3*>
  2 18205       
  2 18205           i:= next_coru(402,<*ident radio_out*>
  2 18206                            10,<*prioritet*>
  2 18207                          true <*testmaske*>);
  2 18208           j:= new_activity(         i,
  2 18209                                     0,
  2 18210                            radio_ud,next_op(data + 64));
  2 18211       
  2 18211       <*+3*>skriv_newactivity(out,i,j);
  2 18212       <*-3*>
  2 18213       \f

  2 18213       message vogntabel initialisering side 1 - 820301;
  2 18214       
  2 18214       sidste_bus:= sidste_linie_løb:= 0;
  2 18215       
  2 18215       tf_vogntabel:= 1 shift 10 + 2;
  2 18216       tf_gruppedef:= ia(4):= 1 shift 10 +3;
  2 18217       tf_gruppeidenter:= 1 shift 10 +6;
  2 18218       tf_springdef:= 1 shift 10 +7;
  2 18219       hent_fil_dim(ia);
  2 18220       max_antal_i_gruppe:= ia(2);
  2 18221       if ia(1) < max_antal_grupper then
  2 18222         max_antal_grupper:= ia(1);
  2 18223       
  2 18223       <* initialisering af interne vogntabeller *>
  2 18224       begin
  3 18225         long array field laf1,laf2;
  3 18226         integer array fdim(1:8);
  3 18227         zone z(128,1,stderror);
  3 18228         integer busnr,i,j,zi,s,pant,ll_nr,b_nr,res,tegn,g_nr,o_nr;
  3 18229         long omr,garageid;
  3 18230         integer field ll, bn;
  3 18231         boolean binær, test24;
  3 18232       
  3 18232         ll:= 2; bn:= 4;
  3 18233         
  3 18233         <* nulstil tabellerne *>
  3 18234         laf1:= -2;
  3 18235         laf2:=  2;
  3 18236         bustabel1.laf2(0):=
  3 18237         bustabel.laf2(0):= bustilstand.laf2(0):= linie_løb_tabel.laf2(0):= 
  3 18238         bus_indeks.laf2(0):= linie_løb_indeks.laf2(0):= extend 0;
  3 18239         tofrom(bustabel.laf2,bustabel.laf1,(max_antal_busser+1)*2-4);
  3 18240         tofrom(bustabel1.laf2,bustabel1.laf1,(max_antal_busser+1)*2-4);
  3 18241         tofrom(linie_løb_tabel.laf2,linie_løb_tabel.laf1,(max_antal_linie_løb+1)*2-4);
  3 18242         tofrom(busindeks.laf2,busindeks.laf1,max_antal_linie_løb-4);
  3 18243         tofrom(linie_løb_indeks.laf2,linie_løb_indeks.laf1,max_antal_busser-4);
  3 18244         tofrom(bustilstand.laf2,bustilstand.laf1,max_antal_busser-4);
  3 18245       \f

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

  3 18335       message vogntabel initialisering side 2 - 820301/cl;
  3 18336       
  3 18336         <* initialisering af intern linie/løbs-tabel og bus-indekstabel *>
  3 18337         test24:= testbit24;
  3 18338         testbit24:= false;
  3 18339         i:= 1;
  3 18340         s:= læsfil(tf_vogntabel,i,zi);
  3 18341         if s<>0 then fejlreaktion(5,s,<:vogntabelinit:>,0);
  3 18342         while fil(zi).bn<>0 do
  3 18343         begin
  4 18344           if fil(zi).ll <> 0 then
  4 18345           begin <* indsæt linie/løb *>
  5 18346             res:= binærsøg(sidste_linie_løb,linie_løb_tabel(j) -
  5 18347                     fil(zi).ll,j);
  5 18348             if res < 0 then j:= j+1;
  5 18349             if res = 0 then fejlreaktion(10,fil(zi).bn,
  5 18350               <:dobbeltregistrering i vogntabel:>,1)
  5 18351             else
  5 18352             begin
  6 18353               o_nr:= fil(zi).bn shift (-14) extract 8;
  6 18354               b_nr:= søg_omr_bus(fil(zi).bn extract 14,ll_nr,g_nr,o_nr,s,tegn);
  6 18355               if b_nr<0 then fejlreaktion(10,fil(zi).bn extract 14,
  6 18356                 <:ukendt bus i vogntabel:>,1)
  6 18357               else
  6 18358               begin
  7 18359                 if sidste_linie_løb >= max_antal_linie_løb then
  7 18360                   fejlreaktion(10,fil(zi).bn extract 14,
  7 18361                       <:for mange linie/løb i vogntabel:>,0);
  7 18362                 for ll_nr:= sidste_linie_løb step (-1) until j do
  7 18363                 begin
  8 18364                   linie_løb_tabel(ll_nr+1):= linie_løb_tabel(ll_nr);
  8 18365                   bus_indeks(ll_nr+1):= bus_indeks(ll_nr);
  8 18366                 end;
  7 18367                 linie_løb_tabel(j):= fil(zi).ll;
  7 18368                 bus_indeks(j):= false add b_nr;
  7 18369                 sidste_linie_løb:= sidste_linie_løb + 1;
  7 18370               end;
  6 18371             end;
  5 18372           end;
  4 18373           i:= i+1;
  4 18374           s:= læsfil(tf_vogntabel,i,zi);
  4 18375           if s<>0 then fejlreaktion(5,s,<:vogntabelinit:>,0);
  4 18376         end;
  3 18377       \f

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

  2 18476       message vogntabel initialisering side 4 - 810520/cl;
  2 18477       
  2 18477       cs_vt:= nextsemch;
  2 18478       <*+3*> skriv_new_sem(out,3,cs_vt,<:cs-vt:>);
  2 18479       <*-3*>
  2 18480       
  2 18480       cs_vt_adgang:= nextsemch;
  2 18481       <*+3*> skriv_new_sem(out,3,cs_vt_adgang,<:cs-vt-adgang:>);
  2 18482       <*-3*>
  2 18483       
  2 18483       cs_vt_opd:= nextsemch;
  2 18484       <*+3*> skriv_new_sem(out,3,cs_vt_opd,<:cs-vt-opd:>);
  2 18485       <*-3*>
  2 18486       
  2 18486       cs_vt_rap:= nextsemch;
  2 18487       <*+3*> skriv_new_sem(out,3,cs_vt_rap,<:cs-vt-rap:>);
  2 18488       <*-3*>
  2 18489       
  2 18489       cs_vt_tilst:= nextsemch;
  2 18490       <*+3*> skriv_new_sem(out,3,cs_vt_tilst,<:cs-vt-tilst:>);
  2 18491       <*-3*>
  2 18492       
  2 18492       cs_vt_auto:= nextsemch;
  2 18493       <*+3*> skriv_new_sem(out,3,cs_vt_auto,<:cs-vt-auto:>);
  2 18494       <*-3*>
  2 18495       
  2 18495       cs_vt_grp:= nextsemch;
  2 18496       <*+3*> skriv_new_sem(out,3,cs_vt_grp,<:cs-vt-grp:>);
  2 18497       <*-3*>
  2 18498       
  2 18498       cs_vt_spring:= nextsemch;
  2 18499       <*+3*> skriv_new_sem(out,3,cs_vt_spring,<:cs-vt-spring:>);
  2 18500       <*-3*>
  2 18501       
  2 18501       cs_vt_log:= nextsemch;
  2 18502       <*+3*> skriv_new_sem(out,3,cs_vt_log,<:cs-vt-log:>);
  2 18503       <*-3*>
  2 18504       
  2 18504       cs_vt_logpool:= nextsemch;
  2 18505       <*+3*> skriv_new_sem(out,3,cs_vt_logpool,<:cs-vt-logpool:>);
  2 18506       <*-3*>
  2 18507       
  2 18507       vt_op:= nextop(vt_op_længde);
  2 18508       signalch(cs_vt_adgang,vt_op,gen_optype or vt_optype);
  2 18509       
  2 18509       vt_logop(1):= nextop(vt_op_længde);
  2 18510       signalch(cs_vt_logpool,vt_logop(1),vt_optype);
  2 18511       vt_logop(2):= nextop(vt_op_længde);
  2 18512       signalch(cs_vt_logpool,vt_logop(2),vt_optype);
  2 18513       
  2 18513       \f

  2 18513       message vogntabel initialisering side 5 - 81-520/cl;
  2 18514       
  2 18514       i:= nextcoru(500, <*ident*>
  2 18515                     10, <*prioitet*>
  2 18516                    true <*testmaske*>);
  2 18517       j:= new_activity( i,
  2 18518                         0,
  2 18519                        h_vogntabel);
  2 18520       <*+3*> skriv_newactivity(out,i,j);
  2 18521       <*-3*>
  2 18522       
  2 18522       i:= nextcoru(501,   <*ident*>
  2 18523                     10,   <*prioritet*>
  2 18524                    true   <*testmaske*>);
  2 18525       iaf:= nextop(filop_længde);
  2 18526       j:= new_activity(i,
  2 18527                        0,
  2 18528                        vt_opdater,iaf);
  2 18529       <*+3*> skriv_newactivity(out,i,j);
  2 18530       <*-3*>
  2 18531       
  2 18531       i:= nextcoru(502,   <*ident*>
  2 18532                     10,   <*prioritet*>
  2 18533                    true   <*testmaske*>);
  2 18534       k:= nextsemch;
  2 18535       <*+3*> skriv_new_sem(out,3,k,<:cs-fil(vt-tilst):>);
  2 18536       <*-3*>
  2 18537       iaf:= nextop(fil_op_længde);
  2 18538       j:= newactivity(i,
  2 18539                       0,
  2 18540                       vt_tilstand,
  2 18541                       k,
  2 18542                       iaf);
  2 18543       <*+3*> skriv_newactivity(out,i,j);
  2 18544       <*-3*>
  2 18545       \f

  2 18545       message vogntabel initialisering side 6 - 810520/cl;
  2 18546       
  2 18546       i:= nextcoru(503,   <*ident*>
  2 18547                     10,   <*prioritet*>
  2 18548                    true   <*testmaske*>);
  2 18549       k:= nextsemch;
  2 18550       <*+3*> skriv_new_sem(out,3,k,<:cs-fil(vt-rapport):>);
  2 18551       <*-3*>
  2 18552       iaf:= nextop(fil_op_længde);
  2 18553       j:= newactivity(i,
  2 18554                       0,
  2 18555                       vt_rapport,
  2 18556                       k,
  2 18557                       iaf);
  2 18558       <*+3*> skriv_newactivity(out,i,j);
  2 18559       <*-3*>
  2 18560       
  2 18560       i:= nextcoru(504,   <*ident*>
  2 18561                     10,   <*prioritet*>
  2 18562                    true   <*testmaske*>);
  2 18563       k:= nextsemch;
  2 18564       <*+3*> skriv_new_sem(out,3,k,<:cs-fil(vt-gruppe):>);
  2 18565       <*-3*>
  2 18566       iaf:= nextop(fil_op_længde);
  2 18567       j:= new_activity(i,
  2 18568                        0,
  2 18569                        vt_gruppe,
  2 18570                        k,
  2 18571                        iaf);
  2 18572       <*+3*> skriv_newactivity(out,i,j);
  2 18573       <*-3*>
  2 18574       \f

  2 18574       message vogntabel initialisering side 7 - 810520/cl;
  2 18575       
  2 18575       i:= nextcoru(505,   <*ident*>
  2 18576                     10,   <*prioritet*>
  2 18577                    true   <*testmaske*>);
  2 18578       k:= nextsemch;
  2 18579       <*+3*> skriv_new_sem(out,3,k,<:cs-spring-retur:>);
  2 18580       <*-3*>
  2 18581       iaf:= nextop(fil_op_længde);
  2 18582       j:= newactivity(i,
  2 18583                       0,
  2 18584                       vt_spring,
  2 18585                       k,
  2 18586                       iaf);
  2 18587       <*+3*> skriv_newactivity(out,i,j);
  2 18588       <*-3*>
  2 18589       
  2 18589       i:= nextcoru(506,   <*ident*>
  2 18590                     10,
  2 18591                    true   <*testmaske*>);
  2 18592       k:= nextsemch;
  2 18593       <*+3*> skriv_new_sem(out,3,k,<:cs-auto-retur:>);
  2 18594       <*-3*>
  2 18595       iaf:= nextop(if fil_op_længde>(data+20) then fil_op_længde else (data+20));
  2 18596       j:= newactivity(i,
  2 18597                       0,
  2 18598                       vt_auto,
  2 18599                       k,
  2 18600                       iaf);
  2 18601       <*+3*> skriv_newactivity(out,i,j);
  2 18602       <*-3*>
  2 18603       
  2 18603       i:=nextcoru(507, <*ident*>
  2 18604                    10, <*prioritet*>
  2 18605                   true <*testmaske*>);
  2 18606       j:=newactivity(i,
  2 18607                      0,
  2 18608                      vt_log);
  2 18609       <*+3*> skriv_newactivity(out,i,j);
  2 18610       <*-3*>
  2 18611       
  2 18611       <*+2*>
  2 18612       <**> if testbit42  then skriv_vt_variable(out);
  2 18613       <*-2*>
  2 18614       \f

  2 18614       message sysslut initialisering side 1 - 810406/cl;
  2 18615       begin
  3 18616         zone z(128,1,stderror);
  3 18617         integer i,coruid,j,k;
  3 18618         integer array field cor;
  3 18619       
  3 18619         open(z,4,<:overvågede:>,0);
  3 18620         for i:= read(z,coruid) while i > 0 do
  3 18621         begin
  4 18622           if coruid = 0 then
  4 18623           begin
  5 18624             for coruid:= 1 step 1 until maxcoru do
  5 18625             begin
  6 18626               cor:= coroutine(coruid);
  6 18627               d.cor.corutestmask:= d.cor.corutestmask shift 1 shift (-1);
  6 18628             end
  5 18629           end
  4 18630           else
  4 18631           begin
  5 18632             cor:= coroutine(coru_no(abs coruid));
  5 18633             if cor > 0 then
  5 18634             begin
  6 18635               d.cor.corutestmask:=
  6 18636                 (d.cor.corutestmask shift 1 shift (-1)) add
  6 18637                 ((coruid > 0) extract 1 shift 11);
  6 18638             end;
  5 18639           end;
  4 18640         end;
  3 18641         close(z,true);
  3 18642       
  3 18642         læsfil(tf_systællere,1,k);
  3 18643         rf:=iaf:= 4;
  3 18644         systællere_nulstillet:= fil(k).rf;
  3 18645         nulstil_systællere:= fil(k).iaf(1);
  3 18646         if systællere_nulstillet=real<::> then
  3 18647         begin
  4 18648           systællere_nulstillet:= 0.0;
  4 18649           nulstil_systællere:= -1;
  4 18650         end;
  3 18651         iaf:= 32;
  3 18652         tofrom(opkalds_tællere,fil(k).iaf,max_antal_områder*10);
  3 18653         iaf:= 192;
  3 18654         tofrom(operatør_tællere,fil(k).iaf,max_antal_operatører*10);
  3 18655       
  3 18655       end;
  2 18656       \f

  2 18656       message sysslut initialisering side 2 - 810603/cl;
  2 18657       
  2 18657       
  2 18657         if låsning > 0 then
  2 18658           <* låsning 1 : *>  lock(takeexternal,coru_term,mon,1); <* centrallogik *>
  2 18659       
  2 18659         if låsning > 1 then
  2 18660           <* låsning 2 : *>  lock(readchar,1,write,2);
  2 18661       
  2 18661         if låsning > 2 then
  2 18662           <* låsning 3 : *>  lock(activate,1,link,1,setposition,1);
  2 18663       
  2 18663       
  2 18663       
  2 18663       
  2 18663         if låsning > 0 then
  2 18664         begin
  3 18665           i:= locked(ia);
  3 18666           write(z_io,"nl",2,<:låsning::>,låsning,"nl",1,i,<: segmenter er låst:>);
  3 18667         end;
  2 18668       \f

  2 18668       message sysslut initialisering side 3 - 810406/cl;
  2 18669       
  2 18669       write(z_io,"nl",2,<:initialisering slut:>);
  2 18670       system(2)free core:(i,ra);
  2 18671       write(z_io,"nl",1,<:free core =:>,i,"nl",1);
  2 18672       setposition(z_io,0,0);
  2 18673       write(zbillede,"ff",0,"nl",1,<:initialisering slut :>,<<zddddd>,
  2 18674             systime(5,0,r),".",1,r,"nl",1,<:free core=:>,i,
  2 18675             "nl",1);
  2 18676       errorbits:= 3; <* ok.no warning.yes *>
  2 18677 \f

  2 18677 
  2 18677 algol list.off;
  2 18678 message coroutinemonitor - 40 ;
  2 18679 
  2 18679       if simref <> firstsem then initerror(1, false);
  2 18680       if semref <> firstop - 4 then initerror(2, false);
  2 18681       if coruref <> firstsim then initerror(3, false);
  2 18682       if opref <> optop + 6 then initerror(4, false);
  2 18683       if proccount <> maxprocext -1 then initerror(5, false);
  2 18684       goto takeexternal;
  2 18685 
  2 18685 dump:
  2 18686   op:= op;
  2 18687     \f

  2 18687     message sys trapaktion side 1 - 810521/hko/cl;
  2 18688       trap(finale);
  2 18689       write(zbillede,"ff",1,"nl",1,<:***** coroutine-monitor køer *****:>);
  2 18690       for i:= 4<*readyqueue*>, 8<*idlequeue*>, 12<*timerqueue*> do
  2 18691       begin
  3 18692         k:= 0;
  3 18693         write(zbillede,"nl",2,case i//4 of(<:readyqueue->:>,<:idlequeue ->:>,
  3 18694           <:timerqueue->:>));
  3 18695         iaf:= i;
  3 18696         for iaf:= d.iaf.next while iaf<>i do
  3 18697         begin
  4 18698           ref:= firstcoru + (iaf-firstcoru)//corusize*corusize;
  4 18699           write(zbillede,<: cr:>,<<zdd>,d.ref.coruident//1000);
  4 18700           k:=k+1; if k mod 10 = 0 then write(zbillede,"nl",1,"sp",12);
  4 18701         end;
  3 18702       end;
  2 18703       outchar(zbillede,'nl');
  2 18704     
  2 18704       skriv_opkaldstællere(zbillede);
  2 18705     
  2 18705     
  2 18705     pfilsystem(zbillede);
  2 18706     
  2 18706     \f

  2 18706     message operatør trapaktion1 side 1 - 810521/hko;
  2 18707       write(zbillede,"nl",2,"=",20,<: operatørmodul :>,"=",20,"nl",1);
  2 18708     
  2 18708       write(zbillede,"nl",1,<:betjeningspladsnavne::>,"nl",1);
  2 18709       for i:= 1 step 1 until max_antal_operatører do
  2 18710       begin
  3 18711         laf:= (i-1)*8;
  3 18712         write(zbillede,<<dd>,i,<:: :>,true,6,string bpl_navn(i),
  3 18713           case operatør_auto_include(i) extract 2 + 1 of (
  3 18714           <:EK    :>,<:IN(ÅB):>,<:??    :>,<:IN(ST):>),<:   :>,
  3 18715           terminal_navn.laf,"nl",1);
  3 18716       end;
  2 18717       write(zbillede,"nl",1);
  2 18718     
  2 18718       write(zbillede,"nl",1,<:top-bpl-gruppe: :>,<<d>,top_bpl_gruppe,"nl",1,
  2 18719         <:betjeningspladsgrupper::>,"nl",1);
  2 18720       for i:= 1 step 1 until 127 do
  2 18721       if bpl_navn(i)<>long<::> then
  2 18722       begin
  3 18723         k:= write(zbillede,<<dd >,i,true,6,string bpl_navn(i),<:(:>,<<d>,
  3 18724           bpl_tilst(i,1),<:/:>,bpl_tilst(i,2),<:):>);
  3 18725         write(zbillede,"sp",16-k,<:= :>);
  3 18726         iaf:= i*op_maske_lgd; j:=0;
  3 18727         for k:= 1 step 1 until max_antal_operatører do
  3 18728         begin
  4 18729           if læsbit_ia(bpl_def.iaf,k) then
  4 18730           begin
  5 18731             if j mod 6 = 0 and j > 0 then write(zbillede,"nl",1,"sp",18);
  5 18732             write(zbillede,true,6,string bpl_navn(k));
  5 18733             j:= j+1;
  5 18734           end;
  4 18735         end;
  3 18736         write(zbillede,"nl",1);
  3 18737       end;
  2 18738     
  2 18738       write(zbillede,"nl",1,<:stoptabel::>,"nl",1);
  2 18739       for i:= 1 step 1 until max_antal_operatører do
  2 18740       begin
  3 18741         write(zbillede,<<dd >,i);
  3 18742         for j:= 0 step 1 until 3 do
  3 18743         begin
  4 18744           k:= operatør_stop(i,j);
  4 18745           write(zbillede,if j=0 then <: :> else <:->:>,if k=0 then <:ALLE:>
  4 18746             else string bpl_navn(k));
  4 18747         end;
  3 18748         write(zbillede,<:  (:>,<<d>,ant_i_opkø(i),<:):>,"nl",1);
  3 18749       end;
  2 18750     
  2 18750       skriv_terminal_tab(zbillede);
  2 18751       write(zbillede,"nl",1,<:operatør-maske::>,"nl",1);
  2 18752       outintbits_ia(zbillede,operatørmaske,1,op_maske_lgd//2);
  2 18753       skriv_opk_alarm_tab(zbillede);
  2 18754       skriv_talevejs_tab(zbillede);
  2 18755       skriv_op_spool_buf(zbillede);
  2 18756       skriv_cqf_tabel(zbillede,true);
  2 18757       write(zbillede,"nl",2,"=",20,<: garagemodul :>,"=",20,"nl",1);
  2 18758       
  2 18758       write(zbillede,"nl",1,<:garageterminaler::>,"nl",1);
  2 18759       for i:= 1 step 1 until max_antal_garageterminaler do
  2 18760       begin
  3 18761         laf:= (i-1)*8;
  3 18762         write(zbillede,<<dd>,i,<:: :>, if garage_auto_include(i) then
  3 18763           <:IN,G  :> else <:EK,G  :>,garage_terminal_navn.laf,"nl",1);
  3 18764       end;
  2 18765     \f

  2 18765     message radio trapaktion side 1 - 820301/hko;
  2 18766       write(zbillede,"nl",2,"=",20,<: radiomodul :>,"=",20,"nl",1);
  2 18767       skriv_kanal_tab(zbillede);
  2 18768       skriv_opkaldskø(zbillede);
  2 18769       skriv_radio_linietabel(zbillede);
  2 18770       skriv_radio_områdetabel(zbillede);
  2 18771     
  2 18771     \f

  2 18771     message vogntabel trapaktion side 1 - 810520/cl;
  2 18772     write(zbillede,"nl",2,"=",20,<: vogntabelmodul :>,"=",20,"nl",1);
  2 18773     skriv_vt_variable(zbillede);
  2 18774     p_vogntabel(zbillede);
  2 18775     p_gruppetabel(zbillede);
  2 18776     p_springtabel(zbillede);
  2 18777     \f

  2 18777     message sysslut trapaktion side 1 - 810519/cl;
  2 18778     write(zbillede,"nl",2,"=",20,<: corutinemonitor :>,"=",20,"nl",1);
  2 18779     corutable(zbillede);
  2 18780     write(zbillede,"ff",1,<:***** simple semaphores *****:>,"nl",2,
  2 18781       <: ref værdi prev next:>,"nl",1);
  2 18782     iaf:= firstsim;
  2 18783     repeat
  2 18784       write(zbillede,<<dddd>,iaf,<< -dddd>,d.iaf.simvalue,<< dddd>,
  2 18785         d.iaf(simcoru//2-1),d.iaf.simcoru,"nl",1);
  2 18786       iaf:= iaf + simsize;
  2 18787     until iaf>=simref;
  2 18788     write(zbillede,"ff",1,<:***** chained semaphores *****:>,"nl",2,
  2 18789       <: ref prev.coru next.coru   prev.op   next.op:>,"nl",1);
  2 18790     iaf:= firstsem;
  2 18791     repeat
  2 18792       write(zbillede,<<dddd>,iaf,<<______dddd>,d.iaf(semcoru//2-1),
  2 18793         d.iaf.semcoru,d.iaf(semop//2-1),d.iaf.semop,"nl",1);
  2 18794       iaf:= iaf+semsize;
  2 18795     until iaf>=semref;
  2 18796     write(zbillede,"ff",1,<:***** operations *****:>,"nl",2);
  2 18797     iaf:= firstop;
  2 18798     repeat
  2 18799       skriv_op(zbillede,iaf);
  2 18800       iaf:= iaf+opheadsize+d.iaf.opsize;
  2 18801     until iaf>=optop;
  2 18802     write(zbillede,"ff",1,<:***** message extentions *****:>,"nl",2,
  2 18803       <:  messref messcode   messop:>,"nl",1);
  2 18804     for i:= 1 step 1 until maxmessext do
  2 18805       write(zbillede,<< dddddddd>,messref(i),messcode(i),messop(i),"nl",1);
  2 18806     write(zbillede,"nl",4,<:***** process extentions *****:>,"nl",2,
  2 18807       <:  procref proccode   procop:>,"nl",1);
  2 18808     for i:= 1 step 1 until maxprocext do
  2 18809       write(zbillede,<< dddddddd>,procref(i),proccode(i),procop(i),"nl",1);
  2 18810     
  2 18810 
  2 18810     \f

  2 18810     message sys_finale side 1 - 810428/hko;
  2 18811     
  2 18811     finale:
  2 18812        trap(slut_finale);
  2 18813     <* algol_pause:=algol_pause shift 24 shift (-24); *>
  2 18814        endaction:=0;
  2 18815     \f

  2 18815     message filsystem finale side 1 - 810428/cl;
  2 18816     
  2 18816     <* lukning af zoner *>
  2 18817     write(out,<:lukker filsystem:>); ud;
  2 18818     for i:= 1 step 1 until dbantez+dbantsz+dbanttz do
  2 18819       close(fil(i),true);
  2 18820     \f

  2 18820     message operatør_finale side 1 - 810428/hko;
  2 18821     
  2 18821     goto op_trap2_slut;
  2 18822     
  2 18822       write(out,<:lukker operatører:>); ud;
  2 18823       for k:= 1 step 1 until max_antal_operatører do
  2 18824       begin
  3 18825         close(z_op(k),true);
  3 18826       end;
  2 18827     op_trap2_slut:
  2 18828       k:=k;
  2 18829     
  2 18829     \f

  2 18829     message garage_finale side 1 - 810428/hko;
  2 18830     
  2 18830       write(out,<:lukker garager:>); ud;
  2 18831       for k:= 1 step 1 until max_antal_garageterminaler do
  2 18832       begin
  3 18833         close(z_gar(k),true);
  3 18834       end;
  2 18835     \f

  2 18835     message radio_finale side 1 - 810525/hko;
  2 18836         write(out,<:lukker radio:>); ud;
  2 18837         close(z_fr_in,true);
  2 18838         close(z_fr_out,true);
  2 18839         close(z_rf_in,true);
  2 18840         close(z_rf_out,true);
  2 18841     \f

  2 18841     message sysslut finale side 1 - 810530/cl;
  2 18842     
  2 18842     slut_finale:
  2 18843     
  2 18843     trap(exit_finale);
  2 18844     
  2 18844     outchar(zrl,'em');
  2 18845     close(zrl,true);
  2 18846     
  2 18846     write(zbillede,
  2 18847             "nl",2,<:blocksread=:>,blocksread,
  2 18848             "nl",1,<:blocksout= :>,blocksout,
  2 18849             "nl",1,<:fillæst=   :>,fillæst,
  2 18850             "nl",1,<:filskrevet=:>,filskrevet,
  2 18851             "nl",3,<:********** billede genereret :>,<<zddddd>,
  2 18852       systime(5,0,r),".",1,r,<: **********:>,"nl",1,"em",1);
  2 18853     close(zbillede,true);
  2 18854     monitor(42,zbillede,0,ia);
  2 18855     ia(6):= systime(7,0,0.0);
  2 18856     monitor(44,zbillede,0,ia);
  2 18857     setposition(z_io,0,0);
  2 18858     write(z_io,"nl",3,"sp",10,"*",15,<: busradio afsluttet :>,<<zddddd>,
  2 18859       systime(5,0,r),".",1,r,"sp",1,"*",15,"nl",1,"em",1);
  2 18860     close(z_io,true);
  2 18861     exit_finale: trapmode:= 1 shift 10;
  2 18862 
  2 18862   end;
  1 18863 
  1 18863 
  1 18863 algol list.on;
  1 18864 message programslut;
  1 18865 program_slut:
  1 18866 end
\f


 1.   7028219 14549615  609    0    0
 2.  13908039  9904266  350    0    0
 3.   1551811   243360  418  368    0
 4.   6707625 10849847  428 1653  742
 5.  11913650  9513348  582 29884  605
 6.  11753653 11690366  583    0    0
 7.  11863649 12658528  632    0    0
 8.  18856 18850 18837 18819 18806 18798 18788 18780 18769 18758
     18751 18738 18724 18715 18707 18693 18681 18672 18662 18648
     18620 18595 18577 18553 18533 18512 18499 18484 18468 18453
     18432 18406 18392 18375 18355 18346 18324 18299 18274 18256
     18243 18239 18211 18196 18180 18169 18156 18141 18125 18112
     18096 18080 18058 18040 18024 18006 17989 17966 17947 17928
     17916 17902 17882 17868 17849 17836 17817 17806 17793 17783
     17766 17753 17742 17724 17711 17698 17678 17660 17647 17624
     17604 17588 17575 17558 17546 17531 17516 17497 17476 17462
     17452 17447 17437 17429 17410 17389 17369 17361 17354 17344
     17299 17254 17226 17213 17180 17153 17130 17090 17065 17036
     16980 16925 16872 16843 16810 16768 16736 16701 16645 16607
     16567 16519 16486 16461 16438 16418 16390 16371 16352 16329
     16318 16307 16287 16270 16255 16239 16212 16193 16177 16159
     16150 16143 16118 16110 16100 16080 16069 16050 16039 16022
     16007 15989 15964 15951 15940 15923 15905 15891 15884 15876
     15867 15839 15822 15805 15792 15784 15775 15756 15745 15731
     15719 15692 15677 15659 15637 15617 15604 15585 15562 15536
     15515 15504 15482 15462 15440 15422 15394 15373 15355 15342
     15334 15327 15312 15293 15286 15269 15249 15229 15215 15190
     15175 15154 15128 15116 15107 15078 15056 15036 15026 15015
     14990 14969 14949 14919 14900 14881 14861 14840 14832 14806
     14793 14776 14757 14731 14712 14695 14668 14648 14626 14609
     14589 14558 14527 14492 14465 14444 14431 14420 14399 14391
     14382 14363 14343 14320 14293 14276 14258 14245 14235 14224
     14200 14176 14157 14127 14114 14081 14046 14031 14010 13998
     13972 13951 13931 13907 13896 13866 13847 13824 13794 13778
     13755 13728 13693 13666 13659 13645 13624 13612 13598 13590
     13575 13561 13554 13547 13540 13532 13499 13484 13464 13451
     13433 13419 13391 13364 13346 13325 13307 13290 13273 13261
     13251 13227 13221 13206 13186 13170 13153 13128 13115 13080
     13063 13046 13023 13007 12995 12977 12950 12939 12931 12908
     12889 12880 12863 12848 12830 12821 12809 12800 12782 12766
     12751 12740 12721 12693 12672 12651 12635 12621 12614 12602
     12585 12553 12535 12519 12502 12486 12455 12431 12421 12408
     12393 12377 12359 12341 12317 12306 12290 12273 12257 12240
     12216 12209 12191 12164 12146 12121 12096 12052 12041 12030
     12002 11969 11939 11912 11870 11843 11822 11809 11801 11793
     11783 11754 11737 11716 11701 11681 11658 11636 11612 11584
     11562 11545 11520 11503 11487 11464 11449 11430 11411 11387
     11352 11326 11308 11289 11268 11240 11223 11201 11187 11164
     11136 11123 11110 11081 11043 11012 10969 10935 10904 10897
     10889 10881 10870 10841 10818 10803 10793 10773 10755 10742
     10733 10721 10712 10697 10689 10677 10648 10626 10608 10554
     10519 10485 10452 10393 10377 10360 10341 10328 10315 10294
     10282 10264 10251 10238 10211 10192 10175 10138 10122 10103
     10095 10085 10054 10035 10018 10007  9977  9954  9929  9916
      9907  9893  9869  9862  9852  9835  9816  9802  9783  9771
      9755  9744  9733  9708  9691  9669  9651  9633  9613  9600
      9580  9569  9543  9524  9505  9491  9481  9453  9435  9427
      9403  9391  9379  9355  9337  9321  9310  9282  9265  9261
      9244  9235  9228  9217  9203  9187  9170  9158  9146  9127
      9117  9109  9082  9066  9059  9046  9032  9015  9007  8991
      8982  8963  8926  8917  8892  8880  8866  8842  8822  8802
      8780  8740  8722  8707  8695  8677  8668  8661  8649  8634
      8623  8612  8598  8589  8568  8563  8552  8541  8525  8517
      8507  8486  8474  8462  8442  8433  8419  8409  8395  8374
      8359  8342  8332  8316  8303  8296  8279  8257  8238  8217
      8203  8186  8168  8152  8135  8124  8110  8095  8049  8030
      7993  7970  7947  7933  7912  7896  7867  7853  7831  7812
      7781  7766  7754  7735  7722  7706  7687  7676  7661  7645
      7633  7615  7585  7564  7543  7520  7497  7480  7464  7441
      7424  7406  7369  7346  7339  7314  7302  7279  7265  7256
      7237  7225  7208  7196  7175  7163  7145  7127  7105  7083
      7075  7067  7060  7034  7007  6989  6969  6951  6935  6923
      6903  6894  6877  6860  6849  6838  6827  6817  6812  6800
      6790  6771  6758  6731  6720  6704  6696  6678  6662  6651
      6615  6599  6585  6553  6526  6514  6504  6491  6478  6469
      6454  6440  6421  6407  6400  6395  6372  6365  6352  6341
      6320  6308  6295  6282  6273  6257  6241  6220  6201  6180
      6171  6138  6116  6098  6071  6047  6034  6020  6006  5989
      5973  5960  5938  5926  5915  5904  5890  5859  5833  5823
      5808  5780  5758  5744  5736  5724  5708  5698  5685  5673
      5654  5636  5610  5591  5566  5552  5539  5519  5501  5479
      5467  5449  5431  5416  5401  5381  5374  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
     11863649 12658528  969 506071 31003
 9.     16   310    16     4 960611 213027 buskom1
         7     3  1995   306 algftnrts
         0     1     0     2 *version
       982   400   982     4 flushout
       982    44   982     4 911004 101112 sendmessage
       983   106   983    12 910308 134214 copyout
       984   244   984    12 890821 163833 getzone6
         0   410     0     0 out
       985   178   985    12 940411 220029 testbit
       988   414   988    18 940411 222629 findfpparam
       991    46   991    18 890821 163814 system
       994   238   994    18 movestring
       994    56   994    18 890821 163907 outdate
       995   124   995    18 isotable
       996   176   995    18 890821 163656 write
      1001   310  1001   152 intable
      1002    34  1001   152 890821 163503 read
      1006    24  1006   340 890821 163714 tofrom
       993   420   991    18 stderror
      1008    80  1008   340 890821 163740 open
      1012   112  1012   340 890821 163754 monitor
      1009   344  1008   340 close
      1010    22  1008   340 setposition
       993   378   991    18 increase
      1000    50   995    18 outchar
       995    26   995    18 replacechar
      1015    98  1015   340 951214 094619 systime
         0  1700     0     0 trapmode
      1016   302  1016   340 trap
      1016   112  1016   340 890821 163915 initzones
      1017   268  1017   340 940411 222959 læsbitia
      1018    22  1018   340 sign
      1018    28  1018   340 890821 163648 ln
      1019   432  1019   340 810409 111908 skrivhele
       984   320   984    12 setzone6
      1027    52  1027   340 inrec6
      1027    28  1027   340 890821 163732 changerec6
      1028   228  1028   340 940411 222949 sætbitia
      1002    36  1001   152 readchar
      1029   348  1029   340 940411 222633 læstegn
      1699     0     0     0 000003 rs proc
      1030   278  1030   340 940411 222636 skrivtegn
      1031   384  1031   340 940411 222639 afsluttext
      1032   394  1032   340 940411 222952 læsbiti
      1033   498  1033   340 960610 222201 systid
      1035    28  1035   340 getnumber
      1035    18  1035   340 900925 171358 putnumber
         1   656     0     0 errorbits
      1042    60  1042   342 940411 222943 sætbiti
      1043   354  1043   342 940411 222801 openbs
      1045   228  1045   342 940411 222742 hægttekst
      1027    54  1027   340 outrec6
         0  1704     0     0 alarmcause
      1046   332  1046   342 940411 222745 hægtstring
      1047   254  1047   342 940411 222749 anbringtal
      1001   288  1001   152 repeatchar
      1048   444  1048   342 940411 223002 intg
      1049   350  1049   342 940411 222739 binærsøg
      1018    20  1018   340 sgn
      1050   380  1050   342 940411 222646 skrivtext
      1027    56  1027   340 swoprec6
      1054    56  1051   342 passivate
      1051    40  1051   342 890821 163947 activity
      1056    78  1056   350 260479 150000 mon
         1  1043  1056   350 monw2
         1  1039  1056   350 monw0
         1  1041  1056   350 monw1
      1053    56  1051   342 activate
         0  1588     0     0 endaction
      1056   320  1056   350 reflectcore
      1052    50  1051   342 newactivity
      1057   372  1057   358 940327 154135 setcspterm
      1059   428  1059   358 941030 233200 slices
      1063    52  1063   358 890821 163933 lock
      1063   258  1063   358 locked
         0  1612     0     0 blocksread
         0  1642     0     0 blocksout
      1064   162  1064   358 940411 222622 fpparam
         1  1049  1065   358 nl
         1  1047  1065   358 220978 131500 bel
      1066   330  1066   446 940411 222722 ud
      1067   252  1067   446 940411 222656 taltekst
         1  1045  1056   350 monw3
       984   296   984    12 getshare6
       984   398   984    12 setshare6
           70      480 1070  446    0
algol end 1070
*if ok.no
*if warning.yes
*o c
▶EOF◀