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

⟦548eaaa5e⟧ TextFile

    Length: 970752 (0xed000)
    Types: TextFile
    Names: »buskomudx07 «

Derivation

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

TextFile

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

buskom1text d.950731.2035
  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   
  1    37   long array la(1:2);
  1    38   long array field laf;
  1    39   
  1    39   procedure ud;
  1    40   begin
  2    41   <*
  2    42     outchar(out,'nl');
  2    43     if out_tw_lp then setposition(out,0,0);
  2    44   *>
  2    45     flushout('nl');
  2    46   end;
  1    47   \f

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1   467     message garage_claiming side 1 -810226/hko;
  1   468     
  1   468       max_coru:= max_coru +1
  1   469                           +max_antal_garageterminaler;
  1   470     
  1   470       max_semch:= max_semch +1
  1   471                             +max_antal_garageterminaler;
  1   472     
  1   472     \f

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

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

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

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

  2   580 
  2   580 message coroutinemonitor - 5 ;
  2   581 
  2   581 
  2   581 
  2   581       <*************** initialization procedures ***************>
  2   582 
  2   582 
  2   582   
  2   582       procedure initchain (chainref);
  2   583       value chainref;
  2   584       integer array field chainref;
  2   585       begin
  3   586         integer array field cref;
  3   587         cref:= chainref;
  3   588         d.cref.next:= d.cref.prev:= cref;
  3   589       end;
  2   590 \f

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

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

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

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

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

  2   713     message sys_erklæringer side 1 - 810406/cl,hko;
  2   714     
  2   714     zone
  2   715       zdummy(1,1,stderror),
  2   716       zrl(128,1,stderror),
  2   717       zbillede(128,1,stderror);
  2   718     
  2   718     real array 
  2   719       fejltekst(1:max_antal_fejltekster);
  2   720     
  2   720     integer
  2   721       top_bpl_gruppe;
  2   722     
  2   722     integer array
  2   723       ingen_operatører, alle_operatører(1:(op_maske_lgd//2)),
  2   724       ingen_taleveje, alle_taleveje(1:(tv_maske_lgd//2)),
  2   725       bpl_def(1:(128*(op_maske_lgd//2))),
  2   726       bpl_tilst(0:127,1:2),
  2   727       operatør_stop(0:max_antal_operatører,0:3),
  2   728       område_id(1:max_antal_områder,1:2),
  2   729       pabx_id(1:max_antal_pabx),
  2   730       radio_id(1:max_antal_radiokanaler),
  2   731       kanal_id(1:max_antal_kanaler),
  2   732       opkalds_tællere(1:(max_antal_områder*3));
  2   733     
  2   733     boolean array
  2   734       operatør_auto_include(1:max_antal_operatører),
  2   735       garage_auto_include(1:max_antal_garageterminaler);
  2   736     
  2   736     long array
  2   737       terminal_navn(1:(2*max_antal_operatører)),
  2   738       garage_terminal_navn(1:(2*max_antal_garageterminaler)),
  2   739       bpl_navn(0:127),
  2   740       område_navn(1:max_antal_områder),
  2   741       kanal_navn(1:max_antal_kanaler);
  2   742     \f

  2   742     message procedure findområde side 1 - 880901/cl;
  2   743     
  2   743     integer procedure find_bpl(navn);
  2   744       value                    navn;
  2   745       long                     navn;
  2   746     begin
  3   747       integer i;
  3   748     
  3   748       find_bpl:= 0;
  3   749       for i:= 0 step 1 until 127 do
  3   750         if navn = bpl_navn(i) then find_bpl:= i;
  3   751     end;
  2   752     
  2   752     integer procedure findområde(omr);
  2   753       value                      omr;
  2   754       integer                    omr;
  2   755     begin
  3   756       integer i;
  3   757     
  3   757       if omr = '*' shift 16 then findområde:= -1 else
  3   758       begin
  4   759         findområde:= 0;
  4   760         for i:= 1 step 1 until max_antal_områder do
  4   761           if (extend omr) shift 24=område_navn(i) then findområde:= i;
  4   762       end;
  3   763     end;
  2   764     \f

  2   764     message procedure tæl_opkald side 1 - 880926/cl;
  2   765     
  2   765     procedure tæl_opkald(område,type);
  2   766       value              område,type;
  2   767       integer            område,type;
  2   768     begin
  3   769       integer zi;
  3   770       integer array field iaf;
  3   771     
  3   771       iaf:= 0;
  3   772       increase(opkalds_tællere((område-1)*3+type));
  3   773     
  3   773       disable begin
  4   774         skrivfil(tf_systællere,1,zi);
  4   775         tofrom(fil(zi).iaf,opkalds_tællere,max_antal_områder*6);
  4   776         setposition(fil(zi),0,0);
  4   777       end;
  3   778     end;
  2   779     
  2   779     procedure skriv_opkaldstællere(z);
  2   780       zone                         z;
  2   781     begin
  3   782       integer omr,typ;
  3   783     
  3   783       write(z,"nl",2,<:+++++ opkaldstællere +++++:>,"nl",2,
  3   784         <:omr          ud ind-alm ind-nød:>,"nl",1);
  3   785       for omr:= 1 step 1 until max_antal_områder do
  3   786       begin
  4   787         write(z,true,6,string område_navn(omr),":",1);
  4   788         for typ:= 1 step 1 until 3 do
  4   789           write(z,<< ddddddd>,opkalds_tællere((omr-1)*3+typ));
  4   790         outchar(z,'nl');
  4   791       end;
  3   792     end;
  2   793     \f

  2   793     message procedure start_operation side 1 - 810521/hko;
  2   794     
  2   794       procedure start_operation(op_ref,kor,ret_sem,kode);
  2   795         value                          kor,ret_sem,kode;
  2   796         integer array field     op_ref;
  2   797         integer                        kor,ret_sem,kode;
  2   798     <*
  2   799           op_ref:  kald, reference til operation
  2   800     
  2   800           kor:     kald, kilde= hovedmodulnr*100 +løbenr
  2   801                               = korutineident.
  2   802           ret_sem: kald, retursemafor
  2   803     
  2   803           kode:    kald, suppl shift 12 + operationskode
  2   804     
  2   804           proceduren initialiserer  en operations hoved med
  2   805           parameterværdierne samt tidfeltet med aktueltid.
  2   806           resultatfelt og datafelter nulstilles.
  2   807     
  2   807     *>
  2   808         begin
  3   809           integer i;
  3   810           d.op_ref.kilde:= kor;
  3   811           systime(1,0,d.op_ref.tid);
  3   812           d.op_ref.retur:=ret_sem;
  3   813           d.op_ref.op_kode:=kode;
  3   814           d.op_ref.resultat:=0;
  3   815           for i:=(d.op_ref.opsize-data)//2 step -1 until 1 do
  3   816             d.op_ref.data(i):=0;
  3   817         end start_operation;
  2   818     \f

  2   818     message procedure afslut_operation  side 1 - 810331/hko;
  2   819     
  2   819     procedure afslut_operation(op_ref,sem);
  2   820       value                    op_ref,sem;
  2   821       integer                  op_ref,sem;
  2   822       begin
  3   823         integer array field op;
  3   824         op:=op_ref;
  3   825         if sem>0 then signal_ch(sem,op,d.op.optype) else
  3   826         if sem=-1 then signal_ch(d.op.retur,op,d.op.optype) else
  3   827         ;
  3   828       end afslut_operation;
  2   829     \f

  2   829     message procedure fejlreaktion - side 1 - 810424/cl,hko;
  2   830     
  2   830     procedure fejlreaktion(nr,værdi,str,måde);
  2   831       value nr,værdi,måde;
  2   832       integer nr,værdi,måde;
  2   833       string str;
  2   834     begin
  3   835     disable begin
  4   836       write(out,<:<10>!!! :>);
  4   837       if nr>0 and nr <=max_antal_fejltekster then
  4   838           write(out,string fejltekst(nr))
  4   839       else write(out,<:fejl nr.:>,nr);
  4   840       outchar(out,'sp');
  4   841       if måde shift (-12) extract 2=1 then
  4   842         outintbits(out,værdi)
  4   843       else
  4   844       if måde shift (-12) extract 2=2 then
  4   845         write(out,<:":>,false add værdi,1,<:":>)
  4   846       else
  4   847         write(out,værdi);
  4   848       write(out,"sp",1,str,"nl",1,<< zddddd>,systime(5,0,r),r,
  4   849                 <: korutine nr=:>,<<d>, abs curr_coruno,
  4   850                 <: ident=:>,curr_coruid,"nl",0);
  4   851       if testbit27 and måde extract 12=1 then
  4   852         trace(1);
  4   853       ud;
  4   854     end;<*disable*>
  3   855       if måde extract 12 =2 then trapmode:=1 shift 13;
  3   856       if måde extract 12= 0 then trap(-1)
  3   857       else if måde extract 12 = 2 then trap(-2);
  3   858     end fejlreaktion;
  2   859     
  2   859     procedure trace(n);
  2   860       value         n;
  2   861       integer       n;
  2   862       begin
  3   863         trap(finis);
  3   864         trap(n);
  3   865     finis:
  3   866       end trace;
  2   867     \f

  2   867     message procedure overvåget side 1 - 810413/cl;
  2   868     
  2   868     boolean procedure overvåget;
  2   869     begin
  3   870       disable begin
  4   871         integer i,måde;
  4   872         integer array field cor;
  4   873         integer array ia(1:12);
  4   874     
  4   874         i:= system(12,0,ia);
  4   875         if i > 0 then
  4   876         begin
  5   877           i:= system(12,1,ia);
  5   878           måde:= ia(3);
  5   879         end
  4   880         else måde:= 0;
  4   881     
  4   881         if måde<>0 then
  4   882         begin
  5   883           cor:= coroutine(abs ia(3));
  5   884           overvåget:= d.cor.corutestmask shift (-11);
  5   885         end
  4   886         else overvåget:= cl_overvåget;
  4   887       end;
  3   888     end;
  2   889     \f

  2   889     message procedure antal_bits_ia side 1 - 940424/cl;
  2   890     
  2   890     integer procedure antal_bits_ia(ia,n,ø);
  2   891       value                            n,ø;
  2   892       integer array                 ia;
  2   893       integer                          n,ø;
  2   894     begin
  3   895       integer i, ant;
  3   896     
  3   896       ant:= 0;
  3   897       for i:= n step 1 until ø do
  3   898         if læsbit_ia(ia,i) then ant:= ant+1;
  3   899     end;
  2   900     
  2   900     message procedure trunk_til_omr side 1 - 881006/cl;
  2   901     
  2   901     integer procedure trunk_til_omr(trunk);
  2   902       value trunk; integer trunk;
  2   903     begin
  3   904       integer i,j;
  3   905     
  3   905       j:=0;
  3   906       for i:= 1 step 1 until max_antal_områder do
  3   907         if område_id(i,2) extract 12 = trunk extract 12 then j:=i;
  3   908       trunk_til_omr:=j;
  3   909     end;
  2   910     
  2   910     integer procedure omr_til_trunk(omr);
  2   911       value omr; integer omr;
  2   912     begin
  3   913       omr_til_trunk:= område_id(omr,2) extract 12;
  3   914     end;
  2   915     
  2   915     integer procedure port_til_omr(port);
  2   916       value port; integer port;
  2   917     begin
  3   918       if port shift (-6) extract 6 = 2 then
  3   919         port_til_omr:= pabx_id(port extract 6)
  3   920       else
  3   921       if port shift (-6) extract 6 = 3 then
  3   922         port_til_omr:= radio_id(port extract 6)
  3   923       else
  3   924         port_til_omr:= 0;
  3   925     end;
  2   926     
  2   926     integer procedure kanal_til_port(kanal);
  2   927       value kanal; integer kanal;
  2   928     begin
  3   929       kanal_til_port:= kanal_id(kanal) shift (-5) extract 3 shift 6 +
  3   930                        kanal_id(kanal) extract 5;
  3   931     end;
  2   932     
  2   932     integer procedure port_til_kanal(port);
  2   933       value port; integer port;
  2   934     begin
  3   935       integer i,j;
  3   936     
  3   936       j:=0;
  3   937       for i:= 1 step 1 until max_antal_kanaler do
  3   938         if kanal_id(i) = port shift (-6) shift 5 + port extract 5 then j:=i;
  3   939       port_til_kanal:= j;
  3   940     end;
  2   941     
  2   941     integer procedure kanal_til_omr(kanal);
  2   942       value kanal; integer kanal;
  2   943     begin
  3   944       kanal_til_omr:= port_til_omr( kanal_til_port(kanal) );
  3   945     end;
  2   946     
  2   946     \f

  2   946     message procedure out_xxx_bits side 1 - 810406/cl;
  2   947     
  2   947     procedure outboolbits(zud,b);
  2   948       value                   b;
  2   949       zone                zud;
  2   950       boolean                 b;
  2   951     begin
  3   952       integer i;
  3   953     
  3   953       for i:= -11 step 1 until 0 do
  3   954       outchar(zud,if b shift i then '1' else '.');
  3   955     end;
  2   956     
  2   956     procedure outintbits(zud,j);
  2   957       value                  j;
  2   958       zone               zud;
  2   959       integer                j;
  2   960     begin
  3   961       integer i;
  3   962     
  3   962       for i:= -23 step 1 until 0 do
  3   963       begin
  4   964         outchar(zud,if j shift i extract 1 = 1 then '1' else '.');
  4   965         if i<>0 and abs(i) mod 6 = 0 then outchar(zud,'sp');
  4   966       end;
  3   967     end;
  2   968     
  2   968     procedure outintbits_ia(zud,ia,n,ø);
  2   969       value                        n,ø;
  2   970       zone                  zud;
  2   971       integer array             ia;
  2   972       integer                      n,ø;
  2   973     begin
  3   974       integer i;
  3   975     
  3   975       for i:= n step 1 until ø do
  3   976       begin
  4   977         outintbits(zud,ia(i));
  4   978         outchar(zud,'nl');
  4   979       end;
  3   980     end;
  2   981                          
  2   981     real procedure now;
  2   982     begin
  3   983       real f,r,r1; long l;
  3   984     
  3   984       systime(1,0,r); l:=r*100; f:=(l mod 100)/100;
  3   985       systime(4,r,r1);
  3   986       now:= r1+f;
  3   987     end;
  2   988     \f

  2   988     message procedure skriv_id side 1 - 820301/cl;
  2   989     
  2   989     procedure skriv_id(z,id,lgd);
  2   990       value              id,lgd;
  2   991       integer            id,lgd;
  2   992       zone             z;
  2   993     begin
  3   994       integer type,p,li,lø,bo;
  3   995     
  3   995       type:= id shift (-22);
  3   996       case type+1 of
  3   997       begin
  4   998         <* 1: bus *>
  4   999         begin
  5  1000           p:= write(z,<<d>,id extract 14);
  5  1001           if id shift (-14) <> 0 then
  5  1002             p:= p + write(z,".",1,string bpl_navn(id shift (-14)));
  5  1003         end;
  4  1004     
  4  1004         <* 2: linie/løb *>
  4  1005         begin
  5  1006           li:= id shift (-12) extract 10;
  5  1007           bo:= id shift (-7) extract 5;
  5  1008           if bo<>0 then bo:= bo + 'A' - 1;
  5  1009           lø:= id extract 7;
  5  1010           p:= write(z,<<d>,li,false add bo,(bo<>0) extract 1,"/",1,lø);
  5  1011         end;
  4  1012     
  4  1012         <* 3: gruppe *>
  4  1013         begin
  5  1014           if id shift (-21) = 4 <* linie-gruppe *> then
  5  1015           begin
  6  1016             li:= id shift (-5) extract 10;
  6  1017             bo:= id extract 5;
  6  1018             if bo<>0 then bo:= bo + 'A' - 1;
  6  1019             p:= write(z,<<d>,li,false add bo,(bo<>0) extract 1);
  6  1020           end
  5  1021           else <* special-gruppe *>
  5  1022             p:= write(z,"G",1,<<d>,id extract 7);
  5  1023         end;
  4  1024     
  4  1024         <* 4: telefon *>
  4  1025         begin
  5  1026           bo:= id shift (-20) extract 2;
  5  1027           li:= id extract 20;
  5  1028           case bo+1 of
  5  1029           begin
  6  1030             p:= write(z,string kanalnavn(li));
  6  1031             p:= write(z,<:K*:>);
  6  1032             p:= write(z,<:OMR :>,string områdenavn(li));
  6  1033             p:= write(z,<:OMR*:>);
  6  1034           end;
  5  1035         end;
  4  1036       end case;
  3  1037       write(z,"sp",lgd-p);
  3  1038     end skriv_id;
  2  1039     <*+3*>
  2  1040     \f

  2  1040     message skriv_new_sem side 1 - 810520/cl;
  2  1041     
  2  1041     procedure skriv_new_sem(z,type,ref,navn);
  2  1042       value                   type,ref;
  2  1043       zone                  z;
  2  1044       integer                 type,ref;
  2  1045       string                           navn;
  2  1046     <* skriver en identifikation af en semafor 'ref' i zonen z.
  2  1047     
  2  1047         type:       1=binær sem
  2  1048                     2=simpel sem
  2  1049                     3=kædet sem
  2  1050     
  2  1050         ref:        semaforreference
  2  1051     
  2  1051         navn:       semafornavn, max 18 tegn
  2  1052     *>
  2  1053     begin
  3  1054       disable if testbit29 then
  3  1055         write(z,"nl",1,"sp",26*(type-1),case type of(<:bs:>,<:ss:>,<:cs:>),
  3  1056           true,5,<<zddd>,ref,true,19,navn);
  3  1057     end;
  2  1058     \f

  2  1058     message procedure skriv_newactivity  side 1 - 810520/hko/cl;
  2  1059     
  2  1059     <**>  procedure skriv_newactivity(zud,actno,cause);
  2  1060     <**>    value                         actno,cause;
  2  1061     <**>    zone                      zud;
  2  1062     <**>    integer                       actno,cause;
  2  1063     <**>    begin
  3  1064     <*+2*>
  3  1065     <**>      if testbit28 then
  3  1066     <**>      begin integer array field cor;
  4  1067     <**>        cor:= coroutine(actno);
  4  1068     <**>        write(zud,<:  coroutine::>,<< dd>,actno,<:  ident::>,
  4  1069     <**>          << zdd>,d.cor.coruident//1000);
  4  1070     <**>      end;
  3  1071     <**>      if -, testbit23 then goto skriv_newact_slut;
  3  1072     <*-2*>
  3  1073     <**>      write(zud,"nl",1,<:newactivity(:>,<<d>,actno,
  3  1074     <**>                <:) cause=:>,<<-d>,cause);
  3  1075     <**>      if cause<1 then write(zud,<: !!!:>);
  3  1076     <**>      skriv_coru(zud,actno);
  3  1077     <**> skriv_newact_slut:
  3  1078     <**>    end skriv_newactivity;
  2  1079     <*-3*>
  2  1080     <*+99*>
  2  1081     \f

  2  1081     message procedure skriv_activity  side 1 - 810313/hko;
  2  1082     
  2  1082     <**> procedure skriv_activity(zud,actno);
  2  1083     <**>    value                     actno;
  2  1084     <**>    zone                  zud;
  2  1085     <**>    integer                     actno;
  2  1086     <**>    begin
  3  1087     <**>      integer i;
  3  1088     <**>      integer array iact(1:12);
  3  1089     <**>
  3  1090     <**>      i:=system(12,actno,iact);
  3  1091     <**>      write(zud,"nl",1,<:  activity(:>,<<d>,actno,<:) af :>,i,"sp",1,
  3  1092     <**>                if i=0 then <:neutral:> else (case sign(iact(3))+2 of
  3  1093     <**>                (<:disable:>,<:monitor:>,<:activity:>)),<: mode:>);
  3  1094     <**>      if i>0 and actno>0 and actno<=i then
  3  1095     <**>      begin
  4  1096     <**>        write(zud,"nl",1,"sp",4,<:tilstand= :>,case iact(8)+1 of
  4  1097     <**>                  (<:tom:>,<:passivate:>,
  4  1098     <**>                   <:implicit passivate:>,<:activate:>));
  4  1099     <**>        if iact(1)<>0 then
  4  1100     <**>         write(zud,<: ventende på message:>,iact(1));
  4  1101     <**>        if iact(7)>0 then
  4  1102     <**>          write(zud,"nl",1,"sp",4,<:virtuel stak::>,iact(7),"sp",2,
  4  1103     <**>                    <:hovedlager stak benyttes af activity(:>,<<d>,
  4  1104     <**>                    iact(2));
  4  1105     <**>        write(zud,"nl",1,"sp",4,<:stak(top,bund,sidst,csr,cza)=:>,
  4  1106     <**>                  iact(4),iact(5),iact(6),iact(10),iact(11));
  4  1107     <**>        if iact(9)<> 1 shift 22 then
  4  1108     <**>           write(zud,"nl",1,"sp",4,<:'head of zonechain'=:>,iact(9));
  4  1109     <**>         write(zud,"nl",1,"sp",4,<:'trap chain'=:>,iact(12));
  4  1110     <**>       end;
  3  1111     <**>     end skriv_activity
  2  1112     <*-99*>
  2  1113     <*+98*>
  2  1114     \f

  2  1114     message procedure identificer side 1 - 810520/cl;
  2  1115     
  2  1115     procedure identificer(z);
  2  1116       zone                z;
  2  1117     begin
  3  1118     disable write(z,<:coroutine::>,<< dd>,curr_coruno,
  3  1119               <:  ident::>,<< zdd >,curr_coruid);
  3  1120     end;
  2  1121     \f

  2  1121     message procedure skriv_coru  side 1 - 810317/cl;
  2  1122     
  2  1122     <**> procedure skriv_coru(zud,cor_no);
  2  1123     <**>   value                  cor_no;
  2  1124     <**>   zone               zud;
  2  1125     <**>   integer                cor_no;
  2  1126     <**> begin
  3  1127     <**>   integer i;
  3  1128     <**>   integer array field cor;
  3  1129     <**>
  3  1130     <**>
  3  1131     <**>   write(zud,"nl",1,<:  coroutine: :>,<<d>,cor_no);
  3  1132     <**>
  3  1133     <**>   cor:= coroutine(cor_no);
  3  1134     <**>   if cor = -1 then
  3  1135     <**>     write(zud,<: eksisterer ikke !!!:>)
  3  1136     <**>   else
  3  1137     <**>   begin
  4  1138     <**>     write(zud,<:;      ident = :>,<<zdd>,d.cor.coruident//1000,
  4  1139     <**>       <:      refbyte: :>,<<d>,cor,"nl",1,
  4  1140     <**>       <:    prev:             :>,<<dddd>,d.cor.prev,"nl",1,
  4  1141     <**>       <:    next:             :>,d.cor.next,"nl",1,
  4  1142     <**>       <:    timerchain.prev:  :>,d.cor(corutimerchain//2-1),"nl",1,
  4  1143     <**>       <:    timerchain.next:  :>,d.cor.corutimerchain,"nl",1,
  4  1144     <**>       <:    opchain.prev:     :>,d.cor(coruop//2-1),"nl",1,
  4  1145     <**>       <:    opchain.next:     :>,d.cor.coruop,"nl",1,
  4  1146     <**>       <:    timer:            :>,d.cor.corutimer,"nl",1,
  4  1147     <**>       <:    priority:         :>,d.cor.corupriority,"nl",1,
  4  1148     <**>       <:    typeset:          :>);
  4  1149     <**>     for i:= -11 step 1 until 0 do
  4  1150     <**>       write(zud,if d.cor.corutypeset shift i then <:1:> else <:.:>);
  4  1151     <**>     write(zud,"nl",1,<:    testmask:         :>);
  4  1152     <**>     for i:= -11 step 1 until 0 do
  4  1153     <**>       write(zud,if d.cor.corutestmask shift i then <:1:> else <:.:>);
  4  1154     <*+99*>
  4  1155     <**>     skriv_activity(zud,cor_no);
  4  1156     <*-99*>
  4  1157     <**>   end;
  3  1158     <**> end skriv_coru;
  2  1159     <*-98*>
  2  1160     <*+98*>
  2  1161     \f

  2  1161     message procedure skriv_op side 1 - 810409/cl;
  2  1162     
  2  1162     <**> procedure skriv_op(zud,opref);
  2  1163     <**>   value                opref;
  2  1164     <**>   integer              opref;
  2  1165     <**>   zone             zud;
  2  1166     <**> begin
  3  1167     <**>   integer array field op;
  3  1168     <**>   real array field raf;
  3  1169     <**>   integer lgd,i;
  3  1170     <**>   real t;
  3  1171     <**>
  3  1172     <**>   raf:= data;
  3  1173     <**>   op:= opref;
  3  1174     <**>   write(zud,"nl",1,<:op:>,<<d>,opref,<:::>);
  3  1175     <**>   if opref<first_op ! optop<=opref then
  3  1176     <**>   begin
  4  1177     <**>     write(zud,<:  !!! illegal reference !!!:>,"nl",1);
  4  1178     <**>     goto slut_skriv_op;
  4  1179     <**>   end;
  3  1180     <**>
  3  1181     <**>   lgd:= d.op.opsize;
  3  1182     <**>   write(zud,"nl",1,<<d>,
  3  1183     <**>     <:  opsize     :>,d.op.opsize,"nl",1,
  3  1184     <**>     <:  optype     :>);
  3  1185     <**>   for i:= -11 step 1 until 0 do
  3  1186     <**>     write(zud,if d.op.optype shift i then <:1:> else <:.:>);
  3  1187     <**>   write(zud,"nl",1,<<d>,
  3  1188     <**>     <:  prev       :>,d.op.prev,"nl",1,
  3  1189     <**>     <:  next       :>,d.op.next);
  3  1190     <**>   if lgd=0 then goto slut_skriv_op;
  3  1191     <**>   write(zud,"nl",1,<<d>,
  3  1192     <**>     <:  kilde      :>,d.op.kilde extract 10,"nl",1,
  3  1193     <**>     <:  tid        :>,<<zddddd>,systime(4,d.op.tid,t),<:.:>,t,"nl",1,<<d>,
  3  1194     <**>     <:  retur-sem  :>,if d.op.retur<>0 then <:cs:> else <:--:>,<<b>,
  3  1195                                d.op.retur,"nl",1,
  3  1196     <**>     <:  opkode     :>,<<b>,d.op.opkode shift (-12),"sp",1,<<d>,
  3  1197     <**>                       d.op.opkode extract 12,"nl",1,
  3  1198     <**>     <:  resultat   :>,d.op.resultat,"nl",2,
  3  1199     <**>     <:data::>);
  3  1200     <**>   skriv_hele(zud,d.op.raf,lgd-data,1278);
  3  1201     <**>slut_skriv_op:
  3  1202     <**> end skriv_op;
  2  1203     <*-98*>
  2  1204     \f

  2  1204     message procedure corutable side 1 - 810406/cl;
  2  1205     
  2  1205     procedure corutable(zud);
  2  1206       zone              zud;
  2  1207     begin
  3  1208       integer i;
  3  1209       integer array field cor;
  3  1210     
  3  1210       write(zud,"ff",1,<:***** coroutines *****:>,"nl",2,
  3  1211         <:no  id  ref   chain    timerch   opchain  timer pr:>,
  3  1212         <:    typeset    testmask:>,"nl",2);
  3  1213       for i:= 1 step 1 until maxcoru do
  3  1214       begin
  4  1215         cor:= coroutine(i);
  4  1216         write(zud,<<zd>,i,<< zdd>,d.cor.coruident//1000,<< dddd>,cor,
  4  1217           d.cor.prev,d.cor.next,d.cor(corutimerchain//2-1),
  4  1218           d.cor.corutimerchain,d.cor(coruop//2-1),d.cor.coruop,<< ddddd>,
  4  1219           d.cor.corutimer,<< dd>,d.cor.corupriority);
  4  1220         outchar(zud,'sp');
  4  1221         outboolbits(zud,d.cor.corutypeset);
  4  1222         outchar(zud,'sp');
  4  1223         outboolbits(zud,d.cor.corutestmask);
  4  1224         outchar(zud,'nl');
  4  1225       end;
  3  1226     end;
  2  1227     \f

  2  1227     message filglobal side 1 - 790302/jg;
  2  1228     
  2  1228     integer
  2  1229       dbantsf,dbkatsfri,
  2  1230       dbantb,dbkatbfri,
  2  1231       dbantef,dbkatefri,
  2  1232       dbsidstesz,dbsidstetz,
  2  1233       dbsegmax,
  2  1234       filskrevet,fillæst;
  2  1235     integer
  2  1236       bs_kats_fri, bs_kate_fri,
  2  1237       cs_opret_fil, cs_tilknyt_fil,
  2  1238       cs_frigiv_fil, cs_slet_fil,
  2  1239       cs_opret_spoolfil, cs_opret_eksternfil;
  2  1240     integer array
  2  1241       dbkatt(1:dbmaxtf,1:2),
  2  1242       dbkats(1:dbmaxsf,1:2),
  2  1243       dbkate(1:dbmaxef,1:6),
  2  1244       dbkatz(1:dbantez+dbantsz+dbanttz,1:2);
  2  1245     boolean array
  2  1246       dbkatb(1:dbmaxb);
  2  1247     zone array
  2  1248       fil(dbantez+dbantsz+dbanttz,128,1,stderror);
  2  1249     \f

  2  1249     message hentfildim side 1 - 781120/jg;
  2  1250     
  2  1250     
  2  1250     integer procedure hentfildim(fdim);
  2  1251     integer array fdim;
  2  1252     <*inddata filref i fdim(4),uddata fdim(1:8)*>
  2  1253     
  2  1253     begin integer ftype,fno,katf,i,s;
  3  1254       ftype:=fdim(4) shift (-10);
  3  1255       fno:=fdim(4) extract 10;
  3  1256       if ftype>3 or ftype=0 or fno=0 then
  3  1257         begin s:=1; goto udgang; end;
  3  1258       if fno>(case ftype of(dbmaxtf,dbmaxsf,dbmaxef)) then
  3  1259         begin s:=1; goto udgang end; <*paramfejl*>
  3  1260       katf:=case ftype of(dbkatt(fno,1),dbkats(fno,1),dbkate(fno,1));
  3  1261       if katf extract 9 = 0 then
  3  1262         begin s:=2; goto udgang end; <*tom indgang*>
  3  1263     
  3  1263       fdim(1):=katf shift (-9); <*post antal*>
  3  1264       fdim(2):=katf extract 9;  <*post længde*>
  3  1265       fdim(3):=case ftype of(   <*seg antal*>
  3  1266         dbkatt(fno,2) extract 18 - (if fno=1 then dbblokt else dbkatt(fno-1,2)
  3  1267         extract 18), dbkats(fno,2) shift (-12) extract 6 * dbbidlængde,
  3  1268         dbkate(fno,2) extract 18);
  3  1269       for i:=5 step 1 until 8 do <*externt filnavn*>
  3  1270         fdim(i):=if ftype=3 then dbkate(fno,i-2) else 0;
  3  1271       s:=0;
  3  1272     udgang:
  3  1273       hentfildim:=s;
  3  1274     <*+2*>
  3  1275     <*tz*> if testbit24 and overvåget then                         <*zt*>
  3  1276     <*tz*>   begin                                                 <*zt*>
  4  1277     <*tz*>     write(out,<:<10>hentfildim::>,s,<: :>);             <*zt*>
  4  1278     <*tz*>     pfdim(fdim);                                        <*zt*>
  4  1279     <*tz*>     ud;                                                 <*zt*>
  4  1280     <*tz*>   end;                                                  <*zt*>
  3  1281     <*-2*>
  3  1282     end hentfildim;
  2  1283     \f

  2  1283     message sætfildim side 1 - 780916/jg;
  2  1284     
  2  1284     integer procedure sætfildim(fdim);
  2  1285     integer array fdim;
  2  1286     <*inddata fdim(1:4), segant ingen effekt for tabel- og spoolfil*>
  2  1287     
  2  1287     begin
  3  1288       integer ftype,fno,katf,s,pl;
  3  1289       integer array gdim(1:8);
  3  1290       gdim(4):=fdim(4);
  3  1291       s:=hentfildim(gdim);
  3  1292       if s>0 then
  3  1293         goto udgang;
  3  1294       fno:=fdim(4) extract 10;
  3  1295       ftype:=fdim(4) shift (-10);
  3  1296       pl:= fdim(2) extract 12;
  3  1297       if fdim(1)<0 or pl<1 or pl>256 or fdim(3)<0 then
  3  1298         begin
  4  1299           s:=1; <*parameter fejl*>
  4  1300           goto udgang
  4  1301         end;
  3  1302       if fdim(1)>256//pl*fdim(3) then
  3  1303         begin
  4  1304           s:=1;
  4  1305           goto udgang;
  4  1306         end;
  3  1307     
  3  1307       <*segant*>
  3  1308       if ftype=3 then
  3  1309         begin integer segant;
  4  1310           segant:= fdim(3);
  4  1311           if segant > dbsegmax then
  4  1312             begin
  5  1313               s:=4; <*ingen plads*>
  5  1314               goto udgang
  5  1315             end;
  4  1316     \f

  4  1316     message sætfildim side 2 - 780916/jg;
  4  1317     
  4  1317     
  4  1317           if segant<>gdim(3) then
  4  1318             begin integer i,z,s; array field enavn; integer array tail(1:10);
  5  1319               z:=dbkate(fno,2) shift (-19); if z>0 then begin
  6  1320               if dbkatz(z,1) extract 12=fdim(4) then <*zone tilknyttet*>
  6  1321                 begin integer array zd(1:20);
  7  1322                   getzone6(fil(z),zd);
  7  1323                   if zd(13)>5 and zd(9)>=segant then
  7  1324                     begin <*dødt segment skal ikke udskrives*>
  8  1325                       zd(13):=5;
  8  1326                       setzone6(fil(z),zd)
  8  1327                     end
  7  1328                 end end;
  5  1329     \f

  5  1329     message sætfildim side 3 - 801031/jg;
  5  1330     
  5  1330     
  5  1330               enavn:=8;  <*ændr fil størrelse*>
  5  1331               i:=1;
  5  1332               open(zdummy,0,string gdim.enavn(increase(i)),0);
  5  1333               s:=monitor(42,zdummy,0,tail); <*lookup*>
  5  1334               if s>0 then
  5  1335                 fejlreaktion(1,s,<:lookup entry:>,0);
  5  1336               tail(1):=segant;
  5  1337               s:=monitor(44,zdummy,0,tail); <*change entry*>
  5  1338               close(zdummy,false);
  5  1339               if s<>0 then
  5  1340                 begin
  6  1341                 if s=6 then
  6  1342                   begin  <*ingen plads*>
  7  1343                     s:=4; goto udgang
  7  1344                   end
  6  1345                 else fejlreaktion(1,s,<:change entry:>,0);
  6  1346                 end;
  5  1347               dbkate(fno,2):=dbkate(fno,2) shift (-18) shift (18)
  5  1348                 add segant;
  5  1349     \f

  5  1349     message sætfildim side 4 - 801013/jg;
  5  1350     
  5  1350     
  5  1350             end;
  4  1351           fdim(3):=segant
  4  1352         end
  3  1353       else
  3  1354         if fdim(3)>gdim(3) then
  3  1355           begin
  4  1356             s:=4; <*altid ingen plads*>
  4  1357             goto udgang
  4  1358           end
  3  1359         else fdim(3):=gdim(3); <*samme længde*>
  3  1360       <*postantal,postlængde*>
  3  1361       katf:=fdim(1) shift 9  add pl;
  3  1362       case ftype of begin
  4  1363         dbkatt(fno,1):=katf;
  4  1364         dbkats(fno,1):=katf;
  4  1365         dbkate(fno,1):=katf end;
  3  1366     udgang:
  3  1367       sætfildim:=s;
  3  1368     <*+2*>
  3  1369     <*tz*> if testbit24 and overvåget then                          <*zt*>
  3  1370     <*tz*>   begin integer i;                                       <*zt*>
  4  1371     <*tz*>     write(out,<:<10>sætfildim::>,s,<: :>);               <*zt*>
  4  1372     <*tz*>     for i:=1 step 1 until 3 do gdim(i):=fdim(i);         <*zt*>
  4  1373     <*tz*>     pfdim(gdim);                                         <*zt*>
  4  1374     <*tz*>     ud;                                                  <*zt*>
  4  1375     <*tz*>   end;                                                   <*zt*>
  3  1376     <*-2*>
  3  1377     end sætfildim;
  2  1378     \f

  2  1378     message findfilenavn side 1 - 780916/jg;
  2  1379     
  2  1379     integer procedure findfilenavn(navn);
  2  1380     real array navn;
  2  1381     
  2  1381     begin
  3  1382       integer fno; array field enavn;
  3  1383       for fno:=1 step 1 until dbmaxef do
  3  1384        if dbkate(fno,1) extract 9>0 then <*optaget indgang*>
  3  1385           begin
  4  1386             enavn:=fno*12+4;
  4  1387             if navn(1)=dbkate.enavn(1) and
  4  1388                navn(2)=dbkate.enavn(2) then
  4  1389               begin
  5  1390                 findfilenavn:=fno;
  5  1391                 goto udgang
  5  1392               end
  4  1393           end;
  3  1394       findfilenavn:=0;
  3  1395     udgang:
  3  1396     end findfilenavn;
  2  1397     \f

  2  1397     message læsfil side 1 - 781120/jg;
  2  1398     
  2  1398     integer procedure læsfil(filref,postindex,zoneno);
  2  1399     value filref,postindex;
  2  1400     integer filref,postindex,zoneno;
  2  1401     <*+2*>
  2  1402     <*tz*> begin integer i,o,s;                                       <*zt*>
  3  1403     <*tz*> i:=fillæst;o:=filskrevet; s:=                              <*zt*>
  3  1404     <*-2*>
  3  1405     
  3  1405     læsfil:=tilgangfil(filref,postindex,zoneno,5);
  3  1406     
  3  1406     <*+2*>
  3  1407     <*tz*> if testbit24 and overvåget then                            <*zt*>
  3  1408     <*tz*>   begin                                                    <*zt*>
  4  1409     <*tz*>     write(out,<:<10>læsfil::>,s,filref,postindex,zoneno,   <*zt*>
  4  1410     <*tz*>     <: io::>,fillæst-i,filskrevet-o);ud;                   <*zt*>
  4  1411     <*tz*>   end;                                                     <*zt*>
  3  1412     <*tz*> end procedure;                                             <*zt*>
  2  1413     <*-2*>
  2  1414     \f

  2  1414     message skrivfil side 1 - 781120/jg;
  2  1415     
  2  1415     integer procedure skrivfil(filref,postindex,zoneno);
  2  1416     value filref,postindex;
  2  1417     integer filref,postindex,zoneno;
  2  1418     <*+2*>
  2  1419     <*tz*> begin integer i,o,s;                                       <*zt*>
  3  1420     <*tz*> i:=fillæst;o:=filskrevet; s:=                              <*zt*>
  3  1421     <*-2*>
  3  1422     
  3  1422     skrivfil:=tilgangfil(filref,postindex,zoneno,6);
  3  1423     
  3  1423     <*+2*>
  3  1424     <*tz*> if testbit24 and overvåget then                            <*zt*>
  3  1425     <*tz*>   begin                                                    <*zt*>
  4  1426     <*tz*>     write(out,<:<10>skrivfil::>,s,filref,postindex,zoneno, <*zt*>
  4  1427     <*tz*>     <: io::>,fillæst-i,filskrevet-o);ud;                   <*zt*>
  4  1428     <*tz*>   end;                                                     <*zt*>
  3  1429     <*tz*> end procedure;                                             <*zt*>
  2  1430     <*-2*>
  2  1431     \f

  2  1431     message modiffil side 1 - 781120/jg;
  2  1432     
  2  1432     integer procedure modiffil(filref,postindex,zoneno);
  2  1433     value filref,postindex;
  2  1434     integer filref,postindex,zoneno;
  2  1435     <*+2*>
  2  1436     <*tz*> begin integer i,o,s;                                       <*zt*>
  3  1437     <*tz*> i:=fillæst;o:=filskrevet; s:=                              <*zt*>
  3  1438     <*-2*>
  3  1439     
  3  1439     modiffil:=tilgangfil(filref,postindex,zoneno,7);
  3  1440     
  3  1440     <*+2*>
  3  1441     <*tz*> if testbit24 and overvåget then                            <*zt*>
  3  1442     <*tz*>   begin                                                    <*zt*>
  4  1443     <*tz*>     write(out,<:<10>modiffil::>,s,filref,postindex,zoneno, <*zt*>
  4  1444     <*tz*>     <: io::>,fillæst-i,filskrevet-o);ud;                   <*zt*>
  4  1445     <*tz*>   end;                                                     <*zt*>
  3  1446     <*tz*> end procedure;                                             <*zt*>
  2  1447     <*-2*>
  2  1448     \f

  2  1448     message tilgangfil side 1 - 781003/jg;
  2  1449     
  2  1449     integer procedure tilgangfil(filref,postindex,zoneno,operation);
  2  1450     value filref,postindex,operation;
  2  1451     integer filref,postindex,zoneno,operation;
  2  1452     <*proceduren kaldes fra læsfil,skrivfil og modiffil*>
  2  1453     
  2  1453     begin
  3  1454       integer ftype,fno,f,pl,pr,pps,seg,zno,zstate,katf,st;
  3  1455       integer array zd(1:20),fdim(1:8);
  3  1456     
  3  1456     
  3  1456     
  3  1456                 <*hent katalog*>
  3  1457     
  3  1457       fdim(4):=filref;
  3  1458       st:=hentfildim(fdim);
  3  1459       if st<>0 then
  3  1460         goto udgang; <*parameter fejl eller fil findes ikke*>
  3  1461       fno:=filref extract 10;
  3  1462       ftype:=filref shift (-10);
  3  1463       pl:=fdim(2);
  3  1464       katf:=case ftype of(dbkatt(fno,2),dbkats(fno,2),dbkate(fno,2));
  3  1465     \f

  3  1465     message tilgangfil side 2 - 781003/jg;
  3  1466     
  3  1466     
  3  1466     
  3  1466                 <*find segment adr og check postindex*>
  3  1467     
  3  1467       pps:=256//pl; <*poster pr segment*>
  3  1468       seg:=(postindex-1)//pps; <*relativt segment*>
  3  1469       pr:=(postindex-1) mod pps; <*post relativ til seg*>
  3  1470       if postindex <1 then
  3  1471         begin <*parameter fejl*>
  4  1472           st:=1;
  4  1473           goto udgang
  4  1474         end;
  3  1475       if seg>=fdim(3) then
  3  1476         begin <*post findes ikke*>
  4  1477           st:=3;
  4  1478           goto udgang
  4  1479         end;
  3  1480       case ftype of
  3  1481         begin <*find absolut segment*>
  4  1482     
  4  1482           <*tabelfil*>
  4  1483           seg:=seg+(if fno=1 then dbblokt else dbkatt(fno-1,2) extract 18);
  4  1484     
  4  1484           begin <*spoolfil*>
  5  1485             integer i,bidno;
  5  1486             bidno:=katf extract 12;
  5  1487             for i:=seg//dbbidlængde step -1 until 1 do
  5  1488               bidno:=dbkatb(bidno) extract 12;
  5  1489             seg:=(bidno-1)*dbbidlængde+seg mod dbbidlængde
  5  1490           end;
  4  1491     
  4  1491           <*extern fil,seg ok*>
  4  1492     
  4  1492         end case find abs seg;
  3  1493     \f

  3  1493     message tilgangfil side 3 - 801030/jg;
  3  1494     
  3  1494                 <*alloker zone*>
  3  1495     
  3  1495       zno:=katf shift(-19);
  3  1496       case ftype of begin
  4  1497     
  4  1497         begin <*tabelfil*>
  5  1498           integer førstetz;
  5  1499           førstetz:=dbkatz(dbsidstetz,2);
  5  1500           if zno=0 then
  5  1501             zno:=førstetz
  5  1502           else if dbkatz(zno,1)<>filref then
  5  1503             zno:=førstetz
  5  1504           else if zno <> førstetz and zno <> dbsidstetz then
  5  1505             begin integer z;
  6  1506               for z:=zno,dbkatz(z,2) while dbkatz(z,2)<>zno do;
  6  1507               dbkatz(z,2):=dbkatz(zno,2);
  6  1508               dbkatz(zno,2):=førstetz;
  6  1509               dbkatz(dbsidstetz,2):=zno;
  6  1510             end;
  5  1511           dbsidstetz:=zno
  5  1512         end;
  4  1513     \f

  4  1513     message tilgangfil side 4 - 801030/jg;
  4  1514     
  4  1514     
  4  1514         begin <*spoolfil*>
  5  1515           integer p,zslut,z;
  5  1516           if zno>0 then begin if dbkatz(zno,1) =filref then
  6  1517             goto udgangs end; <*strategi 1*>
  5  1518           p:=0;
  5  1519           zno:=dbsidstesz; <*strategi 4 hvis bedre ikke findes*>
  5  1520           zslut:= <*if dbantez>dbantef then 1 else*> dbantez+1;
  5  1521           for z:=dbantez+dbantsz step -1 until zslut do
  5  1522           begin integer zfref;
  6  1523             zfref:=dbkatz(z,1);
  6  1524             if zfref extract 10=0 then <*fri zone*>
  6  1525               begin <*strategi 2*>
  7  1526                 zno:=z;
  7  1527                 goto udgangs
  7  1528               end
  6  1529             else
  6  1530               if zfref shift (-10)=2 then
  6  1531                 begin <*zone tilknyttet spoolfil*>
  7  1532                   integer q;
  7  1533                   q:=dbkatz(z,2); <*prioritet*>
  7  1534                   if q>p then
  7  1535                     begin <*strategi 3*>
  8  1536                       p:=q;
  8  1537                       zno:=z
  8  1538                     end
  7  1539                 end;
  6  1540           end z;
  5  1541         udgangs:
  5  1542           if zno> dbantez then dbsidstesz:=zno;
  5  1543         end;
  4  1544     \f

  4  1544     message tilgangfil side 5 - 780916/jg;
  4  1545     
  4  1545         begin <*extern fil*>
  5  1546           integer z;
  5  1547           if zno=0 then
  5  1548             zno:=1 
  5  1549           else if dbkatz(zno,1) = filref then
  5  1550                  goto udgange; <*strategi  1*>
  5  1551           for z:=1 step 1 until dbantez do
  5  1552           begin integer zfref;
  6  1553             zfref:=dbkatz(z,1);
  6  1554             if zfref=0 then <*zone fri*>
  6  1555               begin zno:=z; goto udgange end <*strategi 2*>
  6  1556             else if zfref shift (-10) =2 then <*spoolfil*>
  6  1557                    zno:=z; <*strategi 3*>  <*else strategi 4-5*>
  6  1558           end z;
  5  1559         udgange:
  5  1560         end
  4  1561       end case alloker zone;
  3  1562     
  3  1562     
  3  1562     
  3  1562              <*åbn zone*>
  3  1563     
  3  1563       if zno<=dbantez then
  3  1564         begin <*extern zone;spool og tabel zoner altid åbne*>
  4  1565           integer zfref;
  4  1566           zfref:=dbkatz(zno,1);
  4  1567           if zfref<>0 and zfref<>filref and ftype=3 then
  4  1568                 begin <*luk hvis ny extern fil*>
  5  1569                   getzone6(fil(zno),zd);
  5  1570                   if zd(13)>5 then filskrevet:=filskrevet+1;
  5  1571                   zfref:=0;
  5  1572                   close(fil(zno),false); 
  5  1573                 end;
  4  1574           if zfref=0 then
  4  1575             begin <*åbn zone*>
  5  1576               array field enavn; integer i;
  5  1577               enavn:=4*2; i:=1;
  5  1578               open(fil(zno),4,case ftype-1 of(string dbsnavn(increase(i)),
  5  1579                 string fdim.enavn(increase(i))),0)
  5  1580             end
  4  1581         end;
  3  1582     \f

  3  1582     message tilgangfil side 6 - 780916/jg;
  3  1583     
  3  1583     
  3  1583     
  3  1583                 <*hent segment og sæt zone descriptor*>
  3  1584     
  3  1584       getzone6(fil(zno),zd);
  3  1585       zstate:=zd(13);
  3  1586       if zstate=0 or zd(9)<>seg then
  3  1587         begin <*positioner*>
  4  1588           if zstate>5 then
  4  1589             filskrevet:=filskrevet+1;
  4  1590           setposition(fil(zno),0,seg);
  4  1591           if -,(operation=6 and pr=0) then
  4  1592             begin <*læs seg medmindre op er skriv første post*>
  5  1593               inrec6(fil(zno),512);
  5  1594               fillæst:=fillæst+1
  5  1595             end;
  4  1596           zstate:=operation
  4  1597         end
  3  1598       else <*zstate:=max(operation,zone state)*>
  3  1599         if operation>zstate then
  3  1600           zstate:=operation;
  3  1601       zd(9):=seg;
  3  1602       zd(13):=zstate;
  3  1603       zd(16):=pl shift 1;
  3  1604       zd(14):=zd(19)+pr*zd(16);
  3  1605       setzone6(fil(zno),zd);
  3  1606     \f

  3  1606     message tilgangfil side 7 - 780916/jg;
  3  1607     
  3  1607     
  3  1607     
  3  1607              <*opdater kataloger*>
  3  1608     
  3  1608       katf:=zno shift 19 add (katf extract 19);
  3  1609       case ftype of
  3  1610         begin
  4  1611           dbkatt(fno,2):=katf;
  4  1612           dbkats(fno,2):=katf;
  4  1613           dbkate(fno,2):=katf
  4  1614         end;
  3  1615       dbkatz(zno,1):= filref;
  3  1616      if ftype=3 then dbkatz(zno,2):=0 else
  3  1617       <*if ftype=1 then allerede opd under zoneallokering*>
  3  1618       if ftype=2 then dbkatz(zno,2):= <*prioritet spoolfil*>
  3  1619         if zstate=5 then (if pr=pps-1 then 2 else 1)
  3  1620         else if zstate=6 and pr=pps-1 then 3 else 0;
  3  1621     
  3  1621     
  3  1621     
  3  1621                 <*udgang*>
  3  1622     
  3  1622     udgang:
  3  1623       if st=0 then
  3  1624         zoneno:=zno
  3  1625       else zoneno:=0; <*fejl*>
  3  1626       tilgangfil:=st;
  3  1627     end tilgangfil;
  2  1628     \f

  2  1628     
  2  1628     message pfilsystem side 1 - 781003/jg;
  2  1629     
  2  1629     procedure pfilparm(z);
  2  1630       zone z;
  2  1631     write(z,<:<10>dbantez=:>,dbantez,<: dbantsz=:>,dbantsz,<: dbanttz=:>,
  2  1632       dbanttz,<:<10>dbmaxtf=:>,dbmaxtf,<: dbblokt=:>,dbblokt,<: dbmaxsf=:>,dbmaxsf,
  2  1633       <:<10>dbmaxb=:>,dbmaxb,<:  dbbidlængde=:>,dbbidlængde,<:   dbbidmax=:>,
  2  1634       dbbidmax,<:<10>dbmaxef=:>,dbmaxef);
  2  1635     
  2  1635     procedure pfilglobal(z);
  2  1636       zone z;
  2  1637     write(z,<:<10>dbantsf=:>,dbantsf,<: dbkatsfri=:>,dbkatsfri,
  2  1638       <:<10>dbantb=:>,dbantb,<:  dbkatbfri=:>,dbkatbfri,
  2  1639       <:<10>dbantef=:>,dbantef,<: dbkatefri=:>,dbkatefri,
  2  1640       <:<10>dbsidstesz=:>,dbsidstesz,<: dbsidstetz=:>,dbsidstetz,
  2  1641       <:<10>filskrevet=:>,filskrevet,<: fillæst=:>,fillæst,
  2  1642       <:<10>dbsnavn=:>,dbsnavn,<: dbtnavn=:>,dbtnavn);
  2  1643     
  2  1643     
  2  1643     procedure pdbkate(z,i);
  2  1644     value i; integer i;
  2  1645       zone z;
  2  1646     begin integer j; array field navn;
  3  1647       navn:=i*12+4; j:=1;
  3  1648       write(z,<:<10>dbkate(:>,i,<:)=:>,
  3  1649       dbkate(i,1) shift (-9),
  3  1650       dbkate(i,1) extract 9,
  3  1651       dbkate(i,2) shift (-19),
  3  1652       dbkate(i,2) shift (-18) extract 1,
  3  1653       dbkate(i,2) extract 18,
  3  1654       <: :>,string dbkate.navn(increase(j)));
  3  1655     end;
  2  1656     \f

  2  1656     message pfilsystem side 2 - 781003/jg;
  2  1657     
  2  1657     
  2  1657     
  2  1657     procedure pdbkats(z,i);
  2  1658     value i; integer i;
  2  1659       zone z;
  2  1660     write(z,<:<10>dbkats(:>,i,<:)=:>,
  2  1661       dbkats(i,1) shift (-9),
  2  1662       dbkats(i,1) extract 9,
  2  1663       dbkats(i,2) shift (-19),
  2  1664       dbkats(i,2) shift (-18) extract 1,
  2  1665       dbkats(i,2) shift (-12) extract 6,
  2  1666       dbkats(i,2) extract 12);
  2  1667     
  2  1667     procedure pdbkatb(z,i);
  2  1668     value i;integer i;
  2  1669       zone z;
  2  1670     write(z,<:<10>dbkatb(:>,i,<:)=:>,
  2  1671       dbkatb(i) extract 12);
  2  1672     
  2  1672     procedure pdbkatt(z,i);
  2  1673     value i; integer i;
  2  1674       zone z;
  2  1675     write(z,<:<10>dbkatt(:>,i,<:)=:>,
  2  1676       dbkatt(i,1) shift (-9),
  2  1677       dbkatt(i,1) extract 9,
  2  1678       dbkatt(i,2) shift (-19),
  2  1679       dbkatt(i,2) shift (-18) extract 1,
  2  1680       dbkatt(i,2) extract 18);
  2  1681     
  2  1681     procedure pdbkatz(z,i);
  2  1682     value i; integer i;
  2  1683       zone z;
  2  1684     write(z,<:<10>dbkatz(:>,i,<:)=:>,
  2  1685       dbkatz(i,1),dbkatz(i,2));
  2  1686     \f

  2  1686     message pfilsystem side 3 - 781003/jg;
  2  1687     
  2  1687     
  2  1687     
  2  1687     procedure pfil(z,i);
  2  1688     value i; integer i;
  2  1689       zone z;
  2  1690     begin integer j,k; array field navn; integer array zd(1:20);
  3  1691       navn:=2; k:=1;
  3  1692       getzone6(fil(i),zd);
  3  1693       write(z,<:<10>fil(:>,i,<:)=:>,
  3  1694       zd(1) shift (-12),<:+:>,zd(1) extract 12,<: :>,
  3  1695       string zd.navn(increase(k)));
  3  1696       for j:=6 step 1 until 10 do write(z,zd(j));
  3  1697       write(z,<:<10>:>);
  3  1698       for j:=11 step 1 until 20 do write(z,zd(j));
  3  1699     end;
  2  1700     
  2  1700     procedure pfilsystem(z);
  2  1701       zone z;
  2  1702     begin integer i;
  3  1703     
  3  1703       write(z,<:<12>udskrift af variable i filsystem:>);
  3  1704           write(z,<:<10><10>filparm::>);
  3  1705           pfilparm(z);
  3  1706           write(z,<:<10><10>filglobal::>);
  3  1707           pfilglobal(z);
  3  1708           write(z,<:<10><10>fil: zone descriptor:>);
  3  1709       for i:=1 step 1 until dbantez+dbantsz+dbanttz do pfil(z,i);
  3  1710       write(z,<:<10><10>dbkatz: filref ezdis/szprioritet/tzref:>);
  3  1711           for i:=1 step 1 until dbantez+dbantsz+dbanttz do pdbkatz(z,i);
  3  1712           write(z,<:<10><10>dbkate: pa pl zref dis stot/kateref enavn:>);
  3  1713           for i :=1 step 1 until dbmaxef do pdbkate(z,i);
  3  1714           write(z,<:<10><10>dbkats: pa pl zref dis bant bref/katsref:>);
  3  1715           for i:=1 step 1 until dbmaxsf do pdbkats(z,i);
  3  1716           write(z,<:<10><10>dbkatb: katbref:>);
  3  1717           for i:=1 step 1 until dbmaxb do pdbkatb(z,i);
  3  1718           write(z,<:<10><10>dbkatt: pa pl zref dis stot:>);
  3  1719           for i:=1 step 1 until dbmaxtf do pdbkatt(z,i);
  3  1720     end pfilsystem;
  2  1721     \f

  2  1721     message pfilsystem side 4 - 781003/jg;
  2  1722     
  2  1722     
  2  1722     
  2  1722     procedure pfdim(fdim);
  2  1723     integer array fdim;
  2  1724     begin
  3  1725       integer i;
  3  1726       array field navn;
  3  1727       i:=1;navn:=8;
  3  1728       write(out,<:fdim::>,fdim(1),fdim(2),fdim(3),fdim(4),<: :>,
  3  1729       string fdim.navn(increase(i)));
  3  1730     end pfdim;
  2  1731     \f

  2  1731     message opretfil side 0 - 810529/cl;
  2  1732     
  2  1732     procedure opretfil;
  2  1733       <* checker parametre og vidresender operation
  2  1734          til opret_spoolfil eller opret_eksternfil *>
  2  1735     
  2  1735     begin
  3  1736       integer array field op;
  3  1737       integer status,pant,pl,segant,p_nøgle,fno,ftype;
  3  1738     
  3  1738       procedure skriv_opret_fil(z,omfang);
  3  1739         value                    omfang;
  3  1740         zone                   z;
  3  1741         integer                  omfang;
  3  1742       begin
  4  1743         write(z,"nl",1,<:+++ opret fil            :>);
  4  1744         if omfang > 0 then
  4  1745         disable
  4  1746         begin
  5  1747           skriv_coru(z,abs curr_coruno);
  5  1748           write(z,"nl",1,<<d>,
  5  1749             <:op     :>,op,"nl",1,
  5  1750             <:status :>,status,"nl",1,
  5  1751             <:pant   :>,pant,"nl",1,
  5  1752             <:pl     :>,pl,"nl",1,
  5  1753             <:segant :>,segant,"nl",1,
  5  1754             <:p-nøgle:>,p_nøgle,"nl",1,
  5  1755             <:fno    :>,fno,"nl",1,
  5  1756             <:ftype  :>,ftype,"nl",1,
  5  1757             <::>);
  5  1758         end;
  4  1759       end skriv_opret_fil;
  3  1760     \f

  3  1760     message opretfil side 1 - 810526/cl;
  3  1761     
  3  1761       trap(opretfil_trap);
  3  1762     <*+2*>
  3  1763     <**>  disable if testbit28 then
  3  1764     <**>    skriv_opret_fil(out,0);
  3  1765     <*-2*>
  3  1766     
  3  1766       stack_claim(if cm_test then 200 else 150);
  3  1767     
  3  1767     <*+2*>
  3  1768     <**> if testbit28 then write(out,"nl",1,<:+++ opret fil            :>);
  3  1769     <*-2*>
  3  1770     
  3  1770     trin1:
  3  1771       waitch(cs_opret_fil,op,true,-1);
  3  1772     
  3  1772     trin2: <* check parametre *>
  3  1773       disable begin
  4  1774     
  4  1774         ftype:= d.op.data(4) shift (-10);
  4  1775         fno:= d.op.data(4) extract 10;
  4  1776         if ftype<2 or ftype>3 or fno<>0 then
  4  1777         begin
  5  1778           status:= 1; <*parameterfejl*>
  5  1779           goto returner;
  5  1780         end;
  4  1781     
  4  1781         pant:= d.op.data(1);
  4  1782         pl:= d.op.data(2);
  4  1783         segant:= d.op.data(3);
  4  1784         p_nøgle:= d.op.opkode shift (-12);
  4  1785         if pant<0 or pl<1 or pl>256 or segant<(case ftype-1 of(1,0))
  4  1786           or p_nøgle<>0 and p_nøgle<>2 and p_nøgle<>3 then
  4  1787             status:= 1 <*parameterfejl *>
  4  1788         else
  4  1789         if pant>256//pl*segant then status:= 1 else
  4  1790         if segant>(case ftype-1 of(dbbidmax*dbbidlængde,dbsegmax)) then
  4  1791           status:= 4 <*ingen plads*>
  4  1792         else
  4  1793           status:=0;
  4  1794     \f

  4  1794     message opretfil side 2 - 810526/cl;
  4  1795     
  4  1795     
  4  1795     returner:
  4  1796     
  4  1796         d.op.data(9):= status;
  4  1797     
  4  1797     <*+2*>
  4  1798     <*tz*> if testbit24 and overvåget and status<>0 then    <*zt*>
  4  1799     <*tz*> begin                                            <*zt*>
  5  1800     <*tz*>   write(out,<:<10>opretfil::>,status,<: :>);     <*zt*>
  5  1801     <*tz*>   pfdim(d.op.data);                              <*zt*>
  5  1802     <*tz*>   write(out,<: op::>,op,d.op.retur); ud;         <*zt*>
  5  1803     <*tz*> end;                                             <*zt*>
  4  1804     <*-2*>
  4  1805     
  4  1805         <*returner eller vidresend operation*>
  4  1806         signalch(if status>0 then d.op.retur else
  4  1807           case ftype-1 of(cs_opret_spoolfil,cs_opret_eksternfil),
  4  1808           op,d.op.optype);
  4  1809       end;
  3  1810       goto trin1;
  3  1811     opretfil_trap:
  3  1812       disable skriv_opret_fil(zbillede,1);
  3  1813     
  3  1813     end opretfil;
  2  1814     \f

  2  1814     message tilknytfil side 0 - 810526/cl;
  2  1815     
  2  1815     procedure tilknytfil;
  2  1816       <* tilknytter ekstern fil og returnerer intern filid *>
  2  1817     
  2  1817     begin
  3  1818       integer array field op;
  3  1819       integer status,i,fno,segant,pa,pl,sliceant,s;
  3  1820       array field enavn;
  3  1821       integer array tail(1:10);
  3  1822     
  3  1822       procedure skriv_tilknyt_fil(z,omfang);
  3  1823         value                       omfang;
  3  1824         zone                      z;
  3  1825         integer                     omfang;
  3  1826       begin
  4  1827         write(z,"nl",1,<:+++ tilknyt fil          :>);
  4  1828         if omfang > 0 then
  4  1829         disable
  4  1830         begin real array field raf;
  5  1831           skriv_coru(z,abs curr_coruno);
  5  1832           write(z,"nl",1,<<d>,
  5  1833             <:op      :>,op,"nl",1,
  5  1834             <:status  :>,status,"nl",1,
  5  1835             <:i       :>,i,"nl",1,
  5  1836             <:fno     :>,fno,"nl",1,
  5  1837             <:segant  :>,segant,"nl",1,
  5  1838             <:pa      :>,pa,"nl",1,
  5  1839             <:pl      :>,pl,"nl",1,
  5  1840             <:sliceant:>,sliceant,"nl",1,
  5  1841             <:s       :>,s,"nl",1,
  5  1842             <::>);
  5  1843           raf:= 0;
  5  1844           write(z,<:tail::>); skriv_hele(z,tail.raf,20,128);
  5  1845           write(z,<:ia::>); skriv_hele(z,ia.raf,20,128);
  5  1846         end;
  4  1847       end skriv_tilknyt_fil;
  3  1848     \f

  3  1848     message tilknytfil side 1 - 810529/cl;
  3  1849     
  3  1849       stack_claim(if cm_test then 200 else 150);
  3  1850       trap(tilknytfil_trap);
  3  1851     
  3  1851     <*+2*>
  3  1852     <**> if testbit28 then
  3  1853     <**>   skriv_tilknyt_fil(out,0);
  3  1854     <*-2*>
  3  1855     
  3  1855     trin1:
  3  1856       waitch(cs_tilknyt_fil,op,true,-1);
  3  1857     
  3  1857     trin2:
  3  1858       wait(bs_kate_fri);
  3  1859     
  3  1859     trin3:
  3  1860       disable begin
  4  1861     
  4  1861         <* find ekstern rapportfil *>
  4  1862         enavn:= 8;
  4  1863         if find_fil_enavn(d.op.data.enavn)>0 then
  4  1864         begin
  5  1865           status:= 6; <* fil i brug *>
  5  1866           goto returner;
  5  1867         end;
  4  1868         open(zdummy,0,d.op.data.enavn,0);
  4  1869         s:= monitor(42)lookup entry:(zdummy,0,tail);
  4  1870         if s<>0 then
  4  1871         begin
  5  1872           if s=3 then status:= 2 <* fil findes ikke *>
  5  1873          else if s=6 then status:= 1 <* parameterfejl, navn *>
  5  1874          else fejlreaktion(1,s,<:lookup entry:>,0);
  5  1875           goto returner;
  5  1876         end;
  4  1877         if tail(9)<>d.op.data(4) <* contentskey,subno *> then
  4  1878         begin
  5  1879           status:= 5; <* forkert indhold *> goto returner;
  5  1880         end;
  4  1881         segant:= tail(1);
  4  1882         if segant>db_seg_max then
  4  1883           segant:= db_seg_max;
  4  1884         pa:= tail(10);
  4  1885         pl:= tail(7) extract 12;
  4  1886         if pl < 1 or pl > 256 then
  4  1887         begin status:= 7; goto returner; end;
  4  1888     \f

  4  1888     message tilknytfil side 2 - 810529/cl;
  4  1889         if pa>256//pl*segant then
  4  1890         begin status:= 7; goto returner; end;
  4  1891     
  4  1891         <* reserver *>
  4  1892         s:= monitor(52)create area:(zdummy,0,ia);
  4  1893         if s<>0 then
  4  1894         begin
  5  1895           if s=3 then status:= 2 <* fil findes ikke *>
  5  1896           else if s=1 <* areaclaims exeeded *> then
  5  1897           begin
  6  1898             status:= 4;
  6  1899             fejlreaktion(1,s,<:create area:>,1);
  6  1900           end
  5  1901           else fejlreaktion(1,s,<:create area:>,0);
  5  1902           goto returner;
  5  1903         end;
  4  1904     
  4  1904         s:= monitor(8)reserve:(zdummy,0,ia);
  4  1905         if s<>0 then
  4  1906         begin
  5  1907           if s<3 then status:= 6 <* i brug *>
  5  1908           else fejlreaktion(1,s,<:reserve:>,0);
  5  1909           monitor(64)remove area:(zdummy,0,ia);
  5  1910           goto returner;
  5  1911         end;
  4  1912     
  4  1912         tail(7):= 1 shift 12 +pl; <* tilknyttet *>
  4  1913         s:= monitor(44)change entry:(zdummy,0,tail);
  4  1914         if s<>0 then fejlreaktion(1,s,<:change entry:>,0);
  4  1915     
  4  1915         <* opdater katalog *>
  4  1916         dbantef:= dbantef+1;
  4  1917         fno:= dbkatefri;
  4  1918         dbkatefri:= dbkate(fno,2);
  4  1919         dbkate(fno,1):= pa shift 9 add pl; <* postantal,postlængde *>
  4  1920         dbkate(fno,2):= segant;
  4  1921         for i:= 5 step 1 until 8 do
  4  1922           dbkate(fno,i-2):= d.op.data(i);
  4  1923     
  4  1923         <* returparametre *>
  4  1924         d.op.data(1):= pa;
  4  1925         d.op.data(2):= pl;
  4  1926         d.op.data(3):= segant;
  4  1927         d.op.data(4):= 3 shift 10 +fno;
  4  1928         status:= 0;
  4  1929     \f

  4  1929     message tilknytfil side 3 - 810526/cl;
  4  1930     
  4  1930     
  4  1930     returner:
  4  1931         close(zdummy,false);
  4  1932         d.op.data(9):= status;
  4  1933     
  4  1933     
  4  1933     <*+2*>
  4  1934     <*tz*> if testbit24 and overvåget then                 <*zt*>
  4  1935     <*tz*> begin                                           <*zt*>
  5  1936     <*tz*>   write(out,<:<10>tilknytfil::>,status,<: :>);  <*zt*>
  5  1937     <*tz*>   pfdim(d.op.data);                             <*zt*>
  5  1938     <*tz*>   write(out,<: op::>,op,d.op.retur); ud;        <*zt*>
  5  1939     <*tz*> end;                                            <*zt*>
  4  1940     <*-2*>
  4  1941     
  4  1941         signalch(d.op.retur,op,d.op.optype);
  4  1942         if dbantef < dbmaxef then
  4  1943           signalbin(bs_kate_fri);
  4  1944       end;
  3  1945       goto trin1;
  3  1946     tilknytfil_trap:
  3  1947       disable skriv_tilknyt_fil(zbillede,1);
  3  1948     end tilknyt_fil;
  2  1949     \f

  2  1949     message frigivfil side 0 - 810529/cl;
  2  1950     
  2  1950     procedure frigivfil;
  2  1951       <* frigiver en tilknyttet ekstern fil *>
  2  1952     
  2  1952     begin
  3  1953       integer array field op;
  3  1954       integer status,fref,ftype,fno,s,i,z;
  3  1955       array field enavn;
  3  1956       integer array tail(1:10);
  3  1957     
  3  1957       procedure skriv_frigiv_fil(zud,omfang);
  3  1958         value                        omfang;
  3  1959         zone                     zud;
  3  1960         integer                      omfang;
  3  1961       begin
  4  1962         write(zud,"nl",1,<:+++ frigiv fil           :>);
  4  1963         if omfang > 0 then
  4  1964         disable
  4  1965         begin real array field raf;
  5  1966           skriv_coru(zud,abs curr_coruno);
  5  1967           write(zud,"nl",1,<<d>,
  5  1968             <:op    :>,op,"nl",1,
  5  1969             <:status:>,status,"nl",1,
  5  1970             <:fref  :>,fref,"nl",1,
  5  1971             <:ftype :>,ftype,"nl",1,
  5  1972             <:fno   :>,fno,"nl",1,
  5  1973             <:s     :>,s,"nl",1,
  5  1974             <:i     :>,i,"nl",1,
  5  1975             <:z     :>,z,"nl",1,
  5  1976             <::>);
  5  1977           raf:= 0;
  5  1978           write(zud,<:tail::>); skriv_hele(zud,tail.raf,20,128);
  5  1979         end;
  4  1980       end skriv_frigiv_fil;
  3  1981     \f

  3  1981     message frigivfil side 1 - 810526/cl;
  3  1982     
  3  1982     
  3  1982       stack_claim(if cm_test then 200 else 150);
  3  1983       trap(frigivfil_trap);
  3  1984     
  3  1984     <*+2*>
  3  1985     <**>  disable if testbit28 then
  3  1986     <**>    skriv_frigiv_fil(out,0);
  3  1987     <*-2*>
  3  1988     
  3  1988     trin1:
  3  1989       waitch(cs_frigiv_fil,op,true,-1);
  3  1990     
  3  1990     trin2:
  3  1991       disable begin
  4  1992     
  4  1992         <* find fil *>
  4  1993         fref:= d.op.data(4);
  4  1994         ftype:= fref shift (-10);
  4  1995         fno:= fref extract 10;
  4  1996         if ftype=0 or ftype>3 or fno=0 then
  4  1997         begin status:= 1; goto returner; end;
  4  1998         if fno>(case ftype of(dbmaxtf,dbmaxsf,dbmaxef)) then
  4  1999         begin status:= 1; goto returner; end;
  4  2000         if case ftype of(dbkatt(fno,1),dbkats(fno,1),dbkate(fno,1))
  4  2001            extract 9 = 0 then
  4  2002         begin
  5  2003          status:= 2; <* fil findes ikke *>
  5  2004          goto returner;
  5  2005         end;
  4  2006         if ftype <> 3 then
  4  2007         begin status:= 5; goto returner; end;
  4  2008     
  4  2008         <* frigiv evt. tilknyttet zone og areaprocess *>
  4  2009         z:= dbkate(fno,2) shift (-19);
  4  2010         if z > 0 then
  4  2011         begin
  5  2012           if dbkatz(z,1)=fref then
  5  2013           begin integer array zd(1:20);
  6  2014             getzone6(fil(z),zd);
  6  2015             if zd(13)>5 then filskrevet:= filskrevet +1;
  6  2016             close(fil(z),true);
  6  2017             dbkatz(z,1):= 0;
  6  2018           end;
  5  2019         end;
  4  2020     \f

  4  2020     message frigivfil side 2 - 810526/cl;
  4  2021     
  4  2021         <* opdater tail *>
  4  2022         enavn:= fno*12+4;
  4  2023         open(zdummy,0,dbkate.enavn,0);
  4  2024         s:= monitor(42)lookup entry:(zdummy,0,tail);
  4  2025         if s<>0 then fejlreaktion(1,s,<:lookup entry:>,0);
  4  2026         tail(7):= dbkate(fno,1) extract 9; <* ej tilknyttet,postlængde *>
  4  2027         tail(10):=dbkate(fno,1) shift (-9);<* postantal *>
  4  2028         s:= monitor(44)change entry:(zdummy,0,tail);
  4  2029         if s<>0 then fejlreaktion(1,s,<:change entry:>,0);
  4  2030         monitor(64)remove process:(zdummy,0,tail);
  4  2031         close(zdummy,true);
  4  2032     
  4  2032         <* frigiv indgang *>
  4  2033         for i:= 1, 3 step 1 until 6 do
  4  2034           dbkate(fno,1):= 0;
  4  2035         dbkate(fno,2):= dbkatefri;
  4  2036         dbkatefri:= fno;
  4  2037         dbantef:= dbantef -1;
  4  2038         signalbin(bs_kate_fri);
  4  2039         d.op.data(4):= 0; <* filref null *>
  4  2040         status:= 0;
  4  2041     
  4  2041     returner:
  4  2042         d.op.data(9):= status;
  4  2043     <*+2*>
  4  2044     <*tz*> if testbit24 and overvåget then                  <*zt*>
  4  2045     <*tz*> begin                                            <*zt*>
  5  2046     <*tz*>   write(out,<:<10>frigivfil::>,status,<: :>);    <*zt*>
  5  2047     <*tz*>   pfdim(d.op.data);                              <*zt*>
  5  2048     <*tz*>   write(out,<: op::>,op,d.op.retur); ud;         <*zt*>
  5  2049     <*tz*> end;                                             <*zt*>
  4  2050     <*-2*>
  4  2051     
  4  2051         signalch(d.op.retur,op,d.op.optype);
  4  2052       end;
  3  2053       goto trin1;
  3  2054     frigiv_fil_trap:
  3  2055        disable skriv_frigiv_fil(zbillede,1);
  3  2056     end frigivfil;
  2  2057     \f

  2  2057     message sletfil side 0 - 810526/cl;
  2  2058     
  2  2058     procedure sletfil;
  2  2059       <* sletter en spool- eller ekstern fil *>
  2  2060     
  2  2060     begin
  3  2061       integer array field op;
  3  2062       integer fref,fno,ftype,status;
  3  2063     
  3  2063       procedure skriv_slet_fil(z,omfang);
  3  2064         value                    omfang;
  3  2065         zone                   z;
  3  2066         integer                  omfang;
  3  2067       begin
  4  2068         write(z,"nl",1,<:+++ slet fil             :>);
  4  2069         if omfang > 0 then
  4  2070         disable
  4  2071         begin
  5  2072           skriv_coru(z,abs curr_coruno);
  5  2073           write(z,"nl",1,<<d>,
  5  2074             <:op    :>,op,"nl",1,
  5  2075             <:fref  :>,fref,"nl",1,
  5  2076             <:fno   :>,fno,"nl",1,
  5  2077             <:ftype :>,ftype,"nl",1,
  5  2078             <:status:>,status,"nl",1,
  5  2079             <::>);
  5  2080         end;
  4  2081       end skriv_slet_fil;
  3  2082     \f

  3  2082     message sletfil side 1 - 810526/cl;
  3  2083     
  3  2083       stack_claim(if cm_test then 200 else 150);
  3  2084     
  3  2084       trap(sletfil_trap);
  3  2085     <*+2*>
  3  2086     <**>  disable if testbit28 then
  3  2087     <**>    skriv_slet_fil(out,0);
  3  2088     <*-2*>
  3  2089     
  3  2089     trin1:
  3  2090       waitch(cs_slet_fil,op,true,-1);
  3  2091     
  3  2091     trin2:
  3  2092       disable begin
  4  2093     
  4  2093         <* find fil *>
  4  2094         fref:= d.op.data(4);
  4  2095         ftype:= fref shift (-10);
  4  2096         fno:= fref extract 10;
  4  2097         if ftype=0 or ftype>3 or fno=0 then
  4  2098         begin status:= 1; goto returner; end;
  4  2099         if fno>(case ftype of(dbmaxtf,dbmaxsf,dbmaxef)) then
  4  2100         begin status:= 1; goto returner; end;
  4  2101         if case ftype of(dbkatt(fno,1),dbkats(fno,1),dbkate(fno,1))
  4  2102           extract 9 = 0 then
  4  2103         begin
  5  2104           status:= 2; <* fil findes ikke *>
  5  2105           goto returner;
  5  2106         end;
  4  2107     
  4  2107     
  4  2107         <* slet spool- eller ekstern fil *>
  4  2108         case ftype of
  4  2109         begin
  5  2110     
  5  2110           <* tabelfil - ingen aktion *>
  5  2111           ;
  5  2112     \f

  5  2112     message sletfil side 2 - 810203/cl;
  5  2113     
  5  2113           <* spoolfil *>
  5  2114           begin
  6  2115             integer z,bidno,bf,bidant,i;
  6  2116     
  6  2116             <* hvis tilknyttet så frigiv *>
  6  2117             z:= dbkats(fno,2) shift (-19);
  6  2118             if z>0 then
  6  2119             begin
  7  2120               if dbkatz(z,1)=fref then
  7  2121               begin integer array zd(1:20);
  8  2122                 dbkatz(z,1):= 2 shift 10;
  8  2123                 getzone6(fil(z),zd); <*annuler evt. udskrivning*>
  8  2124                 if zd(13)>5 then
  8  2125                 begin zd(13):= 0; setzone6(fil(z),zd); end;
  8  2126               end;
  7  2127             end;
  6  2128     
  6  2128             <* frigiv bidder *>
  6  2129             bidno:= bf:= dbkats(fno,2) extract 12; <*bid start*>
  6  2130             bidant:= dbkats(fno,2) shift (-12) extract 6;
  6  2131             for i:= bidant -1 step -1 until 1 do
  6  2132               bidno:= dbkatb(bidno) extract 12;
  6  2133             dbkatb(bidno):= false add dbkatbfri;
  6  2134             dbkatbfri:= bf;
  6  2135             dbantb:= dbantb-bidant;
  6  2136     
  6  2136             <* frigiv indgang *>
  6  2137             dbkats(fno,1):= 0;
  6  2138             dbkats(fno,2):= dbkatsfri;
  6  2139             dbkatsfri:= fno;
  6  2140             dbantsf:= dbantsf -1;
  6  2141             signalbin(bs_kats_fri);
  6  2142           end spoolfil;
  5  2143     \f

  5  2143     message sletfil side 3 - 810203/cl;
  5  2144     
  5  2144           <* extern fil *>
  5  2145           begin
  6  2146             integer i,s,z;
  6  2147             real array field enavn;
  6  2148             integer array tail(1:10);
  6  2149     
  6  2149             <* find head and tail *>
  6  2150             enavn:= fno*12+4;
  6  2151             open(zdummy,0,dbkate.enavn,0);
  6  2152             s:= monitor(42)lookup entry:(zdummy,0,tail);
  6  2153             if s<>0 then fejlreaktion(1,s,<:lookup entry:>,0);
  6  2154     
  6  2154             <*frigiv evt. tilknyttet zone og areaprocess*>
  6  2155             z:=dbkate(fno,2) shift (-19);
  6  2156             if z>0 then
  6  2157             begin
  7  2158               if dbkatz(z,1)=fref then
  7  2159               begin integer array zd(1:20);
  8  2160                 getzone6(fil(z),zd);
  8  2161                 if zd(13)>5 then <* udskrivning *>
  8  2162                 begin <*annuler*>
  9  2163                   zd(13):= 0;
  9  2164                   setzone6(fil(z),zd);
  9  2165                 end;
  8  2166                 close(fil(z),true);
  8  2167                 dbkatz(z,1):= 0;
  8  2168               end;
  7  2169             end;
  6  2170     
  6  2170             <* fjern entry *>
  6  2171             s:= monitor(48)remove entry:(zdummy,0,tail);
  6  2172             if s<>0 then fejlreaktion(1,s,<:remove entry:>,0);
  6  2173             close(zdummy,true);
  6  2174     
  6  2174             <* frigiv indgang *>
  6  2175             for i:=1, 3 step 1 until 6 do
  6  2176               dbkate(fno,i):= 0;
  6  2177             dbkate(fno,2):= dbkatefri;
  6  2178             dbkatefri:= fno;
  6  2179             dbantef:= dbantef -1;
  6  2180             signalbin(bs_kate_fri);
  6  2181           end eksternfil;
  5  2182     
  5  2182         end ftype;
  4  2183     \f

  4  2183     message sletfil side 4 - 810526/cl;
  4  2184     
  4  2184     
  4  2184         status:= 0;
  4  2185         if ftype > 1 then
  4  2186           d.op.data(4):= 0; <*filref null*>
  4  2187     
  4  2187     returner:
  4  2188         d.op.data(9):= status;
  4  2189     
  4  2189     <*+2*>
  4  2190     <*tz*> if testbit24 and overvåget then                  <*zt*>
  4  2191     <*tz*> begin                                            <*zt*>
  5  2192     <*tz*>   write(out,<:<10>sletfil::>,status,<: :>);      <*zt*>
  5  2193     <*tz*>   pfdim(d.op.data);                              <*zt*>
  5  2194     <*tz*>   write(out,<: op::>,op,d.op.retur); ud;         <*zt*>
  5  2195     <*tz*> end;                                             <*zt*>
  4  2196     <*-2*>
  4  2197         
  4  2197          signalch(d.op.retur,op,d.op.optype);
  4  2198       end;
  3  2199       goto trin1;
  3  2200     sletfil_trap:
  3  2201         disable skriv_slet_fil(zbillede,1);
  3  2202     end sletfil;
  2  2203     \f

  2  2203     message opretspoolfil side 0 - 810526/cl;
  2  2204     
  2  2204     procedure opretspoolfil;
  2  2205       <* opretter en spoolfil og returnerer intern filid *>
  2  2206     
  2  2206     begin
  3  2207       integer array field op;
  3  2208       integer bidantal,fno,i,bs,bidstart;
  3  2209     
  3  2209       procedure skriv_opret_spoolfil(z,omfang);
  3  2210         value                          omfang;
  3  2211         zone                         z;
  3  2212         integer                        omfang;
  3  2213       begin
  4  2214         write(z,"nl",1,<:+++ opret spoolfil       :>);
  4  2215         if omfang > 0 then
  4  2216         disable
  4  2217         begin
  5  2218           skriv_coru(z,abs curr_coruno);
  5  2219           write(z,"nl",1,<<d>,
  5  2220             <:op      :>,op,"nl",1,
  5  2221             <:bidantal:>,bidantal,"nl",1,
  5  2222             <:fno     :>,fno,"nl",1,
  5  2223             <:i       :>,i,"nl",1,
  5  2224             <:bs      :>,bs,"nl",1,
  5  2225             <:bidstart:>,bidstart,"nl",1,
  5  2226             <::>);
  5  2227           end;
  4  2228         end skriv_opret_spoolfil;
  3  2229     \f

  3  2229     message opretspoolfil side 1 - 810526/cl;
  3  2230     
  3  2230       stack_claim(if cm_test then 200 else 150);
  3  2231     
  3  2231       signalbin(bs_kats_fri); <*initialiseres til åben*>
  3  2232     
  3  2232       trap(opretspool_trap);
  3  2233     <*+2*>
  3  2234     <**>  disable if testbit28 then
  3  2235     <**>    skriv_opret_spoolfil(out,0);
  3  2236     <*-2*>
  3  2237     trin1:
  3  2238       waitch(cs_opret_spoolfil,op,true,-1);
  3  2239     
  3  2239     trin2:
  3  2240       bidantal:= (d.op.data(3)<*segant*> - 1)//dbbidlængde +1;
  3  2241       wait(bs_kats_fri);
  3  2242     
  3  2242     trin3:
  3  2243       if bidantal>dbmaxb-dbantb then <*ikke plads,vent*>
  3  2244       begin
  4  2245         wait(bs_kats_fri);
  4  2246         goto trin3;
  4  2247       end;
  3  2248       disable begin
  4  2249     
  4  2249         <*alloker bidder*>
  4  2250         bs:= bidstart:= dbkatbfri;
  4  2251         for i:= bidantal-1 step -1 until 1 do
  4  2252           bs:= dbkatb(bs) extract 12;
  4  2253         dbkatbfri:= dbkatb(bs) extract 12;
  4  2254         dbkatb(bs):= false; <*sidste ref null*>
  4  2255         dbantb:= dbantb+bidantal;
  4  2256     
  4  2256         <*alloker indgang*>
  4  2257         fno:= dbkatsfri;
  4  2258         dbkatsfri:= dbkats(fno,2);
  4  2259         dbantsf:= dbantsf +1;
  4  2260         dbkats(fno,1):= d.op.data(1) shift 9 <*postantal*> add
  4  2261                         d.op.data(2) extract 9; <*postlængde*>
  4  2262         dbkats(fno,2):= bidantal shift 12 add bidstart; <*zone null*>
  4  2263     \f

  4  2263     message opretspoolfil side 2 - 810526/cl;
  4  2264     
  4  2264         <*returner*>
  4  2265         d.op.data(3):= bidantal*dbbidlængde; <*segantal*>
  4  2266         d.op.data(4):= 2 shift 10 add fno; <*filref*>
  4  2267         for i:= 5 step 1 until 8 do <*filnavn null*>
  4  2268           d.op.data(i):= 0;
  4  2269         d.op.data(9):= 0; <*status ok*>
  4  2270     
  4  2270     <*+2*>
  4  2271     <*tz*> if testbit24 and overvåget then                  <*zt*>
  4  2272     <*tz*> begin                                            <*zt*>
  5  2273     <*tz*>   write(out,<:<10>opretfil::>,0,<: :>);          <*zt*>
  5  2274     <*tz*>   pfdim(d.op.data);                              <*zt*>
  5  2275     <*tz*>   write(out,<: op:>,op,d.op.retur); ud;          <*zt*>
  5  2276     <*tz*> end;                                             <*zt*>
  4  2277     <*-2*>
  4  2278     
  4  2278         signalch(d.op.retur,op,d.op.optype);
  4  2279         if dbantsf<dbmaxsf then signalbin(bs_kats_fri);
  4  2280       end;
  3  2281       goto trin1;
  3  2282     
  3  2282     opretspool_trap:
  3  2283         disable skriv_opret_spoolfil(zbillede,1);
  3  2284     
  3  2284     end opretspoolfil;
  2  2285     \f

  2  2285     message opreteksternfil side 0 - 810526/cl;
  2  2286     
  2  2286     procedure opreteksternfil;
  2  2287       <* opretter og knytter en ekstern fil *>
  2  2288     
  2  2288     begin
  3  2289       integer array field op;
  3  2290       integer status,s,i,fno,p_nøgle;
  3  2291       integer array tail(1:10),zd(1:20);
  3  2292       real r;
  3  2293       real array field enavn;
  3  2294     
  3  2294       procedure skriv_opret_ekstfil(z,omfang);
  3  2295         value                         omfang;
  3  2296         zone                        z;
  3  2297         integer                       omfang;
  3  2298       begin
  4  2299         write(z,"nl",1,<:+++ opret ekstern fil    :>);
  4  2300         if omfang > 0 then
  4  2301         disable
  4  2302         begin real array field raf;
  5  2303           skriv_coru(z,abs curr_coruno);
  5  2304           write(z,"nl",1,<<d>,
  5  2305             <:op     :>,op,"nl",1,
  5  2306             <:status :>,status,"nl",1,
  5  2307             <:s      :>,s,"nl",1,
  5  2308             <:i      :>,i,"nl",1,
  5  2309             <:fno    :>,fno,"nl",1,
  5  2310             <:p-nøgle:>,p_nøgle,"nl",1,
  5  2311             <::>);
  5  2312           raf:= 0;
  5  2313           write(z,<:tail::>); skriv_hele(z,tail.raf,20,128);
  5  2314           write(z,<:zd::>); skriv_hele(z,zd.raf,40,28);
  5  2315         end;
  4  2316       end skriv_opret_ekstfil;
  3  2317     \f

  3  2317     message opreteksternfil side 1 - 810526/cl;
  3  2318     
  3  2318       stack_claim(if cm_test then 200 else 150);
  3  2319     
  3  2319       signalbin(bs_kate_fri); <*initialiseres til åben*>
  3  2320     
  3  2320       trap(opretekst_trap);
  3  2321     <*+2*>
  3  2322     <**>  disable if testbit28 then
  3  2323     <**>    skriv_opret_ekstfil(out,0);
  3  2324     <*-2*>
  3  2325     trin1:
  3  2326       waitch(cs_opret_eksternfil,op,true,-1);
  3  2327     
  3  2327     trin2:
  3  2328       wait(bs_kate_fri);
  3  2329     
  3  2329     trin3:
  3  2330       <*opret temporær fil og tilknyt den*>
  3  2331       disable begin
  4  2332     
  4  2332         enavn:= 8;
  4  2333         <*opret*>
  4  2334         open(zdummy,0,d.op.data.enavn,0);
  4  2335         tail(1):= d.op.data(3); <*segant*>
  4  2336         tail(2):= 1;
  4  2337         tail(6):= systime(7,0,r); <*shortclock*>
  4  2338         tail(7):= 1 shift 12 +d.op.data(2) extract 12; <*tilknyttet,postlgd*>
  4  2339         tail(8):= 0;
  4  2340         tail(9):= 31 shift 12; <*contentskey=ekstern fil,subnr=0*>
  4  2341         tail(10):= d.op.data(1); <*postantal*>
  4  2342         s:= monitor(40)create entry:(zdummy,0,tail);
  4  2343         if s<>0 then
  4  2344         begin
  5  2345           if s=4 <*claims exeeded*> then
  5  2346           begin
  6  2347             status:= 4;
  6  2348             fejlreaktion(1,s,<:create entry:>,1);
  6  2349             goto returner;
  6  2350           end;
  5  2351           if s=3 <*navn ikke unikt*> then
  5  2352           begin status:= 6; goto returner; end;
  5  2353           fejlreaktion(1,s,<:create entry:>,0);
  5  2354         end;
  4  2355     \f

  4  2355     message opreteksternfil side 2 - 810203/cl;
  4  2356     
  4  2356         p_nøgle:= d.op.opkode shift (-12);
  4  2357         s:= monitor(50)permanent_entry:(zdummy,p_nøgle,tail);
  4  2358         if s<>0 then
  4  2359         begin
  5  2360           if s=6 then
  5  2361           begin <*claims exeeded*>
  6  2362             status:= 4;
  6  2363             fejlreaktion(1,s,<:permanent entry:>,1);
  6  2364             monitor(48)remove entry:(zdummy,0,tail);
  6  2365             goto returner;
  6  2366           end
  5  2367           else fejlreaktion(1,s,<:permanent entry:>,0);
  5  2368         end;
  4  2369     
  4  2369         <*reserver*>
  4  2370         s:= monitor(52)create areaprocess:(zdummy,0,zd);
  4  2371         if s<>0 then
  4  2372         begin
  5  2373           fejlreaktion(1,s,<:create area:>,if s=1 then 1 else 0);
  5  2374           status:= 4;
  5  2375           monitor(48)remove entry:(zdummy,0,zd);
  5  2376           goto returner;
  5  2377         end;
  4  2378     
  4  2378         s:= monitor(8)reserve:(zdummy,0,zd);
  4  2379         if s<>0 then fejlreaktion(1,s,<:reserve:>,0);
  4  2380     
  4  2380         <*tilknyt*>
  4  2381         dbantef:= dbantef +1;
  4  2382         fno:= dbkatefri;
  4  2383         dbkatefri:= dbkate(fno,2);
  4  2384         dbkate(fno,1):= tail(10) shift 9 add (tail(7) extract 12);
  4  2385         dbkate(fno,2):= tail(1);
  4  2386         getzone6(zdummy,zd);
  4  2387         for i:= 2 step 1 until 5 do
  4  2388           dbkate(fno,i+1):= d.op.data(3+i):= zd(i); <*navn*>
  4  2389         d.op.data(3):= tail(1);
  4  2390         d.op.data(4):= 3 shift 10 +fno;
  4  2391         status:= 0;
  4  2392     \f

  4  2392     message opreteksternfil side 3 - 810526/cl;
  4  2393     
  4  2393     returner:
  4  2394     
  4  2394         close(zdummy,false);
  4  2395         d.op.data(9):= status;
  4  2396     
  4  2396     <*+2*>
  4  2397     <*tz*> if testbit24 and overvåget then                  <*zt*>
  4  2398     <*tz*> begin                                            <*zt*>
  5  2399     <*tz*>   write(out,<:<10>opretfil::>,status,<: :>);     <*zt*>
  5  2400     <*tz*>   pfdim(d.op.data);                              <*zt*>
  5  2401     <*tz*>   write(out,<: op::>,op,d.op.retur); ud;         <*zt*>
  5  2402     <*tz*> end;                                             <*zt*>
  4  2403     <*-2*>
  4  2404     
  4  2404         signalch(d.op.retur,op,d.op.optype);
  4  2405         if dbantef<dbmaxef then signalbin(bs_kate_fri);
  4  2406       end;
  3  2407       goto trin1;
  3  2408     
  3  2408     opretekst_trap:
  3  2409         disable skriv_opret_ekstfil(zbillede,1);
  3  2410     
  3  2410     end opreteksternfil;
  2  2411     
  2  2411     \f

  2  2411     message attention_erklæringer side 1 - 850820/cl;
  2  2412     
  2  2412       integer
  2  2413         tf_kommandotabel,
  2  2414         cs_att_pulje,
  2  2415         bs_fortsæt_adgang,
  2  2416         att_proc_ref;
  2  2417     
  2  2417       integer array
  2  2418         att_flag,
  2  2419         att_signal(1:att_maske_lgd//2);
  2  2420     
  2  2420       integer array
  2  2421        terminal_tab(1:terminal_beskr_længde//2*(1<*io*>+
  2  2422                             max_antal_operatører+max_antal_garageterminaler)),
  2  2423        fortsæt(1:32);
  2  2424     \f

  2  2424     message procedure afslut_kommando side 1 - 810507/hko;
  2  2425     
  2  2425       procedure afslut_kommando(op_ref);
  2  2426         integer array field     op_ref;
  2  2427         begin integer nr,i,sem;
  3  2428           i:= d.op_ref.kilde;
  3  2429           nr:= if i=299 then max_antal_operatører+max_antal_garageterminaler+1
  3  2430                else case i//100 of (0,i mod 100,max_antal_operatører+(i mod 100));
  3  2431           sætbit_ia(att_flag,nr,0);
  3  2432           d.op_ref.optype:=gen_optype;
  3  2433     <* "husket" attention disabled ****************
  3  2434           if sætbit_ia(att_signal,nr,0)=1 then
  3  2435           begin
  3  2436             sem:=if i=299 then cs_talevejsswitch else
  3  2437                  case i//100 of (cs_io_komm,cs_operatør(i mod 100),
  3  2438                                  cs_garage(i mod 100));
  3  2439             afslut_operation(op_ref,0);
  3  2440             start_operation(op_ref,i,cs_att_pulje,0);
  3  2441             signal_ch(sem,op_ref,gen_optype);
  3  2442          end
  3  2443          else
  3  2444     ********************* disable "husket" attention *>
  3  2445             afslut_operation(op_ref,cs_att_pulje);
  3  2446         end;
  2  2447     \f

  2  2447     message procedure læs_store side 1 - 880919/cl;
  2  2448     
  2  2448     integer procedure læs_store(z,c);
  2  2449       zone                      z;
  2  2450       integer                     c;
  2  2451     begin
  3  2452       læs_store:= readchar(z,c);
  3  2453       if 'a' <= c and c <= 'å' then c:= c - 'a' + 'A';
  3  2454     end;
  2  2455     \f

  2  2455     message procedure param side 1 - 810226/cl;
  2  2456     
  2  2456     
  2  2456     
  2  2456     integer procedure param(txt,pos,spec,tabel_id,type,værdi,sep);
  2  2457     value tabel_id;
  2  2458     integer pos, tabel_id, type, sep;
  2  2459     integer array txt, spec, værdi;
  2  2460     
  2  2460     
  2  2460     
  2  2460            <*************************************>
  2  2461            <*                                   *>
  2  2462            <*   CLAUS LARSEN:  15.07.77         *>
  2  2463            <*                                   *>
  2  2464            <*************************************>
  2  2465     
  2  2465     
  2  2465     
  2  2465     
  2  2465     <*   param syntax-analyserer en parameterliste, og   *>
  2  2466     <*   bestemmer næste parameter og den separator der  *>
  2  2467     <*   afslutter parameteren                           *>
  2  2468     
  2  2468     
  2  2468     
  2  2468     begin
  3  2469        integer array klasse(0:127), aktuel_param(1:4), fdim(1:8);
  3  2470        real array indgang(1:2);
  3  2471        integer i, j, tegn, tegn_pos, tal, hashnøgle,
  3  2472           zone_nr, top, max_segm, start_segm, lpos;
  3  2473        boolean  minus, separator;
  3  2474        lpos := pos;
  3  2475        type:=-1;
  3  2476        for i:=1 step 1 until 4 do værdi(i):=0;
  3  2477     \f

  3  2477     message procedure param side 2 - 810428/cl,hko;
  3  2478     
  3  2478     
  3  2478     
  3  2478        <* grænsecheck for pos *>
  3  2479        begin
  4  2480           integer nedre, øvre;
  4  2481     
  4  2481           nedre := system(3,øvre,txt);
  4  2482           nedre := nedre * 3 - 2;
  4  2483           øvre  := øvre  * 3;
  4  2484           if lpos < (nedre - 1) or øvre < lpos then
  4  2485           begin
  5  2486             sep:= -1;
  5  2487             param:= 5;
  5  2488             goto slut;
  5  2489           end;
  4  2490     
  4  2490           <* er parameterlisten slut *>
  4  2491           lpos:= lpos+1;
  4  2492           læs_tegn(txt,lpos,tegn);
  4  2493           if tegn = 'em' or tegn = 'nl' or tegn = 'nul' then
  4  2494           begin
  5  2495              lpos := lpos - 2;
  5  2496              sep := tegn;
  5  2497              param := 5;
  5  2498     
  5  2498              goto slut;
  5  2499           end else lpos:= lpos-1;
  4  2500        end;
  3  2501     \f

  3  2501     message procedure param side 3 - 810428/cl;
  3  2502     
  3  2502     
  3  2502        <* initialisering *>
  3  2503        for i := 1 step 1 until 4 do
  3  2504           aktuel_param(i) := 0;
  3  2505        minus := separator := false;
  3  2506     
  3  2506        <* initialiser klassetabel *>
  3  2507        for i := 65 step 1 until 93,
  3  2508                 97 step 1 until 125 do klasse(i) := 1;
  3  2509        for i := 48 step 1 until 57 do klasse(i) := 2;
  3  2510        for i := 0 step 1 until 47, 58 step 1 until 64, 
  3  2511                 94, 95, 96, 126, 127 do klasse(i) := 4;
  3  2512     
  3  2512     
  3  2512        <* sæt specialtegn *>
  3  2513        i := 1;
  3  2514        læs_tegn(spec,i,tegn);
  3  2515        while tegn <> 0 do
  3  2516        begin
  4  2517           if klasse(tegn) = 4 and tegn <> 'sp' and tegn <> 'nl' then
  4  2518              klasse(tegn) := 3;
  4  2519           læs_tegn(spec,i,tegn);
  4  2520        end;
  3  2521     \f

  3  2521     message procedure param side 4 - 810226/cl;
  3  2522     
  3  2522     
  3  2522        <* læs første tegn i ny parameter og bestem typen *>
  3  2523        læs_tegn(txt,lpos,tegn);
  3  2524     
  3  2524        case klasse(tegn) of 
  3  2525        begin
  4  2526     
  4  2526           <* case 1 - bogstav *>
  4  2527           begin
  5  2528              type := 0;
  5  2529              param := 0;
  5  2530              tegn_pos := 1;
  5  2531              hashnøgle := 0;
  5  2532     
  5  2532              <* læs parameter *>
  5  2533              while tegn_pos < 12 and klasse(tegn) <> 4 do
  5  2534              begin
  6  2535                 hashnøgle := hashnøgle + tegn;
  6  2536                 skriv_tegn(aktuel_param,tegn_pos,tegn);
  6  2537                 læs_tegn(txt,lpos,tegn);
  6  2538              end;
  5  2539     
  5  2539              <* find separator *>
  5  2540              while klasse(tegn) <> 4 do læs_tegn(txt,lpos,tegn);
  5  2541              sep := tegn;
  5  2542     \f

  5  2542     message procedure param side 5 - 810226/cl;
  5  2543     
  5  2543              <* tabelopslag *>
  5  2544              if tabel_id <> 0 then
  5  2545              begin
  6  2546                 <* hent max_segm *>
  6  2547     
  6  2547                 fdim(4) := tabel_id;
  6  2548                 j := hent_fil_dim(fdim);
  6  2549                 if j > 0 then
  6  2550                 begin
  7  2551                    param := 4;
  7  2552                    for i := 1 step 1 until 4 do 
  7  2553                       værdi(i) := aktuel_param(i);
  7  2554                    goto slut;
  7  2555                 end;
  6  2556                 max_segm := fdim(3);
  6  2557     
  6  2557                 <* forbered opslag *>
  6  2558                 start_segm := (hashnøgle mod max_segm) + 1;
  6  2559                 indgang(1) := 0.0 shift 48 add aktuel_param(1)
  6  2560                    shift 24 add aktuel_param(2);
  6  2561                 indgang(2) := 0.0 shift 48 add aktuel_param(3)
  6  2562                    shift 24 add aktuel_param(4);
  6  2563                 hashnøgle := start_segm;
  6  2564     \f

  6  2564     message procedure param side 6 - 810226/cl;
  6  2565     
  6  2565                 <* søg navn *>
  6  2566                 repeat
  6  2567                    <* læs segment *>
  6  2568                    læs_fil(tabel_id,hashnøgle,zone_nr);
  6  2569     
  6  2569                    <* beregn sidste element *>
  6  2570                    top := fil(zone_nr,1) extract 24;
  6  2571                    top := (top - 1) * 4 + 2;
  6  2572     
  6  2572                    <* søg *>
  6  2573                    for i := 2 step 4 until top do
  6  2574                       if fil(zone_nr,i) = indgang(1) and
  6  2575                          fil(zone_nr,i+1) = indgang(2) then
  6  2576                       begin
  7  2577                          <* fundet *>
  7  2578                          værdi(1) := fil(zone_nr,i+2) shift (-24)
  7  2579                                        extract 24;
  7  2580                          værdi(2) := fil(zone_nr,i+2) extract 24;
  7  2581                          værdi(3) := fil(zone_nr,i+3) shift (-24)
  7  2582                                      extract 24;
  7  2583                          værdi(4) := fil(zone_nr,i+3) extract 24;
  7  2584                          goto fundet;
  7  2585                       end;
  6  2586     
  6  2586                    if top = 122 then <*overløb *>
  6  2587                       hashnøgle := (hashnøgle mod max_segm) + 1;
  6  2588                 until top < 122 or hashnøgle = start_segm;
  6  2589     
  6  2589                 <* navn findes ikke *>
  6  2590                 param := 2;
  6  2591                 for j := 1 step 1 until 4 do
  6  2592                    værdi(j) := aktuel_param(j);
  6  2593     fundet: ;
  6  2594              end <*tabel_id <> 0 *>
  5  2595              else
  5  2596                 for i := 1 step 1 until 4 do
  5  2597                    værdi(i) := aktuel_param(i);
  5  2598           end <* case 1 *>;
  4  2599     \f

  4  2599     message procedure param side 7 - 810310/cl,hko;
  4  2600     
  4  2600           <* case 2 - ciffer *>
  4  2601     cif:  begin
  5  2602                type:=tal := 0;
  5  2603              while klasse(tegn) = 2 do
  5  2604              begin
  6  2605                 type:=type+1;
  6  2606                 tal := tal * 10 + (tegn - 48);
  6  2607                 læs_tegn(txt,lpos,tegn);
  6  2608              end;
  5  2609              if minus then tal := -tal;
  5  2610              værdi(1) := tal;
  5  2611              sep := tegn;
  5  2612              param := 0;
  5  2613           end <* case 2 *>;
  4  2614     \f

  4  2614     message procedure param side 8 - 810428/cl;
  4  2615     
  4  2615           <* case 3 - specialtegn *>
  4  2616     spc:  begin
  5  2617              if tegn = '-' then
  5  2618              begin
  6  2619                 læs_tegn(txt,lpos,tegn);
  6  2620                 if klasse(tegn) = 2 then
  6  2621                 begin
  7  2622                    minus := true;
  7  2623                    goto cif;
  7  2624                 end
  6  2625                 else
  6  2626                 begin
  7  2627                    tegn := '-';
  7  2628                    lpos := lpos - 1;
  7  2629                 end;
  6  2630              end;
  5  2631              <* syntaxfejl *>
  5  2632              param := if separator then 1 else 3;
  5  2633              sep := tegn;
  5  2634           end <* case 3 *>;
  4  2635     
  4  2635           <* case 4 - separator *>
  4  2636           begin
  5  2637              separator := true;
  5  2638              goto spc;
  5  2639           end <* case 4 *>;
  4  2640     
  4  2640        end <* case *>;
  3  2641     
  3  2641        lpos := lpos - 1;
  3  2642     slut: 
  3  2643        pos := lpos;
  3  2644     end;
  2  2645     \f

  2  2645     message procedure læs_param_sæt side 1 - 830310/cl;
  2  2646     
  2  2646     integer procedure læs_param_sæt(tekst,pos,ant,parm,term,res);
  2  2647       integer array             tekst,        parm;
  2  2648       integer                         pos,ant,     term,res;
  2  2649     
  2  2649     <* proceduren læser et sammenhørende sæt parametre
  2  2650        afsluttet med (sp),(nl),(;),(,) eller (nul)
  2  2651     
  2  2651        læs_param_sæt      returstatus eller 'typen' af det læste parametersæt
  2  2652        (retur,int)
  2  2653                          type ant  parm indeholder:
  2  2654                          <0:   x  (ingenting) 'læs_param_sæt= nr på fejlkvit.'
  2  2655                           0:   0  (ingenting) 'rest kommando er tom'
  2  2656                           1:   1  (tekst)  'indtil 11 tegn'
  2  2657                           2:   1  (pos.tal)
  2  2658                           3:   1  (neg.tal)
  2  2659                           4:   1  (pos.tal<1000)(bogstav) 'linienummer'
  2  2660                           5:   1  G(pos.tal<100) 'gruppe_ident'
  2  2661                           6:   2  (linie)/(løb) 'vogn_ident'
  2  2662                           7:   3  (bus)/(linie)/(løb)
  2  2663                           8:   3  (linie).(indeks):(løb)
  2  2664                           9:   2  (linie).(indeks)
  2  2665                          10:   2  (pos.tal).(pos.tal)
  2  2666                          11: 2-3  G(pos.tal<100):(vogn) '(vogn)::=(bus)!(linie)/(løb)'
  2  2667                          12:   3  D.(dato).(tid)
  2  2668     
  2  2668        tekst             indeholder teksten hvori parametersættet
  2  2669        (kald,int.arr.)   skal søges.
  2  2670     
  2  2670        pos
  2  2671        (kald/retur,int.)  position efter hvilken søgningen starter, og
  2  2672                           ved retur positionen for afsluttende tegn.
  2  2673                             (ikke ændret ved fejl)
  2  2674     
  2  2674        ant               hvis kaldeværdien er >0 skal parametersættet
  2  2675        (kald/retur,int)  indeholde det angivne antal enkeltparametre,
  2  2676                          i modsat fald returneres med fejltype -26
  2  2677                          (skilletegn) eller -25 (parameter mangler).
  2  2678                          ellers læses op til 3 enkeltparametre. retur-
  2  2679                          værdien afhænger af det læste parametersæts 
  2  2680                          type, se ovenfor under læs_param_sæt.
  2  2681     \f

  2  2681     message procedure læs_param_sæt side 2 - 810428/hko;
  2  2682     
  2  2682        parm              skal omfatte elementerne 1 til 4.
  2  2683        (retur,int.arr.)  ved returstatus<=0 indeholder alle elemen-
  2  2684                          terne værdien 0.
  2  2685     
  2  2685                          type (element,indhold)
  2  2686                            1: 1-4,teksten
  2  2687                          2-3: 1, talværdien
  2  2688                            4: 1, tal shift 5 +tegnværdi (A=1,B=2,--,Å=29)
  2  2689                            5: 1, talværdi (uden G)
  2  2690                            6: 1, (som'4') shift 7 + løb
  2  2691                            7: 1, bus
  2  2692                               2, linie/løb som '6'
  2  2693                            8: 1, tal shift 5 eller som '4'
  2  2694                               2, tekst (1-3 bogstaver)
  2  2695                               3, løb
  2  2696                            9: 1 og 2, som '8'
  2  2697                           10: 1, talværdi
  2  2698                               2, talværdi
  2  2699                           11: 1, som '5'
  2  2700                               2, vogn (bus eller linie/løb)
  2  2701                           12: 1, dato
  2  2702                               2, tid
  2  2703     
  2  2703        term              iso-tegnværdien for tegnet der afslutter
  2  2704        (retur,int)       parameter_sættet.
  2  2705     
  2  2705        res               som læs_param_sæt.
  2  2706        (retur,int)
  2  2707     
  2  2707     *>
  2  2708     \f

  2  2708     message procedure læs_param_sæt side 3 - 810310/hko;
  2  2709     
  2  2709       begin
  3  2710         integer max_ant;
  3  2711     
  3  2711         max_ant:= 3;
  3  2712     
  3  2712         begin
  4  2713           integer
  4  2714             i,j,k,              <* hjælpe variable *>
  4  2715             nr,                 <* nummer på parameter i sættet *>
  4  2716             apos,               <* aktuel tegnposition *>
  4  2717             cifre,             <* parametertype (param: 0=tekst, >1=tal) *>
  4  2718             sep;                <* afsluttende skilletegn ved param *>
  4  2719     
  4  2719           integer array field
  4  2720             iaf;                <* hjælpe variabel *>
  4  2721     
  4  2721           integer array
  4  2722             par(1:4*max_ant),   <* 4 elementer for hver aktuel parameter *>
  4  2723             s,                  <* 1 element med separator for hver parameter *>
  4  2724             t(1:max_ant),       <* 1 element med typen for hver parameter *>
  4  2725             værdi(1:4),         <* værdi af aktuel parameter jvf. param *>
  4  2726             spec(1:1);          <* specialtegn i navne jvf. param *>
  4  2727     
  4  2727     <*          de interne typer af enkeltparametre er
  4  2728     
  4  2728                 type  parameter
  4  2729     
  4  2729                   1:  1-3 tegn tekst (1 ord)
  4  2730                   2:  4-6 tegn       (2 ord)
  4  2731                   3:  7-9 tegn       (3 ord)
  4  2732                   4:10-11 tegn       (4 ord)
  4  2733                   5:  positivt heltal
  4  2734                   6:  negativt heltal
  4  2735                   7:  positivt heltal<1000 efterfulgt af stort bogstav
  4  2736                   8:  G efterfulgt af positivt heltal<100
  4  2737     
  4  2737     *>
  4  2738     \f

  4  2738     message procedure læs_param_sæt side 4 - 810408/hko;
  4  2739     
  4  2739           nr:= 0;
  4  2740           res:= -1;
  4  2741           spec(1):= 0; <* ingen specialtegn *>
  4  2742           apos:= pos;
  4  2743           for i:= 1 step 1 until 4 do parm(i):= 0;
  4  2744           for i:= 1 step 1 until max_ant do
  4  2745           begin
  5  2746             s(i):= t(i):= 0;
  5  2747             for j:= 1 step 1 until 4 do par((i-1)*4+j):= 0;
  5  2748           end;
  4  2749           repeat
  4  2750             <* skip foranstillede sp-tegn *>
  4  2751             for i:= param(tekst,apos,spec,0<*intet tabelopslag*>,cifre,værdi,sep)
  4  2752                 while i=1 and sep='sp' do;
  4  2753     <*+2*>    
  4  2754             begin
  5  2755               if testbit25 and testbit26 then
  5  2756               disable begin
  6  2757                 write(out,"nl",1,<:param (apos,cifre,sep):>,<< -dddd>,
  6  2758                       i,apos,cifre,sep);
  6  2759                 laf:=0;
  6  2760                 if cifre<>0 then
  6  2761                    write(out,<:  værdi(1-4)::>,
  6  2762                          << -dddd>,værdi(1),værdi(2),værdi(3),værdi(4))
  6  2763                 else write(out,<:  værdi::>,værdi.laf);
  6  2764                 ud;
  6  2765               end;
  5  2766             end;
  4  2767     <*-2*>
  4  2768             ;
  4  2769             if i<>0 then <* ikke ok *>
  4  2770             begin
  5  2771               if i=1 and (sep=',' or sep=';') then <* slut_tegn*>
  5  2772               begin
  6  2773                 apos:= apos -1;
  6  2774                 res:= 0;
  6  2775               end
  5  2776               else if i=1 then res:=-26 <* skilletegn *>
  5  2777               else <* i=5 *> res:= -25 <* parameter mangler *>
  5  2778             end
  4  2779             else <* i=0 *>
  4  2780             begin
  5  2781               if sep=',' or sep=';' then apos:=apos-1;
  5  2782               iaf:= nr*8;
  5  2783               nr:= nr +1;
  5  2784     \f

  5  2784     message procedure læs_param_sæt side 5 - 810520/hko/cl;
  5  2785     
  5  2785               if cifre=0 <* navne_parameter *> then
  5  2786               begin
  6  2787                 if værdi(2)=0
  6  2788                    and læstegn(værdi,1,i)='G'
  6  2789                    and læstegn(værdi,2,j)>'0' and j<='9'
  6  2790                    and (læstegn(værdi,3,k)=0 or (k>='0' and k<='9'))
  6  2791                 then
  6  2792                 begin <* gruppenavn, repræsenteres som tal *>
  7  2793                   t(nr):= 8;
  7  2794                   j:= j -'0';
  7  2795                   par.iaf(1):= if k=0 then j else (j*10+(k-'0'));
  7  2796                   s(nr):= sep;
  7  2797                 end
  6  2798                 else
  6  2799                 begin <* generel tekst *>
  7  2800                   i:= 0;
  7  2801                   for i:= i +1 while i<=4 do
  7  2802                   begin
  8  2803                     if værdi(i)<>0 then
  8  2804                     begin
  9  2805                       t(nr):= i;
  9  2806                       par.iaf(i):= værdi(i);
  9  2807                     end
  8  2808                     else i:= 4;
  8  2809                   end;
  7  2810                   s(nr):= sep;
  7  2811                 end <* generel tekst *>
  6  2812               end <* navne_parameter *>
  5  2813               else
  5  2814               begin <* talparameter *>
  6  2815                 i:= if værdi(1)<0 then 6 <* neg.tal *>
  6  2816                   else if værdi(1)>0 and værdi(1)<1000
  6  2817                           and sep>='A' and sep<='Å' then 7
  6  2818                   else 5 <* positivt tal *>;
  6  2819                 t(nr):= i;
  6  2820                 par.iaf(1):= if i<>7 then værdi(1)
  6  2821                              else værdi(1) shift 5 +(sep+1-'A');
  6  2822                 par.iaf(2):= cifre;
  6  2823                 apos:= apos+1;
  6  2824                 s(nr):= if i=7 then læstegn(tekst,apos,sep) else sep;
  6  2825                 apos:= apos-1;
  6  2826               end;
  5  2827             end;<* i=0 *>
  4  2828           until (ant>0 and nr=ant)
  4  2829                 or nr=max_ant
  4  2830                 or res<> -1
  4  2831                 or sep='sp' or sep=';' or sep='em'
  4  2832                 or sep=',' or sep='nl' or sep='nul';
  4  2833     \f

  4  2833     message procedure læs_param_sæt side 6 - 810508/hko;
  4  2834     
  4  2834           if ant>nr then res:= -25 <*parameter mangler*>
  4  2835           else
  4  2836           if nr=0 or t(1)=0 then
  4  2837           begin  <* ingen parameter før skilletegn *>
  5  2838             if res=-25 then res:= 0;
  5  2839           end
  4  2840           else if sep<>'sp' and sep<>'nl' and sep <> 'em'
  4  2841                   and sep<>';' and sep<>',' then
  4  2842           begin <* ulovligt afsluttende skilletegn *>
  5  2843             res:= -26;
  5  2844           end
  4  2845           else
  4  2846           begin <* en eller flere lovligt afsluttede parametre *>
  5  2847             if t(1)<5 and nr=1 then
  5  2848     
  5  2848     <* 1 navne_parameter *>
  5  2849     
  5  2849             begin
  6  2850               res:= 1;
  6  2851               tofrom(parm,par,8);
  6  2852             end
  5  2853             else if <*t(1)<9 and *> nr=1 then
  5  2854     
  5  2854     <* 1 parameter af anden type *>
  5  2855     
  5  2855             begin <*tal,linie eller gruppe *>
  6  2856               res:= t(1) -3;
  6  2857               parm(1):= par(1);
  6  2858             end
  5  2859             else if t(1)=5 <* pos.tal *> or t(1)=7 <*linie*> then
  5  2860     
  5  2860     <* mere end 1 parameter, hvoraf 1. er pos.tal eller linienr *>
  5  2861     
  5  2861             begin
  6  2862               i:= par(1); <* lovlige parametre er alle repræsenteret i et ord *>
  6  2863               j:= par(5); <* internt                                          *>
  6  2864               k:= par(9); <*                                                  *>
  6  2865               if nr=2 then
  6  2866               <* 2 parametre i sættet *>
  6  2867               begin
  7  2868                 res:= if (s(1)='/' or s(1)='.') and t(2)=5 <*pos.tal*> then 6
  7  2869                       else if s(1)='.' and t(2)=1 then 9
  7  2870                       else if s(1)='-' and t(1)=5 and t(2)=5 then 10
  7  2871                       else if s(1)<>'/' and s(1)<>'.'
  7  2872                                         and s(1)<>'-' then -26 <* skilletegn *>
  7  2873                       else -27;<* parametertype*>
  7  2874     \f

  7  2874     message procedure læs_param_sæt side 7 - 810501/hko;
  7  2875     
  7  2875     <* mere end 1 parameter, hvoraf 1. er pos.tal eller linienr *>
  7  2876     
  7  2876                 <* 2 parametre i sættet *>
  7  2877                 if res=6 then
  7  2878                 begin
  8  2879                   if (i<1 or i>999) and t(1)=5 then
  8  2880                     res:= -5 <* ulovligt linienr *>
  8  2881                   else if (j<1 or j>99) then
  8  2882                     res:= -6 <* ulovligt løbsnr *>
  8  2883                   else
  8  2884                   begin
  9  2885                     if t(1)=5 then i:= i shift 5;
  9  2886                     parm(1):= i shift 7 +j;
  9  2887                   end;
  8  2888                 end <* res=6 *>
  7  2889                 else if res=9 then
  7  2890                 begin
  8  2891                   if t(1)=5 and (i<1 or 999<i) then
  8  2892                     res:= -5 <*ulovligt linienr*>
  8  2893                   else
  8  2894                   begin
  9  2895                     if t(1)=5 then i:=i shift 5;
  9  2896                     parm(1):= i;
  9  2897                     parm(2):= j;
  9  2898                   end;
  8  2899                 end <* res=9 *>
  7  2900                 else if res=10 then
  7  2901                 begin
  8  2902                   begin
  9  2903                     parm(1):= i;
  9  2904                     parm(2):= j;
  9  2905                   end;
  8  2906                 end; <* res=10 *>
  7  2907               end <* nr=2 *>
  6  2908               else
  6  2909               if nr=3 then
  6  2910               <* 3 paramtre i sættet *>
  6  2911               begin
  7  2912                 res:= if (s(1)='/' or s(1)='.') and
  7  2913                          (s(2)='/' or s(2)='.') then 7
  7  2914                       else if s(1)='.' and s(2)=':' then 8
  7  2915                       else -26; <* skilletegn *>
  7  2916     \f

  7  2916     message procedure læs_param_sæt side 8 - 810501/hko;
  7  2917     
  7  2917     <* mere end 1 parameter, hvoraf 1. er pos.tal eller linienr *>
  7  2918                 <* 3 parametre i sættet *>
  7  2919                 if res=7 then
  7  2920                 begin
  8  2921                   if t(1)<>5 or (t(2)<>5 and t(2)<>7)
  8  2922                      or t(3)<>5 then
  8  2923                     res:= -27 <* parametertype *>
  8  2924                   else
  8  2925                   if i<1 or i>9999 then res:= -7 <* ulovligt busnr *>
  8  2926                   else if t(2)=5 and (j<1 or j>999) then res:=-5 <* linie *>
  8  2927                   else if k<1 or k>99 then res:= -6 <* løb *>
  8  2928                   else
  8  2929                   begin <* ok *>
  9  2930                     parm(1):= i;
  9  2931                     if t(2)=5 then j:= j shift 5;
  9  2932                     parm(2):= j shift 7 +k;
  9  2933                   end;
  8  2934                 end
  7  2935                 else if res=8 then
  7  2936                 begin
  8  2937                   if t(2)<>1 or t(3)<>5 then res:= -27
  8  2938                   else if t(1)=5 and (i<1 or i>999) then res:= -5
  8  2939                   else if k<1 or k>99 then res:= -6
  8  2940                   else
  8  2941                   begin
  9  2942                     if t(1)=5 then i:= i shift 5;
  9  2943                     parm(1):= i;
  9  2944                     parm(2):= j;
  9  2945                     parm(3):= k;
  9  2946                   end;
  8  2947                 end;
  7  2948               end <* nr=3 *>
  6  2949               else res:=-24; <* syntaks *>
  6  2950     \f

  6  2950     message procedure læs_param_sæt side 9 - 810428/hko;
  6  2951     
  6  2951             end <* mere end 1 parameter,hvoraf 1. er pos.tal eller linienr *>
  5  2952             else if t(1)=8 <* gruppe_id *> then
  5  2953             begin
  6  2954     <* mere end 1 parameter , hvoraf den første
  6  2955        er en gruppe_identifikation ved navn.
  6  2956        lovlige parametre er alle internt repræsenteret i et ord *>
  6  2957     
  6  2957               i:=par(1);
  6  2958               j:=par(5);
  6  2959               k:=par(9);
  6  2960     
  6  2960               if nr=2 then
  6  2961               <* 2 parametre *>
  6  2962               begin
  7  2963                 res:=if s(1)=':' and t(2)=5 then 11
  7  2964                      else if s(1)<>':' then -26 <* skilletegn *>
  7  2965                      else -27; <*param.type *>
  7  2966                 if res=11 then
  7  2967                 begin
  8  2968                   if j<1 or j>9999 then res:=-7 <* ulovligt busnr *>
  8  2969                   else
  8  2970                   begin
  9  2971                     parm(1):=i;
  9  2972                     parm(2):=j;
  9  2973                   end;
  8  2974                 end;
  7  2975     \f

  7  2975     message procedure læs_param_sæt side 10 - 810428/hko;
  7  2976     
  7  2976     <* mere end 1 parameter, hvoraf 1. er en gruppeidentifikation ved navn *>
  7  2977     
  7  2977               end <*nr=2*>
  6  2978               else if nr=3 then
  6  2979               <* 3 parametre *>
  6  2980               begin
  7  2981                 res:=if s(1)=':' and s(2)='/' then 11
  7  2982                      else -26; <* skilletegn *>
  7  2983                 if res=11 then
  7  2984                 begin
  8  2985                   if (t(2)<>5 and t(2)<>7) or t(3)<>5 then res:=-27 <*param.type*>
  8  2986                   else
  8  2987                   begin
  9  2988                     if t(2)=5 and (j<1 or j>999) then res:=-5 <* linie *>
  9  2989                     else
  9  2990                     begin
 10  2991                       parm(1):=i;
 10  2992                       if t(2)=5 then j:=j shift 5;
 10  2993                       parm(2):= 1 shift 22 +j shift 7 +k;
 10  2994                     end;
  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 11 - 810501/hko;
  6  3000     
  6  3000             end <* t(1)=8 *>
  5  3001             else if t(1)=1 and par(1)= 'D' shift 16 then
  5  3002             begin
  6  3003     <* mere end 1 parameter i sættet og 1. parameter er et 'D'.
  6  3004                  lovlige parametre er alle internt repræsenteret i et ord. *>
  6  3005               i:=par(1);
  6  3006               j:=par(5);
  6  3007               k:=par(9);
  6  3008     
  6  3008               if nr=3 then
  6  3009               begin
  7  3010                 res:=if s(1)='.' and s(2)='.' then 12
  7  3011                      else -26; <* skilletegn *>
  7  3012                 if res=12 then
  7  3013                 begin
  8  3014                   if t(2)<>5 or t(3)<>5 then res:=-27 <* param. type *>
  8  3015                   else
  8  3016                   begin
  9  3017                     integer år,md,dg,tt,mm,ss;
  9  3018                     real dato,tid;
  9  3019                     år:=j//10000;
  9  3020                     md:=(j//100) mod 100;
  9  3021                     dg:=j mod 100;
  9  3022                     cifre:= par(10);
  9  3023                     tt:=if cifre>4 then k//10000 else if cifre>2 then k//100
  9  3024                            else k;
  9  3025                     mm:=if cifre>4 then (k//100) mod 100
  9  3026                            else if cifre>2 then k mod 100 else 0;
  9  3027                     ss:=if cifre>4 then k mod 100 else 0;
  9  3028     \f

  9  3028     message procedure læs_param_sæt side 12 - 810501/hko;
  9  3029     
  9  3029                     dato:=systime(5,0.0,tid);
  9  3030                     if j=0 then dg:=round dato mod 100;
  9  3031                     if år=0 and md=0 then md:=(round dato//100) mod 100;
  9  3032                     if år=0 then år:=round dato//10000;
  9  3033                     if år>99 or md<1 or md>12 or tt>23 or mm>59 or ss>59 then
  9  3034                       res:=-24 <* syntaks *>
  9  3035                     else if dg<1 or dg > (case md of (
  9  3036                            31,(if år mod 4=0 then 29 else 28),31, 30,31,30,
  9  3037                            31,31,30, 31,30,31)) then res:=-24
  9  3038                     else
  9  3039                     begin
 10  3040                       parm(1):=år*10000+md*100+dg;
 10  3041                       parm(2):=tt*10000+mm*100+ss;
 10  3042                     end;
  9  3043                   end;
  8  3044     
  8  3044                 end; <* res=12 *>
  7  3045               end <* nr=3 *>
  6  3046               else res:=-24; <*syntaks*>
  6  3047             end <* t(1)=1 and par(1)='D' shift 16 *>
  5  3048     
  5  3048             else res:=-27;<*parametertype*>
  5  3049           end; <* en eller flere parametre *>
  4  3050     
  4  3050           læs_param_sæt:= res;
  4  3051           term:= sep;
  4  3052           if res>= 0 then pos:= apos;
  4  3053         end;
  3  3054       end læs_param_sæt;
  2  3055     \f

  2  3055     message procedure læs_kommando side 1 - 810428/hko;
  2  3056     
  2  3056     integer procedure læs_kommando(z,kilde,op_ref,pos,indeks,sep,slut_tegn);
  2  3057       value                           kilde;
  2  3058       zone                          z;
  2  3059       integer                         kilde,       pos,indeks,sep,slut_tegn;
  2  3060       integer array field                   op_ref;
  2  3061     
  2  3061     <* proceduren indlæser er kommmando fra en terminal (telex,
  2  3062        skærm eller skrivemaskine). ved indlæsning fra skærm eller
  2  3063        skrivemaskine inviteres først ved udskrivning af '>'-tegn.
  2  3064        for terminalers vedkommendeslettes linie 23 og 24 og 'cursor' positioneres til
  2  3065        23'ende linie inden invitation.
  2  3066     *>
  2  3067     \f

  2  3067     message procedure læs_kommando side 2 - 810428/hko;
  2  3068     
  2  3068     begin
  3  3069       integer
  3  3070         a_pos,
  3  3071         a_res,res,
  3  3072         i,j,k;
  3  3073       boolean
  3  3074         skip;
  3  3075     
  3  3075     <*V*>setposition(z,0,0);
  3  3076     
  3  3076       case kilde//100 of
  3  3077       begin
  4  3078         begin <* io *>
  5  3079           write(z,"nl",1,">",1);
  5  3080         end;
  4  3081     
  4  3081         begin <* operatør *>
  5  3082           cursor(z,24,1);
  5  3083           write(z,"esc" add 128,1,<:ÆK:>);
  5  3084           cursor(z,23,1);
  5  3085           write(z,"esc" add 128,1,<:ÆK:>);
  5  3086           outchar(z,'>');
  5  3087         end;
  4  3088     
  4  3088         begin <* garageterminal *> ;
  5  3089           outchar(z,'nl');
  5  3090         end
  4  3091       end;
  3  3092     
  3  3092     <*V*>setposition(z,0,0);
  3  3093     \f

  3  3093     message procedure læs_kommando side 3 - 810921/hko,cl;
  3  3094     
  3  3094         res:=0;
  3  3095         skip:= false;
  3  3096     <*V*>
  3  3097         k:=læs_store(z,i);
  3  3098     
  3  3098         apos:= 1;
  3  3099         while k<=6 <*klasse=bogstav*> do
  3  3100         begin
  4  3101           if a_pos<3 then skriv_tegn(d.op_ref.data,apos,i);
  4  3102     <*V*> k:= læs_store(z,i);
  4  3103         end;
  3  3104     
  3  3104         skip:= skip or i='?' or (a_pos=1 and (i=',' or i=';'));
  3  3105     
  3  3105         if i=',' and a_pos>1 then
  3  3106         begin
  4  3107           skrivtegn(d.op_ref.data,a_pos,i);
  4  3108           repeat
  4  3109       <*V*> k:= læs_store(z,i);
  4  3110             if a_pos=4 and k=6 then skriv_tegn(d.op_ref.data,a_pos,i);
  4  3111           until k>=7;
  4  3112         end;
  3  3113     
  3  3113         pos:=a_pos;
  3  3114         while k<8 do
  3  3115         begin
  4  3116           if a_pos< (att_op_længde//2*3-2) then
  4  3117             skriv_tegn(d.op_ref.data,a_pos,i);
  4  3118           skip:= skip or i='?';
  4  3119     <*V*> k:= læs_store(z,i);
  4  3120           pos:=pos+1;
  4  3121         end;
  3  3122     
  3  3122         skip:= skip or i='?' or i='esc';
  3  3123         slut_tegn:= i;
  3  3124         skrivtegn(d.op_ref.data,apos,'em');
  3  3125         afslut_text(d.op_ref.data,apos);
  3  3126     \f

  3  3126     message procedure læs_kommando side 4 - 820301/hko/cl;
  3  3127     
  3  3127       disable
  3  3128       begin
  4  3129         integer
  4  3130           i1,
  4  3131           nr,
  4  3132           partype,
  4  3133           cifre;
  4  3134         integer array
  4  3135           spec(1:1),
  4  3136           værdi(1:4);
  4  3137     
  4  3137     <*+2*>
  4  3138         if testbit25 and overvåget then
  4  3139         disable begin
  5  3140           real array field raf;
  5  3141           write(out,"nl",1,<:kommando læst::>);
  5  3142           laf:=data;
  5  3143           write(out,d.op_ref.laf,<:<'<'>sluttegn<'>'>=:>,<<d>,sluttegn,
  5  3144                     <: skip=:>,if skip then <:true:> else <:false:>);
  5  3145           ud;
  5  3146         end;
  4  3147     <*-2*>
  4  3148     
  4  3148         for i:=1 step 1 until 32 do ia(i):=0;
  4  3149     
  4  3149         if skip then
  4  3150         begin
  5  3151           res:=53; <*annulleret*>
  5  3152           pos:= -1;
  5  3153           goto slut_læskommando;
  5  3154         end;
  4  3155     \f

  4  3155     message procedure læs_kommando side 5 - 850820/cl;
  4  3156     
  4  3156         i:= kilde//100; <* hovedmodul *>
  4  3157         k:= kilde mod 100; <* løbenr *>
  4  3158     <*  if pos>79 then linieoverløb; *>
  4  3159         pos:=a_pos:=0;
  4  3160         spec(1):= ',' shift 16;
  4  3161     
  4  3161     <*+4*>
  4  3162         if k<1 or k>(case i of (1,max_antal_operatører,
  4  3163                                   max_antal_garageterminaler)) then
  4  3164         begin
  5  3165           fejlreaktion(3<*programfejl*>,kilde,<:ukendt kilde til kommando:>,1);
  5  3166           res:=31;
  5  3167         end
  4  3168         else
  4  3169     <*-4*>
  4  3170         if i>0 and i<4 then <* io, operatør eller garageterminal *>
  4  3171         begin
  5  3172           <* læs operationskode *>
  5  3173           j:=param(d.op_ref.data,apos,spec,tf_kommandotabel,cifre,værdi,sep);
  5  3174     
  5  3174           res:= if j=1 and sep='.' and i=2<*operatør*> then -1 <* skærmopdatering *>
  5  3175                 else if cifre>0 or j=1 or j=3 or j=5 then  24 <* syntaks *>
  5  3176                 else if j=2 then 4 <*ukendt kommando*>
  5  3177                 else if j=4 then 31 <*systemfejl: ukendt tabelfil*>
  5  3178                 else if sep<>'sp' and sep<>','
  5  3179                         and sep<>'nl' and sep<>';'
  5  3180                         and sep<>'nul' and sep<>'em' then 26
  5  3181                                                            <*skilletegn*>
  5  3182                 else if -, læsbit_i(værdi(4),i-1) then 4 
  5  3183     <*                  logand(extend 0 add værdi(4)
  5  3184                                extend 1 shift (case i of (0,k,8+k)))=0 then 4
  5  3185     *>                                                   <*ukendt kommando*>
  5  3186                 else 1;
  5  3187     \f

  5  3187     message procedure læs_kommando side 5a- 810409/hko;
  5  3188     
  5  3188     <*+2*>if testbit25 and overvåget then
  5  3189           begin
  6  3190             write(out,"nl",0,<:funk opslag: param,apos,cifre,sep,res::>,
  6  3191                   << -dddd>,j,apos,cifre,sep,res,
  6  3192                   <:   værdi(1-4)::>,værdi(1),værdi(2),værdi(3),værdi(4),
  6  3193                   "nl",0);
  6  3194             if j<>0 then skriv_op(out,op_ref);
  6  3195             ud;
  6  3196           end;
  5  3197     <*-2*>
  5  3198     
  5  3198           if res=31 then fejlreaktion(18<*tabelfil*>,j,
  5  3199                                       <:=res, filnr 1025, læskommando:>,0);
  5  3200     
  5  3200           if res=1 then <* operationskode ok *>
  5  3201           begin
  6  3202             if sep<>'sp' then apos:=apos-1;
  6  3203             d.op_ref.opkode:=værdi(1);
  6  3204             indeks:=værdi(2);
  6  3205             partype:= værdi(3);
  6  3206             nr:= 0;
  6  3207             pos:= apos;
  6  3208     \f

  6  3208     message procedure læs_kommando side 6 - 810409/hko;
  6  3209     
  6  3209             while res=1 do
  6  3210             begin
  7  3211               læs_param_sæt(d.op_ref.data,apos,0<*indtil 3 enkeltparametre*>,
  7  3212                             værdi,sep,a_res);
  7  3213               nr:= nr +1;
  7  3214               i1:= værdi(1);
  7  3215     <*+2*>  if testbit25 and overvåget then
  7  3216             begin
  8  3217               write(out,"nl",1,<:param sæt: apos,sep,ares::>,<< -dddddd>,
  8  3218                     apos,sep,ares,<:   værdi(1-4)::>,
  8  3219                     værdi(1),værdi(2),værdi(3),værdi(4),
  8  3220                     "nl",0);
  8  3221               ud;
  8  3222            end;
  7  3223     <*-2*>
  7  3224               case par_type of
  7  3225               begin
  8  3226     
  8  3226     <*1: (<ingenting>!<busnr> (<omr>)!<linienr>/<løbnr> (<omr>)) *>
  8  3227     
  8  3227                 begin
  9  3228                   if nr=1 then
  9  3229                   begin
 10  3230                     if a_res=0 then res:=2 <*godkendt*>
 10  3231                     else if a_res=2 and (i1<1 or i1>9999)
 10  3232                          then res:=7 <*busnr ulovligt*>
 10  3233                     else if a_res=2 or a_res=6 then
 10  3234                     begin
 11  3235                       ia(1):= if a_res=2 then i1
 11  3236                                          else 1 shift 22 +i1;
 11  3237                     end
 10  3238                     else res:= 27; <*parametertype*>
 10  3239                     if res<4 then pos:= apos;
 10  3240                   end <*nr=1*>
  9  3241                   else
  9  3242                   if nr=2 then
  9  3243                   begin
 10  3244                     if ares=0 then res:= 2 <*godkendt*>
 10  3245                     else if ares=1 then
 10  3246                     begin
 11  3247                       ia(2):= find_område(i1);
 11  3248                       if ia(2)=0 then res:= 17; <* kanal-nr ukendt *>
 11  3249                     end
 10  3250                     else res:= 27; <* syntaks, parametertype *>
 10  3251                   end
  9  3252                   else
  9  3253                   if ares=0 then res:= 2<*godkendt*> else res:= 24 <* syntaks *>;
  9  3254                 end;
  8  3255     \f

  8  3255     message procedure læs_kommando side 7 - 810226/hko;
  8  3256     
  8  3256     <*2: (<busnr> (<område>)!<linie>/<løbnr>) *>
  8  3257     
  8  3257                 begin
  9  3258                   if nr=1 then
  9  3259                   begin
 10  3260                     if a_res=0 then res:=25 <*parameter mangler*>
 10  3261                     else if a_res=2 and (i1<1 or i1>9999)
 10  3262                          then res:=7 <*busnr ulovligt*>
 10  3263                     else if a_res=2 or a_res=6 then
 10  3264                     begin
 11  3265                       ia(1):=if a_res=2 then i1
 11  3266                                         else 1 shift 22 +i1;
 11  3267                     end
 10  3268                     else res:= 27; <*parametertype*>
 10  3269                     if res<4 then pos:=a_pos;
 10  3270                   end
  9  3271                   else
  9  3272                   if nr=2 then
  9  3273                   begin
 10  3274                     if ares=0 then res:= 2 <*godkendt*> else
 10  3275                     if ares=1 and ia(1) shift (-21) = 0 then
 10  3276                     begin
 11  3277                       ia(2):= findområde(i1);
 11  3278                       if ia(2)=0 then res:= 56; <*område ukendt*>
 11  3279                     end
 10  3280                     else res:= 27;
 10  3281                     if res<4 then pos:= apos;
 10  3282                   end
  9  3283                   else
  9  3284                   if ares=0 then res:= 2 else res:= 24<*syntaks*>;
  9  3285                 end;
  8  3286     \f

  8  3286     message procedure læs_kommando side 8 - 810223/hko;
  8  3287     
  8  3287     <*3: (<linie>!G<nr>) *>
  8  3288     
  8  3288                 begin
  9  3289                   if nr=1 then
  9  3290                   begin
 10  3291                     if a_res=0 then res:=25 <*parameter mangler*>
 10  3292                     else if a_res=2 and (i1<1 or i1>999) then res:=5
 10  3293                                                         <*linienr ulovligt*>
 10  3294                     else if a_res=2 or a_res=4 or a_res=5 then
 10  3295                     begin
 11  3296                       ia(1):=
 11  3297                         if a_res=2 then      4 shift 21 +i1 shift 5
 11  3298                         else if a_res=4 then 4 shift 21 +i1
 11  3299                         else <* a_res=5 *>   5 shift 21 +i1;
 11  3300                     end
 10  3301                     else res:=27; <* parametertype *>
 10  3302                     if res<4 then pos:= a_pos;
 10  3303                   end
  9  3304                   else
  9  3305                   res:= if nr=2 and a_res<>0 then 24<*syntaks*>
  9  3306                                              else 2;<*godkendt*>
  9  3307                 end;
  8  3308     
  8  3308     <*4:  <ingenting> *>
  8  3309     
  8  3309                 begin
  9  3310                   res:= if a_res<>0 then 24<*syntaks*>
  9  3311                                     else 2;<*godkendt*>
  9  3312                 end;
  8  3313     \f

  8  3313     message procedure læs_kommando side 9 - 810226/hko;
  8  3314     
  8  3314     <*5: (<kanalnr>) *>
  8  3315     
  8  3315                 begin
  9  3316                   long field lf;
  9  3317     
  9  3317                   if nr=1 then
  9  3318                   begin
 10  3319                     if a_res=0 then res:= 25
 10  3320                     else if a_res<>1 then res:=27<*parametertype*>
 10  3321                     else
 10  3322                     begin
 11  3323                       j:= 0; lf:= 4;
 11  3324                       for i:= 1 step 1 until max_antal_kanaler do
 11  3325                         if kanal_navn(i)=værdi.lf then j:= i;
 11  3326                       if j<>0 then
 11  3327                       begin
 12  3328                         ia(1):= 3 shift 22 + j;
 12  3329                         res:= 2;
 12  3330                       end
 11  3331                       else
 11  3332                         res:= 17; <* kanal ukendt *>
 11  3333                     end;
 10  3334                     if res<4 then pos:= a_pos;
 10  3335                   end
  9  3336                   else
  9  3337                   res:=if nr=2 and a_res<>0 then 24<*syntaks*>
  9  3338                                             else 2;<*godkendt*>
  9  3339                 end;
  8  3340     \f

  8  3340     message procedure læs_kommando side 10 - 810415/hko;
  8  3341     
  8  3341     <*6:  <busnr>/<linie>/<løb> (<område>) *>
  8  3342     
  8  3342                 begin
  9  3343                   if nr=1 then
  9  3344                   begin
 10  3345                     if a_res=0 then res:=25<*parameter mangler*>
 10  3346                     else if a_res=7 then
 10  3347                     begin
 11  3348                       ia(1):= i1;
 11  3349                       ia(2):= 1 shift 22 + værdi(2);
 11  3350                     end
 10  3351                     else res:=27;<*parametertype*>
 10  3352                     if res<4 then pos:= apos;
 10  3353                   end
  9  3354                   else
  9  3355                   if nr=2 then
  9  3356                   begin
 10  3357                     if ares=0 then res:= 2 <*godkendt*> else
 10  3358                     if ares=1 then
 10  3359                     begin
 11  3360                       ia(3):= findområde(i1);
 11  3361                       if ia(3)=0 then res:= 56; <* område ukendt *>
 11  3362                     end
 10  3363                     else res:= 27; <*parametertype*>
 10  3364                     if res<4 then pos:= apos;
 10  3365                   end
  9  3366                   else
  9  3367                   if ares=0 then res:= 2 else res:= 24;
  9  3368                 end;
  8  3369     \f

  8  3369     message procedure læs_kommando side 11 - 810512/hko/cl;
  8  3370     
  8  3370     
  8  3370     <*                                                 att_op_længde//2-2 *>
  8  3371     <*7:  <linienr>.<indeks>:<løbnr> (<interval>.<løb>)                   *>
  8  3372     <*                                                  1                 *>
  8  3373     
  8  3373                 begin
  9  3374                   if nr=1 then
  9  3375                   begin
 10  3376                     if a_res=0 then res:=25 <*parameter mangler*>
 10  3377                     else if a_res=8 then
 10  3378                     begin
 11  3379                       ia(1):= 4 shift 21 + i1;
 11  3380                       ia(2):= værdi(2);
 11  3381                       ia(3):= værdi(3);
 11  3382                       indeks:= 3;
 11  3383                     end
 10  3384                     else res:=27;<*parametertype*>
 10  3385                   end
  9  3386                   else if nr<=att_op_længde//2-2 then
  9  3387                   begin
 10  3388                     if a_res=0 and (sep=',' or nr>2) then res:=2<*godkendt*>
 10  3389                     else if a_res=0 then res:=25 <* parameter mangler *>
 10  3390                     else if a_res=10 then
 10  3391                     begin
 11  3392                       if i1>0 and i1<100 and værdi(2)>0 and værdi(2)<100 then
 11  3393                       begin
 12  3394                         ia(nr+2):= i1 shift 12 + værdi(2);
 12  3395                         indeks:= nr +2;
 12  3396                       end
 11  3397                       else if i1<1 or i1>99 then res:=44 <*intervalstr. ulovlig*>
 11  3398                       else res:=6; <*løb-nr ulovligt*>
 11  3399                     end
 10  3400                     else res:=27;<*parametertype*>
 10  3401                   end
  9  3402                   else
  9  3403                     res:= if a_res=0 then 2 else 24;<* syntaks *>
  9  3404                   if res<4 then pos:=a_pos;
  9  3405                 end;
  8  3406     \f

  8  3406     message procedure læs_kommando side 12 - 810306/hko;
  8  3407     
  8  3407     <*8: (<operatør>!<radiokanal>!<garageterminal>) *>
  8  3408     
  8  3408                 begin
  9  3409                   if nr=1 then
  9  3410                   begin
 10  3411                     if a_res=0 then res:=25 <* parameter mangler *>
 10  3412                     else if a_res=2 then
 10  3413                     begin
 11  3414                       j:=d.op_ref.opkode;
 11  3415                       ia(1):=i1;
 11  3416                       k:=(j+1)//2;
 11  3417                       if k<1 or k=3 or k>4 then
 11  3418                         fejlreaktion(3<*programfejl*>,j,<:opkode, partype=8:>,1)
 11  3419                       else
 11  3420                       begin
 12  3421                         if k=4 then k:=3;
 12  3422                         if i1<1 or i1> (case k of
 12  3423                           (max_antal_operatører,max_antal_radiokanaler,
 12  3424                            max_antal_garageterminaler))
 12  3425                         then res:=case k of (28,29,17);
 12  3426                       end;
 11  3427                     end
 10  3428                     else if a_res=1 and (d.op_ref.opkode+1)//2=1 then
 10  3429                     begin
 11  3430                       laf:= 0;
 11  3431                       ia(1):= find_bpl(værdi.laf(1));
 11  3432                       if ia(1)<1 or ia(1)>max_antal_operatører then res:=28;
 11  3433                     end
 10  3434                     else res:=27; <*parametertype*>
 10  3435                   end
  9  3436                   else
  9  3437                   if nr=2 and d.opref.opkode=1 then
  9  3438                   begin
 10  3439                     <* åbningstilstand for operatørplads *>
 10  3440                     if a_res=0 then res:= 2 <*godkendt*>
 10  3441                     else if a_res<>1 then res:= 27 <*parametertype*>
 10  3442                     else begin
 11  3443                       res:= 2<*godkendt*>;
 11  3444                       j:= værdi(1) shift (-16);
 11  3445                       if j='S' then ia(2):= 3 else
 11  3446                       if j<>'Å' then res:= 24; <*syntaks*>
 11  3447                     end;
 10  3448                   end
  9  3449                   else 
  9  3450                   begin
 10  3451                     res:=if a_res=0 then  2 <* godkendt *>
 10  3452                                     else 24;<* syntaks *>
 10  3453                   end;
  9  3454                   if res<4 then pos:=a_pos;
  9  3455                 end; <* partype 8 *>
  8  3456     \f

  8  3456     message procedure læs_kommando side 13 - 810306/hko;
  8  3457     
  8  3457     
  8  3457     <*                              att_op_længde//2 *>
  8  3458     <*9:  <operatør>((+!-)<linienr>)                 *>
  8  3459     <*                              1                *>
  8  3460     
  8  3460                 begin
  9  3461                   if nr=1 then
  9  3462                   begin
 10  3463                     if a_res=0 then res:=25 <* parameter mangler *>
 10  3464                     else if a_res=2 then
 10  3465                     begin
 11  3466                       ia(1):=i1;
 11  3467                       if i1<1 or i1>max_antal_operatører then res:=28;
 11  3468                     end
 10  3469                     else if a_res=1 then
 10  3470                     begin
 11  3471                       laf:= 0;
 11  3472                       ia(1):= find_bpl(værdi.laf(1));
 11  3473                       if ia(1)<1 or ia(1)>max_antal_operatører then res:=28;
 11  3474                     end
 10  3475                     else res:=27; <* parametertype *>
 10  3476                   end
  9  3477                   else if nr<=att_op_længde//2 then
  9  3478                   begin <* nr>1 *>
 10  3479                     if a_res=0 then res:=(if nr>2 then 2 else 25)
 10  3480                     else if a_res=2 or a_res=3 then
 10  3481                     begin
 11  3482                       ia(nr):=i1; indeks:= nr;
 11  3483                       if i1=0 or abs(i1)>999 then res:=5;
 11  3484                     end
 10  3485                     else res:=27; <* parametertype *>
 10  3486                     if res<4 then pos:=a_pos;
 10  3487                   end
  9  3488                   else
  9  3489                     res:=if a_res<>0 then 24 <* syntaks (for mange parametre) *>
  9  3490                                      else 2;
  9  3491                 end; <* partype 9 *>
  8  3492     \f

  8  3492     message procedure læs_kommando side 14 - 810428/hko;
  8  3493     
  8  3493     <*         2 *>
  8  3494     <*10: (bus)  *>
  8  3495     <*         1 *>
  8  3496     
  8  3496                 begin
  9  3497                   if a_res=0 and nr=1 then res:=25 <* parameter mangler *>
  9  3498                   else if a_res<>0 and nr>2 then res:=24 <* syntaks (for mange) *>
  9  3499                   else if a_res=0 then res:=2 <* godkendt *>
  9  3500                   else if a_res<>2 then res:=27 <* parametertype *>
  9  3501                   else if i1<1 or i1>9999 then res:=7 <*ulovligt busnr *>
  9  3502                   else
  9  3503                     ia(nr):=i1;
  9  3504                 end;
  8  3505     
  8  3505     <*             5 *>
  8  3506     <*11: (<linie>)  *>
  8  3507     <*             1 *>
  8  3508     
  8  3508                 begin
  9  3509                   if a_res=0 and nr=1 then res:=25
  9  3510                   else if a_res<>0 and nr>5 then res:=24
  9  3511                   else if a_res=0 then res:=2
  9  3512                   else if a_res<>2 and a_res<>4 then res:=27
  9  3513                   else if a_res=2 and (i1<1 or i1>999) then res:=5 <* ulovl.linie *>
  9  3514                   else
  9  3515                     ia(nr):=
  9  3516                       (if a_res=4 then i1 else i1 shift 5) + 4 shift 21;
  9  3517                 end;
  8  3518     \f

  8  3518     message procedure læs_kommando side 15 - 810306/hko;
  8  3519     
  8  3519     <*12: (<ingenting>!<navn>) *>
  8  3520     
  8  3520                 begin
  9  3521                   if nr=1 then
  9  3522                   begin
 10  3523                     if a_res=0 then res:=2 <*godkendt*>
 10  3524                     else if a_res=1 then
 10  3525                       tofrom(ia,værdi,8)
 10  3526                     else res:=27; <* parametertype *>
 10  3527                   end
  9  3528                   else
  9  3529                     res:=if a_res<>0 then 24 <* syntaks (for mange) *>
  9  3530                                      else  2;
  9  3531                 end; <* partype 12 *>
  8  3532     \f

  8  3532     message procedure læs_kommando side 16 - 810512/hko/cl;
  8  3533     
  8  3533     <*                                                         15 *>
  8  3534     <*13: G<grp.nr>:(<bus>!<linie>/<løb>) (<bus>!<linie>/<løb>)   *>
  8  3535     <*                                                         1  *>
  8  3536     
  8  3536                 begin
  9  3537                   if nr=1 then
  9  3538                   begin
 10  3539                     if a_res=0 then res:=25 <* parameter mangler *>
 10  3540                     else
 10  3541                     if a_res=11 then
 10  3542                     begin
 11  3543                       ia(1):= 5 shift 21 + i1;
 11  3544                       ia(2):=værdi(2);
 11  3545                       indeks:= 2;
 11  3546                     end
 10  3547                     else res:=27; <* parametertype *>
 10  3548                   end
  9  3549                   else if nr<= att_op_længde//2-1 then
  9  3550                   begin
 10  3551                     if a_res=0 and(sep=',' or nr>2)then res:=2 <* godkendt *>
 10  3552                     else if a_res=0 then res:=25 <* parameter mangler *>
 10  3553                     else if ares=2 and (i1<1 or i1>9999) then
 10  3554                             res:= 7 <*busnr ulovligt*>
 10  3555                     else if a_res=2 or a_res=6 then
 10  3556                     begin
 11  3557                       ia(nr+1):=i1+ (if a_res=6 then 1 shift 22 else 0);
 11  3558                       indeks:= nr+1;
 11  3559                     end
 10  3560                     else res:=27; <* parametertype *>
 10  3561                   end
  9  3562                   else
  9  3563                     res:=if a_res=0 then  2 <*godkendt *>
  9  3564                                     else 24;<* syntaks *>
  9  3565                   if res<4 then pos:=a_pos;
  9  3566                 end; <* partype 13 *>
  8  3567     \f

  8  3567     message procedure læs_kommando side 17 - 810311/hko;
  8  3568     
  8  3568     <*14: <linie>.<indeks> *>
  8  3569     
  8  3569                 begin
  9  3570                   if nr=1 then
  9  3571                   begin
 10  3572                     if a_res=0 then res:=25 <* parameter mangler *>
 10  3573                     else if a_res=9 then
 10  3574                     begin
 11  3575                       ia(1):= 1 shift 23 +i1;
 11  3576                       ia(2):= værdi(2);
 11  3577                     end
 10  3578                     else res:=27; <* parametertype *>
 10  3579                   end
  9  3580                   else <* nr>1 *>
  9  3581                     res:= if a_res=0 then  2 <* godkendt *>
  9  3582                                      else 24;<* syntaks *>
  9  3583                 end; <* partype 14 *>
  8  3584     \f

  8  3584     message procedure læs_kommando side 18 - 810313/hko;
  8  3585     
  8  3585     <*15: <linie>.<indeks> <bus> *>
  8  3586     
  8  3586                 begin
  9  3587                   if nr=1 then
  9  3588                   begin
 10  3589                     if a_res=0 then res:= 25 <* parameter mangler *>
 10  3590                     else if a_res=9 then
 10  3591                     begin
 11  3592                       ia(1):= 1 shift 23 +i1;
 11  3593                       ia(2):= værdi(2);
 11  3594                     end
 10  3595                     else res:=27; <* parametertype *>
 10  3596                   end
  9  3597                   else if nr=2 then
  9  3598                   begin
 10  3599                     if a_res=0 then res:=25
 10  3600                     else if a_res=2 then
 10  3601                     begin
 11  3602                       if i1<1 or i1>9999 then res:=7 <* ulovligt busnr *>
 11  3603                       else ia(3):= i1;
 11  3604                     end
 10  3605                     else res:=27; <*parametertype *>
 10  3606                   end
  9  3607                   else
  9  3608                     res:=if a_res=0 then  2 <* godkendt *>
  9  3609                                     else 24;<* syntaks *>
  9  3610                   if res<4 then pos:=a_pos;
  9  3611                 end; <* partype 15 *>
  8  3612     \f

  8  3612     message procedure læs_kommando side 19 - 810311/hko;
  8  3613     
  8  3613     <*16: (<ingenting>!D.<dato>.<klokkeslet> *>
  8  3614     
  8  3614                 begin
  9  3615                   if nr=1 then
  9  3616                   begin
 10  3617                     if a_res=0 then res:=2 <* godkendt *>
 10  3618                     else if a_res=12 then
 10  3619                     begin
 11  3620                       raf:=0;
 11  3621                       ia.raf(1):= systid(i1,værdi(2));
 11  3622                     end
 10  3623                     else res:=27; <* parametertype *>
 10  3624                   end
  9  3625                   else
  9  3626                     res:= if a_res=0 then  2 <* godkendt *>
  9  3627                                      else 24;<* syntaks *>
  9  3628                   if res<4 then pos:=a_pos;
  9  3629                 end; <* partype 16 *>
  8  3630     \f

  8  3630     message procedure læs_kommando side 20 - 810511/hko;
  8  3631     
  8  3631     <*17: G<grp.nr> *>
  8  3632     
  8  3632                 begin
  9  3633                   if nr=1 then
  9  3634                   begin
 10  3635                     if a_res=0 then res:=25 <*parameter mangler *>
 10  3636                     else if a_res=5 then
 10  3637                     begin
 11  3638                       ia(1):= 5 shift 21 +i1;
 11  3639                     end
 10  3640                     else res:=27; <* parametertype *>
 10  3641                   end
  9  3642                   else
  9  3643                     res:= if a_res=0 then  2 <* godkendt *>
  9  3644                                      else 24;<* syntaks *>
  9  3645                 end; <* partype 17 *>
  8  3646     
  8  3646     <*               att_op_længde//2 *>
  8  3647     <*18: (<heltal>)                  *>
  8  3648     <*               1                *>
  8  3649     
  8  3649                 begin
  9  3650                   if nr=1 and a_res=0 then res:= 25 <*parameter mangler*>
  9  3651                   else
  9  3652                   if nr<=att_op_længde//2 then
  9  3653                   begin
 10  3654                     if a_res=2 or a_res=3 <* pos/neg heltal *> then
 10  3655                     begin
 11  3656                       ia(nr):= i1; indeks:= nr;
 11  3657                     end
 10  3658                     else if a_res=0 then res:= 2
 10  3659                     else res:= 27; <*parametertype*>
 10  3660                   end
  9  3661                   else
  9  3662                   res:= if a_res=0 then 2 else 24;<*syntaks (for mange)*>
  9  3663                 end;
  8  3664     \f

  8  3664     message procedure læs_kommando side 21 - 820302/cl;
  8  3665     
  8  3665     <*19: <linie>/<løb>  <linie>/<løb> *>
  8  3666     
  8  3666                 begin
  9  3667                   if nr<3 and a_res=0 then res:= 25 <*parameter mangler*>
  9  3668                   else if nr<3 and a_res<>6 then res:= 27 <*parametertype*>
  9  3669                   else if nr<3 then
  9  3670                   begin
 10  3671                     ia(nr):=i1 + 1 shift 22;
 10  3672                   end
  9  3673                   else
  9  3674                     res:= if a_res=0 then 2 <*godkendt*>
  9  3675                                     else 24;<*syntaks (for mange)*>
  9  3676                   if res<4 then pos:= a_pos;
  9  3677                 end; <* partype 19 *>
  8  3678     
  8  3678     <*20: <busnr> <kortnavn> *>
  8  3679                 begin
  9  3680                   if nr=1 then
  9  3681                   begin
 10  3682                     if ares=0 then res:= 25 else
 10  3683                     if ares=2 and (i1<1 or 9999<i1) then res:= 24 else
 10  3684                     if ares<>2 then res:= 27 else ia(1):= i1;
 10  3685                   end
  9  3686                   else
  9  3687                   if nr=2 then
  9  3688                   begin
 10  3689                     if ares=1 and værdi(2) extract 8 = 0 then
 10  3690                     begin
 11  3691                       ia(2):= værdi(1); ia(3):= værdi(2);
 11  3692                     end
 10  3693                     else res:= if ares=0 then 25 else if ares=1 then 62 else 27;
 10  3694                   end
  9  3695                   else
  9  3696                   if ares=0 then res:= 2 else res:= 24;
  9  3697                 end; <* partype 20 *>
  8  3698     \f

  8  3698     message procedure læs_kommando side 22 - 851001/cl;
  8  3699     
  8  3699     <*                2                                     *>
  8  3700     <*21:  ( <linie> )    (<garage> ! OMR (ALL ! <område>)) *>
  8  3701     <*                0                                     *>
  8  3702     
  8  3702                 begin
  9  3703                   laf:= 0;
  9  3704                   if nr=1 and a_res=0 then res:= 25 <*parameter mangler*>
  9  3705                   else if a_res=0 and (ia(3)=-2 or ia(3)=0) then res:= 25
  9  3706                   else if a_res<>0 and nr>4 then res:= 24 <*syntaks (for mange)*>
  9  3707                   else if a_res=0 then res:= 2 <*godkendt*>
  9  3708                   else if a_res=2 and (i1<1 or i1>999) then res:= 5 <*ulovligt*>
  9  3709                   else if (a_res=2 or a_res=4) and nr<=2 then
  9  3710                   begin
 10  3711                     if ia(3)<>0 then res:= 27 else
 10  3712                     ia(nr):= (4 shift 21) + (if a_res=2 then i1 shift 5 else i1);
 10  3713                   end
  9  3714                   else
  9  3715                   if ares=1 then
  9  3716                   begin
 10  3717                     if nr=1 then
 10  3718                     begin
 11  3719                       ia(1):= (4 shift 21) + (1 shift 5);
 11  3720                       ia(2):= (4 shift 21) + (999 shift 5);
 11  3721                     end;
 10  3722                     if ia(3)=-2 then
 10  3723                     begin
 11  3724                       if i1=long<:ALL:> shift (-24) extract 24 then
 11  3725                         ia(3):= -1
 11  3726                       else
 11  3727                       begin
 12  3728                         ia(3):= findområde(i1);
 12  3729                         if ia(3)=0 then res:= 56 else
 12  3730                         ia(3):= 14 shift 20 + ia(3);
 12  3731                       end;
 11  3732                     end
 10  3733                     else
 10  3734                     if ia(3) = 0 then
 10  3735                     begin
 11  3736                       if i1 = long<:OMR:> shift (-24) extract (24) then 
 11  3737                         ia(3):= -2
 11  3738                       else
 11  3739                         ia(3):= find_bpl(værdi.laf(1));
 11  3740                       if ia(3)=0 then res:= 55;
 11  3741                     end
 10  3742                     else res:= 24;
 10  3743                   end
  9  3744                   else res:= 27; <*parametertype*>
  9  3745                   if res<4 then pos:= apos;
  9  3746                 end;
  8  3747     
  8  3747     <*22: (<busnr> (<område) ! <linie>/<løb> (<område>) ) *>
  8  3748     
  8  3748                 begin
  9  3749                   if nr=1 then
  9  3750                   begin
 10  3751                     if ares=0 then res:= 25 <*parameter mangler*>
 10  3752                     else if ares=2 and (i1<1 or i1>9999) 
 10  3753                          then res:= 7 <* busnr ulovligt *>
 10  3754                     else if ares=2 or ares=6 then
 10  3755                     begin
 11  3756                       ia(1):= if ares=2 then i1 else 1 shift 22 + i1;
 11  3757                     end
 10  3758                     else res:= 27 <* parametertype *>
 10  3759                   end
  9  3760                   else
  9  3761                   if nr=2 then
  9  3762                   begin
 10  3763                     if ares=0 then res:= 2 <* godkendt *>
 10  3764                     else if ares=1 then
 10  3765                     begin
 11  3766                       ia(2):= findområde(i1);
 11  3767                       if ia(2)=0 then res:= 17 <*kanal ukendt*>
 11  3768                     end
 10  3769                     else
 10  3770                       res:= 27; <* parametertype *>
 10  3771                   end
  9  3772                   else if ares=0 then res:= 2 <*godkendt*>
  9  3773                                  else res:= 24; <*syntaks*>
  9  3774                   if res < 4 then pos:= apos;
  9  3775                 end;
  8  3776     
  8  3776     <*23: ( <linie> (<område>) ! G<nr> (<område>) ) *>
  8  3777     
  8  3777                 begin
  9  3778                   if nr=1 then
  9  3779                   begin
 10  3780                     if ares=0 then res:= 25 else
 10  3781                     if ares=2 and (i1<1 or i1>999) then res:= 5 else
 10  3782                     if ares=2 or ares=4 or ares=5 then
 10  3783                     begin
 11  3784                       ia(1):=
 11  3785                         if ares=2 then 4 shift 21 + i1 shift 5 else
 11  3786                         if ares=4 then 4 shift 21 + i1         else
 11  3787                                        5 shift 21 + i1;
 11  3788                     end
 10  3789                     else res:= 27;
 10  3790                     if res < 4 then pos:= apos;
 10  3791                   end
  9  3792                   else
  9  3793                   if nr=2 then
  9  3794                   begin
 10  3795                     if ares=0 then res:= 2 else
 10  3796                     if ares=1 then
 10  3797                     begin
 11  3798                       ia(2):= findområde(i1);
 11  3799                       if ia(2)=0 then res:= 17;
 11  3800                     end
 10  3801                     else res:= 27;
 10  3802                   end
  9  3803                   else
  9  3804                   if ares=0 then res:= 2 else res:= 24;
  9  3805                 end;
  8  3806     
  8  3806     <*24: ( <ingenting> ! <område> ! * ) *>
  8  3807     
  8  3807                 begin
  9  3808                   if nr=1 then
  9  3809                   begin
 10  3810                     if ares=0 then res:= 2 else
 10  3811                     if ares=1 then
 10  3812                     begin
 11  3813                       if i1=long<:ALL:> shift (-24) extract 24 then
 11  3814                         ia(1):= (-1) shift (-3) shift 3
 11  3815                       else
 11  3816                       begin
 12  3817                         k:= findområde(i1);
 12  3818                         if k=0 then res:= 17 else
 12  3819                            ia(1):= 14 shift 20 + k;
 12  3820                       end;
 11  3821                     end
 10  3822                     else res:= 27;
 10  3823                   end
  9  3824                   else
  9  3825                   if ares=0 then res:= 2 else res:= 24;
  9  3826                   if res < 4 then pos:= apos;
  9  3827                 end;
  8  3828     
  8  3828     <*25: <område> *>
  8  3829     
  8  3829                 begin
  9  3830                   if nr=1 then
  9  3831                   begin
 10  3832                     if ares=0 then res:= 25 else
 10  3833                     if ares=1 then
 10  3834                     begin
 11  3835                       if i1 = '*' shift 16 then ia(1):= -1 else
 11  3836                          ia(1):= findområde(i1);
 11  3837                       if ia(1)=0 then res:= 17;
 11  3838                     end
 10  3839                     else res:= 27;
 10  3840                   end
  9  3841                   else
  9  3842                   if ares=0 then res:= 2 else res:= 24;
  9  3843                   if res < 4 then pos:= apos;
  9  3844                 end;
  8  3845     
  8  3845     <*26: <busnr> *>
  8  3846                 begin
  9  3847                   if nr=1 then
  9  3848                   begin
 10  3849                     if ares=0 then res:= 25 else
 10  3850                     if ares=2 and (i1<1 or 9999<i1) then res:= 24 else
 10  3851                     if ares<>2 then res:= 27 else ia(1):= i1;
 10  3852                   end
  9  3853                   else
  9  3854                   if ares=0 then res:= 2 else res:= 24;
  9  3855                 end;
  8  3856     
  8  3856     <*                           8 *>
  8  3857     <*27: <operatørnr> (<område>)  *>
  8  3858     <*                           1 *>
  8  3859                 begin
  9  3860                   if nr < 3 and a_res=0 then res:= 25 <*parameter mangler*>
  9  3861                   else if nr=1 then
  9  3862                   begin
 10  3863                     if a_res=2 then
 10  3864                     begin
 11  3865                       ia(1):= i1;
 11  3866                       if i1 < 0 or max_antal_operatører < i1 then res:= 28;
 11  3867                     end
 10  3868                     else if a_res=1 then
 10  3869                     begin
 11  3870                       laf:= 0;
 11  3871                       ia(1):= find_bpl(værdi.laf(1));
 11  3872                       if ia(1)<1 or ia(1)>max_antal_operatører then res:=28;
 11  3873                     end
 10  3874                     else res:= 27; <*parametertype*>
 10  3875                   end
  9  3876                   else
  9  3877                   begin
 10  3878                     if a_res=0 then res:= (if nr > 2 then 2 else 25)
 10  3879                     else if nr > 9 then res:= 24
 10  3880                     else if a_res=1 then
 10  3881                     begin
 11  3882                       ia(nr):= find_område(i1);
 11  3883                       indeks:= nr;
 11  3884                       if ia(nr)=0 then res:= 56;
 11  3885                     end
 10  3886                     else res:= 27;
 10  3887                   end;
  9  3888                   if res < 4 then pos:= a_pos;
  9  3889                 end <* partype 27 *>;
  8  3890     
  8  3890     <*28: (<ingenting>!<kanalnr>) *>
  8  3891                 begin
  9  3892                   long field lf;
  9  3893     
  9  3893                   if nr=1 then
  9  3894                   begin
 10  3895                     if ares=0 then res:= 2 else
 10  3896                     if ares=1 then
 10  3897                     begin
 11  3898                       j:= 0; lf:= 4;
 11  3899                       for i:= 1 step 1 until max_antal_kanaler do
 11  3900                         if kanal_navn(i)=værdi.lf then j:= i;
 11  3901                       if j<>0 then
 11  3902                       begin
 12  3903                         ia(1):= 3 shift 22 + j;
 12  3904                         res:= 2;
 12  3905                       end
 11  3906                       else
 11  3907                         res:= 17; <*kanal ukendt*>
 11  3908                     end
 10  3909                     else
 10  3910                       res:= 27; <*parametertype*>
 10  3911                     if res < 4 then pos:= apos;
 10  3912                   end
  9  3913                   else
  9  3914                     res:= if nr=2 and ares<>0 then 24 <*syntaks*> else 2 <*ok*>;
  9  3915                 end;
  8  3916     
  8  3916     <*                                    n  *>
  8  3917     <*29:  <btj.pl.navn> ( <operatørnavn>)   *>
  8  3918     <*                                    0  *>
  8  3919                 begin
  9  3920                   laf:= 0;
  9  3921                   if nr=1 then
  9  3922                   begin
 10  3923                     if a_res=0 then res:= 25 <*parameter mangler*>
 10  3924                     else if a_res<>1 or værdi(2) extract 8 <>0 then res:= 27
 10  3925                     else begin
 11  3926                       indeks:= 2;
 11  3927                       ia(1):= værdi(1); ia(2):= værdi(2);
 11  3928                       j:= find_bpl(værdi.laf(1));
 11  3929                       if 0<j and j<=max_antal_operatører then
 11  3930                         res:= 62; <*ulovligt navn*>
 11  3931                     end;
 10  3932                   end
  9  3933                   else
  9  3934                   begin
 10  3935                     if a_res=0 then res:= 2 <*godkendt*>
 10  3936                     else if a_res<>1 then res:= 27 <*parametertype*>
 10  3937                     else begin
 11  3938                       indeks:= indeks+1;
 11  3939                       ia(indeks):= find_bpl(værdi.laf(1));
 11  3940                       if ia(indeks)=0 or ia(indeks)>max_antal_operatører then
 11  3941                         res:= 28; <*ukendt operatør*>
 11  3942                     end;
 10  3943                   end;
  9  3944                   if res<4 then pos:= a_pos;
  9  3945                 end;
  8  3946                 
  8  3946     <*                                        3  *>
  8  3947     <*30:  (<operatørnavn>)   ( <btj.pl.navn>)   *>
  8  3948     <*                     io                 0  *>
  8  3949           
  8  3949                 begin
  9  3950                   boolean io;
  9  3951     
  9  3951                   io:= (kilde//100 = 1);
  9  3952                   laf:= 0;
  9  3953                   if -,io and nr=1 then
  9  3954                   begin
 10  3955                     indeks:= 1;
 10  3956                     ia(1):= kilde mod 100; <*egen operatørplads*>
 10  3957                   end;
  9  3958     
  9  3958                   if io and nr=1 then
  9  3959                   begin
 10  3960                     if a_res=0 then res:= 25 <*parameter mangler*>
 10  3961                     else if a_res<>1 then res:= 27 <*parametertype*>
 10  3962                     else begin
 11  3963                       indeks:= nr;
 11  3964                       ia(indeks):= find_bpl(værdi.laf(1));
 11  3965                       if ia(indeks)=0 or ia(indeks)>max_antal_operatører then
 11  3966                         res:= 28; <*ukendt operatør*>
 11  3967                     end;
 10  3968                   end
  9  3969                   else
  9  3970                   begin
 10  3971                     if a_res=0 then res:= 2<*godkendt*> 
 10  3972                     else if indeks=4 then res:= 24 <*syntaks, for mange*>
 10  3973                     else if a_res<>1 then res:= 27 <*parametertype*>
 10  3974                     else begin
 11  3975                       indeks:= indeks+1;
 11  3976                       ia(indeks):= find_bpl(værdi.laf(1));
 11  3977                       if ia(indeks)=0 then res:= 46 <*navn ukendt*>
 11  3978                       else if ia(indeks)=ia(1) then res:= 62; <*ulovligt navn*>
 11  3979                     end;
 10  3980                   end;
  9  3981                   if res<4 then pos:= a_pos;
  9  3982                 end;
  8  3983                     
  8  3983     <*                                               *>
  8  3984     <*31:  <operatørnr> ( <navn> (<ingenting>!Å!S) ) *>
  8  3985     <*                                               *>
  8  3986     
  8  3986                 begin
  9  3987                   laf:= 0;
  9  3988                   if nr<2 and a_res=0 then res:= 25 <*parameter mangler*>
  9  3989                   else
  9  3990                   if nr=1 then
  9  3991                   begin
 10  3992                     if a_res=2 then
 10  3993                     begin
 11  3994                       ia(1):= i1;
 11  3995                       if i1<=0 or max_antal_operatører<i1 then res:= 28; <*ukendt*>
 11  3996                     end else res:= 27; <*parametertype*>
 10  3997                   end
  9  3998                   else
  9  3999                   if nr=2 then
  9  4000                   begin
 10  4001                     if a_res=1 and værdi(2) extract 8 = 0 then
 10  4002                     begin
 11  4003                       ia(2):= værdi(1); ia(3):= værdi(2);
 11  4004                       j:= find_bpl(værdi.laf(1));
 11  4005                       if j>0 and j<>ia(1) then res:= 48 <*i brug*>;
 11  4006                     end
 10  4007                     else res:= if a_res=0 then 2 <*godkendt*> 
 10  4008                                           else 27 <*parametertype*>;
 10  4009                   end 
  9  4010                   else
  9  4011                   if nr=3 then
  9  4012                   begin
 10  4013                     if a_res=0 then res:=2 <*godkendt*>
 10  4014                     else if a_res<>1 then res:= 27 <*parametertype*>
 10  4015                     else begin
 11  4016                       j:= værdi(1) shift (-16);
 11  4017                       if j='Å' then ia(4):=  1 else
 11  4018                       if j='S' then ia(4):=  3 else res:= 24 <*syntaks*>;
 11  4019                     end;
 10  4020                   end
  9  4021                   else res:= if a_res=0 then 2 <*godkendt*> else 24 <*syntaks*>;
  9  4022                   if res<4 then pos:= a_pos;
  9  4023                 end;
  8  4024     
  8  4024     <*            1   *>
  8  4025     <*32: (heltal)    *>
  8  4026     <*            0   *>
  8  4027                 begin
  9  4028                   if nr=1 then
  9  4029                   begin
 10  4030                     if ares=0 then res:= 2 else
 10  4031                     if ares=2 or ares=3 then
 10  4032                     begin
 11  4033                       ia(nr):= i1; indeks:= nr;
 11  4034                     end
 10  4035                     else res:=27; <*parametertype*>
 10  4036                   end
  9  4037                   else
  9  4038                     res:= (if ares<>0 then 24 <*syntaks, for mange*> else 2);
  9  4039                   if res < 4 then pos:= a_pos;
  9  4040                 end;
  8  4041     
  8  4041     <*33 generel tekst*>
  8  4042                 begin 
  9  4043                   integer p,p1,ch,lgd;
  9  4044     
  9  4044                   if nr=1 and a_res<>0 then
  9  4045                   begin
 10  4046                     p:=pos; p1:=1;
 10  4047                     lgd:= (op_spool_postlgd-op_spool_text)//2*3-1;
 10  4048                     if 95<lgd then lgd:=95;
 10  4049                     repeat læstegn(d.opref.data,p,ch) until ch<>' ';
 10  4050                     while ch<>'nl' and ch<>'em' and ch<>0 and p1<lgd do
 10  4051                     begin
 11  4052                       skrivtegn(ia,p1,ch);
 11  4053                       læstegn(d.opref.data,p,ch);
 11  4054                     end;
 10  4055                     if p1=1 then res:= 25 else res:= 2;
 10  4056                     repeat skrivtegn(ia,p1,0) until (p1 mod 6)=1;
 10  4057                   end
  9  4058                   else
  9  4059                   if a_res=0 then res:= 25 else res:= 24;
  9  4060                 end;
  8  4061                 
  8  4061     <*+4*>      begin
  9  4062                   fejlreaktion(4<*systemfejl*>,partype,
  9  4063                                <:parametertype fejl i kommandofil:>,1);
  9  4064                   res:=31;
  9  4065                 end
  8  4066     <*-4*>
  8  4067               end;<*case partype*>
  7  4068             end;<* while læs_param_sæt *>
  6  4069           end; <* operationskode ok *>
  5  4070         end
  4  4071         else
  4  4072         begin
  5  4073           fejlreaktion(3<*programfejl*>,kilde,<:kilde:>,1);
  5  4074         end;
  4  4075     
  4  4075         if a_res<0 then res:= -a_res;
  4  4076     slut_læskommando:
  4  4077     
  4  4077         læs_kommando:=d.op_ref.resultat:= res;
  4  4078       end;<* disable-blok*>
  3  4079     end læs_kommando;
  2  4080     \f

  2  4080     message procedure skriv_kvittering side 1 - 820301/hko/cl;
  2  4081     
  2  4081     procedure skriv_kvittering(z,ref,pos,res);
  2  4082       value                      ref,pos,res;
  2  4083       zone                     z;
  2  4084       integer                    ref,pos,res;
  2  4085       begin
  3  4086         integer array field op;
  3  4087         integer pos1,tegn;
  3  4088         op:=ref;
  3  4089         if res<1 or res>3 then write(z,<:*** :>);
  3  4090         write(z,case res+1 of (
  3  4091     <* 0*><:ubehandlet:>,
  3  4092     <* 1*><:ok:>,
  3  4093     <* 2*><:godkendt:>,
  3  4094     <* 3*><:udført:>,
  3  4095     <* 4*><:kommando ukendt:>,
  3  4096     
  3  4096     <* 5*><:linie-nr ulovligt:>,
  3  4097     <* 6*><:løb-nr ulovligt:>,
  3  4098     <* 7*><:bus-nr ulovligt:>,
  3  4099     <* 8*><:gruppe ukendt:>,
  3  4100     <* 9*><:linie/løb ukendt:>,
  3  4101     
  3  4101     <*10*><:bus-nr ukendt:>,
  3  4102     <*11*><:bus allerede indsat på :>,
  3  4103     <*12*><:linie/løb allerede besat af :>,
  3  4104     <*13*><:bus ikke indsat:>,
  3  4105     <*14*><:bus optaget:>,
  3  4106     
  3  4106     <*15*><:gruppe optaget:>,
  3  4107     <*16*><:skærm optaget:>,
  3  4108     <*17*><:kanal ukendt:>,
  3  4109     <*18*><:bus i kø:>,
  3  4110     <*19*><:kø er tom:>,
  3  4111     
  3  4111     <*20*><:ej forbindelse :>,
  3  4112     <*21*><:ingen at gennemstille til:>,
  3  4113     <*22*><:ingen samtale at nedlægge:>,
  3  4114     <*23*><:ingen samtale at monitere:>,
  3  4115     <*24*><:syntaks:>,
  3  4116     
  3  4116     <*25*><:syntaks, parameter mangler:>,
  3  4117     <*26*><:syntaks, skilletegn:>,
  3  4118     <*27*><:syntaks, parametertype:>,
  3  4119     <*28*><:operatør ukendt:>,
  3  4120     <*29*><:garageterminal ukendt:>,
  3  4121     \f

  3  4121     
  3  4121     <*30*><:rapport kan ikke dannes:>,
  3  4122     <*31*><:systemfejl:>,
  3  4123     <*32*><:ingen fri plads:>,
  3  4124     <*33*><:gruppe for stor:>,
  3  4125     <*34*><:gruppe allerede defineret:>,
  3  4126     
  3  4126     <*35*><:springsekvens for stor:>,
  3  4127     <*36*><:spring allerede defineret:>,
  3  4128     <*37*><:spring ukendt:>,
  3  4129     <*38*><:spring allerede igangsat:>,
  3  4130     <*39*><:bus ikke reserveret:>,
  3  4131     
  3  4131     <*40*><:gruppe ikke reserveret:>,
  3  4132     <*41*><:spring ikke igangsat:>,
  3  4133     <*42*><:intet frit linie/løb:>,
  3  4134     <*43*><:ændring af dato/tid ikke lovlig:>,
  3  4135     <*44*><:interval-størrelse ulovlig:>,
  3  4136     
  3  4136     <*45*><:ikke implementeret:>,
  3  4137     <*46*><:navn ukendt:>,
  3  4138     <*47*><:forkert indhold:>,
  3  4139     <*48*><:i brug:>,
  3  4140     <*49*><:ingen samtale igang:>,
  3  4141     
  3  4141     <*50*><:kanal:>,
  3  4142     <*51*><:afvist:>,
  3  4143     <*52*><:kanal optaget :>,
  3  4144     <*53*><:annulleret:>,
  3  4145     <*54*><:ingen busser at kalde op:>,
  3  4146     
  3  4146     <*55*><:garagenavn ukendt:>,
  3  4147     <*56*><:område ukendt:>,
  3  4148     <*57*><:område nødvendigt:>,
  3  4149     <*58*><:ulovligt område for bus:>,
  3  4150     <*59*><:radiofejl :>,
  3  4151     
  3  4151     <*60*><:område kan ikke opdateres:>,
  3  4152     <*61*><:ingen talevej:>,
  3  4153     <*62*><:ulovligt navn:>,
  3  4154     <*63*><:alarmlængde: :>,
  3  4155     
  3  4155     <*99*><:- <'?'> -:>));
  3  4156     \f

  3  4156     message procedure skriv_kvittering side 3 - 820301/hko;
  3  4157        if res=3 and op<>0 then
  3  4158         begin
  4  4159           if d.op.opkode=20 or d.op.opkode=11 then <*vogntabel,flyt -,indsæt*>
  4  4160           begin
  5  4161             i:= d.op.data(if d.op.opkode=20 then 4 else 3) extract 14;
  5  4162             if i<>0 then write(z,i,<: udtaget:>);
  5  4163           end;
  4  4164         end;
  3  4165         if res = 11 or res = 12 then
  3  4166           i:=ref;
  3  4167         if res=11 then write(z,i shift(-12) extract 10,
  3  4168                                if i shift(-7) extract 5 =0 then false
  3  4169                                else "A" add (i shift(-7) extract 5 -1),1,
  3  4170                                <:/:>,<<d>,i extract 7) else
  3  4171         if res=12 then write(z,i extract 14) else
  3  4172         if res = 20 or res = 52 or res = 59 then
  3  4173         begin
  4  4174           i:= d.op.data(12);
  4  4175           if i <> 0 then skriv_id(z,i,8);
  4  4176           i:=d.op.data(2);
  4  4177           if i=0 then i:=d.op.data(9);
  4  4178           if i=0 then i:=d.op.data(8);
  4  4179           skriv_id(z,i,8);
  4  4180         end;
  3  4181         if res=63 then
  3  4182         begin
  4  4183           i:= ref;
  4  4184           if i<0 then write(z,<:uendelig:>) else write(z,<<d>,i,<: sek.:>);
  4  4185         end;
  3  4186     
  3  4186         if pos>=0 then
  3  4187         begin
  4  4188           pos:=pos+1;
  4  4189           outchar(z,':');
  4  4190           tegn:=-1;
  4  4191           while tegn<>10 and tegn<>0 do
  4  4192             outchar(z,læs_tegn(d.op.data,pos,tegn));
  4  4193         end;
  3  4194     <*V*>setposition(z,0,0);
  3  4195       end skriv_kvittering;
  2  4196     \f

  2  4196     message procedure cursor, side 1 - 810213/hko;
  2  4197     
  2  4197     procedure cursor(z,linie,pos);
  2  4198       value            linie,pos;
  2  4199       zone           z;
  2  4200       integer          linie,pos;
  2  4201       begin
  3  4202         if linie>0 and linie<25
  3  4203            and pos>0 and pos<81 then
  3  4204         begin
  4  4205           write(z,"esc" add 128,1,<:Æ:>,
  4  4206             <<d>,linie,<:;:>,pos,<:H:>);
  4  4207         end;
  3  4208       end cursor;
  2  4209     \f

  2  4209     message procedure attention side 1 - 810529/hko;
  2  4210     
  2  4210       procedure attention;
  2  4211       begin
  3  4212         integer i, j, k;
  3  4213         integer array field op_ref,mess_ref;
  3  4214         integer array att_message(1:9);
  3  4215         long array field laf1, laf2;
  3  4216         boolean optaget;
  3  4217       procedure skriv_attention(zud,omfang);
  3  4218         integer                     omfang;
  3  4219         zone                    zud;
  3  4220       begin
  4  4221         write(zud,"nl",1,<:+++ attention            :>);
  4  4222         if omfang <> 0 then
  4  4223         disable begin integer x;
  5  4224           trap(slut);
  5  4225           write(zud,"nl",1,
  5  4226             <:  i:         :>,i,"nl",1,
  5  4227             <:  j:         :>,j,"nl",1,
  5  4228             <:  k:         :>,k,"nl",1,
  5  4229             <:  op-ref:    :>,op_ref,"nl",1,
  5  4230             <:  mess-ref:  :>,mess_ref,"nl",1,
  5  4231             <:  optaget:   :>,if optaget then <:true:>else<:false:>,"nl",1,
  5  4232             <:  laf2       :>,laf2,"nl",1,
  5  4233             <:  att-message::>,"nl",1,
  5  4234             <::>);
  5  4235           raf:= 0;
  5  4236           skriv_hele(zud,att_message.raf,18,127);
  5  4237           skriv_coru(zud,coru_no(010));
  5  4238     slut:
  5  4239         end;
  4  4240       end skriv_attention;
  3  4241     
  3  4241       integer procedure udtag_tal(tekst,pos);
  3  4242         long array tekst;
  3  4243         integer pos;
  3  4244       begin
  4  4245         integer i;
  4  4246     
  4  4246         if getnumber(tekst,pos,i) >= 0 then
  4  4247           udtag_tal:= i
  4  4248         else
  4  4249           udtag_tal:= 0;
  4  4250       end;
  3  4251     
  3  4251       for i:= 1 step 1 until att_maske_lgd//2 do
  3  4252          att_signal(i):=att_flag(i):=0;
  3  4253       trap(att_trap);
  3  4254       stack_claim((if cm_test then 198 else 146)+50);
  3  4255     <*+2*>
  3  4256       if testbit26 and overvåget or testbit28 then
  3  4257         skriv_attention(out,0);
  3  4258     <*-2*>
  3  4259     \f

  3  4259     message procedure attention side 2 - 810406/hko;
  3  4260     
  3  4260       repeat
  3  4261     
  3  4261         wait_ch(cs_att_pulje,opref,true,-1<*vent ubegrænset*>);
  3  4262     
  3  4262         repeat
  3  4263     <*V*> c_wait_message(att_proc_ref,att_message,mess_ref,-1<*vent ubegrænset*>);
  3  4264           raf:= laf1:= 0;
  3  4265           laf:=core.mess_ref(4)+2;  <* reference til sender-procesnavn *>
  3  4266     
  3  4266     <*+2*>if testbit7 and overvåget then
  3  4267           disable begin
  4  4268             laf2:= abs(laf);
  4  4269             write(out,"nl",1,<:attention - :>);
  4  4270             if laf<=0 then write(out,<:Regrettet :>);
  4  4271             write(out,<:Message modtaget fra :>);
  4  4272             if laf2 > 0 then write(out,core.laf2) else write(out,<:???:>);
  4  4273             skriv_hele(out,att_message.raf,16,127);
  4  4274             ud;
  4  4275           end;
  3  4276     <*-2*>
  3  4277     \f

  3  4277     message procedure attention side 3 - 830310/cl;
  3  4278     
  3  4278           if laf <= 0 then
  3  4279             i:= -1
  3  4280           else
  3  4281           if core.laf(1)=konsol_navn.laf1(1)
  3  4282                and core.laf(2)=konsol_navn.laf1(2) then 
  3  4283             i:= 101
  3  4284           else
  3  4285           begin
  4  4286             i:= -1; j:= 1;
  4  4287             while i=(-1) and (j <= max_antal_operatører) do
  4  4288             begin
  5  4289               laf2:= (j-1)*8;
  5  4290               if core.laf(1) = terminal_navn.laf2(1) 
  5  4291                  and core.laf(2) = terminal_navn.laf2(2) then i:= 200+j;
  5  4292               j:= j+1;
  5  4293             end;
  4  4294             j:= 1;
  4  4295             while i=(-1) and (j<=max_antal_garageterminaler) do
  4  4296             begin
  5  4297               laf2:= (j-1)*8;
  5  4298               if core.laf(1) = garage_terminal_navn.laf2(1) 
  5  4299                  and core.laf(2) = garage_terminal_navn.laf2(2) then i:= 300+j;
  5  4300               j:= j+1;
  5  4301             end;
  4  4302           end;
  3  4303     
  3  4303           if i=101 or (201<=i and i<=200+max_antal_operatører)
  3  4304                 <* or (301<=i and i<=300+max_antal_garageterminaler) *>
  3  4305           then
  3  4306           begin
  4  4307     
  4  4307             j:= if i=101 then 0 
  4  4308                 else max_antal_operatører*(i//100-2)+i mod 100;
  4  4309     
  4  4309             ref:=j*terminal_beskr_længde;
  4  4310             att_message(9):=
  4  4311                       if terminal_tab.ref.terminal_tilstand>=0 then 1 <*normal*>
  4  4312                       else 4 <*disconnected*>;
  4  4313             optaget:=læsbit_ia(att_flag,j);
  4  4314             if optaget and att_message(9)=1 then
  4  4315               sætbit_ia(att_signal,j,0<*1 for 'husket' attention*>)
  4  4316             else optaget:=optaget or att_message(9)<>1;
  4  4317             if i//100=2 and terminal_tab.ref.terminal_tilstand < 0 then
  4  4318             begin <* att fra ekskluderet operatør - inkluder *>
  5  4319               start_operation(op_ref,010,cs_att_pulje,1<*IN,O*>);
  5  4320               d.op_ref.data(1):= i mod 100;
  5  4321               signalch(cs_rad,op_ref,gen_optype);
  5  4322               waitch(cs_att_pulje,op_ref,true,-1);
  5  4323             end;
  4  4324           end
  3  4325           else
  3  4326           begin
  4  4327             optaget:= true;
  4  4328             att_message(9):= 2 <*rejected*>;
  4  4329           end;
  3  4330     
  3  4330           monitor(22)send_answer:(zdummy,mess_ref,att_message);
  3  4331     
  3  4331         until -,optaget;
  3  4332     \f

  3  4332     message procedure attention side 4 - 810424/hko;
  3  4333     
  3  4333         sætbit_ia(att_flag,j,1);
  3  4334     
  3  4334         start_operation(op_ref,i,cs_att_pulje,0);
  3  4335     
  3  4335         signal_ch(case i//100 of (cs_io,cs_op,cs_gar),op_ref,gen_optype);
  3  4336     
  3  4336       until false;
  3  4337     
  3  4337     att_trap:
  3  4338     
  3  4338       skriv_attention(zbillede,1);
  3  4339     
  3  4339     
  3  4339       end attention;
  2  4340     
  2  4340     \f

  2  4340     message io_erklæringer side 1 - 810421/hko;
  2  4341     
  2  4341       integer
  2  4342         cs_io,
  2  4343         cs_io_komm,
  2  4344         cs_io_fil,
  2  4345         cs_io_spool,
  2  4346         cs_io_medd,
  2  4347         ss_io_spool_tomme,
  2  4348         ss_io_spool_fulde,
  2  4349         bs_zio_adgang,
  2  4350         io_spool_fil,
  2  4351         io_spool_postantal,
  2  4352         io_spool_postlængde;
  2  4353     
  2  4353       integer array field
  2  4354         io_spool_post;
  2  4355     
  2  4355       zone z_io(32,1,io_fejl);
  2  4356     
  2  4356       procedure io_fejl(z,s,b);
  2  4357         integer           s,b;
  2  4358         zone            z;
  2  4359       begin
  3  4360         disable begin
  4  4361           integer array iz(1:20);
  4  4362           integer i,j,k;
  4  4363           integer array field iaf;
  4  4364           real array field raf;
  4  4365           if s<>(1 shift 21 + 2) then
  4  4366           begin
  5  4367             getzone6(z,iz);
  5  4368             raf:=2;
  5  4369             iaf:=0;
  5  4370             k:=1;
  5  4371     
  5  4371             j:= terminal_tab.iaf.terminal_tilstand;
  5  4372             if j shift(-21)<>6 then
  5  4373               fejlreaktion(17<*ydre enhed status*>,s,string iz.raf(increase(k)),
  5  4374                            1 shift 12 <*binært*> +1 <*fortsæt*>);
  5  4375             terminal_tab.iaf.terminal_tilstand:= 6 shift 21
  5  4376                 + terminal_tab.iaf.terminal_tilstand extract 21;
  5  4377           end;
  4  4378           z(1):=real <:<'?'><'?'><'em'>:>;
  4  4379           b:=2;
  4  4380         end; <*disable*>
  3  4381       end io_fejl;
  2  4382     \f

  2  4382     message procedure skriv_auto_spring_medd side 1 - 820301/hko;
  2  4383     
  2  4383       procedure skriv_auto_spring_medd(z,medd,tid);
  2  4384         value                                 tid;
  2  4385         zone                           z;
  2  4386         real                                  tid;
  2  4387         integer array                    medd;
  2  4388         begin
  3  4389           disable begin
  4  4390             real t;
  4  4391             integer kode,bus,linie,bogst,løb,dato,kl;
  4  4392             long array indeks(1:1);
  4  4393             kode:= medd(1);
  4  4394             indeks(1):= extend medd(5) shift 24;
  4  4395             if kode > 0 and kode < 10 then
  4  4396             begin
  5  4397               write(z,"nl",0,<:-<'>'>:>,case kode of(
  5  4398             <*1*><:linie/løb ikke indsat    :>,<*sletning/omkodning/spring       *>
  5  4399             <*2*><:linie/løb allerede indsat:>,<*omkodning/spring                *>
  5  4400             <*3*><:vogn i kø:>,                <*påmindelse i forb. omkod./spring*>
  5  4401             <*4*><:vogn optaget:>,             <*    -      i  -      -   /   -  *>
  5  4402             <*5*><:spring annulleret:>,        <*udløb af ventetid               *>
  5  4403             <*6*><::>,                         <*  -   af springliste            *>
  5  4404             <*7*><::>,                         <*start af springsekvens          *>
  5  4405             <*8*><::>,                         <*afvikling af springsekvens      *>
  5  4406             <*9*><:område kan ikke opdateres:>,<*vt-ændring*>
  5  4407             <::>));
  5  4408     <*        if kode = 5 then
  5  4409               begin
  5  4410                 bogst:= medd(4);
  5  4411                 linie:= bogst shift(-5) extract 10;
  5  4412                 bogst:= bogst extract 5;
  5  4413                 if bogst > 0 then bogst:= bogst +'A'-1;
  5  4414                 write(z,"sp",1,<<z>,linie,false add bogst,1,
  5  4415                       ".",1,indeks);
  5  4416               end;
  5  4417     *>
  5  4418               outchar(z,'sp');
  5  4419               bus:= medd(2) extract 14;
  5  4420               if bus > 0 then
  5  4421                 write(z,<<z>,bus,"/",1);
  5  4422               løb:= medd(3);
  5  4423     <*+4*>    if løb shift(-22) <> 1 and løb <> 0 then
  5  4424                 fejlreaktion(3<*programfejl*>,løb,<:ikke linie id, spon.medd.:>,1);
  5  4425     <*-4*>
  5  4426     \f

  5  4426     message procedure skriv_auto_spring_medd side 2 - 810507/hko;
  5  4427     
  5  4427               linie:= løb shift(-12) extract 10;
  5  4428               bogst:= løb shift(-7) extract 5;
  5  4429               if bogst > 0 then bogst:= bogst +'A'-1;
  5  4430               løb:= løb extract 7;
  5  4431               if medd(3) <> 0 or kode <> 5 then
  5  4432               begin
  6  4433                 write(z,<<z>,linie,false add bogst,1,"/",1,løb,"sp",1);
  6  4434                 if kode = 5 or kode = 6 then write(z,<:er frit :>);
  6  4435               end;
  5  4436               if kode = 7 or kode = 8 then
  5  4437                 write(z,<*indeks,"sp",1,*>
  5  4438                   if kode=7 then <:udtaget :> else <:indsat :>);
  5  4439     
  5  4439               dato:= systime(4,tid,t);
  5  4440               kl:= t/100.0;
  5  4441               løb:= replace_char(1<*space in number*>,'.');
  5  4442               write(z,<<zd_dd_dd>,dato,<< zd_dd>,kl);
  5  4443               replace_char(1,løb);
  5  4444             end
  4  4445             else <*kode < 1 or kode > 8*>
  4  4446               fejlreaktion(3<*programfejl*>,kode,<:spon.medd. kode:>,1);
  4  4447           end; <*disable*>
  3  4448         end skriv_auto_spring_medd;
  2  4449     \f

  2  4449     message procedure h_io side 1 - 810507/hko;
  2  4450     
  2  4450       <* hovedmodulkorutine for io *>
  2  4451       procedure h_io;
  2  4452       begin
  3  4453         integer array field op_ref;
  3  4454         integer k,dest_sem;
  3  4455         procedure skriv_hio(zud,omfang);
  3  4456           value                     omfang;
  3  4457           zone                  zud;
  3  4458           integer                   omfang;
  3  4459           begin
  4  4460     
  4  4460             write(zud,"nl",1,<:+++ hovedmodul io        :>);
  4  4461             if omfang>0 then
  4  4462             disable begin integer x;
  5  4463               trap(slut);
  5  4464               write(zud,"nl",1,
  5  4465                 <:  op_ref:    :>,op_ref,"nl",1,
  5  4466                 <:  k:         :>,k,"nl",1,
  5  4467                 <:  dest_sem:  :>,dest_sem,"nl",1,
  5  4468                 <::>);
  5  4469               skriv_coru(zud,coru_no(100));
  5  4470     slut:
  5  4471             end;
  4  4472          end skriv_hio;
  3  4473     
  3  4473       trap(hio_trap);
  3  4474       stack_claim(if cm_test then 198 else 146);
  3  4475     
  3  4475     <*+2*>
  3  4476       if testbit0 and overvåget or testbit28 then
  3  4477         skriv_hio(out,0);
  3  4478     <*-2*>
  3  4479     \f

  3  4479     message procedure h_io side 2 - 810507/hko;
  3  4480     
  3  4480       repeat
  3  4481         wait_ch(cs_io,op_ref,true,-1);
  3  4482     <*+4*>
  3  4483         if (d.op_ref.optype and (io_optype or gen_optype)) extract 12 =0
  3  4484         then fejlreaktion(12<*operationstype*>,op_ref,<:operation til io:>,1);
  3  4485     <*-4*>
  3  4486     
  3  4486         k:=d.op_ref.opkode extract 12;
  3  4487         dest_sem:=
  3  4488           if k =  0 <*attention*> then cs_io_komm else
  3  4489           
  3  4489           if k = 22 <*auto vt opdatering*>
  3  4490           or k = 23 <*generel meddelelse*>
  3  4491           or k = 36 <*spring meddelelse*>
  3  4492           or k = 44 <*udeladt i gruppeopkald*>
  3  4493           or k = 45 <*nødopkald modtaget*>
  3  4494           or k = 46 <*nødopkald besvaret*> then cs_io_spool else
  3  4495     
  3  4495           if k = 38 <*meddelelse til alle skærme*> then cs_io_medd else
  3  4496           0;
  3  4497     <*+4*>
  3  4498         if dest_sem = 0 then
  3  4499         begin
  4  4500           fejl_reaktion(2<*operationskode*>,k,<:hovedmodul io:>,1);
  4  4501           signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  4  4502         end
  3  4503         else
  3  4504     <*-4*>
  3  4505         begin
  4  4506           signal_ch(dest_sem,op_ref,d.op_ref.optype);
  4  4507         end;
  3  4508       until false;
  3  4509     
  3  4509     hio_trap:
  3  4510       disable skriv_hio(zbillede,1);
  3  4511       end h_io;
  2  4512     \f

  2  4512     message procedure io_komm side 1 - 810507/hko;
  2  4513     
  2  4513       procedure io_komm;
  2  4514       begin
  3  4515         integer array field op_ref,ref,vt_op,iaf;
  3  4516         integer kode,aktion,status,opgave,dest_sem,vogn,ll,omr,
  3  4517                 pos,indeks,sep,sluttegn,operatør,i,j,k;
  3  4518         long navn;
  3  4519     
  3  4519         procedure skriv_io_komm(zud,omfang);
  3  4520           value                     omfang;
  3  4521           zone                  zud;
  3  4522           integer                   omfang;
  3  4523           begin
  4  4524     
  4  4524         disable
  4  4525     
  4  4525             write(zud,"nl",1,<:+++ io_komm              :>);
  4  4526             if omfang > 0 then
  4  4527             disable begin integer x;
  5  4528               trap(slut);
  5  4529               write(zud,"nl",1,
  5  4530                 <:  op-ref:    :>,op_ref,"nl",1,
  5  4531                 <:  kode:      :>,kode,"nl",1,
  5  4532                 <:  aktion:    :>,aktion,"nl",1,
  5  4533                 <:  ref:       :>,ref,"nl",1,
  5  4534                 <:  vt_op:     :>,vt_op,"nl",1,
  5  4535                 <:  status:    :>,status,"nl",1,
  5  4536                 <:  opgave:    :>,opgave,"nl",1,
  5  4537                 <:  dest-sem:  :>,dest_sem,"nl",1,
  5  4538                 <:  iaf:       :>,iaf,"nl",1,
  5  4539                 <:  i:         :>,i,"nl",1,
  5  4540                 <:  j:         :>,j,"nl",1,
  5  4541                 <:  k:         :>,k,"nl",1,
  5  4542                 <:  navn:      :>,string navn,"nl",1,
  5  4543                 <:  pos:       :>,pos,"nl",1,
  5  4544                 <:  indeks:    :>,indeks,"nl",1,
  5  4545                 <:  sep:       :>,sep,"nl",1,
  5  4546                 <:  sluttegn:  :>,sluttegn,"nl",1,
  5  4547                 <:  vogn:      :>,vogn,"nl",1,
  5  4548                 <:  ll:        :>,ll,"nl",1,
  5  4549                 <:  omr:       :>,omr,"nl",1,
  5  4550                 <:  operatør:  :>,operatør,"nl",1,
  5  4551                 <::>);
  5  4552               skriv_coru(zud,coru_no(101));
  5  4553     slut:
  5  4554             end;
  4  4555           end skriv_io_komm;
  3  4556     \f

  3  4556     message procedure io_komm side 2 - 810424/hko;
  3  4557     
  3  4557         trap(io_komm_trap);
  3  4558         stack_claim((if cm_test then 200 else 146)+24+200);
  3  4559     
  3  4559         ref:=0;
  3  4560         navn:= long<::>;
  3  4561         
  3  4561     <*+2*>
  3  4562         if testbit0 and overvåget or testbit28 then
  3  4563           skriv_io_komm(out,0);
  3  4564     <*-2*>
  3  4565     
  3  4565         repeat
  3  4566     
  3  4566     <*V*> wait_ch(cs_io_komm,
  3  4567                   op_ref,
  3  4568                   true,
  3  4569                   -1<*timeout*>);
  3  4570     <*+2*>
  3  4571           if testbit1 and overvåget then
  3  4572           disable begin
  4  4573             skriv_io_komm(out,0);
  4  4574             write(out,"nl",1,<:operation fra cs:>,<<d>,cs_io,
  4  4575                              <: til io :>);
  4  4576             skriv_op(out,op_ref);
  4  4577           end;
  3  4578     <*-2*>
  3  4579     
  3  4579           kode:= d.op_ref.op_kode;
  3  4580           i:= terminal_tab.ref.terminal_tilstand;
  3  4581           status:= i shift(-21);
  3  4582           opgave:=
  3  4583             if kode=0 then 1 <* indlæs kommando *> else
  3  4584             0; <* afvises *>
  3  4585     
  3  4585           aktion:= if opgave = 0 then 0 else
  3  4586                      (case status +1 of(
  3  4587           <* status         *>
  3  4588           <* 0 klar         *>(1),
  3  4589           <* 1 -            *>(-1),<* ulovlig tilstand *>
  3  4590           <* 2 -            *>(-1),<* ulovlig tilstand *>
  3  4591           <* 3 stoppet      *>(2),
  3  4592           <* 4 noneksist    *>(-1),<* ulovlig tilstand *>
  3  4593           <* 5 -            *>(-1),<* ulovlig tilstand *>
  3  4594           <* 6 -            *>(-1),<* ulovlig tilstand *>
  3  4595           <* 7 ej knyttet   *>(-1),<* ulovlig tilstand *>
  3  4596                               -1));
  3  4597     \f

  3  4597     message procedure io_komm side 3 - 810428/hko;
  3  4598     
  3  4598           case aktion+6 of
  3  4599           begin
  4  4600             begin
  5  4601               <*-5: terminal optaget *>
  5  4602     
  5  4602               d.op_ref.resultat:= 16;
  5  4603               afslut_operation(op_ref,-1);
  5  4604             end;
  4  4605     
  4  4605             begin
  5  4606               <*-4: operation uden virkning *>
  5  4607     
  5  4607               afslut_operation(op_ref,-1);
  5  4608             end;
  4  4609     
  4  4609             begin
  5  4610               <*-3: ulovlig operationskode *>
  5  4611     
  5  4611               fejl_reaktion(2<*operationskode*>,kode,<:ulovlig:>,1);
  5  4612               afslut_operation(op_ref,-1);
  5  4613             end;
  4  4614     
  4  4614             begin
  5  4615               <*-2: ulovlig aktion *>
  5  4616     
  5  4616               fejl_reaktion(3<*programfejl*>,-2,<: ulovlig aktion:>,0);
  5  4617               afslut_operation(op_ref,-1);
  5  4618             end;
  4  4619     
  4  4619             begin
  5  4620               <*-1: ulovlig io_tilstand *>
  5  4621     
  5  4621               fejl_reaktion(3<*programfejl*>,status,<: ulovlig io-status:>,0);
  5  4622               afslut_operation(op_ref,-1);
  5  4623             end;
  4  4624     
  4  4624             begin
  5  4625               <* 0: ikke implementeret *>
  5  4626     
  5  4626               fejl_reaktion(2<*operationskode*>,kode,<: ikke implementeret:>,1);
  5  4627               afslut_operation(op_ref,-1);
  5  4628             end;
  4  4629     
  4  4629             begin
  5  4630     \f

  5  4630     message procedure io_komm side 4 - 851001/cl;
  5  4631     
  5  4631               <* 1: indlæs kommando *>
  5  4632     <*V*>     wait(bs_zio_adgang);
  5  4633     
  5  4633     <*V*>     læs_kommando(z_io,101,op_ref,pos,indeks,sep,sluttegn);
  5  4634     
  5  4634               if d.op_ref.resultat > 3 then
  5  4635               begin
  6  4636     <*V*>       setposition(z_io,0,0);
  6  4637                 if sluttegn<>'nl' then outchar(z_io,'nl');
  6  4638                 skriv_kvittering(z_io,op_ref,pos,
  6  4639                                  d.op_ref.resultat);
  6  4640               end
  5  4641               else if d.op_ref.resultat>0 then
  5  4642               begin <*godkendt*>
  6  4643                 kode:=d.op_ref.opkode;
  6  4644                 i:= kode extract 12;
  6  4645                 j:= if kode < 5 or
  6  4646                        kode=7 or kode=8 or
  6  4647                        kode=72 or kode=73 or kode=74 then 1 <*IN,x/EK,x*>else
  6  4648                     if kode=5 or kode=77 then 9             <*FO,L/FO,O*>else
  6  4649                     if kode = 9 or kode=10 then 3           <*VO,B/VO,L*>else
  6  4650                     if kode =11 or kode=12 or kode=19 or    <*VO,I/VO,U/VO,S*> 
  6  4651                        kode=20 or kode=24             then 4<*VO,F/VO,R*>else
  6  4652                     if kode =21 then 5                      <*AU*>       else
  6  4653                     if kode =25 then 6                      <*GR,D*>     else
  6  4654                     if kode =26 then 5                      <*GR,S*>     else
  6  4655                     if kode =27 or kode =28 then 7          <*GR,V/GR,O*>else
  6  4656                     if kode =30 then 10                     <*SP,D*>     else
  6  4657                     if kode =31 then 5                      <*SP*>       else
  6  4658                     if kode =32 or kode =33 then 8          <*SP,V/SP,O*>else
  6  4659                     if kode =34 or kode =35 then 5          <*SP,R/SP,A*>else
  6  4660                     if kode=71 then 11                      <*FO,V*>     else
  6  4661                     if kode =75 then 12                     <*TÆ,V     *>else
  6  4662                     if kode =76 then 12                     <*TÆ,N     *>else
  6  4663                     if kode =65 then 13                     <*BE,N     *>else
  6  4664                     if kode =66 then 14                     <*BE,G     *>else
  6  4665                     if kode =67 then 15                     <*BE,V     *>else
  6  4666                     if kode =68 then 16                     <*ST,D     *>else
  6  4667                     if kode =69 then 17                     <*ST,V     *>else
  6  4668                     if kode =36 then 18                     <*AL       *>else
  6  4669                     if kode =37 then 19                     <*CC       *>else
  6  4670                     if kode>=80 and kode <=88 then 2        <*sys-spec.*>else
  6  4671                     if kode>=90 and kode <=92 then 20       <*CQF,I/U/V*>else
  6  4672                     0;
  6  4673                 if j > 0 then
  6  4674                 begin
  7  4675                   case j of
  7  4676                   begin
  8  4677                     begin
  9  4678     \f

  9  4678     message procedure io_komm side 5 - 810424/hko;
  9  4679     
  9  4679                       <* 1: inkluder/ekskluder ydre enhed *>
  9  4680     
  9  4680                       d.op_ref.retur:= cs_io_komm;
  9  4681                       if kode=1 then d.opref.opkode:= 
  9  4682                         ia(2) shift 12 + d.opref.opkode extract 12;
  9  4683                       d.op_ref.data(1):= ia(1);
  9  4684                       signal_ch(if kode < 5 or kode>=72 then cs_rad
  9  4685                                             else cs_gar,
  9  4686                                 op_ref,gen_optype or io_optype);
  9  4687                       indeks:= op_ref;
  9  4688                       wait_ch(cs_io_komm,
  9  4689                               op_ref,
  9  4690                               true,
  9  4691                               -1<*timeout*>);
  9  4692     <*+4*>            if op_ref <> indeks then
  9  4693                         fejlreaktion(11<*fremmed post*>,op_ref,<:io_kommando:>,0);
  9  4694     <*-4*>
  9  4695     <*V*>             setposition(z_io,0,0);
  9  4696                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  4697                       skriv_kvittering(z_io,op_ref,-1,
  9  4698                                        d.op_ref.resultat);
  9  4699                     end;
  8  4700     
  8  4700                     begin
  9  4701     \f

  9  4701     message procedure io_komm side 6 - 810501/hko;
  9  4702     
  9  4702                       <* 2: tid/attention,ja/attention,nej
  9  4703                             slut/slut med billede *>
  9  4704     
  9  4704                       case d.op_ref.opkode -79 of
  9  4705                       begin
 10  4706     
 10  4706           <* 80: TI *>  begin
 11  4707                           setposition(z_io,0,0);
 11  4708                           if sluttegn<>'nl' then outchar(z_io,'nl');
 11  4709                           if ia(1) <> 0 or ia(2) <> 0 then
 11  4710                           begin real field rf;
 12  4711                             rf:= 4;
 12  4712                             trap(forbudt);
 12  4713     <*V*>                   setposition(z_io,0,0);
 12  4714                             systime(3,ia.rf,0.0);
 12  4715                             if false then
 12  4716                             begin
 13  4717                               forbudt: skriv_kvittering(z_io,0,-1,
 13  4718                                          43<*ændring af dato/tid ikke lovlig*>);
 13  4719                             end
 12  4720                             else
 12  4721                               skriv_kvittering(z_io,0,-1,3);
 12  4722                           end
 11  4723                           else
 11  4724                           begin
 12  4725                             setposition(z_io,0,0);
 12  4726                             write(z_io,<<zddddd>,systime(5,0,r),".",1,r);
 12  4727                           end;
 11  4728                         end TI;
 10  4729     \f

 10  4729     message procedure io_komm side 7 - 810424/hko;
 10  4730     
 10  4730           <*81: AT,J*>  begin
 11  4731     <*V*>                 setposition(z_io,0,0);
 11  4732                           if sluttegn <> 'nl' then outchar(zio,'nl');
 11  4733                           monitor(10)release process:(z_io,0,ia);
 11  4734                           skriv_kvittering(z_io,0,-1,3);
 11  4735                         end;
 10  4736     
 10  4736           <* 82: AT,N*> begin
 11  4737                           i:= monitor(8)reserve process:(z_io,0,ia);
 11  4738     <*V*>                 setposition(z_io,0,0);
 11  4739                           if sluttegn <> 'nl' then outchar(zio,'nl');
 11  4740                           skriv_kvittering(z_io,0,-1,
 11  4741                             if i = 0 then 3 else 0);
 11  4742                         end;
 10  4743     
 10  4743           <* 83: SL *>  begin
 11  4744                           errorbits:=0; <* warning.no ok.yes *>
 11  4745                           trapmode:= 1 shift 13;
 11  4746                           trap(-2);
 11  4747                         end;
 10  4748     
 10  4748           <* 84: SL,B *>begin
 11  4749                           errorbits:=1; <* warning.no ok.no *>
 11  4750                           trap(-3);
 11  4751                         end;
 10  4752           <* 85: SL,K *>begin
 11  4753                           errorbits:=1; <* warning.no ok.no *>
 11  4754                           disable sæt_bit_i(trapmode,15,0);
 11  4755                           trap(-3);
 11  4756                         end;
 10  4757     \f

 10  4757     message procedure io_komm side 7a - 810511/cl;
 10  4758     
 10  4758           <* 86: TE,J *>begin
 11  4759                           setposition(z_io,0,0);
 11  4760                           if sluttegn <> 'nl' then outchar(z_io,'nl');
 11  4761                           for i:= 1 step 1 until indeks do
 11  4762                           if 0<=ia(i) and ia(i)<=47 then
 11  4763                           begin
 12  4764                             case (ia(i)+1) of
 12  4765                             begin
 13  4766                               testbit0 := true;testbit1 := true;testbit2 := true;
 13  4767                               testbit3 := true;testbit4 := true;testbit5 := true;
 13  4768                               testbit6 := true;testbit7 := true;testbit8 := true;
 13  4769                               testbit9 := true;testbit10:= true;testbit11:= true;
 13  4770                               testbit12:= true;testbit13:= true;testbit14:= true;
 13  4771                               testbit15:= true;testbit16:= true;testbit17:= true;
 13  4772                               testbit18:= true;testbit19:= true;testbit20:= true;
 13  4773                               testbit21:= true;testbit22:= true;testbit23:= true;
 13  4774                               testbit24:= true;testbit25:= true;testbit26:= true;
 13  4775                               testbit27:= true;testbit28:= true;testbit29:= true;
 13  4776                               testbit30:= true;testbit31:= true;testbit32:= true;
 13  4777                               testbit33:= true;testbit34:= true;testbit35:= true;
 13  4778                               testbit36:= true;testbit37:= true;testbit38:= true;
 13  4779                               testbit39:= true;testbit40:= true;testbit41:= true;
 13  4780                               testbit42:= true;testbit43:= true;testbit44:= true;
 13  4781                               testbit45:= true;testbit46:= true;testbit47:= true;
 13  4782                             end;
 12  4783                           end;
 11  4784                           skriv_kvittering(z_io,0,-1,3);
 11  4785                         end;
 10  4786     \f

 10  4786     message procedure io_komm side 7b - 810511/cl;
 10  4787     
 10  4787           <* 87: TE,N *>begin
 11  4788                           setposition(z_io,0,0);
 11  4789                           if sluttegn <> 'nl' then outchar(z_io,'nl');
 11  4790                           for i:= 1 step 1 until indeks do
 11  4791                           if 0<=ia(i) and ia(i)<=47 then
 11  4792                           begin
 12  4793                             case (ia(i)+1) of
 12  4794                             begin
 13  4795                               testbit0 := false;testbit1 := false;testbit2 := false;
 13  4796                               testbit3 := false;testbit4 := false;testbit5 := false;
 13  4797                               testbit6 := false;testbit7 := false;testbit8 := false;
 13  4798                               testbit9 := false;testbit10:= false;testbit11:= false;
 13  4799                               testbit12:= false;testbit13:= false;testbit14:= false;
 13  4800                               testbit15:= false;testbit16:= false;testbit17:= false;
 13  4801                               testbit18:= false;testbit19:= false;testbit20:= false;
 13  4802                               testbit21:= false;testbit22:= false;testbit23:= false;
 13  4803                               testbit24:= false;testbit25:= false;testbit26:= false;
 13  4804                               testbit27:= false;testbit28:= false;testbit29:= false;
 13  4805                               testbit30:= false;testbit31:= false;testbit32:= false;
 13  4806                               testbit33:= false;testbit34:= false;testbit35:= false;
 13  4807                               testbit36:= false;testbit37:= false;testbit38:= false;
 13  4808                               testbit39:= false;testbit40:= false;testbit41:= false;
 13  4809                               testbit42:= false;testbit43:= false;testbit44:= false;
 13  4810                               testbit45:= false;testbit46:= false;testbit47:= false;
 13  4811                             end;
 12  4812                           end;
 11  4813                           skriv_kvittering(z_io,0,-1,3);
 11  4814                         end;
 10  4815     
 10  4815     <* 88: O    *>      begin
 11  4816                           integer array odescr,zdescr(1:20);
 11  4817                           long array field laf;
 11  4818                           integer res, i, j;
 11  4819     
 11  4819                           i:= j:= 1;
 11  4820                           while læstegn(ia,i,res)<>0 do
 11  4821                           begin
 12  4822                             if 'A'<=res and res<='Å' then res:= res - 'A' + 'a';
 12  4823                             skrivtegn(ia,j,res);
 12  4824                           end;
 11  4825     
 11  4825                           laf:= 2;
 11  4826                           getzone6(out,odescr);
 11  4827                           getzone6(z_io,zdescr);
 11  4828                           close(out,zdescr.laf(1)<>odescr.laf(1) or
 11  4829                                     zdescr.laf(2)<>odescr.laf(2));
 11  4830                           laf:= 0;
 11  4831     
 11  4831                           if ia(1)=0 then 
 11  4832                           begin
 12  4833                             res:= 3;
 12  4834                             j:= 0;
 12  4835                           end
 11  4836                           else
 11  4837                           begin
 12  4838                             j:= res:= openbs(out,j,ia,0);
 12  4839                             if res<>0 then
 12  4840                               res:= 46;
 12  4841                           end;
 11  4842                           if res<>0 then
 11  4843                           begin
 12  4844                             open(out,8,konsol_navn,0);
 12  4845                             if j<>0 then
 12  4846                             begin
 13  4847                               i:= 1;
 13  4848                               fejlreaktion(4,j,string ia.laf(increase(i)),1);
 13  4849                             end;
 12  4850                           end
 11  4851                           else res:= 3;
 11  4852                           setposition(z_io,0,0);
 11  4853                           skriv_kvittering(z_io,0,-1,res);
 11  4854                         end;
 10  4855                       end;<*case d.op_ref.opkode -79*>
  9  4856                     end;<*case 2*>
  8  4857                     begin
  9  4858     \f

  9  4858     message procedure io_komm side 8 - 810424/hko;
  9  4859     
  9  4859                       <* 3: vogntabel,linienr/-,busnr*>
  9  4860     
  9  4860                       d.op_ref.retur:= cs_io_komm;
  9  4861                       tofrom(d.op_ref.data,ia,10);
  9  4862                       indeks:= op_ref;
  9  4863                       signal_ch(cs_vt,op_ref,gen_optype or io_optype);
  9  4864                       wait_ch(cs_io_komm,
  9  4865                               op_ref,
  9  4866                               io_optype,
  9  4867                               -1<*timeout*>);
  9  4868     <*+2*>            if testbit2 and overvåget then
  9  4869                       disable begin
 10  4870                         skriv_io_komm(out,0);
 10  4871                         write(out,"nl",1,<:io operation retur fra vt:>);
 10  4872                         skriv_op(out,op_ref);
 10  4873                       end;
  9  4874     <*-2*>
  9  4875     <*+4*>            if indeks <> op_ref then
  9  4876                         fejlreaktion(11<*fremmed post*>,op_ref,<:io_kommando:>,0);
  9  4877     <*-4*>
  9  4878     
  9  4878                       i:=d.op_ref.resultat;
  9  4879                       if i<1 or i>3 then
  9  4880                       begin
 10  4881     <*V*>               setposition(z_io,0,0);
 10  4882                         if sluttegn<>'nl' then outchar(z_io,'nl');
 10  4883                         skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat);
 10  4884                       end
  9  4885                       else
  9  4886                       begin
 10  4887     \f

 10  4887     message procedure io_komm side 9 - 820301/hko,cl;
 10  4888     
 10  4888                         integer antal,filref;
 10  4889     
 10  4889                         antal:= d.op_ref.data(6);
 10  4890                         fil_ref:= d.op_ref.data(7);
 10  4891                         pos:= 0;
 10  4892     <*V*>               setposition(zio,0,0);
 10  4893                         if sluttegn <> 'nl' then outchar(z_io,'nl');
 10  4894                         for pos:= pos +1 while pos <= antal do
 10  4895                         begin
 11  4896                           integer bogst,løb;
 11  4897     
 11  4897                           disable i:= læsfil(fil_ref,pos,j);
 11  4898                           if i <> 0 then
 11  4899                             fejlreaktion(5<*læs_fel*>,i,<:io komm., vo,l/vo,b:>,0);
 11  4900                           vogn:= fil(j,1) shift (-24) extract 24;
 11  4901                           løb:= fil(j,1) extract 24;
 11  4902                           if d.op_ref.opkode=9 then
 11  4903                             begin i:=vogn; vogn:=løb; løb:=i; end;
 11  4904                           ll:= løb shift(-12) extract 10;
 11  4905                           bogst:= løb shift(-7) extract 5;
 11  4906                           if bogst > 0 then bogst:=  bogst+'A'-1;
 11  4907                           løb:= løb extract 7;
 11  4908                           vogn:= vogn extract 14;
 11  4909                           i:= d.op_ref.opkode -8;
 11  4910                           for i:= i,i +1 do
 11  4911                           begin
 12  4912                             j:= (i+1) extract 1;
 12  4913                             case j+1 of
 12  4914                             begin
 13  4915                               write(zio,"sp",if bogst=0 then 1 else 0,<<ddd>,ll,
 13  4916                                   false add bogst,1,"/",1,true,3,<<d>,løb);
 13  4917                               write(zio,<<dddd>,vogn,"sp",1);
 13  4918                             end;
 12  4919                           end;
 11  4920                           if pos mod 5 = 0 then
 11  4921                           begin
 12  4922                             outchar(zio,'nl');
 12  4923     <*V*>                   setposition(zio,0,0);
 12  4924                           end
 11  4925                           else write(zio,"sp",3);
 11  4926                         end;
 10  4927                         write(zio,"*",1);
 10  4928     \f

 10  4928     message procedure io_komm side 9a - 810505/hko;
 10  4929     
 10  4929                         d.op_ref.opkode:=104;<*slet fil*>
 10  4930                         d.op_ref.data(4):=filref;
 10  4931                         indeks:=op_ref;
 10  4932                         signal_ch(cs_slet_fil,op_ref,genoptype or iooptype);
 10  4933     <*V*>               wait_ch(cs_io_komm,op_ref,io_optype,-1);
 10  4934     
 10  4934     <*+2*>              if testbit2 and overvåget then
 10  4935                         disable begin
 11  4936                           skriv_io_komm(out,0);
 11  4937                           write(out,"nl",1,<:io operation retur fra sletfil:>);
 11  4938                           skriv_op(out,op_ref);
 11  4939                         end;
 10  4940     <*-2*>
 10  4941     
 10  4941     <*+4*>              if op_ref<>indeks then
 10  4942                           fejlreaktion(11<*fr.post*>,op_ref,<:io-komm, sletfil:>,0);
 10  4943     <*-4*>
 10  4944                         if d.op_ref.data(9)<>0 then
 10  4945                           fejlreaktion(3<*prg.fejl*>,d.op_ref.data(9),
 10  4946                                <:io-komm, sletfil:>,1);
 10  4947                       end;
  9  4948                     end;
  8  4949     
  8  4949                     begin
  9  4950     \f

  9  4950     message procedure io_komm side 10 - 820301/hko;
  9  4951     
  9  4951                       <* 4 indsæt/udtag/flyt bus i vogntabel, slet vogntabel *>
  9  4952     
  9  4952                       vogn:=ia(1);
  9  4953                       ll:=ia(2);
  9  4954                       omr:= if kode=11 or kode=19 then ia(3) else
  9  4955                             if kode=12            then ia(2) else 0;
  9  4956                       if kode=19 and omr<=0 then
  9  4957                       begin
 10  4958                         if omr=-1 then omr:= 0
 10  4959                         else omr:= 14 shift 20 + 3; <*OMR TCT*>
 10  4960                       end;
  9  4961     <*V*>             wait_ch(cs_vt_adgang,
  9  4962                               vt_op,
  9  4963                               gen_optype,
  9  4964                               -1<*timeout sek*>);
  9  4965                       start_operation(vtop,101,cs_io_komm,
  9  4966                                       kode);
  9  4967                       d.vt_op.data(1):=vogn;
  9  4968                       d.vt_op.data(2):=ll;
  9  4969                       d.vt_op.data(if kode=19 then 3 else 4):= omr;
  9  4970                       indeks:= vt_op;
  9  4971                       signal_ch(cs_vt,
  9  4972                                 vt_op,
  9  4973                                 gen_optype or io_optype);
  9  4974     
  9  4974     <*V*>             wait_ch(cs_io_komm,
  9  4975                               vt_op,
  9  4976                               io_optype,
  9  4977                               -1<*timeout sek*>);
  9  4978     <*+2*>            if testbit2 and overvåget then
  9  4979                       disable begin
 10  4980                         skriv_io_komm(out,0);
 10  4981                         write(out,"nl",1,
 10  4982                               <:iooperation retur fra vt:>);
 10  4983                         skriv_op(out,vt_op);
 10  4984                       end;
  9  4985     <*-2*>
  9  4986     <*+4*>            if vt_op<>indeks then
  9  4987                         fejl_reaktion(11<*fremmede op*>,op_ref,
  9  4988                                       <:io-kommando:>,0);
  9  4989     <*-4*>
  9  4990     <*V*>             setposition(z_io,0,0);
  9  4991                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  4992                       skriv_kvittering(z_io,if d.vt_op.resultat = 11 or
  9  4993                         d.vt_op.resultat = 12 then d.vt_op.data(3)
  9  4994                         else vt_op,-1,d.vt_op.resultat);
  9  4995                       d.vt_op.optype:= genoptype or vt_optype;
  9  4996                       disable afslut_operation(vt_op,cs_vt_adgang);
  9  4997                     end;
  8  4998     
  8  4998                     begin
  9  4999     \f

  9  4999     message procedure io_komm side 11 - 810428/hko;
  9  5000     
  9  5000                       <* 5 autofil-skift
  9  5001                            gruppe,slet
  9  5002                            spring  (igangsæt)
  9  5003                            spring,annuler
  9  5004                            spring,reserve     *>
  9  5005     
  9  5005                       tofrom(d.op_ref.data,ia,8);
  9  5006                       d.op_ref.retur:=cs_io_komm;
  9  5007                       indeks:=op_ref;
  9  5008                       signal_ch(cs_vt,op_ref,gen_optype or io_optype);
  9  5009     <*V*>             wait_ch(cs_io_komm,
  9  5010                               op_ref,
  9  5011                               io_optype,
  9  5012                               -1<*timeout*>);
  9  5013     <*+2*>            if testbit2 and overvåget then
  9  5014                       disable begin
 10  5015                         skriv_io_komm(out,0);
 10  5016                         write(out,"nl",1,<:io operation retur fra vt:>);
 10  5017                         skriv_op(out,op_ref);
 10  5018                       end;
  9  5019     <*-2*>
  9  5020     <*+4*>            if indeks<>op_ref then
  9  5021                         fejlreaktion(11<*fremmed post*>,op_ref,
  9  5022                                      <:io-kommando(autofil):>,0);
  9  5023     <*-4*>
  9  5024     
  9  5024     <*V*>             setposition(z_io,0,0);
  9  5025                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  5026                       skriv_kvittering(z_io,if (d.op_ref.resultat=11 or
  9  5027                           d.op_ref.resultat=12) and kode=34 <*SP,R*> then
  9  5028                           d.op_ref.data(4) else op_ref,-1,d.op_ref.resultat);
  9  5029                     end;
  8  5030     
  8  5030                     begin
  9  5031     \f

  9  5031     message procedure io_komm side 12 - 820301/hko/cl;
  9  5032     
  9  5032                       <* 6 gruppedefinition *>
  9  5033     
  9  5033                       tofrom(d.op_ref.data,ia,indeks*2);
  9  5034     <*V*>             wait_ch(cs_io_fil,vt_op,true,-1<*timeout*>);
  9  5035                       start_operation(vt_op,101,cs_io_komm,
  9  5036                                       101<*opret fil*>);
  9  5037                       d.vt_op.data(1):=256;<*postantal*>
  9  5038                       d.vt_op.data(2):=1;  <*postlængde*>
  9  5039                       d.vt_op.data(3):=1;  <*segmentantal*>
  9  5040                       d.vt_op.data(4):=
  9  5041                               2 shift 10;  <*spool fil*>
  9  5042                       signal_ch(cs_opret_fil,vt_op,io_optype);
  9  5043                       pos:=vt_op;<*variabel lånes*>
  9  5044     <*V*>             wait_ch(cs_io_komm,vt_op,io_optype,-1<*timeout*>);
  9  5045     <*+4*>            if vt_op<>pos then
  9  5046                         fejlreaktion(11<*fremmed post*>,vt_op,<:gruppedef:>,0);
  9  5047                       if d.vt_op.data(9)<>0 then
  9  5048                         fejlreaktion(13<*opret-fil*>,d.vt_op.data(9),
  9  5049                           <:io-kommando(gruppedefinition):>,0);
  9  5050     <*-4*>
  9  5051                       iaf:=0;
  9  5052                       for i:=1 step 1 until indeks-1 do
  9  5053                       begin
 10  5054                         disable k:=modif_fil(d.vt_op.data(4),i,j);
 10  5055                         if k<>0 then
 10  5056                           fejlreaktion(7<*modif-fil*>,k,
 10  5057                             <:io kommando(gruppe-def):>,0);
 10  5058                         fil(j).iaf(1):=d.op_ref.data(i+1);
 10  5059                       end;
  9  5060                       while sep = ',' do
  9  5061                       begin
 10  5062                         wait(bs_fortsæt_adgang);
 10  5063                         pos:= 1; j:= 0;
 10  5064                         while læs_store(z_io,i) < 8 do
 10  5065                         begin
 11  5066                           skrivtegn(fortsæt,pos,i);
 11  5067                           if i = '?' or i = 'esc' then j:= 1; <* skip kommando *>
 11  5068                         end;
 10  5069                         skrivtegn(fortsæt,pos,'em');
 10  5070                         afsluttext(fortsæt,pos);
 10  5071                         sluttegn:= i;
 10  5072                         if j<>0 then
 10  5073                         begin
 11  5074                           setposition(z_io,0,0);
 11  5075                           if sluttegn <> 'nl' then outchar(z_io,'nl');
 11  5076                           skriv_kvittering(zio,opref,-1,53);<*annulleret*>
 11  5077                           goto gr_ann;
 11  5078                         end;
 10  5079     \f

 10  5079     message procedure io_komm side 13 - 810512/hko/cl;
 10  5080     
 10  5080                         disable begin
 11  5081                         integer array værdi(1:4);
 11  5082                         integer a_pos,res;
 11  5083                           pos:= 0;
 11  5084                           repeat
 11  5085                             apos:= pos;
 11  5086                             læs_paramsæt(fortsæt,a_pos,0,værdi,sep,res);
 11  5087                             if res >= 0 then
 11  5088                             begin
 12  5089                               if res=0 and (sep=',' or indeks>2) then <*ok*>
 12  5090                               else if res=0 then res:= -25 <*parameter mangler*>
 12  5091                               else if res=2 and (værdi(1)<1 or værdi(1)>9999) then
 12  5092                                       res:= -7 <*busnr ulovligt*>
 12  5093                               else if res=2 or res=6 then
 12  5094                               begin
 13  5095                                 k:=modiffil(d.vt_op.data(4),indeks,j);
 13  5096                                 if k<>0 then fejlreaktion(7<*modiffil*>,k,
 13  5097                                    <:io kommando(gruppe-def):>,0);
 13  5098                                 iaf:= 0;
 13  5099                                 fil(j).iaf(1):= værdi(1) +
 13  5100                                   (if res=6 then 1 shift 22 else 0);
 13  5101                                 indeks:= indeks+1;
 13  5102                                 if sep = ',' then res:= 0;
 13  5103                               end
 12  5104                               else res:= -27; <*parametertype*>
 12  5105                             end;
 11  5106                             if res>0 then pos:= a_pos;
 11  5107                           until sep<>'sp' or res<=0;
 11  5108     
 11  5108                           if res<0 then
 11  5109                           begin
 12  5110                             d.op_ref.resultat:= -res;
 12  5111                             i:=1;
 12  5112                             hægt_tekst(d.op_ref.data,i,fortsæt,1);
 12  5113                             afsluttext(d.op_ref.data,i);
 12  5114                           end;
 11  5115                         end;
 10  5116     \f

 10  5116     message procedure io_komm side 13a - 810512/hko/cl;
 10  5117     
 10  5117                         if d.op_ref.resultat > 3 then
 10  5118                         begin
 11  5119                           setposition(z_io,0,0);
 11  5120                           if sluttegn <> 'nl' then outchar(z_io,'nl');
 11  5121                           skriv_kvittering(z_io,op_ref,pos,d.opref.resultat);
 11  5122                           goto gr_ann;
 11  5123                         end;
 10  5124                         signalbin(bs_fortsæt_adgang);
 10  5125                       end while sep = ',';
  9  5126                       d.op_ref.data(2):= d.vt_op.data(1):=indeks-1;
  9  5127                       k:= sætfildim(d.vt_op.data);
  9  5128                       if k<>0 then fejlreaktion(9,k,<:io kommando(gruppe-def):>,0);
  9  5129                       d.op_ref.data(3):= d.vt_op.data(4); <*filref*>
  9  5130                       signalch(cs_io_fil,vt_op,io_optype or gen_optype);
  9  5131                       d.op_ref.retur:=cs_io_komm;
  9  5132                       pos:=op_ref;
  9  5133                       signal_ch(cs_vt,op_ref,gen_optype or io_optype);
  9  5134     <*V*>             wait_ch(cs_io_komm,op_ref,io_optype,-1<*timeout*>);
  9  5135     <*+4*>            if pos<>op_ref then
  9  5136                         fejlreaktion(11<*fremmed post*>,op_ref,
  9  5137                           <:io kommando(gruppedef retur fra vt):>,0);
  9  5138     <*-4*>
  9  5139     
  9  5139     <*V*>             setposition(z_io,0,0);
  9  5140                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  5141                       skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat);
  9  5142     
  9  5142                       if false then
  9  5143                       begin
 10  5144               gr_ann:   signalch(cs_slet_fil,vt_op,io_optype);
 10  5145                         waitch(cs_io_komm,vt_op,io_optype,-1);
 10  5146                         signalch(cs_io_fil,vt_op,io_optype or vt_optype);
 10  5147                       end;
  9  5148                         
  9  5148                     end;
  8  5149     
  8  5149                     begin
  9  5150     \f

  9  5150     message procedure io_komm side 14 - 810525/hko/cl;
  9  5151     
  9  5151                       <* 7 gruppe(-oversigts-)rapport *>
  9  5152     
  9  5152                       d.op_ref.retur:=cs_io_komm;
  9  5153                       d.op_ref.data(1):=ia(1);
  9  5154                       indeks:=op_ref;
  9  5155                       signal_ch(cs_vt,op_ref,gen_optype or io_optype);
  9  5156     <*V*>             wait_ch(cs_io_komm,op_ref,io_optype,-1<*timeout*>);
  9  5157     
  9  5157     <*+4*>            if op_ref<>indeks then
  9  5158                         fejlreaktion(11<*fremmed post*>,op_ref,
  9  5159                           <:io-kommando(gruppe-rapport):>,0);
  9  5160     <*-4*>
  9  5161     
  9  5161     <*V*>             setposition(z_io,0,0);
  9  5162                       if sluttegn <> 'nl' then outchar(z_io,'nl');
  9  5163                       if d.op_ref.resultat<>3 then
  9  5164                       begin
 10  5165                         skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat);
 10  5166                       end
  9  5167                       else
  9  5168                       begin
 10  5169                         integer bogst,løb;
 10  5170     
 10  5170                         if kode = 27 then <* gruppe,vis *>
 10  5171                         begin
 11  5172     <*V*>                 write(z_io,"nl",1,"-",5,"sp",2,<:gruppe: :>,
 11  5173                                 "G",1,<<z>,d.op_ref.data(1) extract 7,
 11  5174                                 "sp",2,"-",5,"nl",1);
 11  5175     \f

 11  5175     message procedure io_komm side 15 - 820301/hko;
 11  5176     
 11  5176                           for pos:=1 step 1 until d.op_ref.data(2) do
 11  5177                           begin
 12  5178                             disable i:=læsfil(d.op_ref.data(3),pos,j);
 12  5179                             if i<>0 then
 12  5180                               fejlreaktion(5<*læsfil*>,i,
 12  5181                                 <:io_kommando(gruppe,vis):>,0);
 12  5182                             iaf:=0;
 12  5183                             vogn:=fil(j).iaf(1);
 12  5184                             if vogn shift(-22) =0 then
 12  5185                               write(z_io,<<ddddddd>,vogn extract 14)
 12  5186                             else
 12  5187                             begin
 13  5188                               løb:=vogn extract 7;
 13  5189                               bogst:=vogn shift(-7) extract 5;
 13  5190                               if bogst>0 then bogst:=bogst+'A'-1;
 13  5191                               ll:=vogn shift(-12) extract 10;
 13  5192                               write(z_io,"sp",if bogst=0 then 1 else 0,<<ddd>,ll,
 13  5193                                     false add bogst,1,"/",1,true,3,<<d>,løb);
 13  5194                             end;
 12  5195                             if pos mod 8 =0 then outchar(z_io,'nl')
 12  5196                             else write(z_io,"sp",2);
 12  5197                           end;
 11  5198                           write(z_io,"*",1);
 11  5199     \f

 11  5199     message procedure io_komm side 16 - 810512/hko/cl;
 11  5200     
 11  5200                         end
 10  5201                         else if kode=28 then <* gruppe,oversigt *>
 10  5202                         begin
 11  5203                           write(z_io,"nl",1,"-",5,"sp",2,<:gruppe oversigt:>,
 11  5204                                 "sp",2,"-",5,"nl",2);
 11  5205                           for pos:=1 step 1 until d.op_ref.data(1) do
 11  5206                           begin
 12  5207                             disable i:=læsfil(d.op_ref.data(2),pos,j);
 12  5208                             if i<>0 then 
 12  5209                               fejlreaktion(5<*læsfil*>,i,
 12  5210                                 <:io-kommando(gruppe-oversigt):>,0);
 12  5211                             iaf:=0;
 12  5212                             ll:=fil(j).iaf(1);
 12  5213                             write(z_io,"G",1,<<z>,true,3,ll extract 7);
 12  5214                             if pos mod 10 =0 then outchar(z_io,'nl')
 12  5215                             else write(z_io,"sp",3);
 12  5216                           end;
 11  5217                           write(z_io,"*",1);
 11  5218                         end;
 10  5219                         <* slet fil *>
 10  5220                         d.op_ref.opkode:= 104;
 10  5221                         d.op_ref.data(4):= d.op_ref.data(if kode=28 then 2 else 3);
 10  5222                         signalch(cs_slet_fil,op_ref,gen_optype or io_optype);
 10  5223                         waitch(cs_io_komm,op_ref,io_optype or gen_optype,-1);
 10  5224                       end; <* resultat=3 *>
  9  5225     
  9  5225                     end;
  8  5226     
  8  5226                     begin
  9  5227     \f

  9  5227     message procedure io_komm side 17 - 810525/cl;
  9  5228     
  9  5228                       <* 8 spring(-oversigts-)rapport *>
  9  5229     
  9  5229                       d.op_ref.retur:=cs_io_komm;
  9  5230                       tofrom(d.op_ref.data,ia,4);
  9  5231                       indeks:=op_ref;
  9  5232                       signal_ch(cs_vt,op_ref,gen_optype or io_optype);
  9  5233     <*V*>             wait_ch(cs_io_komm,op_ref,io_optype,-1<*timeout*>);
  9  5234     
  9  5234     <*+4*>            if op_ref<>indeks then
  9  5235                         fejlreaktion(11<*fremmed post*>,op_ref,
  9  5236                           <:io-kommando(spring-rapport):>,0);
  9  5237     <*-4*>
  9  5238     
  9  5238     <*V*>             setposition(z_io,0,0);
  9  5239                       if sluttegn <> 'nl' then outchar(z_io,'nl');
  9  5240                       if d.op_ref.resultat<>3 then
  9  5241                       begin
 10  5242                         skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat);
 10  5243                       end
  9  5244                       else
  9  5245                       begin
 10  5246                         boolean p_skrevet;
 10  5247                         integer bogst,løb;
 10  5248     
 10  5248                         if kode = 32 then <* spring,vis *>
 10  5249                         begin
 11  5250                           ll:= d.op_ref.data(1) shift (-5) extract 10;
 11  5251                           bogst:= d.op_ref.data(1) extract 5;
 11  5252                           if bogst<>0 then bogst:= bogst + 'A' - 1;
 11  5253     <*V*>                 write(z_io,"nl",1,"-",5,"sp",2,<:spring: :>,
 11  5254                                 <<d>,ll,false add bogst,(bogst<>0) extract 1,
 11  5255                                 <:.:>,string (extend d.op_ref.data(2) shift 24));
 11  5256                           raf:= data+8;
 11  5257                           if d.op_ref.raf(1)<>0.0 then
 11  5258                             write(z_io,<:,  startet :>,<<zddddd>,round
 11  5259                               systime(4,d.op_ref.raf(1),r),<:.:>,round r)
 11  5260                           else
 11  5261                             write(z_io,<:, ikke startet:>);
 11  5262                           write(z_io,"sp",2,"-",5,"nl",1);
 11  5263     \f

 11  5263     message procedure io_komm side 18 - 810518/cl;
 11  5264     
 11  5264                           p_skrevet:= false;
 11  5265                           for pos:=1 step 1 until d.op_ref.data(3) do
 11  5266                           begin
 12  5267                             disable i:=læsfil(d.op_ref.data(4),pos,j);
 12  5268                             if i<>0 then
 12  5269                               fejlreaktion(5<*læsfil*>,i,
 12  5270                                 <:io_kommando(spring,vis):>,0);
 12  5271                             iaf:=0;
 12  5272                             i:= fil(j).iaf(1);
 12  5273                             if i < 0 and -, p_skrevet then
 12  5274                             begin
 13  5275                               outchar(z_io,'('); p_skrevet:= true;
 13  5276                             end;
 12  5277                             if i > 0 and p_skrevet then
 12  5278                             begin
 13  5279                               outchar(z_io,')'); p_skrevet:= false;
 13  5280                             end;
 12  5281                             if pos mod 2 = 0 then
 12  5282                               write(z_io,<< dd>,abs i,<:.:>)
 12  5283                             else
 12  5284                               write(z_io,true,3,<<d>,abs i);
 12  5285                             if pos mod 21 = 0 then outchar(z_io,'nl');
 12  5286                           end;
 11  5287                           write(z_io,"*",1);
 11  5288     \f

 11  5288     message procedure io_komm side 19 - 810525/cl;
 11  5289     
 11  5289                         end
 10  5290                         else if kode=33 then <* spring,oversigt *>
 10  5291                         begin
 11  5292                           write(z_io,"nl",1,"-",5,"sp",2,<:spring oversigt:>,
 11  5293                                 "sp",2,"-",5,"nl",2);
 11  5294                           for pos:=1 step 1 until d.op_ref.data(1) do
 11  5295                           begin
 12  5296                             disable i:=læsfil(d.op_ref.data(2),pos,j);
 12  5297                             if i<>0 then 
 12  5298                               fejlreaktion(5<*læsfil*>,i,
 12  5299                                 <:io-kommando(spring-oversigt):>,0);
 12  5300                             iaf:=0;
 12  5301                             ll:=fil(j).iaf(1) shift (-5) extract 10;
 12  5302                             bogst:=fil(j).iaf(1) extract 5;
 12  5303                             if bogst<>0 then bogst:=bogst + 'A' - 1;
 12  5304                             write(z_io,"sp",(bogst=0) extract 1 + 1,<<ddd>,ll,
 12  5305                               false add bogst,(bogst<>0) extract 1,<:.:>,true,4,
 12  5306                               string (extend fil(j).iaf(2) shift 24));
 12  5307                             if fil(j,2)<>0.0 then
 12  5308                               write(z_io,<:startet :>,<<zddddd>,
 12  5309                                 round systime(4,fil(j,2),r),<:.:>,round r);
 12  5310                             outchar(z_io,'nl');
 12  5311                           end;
 11  5312                           write(z_io,"*",1);
 11  5313                         end;
 10  5314                         <* slet fil *>
 10  5315                         d.op_ref.opkode:= 104;
 10  5316                         if kode=33 then d.op_ref.data(4):= d.op_ref.data(2);
 10  5317                         signalch(cs_slet_fil,op_ref,gen_optype or io_optype);
 10  5318                         waitch(cs_io_komm,op_ref,io_optype or gen_optype,-1);
 10  5319                       end; <* resultat=3 *>
  9  5320     
  9  5320                     end;
  8  5321     
  8  5321                     begin
  9  5322     \f

  9  5322     message procedure io_komm side 20 - 820302/hko;
  9  5323     
  9  5323                       <* 9 fordeling af linier/områder på operatører *>
  9  5324     
  9  5324                       d.op_ref.retur:=cs_io_komm;
  9  5325                       disable
  9  5326                       if kode=5 then
  9  5327                       begin
 10  5328                         integer array io_linietabel(1:max_linienr//3+1);
 10  5329     
 10  5329                         for ref:= 0 step 512 until (max_linienr//768*512) do
 10  5330                         begin
 11  5331                           i:= læs_fil(1035,ref//512+1,j);
 11  5332                           if i <> 0 then
 11  5333                             fejlreaktion(5,i,<:liniefordelingstabel:>,0);
 11  5334                           tofrom(io_linietabel.ref,fil(j),
 11  5335                           if (((max_linienr+1 - (ref//2*3))+2)//3*2) > 512 then 512
 11  5336                           else ((max_linienr+1 - (ref//2*3))+2)//3*2);
 11  5337                         end;  
 10  5338                         ref:=0;
 10  5339                         operatør:=ia(1);
 10  5340                         for j:=2 step 1 until indeks do
 10  5341                         begin
 11  5342                           ll:=ia(j);
 11  5343                           if ll<>0 then
 11  5344                             skrivtegn(io_linietabel,abs(ll)+1,
 11  5345                                 if ll>0 then operatør else 0);
 11  5346                         end;
 10  5347                         for ref:= 0 step 512 until (max_linienr//768*512) do
 10  5348                         begin
 11  5349                           i:= skriv_fil(1035,ref//512+1,j);
 11  5350                           if i <> 0 then
 11  5351                             fejlreaktion(6,i,<:liniefordelingstabel:>,0);
 11  5352                           tofrom(fil(j),io_linietabel.ref,
 11  5353                              if (((max_linienr+1 - (ref//2*3))+2)//3*2) > 512
 11  5354                              then 512 else ((max_linienr+1 - (ref//2*3))+2)//3*2
 11  5355                           );
 11  5356                         end;  
 10  5357                         ref:=0;
 10  5358                       end
  9  5359                       else
  9  5360                       begin
 10  5361                         modiffil(1034,1,i);
 10  5362                         ref:=0;
 10  5363                         operatør:=ia(1);
 10  5364                         for j:=2 step 1 until indeks do
 10  5365                         begin
 11  5366                           ll:=ia(j);
 11  5367                           fil(i).ref(ll):= if ll>0 then operatør else 0;
 11  5368                         end;
 10  5369                       end;
  9  5370                       indeks:=op_ref;
  9  5371                       signal_ch(cs_rad,op_ref,gen_optype or io_optype);
  9  5372     <*V*>             wait_ch(cs_io_komm,op_ref,io_optype,-1);
  9  5373     
  9  5373     <*+4*>            if op_ref<>indeks then
  9  5374                         fejlreaktion(11<*fr.post*>,op_ref,
  9  5375                           <:io-komm,liniefordeling retur fra rad:>,0);
  9  5376     <*-4*>
  9  5377     
  9  5377     <*V*>             setposition(z_io,0,0);
  9  5378                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  5379                       skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat);
  9  5380     
  9  5380                     end;
  8  5381     
  8  5381                     begin
  9  5382     \f

  9  5382     message procedure io_komm side 21 - 820301/cl;
  9  5383     
  9  5383                       <* 10 springdefinition *>
  9  5384     
  9  5384                       tofrom(d.op_ref.data,ia,indeks*2);
  9  5385     <*V*>             wait_ch(cs_io_fil,vt_op,true,-1<*timeout*>);
  9  5386                       start_operation(vt_op,101,cs_io_komm,
  9  5387                                       101<*opret fil*>);
  9  5388                       d.vt_op.data(1):=128;<*postantal*>
  9  5389                       d.vt_op.data(2):=2;  <*postlængde*>
  9  5390                       d.vt_op.data(3):=1;  <*segmentantal*>
  9  5391                       d.vt_op.data(4):=
  9  5392                               2 shift 10;  <*spool fil*>
  9  5393                       signal_ch(cs_opret_fil,vt_op,io_optype);
  9  5394                       pos:=vt_op;<*variabel lånes*>
  9  5395     <*V*>             wait_ch(cs_io_komm,vt_op,io_optype,-1<*timeout*>);
  9  5396     <*+4*>            if vt_op<>pos then
  9  5397                         fejlreaktion(11<*fremmed post*>,vt_op,<:springdef:>,0);
  9  5398                       if d.vt_op.data(9)<>0 then
  9  5399                         fejlreaktion(13<*opret-fil*>,d.vt_op.data(9),
  9  5400                           <:io-kommando(springdefinition):>,0);
  9  5401     <*-4*>
  9  5402                       iaf:=0;
  9  5403                       for i:=1 step 1 until indeks-2 do
  9  5404                       begin
 10  5405                         disable k:=modif_fil(d.vt_op.data(4),i,j);
 10  5406                         if k<>0 then
 10  5407                           fejlreaktion(7<*modif-fil*>,k,
 10  5408                             <:io kommando(spring-def):>,0);
 10  5409                         fil(j).iaf(1):=d.op_ref.data(i+2);
 10  5410                       end;
  9  5411                       while sep = ',' do
  9  5412                       begin
 10  5413                         wait(bs_fortsæt_adgang);
 10  5414                         pos:= 1; j:= 0;
 10  5415                         while læs_store(z_io,i) < 8 do
 10  5416                         begin
 11  5417                           skrivtegn(fortsæt,pos,i);
 11  5418                           if i = '?' or i = 'esc' then j:= 1; <* skip kommando *>
 11  5419                         end;
 10  5420                         skrivtegn(fortsæt,pos,'em');
 10  5421                         afsluttext(fortsæt,pos);
 10  5422                         sluttegn:= i;
 10  5423                         if j<>0 then
 10  5424                         begin
 11  5425                           setposition(z_io,0,0);
 11  5426                           if sluttegn <> 'nl' then outchar(z_io,'nl');
 11  5427                           skriv_kvittering(z_io,opref,-1,53);<*annulleret*>
 11  5428                           goto sp_ann;
 11  5429                         end;
 10  5430     \f

 10  5430     message procedure io_komm side 22 - 810519/cl;
 10  5431     
 10  5431                         disable begin
 11  5432                         integer array værdi(1:4);
 11  5433                         integer a_pos,res;
 11  5434                           pos:= 0;
 11  5435                           repeat
 11  5436                             apos:= pos;
 11  5437                             læs_paramsæt(fortsæt,a_pos,0,værdi,sep,res);
 11  5438                             if res >= 0 then
 11  5439                             begin
 12  5440                               if res=0 and (sep=',' or indeks>2) then <*ok*>
 12  5441                               else if res=0 then res:= -25 <*parameter mangler*>
 12  5442                               else if res=10 and (værdi(1)<1 or værdi(1)>99) then
 12  5443                                   res:= -44 <*intervalstørrelse ulovlig*>
 12  5444                               else if res=10 and (værdi(2)<1 or værdi(2)>99) then
 12  5445                                   res:= -6  <*løbnr ulovligt*>
 12  5446                               else if res=10 then
 12  5447                               begin
 13  5448                                 k:=modiffil(d.vt_op.data(4),indeks-1,j);
 13  5449                                 if k<>0 then fejlreaktion(7<*modiffil*>,k,
 13  5450                                    <:io kommando(spring-def):>,0);
 13  5451                                 iaf:= 0;
 13  5452                                 fil(j).iaf(1):= værdi(1) shift 12 + værdi(2);
 13  5453                                 indeks:= indeks+1;
 13  5454                                 if sep = ',' then res:= 0;
 13  5455                               end
 12  5456                               else res:= -27; <*parametertype*>
 12  5457                             end;
 11  5458                             if res>0 then pos:= a_pos;
 11  5459                           until sep<>'sp' or res<=0;
 11  5460     
 11  5460                           if res<0 then
 11  5461                           begin
 12  5462                             d.op_ref.resultat:= -res;
 12  5463                             i:=1;
 12  5464                             hægt_tekst(d.op_ref.data,i,fortsæt,1);
 12  5465                             afsluttext(d.op_ref.data,i);
 12  5466                           end;
 11  5467                         end;
 10  5468     \f

 10  5468     message procedure io_komm side 23 - 810519/cl;
 10  5469     
 10  5469                         if d.op_ref.resultat > 3 then
 10  5470                         begin
 11  5471                           setposition(z_io,0,0);
 11  5472                           if sluttegn <> 'nl' then outchar(z_io,'nl');
 11  5473                           skriv_kvittering(z_io,op_ref,pos,d.opref.resultat);
 11  5474                           goto sp_ann;
 11  5475                         end;
 10  5476                         signalbin(bs_fortsæt_adgang);
 10  5477                       end while sep = ',';
  9  5478                       d.vt_op.data(1):= indeks-2;
  9  5479                       k:= sætfildim(d.vt_op.data);
  9  5480                       if k<>0 then fejlreaktion(9,k,<:io kommando(spring-def):>,0);
  9  5481                       d.op_ref.data(3):= d.vt_op.data(4); <*filref*>
  9  5482                       signalch(cs_io_fil,vt_op,io_optype or gen_optype);
  9  5483                       d.op_ref.retur:=cs_io_komm;
  9  5484                       pos:=op_ref;
  9  5485                       signal_ch(cs_vt,op_ref,gen_optype or io_optype);
  9  5486     <*V*>             wait_ch(cs_io_komm,op_ref,io_optype,-1<*timeout*>);
  9  5487     <*+4*>            if pos<>op_ref then
  9  5488                         fejlreaktion(11<*fremmed post*>,op_ref,
  9  5489                           <:io kommando(springdef retur fra vt):>,0);
  9  5490     <*-4*>
  9  5491     
  9  5491     <*V*>             setposition(z_io,0,0);
  9  5492                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  5493                       skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat);
  9  5494     
  9  5494                       if false then
  9  5495                       begin
 10  5496               sp_ann:   signalch(cs_slet_fil,vt_op,io_optype);
 10  5497                         waitch(cs_io_komm,vt_op,io_optype,-1);
 10  5498                         signalch(cs_io_fil,vt_op,io_optype or vt_optype);
 10  5499                         signalbin(bs_fortsæt_adgang);
 10  5500                       end;
  9  5501                         
  9  5501                     end;
  8  5502                     begin
  9  5503                       integer i,j,k,opr,lin,max_lin;
  9  5504                       boolean o_ud, t_ud;
  9  5505     \f

  9  5505     message procedure io_komm side 23a - 820301/cl;
  9  5506     
  9  5506                       <* 11 fordelingsrapport *>
  9  5507     
  9  5507     <*V*>             setposition(z_io,0,0);
  9  5508                       if sluttegn <> 'nl' then outchar(z_io,'nl');
  9  5509     
  9  5509                       max_lin:= max_linienr;
  9  5510                       for opr:= 1 step 1 until max_antal_operatører, 0 do
  9  5511                       begin
 10  5512                         o_ud:= t_ud:= false;
 10  5513                         k:= 0;
 10  5514     
 10  5514                         if opr<>0 then
 10  5515                         begin
 11  5516                           j:= k:= 0;
 11  5517                           for lin:= 1 step 1 until max_lin do
 11  5518                           begin
 12  5519                             læs_tegn(radio_linietabel,lin+1,i);
 12  5520                             if i<>0 then j:= lin;
 12  5521                             if opr=i and opr<>0 then
 12  5522                             begin
 13  5523                               if -, o_ud then
 13  5524                               begin
 14  5525                                 o_ud:= true;
 14  5526                                 if opr<>0 then
 14  5527                                   write(z_io,"nl",1,<:operatør:>,<< dd>,opr,
 14  5528                                     "sp",2,string bpl_navn(opr))
 14  5529                                 else
 14  5530                                   write(z_io,"nl",1,<:ikke fordelte:>);
 14  5531                               end;
 13  5532                               if -, t_ud then
 13  5533                               begin
 14  5534                                 write(z_io,<:<'nl'>    linier: :>);
 14  5535                                 t_ud:= true;
 14  5536                               end;
 13  5537                               k:=k+1;
 13  5538                               if k>1 and k mod 10 = 1 then
 13  5539                                 write(z_io,"nl",1,"sp",13);
 13  5540                               write(z_io,<<ddd >,lin);
 13  5541                             end;
 12  5542                             if lin=max_lin then max_lin:= j;
 12  5543                           end;
 11  5544                         end;
 10  5545     
 10  5545                         k:= 0; t_ud:= false;
 10  5546                         for i:= 1 step 1 until max_antal_områder do
 10  5547                         begin
 11  5548                           if radio_områdetabel(i)= opr then
 11  5549                           begin
 12  5550                             if -, o_ud then
 12  5551                             begin
 13  5552                               o_ud:= true;
 13  5553                               if opr<>0 then
 13  5554                                 write(z_io,"nl",1,<:operatør:>,<< dd>,opr,
 13  5555                                   "sp",2,string bpl_navn(opr))
 13  5556                               else
 13  5557                                 write(z_io,"nl",1,<:ikke fordelte:>);
 13  5558                             end;
 12  5559                             if -, t_ud then
 12  5560                             begin
 13  5561                               write(z_io,<:<'nl'>    områder: :>);
 13  5562                               t_ud:= true;
 13  5563                             end;
 12  5564                             k:= k+1;
 12  5565                             if k>1 and k mod 10 = 1 then
 12  5566                               write(z_io,"nl",1,"sp",13);
 12  5567                             write(z_io,true,4,string område_navn(i));
 12  5568                           end;
 11  5569                         end;
 10  5570                         if o_ud then write(z_io,"nl",1);
 10  5571                       end;
  9  5572                       write(z_io,"*",1);
  9  5573                     end;
  8  5574     
  8  5574                     begin
  9  5575                       integer omr,typ,sum;
  9  5576                       integer array ialt(1:3);
  9  5577     \f

  9  5577     message procedure io_komm side 24 - 810501/hko;
  9  5578     
  9  5578                       <* 12 vis/nulstil opkaldstællere *>
  9  5579     
  9  5579                       setposition(z_io,0,0);
  9  5580                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  5581                       for typ:= 1 step 1 until 3 do ialt(typ):= 0;
  9  5582     
  9  5582                       write(z_io,
  9  5583                 <:område   udgående  alm. ind   nød ind:>,
  9  5584                 <:  ind ialt     total:>,"nl",1);
  9  5585                       for omr := 1 step 1 until max_antal_områder do
  9  5586                       begin
 10  5587                         sum:= 0;
 10  5588                         write(z_io,true,6,string område_navn(omr),":",1);
 10  5589                         for typ:= 1 step 1 until 3 do
 10  5590                         begin
 11  5591                           write(z_io,<<   ddddddd>,opkalds_tællere((omr-1)*3+typ));
 11  5592                           sum:= sum + opkalds_tællere((omr-1)*3+typ);
 11  5593                           ialt(typ):= ialt(typ)+opkalds_tællere((omr-1)*3+typ);
 11  5594                         end;
 10  5595                         write(z_io,<<   ddddddd>,
 10  5596                           sum-opkalds_tællere((omr-1)*3+1),sum,"nl",1);
 10  5597                       end;
  9  5598                       sum:= 0;
  9  5599                       write(z_io,"nl",1,<:ialt  ::>);
  9  5600                       for typ:= 1 step 1 until 3 do
  9  5601                       begin
 10  5602                         write(z_io,<<   ddddddd>,ialt(typ));
 10  5603                         sum:= sum+ialt(typ);
 10  5604                       end;
  9  5605                       write(z_io,<<   ddddddd>,sum-ialt(1),sum,"nl",1);
  9  5606                       write(z_io,"*",1,"nl",1);
  9  5607                       setposition(z_io,0,0);
  9  5608       
  9  5608                     if kode = 76 <* nulstil tællere *> then
  9  5609                       disable begin
 10  5610                         for omr:= 1 step 1 until max_antal_områder*3 do
 10  5611                           opkalds_tællere(omr):= 0;
 10  5612                         skrivfil(tf_systællere,1,omr);
 10  5613                         tofrom(fil(omr),opkaldstællere,max_antal_områder*6);
 10  5614                         setposition(fil(omr),0,0);
 10  5615                         write(z_io,<:!!! tabeller nulstillet !!!:>,"nl",1);
 10  5616                       end;
  9  5617                     end;
  8  5618     
  8  5618                     begin
  9  5619     \f

  9  5619     message procedure io_komm side 25 - 940522/cl;
  9  5620     
  9  5620                       <* 13 navngiv betjeningsplads *>
  9  5621                       boolean incl;
  9  5622                       long field lf;
  9  5623     
  9  5623                       lf:=6;
  9  5624                       operatør:= ia(1);
  9  5625                       navn:= ia.lf;
  9  5626                       incl:= false add (ia(4) extract 8);
  9  5627     
  9  5627                       if navn=long<::> then
  9  5628                       begin
 10  5629                         <* nedlæg navn - check for i brug *>
 10  5630                         iaf:= operatør*terminal_beskr_længde;
 10  5631                         if terminal_tab.iaf.terminal_tilstand shift (-21)<>7 then
 10  5632                           d.opref.resultat:= 48 <*i brug*>
 10  5633                         else
 10  5634                         begin
 11  5635                           for i:= 65 step 1 until top_bpl_gruppe do
 11  5636                           begin
 12  5637                             iaf:= i*op_maske_lgd;
 12  5638                             if læsbit_ia(bpl_def.iaf,operatør) then
 12  5639                               d.opref.resultat:= 48<*i brug*>;
 12  5640                           end;
 11  5641                         end;
 10  5642                         if d.opref.resultat <= 3 then
 10  5643                         begin
 11  5644                           for i:= 1 step 1 until sidste_bus do
 11  5645                             if bustabel(i) shift (-14) extract 8 = operatør then
 11  5646                               d.opref.resultat:= 48<*i brug*>;
 11  5647                         end;
 10  5648                       end
  9  5649                       else
  9  5650                       begin
 10  5651                         <* opret/omdøb *>
 10  5652                         i:= find_bpl(navn);
 10  5653                         if i<>0 and i<>operatør then 
 10  5654                           d.opref.resultat:= 48 <*i brug*>;
 10  5655                       end;
  9  5656                       if d.opref.resultat<=3 then
  9  5657                       begin
 10  5658                         bpl_navn(operatør):= navn;
 10  5659                         operatør_auto_include(operatør):= incl;
 10  5660                         k:= modif_fil(tf_bpl_navne,operatør,ll);
 10  5661                         if k<>0 then
 10  5662                           fejlreaktion(7,k,<:betjeningsplads,navngiv:>,0);
 10  5663                         lf:= 4;
 10  5664                         fil(ll).lf:= navn add (incl extract 8);
 10  5665                         setposition(fil(ll),0,0);
 10  5666     
 10  5666                         <* skriv bplnavne *>
 10  5667                         disable begin
 11  5668                           zone z(128,1,stderror);
 11  5669                           long array field laf;
 11  5670                           integer array ia(1:10);
 11  5671     
 11  5671                           open(z,4,<:bplnavne:>,0);
 11  5672                           laf:= 0;
 11  5673                           outrec6(z,512);
 11  5674                           for i:= 1 step 1 until 127 do
 11  5675                             z.laf(i):= bpl_navn(i);
 11  5676                           close(z,true);
 11  5677                           monitor(42,z,0,ia);
 11  5678                           ia(6):= systime(7,0,0.0);
 11  5679                           monitor(44,z,0,ia);
 11  5680                         end;                        
 10  5681                         d.opref.resultat:= 3;<*udført*>
 10  5682                       end;
  9  5683     
  9  5683                       setposition(z_io,0,0);
  9  5684                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  5685                       skriv_kvittering(z_io,opref,-1,d.opref.resultat);
  9  5686                     end;
  8  5687     
  8  5687                     begin
  9  5688     \f

  9  5688     message procedure io_komm side 26 - 940522/cl;
  9  5689     
  9  5689                       <* 14 betjeningsplads - gruppe *>
  9  5690                       integer ant_i_gruppe;
  9  5691                       long field lf;
  9  5692                       integer array maske(1:op_maske_lgd//2);
  9  5693     
  9  5693                       lf:= 4; ant_i_gruppe:= 0;
  9  5694                       tofrom(maske,ingen_operatører,op_maske_lgd);
  9  5695                       navn:= ia.lf;
  9  5696                       operatør:= find_bpl(navn);
  9  5697                       for i:= 3 step 1 until indeks do
  9  5698                         if sætbit_ia(maske,ia(i),1)=0 then
  9  5699                           ant_i_gruppe:= ant_i_gruppe+1;
  9  5700                       if ant_i_gruppe=0 then
  9  5701                       begin
 10  5702                         <* slet gruppe *>
 10  5703                         if operatør<=64 then
 10  5704                           d.opref.resultat:= (if operatør=0 then 46<*navn ukendt*>
 10  5705                                                       else 62<*navn ulovligt*>)
 10  5706                         else
 10  5707                         begin
 11  5708                           for i:= 1 step 1 until max_antal_operatører do
 11  5709                             for j:= 1 step 1 until 3 do
 11  5710                               if operatør_stop(i,j)=operatør then
 11  5711                                 d.opref.resultat:= 48<*i brug*>;
 11  5712                         end;
 10  5713                         navn:= long<::>;
 10  5714                       end
  9  5715                       else
  9  5716                       begin
 10  5717                         if 1<=operatør and operatør<=64 then
 10  5718                           d.opref.resultat:= 62<*navn ulovligt*>
 10  5719                         else
 10  5720                         if operatør=0 then
 10  5721                         begin
 11  5722                           i:=65;
 11  5723                           while i<=127 and operatør=0 do
 11  5724                           begin
 12  5725                             if bpl_navn(i)=long<::> then operatør:=i;
 12  5726                             i:= i+1;
 12  5727                           end;
 11  5728                           if operatør=0 then
 11  5729                             d.opref.resultat:= 32<*ikke plads*>
 11  5730                           else if operatør>top_bpl_gruppe then
 11  5731                             top_bpl_gruppe:= operatør;
 11  5732                         end;
 10  5733                       end;
  9  5734                       if d.opref.resultat<=3 then
  9  5735                       begin
 10  5736                         bpl_navn(operatør):= navn;
 10  5737                         iaf:= operatør*op_maske_lgd;
 10  5738                         tofrom(bpl_def.iaf,maske,op_maske_lgd);
 10  5739                         bpl_tilst(operatør,1):= bpl_tilst(operatør,2):= 0;
 10  5740                         for i:= 1 step 1 until max_antal_operatører do
 10  5741                         begin
 11  5742                           if læsbit_ia(maske,i) then
 11  5743                           begin
 12  5744                             bpl_tilst(operatør,2):= bpl_tilst(operatør,2)+1;
 12  5745                             if læsbit_ia(operatør_maske,i) then
 12  5746                               bpl_tilst(operatør,1):= bpl_tilst(operatør,1)+1;
 12  5747                           end;
 11  5748                         end;
 10  5749                         k:=modif_fil(tf_bplnavne,operatør,ll);
 10  5750                         if k<>0 then
 10  5751                           fejlreaktion(7,k,<:btj.plads,gruppenavn:>,0);
 10  5752                         lf:= 4;
 10  5753                         fil(ll).lf:= navn;
 10  5754                         setposition(fil(ll),0,0);
 10  5755                         iaf:= 0;
 10  5756                         k:= modif_fil(tf_bpl_def,operatør-64,ll);
 10  5757                         if k<>0 then
 10  5758                           fejlreaktion(7,k,<:btj.plads,gruppedef:>,0);
 10  5759                         for i:= 1 step 1 until op_maske_lgd//2 do
 10  5760                           fil(ll).iaf(i):= maske(i);
 10  5761                         fil(ll).iaf(4):= bpl_tilst(operatør,2);
 10  5762                         setposition(fil(ll),0,0);
 10  5763                         d.opref.resultat:= 3;
 10  5764                       end;
  9  5765     
  9  5765                       setposition(z_io,0,0);
  9  5766                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  5767                       skriv_kvittering(z_io,opref,-1,d.opref.resultat);
  9  5768                     end;
  8  5769     
  8  5769                     begin
  9  5770     \f

  9  5770     message procedure io_komm side 27 - 940522/cl;
  9  5771     
  9  5771                       <* 15 vis betjeningspladsdefinitioner *>
  9  5772     
  9  5772                       setposition(z_io,0,0);
  9  5773                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  5774                       write(z_io,"nl",1,<:operatørpladser::>,"nl",1);
  9  5775                       for i:= 1 step 1 until max_antal_operatører do
  9  5776                       begin
 10  5777                         write(z_io,<<dd>,i,<:: :>,true,6,string bpl_navn(i),
 10  5778                           case operatør_auto_include(i) extract 2 + 1 of(
 10  5779                           <:(--):>,<:(ÅB):>,<:(??):>,<:(ST):>));
 10  5780                         if i mod 4 = 0 then write(z_io,"nl",1)
 10  5781                                        else write(z_io,"sp",5);
 10  5782                       end;
  9  5783                       if max_antal_operatører mod 4 <> 0 then write(z_io,"nl",1);
  9  5784                       write(z_io,"nl",1,<:grupper::>,"nl",1);
  9  5785                       for i:= 65 step 1 until top_bpl_gruppe do
  9  5786                       begin
 10  5787                         ll:=0; iaf:= i*op_maske_lgd;
 10  5788                         if bpl_navn(i)<>long<::> then
 10  5789                         begin
 11  5790                           write(z_io,true,6,string bpl_navn(i),":",1);
 11  5791                           for j:= 1 step 1 until max_antal_operatører do
 11  5792                           begin
 12  5793                             if læsbit_ia(bpl_def.iaf,j) then
 12  5794                             begin
 13  5795                               if ll mod 8 = 0 and ll<>0 then
 13  5796                                 write(z_io,"nl",1,"sp",7);
 13  5797                               write(z_io,"sp",2,string bpl_navn(j));
 13  5798                               ll:=ll+1;
 13  5799                             end;
 12  5800                           end;
 11  5801                           write(z_io,"nl",1);
 11  5802                         end;
 10  5803                       end;
  9  5804                       write(z_io,"*",1);
  9  5805                     end;
  8  5806     
  8  5806                     begin
  9  5807     \f

  9  5807     message procedure io_komm side 28 - 940522/cl;
  9  5808     
  9  5808                       <* 16 stopniveau,definer *>
  9  5809     
  9  5809                       operatør:= ia(1);
  9  5810                       iaf:= operatør*terminal_beskr_længde;
  9  5811                       for i:= 1 step 1 until 3 do
  9  5812                         operatør_stop(operatør,i):= ia(i+1);
  9  5813                       if -,læsbit_ia(operatørmaske,operatør) then
  9  5814                       begin
 10  5815                         tofrom(opkaldsflag,alle_operatører,op_maske_lgd);
 10  5816                         signal_bin(bs_mobilopkald);
 10  5817                       end;
  9  5818                       k:=modif_fil(tf_stoptabel,operatør,ll);
  9  5819                       if k<>0 then
  9  5820                         fejlreaktion(7,k,<:stopniveau,definer:>,0);
  9  5821                       iaf:= 0;
  9  5822                       for i:= 0 step 1 until 3 do
  9  5823                         fil(ll).iaf(i+1):= operatør_stop(operatør,i);
  9  5824                       setposition(fil(ll),0,0);
  9  5825                       setposition(z_io,0,0);
  9  5826                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  5827                       skriv_kvittering(z_io,0,-1,3);
  9  5828                     end;
  8  5829     
  8  5829                     begin
  9  5830     \f

  9  5830     message procedure io_komm side 29 - 940522/cl;
  9  5831     
  9  5831                       <* 17 stopniveauer,vis *>
  9  5832     
  9  5832                       setposition(z_io,0,0);
  9  5833                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  5834     
  9  5834                       for operatør:= 1 step 1 until max_antal_operatører do
  9  5835                       begin
 10  5836                         iaf:=operatør*terminal_beskr_længde;
 10  5837                         ll:=0;
 10  5838                         ll:=write(z_io,<<dd>,operatør,<:: :>,true,6,
 10  5839                               string bpl_navn(operatør),<:(:>,
 10  5840                               case terminal_tab.iaf.terminal_tilstand shift (-21)
 10  5841                               + 1 of (<:AKTIV:>,<:AKTIV:>,<:AKTIV:>,<:PAUSE:>,
 10  5842                               <:EKSKL:>,<:EKSKL:>,<:EKSKL:>,<:EKSKL:>), <:) :>);
 10  5843                         for i:= 1 step 1 until 3 do
 10  5844                           ll:= ll+write(z_io,if i=1 then "sp" else "/",1,
 10  5845                                   if operatør_stop(operatør,i)=0 then <:ALLE:>
 10  5846                                   else string bpl_navn(operatør_stop(operatør,i)));
 10  5847                         if operatør mod 2 = 1 then
 10  5848                           write(z_io,"sp",40-ll)
 10  5849                         else
 10  5850                           write(z_io,"nl",1);
 10  5851                       end;
  9  5852                       if max_antal_operatører mod 2 <> 0 then write(z_io,"nl",1);
  9  5853                       write(z_io,"*",1);
  9  5854                     end;
  8  5855     
  8  5855                     begin
  9  5856     \f

  9  5856     message procedure io_komm side 30 - 941007/cl;
  9  5857     
  9  5857                       <* 18 alarmlængder *>
  9  5858     
  9  5858                       setposition(z_io,0,0);
  9  5859                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  5860     
  9  5860                       for operatør:= 1 step 1 until max_antal_operatører do
  9  5861                       begin
 10  5862                         ll:=0;
 10  5863                         ll:=write(z_io,<<dd>,operatør,<:: :>,true,6,
 10  5864                               string bpl_navn(operatør));
 10  5865                         iaf:=(operatør-1)*opk_alarm_tab_lgd;
 10  5866                         if opk_alarm.iaf.alarm_lgd < 0 then
 10  5867                           ll:= ll+write(z_io,<:uendelig:>)
 10  5868                         else
 10  5869                           ll:= ll+write(z_io,<<ddddddd>,
 10  5870                                     opk_alarm.iaf.alarm_lgd,<: sek.:>);
 10  5871     
 10  5871                         if operatør mod 2 = 1 then
 10  5872                           write(z_io,"sp",40-ll)
 10  5873                         else
 10  5874                           write(z_io,"nl",1);
 10  5875                       end;
  9  5876                       if max_antal_operatører mod 2 <> 0 then write(z_io,"nl",1);
  9  5877                       write(z_io,"*",1);
  9  5878                     end;
  8  5879     
  8  5879                     begin
  9  5880                       <* 19 CC *>
  9  5881                       integer i, c;
  9  5882     
  9  5882                       i:= 1;
  9  5883                       while læstegn(ia,i+0,c)<>0 and
  9  5884                         i<(op_spool_postlgd-op_spool_text)//2*3
  9  5885                       do skrivtegn(d.opref.data,i,c);
  9  5886                       repeat skrivtegn(d.opref.data,i,0) until (i mod 6)=1;
  9  5887     
  9  5887                       d.opref.retur:= cs_io_komm;
  9  5888                       signalch(cs_op,opref,io_optype or gen_optype);
  9  5889     <*V*>             waitch(cs_io_komm,opref,io_optype,-1);
  9  5890                                                            
  9  5890                       setposition(z_io,0,0);
  9  5891                       if sluttegn<>'nl' then outchar(z_io,'nl');
  9  5892                       skriv_kvittering(z_io,opref,-1,d.opref.resultat);
  9  5893                     end;                  
  8  5894                     
  8  5894                     begin
  9  5895                       <* 20: CQF,I CQF,U CQF,V *>
  9  5896                       integer kode, res, i, j;
  9  5897                       integer array field iaf, iaf1;
  9  5898                       long field navn;
  9  5899     
  9  5899                       kode:= d.opref.opkode extract 12;
  9  5900                       navn:= 6; res:= 0;
  9  5901                       if kode=90 <*CQF,I*> then
  9  5902                       begin
 10  5903                         if søg_omr_bus(ia(1),0,0,0,0,0) < 0 then
 10  5904                           res:= 10 <*busnr ukendt*>
 10  5905                         else
 10  5906                         begin
 11  5907                           j:= -1;
 11  5908                           for i:= 1 step 1 until max_cqf do
 11  5909                           begin
 12  5910                             iaf:= (i-1)*cqf_lgd;
 12  5911                             if ia(1) = cqf_tabel.iaf.cqf_bus or
 12  5912                                ia.navn = cqf_tabel.iaf.cqf_id
 12  5913                             then res:= 48; <*i brug*>
 12  5914                             if j<0 and cqf_tabel.iaf.cqf_bus=0 then j:= i;
 12  5915                           end;
 11  5916                           if res=0 and j<0 then res:= 32; <*ingen fri plads*>
 11  5917                           if res=0 then
 11  5918                           begin
 12  5919                             iaf:= (j-1)*cqf_lgd;
 12  5920                             cqf_tabel.iaf.cqf_bus:= ia(1);
 12  5921                             cqf_tabel.iaf.cqf_fejl:= 0;
 12  5922                             cqf_tabel.iaf.cqf_id:= ia.navn;
 12  5923                             cqf_tabel.iaf.cqf_ok_tid:= real <::>;
 12  5924                             cqf_tabel.iaf.cqf_næste_tid:= d.opref.tid + 15*60.0;
 12  5925                             res:= 3;
 12  5926                           end;
 11  5927                         end;
 10  5928                         setposition(z_io,0,0);
 10  5929                         if sluttegn<>'nl' then outchar(z_io,'nl');
 10  5930                         skriv_kvittering(z_io,opref,-1,res);
 10  5931                       end
  9  5932                       else
  9  5933                       if kode=91 <*CQF,U*> then
  9  5934                       begin
 10  5935                         j:= -1;
 10  5936                         for i:= 1 step 1 until max_cqf do
 10  5937                         begin
 11  5938                           iaf:= (i-1)*cqf_lgd;
 11  5939                           if ia(1) = cqf_tabel.iaf.cqf_bus then j:= i;
 11  5940                         end;
 10  5941                         if j>=0 then
 10  5942                         begin
 11  5943                           iaf:= (j-1)*cqf_lgd;
 11  5944                           for i:= 1 step 1 until cqf_lgd//2 do
 11  5945                             cqf_tabel.iaf(i):= 0;
 11  5946                           res:= 3;
 11  5947                         end
 10  5948                         else res:= 13; <*bus ikke indsat*>
 10  5949                         setposition(z_io,0,0);
 10  5950                         if sluttegn<>'nl' then outchar(z_io,'nl');
 10  5951                         skriv_kvittering(z_io,opref,-1,res);
 10  5952                       end
  9  5953                       else
  9  5954                       begin
 10  5955                         setposition(z_io,0,0);
 10  5956                         skriv_cqf_tabel(z_io,false);
 10  5957                         outchar(z_io,'*');
 10  5958                         setposition(z_io,0,0);
 10  5959                       end;               
  9  5960     
  9  5960                       if kode=90 or kode=91 then
  9  5961                       begin
 10  5962                         j:= skrivfil(1033,1,i);
 10  5963                         if j<>0 then
 10  5964                           fejlreaktion(6,j,<:CQF-test cqf-tabel:>,1);
 10  5965                         for k:= 1 step 1 until max_cqf do
 10  5966                         begin
 11  5967                           iaf1:= (k-1)*cqf_lgd;
 11  5968                           iaf := (k-1)*cqf_id;
 11  5969                           tofrom(fil(i).iaf,cqf_tabel.iaf1,cqf_id);
 11  5970                         end;
 10  5971                         op_cqf_tab_ændret:= true;
 10  5972                       end;
  9  5973                     end;<*CQF*>
  8  5974                           
  8  5974     
  8  5974                     begin
  9  5975     \f

  9  5975     message procedure io_komm side xx - 940522/cl;
  9  5976     
  9  5976     
  9  5976     
  9  5976     <*+3*>            fejl_reaktion(3<*programfejl*>,j,<:case 'opkode':>,2);
  9  5977     <*-3*>
  9  5978                     end
  8  5979                   end;<*case j *>
  7  5980                 end <* j > 0 *>
  6  5981                 else
  6  5982                 begin
  7  5983     <*V*>         setposition(z_io,0,0);
  7  5984                   if sluttegn<>'nl' then outchar(z_io,'nl');
  7  5985                   skriv_kvittering(z_io,op_ref,-1,
  7  5986                                    45 <* ikke implementeret *>);
  7  5987                 end;
  6  5988               end;<* godkendt *>
  5  5989     
  5  5989     <*V*>     setposition(z_io,0,0);
  5  5990               signal_bin(bs_zio_adgang);
  5  5991               d.op_ref.retur:=cs_att_pulje;
  5  5992               disable afslut_kommando(op_ref);
  5  5993             end; <* indlæs kommando *>
  4  5994     
  4  5994             begin
  5  5995     \f

  5  5995     message procedure io_komm side xx+1 - 810428/hko;
  5  5996     
  5  5996               <* 2: aktiver efter stop *>
  5  5997               terminal_tab.ref.terminal_tilstand:= 0 shift 21 +
  5  5998                 terminal_tab.ref.terminal_tilstand extract 21;
  5  5999               afslut_operation(op_ref,-1);
  5  6000               signal_bin(bs_zio_adgang);
  5  6001             end;
  4  6002     
  4  6002     <*+3*>  fejl_reaktion(3<*programfejl *>,aktion,<:case aktion:>,2)
  4  6003     <*-3*>
  4  6004           end; <* case aktion+6 *>
  3  6005     
  3  6005          until false;
  3  6006       io_komm_trap:
  3  6007         if -,(alarmcause shift (-24) extract 24 = (-2) and
  3  6008               alarmcause extract 24 = (-13)) then
  3  6009           disable skriv_io_komm(zbillede,1);
  3  6010       end io_komm;
  2  6011     \f

  2  6011     message procedure io_spool side 1 - 810507/hko;
  2  6012     
  2  6012       procedure io_spool;
  2  6013         begin
  3  6014           integer
  3  6015             næste_tomme,nr;
  3  6016           integer array field
  3  6017             op_ref;
  3  6018     
  3  6018           procedure skriv_io_spool(zud,omfang);
  3  6019             value                      omfang;
  3  6020             zone                   zud;
  3  6021             integer                    omfang;
  3  6022             begin
  4  6023               disable write(zud,"nl",1,<:+++ io_spool             :>);
  4  6024               if omfang > 0 then
  4  6025               disable begin integer x;
  5  6026                 trap(slut);
  5  6027                 write(zud,"nl",1,
  5  6028                   <:  opref:     :>,op_ref,"nl",1,
  5  6029                   <:  næstetomme::>,næste_tomme,"nl",1,
  5  6030                   <:  nr         :>,nr,"nl",1,
  5  6031                   <::>);
  5  6032                 skriv_coru(zud,coru_no(102));
  5  6033     slut:
  5  6034               end;<*disable*>
  4  6035             end skriv_io_spool;
  3  6036     
  3  6036           trap(io_spool_trap);
  3  6037           næste_tomme:= 1;
  3  6038           stack_claim((if cm_test then 200 else 146)+24 +48);
  3  6039     <*+2*>
  3  6040           if testbit0 and overvåget or testbit28 then
  3  6041             skriv_io_spool(out,0);
  3  6042     <*-2*>
  3  6043     \f

  3  6043     message procedure io_spool side 2 - 810602/hko;
  3  6044     
  3  6044           repeat
  3  6045     
  3  6045             wait_ch(cs_io_spool,
  3  6046                     op_ref,
  3  6047                     true,
  3  6048                     -1<*timeout*>);
  3  6049     
  3  6049             i:= d.op_ref.opkode;
  3  6050             if i = 22 or i = 23 or i = 36 or i = 45 or i = 46 then
  3  6051             begin
  4  6052               wait(ss_io_spool_tomme);
  4  6053               disable modif_fil(io_spoolfil,næste_tomme,nr);
  4  6054               næste_tomme:= (næste_tomme mod io_spool_postantal) +1;
  4  6055     
  4  6055               i:= d.op_ref.opsize;
  4  6056     <*+4*>    if i > io_spool_postlængde*2 -io_spool_post then
  4  6057               begin
  5  6058     <*          fejlreaktion(3,i,<:postlængde,io spool:>,1);  *>
  5  6059                 i:= io_spool_postlængde*2 -io_spool_post;
  5  6060               end;
  4  6061     <*-4*>
  4  6062               fil(nr,1):= real(extend d.op_ref.opsize shift 24);
  4  6063               tofrom(fil(nr).io_spool_post,d.op_ref,i);
  4  6064               signal(ss_io_spool_fulde);
  4  6065               d.op_ref.resultat:= 1;
  4  6066             end
  3  6067             else
  3  6068             begin
  4  6069               fejlreaktion(2<*operationskode*>,d.op_ref.opkode,
  4  6070                            <:io_spool_korutine:>,1);
  4  6071             end;
  3  6072     
  3  6072             signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  3  6073     
  3  6073           until false;
  3  6074     
  3  6074     io_spool_trap:
  3  6075     
  3  6075           disable skriv_io_spool(zbillede,1);
  3  6076         end io_spool;
  2  6077     \f

  2  6077     message procedure io_spon side 1 - 810507/hko;
  2  6078     
  2  6078       procedure io_spon;
  2  6079         begin
  3  6080           integer
  3  6081             næste_fulde,nr,i,dato,kl;
  3  6082           real t;
  3  6083     
  3  6083           procedure skriv_io_spon(zud,omfang);
  3  6084             value                     omfang;
  3  6085             zone                  zud;
  3  6086             integer                   omfang;
  3  6087             begin
  4  6088               disable write(zud,"nl",1,<:+++ io_spon              :>);
  4  6089               if omfang > 0 then
  4  6090               disable begin integer x;
  5  6091                 trap(slut);
  5  6092                 write(zud,"nl",1,
  5  6093                   <:  næste-fulde::>,næste_fulde,"nl",1,
  5  6094                   <:  nr          :>,nr,"nl",1,
  5  6095                   <::>);
  5  6096                 skriv_coru(zud,coru_no(103));
  5  6097     slut:
  5  6098               end;<*disable*>
  4  6099             end skriv_io_spon;
  3  6100     
  3  6100           trap(io_spon_trap);
  3  6101           næste_fulde:= 1;
  3  6102           stack_claim((if cm_test then 200 else 146) +24 +48);
  3  6103     <*+2*>
  3  6104           if testbit0 and overvåget or testbit28 then
  3  6105             skriv_io_spon(out,0);
  3  6106     <*-2*>
  3  6107     \f

  3  6107     message procedure io_spon side 2 - 810602/hko/cl;
  3  6108     
  3  6108           repeat
  3  6109     
  3  6109     <*V*>   wait(ss_io_spool_fulde);
  3  6110     <*V*>   wait(bs_zio_adgang);
  3  6111     
  3  6111     <*V*>   setposition(zio,0,0);
  3  6112     
  3  6112             disable modif_fil(io_spool_fil,næste_fulde,nr);
  3  6113             næste_fulde:= (næste_fulde mod io_spool_postantal) +1;
  3  6114     
  3  6114             laf:=data;
  3  6115             k:= fil(nr).io_spool_post.opkode;
  3  6116             if k = 22 or k = 36 then
  3  6117             disable begin
  4  6118               write(z_io,"nl",1,if k=22 then <:auto:> else <:spring:>);
  4  6119               if k=36 then
  4  6120               begin
  5  6121                 i:= fil(nr).io_spool_post.data(4);
  5  6122                 j:= i extract 5;
  5  6123                 if j<>0 then j:=j+'A'-1;
  5  6124                 i:= i shift (-5) extract 10;
  5  6125                 write(z_io,"sp",(j=0) extract 1 + 1,<<ddd>,i,false add j,1,".",1,
  5  6126                   true,4,string(extend fil(nr).io_spool_post.data(5) shift 24));
  5  6127               end;
  4  6128               skriv_auto_spring_medd(zio,fil(nr).io_spool_post.data,
  4  6129                                      fil(nr).io_spool_post.tid)
  4  6130             end
  3  6131             else if k = 23 then
  3  6132             disable
  3  6133             begin
  4  6134               write(zio,"nl",1,<:-<'>'>:>,fil(nr).io_spool_post.laf);
  4  6135               dato:= systime(4,fil(nr).io_spool_post.tid,t);
  4  6136               kl:= round t;
  4  6137               i:= replace_char(1<*space in number*>,'.');
  4  6138               write(z_io,"sp",2,<<zd_dd_dd>,dato,<< zd_dd_dd>,kl);
  4  6139               replace_char(1,i);
  4  6140             end
  3  6141             else if k = 45 or k = 46 then
  3  6142             disable begin
  4  6143               integer vogn,linie,bogst,løb,t;
  4  6144     
  4  6144               t:=fil(nr).io_spool_post.data(2);
  4  6145               outchar(z_io,'nl');
  4  6146               if k = 45 then
  4  6147                 write(zio,<<zd.dd>,t/100.0,"sp",1);
  4  6148     
  4  6148               write(zio,<:nødopkald fra :>);
  4  6149               vogn:= fil(nr).io_spool_post.data(1);
  4  6150               i:= vogn shift (-22);
  4  6151               if i < 2 then
  4  6152                 skrivid(zio,vogn,9)
  4  6153               else
  4  6154               begin
  5  6155                 fejlreaktion(3<*programfejl*>,vogn,<:vogn.id, spon.medd:>,1);
  5  6156                 write(zio,<:!!!:>,vogn);
  5  6157               end;
  4  6158     \f

  4  6158     message procedure io_spon side 3 - 810507/hko;
  4  6159     
  4  6159               if fil(nr).io_spool_post.data(3)<>0 then
  4  6160                 write(z_io," ",1,string område_navn(fil(nr).io_spool_post.data(3)));
  4  6161     
  4  6161               if k = 46 then
  4  6162               begin
  5  6163                 write(zio,<: besvaret:>,<< zd.dd>,t/100.0);
  5  6164               end;
  4  6165             end <*disable*>
  3  6166             else
  3  6167               fejlreaktion(2<*operationskode*>,k,<:io_spon_medd:>,1);
  3  6168     
  3  6168             fil(nr,1):= fil(nr,1) add 1;
  3  6169     
  3  6169     <*V*>   setposition(zio,0,0);
  3  6170     
  3  6170             signal_bin(bs_zio_adgang);
  3  6171     
  3  6171             signal(ss_io_spool_tomme);
  3  6172     
  3  6172           until false;
  3  6173     
  3  6173     io_spon_trap:
  3  6174           skriv_io_spon(zbillede,1);
  3  6175     
  3  6175         end io_spon;  
  2  6176     \f

  2  6176     message procedure io_medd side 1;
  2  6177     
  2  6177       procedure io_medd;
  2  6178       begin
  3  6179         integer array field opref;
  3  6180         integer afs, kl, i;
  3  6181         real dato, t;
  3  6182     
  3  6182     
  3  6182           procedure skriv_io_medd(zud,omfang);
  3  6183             value                     omfang;
  3  6184             zone                  zud;
  3  6185             integer                   omfang;
  3  6186             begin
  4  6187               disable write(zud,"nl",1,<:+++ io_medd              :>);
  4  6188               if omfang > 0 then
  4  6189               disable begin integer x;
  5  6190                 trap(slut);
  5  6191                 write(zud,"nl",1,
  5  6192                   <:  opref:    :>,opref,"nl",1,
  5  6193                   <:  afs:      :>,afs,"nl",1,
  5  6194                   <:  kl:       :>,kl,"nl",1,
  5  6195                   <:  i:        :>,i,"nl",1,
  5  6196                   <:  dato:     :>,<<zddddd>,dato,"nl",1,
  5  6197                   <:  t:        :>,t,"nl",1,
  5  6198                   <::>);
  5  6199                 skriv_coru(zud,coru_no(104));
  5  6200     slut:
  5  6201               end;<*disable*>
  4  6202             end skriv_io_medd;
  3  6203     
  3  6203           trap(io_medd_trap);
  3  6204           stack_claim((if cm_test then 200 else 146) +24 +48);
  3  6205     <*+2*>
  3  6206           if testbit0 and overvåget or testbit28 then
  3  6207             skriv_io_medd(out,0);
  3  6208     <*-2*>
  3  6209     \f

  3  6209     message procedure io_medd side 2;
  3  6210     
  3  6210         repeat
  3  6211     <*V*> waitch(cs_io_medd,opref,gen_optype,-1);
  3  6212     <*V*> wait(bs_zio_adgang);
  3  6213     
  3  6213           afs:= d.opref.data.op_spool_kilde;
  3  6214           dato:= systime(4,d.opref.data.op_spool_tid,t);
  3  6215           kl:= round t;
  3  6216           write(z_io,"nl",1,<:! fra op:>,<<d>,afs,"sp",1,
  3  6217             if afs=0 then <:SYSOP:> else string bpl_navn(afs));
  3  6218           i:= replacechar(1,'.');
  3  6219           disable write(z_io,"sp",1,<<zd_dd_dd>,kl,"nl",1);
  3  6220           replacechar(1,i);
  3  6221           write(z_io,d.opref.data.op_spool_text);
  3  6222           setposition(z_io,0,0);
  3  6223     
  3  6223           signalbin(bs_zio_adgang);
  3  6224           signalch((if afs=0 then d.opref.retur else cs_op),opref,d.opref.optype);
  3  6225         until false;
  3  6226     
  3  6226     io_medd_trap:
  3  6227         skriv_io_medd(zbillede,1);
  3  6228     
  3  6228       end io_medd;
  2  6229     \f

  2  6229     message operatør_erklæringer side 1 - 810602/hko;
  2  6230       integer
  2  6231         cs_op,cs_op_retur,cs_talevejsswitch,cs_tvswitch_adgang,cs_tv_switch_adm,
  2  6232         cs_tvswitch_input, cs_op_iomedd, bs_opk_alarm, cs_opk_alarm, cs_cqf,
  2  6233         cs_op_spool, cs_op_medd, ss_op_spool_tomme, ss_op_spool_fulde,
  2  6234         cs_opk_alarm_ur, cs_opk_alarm_ur_ret, sidste_tv_brugt;
  2  6235       integer array
  2  6236         cqf_tabel(1:max_cqf*cqf_lgd//2),
  2  6237         operatørmaske(1:op_maske_lgd//2),
  2  6238         op_talevej(0:max_antal_operatører),
  2  6239         tv_operatør(0:max_antal_taleveje),
  2  6240         opk_alarm(1:max_antal_operatører*(opk_alarm_tab_lgd//2)),
  2  6241         op_spool_buf(1:op_spool_postantal*(op_spool_postlgd//2)),
  2  6242         ant_i_opkø,
  2  6243         cs_operatør,
  2  6244         cs_op_fil(1:max_antal_operatører);
  2  6245       boolean
  2  6246         op_cqf_tab_ændret;
  2  6247       integer field
  2  6248         op_spool_kilde;
  2  6249       real field
  2  6250         op_spool_tid;
  2  6251       long array field
  2  6252         op_spool_text;
  2  6253       zone z_tv_in, z_tv_out(128,1,tvswitch_fejl);
  2  6254       zone array z_op(max_antal_operatører,320,1,op_fejl);
  2  6255     \f

  2  6255     message procedure op_fejl side 1 - 830310/hko;
  2  6256     
  2  6256       procedure op_fejl(z,s,b);
  2  6257         integer            s,b;
  2  6258         zone             z;
  2  6259       begin
  3  6260         disable begin
  4  6261           integer array iz(1:20);
  4  6262           integer i,j,k,n;
  4  6263           integer array field iaf,iaf1,msk;
  4  6264           boolean input;
  4  6265           real array field laf,laf1;
  4  6266     
  4  6266           getzone6(z,iz);
  4  6267           iaf:=laf:=2;
  4  6268           input:= iz(13) = 1;
  4  6269           for laf1:= 0 step 8 until (max_antal_operatører-1)*8 do
  4  6270             if iz.laf(1)=terminal_navn.laf1(1) and
  4  6271                iz.laf(2)=terminal_navn.laf1(2) then j:= laf1//8 + 1;
  4  6272                                                          
  4  6272     <*+2*> if testbit31 then
  4  6273     <**>   begin
  5  6274     <**>     write(out,"nl",1,<:blockprocedure: opfejl, operatørnr::>,j,"nl",1,
  5  6275     <**>       <:s=:>); outintbits(out,s);
  5  6276     <**>     write(out,"nl",1,<:b=:>,b,"sp",1,if input then <:input:>
  5  6277     <**>       else <:output:>,"nl",1);
  5  6278     <**>     setposition(out,0,0);
  5  6279     <**>   end;
  4  6280     <*-2*>
  4  6281           iaf:=j*terminal_beskr_længde;
  4  6282           k:=1;
  4  6283     
  4  6283           i:= terminal_tab.iaf.terminal_tilstand;
  4  6284           if i shift(-21) < 4 and (s <> (1 shift 21 +2)  <*or -,input*>) then
  4  6285             fejlreaktion(17<*ydre enhed status*>,s,string iz.laf(increase(k)),
  4  6286                          1 shift 12 <*binært*> +1 <*fortsæt*>);
  4  6287           if s <> (1 shift 21 +2) then
  4  6288           begin
  5  6289             terminal_tab.iaf.terminal_tilstand:= 1 shift 23
  5  6290               + terminal_tab.iaf.terminal_tilstand extract 23;
  5  6291             tofrom(opkaldsflag,alle_operatører,op_maske_lgd);
  5  6292             sæt_bit_ia(opkaldsflag,j,0);
  5  6293             if sæt_bit_ia(operatørmaske,j,0)=1 then
  5  6294             for k:= j, 65 step 1 until top_bpl_gruppe do
  5  6295             begin
  6  6296               msk:= k*op_maske_lgd;
  6  6297               if læsbit_ia(bpl_def.msk,j) then 
  6  6298     <**>      begin
  7  6299                 n:= 0;
  7  6300                 for i:= 1 step 1 until max_antal_operatører do
  7  6301                 if læsbit_ia(bpl_def.msk,i) then
  7  6302                 begin
  8  6303                   iaf1:= i*terminal_beskr_længde;
  8  6304                   if terminal_tab.iaf1.terminal_tilstand shift (-21) < 3 then
  8  6305                     n:= n+1;
  8  6306                 end;  
  7  6307                 bpl_tilst(j,1):= n;
  7  6308               end;
  6  6309     <**> <*
  6  6310                 bpl_tilst(j,1):= bpl_tilst(j,1)-1;
  6  6311       *>    end;
  5  6312             signal_bin(bs_mobil_opkald);
  5  6313           end;
  4  6314     
  4  6314           if input or -,input then
  4  6315           begin
  5  6316             z(1):=real <:<'?'><'?'><'em'>:>;
  5  6317             b:=2;
  5  6318           end;
  4  6319         end; <*disable*>
  3  6320       end op_fejl;
  2  6321     \f

  2  6321     message procedure tvswitch_fejl side 1 - 940426/cl;
  2  6322     
  2  6322       procedure tvswitch_fejl(z,s,b);
  2  6323         integer                 s,b;
  2  6324         zone                  z;
  2  6325       begin
  3  6326         disable begin
  4  6327           integer array iz(1:20);
  4  6328           integer i,j,k;
  4  6329           integer array field iaf;
  4  6330           boolean input;
  4  6331           real array field raf;
  4  6332     
  4  6332           getzone6(z,iz);
  4  6333           iaf:=raf:=2;
  4  6334           input:= iz(13) = 1;
  4  6335     <*+2*> if testbit31 then
  4  6336     <**>   begin
  5  6337     <**>     write(out,"nl",1,<:blockprocedure: tvswitch:>,"nl",1,
  5  6338     <**>       <:s=:>); outintbits(out,s);
  5  6339     <**>     write(out,"nl",1,<:b=:>,b,"sp",1,if input then <:input:>
  5  6340     <**>       else <:output:>,"nl",1);
  5  6341     <**>     skrivhele(out,z,b,5);
  5  6342     <**>     setposition(out,0,0);
  5  6343     <**>   end;
  4  6344     <*-2*>
  4  6345           k:=1;
  4  6346           if s <> (1 shift 21 +2) then
  4  6347             fejlreaktion(17<*ydre enhed status*>,s,string iz.raf(increase(k)),
  4  6348                          1 shift 12 <*binært*> +1 <*fortsæt*>);
  4  6349     
  4  6349           if input or -,input then
  4  6350           begin
  5  6351             z(1):=real <:<'em'>:>;
  5  6352             b:=2;
  5  6353           end;
  4  6354         end; <*disable*>
  3  6355         if testbit22 and (s <> (1 shift 21 +2)) then delay(60);
  3  6356       end tvswitch_fejl;
  2  6357     
  2  6357     procedure skriv_talevejs_tab(z);
  2  6358       zone z;
  2  6359     begin
  3  6360       write(z,"nl",2,<:talevejsswitch::>);
  3  6361       write(z,"nl",1,<:  operatører::>,"nl",1);
  3  6362       for i:= 1 step 1 until max_antal_operatører do
  3  6363       begin
  4  6364         write(z,<< dd>,i,":",1,op_talevej(i));
  4  6365         if i mod 8=0 then outchar(z,'nl');
  4  6366       end;
  3  6367       write(z,"nl",1,<:  taleveje::>,"nl",1);
  3  6368       for i:= 1 step 1 until max_antal_taleveje do
  3  6369       begin
  4  6370         write(z,<< dd>,i,":",1,tv_operatør(i));
  4  6371         if i mod 8=0 then outchar(z,'nl');
  4  6372       end;
  3  6373       write(z,"nl",3);
  3  6374     end;                                                      
  2  6375     \f

  2  6375     message procedure skriv_opk_alarm_tab side 1;
  2  6376     
  2  6376     procedure skriv_opk_alarm_tab(z);
  2  6377     zone                          z;
  2  6378     begin
  3  6379       integer nr;
  3  6380       integer array field tab;
  3  6381       real t;
  3  6382     
  3  6382       write(z,"nl",2,<:opkaldsalarmtabel::>,"nl",1,
  3  6383         <:operatør    kmdo tilst gl.tilst længde start:>,"nl",1);
  3  6384       for nr:=1 step 1 until max_antal_operatører do
  3  6385       begin
  4  6386         tab:= (nr-1)*opk_alarm_tab_lgd;
  4  6387         write(z,<< dd >,nr,true,6,string bpl_navn(nr),<::   :>,
  4  6388           case opk_alarm.tab.alarm_kmdo+1 of ("-","B","C","F"),1,"sp",5,
  4  6389           case opk_alarm.tab.alarm_tilst+1 of ("-","B","C","?"),1,"sp",8,
  4  6390           case opk_alarm.tab.alarm_gtilst+1 of ("-","B","C","?"),1,"sp",2,
  4  6391           <<-dddd>,opk_alarm.tab.alarm_lgd,"sp",1,
  4  6392           << zddddd>,systime(4,opk_alarm.tab.alarm_start,t),t,
  4  6393           "nl",1);
  4  6394       end;
  3  6395     end;
  2  6396     \f

  2  6396     message procedure skriv_op_spool_buf side 1;
  2  6397     
  2  6397     procedure skriv_op_spool_buf(z);
  2  6398       zone                       z;
  2  6399     begin
  3  6400       integer array field ref;
  3  6401       integer nr, kilde;
  3  6402       real dato, kl; 
  3  6403     
  3  6403       write(z,"nl",2,<:op<'_'>spool<'_'>buffer::>,"nl",1);
  3  6404       for nr:= 1 step 1 until op_spool_postantal do
  3  6405       begin
  4  6406         write(z,"nl",1,<:nr.::>,<< dd>,nr);
  4  6407         ref:= (nr-1)*op_spool_postlgd;
  4  6408         if op_spool_buf.ref.op_spool_tid <> real<::> then
  4  6409         begin
  5  6410           kilde:= op_spool_buf.ref.op_spool_kilde;
  5  6411           dato:= systime(4,op_spool_buf.ref.op_spool_tid,kl);
  5  6412           write(z,<: fra op:>,<<d>,kilde,"sp",1,
  5  6413             if kilde=0 then <:SYSOP:> else string bplnavn(kilde),
  5  6414             "sp",1,<<zddddd.dddddd>,dato+kl/1000000,"nl",1,
  5  6415             op_spool_buf.ref.op_spool_text);
  5  6416         end;
  4  6417         outchar(z,'nl');
  4  6418       end;
  3  6419     end;
  2  6420     
  2  6420     procedure skriv_cqf_tabel(z,lang);
  2  6421       value                     lang;
  2  6422       zone                    z;
  2  6423       boolean                   lang;
  2  6424     begin
  3  6425       integer array field ref;
  3  6426       integer i,ant;
  3  6427       real dato, kl;
  3  6428     
  3  6428       ant:= 0;
  3  6429       write(z,"nl",1,<:CQF testbus-tabel::>,"nl",2,(
  3  6430         if -,lang then
  3  6431         <: tnr. navn  fejl      sidste_ok   tnr. navn  fejl      sidste_ok:>
  3  6432         <* 9900 XXxxx    1  yymmdd.ttmmss   9900 XXxxx    1  yymmdd.ttmmss*>
  3  6433         else
  3  6434         <:nr: tnr. navn  fejl      sidste_ok     næste_test:>),"nl",1);
  3  6435         <*01: 9900 XXxxx    1  yymmdd.ttmmss  yymmdd.hhttmm*>
  3  6436       for i:= 1 step 1 until max_cqf do
  3  6437       begin
  4  6438         ref:= (i-1)*cqf_lgd;
  4  6439         if cqf_tabel.ref.cqf_bus<>0 or lang then
  4  6440         begin
  5  6441           ant:= ant+1;
  5  6442           if lang then
  5  6443             write(z,<<dd>,i,":",1);
  5  6444           write(z,<< dddd>,cqf_tabel.ref.cqf_bus,"sp",1,true,6,
  5  6445             string cqf_tabel.ref.cqf_id,<<dddd>,cqf_tabel.ref.cqf_fejl);
  5  6446           if cqf_tabel.ref.cqf_ok_tid<>real<::> then
  5  6447           begin
  6  6448             dato:= systime(4,cqf_tabel.ref.cqf_ok_tid,kl);
  6  6449             write(z,<<  zddddd.dddddd>,dato+kl/1000000);
  6  6450           end
  5  6451           else
  5  6452             write(z,"sp",14,"?",1);
  5  6453           if lang then
  5  6454           begin
  6  6455             if cqf_tabel.ref.cqf_næste_tid<>real<::> then
  6  6456             begin
  7  6457               dato:= systime(4,cqf_tabel.ref.cqf_næste_tid,kl);
  7  6458               write(z,<<  zddddd.dddddd>,dato+kl/1000000);
  7  6459             end
  6  6460             else
  6  6461               write(z,"sp",14,"?",1);
  6  6462           end
  5  6463           else
  5  6464             write(z,"sp",2);
  5  6465           if lang or (ant mod 2)=0 then outchar(z,'nl');
  5  6466         end;
  4  6467       end;
  3  6468       if -,lang and (ant mod 2)=1 then outchar(z,'nl');
  3  6469     end;
  2  6470     
  2  6470         procedure sorter_cqftab(l,u);
  2  6471           value                 l,u;
  2  6472           integer               l,u;
  2  6473         begin
  3  6474           integer array field ii,jj;
  3  6475           integer array ww,xx(1:(cqf_lgd+1)//2);
  3  6476     
  3  6476           ii:= ((l+u)//2 - 1)*cqf_lgd;
  3  6477           tofrom(xx,cqf_tabel.ii,cqf_lgd);
  3  6478           ii:= (l-1)*cqf_lgd; jj:= (u-1)*cqf_lgd;
  3  6479           repeat
  3  6480             while (cqf_tabel.ii(1) < xx(1)) do ii:= ii+cqf_lgd;
  3  6481             while (xx(1) < cqf_tabel.jj(1)) do jj:= jj-cqf_lgd;
  3  6482             if ii <= jj then
  3  6483             begin
  4  6484               tofrom(ww,cqf_tabel.ii,cqf_lgd);
  4  6485               tofrom(cqf_tabel.ii,cqf_tabel.jj,cqf_lgd);
  4  6486               tofrom(cqf_tabel.jj,ww,cqf_lgd);
  4  6487               ii:= ii+cqf_lgd;
  4  6488               jj:= jj-cqf_lgd;
  4  6489             end;
  3  6490           until ii>jj;
  3  6491           if l < jj//cqf_lgd+1 then sorter_cqftab(l,jj//cqf_lgd+1);
  3  6492           if ii//cqf_lgd+1 < u then sorter_cqftab(ii//cqf_lgd+1,u);
  3  6493         end;
  2  6494     \f

  2  6494     message procedure ht_symbol side 1 - 851001/cl;
  2  6495     
  2  6495     procedure ht_symbol(z);
  2  6496       zone              z;
  2  6497     write(z,"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>,<:
  2  6498     
  2  6498     
  2  6498     
  2  6498     
  2  6498                         @@         @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  2  6498                        @@         @@                               @@
  2  6498                       @@         @@                               @@
  2  6498                      @@         @@                               @@
  2  6498                     @@         @@@@@@@@@@@@@         @@@@@@@@@@@@@
  2  6498                    @@                               @@
  2  6498                   @@                               @@
  2  6498                  @@                               @@
  2  6498                 @@         @@@@@@@@@@@@@         @@
  2  6498                @@         @@         @@         @@
  2  6498               @@         @@         @@         @@
  2  6498              @@         @@         @@         @@
  2  6498             @@@@@@@@@@@@@         @@@@@@@@@@@@@
  2  6498     :>,"esc" add 128,1,<:Æ24;1H:>);
  2  6499     \f

  2  6499     message procedure definer_taster side 1 - 891214,cl;
  2  6500     
  2  6500     procedure definer_taster(nr);
  2  6501       value                  nr;
  2  6502       integer                nr;
  2  6503     begin
  3  6504     
  3  6504       setposition(z_op(nr),0,0);
  3  6505       write(z_op(nr),
  3  6506         "esc" add 128,1, <:P1;2;0ø58/1B4E450D:>,
  3  6507         "esc" add 128,1, <:Ø:>, <* f1    = <esc>NE<cr> *>
  3  6508         "esc" add 128,1, <:P1;2;0ø59/1B4F500D:>,
  3  6509         "esc" add 128,1, <:Ø:>, <* f2    = <esc>OP<cr> *>
  3  6510         "esc" add 128,1, <:P1;2;0ø5A/1B4F502C560D:>,
  3  6511         "esc" add 128,1, <:Ø:>, <* f3    = <esc>OP,V<cr> *>
  3  6512         "esc" add 128,1, <:P1;2;0ø5B/1B4F502C5420:>,
  3  6513         "esc" add 128,1, <:Ø:>, <* f4    = <esc>OP,T<sp> *>
  3  6514         "esc" add 128,1, <:P1;2;0ø5C/1B4F502C4120:>,
  3  6515         "esc" add 128,1, <:Ø:>, <* f5    = <esc>OP,A<sp> *>
  3  6516         "esc" add 128,1, <:P1;2;1ø5C/1B4F502C4120:>,
  3  6517         "esc" add 128,1, <:Ø:>, <* s-f5  = <esc>OP,A<sp> *>
  3  6518         "esc" add 128,1, <:P1;2;0ø5D/1B4D452C4120:>,
  3  6519         "esc" add 128,1, <:Ø:>, <* f6    = <esc>ME,A<sp> *>
  3  6520         "esc" add 128,1, <:P1;2;1ø5D/1B4D452C4120:>,
  3  6521         "esc" add 128,1, <:Ø:>, <* s-f6  = <esc>ME,A<sp> *>
  3  6522         "esc" add 128,1, <:P1;2;0ø5E/1B4F5020:>,
  3  6523         "esc" add 128,1, <:Ø:>, <* f7    = <esc>OP<sp>   *>
  3  6524         "esc" add 128,1, <:P1;2;0ø5F/1B56450D:>,
  3  6525         "esc" add 128,1, <:Ø:>, <* f8    = <esc>VE<cr>   *>
  3  6526         "esc" add 128,1, <:P1;2;0ø60/1B4D4F20:>,
  3  6527         "esc" add 128,1, <:Ø:>, <* f9    = <esc>MO<sp>   *>
  3  6528         "esc" add 128,1, <:P1;2;1ø60/1B520D:>,
  3  6529         "esc" add 128,1, <:Ø:>, <* s-f9  = <esc>R<cr>    *>
  3  6530         "esc" add 128,1, <:P1;2;0ø61/1B53540D:>,
  3  6531         "esc" add 128,1, <:Ø:>, <* f10   = <esc>ST<cr>   *>
  3  6532         "esc" add 128,1, <:P1;2;0ø62/1B474520:>,
  3  6533         "esc" add 128,1, <:Ø:>, <* f11  = <esc>GE<sp> *>
  3  6534         "esc" add 128,1, <:P1;2;1ø62/1B47452C4720:>,
  3  6535         "esc" add 128,1, <:Ø:>, <* s-f11  = <esc>GE,G<sp> *>
  3  6536         "esc" add 128,1, <:P1;2;0ø63/1B47452C560D:>,
  3  6537         "esc" add 128,1, <:Ø:>, <* f12  = <esc>GE,V<cr> *>
  3  6538         "esc" add 128,1, <:P1;2;1ø63/1B47452C540D:>,
  3  6539         "esc" add 128,1, <:Ø:>, <* s-f12  = <esc>GE,T<sp> *>
  3  6540         "esc" add 128,1, <:P1;2;0ø7B/1B564F2C4920:>,
  3  6541         "esc" add 128,1, <:Ø:>, <* Ins   = <esc>VO,I<sp> *>
  3  6542         "esc" add 128,1, <:P1;2;0ø79/1B564F2C5520:>,
  3  6543         "esc" add 128,1, <:Ø:>, <* Del   = <esc>VO,U<sp> *>
  3  6544         "esc" add 128,1, <:P1;2;0ø7F/1B564F2C4620:>,
  3  6545         "esc" add 128,1, <:Ø:>, <* Home  = <esc>VO,F<sp> *>
  3  6546         "esc" add 128,1, <:P1;2;0ø7A/1B564F2C5220:>,
  3  6547         "esc" add 128,1, <:Ø:>, <* End   = <esc>VO,R<sp> *>
  3  6548         "esc" add 128,1, <:P1;2;0ø6F/1B564F2C4C20:>,
  3  6549         "esc" add 128,1, <:Ø:>, <* PgUp  = <esc>VO,L<sp> *>
  3  6550         "esc" add 128,1, <:P1;2;0ø7E/1B564F2C4220:>,
  3  6551         "esc" add 128,1, <:Ø:>, <* PgDn  = <esc>VO,B<sp> *>
  3  6552         "esc" add 128,1, <:P1;2;0ø0E/082008:>,
  3  6553         "esc" add 128,1, <:Ø:>, <* Back  = <bs><sp><bs> *>
  3  6554         <::>);
  3  6555       end;
  2  6556     \f

  2  6556     message procedure skriv_terminal_tab side 1 - 820301/hko;
  2  6557     
  2  6557       procedure skriv_terminal_tab(z);
  2  6558         zone                       z;
  2  6559         begin
  3  6560           integer array field ref;
  3  6561           integer t1,i,j,id,k;
  3  6562     
  3  6562           write(z,"ff",1,<:
  3  6563           ******* terminalbeskrivelser ********
  3  6564     
  3  6564                         # a k l p m m n o
  3  6565                         1 l a y a o o ø p
  3  6566     nr tilst   -  vnt R 0 l t t s n b d t type ident    id i kø:>);
  3  6567     <*
  3  6568     01   15 .... .... X X X X X X X X X X MEDD 9999.abc 888B/77
  3  6569     *>
  3  6570           for i:=1 step 1 until max_antal_operatører do
  3  6571           begin
  4  6572             ref:=i*terminal_beskr_længde;
  4  6573             t1:=terminal_tab.ref(1);
  4  6574             id:=terminal_tab.ref(2);
  4  6575             k:=terminal_tab.ref(3);
  4  6576             write(z,"nl",1,"sp",4,<<dd>,i,<< dddd>,t1 shift(-21),
  4  6577               t1 shift(-16) extract 5,t1 shift(-12) extract 4,
  4  6578               "sp",1);
  4  6579             for j:=11 step -1 until 2 do
  4  6580               write(z,if læs_bit_i(t1,j) then "X" else "sp",1,"sp",1);
  4  6581             write(z,case t1 extract 2 +1 of (<:-   :>,<:OPK :>,<:MEDD:>,<:GNM :>),
  4  6582               "sp",1);
  4  6583             skriv_id(z,id,9);
  4  6584             skriv_id(z,k,9);
  4  6585           end;
  3  6586           write(z,"nl",2,<:samtaleflag::>,"nl",1);
  3  6587           outintbits_ia(z,samtaleflag,1,op_maske_lgd//2);
  3  6588           write(z,"nl",1);
  3  6589         end skriv_terminal_tab;
  2  6590     \f

  2  6590     message procedure h_operatør side 1 - 810520/hko;
  2  6591     
  2  6591       <* hovedmodulkorutine for operatørterminaler *>
  2  6592       procedure h_operatør;
  2  6593       begin
  3  6594         integer array field op_ref;
  3  6595         integer k,nr,ant,ref,dest_sem;
  3  6596         procedure skriv_hoperatør(zud,omfang);
  3  6597           value                     omfang;
  3  6598           zone                  zud;
  3  6599           integer                   omfang;
  3  6600           begin
  4  6601     
  4  6601             write(zud,"nl",1,<:+++ hovedmodul operatør  :>);
  4  6602             if omfang>0 then
  4  6603             disable begin integer x;
  5  6604               trap(slut);
  5  6605               write(zud,"nl",1,
  5  6606                 <:  op_ref:    :>,op_ref,"nl",1,
  5  6607                 <:  nr:        :>,nr,"nl",1,
  5  6608                 <:  ant:       :>,ant,"nl",1,
  5  6609                 <:  ref:       :>,ref,"nl",1,
  5  6610                 <:  k:         :>,k,"nl",1,
  5  6611                 <:  dest_sem:  :>,dest_sem,"nl",1,
  5  6612                 <::>);
  5  6613               skriv_coru(zud,coru_no(200));
  5  6614     slut:
  5  6615             end;
  4  6616          end skriv_hoperatør;
  3  6617     
  3  6617       trap(hop_trap);
  3  6618       stack_claim(if cm_test then 198 else 146);
  3  6619     
  3  6619     <*+2*>
  3  6620       if testbit8 and overvåget or testbit28 then
  3  6621         skriv_hoperatør(out,0);
  3  6622     <*-2*>
  3  6623     \f

  3  6623     message procedure h_operatør side 2 - 820304/hko;
  3  6624     
  3  6624       repeat
  3  6625         wait_ch(cs_op,op_ref,true,-1);
  3  6626     <*+4*>
  3  6627         if (d.op_ref.optype and (op_optype or gen_optype)) extract 12 =0
  3  6628         then fejlreaktion(12<*operationstype*>,op_ref,<:operatør:>,1);
  3  6629     <*-4*>
  3  6630     
  3  6630         k:=d.op_ref.opkode extract 12;
  3  6631         dest_sem:=
  3  6632           if k=0 and d.opref.kilde=299 then cs_talevejsswitch else
  3  6633           if k=0 then cs_operatør(d.op_ref.kilde mod 100) else
  3  6634           if k=1 or k=2 or k=43 then cs_operatør(d.op_ref.data(1)) else
  3  6635           if k=4 then cs_operatør(d.op_ref.data(2)) else
  3  6636           if k=37 then cs_op_spool else
  3  6637           if k=40 or k=38 then 0
  3  6638           else -1;
  3  6639     <*+4*>
  3  6640         if dest_sem=-1 then
  3  6641         begin
  4  6642           fejl_reaktion(2<*operationskode*>,k,<:hovedmodul operatør:>,1);
  4  6643           signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  4  6644         end
  3  6645         else
  3  6646     <*-4*>
  3  6647         if k=40 then
  3  6648         begin
  4  6649           dest_sem:= d.op_ref.retur;
  4  6650           d.op_ref.retur:= cs_op_retur;
  4  6651           for nr:= 1 step 1 until max_antal_operatører do
  4  6652           begin
  5  6653             inspect_ch(cs_operatør(nr),genoptype,ant);
  5  6654             if ant < 0 and (læsbit_ia(opkaldsflag,nr) or læsbit_ia(kanalflag,nr)
  5  6655                             or læsbit_ia(samtaleflag,nr)) 
  5  6656                        and læsbit_ia(operatørmaske,nr) then
  5  6657             begin
  6  6658               ref:= op_ref;
  6  6659               signal_ch(cs_operatør(nr),opref,d.op_ref.optype);
  6  6660     <*V*>     wait_ch(cs_op_retur,op_ref,true,-1);
  6  6661     <*+4*>    if op_ref <> ref then
  6  6662                 fejlreaktion(11<*fr.post*>,op_ref,
  6  6663                   <:opdater opkaldskø,retur:>,0);
  6  6664     <*-4*>
  6  6665             end;
  5  6666           end;
  4  6667           d.op_ref.retur:= dest_sem;
  4  6668           signal_ch(dest_sem,op_ref,d.op_ref.optype);
  4  6669         end
  3  6670         else
  3  6671         if k=38 then
  3  6672         begin
  4  6673           dest_sem:= d.opref.retur;
  4  6674           d.op_ref.retur:= cs_op_retur;
  4  6675           for nr:= 1 step 1 until max_antal_operatører do
  4  6676           begin
  5  6677             if d.opref.data.op_spool_kilde <> nr then
  5  6678             begin
  6  6679               ref:= op_ref;
  6  6680               signal_ch(cs_operatør(nr),opref,d.op_ref.optype);
  6  6681     <*V*>     wait_ch(cs_op_retur,op_ref,true,-1);
  6  6682     <*+4*>    if op_ref <> ref then
  6  6683                 fejlreaktion(11<*fr.post*>,op_ref,
  6  6684                   <:opdater opkaldskø,retur:>,0);
  6  6685     <*-4*>
  6  6686             end;
  5  6687           end;
  4  6688           if d.opref.data.op_spool_kilde<>0 then
  4  6689           begin
  5  6690             ref:= op_ref;
  5  6691             nr:= d.opref.data.op_spool_kilde;
  5  6692             signal_ch(cs_operatør(nr),opref,d.op_ref.optype);
  5  6693     <*V*>   wait_ch(cs_op_retur,op_ref,true,-1);
  5  6694     <*+4*>  if op_ref <> ref then
  5  6695               fejlreaktion(11<*fr.post*>,op_ref,
  5  6696                 <:operatørmedddelelse, retur:>,0);
  5  6697     <*-4*>
  5  6698             d.op_ref.retur:= dest_sem;
  5  6699             signal_ch(dest_sem,op_ref,d.op_ref.optype);
  5  6700           end
  4  6701           else
  4  6702           begin
  5  6703             d.op_ref.retur:= dest_sem;
  5  6704             signal_ch(cs_io,op_ref,d.op_ref.optype);
  5  6705           end;
  4  6706         end
  3  6707         else
  3  6708         begin
  4  6709     \f

  4  6709     message procedure h_operatør side 3 - 810601/hko;
  4  6710     
  4  6710           if k=8<*ekskluder*> then <*afbryd kommando v. timeout*>
  4  6711           begin
  5  6712             iaf:=d.op_ref.data(1)*terminal_beskr_længde;
  5  6713             terminal_tab.iaf.terminal_tilstand:= 7 shift 21
  5  6714               +terminal_tab.iaf.terminal_tilstand extract 21;
  5  6715           end;
  4  6716           signal_ch(dest_sem,op_ref,d.op_ref.optype);
  4  6717         end;
  3  6718       until false;
  3  6719     
  3  6719     hop_trap:
  3  6720       disable skriv_hoperatør(zbillede,1);
  3  6721       end h_operatør;
  2  6722     \f

  2  6722     message procedure operatør side 1 - 820304/hko;
  2  6723     
  2  6723       procedure operatør(nr);
  2  6724         value          nr;
  2  6725         integer        nr;
  2  6726       begin
  3  6727         integer array field op_ref,ref,vt_op,iaf,tab;
  3  6728         integer i,kode,aktion,status,tilstand,bv,bs,bs_tilst,
  3  6729                 kanal,opgave,pos,indeks,sep,sluttegn,rkom, par1, par2,
  3  6730                 vogn,ll,garage,skærmmåde,res,s_kanal,v_kanal;
  3  6731         real kommstart,kommslut;
  3  6732     \f

  3  6732     message procedure operatør side 1a - 820301/hko;
  3  6733     
  3  6733         procedure skriv_operatør(zud,omfang);
  3  6734           value                      omfang;
  3  6735           zone                   zud;
  3  6736           integer                    omfang;
  3  6737           begin integer i;
  4  6738     
  4  6738             i:= write(zud,"nl",1,<:+++ operatør nr::>,nr);
  4  6739             write(zud,"sp",26-i);
  4  6740             if omfang > 0 then
  4  6741             disable begin
  5  6742               integer x;
  5  6743               trap(slut);
  5  6744               write(zud,"nl",1,
  5  6745                 <:  op-ref:    :>,op_ref,"nl",1,
  5  6746                 <:  kode:      :>,kode,"nl",1,
  5  6747                 <:  aktion:    :>,aktion,"nl",1,
  5  6748                 <:  ref:       :>,ref,"nl",1,
  5  6749                 <:  vt_op:     :>,vt_op,"nl",1,
  5  6750                 <:  iaf:       :>,iaf,"nl",1,
  5  6751                 <:  status:    :>,status,"nl",1,
  5  6752                 <:  tilstand:  :>,tilstand,"nl",1,
  5  6753                 <:  bv:        :>,bv,"nl",1,
  5  6754                 <:  bs:        :>,bs,"nl",1,
  5  6755                 <:  bs-tilst:  :>,bs_tilst,"nl",1,
  5  6756                 <:  kanal:     :>,kanal,"nl",1,
  5  6757                 <:  opgave:    :>,opgave,"nl",1,
  5  6758                 <:  pos:       :>,pos,"nl",1,
  5  6759                 <:  indeks:    :>,indeks,"nl",1,
  5  6760                 <:  sep:       :>,sep,"nl",1,
  5  6761                 <:  sluttegn:  :>,sluttegn,"nl",1,
  5  6762                 <:  vogn:      :>,vogn,"nl",1,
  5  6763                 <:  ll:        :>,ll,"nl",1,
  5  6764                 <:  garage:    :>,garage,"nl",1,
  5  6765                 <:  skærmmåde: :>,skærmmåde,"nl",1,
  5  6766                 <:  res:       :>,res,"nl",1,
  5  6767                 <:  tab:       :>,tab,"nl",1,
  5  6768                 <:  rkom:      :>,rkom,"nl",1,
  5  6769                 <:  par1:      :>,par1,"nl",1,
  5  6770                 <:  par2:      :>,par2,"nl",1,
  5  6771                 <::>);
  5  6772               skriv_coru(zud,coru_no(200+nr));
  5  6773     slut:
  5  6774             end;
  4  6775           end skriv_operatør;
  3  6776     \f

  3  6776     message procedure skærmstatus side 1 - 810518/hko;
  3  6777     
  3  6777       integer
  3  6778       procedure skærmstatus(tilstand,b_v,b_s,b_s_tilst);
  3  6779         integer             tilstand,b_v,b_s,b_s_tilst;
  3  6780         begin
  4  6781           integer i,j;
  4  6782     
  4  6782           i:= terminal_tab.ref(1);
  4  6783           b_s:= terminal_tab.ref(2);
  4  6784           b_s_tilst:= i extract 12;
  4  6785           j:= b_s_tilst extract 3;
  4  6786           b_v:= i shift (-12) extract 4;
  4  6787           tilstand:= i shift (-21);
  4  6788     
  4  6788           skærmstatus:= if b_v = 0 and b_s = 0 then 0 else
  4  6789                         if b_v = 0 and j = 1<*opkald*> then 1 else
  4  6790                         if b_v = 0 and j = 2<*specialopkald*>  then 2 else
  4  6791                         if (bv<>0) and (bs<>0) and (j=3) then 4 else 3;
  4  6792         end skærmstatus;
  3  6793     \f

  3  6793     message procedure skriv_skærm side 1 - 810522/hko;
  3  6794     
  3  6794       procedure skriv_skærm(nr);
  3  6795         value               nr;
  3  6796         integer             nr;
  3  6797         begin
  4  6798           integer i;
  4  6799     
  4  6799           disable definer_taster(nr);
  4  6800     
  4  6800           skriv_skærm_maske(nr);
  4  6801           skriv_skærm_opkaldskø(nr);
  4  6802           skriv_skærm_b_v_s(nr);
  4  6803           for i:= 1 step 1 until max_antal_kanaler do
  4  6804             skriv_skærm_kanal(nr,i);
  4  6805           cursor(z_op(nr),1,1);
  4  6806     <*V*> setposition(z_op(nr),0,0);
  4  6807         end skriv_skærm;
  3  6808     \f

  3  6808     message procedure skriv_skærm_id side 1 - 830310/hko;
  3  6809     
  3  6809       procedure skriv_skærm_id(nr,id,nød);
  3  6810         value                  nr,id,nød;
  3  6811         integer                nr,id;
  3  6812         boolean                      nød;
  3  6813         begin
  4  6814           integer linie,løb,bogst,i,p;
  4  6815     
  4  6815           i:= id shift (-22);
  4  6816     
  4  6816           case i+1 of
  4  6817           begin
  5  6818             begin <* busnr *>
  6  6819               p:= write(z_op(nr),if nød then "*" else "sp",1,<<bddd>,
  6  6820                     (id extract 14) mod 10000);
  6  6821               if id shift (-14) extract 8 > 0 then
  6  6822                 p:= p+write(z_op(nr),".",1,
  6  6823                     string bpl_navn(id shift (-14) extract 8));
  6  6824               write(z_op(nr),"sp",11-p);
  6  6825             end;
  5  6826     
  5  6826             begin <*linie/løb*>
  6  6827               linie:= id shift (-12) extract 10;
  6  6828               bogst:= id shift (-7) extract 5;
  6  6829               if bogst > 0 then bogst:= bogst +'A'-1;
  6  6830               løb:= id extract 7;
  6  6831               write(z_op(nr),if nød then "*" else "sp",1,
  6  6832                 "sp",if bogst=0 then 1 else 0,<<ddd>,linie,<<d>,
  6  6833                 false add bogst,1,"/",1,løb,
  6  6834                 "sp",if løb > 9 then 3 else 4);
  6  6835             end;
  5  6836     
  5  6836             begin <*gruppe*>
  6  6837               write(z_op(nr),<:GRP  :>);
  6  6838               if id shift (-21) extract 1 = 1 then
  6  6839               begin <*specialgruppe*>
  7  6840                 løb:= id extract 7;
  7  6841                 write(z_op(nr),"sp",if løb > 9 then 1 else 2,<:G:>,
  7  6842                   <<d>,løb,"sp",2);
  7  6843               end
  6  6844               else
  6  6845               begin
  7  6846                 linie:= id shift (-5) extract 10;
  7  6847                 bogst:= id extract 5;
  7  6848                 if bogst > 0 then bogst:= bogst +'A'-1;
  7  6849                 write(z_op(nr),"sp",if bogst > 0 then 1 else 0,<<ddd>,linie,
  7  6850                   false add bogst,1,"sp",2);
  7  6851               end;
  6  6852             end;
  5  6853     
  5  6853             <* kanal eller område *>
  5  6854             begin
  6  6855               linie:= (id shift (-20) extract 2) + 1;
  6  6856               case linie of
  6  6857               begin
  7  6858                 write(z_op(nr),"sp",11-write(z_op(nr),
  7  6859                   string kanal_navn(id extract 20)));
  7  6860                 write(z_op(nr),<:K*:>,"sp",9);
  7  6861                 write(z_op(nr),"sp",11-write(z_op(nr),
  7  6862                   <:OMR :>,string område_navn(id extract 20)));
  7  6863                 write(z_op(nr),<:ALLE:>,"sp",7);
  7  6864               end;
  6  6865             end;
  5  6866     
  5  6866           end <* case i *>
  4  6867         end skriv_skærm_id;
  3  6868     \f

  3  6868     message procedure skriv_skærm_kanal side 1 - 820301/hko;
  3  6869     
  3  6869       procedure skriv_skærm_kanal(nr,kanal);
  3  6870         value                     nr,kanal;
  3  6871         integer                   nr,kanal;
  3  6872         begin
  4  6873           integer i,j,k,t,omr;
  4  6874           integer array field tref,kref;
  4  6875           boolean nød;
  4  6876     
  4  6876           tref:= nr*terminal_beskr_længde;
  4  6877           kref:= (kanal-1)*kanal_beskr_længde;
  4  6878           t:= kanaltab.kref.kanal_tilstand;
  4  6879           j:= terminal_tab.tref(1) shift (-12) extract 4; <* b_v kanalnr *>
  4  6880           k:= terminal_tab.tref(2); <* 3 shift 22 +kanal, hvis samtale *>
  4  6881           cursor(z_op(nr),kanal+2,28);
  4  6882           write(z_op(nr),if læsbit_i(kanaltab.kref.kanal_tilstand,10) then "*" else
  4  6883                          if læsbit_i(kanaltab.kref.kanal_tilstand,11) then "+" else
  4  6884                          " ",1," ",1);
  4  6885           write(z_op(nr),true,6,string kanal_navn(kanal));
  4  6886           omr:= if kanal_id(kanal) shift (-5) extract 3 = 2 then
  4  6887                   pabx_id(kanal_id(kanal) extract 5)
  4  6888                 else
  4  6889                   radio_id(kanal_id(kanal) extract 5);
  4  6890           for i:= -2 step 1 until 0 do
  4  6891           begin
  5  6892             write(z_op(nr),
  5  6893               if område_id(omr,1) shift (8*i) extract 8 = 0 then " "
  5  6894               else false add (område_id(omr,1) shift (8*i) extract 8),1);
  5  6895           end;
  4  6896           write(z_op(nr),<:: :>);
  4  6897           i:= tv_operatør(kanaltab.kref.kanal_tilstand shift (-16));<*operatør*>
  4  6898           if læsbit_ia(kanaltab.kref.kanal_alarm, nr) then
  4  6899           begin
  5  6900             sætbit_ia(kanaltab.kref.kanal_alarm, nr, 0);
  5  6901             <* write(z_op(nr),<:ALARM !:>,"bel",1); *>
  5  6902           end
  4  6903           else
  4  6904           if kanaltab.kref.kanal_tilstand shift (-12) extract 4 = 15 then
  4  6905             write(z_op(nr),<:-:><*UDE AF DRIFT*>)
  4  6906           else
  4  6907           if i > 0 and 
  4  6908               ( i <> nr  
  4  6909               or j = kanal <* kanal = kanalnr for ventepos *>
  4  6910               or (terminal_tab.tref.terminal_tilstand shift (-21) = 1
  4  6911                   <*tilst=samtale*> and k extract 22 = kanal) ) then
  4  6912           begin
  5  6913              write(z_op(nr),<:OPT :>);
  5  6914              if bpl_navn(i)=long<::> then write(z_op(nr),<:op:>,<<d>,i)
  5  6915              else write(z_op(nr),string bpl_navn(i));
  5  6916           end
  4  6917           else
  4  6918           if false then
  4  6919           begin
  5  6920             i:= kanaltab.kref.kanal_id1;
  5  6921             nød:= læsbit_i(kanaltab.kref.kanal_tilstand,3);
  5  6922             skriv_skærm_id(nr,i,nød);
  5  6923             write(z_op(nr),if t extract 2 = 3 then <:GNM :> else <:OPKALDT:>);
  5  6924             i:= kanaltab.kref.kanal_id2;
  5  6925             if i<>0 then skriv_skærm_id(nr,i,false);
  5  6926           end;
  4  6927           write(z_op(nr),"esc" add 128,1,<:ÆK:>);
  4  6928         end skriv_skærm_kanal;
  3  6929     \f

  3  6929     message procedure skriv_skærm_b_v_s side 1 - 810601/hko;
  3  6930     
  3  6930       procedure skriv_skærm_b_v_s(nr);
  3  6931         value                     nr;
  3  6932         integer                   nr;
  3  6933         begin
  4  6934           integer i,j,k,kv,ks,t;
  4  6935           integer array field tref,kref;
  4  6936     
  4  6936           tref:= nr*terminal_beskr_længde;
  4  6937           i:= terminal_tab.tref.terminal_tilstand;
  4  6938           kv:= i shift (-12) extract 4;
  4  6939           ks:= terminaltab.tref(2) extract 20;
  4  6940     <*V*> setposition(z_op(nr),0,0);
  4  6941           cursor(z_op(nr),18,28);
  4  6942           write(z_op(nr),"esc" add 128,1,<:ÆK:>);
  4  6943           cursor(z_op(nr),20,28);
  4  6944           write(z_op(nr),"esc" add 128,1,<:ÆK:>);
  4  6945           cursor(z_op(nr),21,28);
  4  6946           write(z_op(nr),"esc" add 128,1,<:ÆK:>);
  4  6947           cursor(z_op(nr),20,28);
  4  6948           if op_talevej(nr)<>0 then
  4  6949           begin
  5  6950             cursor(z_op(nr),18,28);
  5  6951             write(z_op(nr),<:talevej: :>,<<d>,op_talevej(nr));
  5  6952           end;
  4  6953           if kv <> 0 then
  4  6954           begin
  5  6955             kref:= (kv-1)*kanal_beskr_længde;
  5  6956             j:= if kv<>ks then kanaltab.kref.kanal_id1
  5  6957                 else kanaltab.kref.kanal_id2;
  5  6958             k:= if kv<>ks then kanaltab.kref.kanal_alt_id1
  5  6959                 else kanaltab.kref.kanal_alt_id2;
  5  6960             write(z_op(nr),true,6,string kanal_navn(kv));
  5  6961             skriv_skærm_id(nr,j,kanaltab.kref.kanaltilstand shift(-3) extract 1=1);
  5  6962             skriv_skærm_id(nr,k,false);
  5  6963             write(z_op(nr),if i extract 2 = 3 then <:GNM:> else <:VNT:>);
  5  6964           end;
  4  6965     
  4  6965           cursor(z_op(nr),21,28);
  4  6966           j:= terminal_tab.tref(2);
  4  6967           if i shift (-21) <> 0 <*ikke ledig*> then
  4  6968           begin
  5  6969     \f

  5  6969     message procedure skriv_skærm_b_v_s side 2 - 841210/cl;
  5  6970     
  5  6970             if i shift (-21) = 1 <*samtale*> then
  5  6971             begin
  6  6972               if j shift (-20) = 12 then
  6  6973               begin
  7  6974                 write(z_op(nr),true,6,string kanal_navn(ks));
  7  6975               end
  6  6976               else
  6  6977               begin
  7  6978                 write(z_op(nr),true,6,<:K*:>);
  7  6979                 k:= 0;
  7  6980                 while ks shift (-k) extract 1 = 0 and k<max_antal_kanaler do
  7  6981                   k:= k+1;
  7  6982                 ks:= k;
  7  6983               end;
  6  6984               kref:= (ks-1)*kanal_beskr_længde;
  6  6985               t:= kanaltab.kref.kanaltilstand;
  6  6986               skriv_skærm_id(nr,kanaltab.kref.kanal_id1,
  6  6987                              t shift (-3) extract 1 = 1);
  6  6988               skriv_skærm_id(nr,kanaltab.kref.kanal_alt_id1,false);
  6  6989               write(z_op(nr),if i shift (-11) extract 1 = 1 then <:-P-:> else
  6  6990                 if t shift (-5) extract 1 = 1 then <:MON :> else
  6  6991                 if t shift (-4) extract 1 = 1 then <:BSV :> else
  6  6992                 if t shift (-6) extract 1 = 1 then <:PAS :> else
  6  6993                 if t shift (-7) extract 1 = 1 then <:LYT :> else <:TAL :>);
  6  6994               if t shift (-9) extract 1 = 1 then
  6  6995                 write(z_op(nr),<:ALLE :>);
  6  6996               if t shift (-8) extract 1 = 1 then
  6  6997                 write(z_op(nr),<:KATASTROFE :>);
  6  6998               k:= kanaltab.kref.kanal_spec;
  6  6999               if t extract 2 <> 3 and t shift (-4) extract 1 = 1 then
  6  7000                 write(z_op(nr),<<zd.dd>,(k extract 12)/100);
  6  7001             end
  5  7002             else <* if i shift (-21) = 2 <+optaget+> then *>
  5  7003             begin
  6  7004               write(z_op(nr),<:K-:>,"sp",3);
  6  7005               if j <> 0 then
  6  7006                 skriv_skærm_id(nr,j,false)
  6  7007               else
  6  7008               begin
  7  7009                 j:=terminal_tab.tref(3);
  7  7010                 skriv_skærm_id(nr,j,
  7  7011                   false add (if i shift(-4) extract 1 = 1 then 2 <* mobil opk. *>
  7  7012                                                          else 0));
  7  7013               end;
  6  7014               write(z_op(nr),<:OPT:>);
  6  7015             end;
  5  7016           end;
  4  7017     <*V*> setposition(z_op(nr),0,0);
  4  7018         end skriv_skærm_b_v_s;
  3  7019     \f

  3  7019     message procedure skriv_skærm_maske side 1 - 810511/hko;
  3  7020     
  3  7020       procedure skriv_skærm_maske(nr);
  3  7021         value                     nr;
  3  7022         integer                   nr;
  3  7023         begin
  4  7024           integer i;
  4  7025     <*V*> setposition(z_op(nr),0,0);
  4  7026           write(z_op(nr),"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>,
  4  7027            "sp",26,"*",5,<: operatør :>,<<d>,nr,"sp",1,string bpl_navn(nr),
  4  7028            "sp",1,"*",5,"nl",1,"-",80);
  4  7029     
  4  7029           for i:= 3 step 1 until 21 do
  4  7030           begin
  5  7031             cursor(z_op(nr),i,26);
  5  7032             outchar(z_op(nr),'!');
  5  7033           end;
  4  7034           cursor(z_op(nr),22,1);
  4  7035           write(z_op(nr),"-",80);
  4  7036           cursor(z_op(nr),1,1);
  4  7037     <*V*> setposition(z_op(nr),0,0);
  4  7038         end skriv_skærm_maske;
  3  7039     \f

  3  7039     message procedure skal_udskrives side 1 - 940522/cl;
  3  7040     
  3  7040     boolean procedure skal_udskrives(fordelt_til,aktuel_skærm);
  3  7041       value                          fordelt_til,aktuel_skærm;
  3  7042       integer                        fordelt_til,aktuel_skærm;
  3  7043     begin
  4  7044       boolean skal_ud;
  4  7045       integer n;
  4  7046       integer array field iaf;
  4  7047     
  4  7047       skal_ud:= true;
  4  7048       if fordelt_til > 0 and fordelt_til<>aktuel_skærm then
  4  7049       begin
  5  7050         for n:= 0 step 1 until 3 do
  5  7051         begin
  6  7052           if bpl_tilst(operatør_stop(fordelt_til,n),1) > 0 then
  6  7053           begin
  7  7054             iaf:= operatør_stop(fordelt_til,n)*op_maske_lgd;
  7  7055             skal_ud:= læsbit_ia(bpl_def.iaf,aktuel_skærm);
  7  7056             goto returner;
  7  7057           end;
  6  7058         end;
  5  7059       end;
  4  7060     returner:
  4  7061       skal_udskrives:= skal_ud;
  4  7062     end;
  3  7063     
  3  7063     message procedure skriv_skærm_opkaldskø side 1 - 820301/hko;
  3  7064         
  3  7064       procedure skriv_skærm_opkaldskø(nr);
  3  7065         value                         nr;
  3  7066         integer                       nr;
  3  7067         begin
  4  7068           integer i,ant,vogn,type,operatør,ttmm,linie,bogst,løb,kmdo;
  4  7069           integer array field ref,iaf,tab;
  4  7070           boolean skal_ud;
  4  7071     
  4  7071     <*V*> wait(bs_opkaldskø_adgang);
  4  7072           setposition(z_op(nr),0,0);
  4  7073           ant:= 0; kmdo:= 0;
  4  7074           tab:= (nr-1)*opk_alarm_tab_lgd;
  4  7075           ref:= første_nødopkald;
  4  7076           if ref=0 then ref:=første_opkald;
  4  7077           while ref <> 0 do
  4  7078           begin
  5  7079             i:= opkaldskø.ref(4);
  5  7080             operatør:= i extract 8;
  5  7081             type:=i shift (-8) extract 4;
  5  7082     
  5  7082     <*      skal_ud:= operatør = nr or -,læsbit_ia(operatørmaske,operatør);
  5  7083     *>
  5  7084             if operatør > 64 then
  5  7085             begin
  6  7086               <* fordelt til gruppe af betjeningspladser *>
  6  7087               i:= 0; skal_ud:= true; iaf:= operatør*op_maske_lgd;
  6  7088               while skal_ud and i<max_antal_operatører do
  6  7089               begin
  7  7090                 i:=i+1;
  7  7091                 if læsbit_ia(bpl_def.iaf,i) then
  7  7092                   skal_ud:= skal_ud and skal_udskrives(i,nr);
  7  7093               end;
  6  7094             end
  5  7095             else
  5  7096               skal_ud:= skal_udskrives(operatør,nr);
  5  7097             if skal_ud then
  5  7098             begin
  6  7099               ant:= ant +1;
  6  7100               if ant < 6 then
  6  7101               begin
  7  7102     <*V*>       cursor(z_op(nr),ant*2+1,3);
  7  7103                 ttmm:= i shift (-12);
  7  7104                 vogn:= opkaldskø.ref(3);
  7  7105                 if vogn = 0 then vogn:= opkaldskø.ref(2) extract 22;
  7  7106                 skriv_skærm_id(nr,vogn,type=2);
  7  7107                 write(z_op(nr),true,4,
  7  7108                   string område_navn(opkaldskø.ref(5) extract 4),
  7  7109                   <<zd.dd>,ttmm/100.0);
  7  7110                 if -, læsbit_ia(opkaldskø.ref.opkald_meldt,nr) then
  7  7111                 begin
  8  7112                   if opkaldskø.ref(5) extract 4 <= 2 or
  8  7113                      opk_alarm.tab.alarm_lgd = 0 then
  8  7114                   begin
  9  7115                     if type=2 then
  9  7116                       write(z_op(nr),"bel",1,"del",8,"bel",1,"del",8,"bel",1)
  9  7117                     else
  9  7118                       write(z_op(nr),"bel",1);
  9  7119                   end
  8  7120                   else if type>kmdo then kmdo:= type;
  8  7121                   sætbit_ia(opkaldskø.ref.opkald_meldt,nr,1);
  8  7122                 end;
  7  7123               end;<* ant < 6 *>
  6  7124             end;<* operatør ok *>
  5  7125     
  5  7125             ref:= opkaldskø.ref(1) extract 12;
  5  7126             if ref = 0 and type = 2<*nød*> then ref:= første_opkald;
  5  7127           end;
  4  7128     \f

  4  7128     message procedure skriv_skærm_opkaldskø side 2 - 820301/hko;
  4  7129     
  4  7129           signal_bin(bs_opkaldskø_adgang);
  4  7130           if kmdo > opk_alarm.tab.alarm_tilst and 
  4  7131              kmdo > opk_alarm.tab.alarm_kmdo  then
  4  7132           begin
  5  7133             opk_alarm.tab.alarm_kmdo:= kmdo;
  5  7134             signal_bin(bs_opk_alarm);
  5  7135           end;
  4  7136           if ant > 5 then
  4  7137           begin
  5  7138             cursor(z_op(nr),13,9);
  5  7139             write(z_op(nr),<<+ddd>,ant-5);
  5  7140           end
  4  7141           else
  4  7142           begin
  5  7143             for i:= ant +1 step 1 until 6 do
  5  7144             begin
  6  7145               cursor(z_op(nr),i*2+1,1);
  6  7146               write(z_op(nr),"sp",25);
  6  7147             end;
  5  7148           end;
  4  7149           ant_i_opkø(nr):= ant;
  4  7150           cursor(z_op(nr),1,1);
  4  7151     <*V*> setposition(z_op(nr),0,0);
  4  7152         end skriv_skærm_opkaldskø;
  3  7153     \f

  3  7153     message procedure operatør side 2 - 810522/hko;
  3  7154     
  3  7154         trap(op_trap);
  3  7155         stack_claim((if cm_test then 200 else 146)+24+48+80+175);
  3  7156     
  3  7156         ref:= nr*terminal_beskr_længde;
  3  7157         tab:= (nr-1)*opk_alarm_tab_lgd;
  3  7158         skærmmåde:= 0; <*normal*>
  3  7159     
  3  7159         if operatør_auto_include(nr) then
  3  7160         begin
  4  7161           waitch(cs_att_pulje,opref,true,-1);
  4  7162           i:= operatør_auto_include(nr) extract 2;
  4  7163           if i<>3 then i:= 0;
  4  7164           start_operation(opref,101,cs_att_pulje,i shift 12 +1);
  4  7165           d.opref.data(1):= nr;
  4  7166           signalch(cs_rad,opref,gen_optype or io_optype);
  4  7167         end;
  3  7168     
  3  7168     <*+2*>
  3  7169         if testbit8 and overvåget or testbit28 then
  3  7170           skriv_operatør(out,0);
  3  7171     <*-2*>
  3  7172     \f

  3  7172     message procedure operatør side 3 - 810602/hko;
  3  7173     
  3  7173         repeat
  3  7174     
  3  7174     <*V*> wait_ch(cs_operatør(nr),
  3  7175                   op_ref,
  3  7176                   true,
  3  7177                   -1<*timeout*>);
  3  7178     <*+2*>
  3  7179           if testbit9 and overvåget then
  3  7180           disable begin
  4  7181             write(out,"nl",1,<:operation fra cs:>,<<d>,cs_operatør(nr),
  4  7182                              <: til operatør :>,nr);
  4  7183             skriv_op(out,op_ref);
  4  7184           end;
  3  7185     <*-2*>
  3  7186           monitor(8)reserve process:(z_op(nr),0,ia);
  3  7187           kode:= d.op_ref.op_kode extract 12;
  3  7188           i:= terminal_tab.ref.terminal_tilstand;
  3  7189           status:= i shift(-21);
  3  7190           opgave:=
  3  7191             if kode=0 then 1 <* indlæs kommando *> else
  3  7192             if kode=1 then 2 <* inkluder        *> else
  3  7193             if kode=2 then 3 <* ekskluder       *> else
  3  7194             if kode=40 then 4 <* opdater skærm  *> else
  3  7195             if kode=43 then 5 <* opkald etableret *> else
  3  7196             if kode=4  then 6 <* radiokanal ekskluderet *> else
  3  7197             if kode=38 then 7 <* operatør meddelelse *> else
  3  7198             0; <* afvises *>
  3  7199     
  3  7199           aktion:= case status +1 of(
  3  7200     <* status        *> <* opgave:         0   1   2   3   4   5   6   7 *>
  3  7201     <* 0 klar        *>(case opgave+1 of(  0,  1, -4,  3,  4, -4,  6,  7)),
  3  7202     <* 1 samtale     *>(case opgave+1 of(  0,  1, -4, -5,  4, -4,  6,  7)),
  3  7203     <* 2 optaget     *>(case opgave+1 of(  0,  1, -4, -5,  4,  5,  6,  7)),
  3  7204     <* 3 stoppet     *>(case opgave+1 of(  0,  2,  2,  3, -4, -4, -4,  7)),
  3  7205     <* 4 klar (fejl) *>(case opgave+1 of(  0, -4,  2,  3, -4, -4,  6, -4)),
  3  7206     <* 5 samt.(fejl) *>(case opgave+1 of(  0, -4,  2,  3, -4, -4,  6, -4)),
  3  7207     <* 6 opt. (fejl) *>(case opgave+1 of(  0, -4,  2,  3, -4,  5, -4, -4)),
  3  7208     <* 7 ej knyttet  *>(case opgave+1 of(  0, -4,  2, -4, -4, -4, -4, -4)),
  3  7209                         -1);
  3  7210     \f

  3  7210     message procedure operatør side 4 - 810424/hko;
  3  7211     
  3  7211           case aktion+6 of
  3  7212           begin
  4  7213             begin
  5  7214               <*-5: terminal optaget *>
  5  7215     
  5  7215               d.op_ref.resultat:= 16;
  5  7216               afslut_operation(op_ref,-1);
  5  7217             end;
  4  7218     
  4  7218             begin
  5  7219               <*-4: operation uden virkning *>
  5  7220     
  5  7220               afslut_operation(op_ref,-1);
  5  7221             end;
  4  7222     
  4  7222             begin
  5  7223               <*-3: ulovlig operationskode *>
  5  7224     
  5  7224               fejl_reaktion(2<*operationskode*>,kode,<:ulovlig:>,1);
  5  7225               afslut_operation(op_ref,-1);
  5  7226             end;
  4  7227     
  4  7227             begin
  5  7228               <*-2: ulovligt operatørterminal_nr *>
  5  7229     
  5  7229               fejl_reaktion(3<*programfejl*>,nr,<: ikke eksisterende operatør:>,1);
  5  7230               afslut_operation(op_ref,-1);
  5  7231             end;
  4  7232     
  4  7232             begin
  5  7233               <*-1: ulovlig operatørtilstand *>
  5  7234     
  5  7234               fejl_reaktion(3<*programfejl*>,status,<: ulovlig operatør-status:>,1);
  5  7235               afslut_operation(op_ref,-1);
  5  7236             end;
  4  7237     
  4  7237             begin
  5  7238               <* 0: ikke implementeret *>
  5  7239     
  5  7239               fejl_reaktion(2<*operationskode*>,kode,<: ikke implementeret:>,1);
  5  7240               afslut_operation(op_ref,-1);
  5  7241             end;
  4  7242     
  4  7242             begin
  5  7243     \f

  5  7243     message procedure operatør side 5 - 851001/cl;
  5  7244     
  5  7244               <* 1: indlæs kommando *>
  5  7245     
  5  7245     
  5  7245     <*V*>     læs_kommando(z_op(nr),200+nr,op_ref,pos,indeks,sep,sluttegn);
  5  7246               if opk_alarm.tab.alarm_tilst > 0 then
  5  7247               begin
  6  7248                 opk_alarm.tab.alarm_kmdo:= 3;
  6  7249                 signal_bin(bs_opk_alarm);
  6  7250                 pass;
  6  7251               end;
  5  7252               if d.op_ref.resultat > 3 then
  5  7253               begin
  6  7254     <*V*>       setposition(z_op(nr),0,0);
  6  7255                 cursor(z_op(nr),24,1);
  6  7256                 skriv_kvittering(z_op(nr),op_ref,pos,
  6  7257                                  d.op_ref.resultat);
  6  7258               end
  5  7259               else if d.op_ref.resultat = -1 then
  5  7260               begin
  6  7261                 skærmmåde:= 0;
  6  7262                 skrivskærm(nr);
  6  7263               end
  5  7264               else if d.op_ref.resultat>0 then
  5  7265               begin <*godkendt*>
  6  7266                 kode:=d.op_ref.opkode;
  6  7267                 i:= kode extract 12;
  6  7268                 j:= if kode = 11 or kode = 12 then 1 <*VO,I/VO,U*> else
  6  7269                     if kode = 19              then 1 <*VO,S     *> else
  6  7270                     if kode = 20 or kode = 24 then 1 <*VO,F/VO,R*> else
  6  7271                     if kode =  9 or kode = 10 then 2 <*VO,L/VO,B*> else
  6  7272                     if kode =  6              then 4 <*STop*>      else
  6  7273                     if 45<=kode and kode<=63  then 3 <*radiokom.*> else
  6  7274                     if kode = 30              then 5 <*SP,D*>      else
  6  7275                     if kode = 31              then 6 <*SP*>        else
  6  7276                     if kode = 32 or kode = 33 then 7 <*SP,V/SP,O*> else
  6  7277                     if kode = 34 or kode = 35 then 6 <*SP,R/SP,A*> else
  6  7278                     if kode = 83              then 8 <*SL*>        else
  6  7279                     if kode = 68              then 9 <*ST,D*>      else
  6  7280                     if kode = 69              then 10 <*ST,V*>     else
  6  7281                     if kode = 36              then 11 <*AL*>       else
  6  7282                     if kode = 37              then 12 <*CC*>       else
  6  7283                     if kode =  2              then 13 <*EX*>       else
  6  7284                     if kode = 92              then 14 <*CQF,V*>    else
  6  7285                        0;
  6  7286                 if j > 0 then
  6  7287                 begin
  7  7288                   case j of
  7  7289                   begin
  8  7290                     begin
  9  7291     \f

  9  7291     message procedure operatør side 6 - 851001/cl;
  9  7292     
  9  7292                       <* 1 indsæt/udtag/flyt bus i vogntabel *>
  9  7293     
  9  7293                       vogn:=ia(1);
  9  7294                       ll:=ia(2);
  9  7295                       kanal:= if kode=11 or kode=19 then ia(3) else
  9  7296                               if kode=12 then ia(2) else 0;
  9  7297     <*V*>             wait_ch(cs_vt_adgang,
  9  7298                               vt_op,
  9  7299                               gen_optype,
  9  7300                               -1<*timeout sek*>);
  9  7301                       start_operation(vtop,200+nr,cs_operatør(nr),
  9  7302                                       kode);
  9  7303                       d.vt_op.data(1):=vogn;
  9  7304                       if kode=11 or kode=19 or kode=20 or kode=24 then
  9  7305                         d.vt_op.data(2):=ll;
  9  7306                       if kode=19 then d.vt_op.data(3):= kanal else
  9  7307                       if kode=11 or kode=12 then d.vt_op.data(4):= kanal;
  9  7308                       indeks:= vt_op;
  9  7309                       signal_ch(cs_vt,
  9  7310                                 vt_op,
  9  7311                                 gen_optype or op_optype);
  9  7312     
  9  7312     <*V*>             wait_ch(cs_operatør(nr),
  9  7313                               vt_op,
  9  7314                               op_optype,
  9  7315                               -1<*timeout sek*>);
  9  7316     <*+2*>            if testbit10 and overvåget then
  9  7317                       disable begin
 10  7318                         write(out,"nl",1,<:operatør :>,<<d>,nr,
 10  7319                               <:: operation retur fra vt:>);
 10  7320                         skriv_op(out,vt_op);
 10  7321                       end;
  9  7322     <*-2*>
  9  7323     <*+4*>            if vt_op<>indeks then
  9  7324                         fejl_reaktion(11<*fremmede op*>,op_ref,
  9  7325                                       <:operatør-kommando:>,0);
  9  7326     <*-4*>
  9  7327     <*V*>             setposition(z_op(nr),0,0);
  9  7328                       cursor(z_op(nr),24,1);
  9  7329     <*V*>             skriv_kvittering(z_op(nr),if d.vt_op.resultat = 11 or
  9  7330                         d.vt_op.resultat = 12 then d.vt_op.data(3)
  9  7331                         else vt_op,-1,d.vt_op.resultat);
  9  7332                       d.vt_op.optype:= gen_optype or vt_optype;
  9  7333                       disable afslut_operation(vt_op,cs_vt_adgang);
  9  7334                     end;
  8  7335                     begin
  9  7336     \f

  9  7336     message procedure operatør side 7 - 810921/hko,cl;
  9  7337     
  9  7337                     <* 2 vogntabel,linienr/-,busnr *>
  9  7338     
  9  7338                     d.op_ref.retur:= cs_operatør(nr);
  9  7339                     tofrom(d.op_ref.data,ia,10);
  9  7340                     indeks:= op_ref;
  9  7341                     signal_ch(cs_vt,op_ref,gen_optype or op_optype);
  9  7342                     wait_ch(cs_operatør(nr),
  9  7343                             op_ref,
  9  7344                             op_optype,
  9  7345                             -1<*timeout*>);
  9  7346     <*+2*>          if testbit10 and overvåget then
  9  7347                     disable begin
 10  7348                       write(out,"nl",1,<:operatør operation retur fra vt:>);
 10  7349                       skriv_op(out,op_ref);
 10  7350                     end;
  9  7351     <*-2*>
  9  7352     <*+4*>
  9  7353                     if indeks <> op_ref then
  9  7354                       fejlreaktion(11<*fremmed post*>,op_ref,<:operatør komm:>,0);
  9  7355     <*-4*>
  9  7356                     i:= d.op_ref.resultat;
  9  7357                     if i = 0 or i > 3 then
  9  7358                     begin
 10  7359     <*V*>             setposition(z_op(nr),0,0);
 10  7360                       cursor(z_op(nr),24,1);
 10  7361                       skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat);
 10  7362                     end
  9  7363                     else
  9  7364                     begin
 10  7365                       integer antal,fil_ref;
 10  7366     
 10  7366                       skærm_måde:= 1;
 10  7367                       antal:= d.op_ref.data(6);
 10  7368                       fil_ref:= d.op_ref.data(7);
 10  7369     <*V*>             setposition(z_op(nr),0,0);
 10  7370                       write(z_op(nr),"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>,
 10  7371                         "sp",14,"*",10,"sp",6,
 10  7372                             <:vogntabeludskrift:>,"sp",6,"*",10,"nl",2);
 10  7373     <*V*>             setposition(z_op(nr),0,0);
 10  7374     \f

 10  7374     message procedure operatør side 8 - 841213/cl;
 10  7375     
 10  7375                       pos:= 1;
 10  7376                       while pos <= antal do
 10  7377                       begin
 11  7378                         integer bogst,løb;
 11  7379     
 11  7379                         disable i:= læs_fil(fil_ref,pos,j);
 11  7380                         if i <> 0 then
 11  7381                           fejlreaktion(5<*læs_fil*>,i,<:operatør: vo,l/vo,b:>,0)
 11  7382                         else
 11  7383                         begin
 12  7384                           vogn:= fil(j,1) shift (-24) extract 24;
 12  7385                           løb:= fil(j,1) extract 24;
 12  7386                           if d.op_ref.opkode=9 then
 12  7387                             begin i:=vogn; vogn:=løb; løb:=i; end;
 12  7388                           ll:= løb shift (-12) extract 10;
 12  7389                           bogst:= løb shift (-7) extract 5;
 12  7390                           if bogst > 0 then bogst:= bogst +'A'-1;
 12  7391                           løb:= løb extract 7;
 12  7392                           vogn:= vogn extract 14;
 12  7393                           i:= d.op_ref.opkode-8;
 12  7394                           for i:= i,i+1 do
 12  7395                           begin
 13  7396                             j:= (i+1) extract 1;
 13  7397                             case j +1 of
 13  7398                             begin
 14  7399                               write(z_op(nr),"sp",(bogst=0) extract 1,<<ddd>,ll,
 14  7400                                 false add bogst,1,"/",1,<<d__>,løb);
 14  7401                               write(z_op(nr),<<dddd>,vogn,"sp",1);
 14  7402                             end;
 13  7403                           end;
 12  7404                           if pos mod 5 = 0 then
 12  7405                           begin
 13  7406                             outchar(z_op(nr),'nl');
 13  7407     <*V*>                   setposition(z_op(nr),0,0);
 13  7408                           end
 12  7409                           else write(z_op(nr),"sp",3);
 12  7410                         end;
 11  7411                         pos:=pos+1;
 11  7412                       end;
 10  7413                       write(z_op(nr),"*",1,"nl",1);
 10  7414     \f

 10  7414     message procedure operatør side 8a- 810507/hko;
 10  7415     
 10  7415                       d.opref.opkode:=104; <*slet-fil*>
 10  7416                       d.op_ref.data(4):=filref;
 10  7417                       indeks:=op_ref;
 10  7418                       signal_ch(cs_slet_fil,op_ref,gen_optype or op_optype);
 10  7419     <*V*>             wait_ch(cs_operatør(nr),op_ref,op_optype,-1);
 10  7420     
 10  7420     <*+2*>            if testbit10 and overvåget then
 10  7421                       disable begin
 11  7422                         write(out,"nl",1,<:operatør, slet-fil retur:>);
 11  7423                         skriv_op(out,op_ref);
 11  7424                       end;
 10  7425     <*-2*>
 10  7426     
 10  7426     <*+4*>            if op_ref<>indeks then
 10  7427                         fejlreaktion(11<*fr.post*>,op_ref,<:operatør,slet-fil:>,0);
 10  7428     <*-4*>
 10  7429                       if d.op_ref.data(9)<>0 then
 10  7430                         fejl_reaktion(3<*prg.fejl*>,d.op_ref.data(9),
 10  7431                             <:operatør, slet_fil:>,1);
 10  7432                     end;
  9  7433                   end;
  8  7434     
  8  7434                   begin
  9  7435     \f

  9  7435     message procedure operatør side 9 - 830310/hko;
  9  7436     
  9  7436                       <* 3 radio_kommandoer *>
  9  7437     
  9  7437                       kode:= d.op_ref.opkode;
  9  7438                       rkom:= kode-44; par1:=ia(1); par2:=ia(2);
  9  7439                       disable if testbit14 then
  9  7440                       begin
 10  7441                         integer i; <*lav en trap-bar blok*>
 10  7442     
 10  7442                         trap(test14_trap);
 10  7443                         systime(1,0,kommstart);
 10  7444                         write(zrl,<<zd dd dd.dd >,now,<:op:>,<<d__>,nr,
 10  7445                           string bpl_navn(nr),<: start :>,case rkom of (
 10  7446                           <:OP:>,<:ME:>,<:OP,G:>,<:ME,G:>,<:OP,A:>,<:ME,A:>,
 10  7447                           <:KA,C:>,<:KA,P:>,<:OP,L:>,<:MO:>,<:VE:>,<:NE:>,
 10  7448                           <:OP,V:>,<:OP,T:>,<:R:>,<:GE:>,<:GE,G:>,<:GE,V:>,
 10  7449                           <:GE,T:>),<: :>);
 10  7450                         if (rkom<5 or rkom=9 or rkom=13 or rkom=14 or
 10  7451                             rkom=16 or rkom=17 or rkom=19)
 10  7452                         then
 10  7453                         begin
 11  7454                           if par1<>0 then skriv_id(zrl,par1,0);
 11  7455                           if par2<>0 and rkom<>13 and rkom<>14 and rkom<>19 then
 11  7456                             write(zrl,"sp",1,string områdenavn(par2));
 11  7457                         end
 10  7458                         else
 10  7459                         if rkom=10 and par1<>0 then
 10  7460                           write(zrl,string kanalnavn(par1 extract 20))
 10  7461                         else
 10  7462                         if rkom=5 or rkom=6 then
 10  7463                         begin
 11  7464                           if par1 shift (-20)=15 then write(zrl,<:ALLE:>) else
 11  7465                           if par1 shift (-20)=14 then
 11  7466                             write(zrl,string områdenavn(par1 extract 20));
 11  7467                         end;
 10  7468     test14_trap:        outchar(zrl,'nl');
 10  7469                       end;
  9  7470                       d.op_ref.data(4):= nr; <*operatør*>
  9  7471                       opgave:=
  9  7472                         if kode = 45 <*OP  *> then 1 else
  9  7473                         if kode = 46 <*ME  *> then 2 else
  9  7474                         if kode = 47 <*OP,G*> then 3 else
  9  7475                         if kode = 48 <*ME,G*> then 4 else
  9  7476                         if kode = 49 <*OP,A*> then 5 else
  9  7477                         if kode = 50 <*ME,A*> then 6 else
  9  7478                         if kode = 51 <*KA,C*> then 7 else
  9  7479                         if kode = 52 <*KA,P*> then 8 else
  9  7480                         if kode = 53 <*OP,L*> then 9 else
  9  7481                         if kode = 54 <*MO  *> then (if ia(1)=0 then 11 else 10) else
  9  7482                         if kode = 55 <*VE  *> then 14 else
  9  7483                         if kode = 56 <*NE  *> then 12 else
  9  7484                         if kode = 57 <*OP,V*> then  1 else
  9  7485                         if kode = 58 <*OP,T*> then  1 else
  9  7486                         if kode = 59 <*R   *> then 13 else
  9  7487                         if kode = 60 <*GE  *> then 15 else
  9  7488                         if kode = 61 <*GE,G*> then 16 else
  9  7489                         if kode = 62 <*GE,V*> then 15 else
  9  7490                         if kode = 63 <*GE,T*> then 15 else
  9  7491                         -1;
  9  7492     <*+4*>              if opgave < 0 then
  9  7493                           fejlreaktion(2<*operationskode*>,kode,
  9  7494                             <:operatør, radio-kommando :>,0);
  9  7495     <*-4*>
  9  7496                         status:= skærm_status(tilstand,b_v,b_s,b_s_tilst);
  9  7497                         i:= d.op_ref.data(2):= ia(1); <* ident.*>
  9  7498                         if 5<=opgave and opgave<=8 then
  9  7499                           d.opref.data(2):= -1;
  9  7500                         if opgave=13 then d.opref.data(2):=
  9  7501                           (if læsbit_i(terminaltab.ref.terminaltilstand,11)
  9  7502                            then 0 else 1);
  9  7503                         if opgave = 14 then d.opref.data(2):= 1;
  9  7504                         if opgave=7 or opgave=8 then 
  9  7505                           d.opref.data(3):= -1
  9  7506                         else
  9  7507                         if opgave=5 or opgave=6 then
  9  7508                         begin
 10  7509                           if ia(1) shift (-20) = 15 then
 10  7510                           begin
 11  7511                             d.opref.data(3):= 15 shift 20;
 11  7512                             for j:= 1 step 1 until max_antal_kanaler do
 11  7513                             begin
 12  7514                               iaf:= (j-1)*kanalbeskrlængde;
 12  7515                               if læsbit_i(kanaltab.iaf.kanal_tilstand,11) and
 12  7516                                  læsbit_i(ia(1),kanal_til_omr(j)) then
 12  7517                                 sætbit_i(d.opref.data(3),kanal_til_omr(j),1);
 12  7518                             end;
 11  7519                           end
 10  7520                           else
 10  7521                             d.opref.data(3):= if ia(1)=0 then 14 shift 20 + 3
 10  7522                                else ia(1);
 10  7523                         end
  9  7524                         else
  9  7525                         if kode = 57 then d.opref.data(3):= 2 else
  9  7526                         if kode = 58 then d.opref.data(3):= 1 else
  9  7527                         if kode = 62 then d.opref.data(3):= 2 else
  9  7528                         if kode = 63 then d.opref.data(3):= 1 else
  9  7529                                           d.opref.data(3):= ia(2);
  9  7530     
  9  7530                       <* !!! i første if-sætning nedenfor er 'status>1'
  9  7531                              rettet til 'status>0' for at forhindre
  9  7532                              at opkald nr. 2 kan udføres med et allerede
  9  7533                              etableret opkald i skærmens s-felt,
  9  7534                              jvf. ulykke d. 7/2-1995
  9  7535                       !!! *>
  9  7536                       res:=
  9  7537                         if (opgave=1 or opgave=3) and status>0
  9  7538                            then 16 <*skærm optaget*> else
  9  7539                         if (opgave=15 or opgave=16) and
  9  7540                            status>1 then 16 <*skærm optaget*> else
  9  7541                         if (opgave=1 or opgave=3) and status=0 then 1 else
  9  7542                         if (opgave=15 or opgave=16) and status=0 then 21 else
  9  7543                         if (opgave=1 or opgave=3 or opgave=15 or opgave=16) then 
  9  7544                            (if (d.opref.data(3)=1 or d.opref.data(3)=2) and
  9  7545                               d.opref.data(3) = kanal_til_omr(bs extract 6)
  9  7546                             then 52 else 1) else
  9  7547                         if opgave<11 and status>0 then 16 else
  9  7548                         if opgave=11 and status<2 then 21 else
  9  7549                         if opgave=12 and status=0 then 22 else
  9  7550                         if opgave=13 and status=0 then 49 else
  9  7551                         if opgave=14 and status<>3 then 21 else 1;
  9  7552                       if res=1 and (d.opref.data(3)=1 or d.opref.data(3)=2) then
  9  7553                       begin <* specialbetingelser for TLF og VHF *>
 10  7554                         if (1<opgave and opgave<9) or opgave=16 then res:= 51;
 10  7555                       end;
  9  7556                       if skærmmåde<>0 then
  9  7557                         begin skærm_måde:= 0; skriv_skærm(nr); end;
  9  7558                       kode:= opgave;
  9  7559                       if opgave = 15 then opgave:= 1 else
  9  7560                       if opgave = 16 then opgave:= 3;
  9  7561     \f

  9  7561     message procedure operatør side 10 - 810616/hko;
  9  7562     
  9  7562                       <* tilknyt talevej (om nødvendigt) *>
  9  7563                       if res = 1 and op_talevej(nr)=0 then
  9  7564                       begin
 10  7565                         i:= sidste_tv_brugt;
 10  7566                         repeat
 10  7567                           i:= (i mod max_antal_taleveje)+1;
 10  7568                           if tv_operatør(i)=0 then 
 10  7569                           begin
 11  7570                             tv_operatør(i):= nr;
 11  7571                             op_talevej(nr):= i;
 11  7572                           end;
 10  7573                         until op_talevej(nr)<>0 or i=sidste_tv_brugt;
 10  7574                         if op_talevej(nr)=0 then
 10  7575                           res:=61
 10  7576                         else
 10  7577                         begin
 11  7578                           sidste_tv_brugt:=
 11  7579                             (sidste_tv_brugt mod max_antal_taleveje)+1;
 11  7580     
 11  7580     <*V*>                 waitch(cs_tvswitch_adgang,iaf,op_optype,-1);
 11  7581                           start_operation(iaf,200+nr,cs_operatør(nr),
 11  7582                                             'A' shift 12 + 44);
 11  7583                           d.iaf.data(1):= op_talevej(nr);
 11  7584                           d.iaf.data(2):= nr+16;
 11  7585                           ll:= 0;
 11  7586                           repeat
 11  7587                             signalch(cs_talevejsswitch,iaf,op_optype);
 11  7588     <*V*>                   waitch(cs_operatør(nr),iaf,op_optype,-1);
 11  7589                             ll:= ll+1;
 11  7590                           until ll=3 or d.iaf.resultat=3;
 11  7591                           res:= if d.iaf.resultat=3 then 1 else 61;
 11  7592     <* ********* *>
 11  7593                           delay(1);
 11  7594                           start_operation(iaf,200+nr,cs_operatør(nr),
 11  7595                                             'R' shift 12 + 44);
 11  7596                           ll:= 0;
 11  7597                           repeat
 11  7598                             signalch(cs_talevejsswitch,iaf,op_optype);
 11  7599                             waitch(cs_operatør(nr),iaf,op_optype,-1);
 11  7600                             ll:= ll+1;
 11  7601                           until ll=3 or d.iaf.resultat=3;
 11  7602     <* ********* *>
 11  7603                           signalch(cs_tvswitch_adgang,iaf,op_optype);
 11  7604                           if res<>1 then 
 11  7605                             op_talevej(nr):=tv_operatør(op_talevej(nr)):= 0;
 11  7606                         end;
 10  7607                       end;
  9  7608                       if op_talevej(nr)=0 then res:= 61;
  9  7609                       d.op_ref.data(1):= op_talevej(nr);
  9  7610     
  9  7610                       if res <= 1 then
  9  7611                       begin
 10  7612     til_radio:          <* send operation til radiomodul *>
 10  7613                         d.op_ref.opkode:= opgave shift 12 + 41;
 10  7614                         d.op_ref.data(5):= if b_v<>0 then 12 shift 20 + b_v
 10  7615                                            else 0;
 10  7616                         d.op_ref.data(6):= b_s;
 10  7617                         d.op_ref.resultat:=0;
 10  7618                         d.op_ref.retur:= cs_operatør(nr);
 10  7619                         indeks:= op_ref;
 10  7620     <*+2*>              if testbit11 and overvåget then
 10  7621                         disable begin
 11  7622                           skriv_operatør(out,0);
 11  7623                           write(out,<: operation til radio:>);
 11  7624                           skriv_op(out,op_ref); ud;
 11  7625                         end;
 10  7626     <*-2*>
 10  7627                         signal_ch(cs_rad,op_ref,gen_optype or op_optype);
 10  7628     <*V*>               wait_ch(cs_operatør(nr),op_ref,op_optype,-1);
 10  7629     
 10  7629     <*+2*>              if testbit12 and overvåget then
 10  7630                         disable begin
 11  7631                           skriv_operatør(out,0);
 11  7632                           write(out,<: operation retur fra radio:>);
 11  7633                           skriv_op(out,op_ref); ud;
 11  7634                         end;
 10  7635     <*-2*>
 10  7636     <*+4*>              if op_ref <> indeks then
 10  7637                           fejlreaktion(11<*fr.post*>,op_ref,
 10  7638                             <:operatør, retur fra radio:>,0);
 10  7639     <*-4*>
 10  7640     \f

 10  7640     message procedure operatør side 11 - 810529/hko;
 10  7641     
 10  7641                         res:= d.op_ref.resultat;
 10  7642                         if res < 2 or (res > 3 and (res<>49 or opgave<>11)) then
 10  7643                         begin
 11  7644     <*+4*>                if res < 2 then
 11  7645                             fejlreaktion(3<*prg.fejl*>,res,
 11  7646                               <: operatør,radio_op,resultat:>,1);
 11  7647     <*-4*>
 11  7648                           if res = 1 then res:= 0;
 11  7649                         end
 10  7650                         else
 10  7651                         begin <* res = 2 eller 3 *>
 11  7652                           s_kanal:= v_kanal:= 0;
 11  7653                           opgave:= d.opref.opkode shift (-12);
 11  7654                           bv:= d.op_ref.data(5) extract 4;
 11  7655                           bs:= d.op_ref.data(6);
 11  7656                           if opgave < 10 then
 11  7657                           begin
 12  7658                             j:= d.op_ref.data(7) <*type*>;
 12  7659                             i:= terminal_tab.ref(1) shift (-12) shift 12 extract 21;
 12  7660                             i:= i + (if opgave=2 or opgave>3 then 2 else 1);
 12  7661                             terminal_tab.ref(1):= i
 12  7662                               +(if res=2 then 4 <*optaget*> else 0)
 12  7663                               +(if (opgave=1 or opgave=9) and j = 2 <*nødopkald*>
 12  7664                                 then 8 <*nød*> else 0)
 12  7665                               +(if opgave=1 and j > 0 and j < 3 <*mobilopkald*>
 12  7666                                 then 16 else 0)
 12  7667                               + (if opgave mod 2 = 0 then 64 <*pas*> else 0)
 12  7668                               + (if opgave=9 then 128 else
 12  7669                                  if opgave>=7 then 256 else
 12  7670                                  if opgave>=5 then 512 else 0)
 12  7671                               + (if res = 2 then 2 shift 21 <*tilstand = optaget *>
 12  7672                                  else if b_s = 0 then 0     <*tilstand = ledig *>
 12  7673                                             else 1 shift 21 <*tilstand = samtale*>);
 12  7674                           end
 11  7675                           else if opgave=10 <*monitering*> or
 11  7676                                   opgave=14 <*ventepos  *> then
 11  7677                           begin
 12  7678     <*+4*>                  if res = 2 then
 12  7679                               fejlreaktion(3<*prg.fejl*>,res,
 12  7680                                 <: operatør,moniter,res:>,1);
 12  7681     <*-4*>
 12  7682                             iaf:= (bs extract 4 -1)*kanal_beskr_længde;
 12  7683                             i:= if bs<0 then
 12  7684                               kanaltab.iaf.kanal_tilstand extract 12 else 0;
 12  7685                             terminal_tab.ref(1):= i +
 12  7686                               (if bs < 0 then (1 shift 21) else 0);
 12  7687                             if opgave=10 then
 12  7688                             begin
 13  7689                               s_kanal:= bs;
 13  7690                               v_kanal:= d.opref.data(5);
 13  7691                             end;
 12  7692     \f

 12  7692     message procedure operatør side 12 - 810603/hko;
 12  7693                           end
 11  7694                           else if opgave=11 or opgave=12 then
 11  7695                           begin
 12  7696     <*+4*>                  if res = 2 then
 12  7697                               fejlreaktion(3<*prg.fejl*>,res,
 12  7698                                 <: operatør,ge/ne,res:>,1);
 12  7699     <*-4*>
 12  7700                             if opgave=11 <*GE*> and res<>49 then
 12  7701                             begin
 13  7702                               s_kanal:= terminal_tab.ref(2);
 13  7703                               v_kanal:= 12 shift 20 + 
 13  7704                                 (terminal_tab.ref(1) shift (-12) extract 4);
 13  7705                             end;
 12  7706                             terminal_tab.ref(1):= 0; <* s og v felt nedlagt *>
 12  7707                           end
 11  7708                           else
 11  7709                           if opgave=13 then
 11  7710                           begin
 12  7711                             if res=2 then
 12  7712                               fejlreaktion(3<*prg.fejl*>,res,
 12  7713                                 <:operatør,R,res:>,1);
 12  7714                             sætbit_i(terminaltab.ref.terminaltilstand,11,
 12  7715                               d.opref.data(2));
 12  7716                           end
 11  7717     <*+4*>                else fejlreaktion(3,opgave,<:operatør, opgave:>,0)
 11  7718     <*-4*>
 11  7719                           ;
 11  7720                           <*indsæt kanal_nr for b_v_felt i terminalbeskr.*>
 11  7721     
 11  7721                           sæt_hex_ciffer(terminal_tab.ref,3,b_v extract 4);
 11  7722                           terminal_tab.ref(2):= b_s;
 11  7723                           terminal_tab.ref(3):= d.op_ref.data(11);
 11  7724                           if (opgave<10 or opgave=14) and res=3 then
 11  7725                             <*så henviser b_s til radiokanal*>
 11  7726                           begin
 12  7727                             if bs shift (-20) = 12 then
 12  7728                             begin
 13  7729                               iaf:= (bs extract 4 -1)*kanal_beskr_længde;
 13  7730                               kanaltab.iaf.kanal_tilstand:=
 13  7731                                 kanaltab.iaf.kanal_tilstand shift(-10) shift 10
 13  7732                                 +terminal_tab.ref(1) extract 10;
 13  7733                             end
 12  7734                             else
 12  7735                             begin
 13  7736                               for i:= 1 step 1 until max_antal_kanaler do
 13  7737                               begin
 14  7738                                 if læsbit_i(bs,i) then
 14  7739                                 begin
 15  7740                                   iaf:= (i-1)*kanal_beskr_længde;
 15  7741                                   kanaltab.iaf.kanaltilstand:=
 15  7742                                     kanaltab.iaf.kanaltilstand shift (-10) shift 10
 15  7743                                     + terminal_tab.ref(1) extract 10;
 15  7744                                 end;
 14  7745                               end;
 13  7746                             end;
 12  7747                           end;
 11  7748                           if kode=15 or kode=16 then
 11  7749                           begin
 12  7750                             if opgave<10 then
 12  7751                             begin
 13  7752                               opgave:= 11;
 13  7753                               kanal:= (12 shift 20) +
 13  7754                                       d.opref.data(6) extract 20;
 13  7755                               goto til_radio;
 13  7756                             end
 12  7757                             else
 12  7758                             if opgave=11 then
 12  7759                             begin
 13  7760                               opgave:= 10;
 13  7761                               d.opref.data(2):= kanal;
 13  7762                               goto til_radio;
 13  7763                             end;
 12  7764                           end
 11  7765                           else
 11  7766                           if (kode=1 or kode=3) then
 11  7767                           begin
 12  7768                             if opgave<10 and bv<>0 then
 12  7769                             begin
 13  7770                               opgave:= 14;
 13  7771                               d.opref.data(2):= 2;
 13  7772                               goto til_radio;
 13  7773                             end;
 12  7774                           end;
 11  7775     <*V*>                 skriv_skærm_b_v_s(nr);
 11  7776     <*V*>                 if sætbit_ia(opkaldsflag,nr,0) = 1 then
 11  7777                             skriv_skærm_opkaldskø(nr);
 11  7778                           for i:= s_kanal, v_kanal do
 11  7779                             if i<0 then skriv_skærm_kanal(nr,i extract 4);
 11  7780                           tofrom(kanalflag,alle_operatører,op_maske_lgd);
 11  7781                           signalbin(bs_mobilopkald);
 11  7782     <*V*>                 setposition(z_op(nr),0,0);
 11  7783                         end; <* res = 2 eller 3 *>
 10  7784                       end; <* res <= 1 *>
  9  7785                       <* frigiv talevej (om nødvendigt) *>
  9  7786                       if læs_hex_ciffer(terminal_tab.ref,3,b_v)=0
  9  7787                          and terminal_tab.ref(2)=0 <*b_s*>
  9  7788                          and op_talevej(nr)<>0
  9  7789                       then
  9  7790                       begin
 10  7791     <*V*>               waitch(cs_tvswitch_adgang,iaf,op_optype,-1);
 10  7792                         start_operation(iaf,200+nr,cs_operatør(nr),
 10  7793                                             'D' shift 12 + 44);
 10  7794                         d.iaf.data(1):= op_talevej(nr);
 10  7795                         d.iaf.data(2):= nr+16;
 10  7796                         ll:= 0;
 10  7797                         repeat
 10  7798                           signalch(cs_talevejsswitch,iaf,op_optype);
 10  7799     <*V*>                 waitch(cs_operatør(nr),iaf,op_optype,-1);
 10  7800                           ll:= ll+1;
 10  7801                         until ll=3 or d.iaf.resultat=3;
 10  7802                         ll:= d.iaf.resultat;
 10  7803                         signalch(cs_tvswitch_adgang,iaf,op_optype);
 10  7804                         if ll<>3 then 
 10  7805                           fejlreaktion(21,op_talevej(nr)*100+nr,
 10  7806                             <:frigiv operatør fejlet:>,1)
 10  7807                         else
 10  7808                           op_talevej(nr):= tv_operatør(op_talevej(nr)):= 0;
 10  7809                         skriv_skærm_b_v_s(nr);
 10  7810                       end;
  9  7811                       disable if testbit14 then
  9  7812                       begin
 10  7813                         integer t; <*lav en trap-bar blok*>
 10  7814     
 10  7814                         trap(test14_trap);
 10  7815                         systime(1,0,kommslut);
 10  7816                         write(zrl,<<zd dd dd.dd >,now,<:op:>,<<d__>,nr,
 10  7817                           string bpl_navn(nr),<:  slut :>,case rkom of (
 10  7818                           <:OP:>,<:ME:>,<:OP,G:>,<:ME,G:>,<:OP,A:>,<:ME,A:>,
 10  7819                           <:KA,C:>,<:KA,P:>,<:OP,L:>,<:MO:>,<:VE:>,<:NE:>,
 10  7820                           <:OP,V:>,<:OP,T:>,<:R:>,<:GE:>,<:GE,G:>,<:GE,V:>,
 10  7821                           <:GE,T:>),<: :>);
 10  7822                         if (rkom<5 or rkom=9 or rkom=13 or rkom=14 or
 10  7823                             rkom=16 or rkom=17 or rkom=19)
 10  7824                         then
 10  7825                         begin
 11  7826                           if d.opref.data(7)=2 then outchar(zrl,'*');
 11  7827                           if d.opref.data(9)<>0 then 
 11  7828                           begin
 12  7829                             skriv_id(zrl,d.opref.data(9),0);
 12  7830                             outchar(zrl,' ');
 12  7831                           end;
 11  7832                           if d.opref.data(8)<>0 then
 11  7833                           begin
 12  7834                             skriv_id(zrl,d.opref.data(8),0);
 12  7835                             outchar(zrl,' ');
 12  7836                           end;
 11  7837                           if d.opref.data(8)=0 and d.opref.data(9)=0 and
 11  7838                              d.opref.data(2)<>0 then
 11  7839                           begin
 12  7840                             skriv_id(zrl,d.opref.data(2),0);
 12  7841                             outchar(zrl,' ');
 12  7842                           end;
 11  7843                           if d.opref.data(12)<>0 then
 11  7844                           begin
 12  7845                             if d.opref.data(12) shift (-20) = 15 then
 12  7846                               write(zrl,<:OMR*:>)
 12  7847                             else
 12  7848                             if d.opref.data(12) shift (-20) = 14 then
 12  7849                               write(zrl,
 12  7850                                 string områdenavn(d.opref.data(12) extract 20))
 12  7851                             else
 12  7852                               skriv_id(zrl,d.opref.data(12),0);
 12  7853                             outchar(zrl,' ');
 12  7854                           end;
 11  7855                           t:= terminal_tab.ref.terminaltilstand extract 10;
 11  7856                           if res=3 and rkom=1 and
 11  7857                              (t shift (-4) extract 1 = 1) and
 11  7858                              (t extract 2 <> 3)
 11  7859                           then
 11  7860                           begin
 12  7861                             iaf:= (terminal_tab.ref(2) extract 20 - 1)*
 12  7862                                   kanal_beskr_længde;
 12  7863                             write(zrl,<<zd.dd>,(kanal_tab.iaf.kanal_spec
 12  7864                                     extract 12)/100," ",1);
 12  7865                           end;
 11  7866                           if d.opref.data(10)<>0 then
 11  7867                           begin
 12  7868                             skriv_id(zrl,d.opref.data(10),0);
 12  7869                             outchar(zrl,' ');
 12  7870                           end;
 11  7871                         end
 10  7872                         else
 10  7873                         if rkom=10 and par1<>0 then
 10  7874                           write(zrl,string kanalnavn(par1 extract 20),"sp",1)
 10  7875                         else
 10  7876                         if rkom=5 or rkom=6 then
 10  7877                         begin
 11  7878                           if par1 shift (-20)=15 then write(zrl,<:ALLE:>) else
 11  7879                           if par1 shift (-20)=14 then
 11  7880                             write(zrl,string områdenavn(par1 extract 20));
 11  7881                           outchar(zrl,' ');
 11  7882                         end;
 10  7883                         if op_talevej(nr) > 0 then
 10  7884                             write(zrl,<:T:>,<<d>,op_talevej(nr)," ",1);
 10  7885                         write(zrl,<:res=:>,<<d>,res,<: btid=:>,
 10  7886                           <<dd.dd>,kommslut-kommstart);
 10  7887     test14_trap:        outchar(zrl,'nl');   
 10  7888                       end;
  9  7889     <*V*>             setposition(z_op(nr),0,0);
  9  7890                       cursor(z_op(nr),24,1);
  9  7891     <*V*>             skriv_kvittering(z_op(nr),op_ref,-1,res);
  9  7892                     end; <* radio-kommando *>
  8  7893                     begin
  9  7894     \f

  9  7894     message procedure operatør side 13 - 810518/hko;
  9  7895     
  9  7895                       <* 4 stop kommando *>
  9  7896     
  9  7896                       status:= skærm_status(tilstand,b_v,b_s,b_s_tilst);
  9  7897                       if tilstand <> 0 then
  9  7898                       begin
 10  7899                         d.op_ref.resultat:= 16; <*skærm optaget*>
 10  7900                       end
  9  7901                       else
  9  7902                       begin
 10  7903                         d.op_ref.retur:= cs_operatør(nr);
 10  7904                         d.op_ref.resultat:= 0;
 10  7905                         d.op_ref.data(1):= nr;
 10  7906                         indeks:= op_ref;
 10  7907     <*+2*>              if testbit11 and overvåget then
 10  7908                         disable begin
 11  7909                           skriv_operatør(out,0);
 11  7910                           write(out,<: stop_operation til radio:>);
 11  7911                           skriv_op(out,op_ref); ud;
 11  7912                         end;
 10  7913     <*-2*>
 10  7914                         if opk_alarm.tab.alarm_tilst > 0 then
 10  7915                         begin
 11  7916                           opk_alarm.tab.alarm_kmdo:= 3;
 11  7917                           signal_bin(bs_opk_alarm);
 11  7918                         end;
 10  7919     
 10  7919                         signal_ch(cs_rad,op_ref,gen_optype or op_optype);
 10  7920     <*V*>               wait_ch(cs_operatør(nr),op_ref,op_optype,-1);
 10  7921     <*+2*>              if testbit12 and overvåget then
 10  7922                         disable begin
 11  7923                           skriv_operatør(out,0);
 11  7924                           write(out,<: operation retur fra radio:>);
 11  7925                           skriv_op(out,op_ref); ud;
 11  7926                         end;
 10  7927     <*-2*>
 10  7928     <*+4*>              if indeks <> op_ref then
 10  7929                           fejlreaktion(11<*fr.post*>,op_ref,
 10  7930                             <: operatør, retur fra radio:>,0);
 10  7931     <*-4*>
 10  7932     \f

 10  7932     message procedure operatør side 14 - 810527/hko;
 10  7933     
 10  7933                         if d.op_ref.resultat = 3 then
 10  7934                         begin
 11  7935                           integer k,n;
 11  7936                           integer array field msk,iaf1;
 11  7937     
 11  7937                           terminal_tab.ref.terminal_tilstand:= 3 shift 21
 11  7938                             +terminal_tab.ref.terminal_tilstand extract 21;
 11  7939                           tofrom(opkaldsflag,alle_operatører,op_maske_lgd);
 11  7940                           if sæt_bit_ia(operatørmaske,nr,0)=1 then
 11  7941                           for k:= nr, 65 step 1 until top_bpl_gruppe do
 11  7942                           begin
 12  7943                             msk:= k*op_maske_lgd;
 12  7944                             if læsbit_ia(bpl_def.msk,nr) then 
 12  7945     <**>                    begin
 13  7946                               n:= 0;
 13  7947                               for i:= 1 step 1 until max_antal_operatører do
 13  7948                               if læsbit_ia(bpl_def.msk,i) then
 13  7949                               begin
 14  7950                                 iaf1:= i*terminal_beskr_længde;
 14  7951                                 if terminal_tab.iaf1.terminal_tilstand 
 14  7952                                                              shift (-21) < 3 then
 14  7953                                   n:= n+1;
 14  7954                               end;  
 13  7955                               bpl_tilst(k,1):= n;
 13  7956                             end;
 12  7957     <**> <*  
 12  7958                               bpl_tilst(k,1):= bpl_tilst(k,1)-1;
 12  7959       *>                  end;
 11  7960                           signal_bin(bs_mobil_opkald);
 11  7961     <*V*>                 setposition(z_op(nr),0,0);
 11  7962                           ht_symbol(z_op(nr));
 11  7963                         end;
 10  7964                       end;
  9  7965     <*V*>             setposition(z_op(nr),0,0);
  9  7966                       cursor(z_op(nr),24,1);
  9  7967                       if d.op_ref.resultat<> 3 then
  9  7968                         skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat);
  9  7969                     end;
  8  7970                     begin
  9  7971                       boolean l22;
  9  7972     \f

  9  7972     message procedure operatør side 15 - 810521/cl;
  9  7973     
  9  7973                       <* 5 springdefinition *>
  9  7974                       l22:= false;
  9  7975                       if sep=',' then
  9  7976                       disable begin
 10  7977                         setposition(z_op(nr),0,0);
 10  7978                         cursor(z_op(nr),22,1);
 10  7979                         write(z_op(nr),"esc" add 128,1,<:ÆK:>,">",1);
 10  7980                         l22:= true; pos:= 1;
 10  7981                         while læstegn(d.op_ref.data,pos,i)<>0 do
 10  7982                           outchar(z_op(nr),i);
 10  7983                       end;
  9  7984     
  9  7984                       tofrom(d.op_ref.data,ia,indeks*2);
  9  7985     <*V*>             wait_ch(cs_op_fil(nr),vt_op,true,-1<*timeout*>);
  9  7986                       start_operation(vt_op,200+nr,cs_operatør(nr),
  9  7987                                       101<*opret fil*>);
  9  7988                       d.vt_op.data(1):=128;<*postantal*>
  9  7989                       d.vt_op.data(2):=2;  <*postlængde*>
  9  7990                       d.vt_op.data(3):=1;  <*segmentantal*>
  9  7991                       d.vt_op.data(4):=
  9  7992                               2 shift 10;  <*spool fil*>
  9  7993                       signal_ch(cs_opret_fil,vt_op,op_optype);
  9  7994                       pos:=vt_op;<*variabel lånes*>
  9  7995     <*V*>             wait_ch(cs_operatør(nr),vt_op,op_optype,-1<*timeout*>);
  9  7996     <*+4*>            if vt_op<>pos then
  9  7997                         fejlreaktion(11<*fremmed post*>,vt_op,<:springdef:>,0);
  9  7998                       if d.vt_op.data(9)<>0 then
  9  7999                         fejlreaktion(13<*opret-fil*>,d.vt_op.data(9),
  9  8000                           <:op kommando(springdefinition):>,0);
  9  8001     <*-4*>
  9  8002                       iaf:=0;
  9  8003                       for i:=1 step 1 until indeks-2 do
  9  8004                       begin
 10  8005                         disable k:=modif_fil(d.vt_op.data(4),i,j);
 10  8006                         if k<>0 then
 10  8007                           fejlreaktion(7<*modif-fil*>,k,
 10  8008                             <:op kommando(spring-def):>,0);
 10  8009                         fil(j).iaf(1):=d.op_ref.data(i+2);
 10  8010                       end;
  9  8011     \f

  9  8011     message procedure operatør side 15a - 820301/cl;
  9  8012     
  9  8012                       while sep = ',' do
  9  8013                       begin
 10  8014                         setposition(z_op(nr),0,0);
 10  8015                         cursor(z_op(nr),23,1);
 10  8016                         write(z_op(nr),"esc" add 128,1,<:ÆK:>,<:+>:>);
 10  8017                         setposition(z_op(nr),0,0);
 10  8018                         wait(bs_fortsæt_adgang);
 10  8019                         pos:= 1; j:= 0;
 10  8020                         while læs_store(z_op(nr),i) < 8 do
 10  8021                         begin
 11  8022                           skrivtegn(fortsæt,pos,i);
 11  8023                           if i = '?' or i = 'esc' then j:= 1; <* skip kommando *>
 11  8024                         end;
 10  8025                         skrivtegn(fortsæt,pos,'em');
 10  8026                         afsluttext(fortsæt,pos);
 10  8027                         sluttegn:= i;
 10  8028                         if j<>0 then
 10  8029                         begin
 11  8030                           setposition(z_op(nr),0,0);
 11  8031                           cursor(z_op(nr),24,1);
 11  8032                           skriv_kvittering(z_op(nr),opref,-1,53);<*annulleret*>
 11  8033                           cursor(z_op(nr),1,1);
 11  8034                           goto sp_ann;
 11  8035                         end;
 10  8036     \f

 10  8036     message procedure operatør side 16 - 810521/cl;
 10  8037     
 10  8037                         disable begin
 11  8038                         integer array værdi(1:4);
 11  8039                         integer a_pos,res;
 11  8040                           pos:= 0;
 11  8041                           repeat
 11  8042                             apos:= pos;
 11  8043                             læs_paramsæt(fortsæt,a_pos,0,værdi,sep,res);
 11  8044                             if res >= 0 then
 11  8045                             begin
 12  8046                               if res=0 and (sep=',' or indeks>2) then <*ok*>
 12  8047                               else if res=0 then res:= -25 <*parameter mangler*>
 12  8048                               else if res=10 and (værdi(1)<1 or værdi(1)>99) then
 12  8049                                   res:= -44 <*intervalstørrelse ulovlig*>
 12  8050                               else if res=10 and (værdi(2)<1 or værdi(2)>99) then
 12  8051                                   res:= -6  <*løbnr ulovligt*>
 12  8052                               else if res=10 then
 12  8053                               begin
 13  8054                                 k:=modiffil(d.vt_op.data(4),indeks-1,j);
 13  8055                                 if k<>0 then fejlreaktion(7<*modiffil*>,k,
 13  8056                                    <:op kommando(spring-def):>,0);
 13  8057                                 iaf:= 0;
 13  8058                                 fil(j).iaf(1):= værdi(1) shift 12 + værdi(2);
 13  8059                                 indeks:= indeks+1;
 13  8060                                 if sep = ',' then res:= 0;
 13  8061                               end
 12  8062                               else res:= -27; <*parametertype*>
 12  8063                             end;
 11  8064                             if res>0 then pos:= a_pos;
 11  8065                           until sep<>'sp' or res<=0;
 11  8066     
 11  8066                           if res<0 then
 11  8067                           begin
 12  8068                             d.op_ref.resultat:= -res;
 12  8069                             i:=1; j:= 1;
 12  8070                             hægt_tekst(d.op_ref.data,i,fortsæt,j);
 12  8071                             afsluttext(d.op_ref.data,i);
 12  8072                           end;
 11  8073                         end;
 10  8074     \f

 10  8074     message procedure operatør side 17 - 810521/cl;
 10  8075     
 10  8075                         if d.op_ref.resultat > 3 then
 10  8076                         begin
 11  8077                           setposition(z_op(nr),0,0);
 11  8078                           if l22 then
 11  8079                           begin
 12  8080                             cursor(z_op(nr),22,1); l22:= false;
 12  8081                             write(z_op(nr),"-",80);
 12  8082                           end;
 11  8083                           cursor(z_op(nr),24,1);
 11  8084                           skriv_kvittering(z_op(nr),op_ref,pos,d.opref.resultat);
 11  8085                           goto sp_ann;
 11  8086                         end;
 10  8087                         if sep=',' then
 10  8088                         begin
 11  8089                           setposition(z_op(nr),0,0);
 11  8090                           cursor(z_op(nr),22,1);
 11  8091                           write(z_op(nr),"esc" add 128,1,<:ÆK:>,<:+>:>);
 11  8092                           pos:= 1; l22:= true;
 11  8093                           while læstegn(fortsæt,pos,i)<>0 do
 11  8094                             outchar(z_op(nr),i);
 11  8095                         end;
 10  8096                         signalbin(bs_fortsæt_adgang);
 10  8097                       end while sep = ',';
  9  8098                       d.vt_op.data(1):= indeks-2;
  9  8099                       k:= sætfildim(d.vt_op.data);
  9  8100                       if k<>0 then fejlreaktion(9,k,<:op kommando(spring-def):>,0);
  9  8101                       d.op_ref.data(3):= d.vt_op.data(4); <*filref*>
  9  8102                       signalch(cs_op_fil(nr),vt_op,op_optype or gen_optype);
  9  8103                       d.op_ref.retur:=cs_operatør(nr);
  9  8104                       pos:=op_ref;
  9  8105                       signal_ch(cs_vt,op_ref,gen_optype or op_optype);
  9  8106     <*V*>             wait_ch(cs_operatør(nr),op_ref,op_optype,-1<*timeout*>);
  9  8107     <*+4*>            if pos<>op_ref then
  9  8108                         fejlreaktion(11<*fremmed post*>,op_ref,
  9  8109                           <:op kommando(springdef retur fra vt):>,0);
  9  8110     <*-4*>
  9  8111     \f

  9  8111     message procedure operatør side 18 - 810521/cl;
  9  8112     
  9  8112     <*V*>             setposition(z_op(nr),0,0);
  9  8113                       if l22 then
  9  8114                       begin
 10  8115                         cursor(z_op(nr),22,1);
 10  8116                         write(z_op(nr),"-",80);
 10  8117                       end;
  9  8118                       cursor(z_op(nr),24,1);
  9  8119                       skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat);
  9  8120     
  9  8120                       if false then
  9  8121                       begin
 10  8122               sp_ann:   signalch(cs_slet_fil,vt_op,op_optype);
 10  8123                         waitch(cs_operatør(nr),vt_op,op_optype,-1);
 10  8124                         signalch(cs_op_fil(nr),vt_op,op_optype or vt_optype);
 10  8125                         signalbin(bs_fortsæt_adgang);
 10  8126                       end;
  9  8127                         
  9  8127                     end;
  8  8128     
  8  8128                     begin
  9  8129     \f

  9  8129     message procedure operatør side 19 - 810522/cl;
  9  8130     
  9  8130                       <* 6 spring  (igangsæt)
  9  8131                            spring,annuler
  9  8132                            spring,reserve     *>
  9  8133     
  9  8133                       tofrom(d.op_ref.data,ia,6);
  9  8134                       d.op_ref.retur:=cs_operatør(nr);
  9  8135                       indeks:=op_ref;
  9  8136                       signal_ch(cs_vt,op_ref,gen_optype or op_optype);
  9  8137     <*V*>             wait_ch(cs_operatør(nr),
  9  8138                               op_ref,
  9  8139                               op_optype,
  9  8140                               -1<*timeout*>);
  9  8141     <*+2*>            if testbit10 and overvåget then
  9  8142                       disable begin
 10  8143                         skriv_operatør(out,0);
 10  8144                         write(out,"nl",1,<:op operation retur fra vt:>);
 10  8145                         skriv_op(out,op_ref);
 10  8146                       end;
  9  8147     <*-2*>
  9  8148     <*+4*>            if indeks<>op_ref then
  9  8149                         fejlreaktion(11<*fremmed post*>,op_ref,
  9  8150                                      <:op kommando(spring):>,0);
  9  8151     <*-4*>
  9  8152     
  9  8152     <*V*>             setposition(z_op(nr),0,0);
  9  8153                       cursor(z_op(nr),24,1);
  9  8154                       skriv_kvittering(z_op(nr),if (d.op_ref.resultat=11 or
  9  8155                           d.op_ref.resultat=12) and kode=34 <*SP,R*> then
  9  8156                           d.op_ref.data(4) else op_ref,-1,d.op_ref.resultat);
  9  8157                     end;
  8  8158     
  8  8158                     begin
  9  8159     \f

  9  8159     message procedure operatør side 20 - 810525/cl;
  9  8160     
  9  8160                       <* 7 spring(-oversigts-)rapport *>
  9  8161     
  9  8161                       d.op_ref.retur:=cs_operatør(nr);
  9  8162                       tofrom(d.op_ref.data,ia,4);
  9  8163                       indeks:=op_ref;
  9  8164                       signal_ch(cs_vt,op_ref,gen_optype or op_optype);
  9  8165     <*V*>             wait_ch(cs_operatør(nr),op_ref,op_optype,-1<*timeout*>);
  9  8166     <*+2*>            disable if testbit10 and overvåget then
  9  8167                       begin
 10  8168                         write(out,"nl",1,<:operatør operation retur fra vt:>);
 10  8169                         skriv_op(out,op_ref);
 10  8170                       end;
  9  8171     <*-2*>
  9  8172     
  9  8172     <*+4*>            if op_ref<>indeks then
  9  8173                         fejlreaktion(11<*fremmed post*>,op_ref,
  9  8174                           <:op kommando(spring-rapport):>,0);
  9  8175     <*-4*>
  9  8176     
  9  8176     <*V*>             setposition(z_op(nr),0,0);
  9  8177                       if d.op_ref.resultat<>3 then
  9  8178                       begin
 10  8179                         cursor(z_op(nr),24,1);
 10  8180                         skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat);
 10  8181                       end
  9  8182                       else
  9  8183                       begin
 10  8184                         boolean p_skrevet;
 10  8185                         integer bogst,løb;
 10  8186     
 10  8186                         skærmmåde:= 1;
 10  8187     
 10  8187                         if kode = 32 then <* spring,vis *>
 10  8188                         begin
 11  8189                           ll:= d.op_ref.data(1) shift (-5) extract 10;
 11  8190                           bogst:= d.op_ref.data(1) extract 5;
 11  8191                           if bogst<>0 then bogst:= bogst + 'A' - 1;
 11  8192     <*V*>                 write(z_op(nr),"esc" add 128,1,<:ÆH:>,
 11  8193                             "esc" add 128,1,<:ÆJ:>,"sp",10,"*",5,"sp",5,
 11  8194                             <:spring: :>,
 11  8195                             <<d>,ll,false add bogst,(bogst<>0) extract 1,
 11  8196                             <:.:>,string (extend d.op_ref.data(2) shift 24));
 11  8197                           raf:= data+8;
 11  8198                           if d.op_ref.raf(1)<>0.0 then
 11  8199                             write(z_op(nr),<:, startet :>,<<zddddd>,
 11  8200                               round systime(4,d.op_ref.raf(1),r),<:.:>,round r)
 11  8201                           else write(z_op(nr),<:, ikke startet:>);
 11  8202                           write(z_op(nr),"sp",5,"*",5,"nl",2);
 11  8203     \f

 11  8203     message procedure operatør side 21 - 810522/cl;
 11  8204     
 11  8204                           p_skrevet:= false;
 11  8205                           for pos:=1 step 1 until d.op_ref.data(3) do
 11  8206                           begin
 12  8207                             disable i:=læsfil(d.op_ref.data(4),pos,j);
 12  8208                             if i<>0 then
 12  8209                               fejlreaktion(5<*læsfil*>,i,
 12  8210                                 <:op kommando(spring,vis):>,0);
 12  8211                             iaf:=0;
 12  8212                             i:= fil(j).iaf(1);
 12  8213                             if i < 0 and -, p_skrevet then
 12  8214                             begin
 13  8215                               outchar(z_op(nr),'('); p_skrevet:= true;
 13  8216                             end;
 12  8217                             if i > 0 and p_skrevet then
 12  8218                             begin
 13  8219                               outchar(z_op(nr),')'); p_skrevet:= false;
 13  8220                             end;
 12  8221                             if pos mod 2 = 0 then
 12  8222                               write(z_op(nr),<< dd>,abs i,<:.:>)
 12  8223                             else
 12  8224                               write(z_op(nr),true,3,<<d>,abs i);
 12  8225                             if pos mod 21 = 0 then outchar(z_op(nr),'nl');
 12  8226                           end;
 11  8227                           write(z_op(nr),"*",1);
 11  8228     \f

 11  8228     message procedure operatør side 22 - 810522/cl;
 11  8229     
 11  8229                         end
 10  8230                         else if kode=33 then <* spring,oversigt *>
 10  8231                         begin
 11  8232                           write(z_op(nr),"esc" add 128,1,<:ÆH:>,
 11  8233                             "esc" add 128,1,<:ÆJ:>,"sp",10,"*",5,"sp",5,
 11  8234                             <:spring oversigt:>,"sp",5,"*",5,"nl",2);
 11  8235     
 11  8235                           for pos:=1 step 1 until d.op_ref.data(1) do
 11  8236                           begin
 12  8237                             disable i:=læsfil(d.op_ref.data(2),pos,j);
 12  8238                             if i<>0 then 
 12  8239                               fejlreaktion(5<*læsfil*>,i,
 12  8240                                 <:op kommando(spring-oversigt):>,0);
 12  8241                             iaf:=0;
 12  8242                             ll:=fil(j).iaf(1) shift (-5) extract 10;
 12  8243                             bogst:=fil(j).iaf(1) extract 5;
 12  8244                             if bogst<>0 then bogst:=bogst + 'A' - 1;
 12  8245                             write(z_op(nr),"sp",(bogst=0) extract 1 + 1,<<ddd>,ll,
 12  8246                               false add bogst,(bogst<>0) extract 1,<:.:>,true,4,
 12  8247                               string (extend fil(j).iaf(2) shift 24));
 12  8248                             if fil(j,2)<>0.0 then
 12  8249                               write(z_op(nr),<:startet :>,<<zddddd>,
 12  8250                                 round systime(4,fil(j,2),r),<:.:>,round r);
 12  8251                             outchar(z_op(nr),'nl');
 12  8252                           end;
 11  8253                           write(z_op(nr),"*",1);
 11  8254                         end;
 10  8255                         <* slet fil *>
 10  8256                         d.op_ref.opkode:= 104;
 10  8257                         if kode=33 then d.op_ref.data(4):= d.op_ref.data(2);
 10  8258                         signalch(cs_slet_fil,op_ref,gen_optype or op_optype);
 10  8259                         waitch(cs_operatør(nr),op_ref,op_optype or gen_optype,-1);
 10  8260                       end; <* resultat=3 *>
  9  8261     
  9  8261                     end;
  8  8262     
  8  8262                     begin
  9  8263     \f

  9  8263     message procedure operatør side 23 - 940522/cl;
  9  8264     
  9  8264     
  9  8264                       <* 8 SLUT *>
  9  8265                       trapmode:= 1 shift 13;
  9  8266                       trap(-2);
  9  8267                     end;
  8  8268     
  8  8268                     begin
  9  8269                       <* 9 stopniveauer,definer *>
  9  8270                       integer fno;
  9  8271     
  9  8271                       for i:= 1 step 1 until 3 do
  9  8272                         operatør_stop(nr,i):= ia(i+1);
  9  8273                       i:= modif_fil(tf_stoptabel,nr,fno);
  9  8274                       if i<>0 then fejlreaktion(7,i,<:stoptabel:>,0);
  9  8275                       iaf:=0;
  9  8276                       for i:= 0,1,2,3 do
  9  8277                         fil(fno).iaf(i+1):= operatør_stop(nr,i);
  9  8278                       setposition(fil(fno),0,0);
  9  8279                       setposition(z_op(nr),0,0);
  9  8280                       cursor(z_op(nr),24,1);
  9  8281                       skriv_kvittering(z_op(nr),0,-1,3);
  9  8282                     end;
  8  8283     
  8  8283                     begin
  9  8284     \f

  9  8284     message procedure operatør side 24 - 940522/cl;
  9  8285                       
  9  8285                       <* 10 stopniveauer,vis *>
  9  8286                       integer bpl,j,k;
  9  8287     
  9  8287                       skærm_måde:= 1;
  9  8288                       setposition(z_op(nr),0,0);
  9  8289                       write(z_op(nr),"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>,
  9  8290                         <:stopniveauer: :>);
  9  8291                       for i:= 0 step 1 until 3 do
  9  8292                       begin
 10  8293                         bpl:= operatør_stop(nr,i);
 10  8294                         write(z_op(nr),if i=0 then <:  :> else <: -> :>,
 10  8295                           if bpl=0 then <:ALLE:> else string bpl_navn(bpl));
 10  8296                       end;
  9  8297                       write(z_op(nr),"nl",2,<:operatørpladser:  :>);
  9  8298                       j:=0;
  9  8299                       for bpl:= 1 step 1 until max_antal_operatører do
  9  8300                       if bpl_navn(bpl)<>long<::> then
  9  8301                       begin
 10  8302                         if j mod 8 = 0 and j > 0 then
 10  8303                           write(z_op(nr),"nl",1,"sp",18);
 10  8304                         iaf:= bpl*terminal_beskr_længde;
 10  8305                         write(z_op(nr),if bpl_tilst(bpl,1) > 0 then "*" else " ",1,
 10  8306                           true,6,string bpl_navn(bpl));
 10  8307                         j:=j+1;
 10  8308                       end;
  9  8309                       write(z_op(nr),"nl",2,<:operatørgrupper:   :>);
  9  8310                       j:=0;
  9  8311                       for bpl:= 65 step 1 until top_bpl_gruppe do
  9  8312                       if bpl_navn(bpl)<>long<::> then
  9  8313                       begin
 10  8314                         if j mod 8 = 0 and j > 0 then
 10  8315                           write(z_op(nr),"nl",1,"sp",19);
 10  8316                         write(z_op(nr),true,7,string bpl_navn(bpl));
 10  8317                         j:=j+1;
 10  8318                       end;
  9  8319                       write(z_op(nr),"nl",1,"*",1);
  9  8320                     end;
  8  8321     
  8  8321                     begin
  9  8322                       <* 11 alarmlængde *>
  9  8323                       integer fno;
  9  8324     
  9  8324                       if indeks > 0 then
  9  8325                       begin
 10  8326                         opk_alarm.tab.alarm_lgd:= ia(1);
 10  8327                         i:= modiffil(tf_alarmlgd,nr,fno);
 10  8328                         if i<>0 then fejlreaktion(7,i,<:alarmlgd:>,0);
 10  8329                         iaf:= 0;
 10  8330                         fil(fno).iaf(1):= opk_alarm.tab.alarm_lgd;
 10  8331                         setposition(fil(fno),0,0);
 10  8332                       end;
  9  8333     
  9  8333                       setposition(z_op(nr),0,0);
  9  8334                       cursor(z_op(nr),24,1);
  9  8335                       skriv_kvittering(z_op(nr),opk_alarm.tab.alarm_lgd,-1,63);
  9  8336                     end;                  
  8  8337     
  8  8337                     begin
  9  8338                       <* 12 CC *>
  9  8339                       integer i, c;
  9  8340     
  9  8340                       i:= 1;
  9  8341                       while læstegn(ia,i+0,c)<>0 and
  9  8342                          i<(op_spool_postlgd-op_spool_text)//2*3
  9  8343                       do skrivtegn(d.opref.data,i,c);
  9  8344                       repeat skrivtegn(d.opref.data,i,0) until (i mod 6)=1;
  9  8345     
  9  8345                       d.opref.retur:= cs_operatør(nr);
  9  8346                       signalch(cs_op_spool,opref,op_optype);
  9  8347     <*V*>             waitch(cs_operatør(nr),opref,op_optype,-1);
  9  8348                                                            
  9  8348                       setposition(z_op(nr),0,0);
  9  8349                       cursor(z_op(nr),24,1);
  9  8350                       skriv_kvittering(z_op(nr),opref,-1,d.opref.resultat);
  9  8351                     end;
  8  8352     
  8  8352                     <* 13 EXkluder skærmen *>
  8  8353                     begin
  9  8354                       d.opref.resultat:= 2;
  9  8355                       setposition(z_op(nr),0,0);
  9  8356                       cursor(z_op(nr),24,1);
  9  8357                       skriv_kvittering(z_op(nr),opref,-1,d.opref.resultat);
  9  8358     
  9  8358                       waitch(cs_op_fil(nr),vt_op,true,-1);
  9  8359                       start_operation(vt_op,curr_coruid,cs_op_fil(nr),2);
  9  8360                       d.vt_op.data(1):= nr;
  9  8361                       signalch(cs_rad,vt_op,gen_optype);
  9  8362                     end;
  8  8363     
  8  8363                     begin
  9  8364                       <* 14 CQF-tabel,vis *>
  9  8365     
  9  8365                       skærm_måde:= 1;
  9  8366                       setposition(z_op(nr),0,0);
  9  8367                       write(z_op(nr),"esc" add 128,1,<:ÆH:>,
  9  8368                         "esc" add 128,1,<:ÆJ:>);
  9  8369                       skriv_cqf_tabel(z_op(nr),false);
  9  8370                       write(z_op(nr),"*",1);
  9  8371                     end;
  8  8372     
  8  8372                     begin
  9  8373                       d.op_ref.resultat:= 45; <*ikke implementeret*>
  9  8374                       setposition(z_op(nr),0,0);
  9  8375                       cursor(z_op(nr),24,1);
  9  8376                       skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat);
  9  8377                     end;
  8  8378     \f

  8  8378     message procedure operatør side x - 810522/hko;
  8  8379     
  8  8379     <*+4*>          fejl_reaktion(3<*programfejl*>,j,<:case 'opkode':>,2)
  8  8380     <*-4*>
  8  8381                   end;<*case j *>
  7  8382                 end <* j > 0 *>
  6  8383                 else
  6  8384                 begin
  7  8385     <*V*>         setposition(z_op(nr),0,0);
  7  8386                   if sluttegn<>'nl' then outchar(z_op(nr),'nl');
  7  8387                   skriv_kvittering(z_op(nr),op_ref,-1,
  7  8388                                    45 <*ikke implementeret *>);
  7  8389                 end;
  6  8390               end;<* godkendt *>
  5  8391     
  5  8391     <*V*>     setposition(z_op(nr),0,0);
  5  8392     <*???*>
  5  8393              while (læsbit_ia(samtaleflag,nr) or læsbit_ia(opkaldsflag,nr) or
  5  8394                læsbit_ia(kanalflag,nr) ) and læsbit_ia(operatørmaske,nr) and
  5  8395                skærmmåde = 0 do
  5  8396              begin
  6  8397               if sætbit_ia(samtaleflag,nr,0)=1 then
  6  8398               begin
  7  8399                 skriv_skærm_bvs(nr);
  7  8400     <*940920    if op_talevej(nr)=0 then status:= 0
  7  8401                 else inspect(bs_talevej_udkoblet(op_talevej(nr)),status);
  7  8402                 if status>0 then
  7  8403                 begin
  7  8404                   for ll:= 1 step 1 until terminalbeskrlængde//2 do
  7  8405                     terminaltab.ref(ll):= 0;
  7  8406                   skriv_skærm_bvs(nr);
  7  8407                   wait(bs_talevej_udkoblet(op_talevej(nr)));
  7  8408                 end;
  7  8409                 for i:= 1 step 1 until max_antal_kanaler do
  7  8410                 begin
  7  8411                   iaf:= (i-1)*kanalbeskrlængde;
  7  8412                   inspect(ss_samtale_nedlagt(i),status);
  7  8413                   if status>0 and 
  7  8414                     tv_operatør(kanaltab.iaf.kanal_tilstand shift (-16))=nr then
  7  8415                   begin
  7  8416                     kanaltab.iaf.kanal_tilstand:=
  7  8417                       kanaltab.iaf(1) shift (-10) extract 6 shift 10;
  7  8418                     for ll:= 2 step 1 until kanalbeskrlængde//2 do
  7  8419                       kanaltab.iaf(ll):= 0;
  7  8420                     skriv_skærm_kanal(nr,i);
  7  8421                     repeat
  7  8422                       wait(ss_samtale_nedlagt(i));
  7  8423                       inspect(ss_samtale_nedlagt(i),status);
  7  8424                     until status=0;
  7  8425                   end;
  7  8426                 end;
  7  8427     940920*>    cursor(z_op(nr),1,1);
  7  8428                 setposition(z_op(nr),0,0);
  7  8429               end;
  6  8430               if (læsbit_ia(opkaldsflag,nr) or læsbit_ia(kanalflag,nr))
  6  8431                  and skærmmåde = 0
  6  8432                  and læsbit_ia(operatørmaske,nr) then
  6  8433               begin
  7  8434                 if sætbit_ia(opkaldsflag,nr,0) = 1 then
  7  8435                   skriv_skærm_opkaldskø(nr);
  7  8436                 if sætbit_ia(kanalflag,nr,0) = 1 then
  7  8437                 begin
  8  8438                   for i:= 1 step 1 until max_antal_kanaler do
  8  8439                     skriv_skærm_kanal(nr,i);
  8  8440                 end;
  7  8441                 cursor(z_op(nr),1,1);
  7  8442     <*V*>       setposition(z_op(nr),0,0);
  7  8443               end;
  6  8444              end;
  5  8445               d.op_ref.retur:=cs_att_pulje;
  5  8446               disable afslut_kommando(op_ref);
  5  8447             end; <* indlæs kommando *>
  4  8448     
  4  8448             begin
  5  8449     \f

  5  8449     message procedure operatør side x+1 - 810617/hko;
  5  8450     
  5  8450               <* 2: inkluder *>
  5  8451               integer k,n;
  5  8452               integer array field msk,iaf1;
  5  8453     
  5  8453               i:=monitor(4) process address:(z_op(nr),0,ia);
  5  8454               if i=0 then
  5  8455               begin
  6  8456                 fejlreaktion(3<*programfejl*>,nr,
  6  8457                     <:operatør(nr) eksisterer ikke:>,1);
  6  8458                 d.op_ref.resultat:=28;
  6  8459               end
  5  8460               else
  5  8461               begin
  6  8462                 i:=monitor(8) reserve process:(z_op(nr),0,ia);
  6  8463                 d.op_ref.resultat:=if i<>0 then 16 <*skærm optaget*>
  6  8464                                    else if d.op_ref.opkode = 0 then 0
  6  8465                                    else  3;<*udført*>
  6  8466                 if i > 0 then
  6  8467                   fejlreaktion(4<*monitor res*>,nr*100 +i,
  6  8468                                <:operatørskærm reservation:>,1)
  6  8469                 else
  6  8470                 begin
  7  8471                   i:=terminal_tab.ref.terminal_tilstand;
  7  8472     <*940418/cl inkluderet sættes i stop - start *>
  7  8473                   kode:= d.opref.opkode extract 12;
  7  8474                   if kode <> 0 then
  7  8475                     terminal_tab.ref.terminal_tilstand:=
  7  8476                       (d.opref.opkode shift (-12) shift 21) + (i extract 21)
  7  8477                   else
  7  8478     <*940418/cl inkluderet sættes i stop - slut *>
  7  8479                     terminal_tab.ref.terminal_tilstand:= i extract 
  7  8480                       (if i shift(-21) extract 2 = 3 then 21 else 23);
  7  8481                   for i:= 1 step 1 until max_antal_kanaler do
  7  8482                   begin
  8  8483                     iaf:= (i-1)*kanalbeskrlængde;
  8  8484                     sætbit_ia(kanaltab.iaf.kanal_alarm,nr,0);
  8  8485                   end;
  7  8486                   skærm_måde:= 0;
  7  8487                   sætbit_ia(operatørmaske,nr,
  7  8488                     (if terminal_tab.ref.terminal_tilstand shift (-21) = 3
  7  8489                      then 0 else 1));
  7  8490                   for k:= nr, 65 step 1 until top_bpl_gruppe do
  7  8491                   begin
  8  8492                     msk:= k*op_maske_lgd;
  8  8493                     if læsbit_ia(bpl_def.msk,nr) then 
  8  8494     <**>            begin
  9  8495                       n:= 0;
  9  8496                       for i:= 1 step 1 until max_antal_operatører do
  9  8497                       if læsbit_ia(bpl_def.msk,i) then
  9  8498                       begin
 10  8499                         iaf1:= i*terminal_beskr_længde;
 10  8500                         if terminal_tab.iaf1.terminal_tilstand 
 10  8501                                                      shift (-21) < 3 then
 10  8502                           n:= n+1;
 10  8503                       end;  
  9  8504                       bpl_tilst(k,1):= n;
  9  8505                     end;
  8  8506     <**> <*  
  8  8507                       bpl_tilst(k,1):= bpl_tilst(k,1) + 
  8  8508                         (if læsbit_ia(operatørmaske,nr) then 1 else 0);
  8  8509       *>          end;
  7  8510                   tofrom(opkaldsflag,alle_operatører,op_maske_lgd);
  7  8511                   sætbit_ia(opkaldsflag,nr,0);
  7  8512                   signal_bin(bs_mobil_opkald);
  7  8513     <*940418/cl inkluderet sættes i stop - start *>
  7  8514                   if terminal_tab.ref.terminal_tilstand shift (-21) = 3 then
  7  8515     <*V*>           ht_symbol(z_op(nr))
  7  8516                   else
  7  8517     <*940418/cl inkluderet sættes i stop - slut *>
  7  8518     <*V*>           skriv_skærm(nr);
  7  8519                   cursor(z_op(nr),24,1);
  7  8520     <*V*>         setposition(z_op(nr),0,0);
  7  8521                 end;
  6  8522               end;
  5  8523               if d.op_ref.opkode = 0 then
  5  8524                 signal_ch(cs_operatør(nr),op_ref,d.op_ref.optype)
  5  8525               else
  5  8526               signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  5  8527             end;
  4  8528     
  4  8528             begin
  5  8529     \f

  5  8529     message procedure operatør side x+2 - 820304/hko;
  5  8530     
  5  8530               <* 3: ekskluder *>
  5  8531               integer k,n;
  5  8532               integer array field iaf1,msk;
  5  8533     
  5  8533               write(z_op(nr),"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>);
  5  8534     <*V*>     setposition(z_op(nr),0,0);
  5  8535               monitor(10) release process:(z_op(nr),0,ia);
  5  8536               d.op_ref.resultat:=3;
  5  8537               signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  5  8538               terminal_tab.ref.terminal_tilstand:= 7 shift 21 +
  5  8539                 terminal_tab.ref.terminal_tilstand extract 21;
  5  8540               if sæt_bit_ia(operatørmaske,nr,0)=1 then
  5  8541               for k:= nr, 65 step 1 until top_bpl_gruppe do
  5  8542               begin
  6  8543                 msk:= k*op_maske_lgd;
  6  8544                 if læsbit_ia(bpl_def.msk,nr) then 
  6  8545     <**>        begin
  7  8546                   n:= 0;
  7  8547                   for i:= 1 step 1 until max_antal_operatører do
  7  8548                   if læsbit_ia(bpl_def.msk,i) then
  7  8549                   begin
  8  8550                     iaf1:= i*terminal_beskr_længde;
  8  8551                     if terminal_tab.iaf1.terminal_tilstand 
  8  8552                                                  shift (-21) < 3 then
  8  8553                       n:= n+1;
  8  8554                   end;  
  7  8555                   bpl_tilst(k,1):= n;
  7  8556                 end;
  6  8557     <**> <*  
  6  8558                   bpl_tilst(k,1):= bpl_tilst(k,1)-1;
  6  8559       *>      end;
  5  8560               signal_bin(bs_mobil_opkald);
  5  8561               if opk_alarm.tab.alarm_tilst > 0 then
  5  8562               begin
  6  8563                 opk_alarm.tab.alarm_kmdo:= 3;
  6  8564                 signal_bin(bs_opk_alarm);
  6  8565               end;
  5  8566             end;
  4  8567             begin
  5  8568     
  5  8568               <* 4: opdater skærm *>
  5  8569     
  5  8569               signal_ch(cs_op_retur,op_ref,d.op_ref.optype);
  5  8570               while (læsbit_ia(samtaleflag,nr) or læsbit_ia(opkaldsflag,nr) or
  5  8571                 læsbit_ia(kanalflag,nr) ) and læsbit_ia(operatørmaske,nr) and
  5  8572                 skærmmåde=0 do
  5  8573              begin
  6  8574     
  6  8574     <*+2*>    if testbit13 and overvåget then
  6  8575               disable begin
  7  8576                 write(out,"nl",1,<:opdater skærm(:>,<<d>,nr,
  7  8577                   <:) opkaldsflag::>,"nl",1);
  7  8578                 outintbits_ia(out,opkaldsflag,1,op_maske_lgd//2);
  7  8579                 write(out,<: operatørmaske::>,"nl",1);
  7  8580                 outintbits_ia(out,operatørmaske,1,op_maske_lgd//2);
  7  8581                 write(out,<: skærmmåde=:>,skærmmåde,"nl",0);
  7  8582                 ud;
  7  8583               end;
  6  8584     <*-2*>
  6  8585               if sætbit_ia(samtaleflag,nr,0)=1 and op_talevej(nr)<>0 then
  6  8586               begin
  7  8587                 skriv_skærm_bvs(nr);
  7  8588     <*940920    inspect(bs_talevej_udkoblet(op_talevej(nr)),status);
  7  8589                 if status>0 then
  7  8590                 begin
  7  8591                   for ll:= 1 step 1 until terminalbeskrlængde//2 do
  7  8592                     terminaltab.ref(ll):= 0;
  7  8593                   skriv_skærm_bvs(nr);
  7  8594                   wait(bs_talevej_udkoblet(op_talevej(nr)));
  7  8595                 end;
  7  8596                 for i:= 1 step 1 until max_antal_kanaler do
  7  8597                 begin
  7  8598                   iaf:= (i-1)*kanalbeskrlængde;
  7  8599                   inspect(ss_samtale_nedlagt(i),status);
  7  8600                   if status>0 and
  7  8601                     tv_operatør(kanaltab.iaf.kanal_tilstand shift (-16))=nr then
  7  8602                   begin
  7  8603                     kanaltab.iaf.kanal_tilstand:=
  7  8604                       kanaltab.iaf.kanal_tilstand shift (-10) extract 6 shift 10;
  7  8605                     for ll:= 2 step 1 until kanalbeskrlængde//2 do
  7  8606                       kanaltab.iaf(ll):= 0;
  7  8607                     skriv_skærm_kanal(nr,i);
  7  8608                     repeat
  7  8609                       wait(ss_samtale_nedlagt(i));
  7  8610                       inspect(ss_samtale_nedlagt(i),status);
  7  8611                     until status=0;
  7  8612                   end;
  7  8613                 end;
  7  8614     940920*>    cursor(z_op(nr),1,1);
  7  8615                 setposition(z_op(nr),0,0);
  7  8616               end;
  6  8617               if (læsbit_ia(opkaldsflag,nr) or læsbit_ia(kanalflag,nr))
  6  8618                  and læsbit_ia(operatørmaske,nr) and skærmmåde = 0 then
  6  8619               begin
  7  8620     <*V*>       setposition(z_op(nr),0,0);
  7  8621                 if sætbit_ia(opkaldsflag,nr,0) =1 then
  7  8622                   skriv_skærm_opkaldskø(nr);
  7  8623                 if sætbit_ia(kanalflag,nr,0) =1 then
  7  8624                 begin
  8  8625                   for i:=1 step 1 until max_antal_kanaler do
  8  8626                     skriv_skærm_kanal(nr,i);
  8  8627                 end;
  7  8628                 cursor(z_op(nr),1,1);
  7  8629     <*V*>       setposition(z_op(nr),0,0);
  7  8630               end;
  6  8631              end;
  5  8632             end;
  4  8633             begin
  5  8634     \f

  5  8634     message procedure operatør side x+3 - 830310/hko;
  5  8635     
  5  8635               <* 5: samtale etableret *>
  5  8636     
  5  8636               res:= d.op_ref.resultat;
  5  8637               b_v:= d.op_ref.data(3) extract 4;
  5  8638               b_s:= d.op_ref.data(4);
  5  8639               signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  5  8640               if res = 3 and terminal_tab.ref(1) shift(-21) = 2 then
  5  8641               begin
  6  8642                 sætbit_i(terminal_tab.ref(1),21,1);
  6  8643                 sætbit_i(terminal_tab.ref(1),22,0);
  6  8644                 sætbit_i(terminal_tab.ref(1),2,0);
  6  8645                 sæt_hex_ciffer(terminal_tab.ref,3,b_v);
  6  8646                 terminal_tab.ref(2):= b_s;
  6  8647                 sæt_bit_i(terminal_tab.ref(1),2<* opt. *>,0);
  6  8648                 iaf:= (b_s extract 4 - 1)*kanal_beskr_længde;
  6  8649                 kanaltab.iaf.kanal_tilstand:= kanaltab.iaf.kanal_tilstand
  6  8650                   shift (-10) shift 10 + terminal_tab.ref(1) extract 10;
  6  8651     
  6  8651                 if læsbit_ia(operatørmaske,nr) and skærmmåde = 0 then
  6  8652                 begin
  7  8653     <*V*>         setposition(z_op(nr),0,0);
  7  8654                   skriv_skærm_b_v_s(nr);
  7  8655     <*V*>         setposition(z_op(nr),0,0);
  7  8656                 end;
  6  8657               end
  5  8658               else
  5  8659               if terminal_tab.ref(1) shift(-21) = 2 then
  5  8660               begin
  6  8661                 sætbit_i(terminal_tab.ref(1),22,0);
  6  8662                 sætbit_i(terminal_tab.ref(1),2,0);
  6  8663                 sæt_hex_ciffer(terminal_tab.ref,3,b_v);
  6  8664                 terminal_tab.ref(2):= 0;
  6  8665                 if læsbit_ia(operatørmaske,nr) and skærmmåde = 0 then
  6  8666                 begin
  7  8667     <*V*>         setposition(z_op(nr),0,0);
  7  8668                   cursor(z_op(nr),21,17);
  7  8669                   write(z_op(nr),<:EJ FORB:>);
  7  8670     <*V*>         setposition(z_op(nr),0,0);
  7  8671                 end;
  6  8672               end
  5  8673               else fejlreaktion(3<*prg.fejl*>,terminal_tab.ref(1) shift(-21),
  5  8674                      <:terminal tilstand:>,1);
  5  8675             end;
  4  8676     
  4  8676             begin
  5  8677     \f

  5  8677     message procedure operatør side x+4 - 810602/hko;
  5  8678     
  5  8678               <* 6: radiokanal ekskluderet *>
  5  8679     
  5  8679               læs_hex_ciffer(terminal_tab.ref,3,b_v);
  5  8680               pos:= d.op_ref.data(1);
  5  8681               signalch(d.op_ref.retur,op_ref,d.op_ref.optype);
  5  8682               indeks:= terminal_tab.ref(2);
  5  8683               b_s:= if indeks shift (-22) = 3 and indeks extract 22 = pos
  5  8684                     then indeks extract 4 else 0;
  5  8685               if b_v = pos then
  5  8686                 sæt_hex_ciffer(terminal_tab.ref,3,0);
  5  8687               if b_s = pos then
  5  8688               begin
  6  8689                 terminal_tab.ref(2):= 0;
  6  8690                 sætbit_i(terminal_tab.ref(1),21,0);
  6  8691                 sætbit_i(terminal_tab.ref(1),22,0);
  6  8692                 sætbit_i(terminal_tab.ref(1),2,0);
  6  8693               end;
  5  8694               if skærmmåde=0 then
  5  8695               begin
  6  8696                 if b_v = pos or b_s = pos then
  6  8697     <*V*>         skriv_skærm_b_v_s(nr);
  6  8698     <*V*>       skriv_skærm_kanal(nr,pos);
  6  8699                 cursor(z_op(nr),1,1);
  6  8700                 setposition(z_op(nr),0,0);
  6  8701               end;
  5  8702             end;
  4  8703     
  4  8703             begin
  5  8704     \f

  5  8704     message procedure operatør side x+5 - 950118/cl;
  5  8705     
  5  8705               <* 7: operatørmeddelelse *>
  5  8706               integer afs, kl, i;
  5  8707               real dato, t;
  5  8708     
  5  8708               cursor(z_op(nr),24,1);
  5  8709               write(z_op(nr),"esc" add 128,1,<:ÆK:>);
  5  8710               cursor(z_op(nr),23,1);
  5  8711               write(z_op(nr),"esc" add 128,1,<:ÆK:>);
  5  8712     
  5  8712               afs:= d.opref.data.op_spool_kilde;
  5  8713               dato:= systime(4,d.opref.data.op_spool_tid,t);
  5  8714               kl:= round t;
  5  8715               write(z_op(nr),<:! fra op:>,<<d>,afs,"sp",1,
  5  8716                 if afs=0 then <:SYSOP:> else string bpl_navn(afs));
  5  8717               i:= replacechar(1,'.');
  5  8718               disable write(z_op(nr),"sp",1,<<zd_dd_dd>,kl,"nl",1);
  5  8719               replacechar(1,i);
  5  8720               write(z_op(nr),d.opref.data.op_spool_text);
  5  8721     
  5  8721               if terminal_tab.ref.terminal_tilstand shift (-21) <> 3 then
  5  8722               begin
  6  8723                 if opk_alarm.tab.alarm_lgd > 0 and
  6  8724                    opk_alarm.tab.alarm_tilst < 1 and
  6  8725                    opk_alarm.tab.alarm_kmdo < 1
  6  8726                 then
  6  8727                 begin
  7  8728                   opk_alarm.tab.alarm_kmdo := 1;
  7  8729                   signalbin(bs_opk_alarm);
  7  8730                 end
  6  8731                 else
  6  8732                 if opk_alarm.tab.alarm_lgd = 0 then
  6  8733                   write(z_op(nr),"bel",1,"del",8,"bel",1,"del",8,"bel",1);
  6  8734               end;
  5  8735     
  5  8735               setposition(z_op(nr),0,0);
  5  8736               
  5  8736               signalch(d.opref.retur,opref,d.opref.optype);
  5  8737             end;
  4  8738     
  4  8738             begin
  5  8739     
  5  8739     <*+4*>    fejl_reaktion(3<*programfejl *>,aktion,<:case aktion:>,2);
  5  8740     <*-4*>
  5  8741             end
  4  8742           end; <* case aktion+6 *>
  3  8743     
  3  8743          until false;
  3  8744       op_trap:
  3  8745         skriv_operatør(zbillede,1);
  3  8746       end operatør;
  2  8747      
  2  8747     \f

  2  8747     message procedure op_cqftest side 1;
  2  8748     
  2  8748     procedure op_cqftest;
  2  8749     begin                     
  3  8750       integer array field opref, ref, ref1;
  3  8751       integer i, j, tv, cqf, res, pausetid;
  3  8752       real nu, næstetid, kommstart, kommslut;
  3  8753       
  3  8753       procedure skriv_op_cqftest(zud,omfang);
  3  8754         value                        omfang;
  3  8755         zone                     zud;
  3  8756         integer                      omfang;
  3  8757       begin
  4  8758         write(zud,"nl",1,<:+++ op-cqftest:>);
  4  8759         if omfang > 0 then
  4  8760         disable begin     
  5  8761           real t;
  5  8762     
  5  8762           trap(slut);
  5  8763           write(zud,"nl",1,
  5  8764             <:  opref:       :>,opref,"nl",1,
  5  8765             <:  ref:         :>,ref,"nl",1,
  5  8766             <:  i:           :>,i,"nl",1,
  5  8767             <:  tv:          :>,tv,"nl",1,
  5  8768             <:  cqf:         :>,cqf,"nl",1,
  5  8769             <:  res:         :>,res,"nl",1,
  5  8770             <:  pausetid:    :>,pausetid,"nl",1,
  5  8771             <:  nu:          :>,<<zddddd.dddddd>,systime(4,nu,t)+t/1000000,"nl",1,
  5  8772             <:  næste-tid:   :>,systime(4,næstetid,t)+t/1000000,"nl",1,
  5  8773             <::>);
  5  8774           skriv_coru(zud,coru_no(292));
  5  8775     slut:
  5  8776         end;
  4  8777       end skriv_op_cqftest;
  3  8778         
  3  8778       trap(op_cqf_trap);
  3  8779       stackclaim(1000);
  3  8780     
  3  8780       
  3  8780     <*+4*>if (testbit8 and overvåget) or testbit28 then
  3  8781             skriv_op_cqftest(out,0);
  3  8782     <*-4*>
  3  8783     
  3  8783     <*V*> waitch(cs_cqf,opref,op_optype,-1);
  3  8784       repeat
  3  8785         i:= sidste_tv_brugt; tv:= 0;
  3  8786         repeat
  3  8787           i:= (i mod max_antal_taleveje) + 1;
  3  8788           if tv_operatør(i) = 0 then tv:= i;
  3  8789         until (tv<>0) or (i=sidste_tv_brugt);
  3  8790     
  3  8790         if tv<>0 then
  3  8791         begin
  4  8792           tv_operatør(tv):= -1;
  4  8793           systime(1,0.0,nu); næste_tid:= nu + 60*60.0;
  4  8794           for cqf:= 1 step 1 until max_cqf do
  4  8795           begin
  5  8796             ref:= (cqf-1)*cqf_lgd;
  5  8797             if cqf_tabel.ref.cqf_bus > 0 and cqf_tabel.ref.cqf_næste_tid < nu then
  5  8798             begin
  6  8799               startoperation(opref,292,cs_cqf,1 shift 12 + 41);
  6  8800               d.opref.data(1):= tv;
  6  8801               d.opref.data(2):= cqf_tabel.ref.cqf_bus;
  6  8802                       disable if testbit19 then
  6  8803                       begin
  7  8804                         integer i; <*lav en trap-bar blok*>
  7  8805     
  7  8805                         trap(test19_trap);
  7  8806                         systime(1,0,kommstart);
  7  8807                         write(zrl,<<zd dd dd.dd >,now,<:CQF-test start OP :>);
  7  8808                         skriv_id(zrl,d.opref.data(2),0);
  7  8809     test19_trap:        outchar(zrl,'nl');   
  7  8810                       end;
  6  8811               signalch(cs_rad,opref,op_optype or gen_optype);
  6  8812     <*V*>     waitch(cs_cqf,opref,op_optype,-1);
  6  8813               res:= d.opref.resultat;
  6  8814     <*+2*>
  6  8815                       disable if testbit19 then
  6  8816                       begin
  7  8817                         integer i; <*lav en trap-bar blok*>
  7  8818     
  7  8818                         trap(test19_trap);
  7  8819                         systime(1,0,kommslut);
  7  8820                         write(zrl,<<zd dd dd.dd >,now,<:CQF-test  slut OP :>);
  7  8821                         if d.opref.data(7)=2 then outchar(zrl,'*');
  7  8822                         if d.opref.data(9)<>0 then 
  7  8823                         begin
  8  8824                           skriv_id(zrl,d.opref.data(9),0);
  8  8825                           outchar(zrl,' ');
  8  8826                         end;
  7  8827                         if d.opref.data(8)<>0 then
  7  8828                         begin
  8  8829                           skriv_id(zrl,d.opref.data(8),0);
  8  8830                           outchar(zrl,' ');
  8  8831                         end;
  7  8832                         if d.opref.data(12)<>0 then
  7  8833                         begin
  8  8834                           if d.opref.data(12) shift (-20) = 15 then
  8  8835                             write(zrl,<:OMR*:>)
  8  8836                           else
  8  8837                           if d.opref.data(12) shift (-20) = 14 then
  8  8838                             write(zrl,
  8  8839                               string områdenavn(d.opref.data(12) extract 20))
  8  8840                           else
  8  8841                             skriv_id(zrl,d.opref.data(12),0);
  8  8842                           outchar(zrl,' ');
  8  8843                         end;
  7  8844                         if d.opref.data(10)<>0 then
  7  8845                         begin
  8  8846                           skriv_id(zrl,d.opref.data(10),0);
  8  8847                           outchar(zrl,' ');
  8  8848                         end;
  7  8849                         write(zrl,<:res=:>,<<d>,res,<: btid=:>,
  7  8850                           <<dd.dd>,kommslut-kommstart);
  7  8851     test19_trap:        outchar(zrl,'nl');   
  7  8852                       end;
  6  8853     <*-2*>
  6  8854               if res=3 and cqf_tabel.ref.cqf_bus > 0 then
  6  8855               begin
  7  8856                 delay(3);
  7  8857                 d.opref.opkode:= 12 shift 12 + 41;
  7  8858                 d.opref.resultat:= 0;
  7  8859                       disable if testbit19 then
  7  8860                       begin
  8  8861                         integer i; <*lav en trap-bar blok*>
  8  8862     
  8  8862                         trap(test19_trap);
  8  8863                         systime(1,0,kommstart);
  8  8864                         write(zrl,<<zd dd dd.dd >,now,<:CQF-test start NE :>);
  8  8865     test19_trap:        outchar(zrl,'nl');   
  8  8866                       end;
  7  8867                 signalch(cs_rad,opref,op_optype or gen_optype);
  7  8868     <*V*>       waitch(cs_cqf,opref,op_optype,-1);
  7  8869     <*+2*>
  7  8870                       disable if testbit19 then
  7  8871                       begin
  8  8872                         integer i; <*lav en trap-bar blok*>
  8  8873     
  8  8873                         trap(test19_trap);
  8  8874                         systime(1,0,kommslut);
  8  8875                         write(zrl,<<zd dd dd.dd >,now,<:CQF-test  slut NE :>);
  8  8876                         write(zrl,<:res=:>,<<d>,d.opref.resultat,<: btid=:>,
  8  8877                           <<dd.dd>,kommslut-kommstart);
  8  8878     test19_trap:        outchar(zrl,'nl');   
  8  8879                       end;
  7  8880     <*-2*>
  7  8881                 if d.opref.resultat <> 3 then
  7  8882                   fejlreaktion(19,d.opref.resultat,<:CQF-test nedlæg resultat:>,1);
  7  8883                 if cqf_tabel.ref.cqf_bus > 0 and cqf_tabel.ref.cqf_fejl > 0 then
  7  8884                 begin
  8  8885                   startoperation(opref,292,cs_cqf,23);
  8  8886                   i:= 1;
  8  8887                   hægtstring(d.opref.data,i,<:CQF-test bus :>);
  8  8888                   anbringtal(d.opref.data,i,cqf_tabel.ref.cqf_bus,4);
  8  8889                   skriv_tegn(d.opref.data,i,' ');
  8  8890                   hægtstring(d.opref.data,i,string cqf_tabel.ref.cqf_id);
  8  8891                   hægtstring(d.opref.data,i,<: ok!:>);
  8  8892                   repeat afsluttext(d.opref.data,i) until (i mod 6) = 1;
  8  8893                   signalch(cs_io,opref,gen_optype);
  8  8894     <*V*>         waitch(cs_cqf,opref,gen_optype,-1);
  8  8895                 end;
  7  8896                 if cqf_tabel.ref.cqf_bus > 0 then
  7  8897                 begin
  8  8898                   cqf_tabel.ref.cqf_fejl:= 0;
  8  8899                   systime(1,0.0,cqf_tabel.ref.cqf_ok_tid);
  8  8900                   cqf_tabel.ref.cqf_næste_tid:= nu+60*60.0;
  8  8901                 end;
  7  8902               end <*res=3*>
  6  8903               else
  6  8904               if (res=20<*ej forb.*> or res=59<*radiofejl*>) and
  6  8905                  cqf_tabel.ref.cqf_bus > 0
  6  8906               then
  6  8907               begin
  7  8908                 cqf_tabel.ref.cqf_næste_tid:= nu + 60*60.0;
  7  8909                 cqf_tabel.ref.cqf_fejl:= cqf_tabel.ref.cqf_fejl + 1;
  7  8910                 if cqf_tabel.ref.cqf_fejl >= 2 then
  7  8911                 begin
  8  8912                   startoperation(opref,292,cs_cqf,23);
  8  8913                   i:= 1;
  8  8914                   hægtstring(d.opref.data,i,<:CQF-test bus :>);
  8  8915                   anbringtal(d.opref.data,i,cqf_tabel.ref.cqf_bus,4);
  8  8916                   skriv_tegn(d.opref.data,i,' ');
  8  8917                   hægtstring(d.opref.data,i,string cqf_tabel.ref.cqf_id);
  8  8918                   hægtstring(d.opref.data,i,<: ingen forbindelse!:>);
  8  8919                   repeat afsluttext(d.opref.data,i) until (i mod 6) = 1;
  8  8920                   signalch(cs_io,opref,gen_optype);
  8  8921     <*V*>         waitch(cs_cqf,opref,gen_optype,-1);
  8  8922                 end;
  7  8923               end;
  6  8924               delay(10);
  6  8925             end;
  5  8926             if cqf_tabel.ref.cqf_bus > 0 and 
  5  8927                cqf_tabel.ref.cqf_næste_tid < næste_tid
  5  8928             then næste_tid:= cqf_tabel.ref.cqf_næste_tid;
  5  8929           end; <*for cqf*>
  4  8930     
  4  8930           tv_operatør(tv):= 0; tv:= 0;
  4  8931           if op_cqf_tab_ændret then
  4  8932           begin
  5  8933             j:= skrivfil(1033,1,i);
  5  8934             if j<>0 then
  5  8935               fejlreaktion(6,j,<:CQF-test cqf-tabel:>,1);
  5  8936             sorter_cqftab(1,max_cqf);
  5  8937             for cqf:= 1 step 1 until max_cqf do
  5  8938             begin
  6  8939               ref:= (cqf-1)*cqf_lgd;
  6  8940               ref1:= (cqf-1)*cqf_id;
  6  8941               tofrom(fil(i).ref1,cqf_tabel.ref,cqf_id);
  6  8942             end;
  5  8943             op_cqf_tab_ændret:= false;
  5  8944           end;
  4  8945         end; <*tv*>
  3  8946     
  3  8946         systime(1,0.0,nu);
  3  8947         pausetid:= round(næste_tid - nu);
  3  8948         if pausetid < 30 then pausetid:= 30;
  3  8949     
  3  8949     <*V*> delay(pausetid);
  3  8950                  
  3  8950       until false;
  3  8951     
  3  8951     op_cqf_trap:
  3  8952       disable skriv_op_cqftest(zbillede,1);
  3  8953     end op_cqftest;
  2  8954     \f

  2  8954     message procedure op_spool side 1;
  2  8955     
  2  8955     procedure op_spool;
  2  8956     begin                     
  3  8957       integer array field opref, ref;
  3  8958       integer næste_tomme, i;
  3  8959       
  3  8959       procedure skriv_op_spool(zud,omfang);
  3  8960         value                      omfang;
  3  8961         zone                   zud;
  3  8962         integer                    omfang;
  3  8963       begin
  4  8964         write(zud,"nl",1,<:+++ op-spool:>);
  4  8965         if omfang > 0 then
  4  8966         disable begin     
  5  8967           real t;
  5  8968     
  5  8968           trap(slut);
  5  8969           write(zud,"nl",1,
  5  8970             <:  opref:       :>,opref,"nl",1,
  5  8971             <:  næste-tomme: :>,næste_tomme,"nl",1,
  5  8972             <:  ref:         :>,ref,"nl",1,
  5  8973             <:  i:           :>,i,"nl",1,
  5  8974             <::>);
  5  8975           skriv_coru(zud,coru_no(293));
  5  8976     slut:
  5  8977         end;
  4  8978       end skriv_op_spool;
  3  8979         
  3  8979       trap(op_spool_trap);
  3  8980       stackclaim(400);
  3  8981     
  3  8981       næste_tomme:= 0;
  3  8982       
  3  8982     <*+4*>if (testbit8 and overvåget) or testbit28 then
  3  8983             skriv_op_spool(out,0);
  3  8984     <*-4*>
  3  8985     
  3  8985       repeat
  3  8986     <*V*> waitch(cs_op_spool,opref,true,-1);
  3  8987         inspect(ss_op_spool_tomme,i);
  3  8988     
  3  8988         if d.opref.opkode extract 12 <> 37 then
  3  8989         begin
  4  8990           d.opref.resultat:= 31;
  4  8991           fejlreaktion(2<*opkode*>,d.opref.opkode extract 12,<:op_spool:>,1);
  4  8992         end
  3  8993         else
  3  8994         if i<=0 then
  3  8995           d.opref.resultat:= 32 <*ingen fri plads*>
  3  8996         else
  3  8997         begin
  4  8998     <*V*> wait(ss_op_spool_tomme);
  4  8999           ref:= næste_tomme*op_spool_postlgd;
  4  9000           næste_tomme:= (næste_tomme+1) mod op_spool_postantal;
  4  9001           i:= d.opref.opsize - data;
  4  9002           if i > (op_spool_postlgd - op_spool_text) then 
  4  9003             i:= (op_spool_postlgd - op_spool_text);
  4  9004           op_spool_buf.ref.op_spool_kilde:=
  4  9005             (if d.opref.kilde//100 = 2 then d.opref.kilde mod 100 else 0);
  4  9006           op_spool_buf.ref.op_spool_tid:= d.opref.tid;
  4  9007           tofrom(op_spool_buf.ref.op_spool_text,d.opref.data,i);
  4  9008           op_spool_buf.ref(op_spool_postlgd//2):=
  4  9009              op_spool_buf.ref(op_spool_postlgd//2) shift (-8) shift 8;
  4  9010           d.opref.resultat:= 3;
  4  9011     
  4  9011           signal(ss_op_spool_fulde);
  4  9012         end;
  3  9013     
  3  9013         signalch(d.opref.retur,opref,d.opref.optype);
  3  9014       until false;
  3  9015     
  3  9015     op_spool_trap:
  3  9016       disable skriv_op_spool(zbillede,1);
  3  9017     end op_spool;
  2  9018     \f

  2  9018     message procedure op_medd side 1;
  2  9019     
  2  9019     procedure op_medd;
  2  9020     begin
  3  9021       integer array field opref, ref;
  3  9022       integer næste_fulde, i;
  3  9023     
  3  9023       procedure skriv_op_medd(zud,omfang);
  3  9024         value                     omfang;
  3  9025         zone                  zud;
  3  9026         integer                   omfang;
  3  9027       begin
  4  9028         write(zud,"nl",1,<:+++ op-medd:>);
  4  9029         if omfang > 0 then
  4  9030         disable begin     
  5  9031           real t;
  5  9032     
  5  9032           trap(slut);
  5  9033           write(zud,"nl",1,
  5  9034             <:  opref:       :>,opref,"nl",1,
  5  9035             <:  næste-fulde: :>,næste_fulde,"nl",1,
  5  9036             <:  ref:         :>,ref,"nl",1,
  5  9037             <:  i:           :>,i,"nl",1,
  5  9038             <::>);
  5  9039           skriv_coru(zud,coru_no(294));
  5  9040     slut:
  5  9041         end;
  4  9042       end skriv_op_medd;
  3  9043         
  3  9043       trap(op_medd_trap);
  3  9044       næste_fulde:= 0;
  3  9045       stackclaim(400);
  3  9046       
  3  9046     <*+4*>if (testbit8 and overvåget) or testbit28 then
  3  9047             skriv_op_medd(out,0);
  3  9048     <*-4*>
  3  9049     
  3  9049       repeat
  3  9050     <*V*> wait(ss_op_spool_fulde);
  3  9051     <*V*> waitch(cs_op_medd,opref,true,-1);
  3  9052     
  3  9052         ref:= næste_fulde*op_spool_postlgd;
  3  9053         næste_fulde:= (næste_fulde+1) mod op_spool_postantal;
  3  9054     
  3  9054         startoperation(opref,curr_coruid,cs_op_medd,38);
  3  9055         d.opref.resultat:= 0;
  3  9056         tofrom(d.opref.data,op_spool_buf.ref,op_spool_postlgd);
  3  9057         signalch((if op_spool_buf.ref.op_spool_kilde = 0 then cs_op else cs_io),
  3  9058           opref,gen_optype);
  3  9059         signal(ss_op_spool_tomme);
  3  9060       until false;
  3  9061     
  3  9061     op_medd_trap:
  3  9062       disable skriv_op_medd(zbillede,1);
  3  9063     end op_medd;
  2  9064     \f

  2  9064     message procedure alarmur side 1;
  2  9065     
  2  9065     procedure alarmur;
  2  9066     begin
  3  9067       integer ventetid, nr;
  3  9068       integer array field opref, tab;
  3  9069       real nu;
  3  9070       
  3  9070       procedure skriv_alarmur(zud,omfang);
  3  9071         value                     omfang;
  3  9072         zone                  zud;
  3  9073         integer                   omfang;
  3  9074       begin
  4  9075         write(zud,"nl",1,<:+++ alarmur:>);
  4  9076         if omfang > 0 then
  4  9077         disable begin     
  5  9078           real t;
  5  9079     
  5  9079           trap(slut);
  5  9080           write(zud,"nl",1,
  5  9081             <:  ventetid:  :>,ventetid,"nl",1,
  5  9082             <:  nr:        :>,nr,"nl",1,
  5  9083             <:  opref:     :>,opref,"nl",1,
  5  9084             <:  tab:       :>,tab,"nl",1,
  5  9085             <:  nu:       :>,<< zddddd>,systime(4,nu,t),t,"nl",1,
  5  9086             <::>);
  5  9087           skriv_coru(zud,coru_no(295));
  5  9088     slut:
  5  9089         end;
  4  9090       end skriv_alarmur;
  3  9091         
  3  9091       trap(alarmur_trap);
  3  9092       stackclaim(400);
  3  9093     
  3  9093       systime(1,0.0,nu);
  3  9094       ventetid:= -1;
  3  9095       repeat
  3  9096         waitch(cs_opk_alarm_ur,opref,op_optype,ventetid);
  3  9097         if opref > 0 then
  3  9098           signalch(d.opref.retur,opref,op_optype);
  3  9099     
  3  9099         ventetid:= -1;
  3  9100         systime(1,0.0,nu);
  3  9101         for nr:= 1 step 1 until max_antal_operatører do
  3  9102         begin
  4  9103           tab:= (nr-1)*opk_alarm_tab_lgd;
  4  9104           if opk_alarm.tab.alarm_tilst > 0 and
  4  9105              opk_alarm.tab.alarm_lgd >= 0 then
  4  9106           begin
  5  9107             if (nu - opk_alarm.tab.alarm_start) >= opk_alarm.tab.alarm_lgd then
  5  9108             begin
  6  9109               opk_alarm.tab.alarm_kmdo:= 3;
  6  9110               signalbin(bs_opk_alarm);
  6  9111               if ventetid > 2 or ventetid=(-1) then ventetid:= 2;
  6  9112             end
  5  9113             else
  5  9114             if (nu - opk_alarm.tab.alarm_start) < ventetid or ventetid = (-1) then
  5  9115               ventetid:= (nu - opk_alarm.tab.alarm_start);
  5  9116           end;
  4  9117         end;
  3  9118         if ventetid=0 then ventetid:= 1;
  3  9119       until false;
  3  9120     
  3  9120     alarmur_trap:
  3  9121       disable skriv_alarmur(zbillede,1);
  3  9122     end alarmur;
  2  9123     \f

  2  9123     message procedure opkaldsalarmer side 1;
  2  9124     
  2  9124     procedure opkaldsalarmer;
  2  9125     begin
  3  9126       integer nr, ny_kommando, tilst, aktion, tt;
  3  9127       integer array field tab, opref, alarmop;
  3  9128     
  3  9128       procedure skriv_opkaldsalarmer(zud,omfang);
  3  9129         value                            omfang;
  3  9130         zone                         zud;
  3  9131         integer                          omfang;
  3  9132       begin
  4  9133         write(zud,"nl",1,<:+++ opkaldsalarmer:>);
  4  9134         if omfang>0 then
  4  9135         disable begin
  5  9136           real array field raf;
  5  9137           trap(slut);
  5  9138           raf:=0;
  5  9139           write(zud,"nl",1,
  5  9140               <:  nr:          :>,nr,"nl",1,
  5  9141               <:  ny-kommando: :>,ny_kommando,"nl",1,
  5  9142               <:  tilst:       :>,tilst,"nl",1,
  5  9143               <:  aktion:      :>,aktion,"nl",1,
  5  9144               <:  tt:          :>,false add tt,1,"nl",1,
  5  9145               <:  tab:         :>,tab,"nl",1,
  5  9146               <:  opref:       :>,opref,"nl",1,
  5  9147               <:  alarmop:     :>,alarmop,"nl",1,
  5  9148               <::>);
  5  9149           skriv_coru(zud,coru_no(296));
  5  9150     slut:
  5  9151         end;
  4  9152       end skriv_opkaldsalarmer;
  3  9153     
  3  9153       trap(opk_alarm_trap);
  3  9154       stackclaim(400);
  3  9155     
  3  9155     <*+2*>if (testbit8 and overvåget) or testbit28 then
  3  9156             skriv_opkaldsalarmer(out,0);
  3  9157     <*-2*>
  3  9158     
  3  9158       repeat
  3  9159         wait(bs_opk_alarm);
  3  9160         alarmop:= 0;
  3  9161         for nr:= 1 step 1 until max_antal_operatører do
  3  9162         begin
  4  9163           tab:= (nr-1)*opk_alarm_tab_lgd;
  4  9164           ny_kommando:= opk_alarm.tab.alarm_kmdo;
  4  9165           tilst:= opk_alarm.tab.alarm_tilst;
  4  9166           aktion:= case ny_kommando+1 of (
  4  9167             <*ingenting*> case tilst+1 of (4,4,4),
  4  9168             <*normal   *> case tilst+1 of (1,4,4),
  4  9169             <*nød      *> case tilst+1 of (2,2,4),
  4  9170             <*sluk     *> case tilst+1 of (4,3,3));
  4  9171           tt:= case aktion of ('B','C','F','-');
  4  9172           if tt<>'-' then
  4  9173           begin
  5  9174     <*V*>   waitch(cs_tvswitch_adgang,opref,op_optype,-1);
  5  9175             startoperation(opref,296,cs_opk_alarm,tt shift 12 + 44);
  5  9176             d.opref.data(1):= nr+16;
  5  9177             signalch(cs_talevejsswitch,opref,op_optype);
  5  9178     <*V*>   waitch(cs_opk_alarm,opref,op_optype,-1);
  5  9179             if d.opref.resultat = 3 then
  5  9180             begin
  6  9181               opk_alarm.tab.alarm_kmdo:= 0;
  6  9182               opk_alarm.tab.alarm_gtilst:= opk_alarm.tab.alarm_tilst;
  6  9183               opk_alarm.tab.alarm_tilst:= case aktion of (1,2,0);
  6  9184               if aktion < 3 then
  6  9185               begin
  7  9186                 systime(1,0.0,opk_alarm.tab.alarm_start);
  7  9187                 if alarmop = 0 then 
  7  9188                   waitch(cs_opk_alarm_ur_ret,alarmop,op_optype,-1);
  7  9189               end;
  6  9190             end;
  5  9191             signalch(cs_tvswitch_adgang,opref,op_optype or gen_optype);
  5  9192           end;
  4  9193         end;
  3  9194         if alarmop<>0 then
  3  9195         begin
  4  9196           startoperation(alarmop,296,cs_opk_alarm_ur_ret,0);
  4  9197           signalch(cs_opk_alarm_ur,alarmop,op_optype);
  4  9198         end;
  3  9199       until false;
  3  9200     
  3  9200     opk_alarm_trap:
  3  9201       disable skriv_opkaldsalarmer(zbillede,1);
  3  9202     end;  
  2  9203     
  2  9203     \f

  2  9203     message procedure tvswitch_input side 1 - 940810/cl;
  2  9204     
  2  9204       procedure tv_switch_input;
  2  9205       begin
  3  9206         integer array field opref;
  3  9207         integer tt,ant;
  3  9208         boolean ok;
  3  9209         integer array ia(1:128);
  3  9210     
  3  9210         procedure skriv_tvswitch_input(zud,omfang);
  3  9211           value                            omfang;
  3  9212           zone                         zud;
  3  9213           integer                          omfang;
  3  9214         begin
  4  9215           write(zud,"nl",1,<:+++ tvswitch-input:>);
  4  9216           if omfang>0 then
  4  9217           disable begin
  5  9218             real array field raf;
  5  9219             trap(slut);
  5  9220             raf:=0;
  5  9221             write(zud,"nl",1,
  5  9222               <:  opref:  :>,opref,"nl",1,
  5  9223               <:  ok:     :>,(if ok then <:TRUE:> else <:FALSE:>),"nl",1,
  5  9224               <:  ant:    :>,ant,"nl",1,
  5  9225               <:  tt:     :>,tt,"nl",1,
  5  9226               <::>);
  5  9227             write(zud,"nl",1,<:ia: :>);
  5  9228             skrivhele(zud,ia.raf,256,2);
  5  9229             skriv_coru(zud,coru_no(297));
  5  9230     slut:
  5  9231           end;
  4  9232         end skriv_tvswitch_input;
  3  9233     \f

  3  9233         boolean procedure læs_tlgr;
  3  9234         begin
  4  9235           integer kl,ch,i,pos,p;
  4  9236           long field lf;
  4  9237           boolean ok;
  4  9238     
  4  9238           integer procedure readch(z,c);
  4  9239             zone z; integer c;
  4  9240           begin
  5  9241             readch:= readchar(z,c);
  5  9242     <*+2*>  if testbit15 and overvåget then
  5  9243             disable begin
  6  9244               if ' ' <= c and c <= 'ü' then outchar(zrl,c)
  6  9245               else write(zrl,"<",1,<<d>,c,">",1);
  6  9246               if c='em' then write(zrl,<: *timeout*:>);
  6  9247             end;
  5  9248     <*-2*>
  5  9249           end;
  4  9250     
  4  9250           ok:= false; tt:=' ';
  4  9251           repeat
  4  9252             readchar(z_tv_in,ch);
  4  9253           until ch<>'em';
  4  9254           repeatchar(z_tv_in);
  4  9255     
  4  9255     <*+2*>if testbit15 and overvåget then
  4  9256           disable write(zrl,<<zd dd dd.dd >,now,<:switch-ind:  :>);
  4  9257     <*-2*>
  4  9258     
  4  9258           for kl:=readch(z_tv_in,ch) while ch<>'%' and ch<>'nl' and ch<>'em' do ;
  4  9259           if ch='%' then
  4  9260           begin
  5  9261             ant:= 0; pos:= 1; lf:= 4;
  5  9262             ok:= true;
  5  9263             for i:= 1 step 1 until 128 do ia(i):= 0;
  5  9264     
  5  9264             for kl:=readch(z_tv_in,ch) while kl = 6 do
  5  9265               skrivtegn(ia,pos,ch);
  5  9266     
  5  9266             p:=pos;
  5  9267             repeat afsluttext(ia,p) until p mod 6 = 1;
  5  9268     
  5  9268             if ia.lf=long<:ACK:> and ch='nl' then tt:= '+' else
  5  9269             if ia.lf=long<:NACK:> and ch='nl' then tt:= '-' else
  5  9270             if pos=2 and ch=' ' then tt:= ia(1) shift (-16) else ok:= false;
  5  9271     
  5  9271             if ok and ch=' ' then
  5  9272               for kl:=readch(z_tv_in,ch) while ch=' ' do ;
  5  9273     
  5  9273             while kl = 2 do
  5  9274             begin
  6  9275               i:= ch - '0';
  6  9276               for kl:=readch(z_tv_in,ch) while kl = 2 do i:= i*10 + ch-'0';
  6  9277               if ant < 128 then
  6  9278               begin
  7  9279                 ant:= ant+1;
  7  9280                 ia(ant):= i;
  7  9281               end
  6  9282               else
  6  9283                 ok:= false;
  6  9284               while ch=' ' do kl:=readch(z_tv_in,ch);
  6  9285             end;
  5  9286             if ch<>'nl' then ok:= false;
  5  9287             while ch<>'nl' and ch<>'em' do kl:=readch(z_tv_in,ch);
  5  9288     <* !!   setposition(z_tv_in,0,0); !! *>
  5  9289     <*+2*>  if testbit15 and overvåget then disable outchar(zrl,'nl');
  5  9290     <*-2*>
  5  9291     
  5  9291             if tt='+' or tt='-' or tt='Q' or tt='E' then
  5  9292               ok:= ok
  5  9293             else if tt='C' or tt='N' or
  5  9294                     tt='P' or tt='U' or tt='S' or tt='Z' then
  5  9295               ok:= ok and ant=1
  5  9296             else if tt='X' or tt='Y' then
  5  9297               ok:= ok and ant=2
  5  9298             else if tt='T' or tt='W' then
  5  9299               ok:= ok and ant=64
  5  9300             else if tt='R' then
  5  9301               ok:= ok and ant extract 1 = 0
  5  9302             else
  5  9303             begin
  6  9304               ok:= false;
  6  9305               fejlreaktion(21,tt,<:Ukendt telegramtype:>,2 shift 12 + 1);
  6  9306             end;
  5  9307     
  5  9307           end; <* if ch='%' *>
  4  9308           læs_tlgr:= ok;
  4  9309         end læs_tlgr;
  3  9310     \f

  3  9310         trap(tvswitch_input_trap);
  3  9311         stackclaim(400);
  3  9312         for ant:= 1 step 1 until 128 do ia(ant):= 0;
  3  9313     
  3  9313     <*+2*>if (testbit8 and overvåget) or testbit28 then
  3  9314             skriv_tvswitch_input(out,0);
  3  9315     <*-2*>
  3  9316     
  3  9316         repeat
  3  9317           ok:= læs_tlgr;
  3  9318           if ok then
  3  9319           begin
  4  9320     <*V*>   waitch(cs_tvswitch_input,opref,op_optype,-1);
  4  9321             start_operation(opref,297,cs_tvswitch_input,0);
  4  9322             d.opref.resultat:= tt shift 12 + ant;
  4  9323             tofrom(d.opref.data,ia,ant*2);
  4  9324             signalch(cs_talevejsswitch,opref,op_optype);
  4  9325           end;
  3  9326         until false;
  3  9327     
  3  9327     tvswitch_input_trap:
  3  9328     
  3  9328         disable skriv_tvswitch_input(zbillede,1);
  3  9329     
  3  9329       end tvswitch_input;
  2  9330     \f

  2  9330     message procedure tv_switch_adm side 1 - 940502/cl;
  2  9331     
  2  9331       procedure tv_switch_adm;
  2  9332       begin
  3  9333         integer array field opref;
  3  9334         integer rc;
  3  9335     
  3  9335         procedure skriv_tv_switch_adm(zud,omfang);
  3  9336           value                           omfang;
  3  9337           zone                        zud;
  3  9338           integer                         omfang;
  3  9339         begin
  4  9340           write(zud,"nl",1,<:+++ tv-switch-adm:>);
  4  9341           if omfang>0 then
  4  9342           disable begin
  5  9343             trap(slut);
  5  9344             write(zud,"nl",1,
  5  9345               <:  opref:  :>,opref,"nl",1,
  5  9346               <:  rc:     :>,rc,"nl",1,
  5  9347               <::>);
  5  9348             skriv_coru(zud,coru_no(298));
  5  9349     slut:
  5  9350           end;
  4  9351         end skriv_tv_switch_adm;
  3  9352     
  3  9352         trap(tv_switch_adm_trap);
  3  9353         stackclaim(400);
  3  9354     
  3  9354     <*+2*> if (testbit8 and overvåget) or testbit28 then
  3  9355              disable skriv_tv_switch_adm(out,0);
  3  9356     <*-2*>
  3  9357     
  3  9357     
  3  9357     
  3  9357     <* !!!!!!! PASSIVER KORUTINEN - cs_tvswitch_adm SIGNALERES ALDRIG !!!!!!! 
  3  9358         waitch(cs_tvswitch_adm,opref,op_optype,-1);
  3  9359     *>
  3  9360     
  3  9360         repeat
  3  9361           waitch(cs_tvswitch_adgang,opref,op_optype,-1);
  3  9362           start_operation(opref,298,cs_tvswitch_adm,'R' shift 12 + 44);
  3  9363           rc:= 0;
  3  9364           repeat
  3  9365             signalch(cs_talevejsswitch,opref,op_optype);
  3  9366     <*V*>   waitch(cs_tvswitch_adm,opref,op_optype,-1);
  3  9367             rc:= rc+1;
  3  9368           until rc=3 or d.opref.resultat=3;
  3  9369     
  3  9369           signalch(cs_tvswitch_adgang,opref,op_optype);
  3  9370     
  3  9370     <*V*> delay(15*60);
  3  9371         until false;
  3  9372     tv_switch_adm_trap:
  3  9373         disable skriv_tv_switch_adm(zbillede,1);
  3  9374       end;
  2  9375     \f

  2  9375     message procedure talevejsswitch side 1 -940426/cl;
  2  9376     
  2  9376       procedure talevejsswitch;
  2  9377       begin
  3  9378         integer tt, ant, ventetid;
  3  9379         integer array field opref, gemt_op, tab;
  3  9380         boolean ok;
  3  9381         integer array ia(1:128);
  3  9382     
  3  9382         procedure skriv_talevejsswitch(zud,omfang);
  3  9383           value                            omfang;
  3  9384           zone                         zud;
  3  9385           integer                          omfang;
  3  9386         begin
  4  9387           write(zud,"nl",1,<:+++ talevejsswitch:>);
  4  9388           if omfang>0 then
  4  9389           disable begin
  5  9390             real array field raf;
  5  9391             trap(slut);
  5  9392             raf:= 0;
  5  9393             write(zud,"nl",1,
  5  9394               <:  tt:      :>,tt,"nl",1,
  5  9395               <:  ant:     :>,ant,"nl",1,
  5  9396               <:  ventetid: :>,ventetid,"nl",1,
  5  9397               <:  opref:    :>,opref,"nl",1,
  5  9398               <:  gemt-op:  :>,gemt_op,"nl",1,
  5  9399               <:  tab:      :>,tab,"nl",1,
  5  9400               <:  ok:       :>,(if ok then <:TRUE:> else <:FALSE:>),"nl",1,
  5  9401               <::>);
  5  9402             write(zud,"nl",1,<:ia: :>);
  5  9403             skriv_hele(zud,ia.raf,256,2);
  5  9404             skriv_coru(zud,coru_no(299));
  5  9405     slut:
  5  9406           end;
  4  9407         end skriv_talevejsswitch;
  3  9408     \f

  3  9408         trap(tvswitch_trap);
  3  9409         stackclaim(400);
  3  9410         for ant:= 1 step 1 until 128 do ia(ant):= 0;
  3  9411     
  3  9411     <*+2*>if (testbit8 and overvåget) or testbit28 then
  3  9412             skriv_talevejsswitch(out,0);
  3  9413     <*-2*>
  3  9414     
  3  9414         ventetid:= -1; ant:= 0; tt:= ' ';
  3  9415         repeat
  3  9416           waitch(cs_talevejsswitch,opref,gen_optype or op_optype,ventetid);
  3  9417           if opref > 0 then
  3  9418           begin
  4  9419             if d.opref.opkode extract 12 = 0 then
  4  9420             begin <*input fra talevejsswitchen *>
  5  9421               for ant:= 1 step 1 until 128 do ia(ant):= 0;
  5  9422               tt:= d.opref.resultat shift (-12) extract 12;
  5  9423               ant:= d.opref.resultat extract 12;
  5  9424               tofrom(ia,d.opref.data,ant*2);
  5  9425               signalch(d.opref.retur,opref,d.opref.optype);
  5  9426     
  5  9426               if tt<>'+' and tt<>'-' then
  5  9427               begin
  6  9428                 write(z_tv_out,"%",1,<:ACK:>,"cr",1);
  6  9429                 setposition(z_tv_out,0,0);
  6  9430     <*+2*>      if testbit15 and overvåget then
  6  9431                 disable begin
  7  9432                   write(zrl,<<zd dd dd.dd >,now,<:switch-ud:  :>,<:%ACK:>);
  7  9433                   outchar(zrl,'nl');
  7  9434                 end;
  6  9435     <*-2*>
  6  9436               end;
  5  9437               if (tt='+' or tt='-') and gemt_op<>0 then
  5  9438               begin
  6  9439                 d.gemt_op.resultat:= (if tt='+' then 3 else 0);
  6  9440                 signalch(d.gemt_op.retur,gemt_op,d.gemt_op.optype);
  6  9441                 gemt_op:= 0;
  6  9442                 ventetid:= -1;
  6  9443               end
  5  9444               else
  5  9445               if tt='R' then
  5  9446               begin
  6  9447                 for i:= 1 step 2 until ant do
  6  9448                 begin
  7  9449                   if ia(i) <= max_antal_taleveje and
  7  9450                      17 <= ia(i+1) and ia(i+1) <= max_antal_operatører+16
  7  9451                   then
  7  9452                   begin
  8  9453                     if op_talevej(ia(i+1)-16)<>ia(i) then
  8  9454                       tv_operatør(op_talevej(ia(i+1)-16)):= 0;
  8  9455                     if tv_operatør(ia(i))<>ia(i+1)-16 then
  8  9456                       op_talevej(tv_operatør(ia(i))):= 0;
  8  9457                     tv_operatør(ia(i)):= ia(i+1)-16;
  8  9458                     op_talevej(ia(i+1)-16):= ia(i);
  8  9459                     sætbit_ia(samtaleflag,ia(i+1)-16,1);
  8  9460                   end
  7  9461                   else
  7  9462                   if ia(i+1) <= max_antal_taleveje and
  7  9463                      17 <= ia(i) and ia(i) <= max_antal_operatører+16
  7  9464                   then
  7  9465                   begin
  8  9466                     if op_talevej(ia(i))<>ia(i+1)-16 then
  8  9467                       tv_operatør(op_talevej(ia(i))):= 0;
  8  9468                     if tv_operatør(ia(i+1)-16)<>ia(i) then
  8  9469                       op_talevej(tv_operatør(ia(i+1)-16)):= 0;
  8  9470                     tv_operatør(ia(i+1)):= ia(i)-16;
  8  9471                     op_talevej(ia(i)-16):= ia(i+1);
  8  9472                     sætbit_ia(samtaleflag,ia(i)-16,1);
  8  9473                   end;
  7  9474                 end;
  6  9475                 signal_bin(bs_mobil_opkald);
  6  9476     <*+2*> if testbit15 and testbit16 and overvåget then
  6  9477            disable begin
  7  9478              skriv_talevejs_tab(zrl); outchar(zrl,'nl');
  7  9479            end;
  6  9480     <*-2*>
  6  9481               end <* tt='R' and ant>0 *> 
  5  9482               else
  5  9483               if tt='Y' then
  5  9484               begin
  6  9485                 if ia(1) <= max_antal_taleveje and
  6  9486                    17 <= ia(2) and ia(2) <= max_antal_operatører+16
  6  9487                 then
  6  9488                 begin
  7  9489                   if tv_operatør(ia(1))=ia(2)-16 and
  7  9490                      op_talevej(ia(2)-16)=ia(1)
  7  9491                   then tv_operatør(ia(1)):= op_talevej(ia(2)-16):= 0;
  7  9492                 end
  6  9493                 else
  6  9494                 if ia(2) <= max_antal_taleveje and
  6  9495                    17 <= ia(1) and ia(1) <= max_antal_operatører+16
  6  9496                 then
  6  9497                 begin
  7  9498                   if tv_operatør(ia(2))=ia(1)-16 and
  7  9499                      op_talevej(ia(1)-16)=ia(2)
  7  9500                   then tv_operatør(ia(2)):= op_talevej(ia(1)-16):= 0;
  7  9501                 end;
  6  9502               end
  5  9503               else
  5  9504               if tt='C' or tt='N' or tt='P' or tt='U' then
  5  9505               begin
  6  9506                 waitch(cs_op_iomedd,opref,gen_optype,-1);
  6  9507                 startoperation(opref,299,cs_op_iomedd,23);
  6  9508                 ant:= 1;
  6  9509                 hægtstring(d.opref.data,ant,<:switch - port :>);
  6  9510                 anbringtal(d.opref.data,ant,ia(1),2);
  6  9511                 if 17<=ia(1) and ia(1)<=16+max_antal_operatører then
  6  9512                 begin
  7  9513                   hægtstring(d.opref.data,ant,<: (:>);
  7  9514                   if bpl_navn(ia(1)-16)=long<::> then
  7  9515                   begin
  8  9516                     hægtstring(d.opref.data,ant,<:op:>);
  8  9517                     anbringtal(d.opref.data,ant,ia(1)-16,
  8  9518                       if ia(1)-16 > 9 then 2 else 1);
  8  9519                   end
  7  9520                   else hægtstring(d.opref.data,ant,string bpl_navn(ia(1)-16));
  7  9521                   skrivtegn(d.opref.data,ant,')');
  7  9522                 end;
  6  9523                 hægtstring(d.opref.data,ant,
  6  9524                   if tt='C' then <: Kontakt med kontrolbox etableret:> else
  6  9525                   if tt='N' then <: Kontakt med kontrolbox tabt:> else
  6  9526                   if tt='P' then <: Tilgængelig:> else
  6  9527                   if tt='U' then <: Ikke tilgængelig:> else <::>);
  6  9528                 repeat afsluttext(d.opref.data,ant) until ant mod 6 = 1;
  6  9529                 signalch(cs_io,opref,gen_optype);
  6  9530               end
  5  9531               else
  5  9532               if tt='Z' then
  5  9533               begin
  6  9534                 tab:= (ia(1)-16-1)*opk_alarm_tab_lgd;
  6  9535                 opk_alarm.tab.alarm_tilst:= opk_alarm.tab.alarm_gtilst;
  6  9536               end
  5  9537               else
  5  9538               begin
  6  9539                 <* ikke implementeret *>
  6  9540               end;
  5  9541             end
  4  9542             else
  4  9543             if d.opref.opkode extract 12 = 44 then
  4  9544             begin
  5  9545               tt:= d.opref.opkode shift (-12);
  5  9546               ok:= true;
  5  9547               if tt='E' or tt='Q' or tt='R' or tt='W' or tt='S' or tt='I' then
  5  9548               begin
  6  9549     <*+2*> if testbit15 and overvåget then
  6  9550            disable begin
  7  9551              write(zrl,<<zd dd dd.dd >,now,<:switch-ud:  %:>,false add tt,1);
  7  9552              outchar(zrl,'nl');
  7  9553            end;
  6  9554     <*-2*>
  6  9555                 write(z_tv_out,"%",1,false add tt,1,"cr",1);
  6  9556                 setposition(z_tv_out,0,0);
  6  9557               end
  5  9558               else
  5  9559               if tt='B' or tt='C' or tt='F' then
  5  9560               begin
  6  9561     <*+2*> if testbit15 and overvåget then
  6  9562            disable begin
  7  9563              write(zrl,<<zd dd dd.dd >,now,<:switch-ud:  %:>,false add tt,1,
  7  9564                " ",1,<<d>,d.opref.data(1));
  7  9565              outchar(zrl,'nl');
  7  9566            end;
  6  9567     <*-2*>
  6  9568                 write(z_tv_out,"%",1,false add tt,1," ",1,<<d>,
  6  9569                   d.opref.data(1),"cr",1);
  6  9570                 setposition(z_tv_out,0,0);
  6  9571               end
  5  9572               else
  5  9573               if tt='A' or tt='D' or tt='T' then
  5  9574               begin
  6  9575     <*+2*> if testbit15 and overvåget then
  6  9576            disable begin
  7  9577              write(zrl,<<zd dd dd.dd >,now,<:switch-ud:  %:>,false add tt,1,
  7  9578                " ",1,<<d>,d.opref.data(1)," ",1,d.opref.data(2));
  7  9579              outchar(zrl,'nl');
  7  9580            end;
  6  9581     <*-2*>
  6  9582                 write(z_tv_out,"%",1,false add tt,1," ",1,<<d>,
  6  9583                   d.opref.data(1)," ",1,d.opref.data(2),"cr",1);
  6  9584                 setposition(z_tv_out,0,0);
  6  9585               end
  5  9586               else
  5  9587                 ok:= false;
  5  9588               if ok then
  5  9589               begin
  6  9590                 gemt_op:= opref;
  6  9591                 ventetid:= 2;
  6  9592               end
  5  9593               else
  5  9594               begin
  6  9595                 d.opref.resultat:= 4;
  6  9596                 signalch(d.opref.retur,opref,d.opref.optype);
  6  9597               end;
  5  9598             end;
  4  9599           end
  3  9600           else
  3  9601           if gemt_op<>0 then
  3  9602           begin <*timeout*>
  4  9603             d.gemt_op.resultat:= 0;
  4  9604             signalch(d.gemt_op.retur,gemt_op,d.gemt_op.optype);
  4  9605             gemt_op:= 0;
  4  9606             ventetid:= -1;
  4  9607     <*+2*> if testbit15 and overvåget then
  4  9608            disable begin
  5  9609              write(zrl,<<zd dd dd.dd >,now,<:switch:     *Operation Timeout*:>);
  5  9610              outchar(zrl,'nl');
  5  9611            end;
  4  9612     <*-2*>
  4  9613           end;
  3  9614         until false;
  3  9615     tvswitch_trap:
  3  9616         disable skriv_talevejsswitch(zbillede,1);
  3  9617       end talevejsswitch;
  2  9618     
  2  9618     \f

  2  9618     message garage_erklæringer side 1 - 810415/hko;
  2  9619     
  2  9619       zone array z_gar(max_antal_garageterminaler,16,1,gar_fejl);
  2  9620     
  2  9620       procedure gar_fejl(z,s,b);
  2  9621         integer            s,b;
  2  9622         zone             z;
  2  9623       begin
  3  9624         disable begin
  4  9625           integer array iz(1:20);
  4  9626           integer i,j,k;
  4  9627           integer array field iaf;
  4  9628           real array field raf;
  4  9629     
  4  9629           getzone6(z,iz);
  4  9630           iaf:=raf:=2;
  4  9631           getnumber(iz.raf,7,j);
  4  9632     
  4  9632           iaf:=(max_antal_operatører+j)*terminal_beskr_længde;
  4  9633           k:=1;
  4  9634     
  4  9634           j:= terminal_tab.iaf.terminal_tilstand;
  4  9635           if j shift(-21) < 6 and s <> (1 shift 21 +2) then
  4  9636             fejlreaktion(17<*ydre enhed status*>,s,string iz.raf(increase(k)),
  4  9637                          1 shift 12 <*binært*> +1 <*fortsæt*>);
  4  9638           if s <> (1 shift 21 +2) then
  4  9639             terminal_tab.iaf.terminal_tilstand:= 6 shift 21
  4  9640               + terminal_tab.iaf.terminal_tilstand extract 21;
  4  9641           if terminal_tab.iaf.terminal_tilstand shift(-21)<>0 then
  4  9642           begin
  5  9643             z(1):=real <:<'?'><'em'>:>;
  5  9644             b:=2;
  5  9645           end;
  4  9646         end; <*disable*>
  3  9647       end gar_fejl;
  2  9648     
  2  9648       integer cs_gar;
  2  9649       integer array cs_garage(1:max_antal_garageterminaler);
  2  9650     \f

  2  9650     message procedure h_garage side 1 - 810520/hko;
  2  9651     
  2  9651       <* hovedmodulkorutine for garageterminaler *>
  2  9652       procedure h_garage;
  2  9653       begin
  3  9654         integer array field op_ref;
  3  9655         integer k,dest_sem;
  3  9656         procedure skriv_hgarage(zud,omfang);
  3  9657           value                     omfang;
  3  9658           zone                  zud;
  3  9659           integer                   omfang;
  3  9660           begin integer i;
  4  9661     
  4  9661             i:=write(zud,"nl",1,<:+++ hovedmodul garage:>);
  4  9662             write(zud,"sp",26-i);
  4  9663             if omfang>0 then
  4  9664             disable begin
  5  9665               integer x;
  5  9666               trap(slut);
  5  9667               write(zud,"nl",1,
  5  9668                 <:  op_ref:    :>,op_ref,"nl",1,
  5  9669                 <:  k:         :>,k,"nl",1,
  5  9670                 <:  dest_sem:  :>,dest_sem,"nl",1,
  5  9671                 <::>);
  5  9672               skriv_coru(zud,coru_no(300));
  5  9673     slut:
  5  9674             end;
  4  9675          end skriv_hgarage;
  3  9676     
  3  9676       trap(hgar_trap);
  3  9677       stack_claim(if cm_test then 198 else 146);
  3  9678     
  3  9678     <*+2*>
  3  9679       if testbit16 and overvåget  or testbit28 then
  3  9680         skriv_hgarage(out,0);
  3  9681     <*-2*>
  3  9682     \f

  3  9682     message procedure h_garage side 2 - 811105/hko;
  3  9683     
  3  9683       repeat
  3  9684         wait_ch(cs_gar,op_ref,true,-1);
  3  9685     <*+4*>
  3  9686         if (d.op_ref.optype and (gar_optype or gen_optype)) extract 12 =0
  3  9687         then fejlreaktion(12<*operationstype*>,op_ref,<:garage:>,1);
  3  9688     <*-4*>
  3  9689     
  3  9689         k:=d.op_ref.opkode extract 12;
  3  9690         dest_sem:=
  3  9691           if k=0 then cs_garage(d.op_ref.kilde mod 100) else
  3  9692           if k=7 or k=8 then cs_garage(d.op_ref.data(1))
  3  9693           else -1;
  3  9694     <*+4*>
  3  9695         if dest_sem=-1 then
  3  9696         begin
  4  9697           fejl_reaktion(2<*operationskode*>,k,<:hovedmodul garage:>,1);
  4  9698           signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  4  9699         end
  3  9700         else
  3  9701     <*-4*>
  3  9702         if k=7<*inkluder*> then
  3  9703         begin
  4  9704           iaf:=(max_antal_operatører+ d.op_ref.data(1))*terminal_beskr_længde;
  4  9705           if terminal_tab.iaf.terminal_tilstand shift(-21)=0 then
  4  9706           begin
  5  9707             d.op_ref.resultat:=3;
  5  9708             signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  5  9709             dest_sem:=-2;
  5  9710           end;
  4  9711         end
  3  9712         else
  3  9713         if k=8<*ekskluder*> then <*afbryd kommando v. timeout*>
  3  9714         begin
  4  9715           iaf:=(max_antal_operatører+d.op_ref.data(1))*terminal_beskr_længde;
  4  9716           terminal_tab.iaf.terminal_tilstand:= 7 shift 21
  4  9717             +terminal_tab.iaf.terminal_tilstand extract 21;
  4  9718         end;
  3  9719         if dest_sem>0 then
  3  9720           signal_ch(dest_sem,op_ref,d.op_ref.optype);
  3  9721       until false;
  3  9722     
  3  9722     hgar_trap:
  3  9723       disable skriv_hgarage(zbillede,1);
  3  9724       end h_garage;
  2  9725     \f

  2  9725     message procedure garage side 1 - 830310/cl;
  2  9726     
  2  9726       procedure garage(nr);
  2  9727         value          nr;
  2  9728         integer        nr;
  2  9729       begin
  3  9730         integer array field op_ref,ref;
  3  9731         integer i,kode,aktion,status,opgave,retur_sem,
  3  9732                 pos,indeks,sep,sluttegn,vogn,ll;
  3  9733     
  3  9733         procedure skriv_garage(zud,omfang);
  3  9734           value                    omfang;
  3  9735           zone                 zud;
  3  9736           integer                  omfang;
  3  9737           begin integer i;
  4  9738     
  4  9738             i:=write(zud,"nl",1,<:+++ garage nr::>,nr);
  4  9739             write(zud,"sp",26-i);
  4  9740             if omfang > 0 then
  4  9741             disable begin integer x;
  5  9742               trap(slut);
  5  9743               write(zud,"nl",1,
  5  9744                 <:  op-ref:    :>,op_ref,"nl",1,
  5  9745                 <:  kode:      :>,kode,"nl",1,
  5  9746                 <:  ref:       :>,ref,"nl",1,
  5  9747                 <:  i:         :>,i,"nl",1,
  5  9748                 <:  aktion:    :>,aktion,"nl",1,
  5  9749                 <:  retur-sem: :>,retur_sem,"nl",1,
  5  9750                 <:  vogn:      :>,vogn,"nl",1,
  5  9751                 <:  ll:        :>,ll,"nl",1,
  5  9752                 <:  status:    :>,status,"nl",1,
  5  9753                 <:  opgave:    :>,opgave,"nl",1,
  5  9754                 <:  pos:       :>,pos,"nl",1,
  5  9755                 <:  indeks:    :>,indeks,"nl",1,
  5  9756                 <:  sep:       :>,sep,"nl",1,
  5  9757                 <:  sluttegn:  :>,sluttegn,"nl",1,
  5  9758                 <::>);
  5  9759               skriv_coru(zud,coru_no(300+nr));
  5  9760     slut:
  5  9761             end;
  4  9762           end skriv_garage;
  3  9763     \f

  3  9763     message procedure garage side 2 - 830310/hko;
  3  9764     
  3  9764         trap(gar_trap);
  3  9765         stack_claim((if cm_test then 200 else 146)+24+48+80+75);
  3  9766     
  3  9766         ref:= (max_antal_operatører+nr)*terminal_beskr_længde;
  3  9767     
  3  9767     <*+2*>
  3  9768         if testbit16 and overvåget or testbit28 then
  3  9769           skriv_garage(out,0);
  3  9770     <*-2*>
  3  9771     
  3  9771     <* attention simulering
  3  9772     *>
  3  9773       if terminal_tab.ref.terminal_tilstand shift (-21) = 0 then
  3  9774       begin
  4  9775         wait_ch(cs_att_pulje,op_ref,true,-1);
  4  9776         start_operation(op_ref,300+nr,cs_garage(nr),0);
  4  9777         signal_ch(cs_garage(nr),op_ref,gen_optype);
  4  9778       end;
  3  9779     <*
  3  9780     *>
  3  9781     \f

  3  9781     message procedure garage side 3 - 830310/hko;
  3  9782     
  3  9782         repeat
  3  9783     
  3  9783     <*V*> wait_ch(cs_garage(nr),
  3  9784                   op_ref,
  3  9785                   true,
  3  9786                   -1<*timeout*>);
  3  9787     <*+2*>
  3  9788           if testbit17 and overvåget then
  3  9789           disable begin
  4  9790             write(out,"nl",1,<:operation fra cs:>,<<d>,cs_garage(nr),
  4  9791                              <: til garage :>,nr);
  4  9792             skriv_op(out,op_ref);
  4  9793           end;
  3  9794     <*-2*>
  3  9795     
  3  9795           kode:= d.op_ref.op_kode;
  3  9796           retur_sem:= d.op_ref.retur;
  3  9797           i:= terminal_tab.ref.terminal_tilstand;
  3  9798           status:= i shift(-21);
  3  9799           opgave:=
  3  9800             if kode=0 then 1 <* indlæs kommando *> else
  3  9801             if kode=7 then 2 <* inkluder        *> else
  3  9802             if kode=8 then 3 <* ekskluder       *> else
  3  9803             0; <* afvises *>
  3  9804     
  3  9804           aktion:= case status +1 of(
  3  9805           <* status         *> <* opgave:         0   1   2   3 *>
  3  9806           <* 0 klar         *>(case opgave+1 of(  0,  1, -4,  3)),
  3  9807           <* 1 -            *>(-1),<* ulovlig tilstand *>
  3  9808           <* 2 -            *>(-1),<* ulovlig tilstand *>
  3  9809           <* 3 stoppet      *>(case opgave+1 of(  0,  2,  2,  3)),
  3  9810           <* 4 noneksist    *>(-2),<* ulovligt garageterminalnr *>
  3  9811           <* 5 -            *>(-1),<* ulovlig tilstand *>
  3  9812           <* 6 stop v. fejl *>(case opgave+1 of(  0, -5,  2,  3)),
  3  9813           <* 7 ej knyttet   *>(case opgave+1 of(  0, -5,  2,  3)),
  3  9814                               -1);
  3  9815     \f

  3  9815     message procedure garage side 4 - 810424/hko;
  3  9816     
  3  9816           case aktion+6 of
  3  9817           begin
  4  9818             begin
  5  9819               <*-5: terminal optaget *>
  5  9820     
  5  9820               d.op_ref.resultat:= 16;
  5  9821               afslut_operation(op_ref,cs_att_pulje); <*telex*>
  5  9822             end;
  4  9823     
  4  9823             begin
  5  9824               <*-4: operation uden virkning *>
  5  9825     
  5  9825               afslut_operation(op_ref,-1);
  5  9826             end;
  4  9827     
  4  9827             begin
  5  9828               <*-3: ulovlig operationskode *>
  5  9829     
  5  9829               fejl_reaktion(2<*operationskode*>,kode,<:ulovlig:>,1);
  5  9830               afslut_operation(op_ref,-1);
  5  9831             end;
  4  9832     
  4  9832             begin
  5  9833               <*-2: ulovligt garageterminal_nr *>
  5  9834     
  5  9834               fejl_reaktion(3<*programfejl*>,nr,<: ikke eksisterende garage:>,1);
  5  9835               afslut_operation(op_ref,cs_att_pulje); <*telex*>
  5  9836             end;
  4  9837     
  4  9837             begin
  5  9838               <*-1: ulovlig operatørtilstand *>
  5  9839     
  5  9839               fejl_reaktion(3<*programfejl*>,status,<: ulovlig garage-status:>,1);
  5  9840               afslut_operation(op_ref,-1);
  5  9841             end;
  4  9842     
  4  9842             begin
  5  9843               <* 0: ikke implementeret *>
  5  9844     
  5  9844               fejl_reaktion(2<*operationskode*>,kode,<: ikke implementeret:>,1);
  5  9845               afslut_operation(op_ref,-1);
  5  9846             end;
  4  9847     
  4  9847             begin
  5  9848     \f

  5  9848     message procedure garage side 5 - 851001/cl;
  5  9849     
  5  9849               <* 1: indlæs kommando *>
  5  9850     
  5  9850     
  5  9850     <*V*>     læs_kommando(z_gar(nr),300+nr,op_ref,pos,indeks,sep,sluttegn);
  5  9851     
  5  9851               if d.op_ref.resultat > 3 then
  5  9852               begin
  6  9853     <*V*>       setposition(z_gar(nr),0,0);
  6  9854                 if sluttegn<>'nl' then outchar(z_gar(nr),'nl');
  6  9855                 skriv_kvittering(z_gar(nr),op_ref,pos,
  6  9856                                  d.op_ref.resultat);
  6  9857               end
  5  9858               else if d.op_ref.resultat>0 then
  5  9859               begin <*godkendt*>
  6  9860                 kode:=d.op_ref.opkode;
  6  9861                 i:= kode extract 12;
  6  9862                 j:= if kode=11 or kode=12 or kode=20 or kode=24 then 1
  6  9863                     else if kode=9 or kode=10 then 2
  6  9864                                          else 0;
  6  9865                 if j > 0 then
  6  9866                 begin
  7  9867                   case j of
  7  9868                   begin
  8  9869                     begin
  9  9870     \f

  9  9870     message procedure garage side 6 - 851001/cl;
  9  9871     
  9  9871                       <* 1 indsæt/udtag/flyt bus i vogntabel *>
  9  9872                       integer vogn,ll;
  9  9873                       integer array field vtop;
  9  9874     
  9  9874                       vogn:=ia(1);
  9  9875                       ll:=ia(2);
  9  9876     <*V*>             wait_ch(cs_vt_adgang,
  9  9877                               vt_op,
  9  9878                               gen_optype,
  9  9879                               -1<*timeout sek*>);
  9  9880                       start_operation(vtop,300+nr,cs_garage(nr),
  9  9881                                       kode);
  9  9882                       d.vt_op.data(1):=vogn;
  9  9883                       if kode=11 or kode=20 or kode=24 then d.vt_op.data(2):=ll;
  9  9884                       indeks:= vt_op;
  9  9885                       signal_ch(cs_vt,
  9  9886                                 vt_op,
  9  9887                                 gen_optype or gar_optype);
  9  9888     
  9  9888     <*V*>             wait_ch(cs_garage(nr),
  9  9889                               vt_op,
  9  9890                               gar_optype,
  9  9891                               -1<*timeout sek*>);
  9  9892     <*+2*>            if testbit18 and overvåget then
  9  9893                       disable begin
 10  9894                         write(out,"nl",1,<:garage :>,<<d>,nr,
 10  9895                               <:: operation retur fra vt:>);
 10  9896                         skriv_op(out,vt_op);
 10  9897                       end;
  9  9898     <*-2*>
  9  9899     <*+4*>            if vt_op<>indeks then
  9  9900                         fejl_reaktion(11<*fremmede op*>,op_ref,
  9  9901                                       <:garage-kommando:>,0);
  9  9902     <*-4*>
  9  9903     <*V*>             setposition(z_gar(nr),0,0);
  9  9904                       if sluttegn<>'nl' then outchar(z_gar(nr),'nl');
  9  9905                       skriv_kvittering(z_gar(nr),if d.vt_op.resultat = 11 or
  9  9906                         d.vt_op.resultat = 12 then d.vt_op.data(3)
  9  9907                         else vt_op,-1,d.vt_op.resultat);
  9  9908                       d.vt_op.optype:=gen_optype or vtoptype;
  9  9909                       disable afslut_operation(vt_op,cs_vt_adgang);
  9  9910                     end;
  8  9911     
  8  9911                     begin
  9  9912     \f

  9  9912     message procedure garage side 6a - 830310/cl;
  9  9913     
  9  9913                     <* 2 vogntabel,linienr/-,busnr *>
  9  9914     
  9  9914                     d.op_ref.retur:= cs_garage(nr);
  9  9915                     tofrom(d.op_ref.data,ia,10);
  9  9916                     indeks:= op_ref;
  9  9917                     signal_ch(cs_vt,op_ref,gen_optype or gar_optype);
  9  9918                     wait_ch(cs_garage(nr),
  9  9919                             op_ref,
  9  9920                             gar_optype,
  9  9921                             -1<*timeout*>);
  9  9922     <*+2*>          if testbit18 and overvåget then
  9  9923                     disable begin
 10  9924                       write(out,"nl",1,<:garage operation retur fra vt:>);
 10  9925                       skriv_op(out,op_ref);
 10  9926                     end;
  9  9927     <*-2*>
  9  9928     <*+4*>
  9  9929                     if indeks <> op_ref then
  9  9930                       fejlreaktion(11<*fremmed post*>,op_ref,<:garage komm:>,0);
  9  9931     <*-4*>
  9  9932                     i:= d.op_ref.resultat;
  9  9933                     if i = 0 or i > 3 then
  9  9934                     begin
 10  9935     <*V*>             setposition(z_gar(nr),0,0);
 10  9936                       skriv_kvittering(z_gar(nr),op_ref,-1,d.op_ref.resultat);
 10  9937                     end
  9  9938                     else
  9  9939                     begin
 10  9940                       integer antal,fil_ref;
 10  9941                       antal:= d.op_ref.data(6);
 10  9942                       fil_ref:= d.op_ref.data(7);
 10  9943     <*V*>             setposition(z_gar(nr),0,0);
 10  9944                       write(z_gar(nr),"*",24,"sp",6,
 10  9945                         <:vogntabeludskrift:>,"sp",6,"*",24,"nl",2);
 10  9946     <*V*>             setposition(z_gar(nr),0,0);
 10  9947     \f

 10  9947     message procedure garage side 6c - 841213/cl;
 10  9948     
 10  9948                       pos:= 1;
 10  9949                       while pos <= antal do
 10  9950                       begin
 11  9951                         integer bogst,løb;
 11  9952     
 11  9952                         disable i:= læs_fil(fil_ref,pos,j);
 11  9953                         if i <> 0 then
 11  9954                           fejlreaktion(5<*læs_fil*>,i,<:garage: vo,l/vo,b:>,0)
 11  9955                         else
 11  9956                         begin
 12  9957                           vogn:= fil(j,1) shift (-24) extract 24;
 12  9958                           løb:= fil(j,1) extract 24;
 12  9959                           if d.op_ref.opkode=9 then
 12  9960                             begin i:=vogn; vogn:=løb; løb:=i; end;
 12  9961                           ll:= løb shift (-12) extract 10;
 12  9962                           bogst:= løb shift (-7) extract 5;
 12  9963                           if bogst > 0 then bogst:= bogst +'A'-1;
 12  9964                           løb:= løb extract 7;
 12  9965                           vogn:= vogn extract 14;
 12  9966                           i:= d.op_ref.opkode-8;
 12  9967                           for i:= i,i+1 do
 12  9968                           begin
 13  9969                             j:= (i+1) extract 1;
 13  9970                             case j +1 of
 13  9971                             begin
 14  9972                               write(z_gar(nr),"sp",(bogst=0) extract 1,<<ddd>,ll,
 14  9973                                 false add bogst,1,"/",1,<<d__>,løb);
 14  9974                               write(z_gar(nr),<<dddd>,vogn,"sp",1);
 14  9975                             end;
 13  9976                           end;
 12  9977                           if pos mod 5 = 0 then
 12  9978                           begin
 13  9979                             write(z_gar(nr),"nl",1);
 13  9980     <*V*>                   setposition(z_gar(nr),0,0);
 13  9981                           end
 12  9982                           else write(z_gar(nr),"sp",3);
 12  9983                         end;
 11  9984                         pos:=pos+1;
 11  9985                       end;
 10  9986                       write(z_gar(nr),"nl",1,"*",77,"nl",1);
 10  9987     \f

 10  9987     message procedure garage side 6d- 830310/cl;
 10  9988     
 10  9988                       d.opref.opkode:=104; <*slet-fil*>
 10  9989                       d.op_ref.data(4):=filref;
 10  9990                       indeks:=op_ref;
 10  9991                       signal_ch(cs_slet_fil,op_ref,gen_optype or gar_optype);
 10  9992     <*V*>             wait_ch(cs_garage(nr),op_ref,gar_optype,-1);
 10  9993     
 10  9993     <*+2*>            if testbit18 and overvåget then
 10  9994                       disable begin
 11  9995                         write(out,"nl",1,<:garage, slet-fil retur:>);
 11  9996                         skriv_op(out,op_ref);
 11  9997                       end;
 10  9998     <*-2*>
 10  9999     
 10  9999     <*+4*>            if op_ref<>indeks then
 10 10000                         fejlreaktion(11<*fr.post*>,op_ref,<:garage,slet-fil:>,0);
 10 10001     <*-4*>
 10 10002                       if d.op_ref.data(9)<>0 then
 10 10003                         fejl_reaktion(3<*prg.fejl*>,d.op_ref.data(9),
 10 10004                             <:garage, slet_fil:>,1);
 10 10005                     end;
  9 10006     \f

  9 10006     message procedure garage side 7 -810424/hko;
  9 10007     
  9 10007                     end;
  8 10008     
  8 10008     <*+4*>          fejl_reaktion(3<*programfejl*>,j,<:case 'opkode':>,2);
  8 10009     <*-4*>
  8 10010                   end;<*case j *>
  7 10011                 end <* j > 0 *>
  6 10012                 else
  6 10013                 begin
  7 10014     <*V*>         setposition(z_gar(nr),0,0);
  7 10015                   if sluttegn<>'nl' then outchar(z_gar(nr),'nl');
  7 10016                   skriv_kvittering(z_gar(nr),op_ref,pos,
  7 10017                                    4 <*kommando ukendt *>);
  7 10018                 end;
  6 10019               end;<* godkendt *>
  5 10020     
  5 10020     <*V*>     setposition(z_gar(nr),0,0);
  5 10021     
  5 10021               d.op_ref.opkode:=0; <*telex*>
  5 10022     
  5 10022               disable afslut_operation(op_ref,cs_gar);
  5 10023             end; <* indlæs kommando *>
  4 10024     
  4 10024             begin
  5 10025     \f

  5 10025     message procedure garage side 8 - 841213/cl;
  5 10026     
  5 10026                   <* 2: inkluder *>
  5 10027     
  5 10027               d.op_ref.resultat:=3;
  5 10028               afslut_operation(op_ref,-1);
  5 10029               monitor(8)reserve:(z_gar(nr),0,ia);
  5 10030               terminal_tab.ref.terminal_tilstand:=
  5 10031                 terminal_tab.ref.terminal_tilstand extract 21;
  5 10032     <*V*>     wait_ch(cs_att_pulje,op_ref,true,-1);
  5 10033               start_operation(op_ref,300+nr,cs_att_pulje,0);
  5 10034               signal_ch(cs_garage(nr),op_ref,gen_optype);
  5 10035             end;
  4 10036     
  4 10036             begin
  5 10037     
  5 10037               <* 3: ekskluder *>
  5 10038               d.op_ref.resultat:= 3;
  5 10039               terminal_tab.ref.terminal_tilstand:= 7 shift 21 +
  5 10040                 terminal_tab.ref.terminal_tilstand extract 21;
  5 10041               monitor(10)release:(z_gar(nr),0,ia);
  5 10042               afslut_operation(op_ref,-1);
  5 10043     
  5 10043             end;
  4 10044     
  4 10044     <*+4*>  fejl_reaktion(3<*programfejl *>,aktion,<:case aktion:>,2);
  4 10045     <*-4*>
  4 10046           end; <* case aktion+6 *>
  3 10047     
  3 10047          until false;
  3 10048       gar_trap:
  3 10049         skriv_garage(zbillede,1);
  3 10050       end garage;
  2 10051     
  2 10051     \f

  2 10051     message procedure radio_erklæringer side 1 - 820304/hko;
  2 10052     
  2 10052     zone z_fr_in(14,1,rad_in_fejl),
  2 10053          z_rf_in(14,1,rad_in_fejl),
  2 10054          z_fr_out(14,1,rad_out_fejl),
  2 10055          z_rf_out(14,1,rad_out_fejl);
  2 10056     
  2 10056     integer array
  2 10057         radiofejl,
  2 10058         ss_samtale_nedlagt,
  2 10059         ss_radio_aktiver(1:max_antal_kanaler),
  2 10060         bs_talevej_udkoblet,
  2 10061         cs_radio(1:max_antal_taleveje),
  2 10062         radio_linietabel(1:max_linienr//3+1),
  2 10063         radio_områdetabel(0:max_antal_områder),
  2 10064         opkaldskø(opkaldskø_postlængde//2+1:
  2 10065           (max_antal_mobilopkald+1)*opkaldskø_postlængde//2),
  2 10066         kanal_tab(1:max_antal_kanaler*kanal_beskr_længde//2),
  2 10067         hookoff_maske(1:(tv_maske_lgd//2)),
  2 10068         samtaleflag, kanalflag, opkaldsflag(1:(op_maske_lgd//2));
  2 10069     
  2 10069       integer field
  2 10070         kanal_tilstand,
  2 10071         kanal_id1,
  2 10072         kanal_id2,
  2 10073         kanal_spec,
  2 10074         kanal_alt_id1,
  2 10075         kanal_alt_id2;               
  2 10076       integer array field 
  2 10077         kanal_mon_maske,
  2 10078         kanal_alarm,
  2 10079         opkald_meldt;
  2 10080     
  2 10080       integer
  2 10081         cs_rad,
  2 10082         cs_radio_medd,
  2 10083         cs_radio_adm,
  2 10084         cs_radio_ind,
  2 10085         cs_radio_ud,
  2 10086         cs_radio_pulje,
  2 10087         cs_radio_kø,
  2 10088         bs_mobil_opkald,
  2 10089         bs_opkaldskø_adgang,
  2 10090         opkaldskø_ledige,
  2 10091         nødopkald_brugt,
  2 10092         første_frie_opkald,
  2 10093         første_opkald,
  2 10094         sidste_opkald,
  2 10095         første_nødopkald,
  2 10096         sidste_nødopkald,
  2 10097         optaget_flag;
  2 10098     
  2 10098       boolean
  2 10099         mobil_opkald_aktiveret;
  2 10100     \f

  2 10100     message procedure læs_hex_ciffer side 1 - 810428/hko;
  2 10101     
  2 10101       integer
  2 10102       procedure læs_hex_ciffer(tabel,linie,op);
  2 10103         value                      linie;
  2 10104         integer array        tabel;
  2 10105         integer                    linie,op;
  2 10106         begin
  3 10107           integer i,j;
  3 10108     
  3 10108           i:=(if linie>=0 then linie+6 else linie)//6;
  3 10109           j:=((i-1)*6-linie)*4;
  3 10110           læs_hex_ciffer:=op:=tabel(i) shift j extract 4;
  3 10111        end læs_hex_ciffer;
  2 10112     
  2 10112     message procedure sæt_hex_ciffer side 1 - 810505/hko;
  2 10113     
  2 10113       integer
  2 10114       procedure sæt_hex_ciffer(tabel,linie,op);
  2 10115         value                      linie;
  2 10116         integer array        tabel;
  2 10117         integer                    linie,op;
  2 10118         begin
  3 10119           integer i,j;
  3 10120     
  3 10120           i:=(if linie>=0 then linie+6 else linie)//6;
  3 10121           j:=(linie-(i-1)*6)*4;
  3 10122           sæt_hex_ciffer:= tabel(i) shift (-j) extract 4;
  3 10123           tabel(i):=tabel(i) shift (-4-j) shift 4 add (op extract 4)
  3 10124                     shift j add (tabel(i) extract j);
  3 10125         end sæt_hex_ciffer;
  2 10126     
  2 10126     message procedure hex_to_dec side 1 - 900108/cl;
  2 10127     
  2 10127     integer procedure hex_to_dec(hex);
  2 10128       value                      hex;
  2 10129       integer                    hex;
  2 10130     begin
  3 10131       hex_to_dec:= if 'A'<=hex and hex<='F' then (hex-'A'+10)
  3 10132                    else (hex-'0');
  3 10133     end;
  2 10134     
  2 10134     message procedure dec_to_hex side 1 - 900108/cl;
  2 10135     
  2 10135     integer procedure dec_to_hex(dec);
  2 10136       value                      dec;
  2 10137       integer                    dec;
  2 10138     begin
  3 10139       dec_to_hex:= if 0<=dec and dec<=9 then ('0'+dec)
  3 10140                    else ('A'+dec-10);
  3 10141     end;
  2 10142     
  2 10142     message procedure rad_out_fejl side 1 - 820304/hko;
  2 10143     
  2 10143       procedure rad_out_fejl(z,s,b);
  2 10144         value                  s;
  2 10145         zone                 z;
  2 10146         integer                s,b;
  2 10147         begin
  3 10148           integer array field iaf;
  3 10149           integer pos,tegn,max,i;
  3 10150           integer array ia(1:20);
  3 10151           long array field laf;
  3 10152     
  3 10152         disable begin
  4 10153           laf:= iaf:= 2;
  4 10154           tegn:= 1;
  4 10155           getzone6(z,ia);
  4 10156           max:= ia(16)//2*3;
  4 10157           if s = 1 shift 21 + 2 then
  4 10158           begin
  5 10159             z(1):= real<:<'em'>:>;
  5 10160             b:= 2;
  5 10161           end
  4 10162           else
  4 10163           begin
  5 10164             pos:= 0;
  5 10165             for i:= 1 step 1 until max_antal_kanaler do
  5 10166             begin
  6 10167               iaf:= (i-1)*kanalbeskr_længde;
  6 10168               if sæt_hex_ciffer(kanal_tab.iaf,3,15)<>15 then pos:= pos+1;
  6 10169               if pos>0 then
  6 10170               begin
  7 10171                 tofrom(kanalflag,alle_operatører,op_maske_lgd);
  7 10172                 signalbin(bs_mobilopkald);
  7 10173                 fejlreaktion(17<*y.e.status*>,s,string ia.laf(increase(tegn)),
  7 10174                   1 shift 12<*binært*> +1<*fortsæt*>);
  7 10175               end;
  6 10176             end;
  5 10177           end;
  4 10178         end;
  3 10179         end;
  2 10180     \f

  2 10180     message procedure rad_in_fejl side 1 - 810601/hko;
  2 10181     
  2 10181       procedure rad_in_fejl(z,s,b);
  2 10182         value                 s;
  2 10183         zone                z;
  2 10184         integer               s,b;
  2 10185         begin
  3 10186           integer array field iaf;
  3 10187           integer pos,tegn,max,i;
  3 10188           integer array ia(1:20);
  3 10189           long array field laf;
  3 10190     
  3 10190         disable begin
  4 10191           laf:= iaf:= 2;
  4 10192           i:= 1;
  4 10193           getzone6(z,ia);
  4 10194           max:= ia(16)//2*3;
  4 10195           if s shift (-21) extract 1 = 0
  4 10196              and s shift(-19) extract 1 = 0 then
  4 10197           begin
  5 10198             if b = 0 then
  5 10199             begin
  6 10200               z(1):= real<:!:>;
  6 10201               b:= 2;
  6 10202             end;
  5 10203           end;
  4 10204     \f

  4 10204     message procedure rad_in_fejl side 2 - 820304/hko;
  4 10205     
  4 10205           if (s <> 1 shift 21 +2 and s shift(-19) extract 1 = 0) then
  4 10206           begin
  5 10207             fejlreaktion(17<*ydre enhed status*>,s,string ia.laf(increase(i)),
  5 10208               1 shift 12<*binær*> +1<*fortsæt*>);
  5 10209           end
  4 10210           else
  4 10211           if s shift (-19) extract 1 = 1 then
  4 10212           begin
  5 10213             z(1):= real<:!<'nl'>:>;
  5 10214             b:= 2;
  5 10215           end
  4 10216           else
  4 10217           if s = 1 shift 21 +2  or s shift(-19) extract 1 =1 then
  4 10218           begin
  5 10219     <*
  5 10220             if b = 0 then
  5 10221             begin
  5 10222     *>
  5 10223               z(1):= real <:<'em'>:>;
  5 10224               b:= 2;
  5 10225     <*
  5 10226             end
  5 10227             else
  5 10228             begin
  5 10229               tegn:= -1;
  5 10230               iaf:= 0;
  5 10231               pos:= b//2*3-2;
  5 10232               while pos < max and tegn <> 0 do læstegn(z.iaf,pos,tegn);
  5 10233               skriv_tegn(z.iaf,pos,'?');
  5 10234               if pos<=max then
  5 10235                 afslut_text(z.iaf,pos);
  5 10236               b:= (pos-1)//3*2;
  5 10237             end;
  5 10238     *>
  5 10239           end;<* s=1 shift 21+2 *>
  4 10240         end;
  3 10241           if testbit22 and
  3 10242              (s <> 1 shift 21 +2 and s shift(-19) extract 1 = 0)
  3 10243           then
  3 10244             delay(60);
  3 10245         end rad_in_fejl;
  2 10246     \f

  2 10246     message procedure afvent_radioinput side 1 - 880901/cl;
  2 10247     
  2 10247     integer procedure afvent_radioinput(z_in,tlgr,rf);
  2 10248       value                                     rf;
  2 10249       zone                            z_in;
  2 10250       integer array                        tlgr;
  2 10251       boolean                                   rf;
  2 10252     begin
  3 10253       integer i, p, pos, tegn, ac, sum, csum, lgd;
  3 10254       long array field laf;
  3 10255     
  3 10255       laf:= 0;
  3 10256       pos:= 1;     
  3 10257       repeat
  3 10258         i:=readchar(z_in,tegn);
  3 10259         if i<>8 and pos<80 then skrivtegn(tlgr,pos,tegn);
  3 10260       until (i=8 and pos>1) or (tegn='em') or (pos>=80);
  3 10261       p:=pos;
  3 10262       repeat afsluttext(tlgr,p) until p mod 6 = 1;
  3 10263     <*+2*>if overvåget and (testbit36 or ((-,rf) and testbit38) or
  3 10264                            (rf and testbit39)) then
  3 10265           disable begin
  4 10266             write(zrl,<<zd dd dd.dd >,now,
  4 10267               (if -,rf then <:fr-tlgr: :> else <:rf-answ: :>),tlgr.laf,
  4 10268               if tegn='em' then <:*timeout*:> else
  4 10269               if pos>=80 then   <:*for langt*:> else <::>);
  4 10270              outchar(zrl,'nl');
  4 10271           end;
  3 10272     <*-2*>
  3 10273       ac:= -1;
  3 10274       if pos >= 80 then
  3 10275       begin <* telegram for langt *>
  4 10276         repeat readchar(z_in,tegn)
  4 10277         until tegn='nl' or tegn='em';
  4 10278       end
  3 10279       else
  3 10280       if pos>1  and tegn='nl' then
  3 10281       begin
  4 10282         lgd:= 1;
  4 10283         while læstegn(tlgr,lgd,tegn)<>0 do ;
  4 10284         lgd:= lgd-2;
  4 10285         if lgd >= 5 then
  4 10286         begin
  5 10287           lgd:= lgd-2; <* se bort fra checksum *>
  5 10288           i:= lgd + 1;
  5 10289           csum:= (læstegn(tlgr,i,tegn) - '@')*16;
  5 10290           csum:= csum + (læstegn(tlgr,i,tegn) - '@');
  5 10291           i:= lgd + 1;
  5 10292           skrivtegn(tlgr,i,0);
  5 10293           skrivtegn(tlgr,i,0);
  5 10294           i:= 1; sum:= 0;
  5 10295           while i <= lgd do
  5 10296             sum:= (sum + læstegn(tlgr,i,tegn)) mod 256;
  5 10297           if csum >= 0 and csum <> sum then
  5 10298           begin
  6 10299     <*+2*>  if overvåget and (testbit36 or
  6 10300                ((-,rf) and testbit38) or (rf and testbit39)) then
  6 10301             disable begin
  7 10302               write(zrl,<<zd dd dd.dd >,now,
  7 10303                 (if rf then <:rf:> else <:fr:>),
  7 10304                 <:-tlgr-checksumfejl: :>,csum,sum); outchar(zrl,'nl');
  7 10305             end;
  6 10306     <*-2*>
  6 10307             ac:= 6 <* checksumfejl *>
  6 10308           end
  5 10309           else
  5 10310             ac:= 0;
  5 10311         end
  4 10312         else ac:= 6; <* for kort telegram - retransmitter *>
  4 10313       end;
  3 10314       afvent_radioinput:= ac;
  3 10315     end;
  2 10316     \f

  2 10316     message procedure skriv_kanal_tab side 1 - 820304/hko;
  2 10317     
  2 10317       procedure skriv_kanal_tab(z);
  2 10318         zone                    z;
  2 10319         begin
  3 10320           integer array field ref;
  3 10321           integer i,j,t,op,id1,id2;
  3 10322     
  3 10322           write(z,"ff",1,"nl",1,<:
  3 10323          ******** kanal-beskrivelser *******
  3 10324     
  3 10324                        a k l p m b n
  3 10325                        l a y a o s ø
  3 10326     nr    tv tilst + * l t t s n v d - type   id1      id2      ttmm/ant -ej.op:>,
  3 10327     <*
  3 10328     01 ..... ..... x x x x x x x x x x .... ........ ........   .... ....  ----
  3 10329     *>
  3 10330             "nl",1);
  3 10331           for i:=1 step 1 until max_antal_kanaler do
  3 10332           begin
  4 10333             ref:=(i-1)*kanal_beskr_længde;
  4 10334             t:=kanal_tab.ref.kanal_tilstand;
  4 10335             id1:=kanal_tab.ref.kanal_id1;
  4 10336             id2:=kanal_tab.ref.kanal_id2;
  4 10337             write(z,"nl",1,"sp",4,
  4 10338               <<dd>,i,<<-ddddd>,t shift(-16),t shift(-12) extract 4,"sp",1);
  4 10339             for j:=11 step -1 until 2 do
  4 10340               write(z,if læsbit_i(t,j) then "X" else "sp",1,"sp",1);
  4 10341             write(z,case t extract 2 +1 of
  4 10342                  (<:-   :>,<:OPK :>,<:MEDD:>,<:GNM :>),
  4 10343               "sp",1);
  4 10344             skriv_id(z,id1,9);
  4 10345             skriv_id(z,id2,9);
  4 10346             t:=kanal_tab.ref.kanal_spec;
  4 10347             write(z,"sp",1,<<-dddd>,t,t shift(-16),"sp",1,-(t extract 8));
  4 10348             write(z,"nl",1,"sp",14,<:mon: :>);
  4 10349             for j:= max_antal_taleveje step -1 until 1 do
  4 10350               write(z,(if læs_bit_ia(kanal_tab.ref.kanal_mon_maske,j) then "1"
  4 10351                     else "."),1);
  4 10352             write(z,"sp",25-max_antal_taleveje);
  4 10353             skriv_id(z,kanal_tab.ref.kanal_alt_id1,9);
  4 10354             skriv_id(z,kanal_tab.ref.kanal_alt_id2,9);
  4 10355           end;
  3 10356           write(z,"nl",2,<:kanalflag::>,"nl",1);
  3 10357           outintbits_ia(z,kanalflag,1,op_maske_lgd//2);
  3 10358           write(z,"nl",2);
  3 10359         end skriv_kanal_tab;
  2 10360     \f

  2 10360     message procedure skriv_opkaldskø side 1 - 820301/hko;
  2 10361     
  2 10361       procedure skriv_opkaldskø(z);
  2 10362         zone                    z;
  2 10363         begin
  3 10364           integer i,bogst,løb,j;
  3 10365           integer array field ref;
  3 10366           write(z,"nl",2,"*",5,<: opkaldskø :>,"*",5,"nl",2,
  3 10367             <:  ref næste foreg X    bus  linie/løb tid   -  op type  :>,
  3 10368             <: sig omr :>,"nl",1);
  3 10369           for i:= 1 step 1 until max_antal_mobilopkald do
  3 10370           begin
  4 10371             ref:= i*opkaldskø_postlængde;
  4 10372             j:= opkaldskø.ref(1);
  4 10373             write(z,<< dddd>,ref,<< ddddd>,j extract 12,j shift (-12));
  4 10374             j:= opkaldskø.ref(2);
  4 10375             write(z,"sp",1,if j < 0 then "X" else "sp",1,"sp",1);
  4 10376             skriv_id(z,j extract 23,9);
  4 10377             j:= opkaldskø.ref(3);
  4 10378             skriv_id(z,j,7);
  4 10379             j:= opkaldskø.ref(4);
  4 10380             write(z,<<  zd.dd>,(j shift (-12))/100.0,
  4 10381               <<    zd>,j extract 8);
  4 10382             j:= j shift (-8) extract 4;
  4 10383             if j = 1 or j = 2 then
  4 10384               write(z,if j=1 then <: normal:> else <: nød   :>)
  4 10385             else write(z,<<dddd>,j,"sp",3);
  4 10386             j:= opkaldskø.ref(5);
  4 10387             write(z,if j shift (-20) <> 0 then <:  B  :> else <:  S  :>,
  4 10388               true,4,if 1<=(j extract 8) and (j extract 8)<=max_antal_områder then
  4 10389               string område_navn(j extract 8) else <:---:>);
  4 10390             outchar(z,'nl');
  4 10391           end;
  3 10392     
  3 10392           write(z,"nl",1,<<z>,
  3 10393             <:første_frie_opkald=:>,første_frie_opkald,"nl",1,
  3 10394             <:første_opkald=:>,første_opkald,"nl",1,
  3 10395             <:sidste_opkald=:>,sidste_opkald,"nl",1,
  3 10396             <:første_nødopkald=:>,første_nødopkald,"nl",1,
  3 10397             <:sidste_nødopkald=:>,sidste_nødopkald,"nl",1,
  3 10398             <:opkaldskø_ledige=:>,opkaldskø_ledige,"nl",1,
  3 10399             <:nødopkald_brugt= :>,nødopkald_brugt,"nl",1,
  3 10400             "nl",1,<:opkaldsflag::>,"nl",1);
  3 10401             outintbits_ia(z,opkaldsflag,1,op_maske_lgd//2);
  3 10402             write(z,"nl",2);
  3 10403         end skriv_opkaldskø;
  2 10404     \f

  2 10404     message procedure skriv_radio_linietabel side 1 - 820301/hko;
  2 10405     
  2 10405       procedure skriv_radio_linie_tabel(z);
  2 10406         zone                               z;
  2 10407         begin
  3 10408           integer i,j,k;
  3 10409     
  3 10409           write(z,"nl",2,"*",5,<: liniefordeling for operatører :>,"*",5,"nl",2);
  3 10410           k:= 0;
  3 10411           for i:= 1 step 1 until max_linienr do
  3 10412           begin
  4 10413             læstegn(radio_linietabel,i+1,j);
  4 10414             if j > 0 then
  4 10415             begin
  5 10416               k:= k +1;
  5 10417               write(z,<<dddd>,i,":",1,<<zd_>,j,"sp",if k mod 5=0 then 0 else 4,
  5 10418                 "nl",if k mod 5=0 then 1 else 0);
  5 10419             end;
  4 10420           end;
  3 10421           write(z,"nl",if k mod 5=0 then 1 else 2);
  3 10422         end skriv_radio_linietabel;
  2 10423     
  2 10423     procedure skriv_radio_områdetabel(z);
  2 10424      zone                             z;
  2 10425       begin
  3 10426         integer i;
  3 10427     
  3 10427         write(z,"nl",2,"*",5,<: områdefordeling for operatører :>,"*",5,"nl",2);
  3 10428         for i:= 1 step 1 until max_antal_områder do
  3 10429         begin
  4 10430           laf:= (i-1)*4;
  4 10431           if radio_områdetabel(i)<>0 then
  4 10432             write(z,<<dd>,i,<:. :>,områdenavn.laf,<:: :>,
  4 10433               radio_områdetabel(i),"nl",1);
  4 10434         end;
  3 10435       end skriv_radio_områdetabel;
  2 10436     \f

  2 10436     message procedure h_radio side 1 - 810520/hko;
  2 10437     
  2 10437       <* hovedmodulkorutine for radiokanaler *>
  2 10438       procedure h_radio;
  2 10439       begin
  3 10440         integer array field op_ref;
  3 10441         integer k,dest_sem;
  3 10442         procedure skriv_hradio(z,omfang);
  3 10443           value                  omfang;
  3 10444           zone                 z;
  3 10445           integer                omfang;
  3 10446           begin integer i;
  4 10447             disable i:= write(z,"nl",1,<:+++ hovedmodul radio:>);
  4 10448             write(z,"sp",26-i);
  4 10449             if omfang >0 then
  4 10450             disable begin integer x;
  5 10451               trap(slut);
  5 10452               write(z,"nl",1,
  5 10453                 <:  op_ref:    :>,op_ref,"nl",1,
  5 10454                 <:  k:         :>,k,"nl",1,
  5 10455                 <:  dest_sem:  :>,dest_sem,"nl",1,
  5 10456                 <::>);
  5 10457               skriv_coru(z,coru_no(400));
  5 10458     slut:
  5 10459             end;
  4 10460           end skriv_hradio;
  3 10461     
  3 10461       trap(hrad_trap);
  3 10462       stack_claim(if cm_test then 198 else 146);
  3 10463     
  3 10463     <*+2*> if testbit32 and overvåget or testbit28 then
  3 10464         skriv_hradio(out,0);
  3 10465     <*-2*>
  3 10466     \f

  3 10466     message procedure h_radio side 2 - 820304/hko;
  3 10467     
  3 10467       repeat
  3 10468         wait_ch(cs_rad,op_ref,true,-1);
  3 10469     <*+2*>if testbit33 and overvåget then
  3 10470           disable begin
  4 10471             skriv_h_radio(out,0);
  4 10472             write(out,<: operation modtaget:>);
  4 10473             skriv_op(out,op_ref);
  4 10474           end;
  3 10475     <*-2*>
  3 10476     <*+4*>
  3 10477         if (d.op_ref.optype and
  3 10478              (gen_optype or rad_optype or vt_optype)) extract 12 =0
  3 10479         then fejlreaktion(12<*operationstype*>,op_ref,<:h<'_'>radio:>,1);
  3 10480     <*-4*>
  3 10481     
  3 10481         k:=d.op_ref.op_kode extract 12;
  3 10482         dest_sem:=
  3 10483           if k > 0 and k < 7
  3 10484              or k=11 or k=12 or k=19
  3 10485              or (72<=k and k<=74) or k = 77
  3 10486              <*IN,O/EK,O/IN,R/EK,R/FO,L/ST/EK,K/IN,K/RA,I/FO,O*>
  3 10487           then cs_radio_adm
  3 10488           else if k=41 <* radiokommando fra operatør *>
  3 10489           then cs_radio(d.opref.data(1)) else -1;
  3 10490     <*+4*>
  3 10491         if dest_sem<1 then
  3 10492         begin
  4 10493           if dest_sem<0 then
  4 10494             fejlreaktion(2<*operationskode*>,k,<:hovedmodul radio:>,1);
  4 10495           d.op_ref.resultat:= if dest_sem=0 then 45 else 31;
  4 10496           signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  4 10497         end
  3 10498         else
  3 10499     <*-4*>
  3 10500         begin <* operationskode ok *>
  4 10501           signal_ch(dest_sem,op_ref,d.op_ref.optype);
  4 10502         end;
  3 10503       until false;
  3 10504     
  3 10504     hrad_trap:
  3 10505       disable skriv_hradio(zbillede,1);
  3 10506       end h_radio;
  2 10507     \f

  2 10507     message procedure radio side 1 - 820301/hko;
  2 10508     
  2 10508       procedure radio(talevej,op);
  2 10509       value           talevej,op;
  2 10510       integer         talevej,op;
  2 10511         begin
  3 10512           integer array field opref, rad_op, vt_op, opref1, iaf, iaf1;
  3 10513           integer nr,i,j,k,res,opgave,tilst,tekn_inf, vtop2, vtop3,
  3 10514                   sig,omr,type,bus,ll,ttmm,vogn,garage,operatør;
  3 10515           integer array felt,værdi(1:8);
  3 10516           boolean byt,nød,frigiv_samtale;
  3 10517           real kl;
  3 10518           real field rf;
  3 10519     
  3 10519           procedure skriv_radio(z,omfang);
  3 10520             value                 omfang;
  3 10521             zone                z;
  3 10522             integer               omfang;
  3 10523             begin integer i1;
  4 10524               disable i1:= write(z,"nl",1,<:+++ radio:>);
  4 10525               write(z,"sp",26-i1);
  4 10526               if omfang > 0 then
  4 10527               disable begin real x;
  5 10528                 trap(slut);
  5 10529     \f

  5 10529     message procedure radio side 1a- 820301/hko;
  5 10530     
  5 10530                 write(z,"nl",1,
  5 10531                   <:  op_ref:    :>,op_ref,"nl",1,
  5 10532                   <:  opref1:    :>,opref1,"nl",1,
  5 10533                   <:  iaf:       :>,iaf,"nl",1,
  5 10534                   <:  iaf1:      :>,iaf1,"nl",1,
  5 10535                   <:  vt-op:     :>,vt_op,"nl",1,
  5 10536                   <:  rad-op:    :>,rad_op,"nl",1,
  5 10537                   <:  rf:        :>,rf,"nl",1,
  5 10538                   <:  nr:        :>,nr,"nl",1,
  5 10539                   <:  i:         :>,i,"nl",1,
  5 10540                   <:  j:         :>,j,"nl",1,
  5 10541                   <:  k:         :>,k,"nl",1,
  5 10542                   <:  operatør:  :>,operatør,"nl",1,
  5 10543                   <:  tilst:     :>,tilst,"nl",1,
  5 10544                   <:  res:       :>,res,"nl",1,
  5 10545                   <:  opgave:    :>,opgave,"nl",1,
  5 10546                   <:  type:      :>,type,"nl",1,
  5 10547                   <:  bus:       :>,bus,"nl",1,
  5 10548                   <:  ll:        :>,ll,"nl",1,
  5 10549                   <:  ttmm:      :>,ttmm,"nl",1,
  5 10550                   <:  vogn:      :>,vogn,"nl",1,
  5 10551                   <:  tekn-inf:  :>,tekn_inf,"nl",1,
  5 10552                   <:  vtop2:     :>,vtop2,"nl",1,
  5 10553                   <:  vtop3:     :>,vtop3,"nl",1,
  5 10554                   <:  sig:       :>,sig,"nl",1,
  5 10555                   <:  omr:       :>,omr,"nl",1,
  5 10556                   <:  garage:    :>,garage,"nl",1,
  5 10557                   <<-dddddd'-dd>,
  5 10558                   <:  kl:        :>,kl,systime(4,kl,x),x,"nl",1,
  5 10559                   <:samtaleflag: :>,"nl",1);
  5 10560                 out_intbits_ia(z,samtaleflag,1,op_maske_lgd//2);
  5 10561                 skriv_coru(z,coru_no(410+talevej));
  5 10562     slut:
  5 10563               end;<*disable*>
  4 10564             end skriv_radio;
  3 10565     \f

  3 10565     message procedure udtag_opkald side 1 - 820301/hko;
  3 10566     
  3 10566       integer
  3 10567       procedure udtag_opkald(vogn,type,operatør,bus,garage,omr,sig,ll,ttmm);
  3 10568         value                vogn,     operatør;
  3 10569         integer              vogn,type,operatør,bus,garage,omr,sig,ll,ttmm;
  3 10570         begin
  4 10571           integer res,tilst,nr,i,j,t,o,b,l,tm;
  4 10572           integer array field vt_op,ref,næste,forrige;
  4 10573           integer array field iaf1;
  4 10574           boolean skal_ud;
  4 10575     
  4 10575           boolean procedure skal_udskrives(fordelt,aktuel);
  4 10576             value                          fordelt,aktuel;
  4 10577             integer                        fordelt,aktuel;
  4 10578           begin
  5 10579             boolean skal;
  5 10580             integer n;
  5 10581             integer array field iaf;
  5 10582     
  5 10582             skal:= true;
  5 10583             if fordelt > 0 and fordelt<>aktuel then
  5 10584             begin
  6 10585               for n:= 0 step 1 until 3 do
  6 10586               begin
  7 10587                 if bpl_tilst(operatør_stop(fordelt,n),1) > 0 then
  7 10588                 begin
  8 10589                   iaf:= operatør_stop(fordelt,n)*op_maske_lgd;
  8 10590                   skal:= læsbit_ia(bpl_def.iaf,aktuel);
  8 10591                   goto returner;
  8 10592                 end;
  7 10593               end;
  6 10594             end;
  5 10595     returner:
  5 10596             skal_udskrives:= skal;
  5 10597           end;
  4 10598     
  4 10598           l:= b:= tm:= t:= 0;
  4 10599           garage:= sig:= 0;
  4 10600           res:= -1;
  4 10601     <*V*> wait(bs_opkaldskø_adgang);
  4 10602           ref:= første_nødopkald;
  4 10603           if ref <> 0 then
  4 10604             t:= 2
  4 10605           else
  4 10606           begin
  5 10607             ref:= første_opkald;
  5 10608             t:= if ref = 0 then 0 else 1;
  5 10609           end;
  4 10610           if t = 0 then res:= +19 <*kø er tom*> else
  4 10611           if vogn=0 and omr=0 then
  4 10612           begin
  5 10613             while ref <> 0 and res = -1 do
  5 10614             begin
  6 10615               nr:= opkaldskø.ref(4) extract 8;
  6 10616               if nr>64 then
  6 10617               begin 
  7 10618                 <*opk. primærfordelt til gruppe af btj.pl.*>
  7 10619                 i:=0; skal_ud:=true; iaf1:=nr*op_maske_lgd;
  7 10620                 while skal_ud and i<max_antal_operatører do
  7 10621                 begin
  8 10622                   i:=i+1;
  8 10623                   if læsbit_ia(bpl_def.iaf1,i) then
  8 10624                     skal_ud:= skal_ud and skal_udskrives(i,operatør);
  8 10625                 end;
  7 10626               end
  6 10627               else
  6 10628                 skal_ud:= skal_udskrives(nr,operatør);
  6 10629     
  6 10629               if skal_ud then
  6 10630     <*        if nr=0 or -,læsbit_ia(operatørmaske,nr) or nr=operatør then
  6 10631     *>
  6 10632                 res:= 0
  6 10633               else
  6 10634               begin
  7 10635                 ref:= opkaldskø.ref(1) extract 12;
  7 10636                 if ref = 0 and t = 2 then
  7 10637                 begin
  8 10638                   ref:= første_opkald;
  8 10639                   t:= if ref = 0 then 0 else 1;
  8 10640                 end else if ref = 0 then t:= 0;
  7 10641               end;
  6 10642             end; <*while*>
  5 10643     \f

  5 10643     message procedure udtag_opkald side 2 - 820304/hko;
  5 10644     
  5 10644             if ref <> 0 then
  5 10645             begin
  6 10646               b:= opkaldskø.ref(2);
  6 10647     <*+4*>    if b < 0 then
  6 10648                 fejlreaktion(19<*mobilopkald*>,bus extract 14,
  6 10649                   <:nødopkald(besvaret/ej meldt):>,1);
  6 10650     <*-4*>
  6 10651               garage:=b shift(-14) extract 8;
  6 10652               b:= b extract 14;
  6 10653               l:= opkaldskø.ref(3);
  6 10654               tm:= opkaldskø.ref(4);
  6 10655               o:= tm extract 8;
  6 10656               tm:= tm shift(-12);
  6 10657               omr:= opkaldskø.ref(5) extract 8;
  6 10658               sig:= opkaldskø.ref(5) shift (-20);
  6 10659             end
  5 10660             else res:=19; <* kø er tom *>
  5 10661           end <*vogn=0 and omr=0 *>
  4 10662           else
  4 10663           begin
  5 10664             <* vogn<>0 or omr<>0 *>
  5 10665             i:= 0; tilst:= -1;
  5 10666             if vogn shift(-22) = 1 then
  5 10667             begin
  6 10668               i:= find_busnr(vogn,nr,garage,tilst);
  6 10669               l:= vogn;
  6 10670             end
  5 10671             else
  5 10672             if vogn<>0 and (omr=0 or omr>2) then
  5 10673             begin
  6 10674               o:= 0;
  6 10675               i:= søg_omr_bus(vogn,l,garage,o,sig,tilst);
  6 10676               if i=(-2) then
  6 10677               begin
  7 10678                 o:= omr;
  7 10679                 i:= søg_omr_bus(vogn,l,garage,o,sig,tilst);
  7 10680               end;
  6 10681               nr:= vogn extract 14;
  6 10682             end
  5 10683             else nr:= vogn extract 14;
  5 10684             if i<0 then ref:= 0;
  5 10685             while ref <> 0 and res = -1 do
  5 10686             begin
  6 10687               i:= opkaldskø.ref(2) extract 14;
  6 10688               j:= opkaldskø.ref(4) extract 8; <*operatør*>
  6 10689               if nr = i and
  6 10690                  (omr=0 or omr=opkaldskø.ref(5) extract 8) then res:= 0
  6 10691               else
  6 10692               begin
  7 10693                 ref:= opkaldskø.ref(1) extract 12;
  7 10694                 if ref = 0 and t = 2 then
  7 10695                 begin
  8 10696                   ref:= første_opkald;
  8 10697                   t:= if ref = 0 then 0 else 1;
  8 10698                 end else if ref = 0 then t:= 0;
  7 10699               end;
  6 10700             end; <*while*>
  5 10701     \f

  5 10701     message procedure udtag_opkald side 3 - 810603/hko;
  5 10702     
  5 10702             if ref <> 0 then
  5 10703             begin
  6 10704               b:= nr;
  6 10705               tm:= opkaldskø.ref(4);
  6 10706               o:= tm extract 8;
  6 10707               tm:= tm shift(-12);
  6 10708               omr:= opkaldskø.ref(5) extract 4;
  6 10709               sig:= opkaldskø.ref(5) shift (-20);
  6 10710     
  6 10710     <*+4*>    if tilst <> -1 then
  6 10711                 fejlreaktion(3<*prg.fejl*>,tilst,
  6 10712                   <:vogntabel_tilstand for vogn i kø:>,1);
  6 10713     <*-4*>
  6 10714             end;
  5 10715           end;
  4 10716     
  4 10716           if ref <> 0 then
  4 10717           begin
  5 10718             næste:= opkaldskø.ref(1);
  5 10719             forrige:= næste shift(-12);
  5 10720             næste:= næste extract 12;
  5 10721             if forrige <> 0 then
  5 10722               opkaldskø.forrige(1):= opkaldskø.forrige(1) shift(-12) shift 12
  5 10723                                      + næste
  5 10724             else if t = 1 then første_opkald:= næste
  5 10725             else <*if t = 2 then*> første_nødopkald:= næste;
  5 10726     
  5 10726             if næste <> 0 then
  5 10727               opkaldskø.næste(1):= opkaldskø.næste(1) extract 12
  5 10728                                    + forrige shift 12
  5 10729             else if t = 1 then sidste_opkald:= forrige
  5 10730             else <* if t = 2 then*> sidste_nødopkald:= forrige;
  5 10731     
  5 10731             opkaldskø.ref(1):=første_frie_opkald;
  5 10732             første_frie_opkald:=ref;
  5 10733     
  5 10733             opkaldskø_ledige:=opkaldskø_ledige + 1;
  5 10734             if t=2 then nødopkald_brugt:=nødopkald_brugt - 1;
  5 10735             if -,læsbit_ia(operatør_maske,o) or o = 0 then
  5 10736               tofrom(opkaldsflag,alle_operatører,op_maske_lgd)
  5 10737             else
  5 10738             begin
  6 10739               sætbit_ia(opkaldsflag,operatør,1);
  6 10740               sætbit_ia(opkaldsflag,o,1);
  6 10741             end;
  5 10742             signal_bin(bs_mobil_opkald);
  5 10743           end;
  4 10744     \f

  4 10744     message procedure udtag_opkald side 4 - 810531/hko;
  4 10745     
  4 10745           signal_bin(bs_opkaldskø_adgang);
  4 10746           bus:= b;
  4 10747           type:= t;
  4 10748           ll:= l;
  4 10749           ttmm:= tm;
  4 10750           udtag_opkald:= res;
  4 10751         end udtag opkald;
  3 10752     \f

  3 10752     message procedure frigiv_kanal side 1 - 810603/hko;
  3 10753     
  3 10753       procedure frigiv_kanal(nr);
  3 10754         value                nr;
  3 10755         integer              nr;
  3 10756         begin
  4 10757           integer id1, id2, omr, i;
  4 10758           integer array field iaf, vt_op;
  4 10759     
  4 10759           iaf:= (nr-1)*kanal_beskrlængde;
  4 10760           id1:= kanal_tab.iaf.kanal_id1;
  4 10761           id2:= kanal_tab.iaf.kanal_id2;
  4 10762           omr:= kanal_til_omr(nr);
  4 10763           if id1 <> 0 then
  4 10764             wait(ss_samtale_nedlagt(nr));
  4 10765           if id1 shift (-22) < 3 and omr > 2 then
  4 10766           begin
  5 10767     <*V*>   waitch(cs_vt_adgang,vt_op,true,-1);
  5 10768             start_operation(vt_op,410+talevej,cs_radio(talevej),
  5 10769               if id1 shift (-22) = 2 then 18 else 17);
  5 10770             d.vt_op.data(1):= id1;
  5 10771             d.vt_op.data(4):= omr;
  5 10772             signalch(cs_vt,vt_op,vt_optype or genoptype);
  5 10773     <*V*>   waitch(cs_radio(talevej),vt_op,vt_optype,-1);
  5 10774             signalch(cs_vt_adgang,vt_op,true);
  5 10775           end;
  4 10776     
  4 10776           if id2 <> 0 and id2 shift(-20) <> 12 then
  4 10777             wait(ss_samtale_nedlagt(nr));
  4 10778           if id2 shift (-22) < 3 and omr > 2 then
  4 10779           begin
  5 10780     <*V*>   waitch(cs_vt_adgang,vt_op,true,-1);
  5 10781             start_operation(vt_op,410+talevej,cs_radio(talevej),
  5 10782               if id2 shift (-22) = 2 then 18 else 17);
  5 10783             d.vt_op.data(1):= id2;
  5 10784             d.vt_op.data(4):= omr;
  5 10785             signalch(cs_vt,vt_op,vt_optype or genoptype);
  5 10786     <*V*>   waitch(cs_radio(talevej),vt_op,vt_optype,-1);
  5 10787             signalch(cs_vt_adgang,vt_op,true);
  5 10788           end;
  4 10789     
  4 10789           kanal_tab.iaf.kanal_id1:= kanal_tab.iaf.kanal_id2:= 
  4 10790           kanal_tab.iaf.kanal_alt_id1:= kanal_tab.iaf.kanal_alt_id2:= 0;
  4 10791           kanal_tab.iaf.kanal_tilstand:= kanal_tab.iaf.kanal_tilstand
  4 10792                                         shift (-10) extract 6 shift 10;
  4 10793     <*    repeat
  4 10794             inspect(ss_samtale_nedlagt(nr),i);
  4 10795             if i>0 then wait(ss_samtale_nedlagt(nr));
  4 10796           until i<=0;
  4 10797     *>
  4 10798         end frigiv_kanal;
  3 10799     \f

  3 10799     message procedure hookoff side 1 - 880901/cl;
  3 10800     
  3 10800     integer procedure hookoff(talevej,op,retursem,flash);
  3 10801     value                     talevej,op,retursem,flash;
  3 10802     integer                   talevej,op,retursem;
  3 10803     boolean                                        flash;
  3 10804     begin
  4 10805       integer array field opref;
  4 10806     
  4 10806       opref:= op;
  4 10807       start_operation(opref,410+talevej,retursem,'A' shift 12 + 60);
  4 10808       d.opref.data(1):= talevej;
  4 10809       d.opref.data(2):= if flash then 2 else 1;
  4 10810       signalch(cs_radio_ud,opref,rad_optype);
  4 10811     <*V*> waitch(retursem,opref,rad_optype,-1);
  4 10812       hookoff:= d.opref.resultat;
  4 10813     end;
  3 10814     \f

  3 10814     message procedure hookon side 1 - 880901/cl;
  3 10815     
  3 10815     integer procedure hookon(talevej,op,retursem);
  3 10816       value                  talevej,op,retursem;
  3 10817       integer                talevej,op,retursem;
  3 10818     begin
  4 10819       integer i,res;
  4 10820       integer array field opref;
  4 10821     
  4 10821      if læsbit_ia(hookoff_maske,talevej) then
  4 10822      begin
  5 10823       inspect(bs_talevej_udkoblet(talevej),i);
  5 10824       if i<=0 then
  5 10825       begin
  6 10826         opref:= op;
  6 10827         start_operation(opref,410+talevej,retursem,'D' shift 12 + 60);
  6 10828         d.opref.data(1):= talevej;
  6 10829         signalch(cs_radio_ud,opref,rad_optype);
  6 10830     <*V*> waitch(retursem,opref,rad_optype,-1);
  6 10831         res:= d.opref.resultat;
  6 10832       end
  5 10833       else
  5 10834         res:= 0;
  5 10835     
  5 10835       if res=0 then wait(bs_talevej_udkoblet(talevej));
  5 10836      end
  4 10837      else
  4 10838        res:= 0;
  4 10839     
  4 10839      sætbit_ia(hookoff_maske,talevej,0);
  4 10840       hookon:= res;
  4 10841     end;
  3 10842     \f

  3 10842     message procedure radio side 2 - 820304/hko;
  3 10843     
  3 10843           rad_op:= op;
  3 10844     
  3 10844           trap(radio_trap);
  3 10845           stack_claim((if cm_test then 200 else 150) +200);
  3 10846     
  3 10846     <*+2*>if testbit32 and overvåget or testbit28 then
  3 10847             skriv_radio(out,0);
  3 10848     <*-2*>
  3 10849           repeat
  3 10850             waitch(cs_radio(talevej),opref,true,-1);
  3 10851     <*+2*>
  3 10852             if testbit33 and overvåget then
  3 10853             disable begin
  4 10854               skriv_radio(out,0);
  4 10855               write(out,<: operation modtaget på cs:>,<<d>,cs_radio(talevej));
  4 10856               skriv_op(out,opref);
  4 10857             end;
  3 10858     <*-2*>
  3 10859     
  3 10859             k:= d.op_ref.opkode extract 12;
  3 10860             opgave:= d.opref.opkode shift (-12);
  3 10861             operatør:= d.op_ref.data(4);
  3 10862     
  3 10862     <*+4*>  if (d.op_ref.optype and (gen_optype or io_optype or op_optype))
  3 10863               extract 12 = 0 then fejlreaktion(12<*operationstype*>,op_ref,
  3 10864                                     <:radio:>,0);
  3 10865     <*-4*>
  3 10866     \f

  3 10866     message procedure radio side 3 - 880930/cl;
  3 10867             if k=41 <*radiokommando fra operatør*> then
  3 10868             begin
  4 10869               vogn:= d.opref.data(2);
  4 10870               res:= -1;
  4 10871               for i:= 7 step 1 until 12 do d.opref.data(i):= 0;
  4 10872               sig:= 0; omr:= d.opref.data(3) extract 8;
  4 10873               bus:= garage:= ll:= 0;
  4 10874     
  4 10874               if opgave=1 or opgave=9 then
  4 10875               begin <* opkald til enkelt vogn (CHF) *>
  5 10876                 res:= udtag_opkald(vogn,type,operatør,bus,garage,omr,sig,ll,ttmm);
  5 10877                 if res=19 and (vogn<>0 or d.opref.data(3)=2) then res:= -1;
  5 10878                 <* ok at kø er tom når vogn er angivet eller VHF *>
  5 10879                 
  5 10879                 d.opref.data(11):= if res=0 then 
  5 10880                   (if ll<>0 then ll else bus) else vogn;
  5 10881     
  5 10881                 if type=2 <*nød*> then
  5 10882                 begin
  6 10883                   waitch(cs_radio_pulje,opref1,true,-1);
  6 10884                   start_operation(opref1,410+talevej,cs_radio_pulje,46);
  6 10885                   d.opref1.data(1):= if ll<>0 then ll else bus;
  6 10886                   systime(5,0,kl);
  6 10887                   d.opref1.data(2):= entier(kl/100.0);
  6 10888                   d.opref1.data(3):= omr;
  6 10889                   signalch(cs_io,opref1,gen_optype or rad_optype);
  6 10890                 end
  5 10891               end; <* enkeltvogn (CHF) *>
  4 10892     
  4 10892               <* check enkeltvogn for ledig *>
  4 10893               if res<=0 and omr=2<*VHF*> and bus=0 and
  4 10894                  (opgave=1 or opgave=9) then
  4 10895               begin
  5 10896                 for i:= 1 step 1 until max_antal_kanaler do
  5 10897                   if kanal_til_omr(i)=2 then nr:= i;
  5 10898                 iaf:= (nr-1)*kanalbeskrlængde;
  5 10899                 if kanal_tab.iaf.kanal_tilstand extract 2<>0 and 
  5 10900                    kanal_tab.iaf.kanal_id1 extract 20 = 10000
  5 10901                 then res:= 52;
  5 10902               end;
  4 10903               if res < 0 and (d.opref.data(3) > 2 <* ej TLF, VHF *> or
  4 10904                 d.opref.data(3)=0 <*std. omr*>) and
  4 10905                 (opgave <= 2 <* OP elller ME *> or opgave = 9 <* OP,L *>)
  4 10906               then
  4 10907               begin
  5 10908                 type:= ttmm:= 0; omr:= 0; sig:= 0;
  5 10909                 if vogn shift (-22) = 1 then
  5 10910                 begin
  6 10911                   find_busnr(vogn,bus,garage,res);
  6 10912                   ll:= vogn;
  6 10913                 end
  5 10914                 else
  5 10915                 if vogn shift (-22) = 0 then
  5 10916                 begin
  6 10917                   søg_omr_bus(vogn,ll,garage,omr,sig,res);
  6 10918                   bus:= vogn;
  6 10919                 end
  5 10920                 else
  5 10921                   fejlreaktion(31,vogn,<:vognident i enkeltvognsopk.:>,0);
  5 10922                 res:= if res=(-1) then 18 <* i kø *> else 
  5 10923                       (if res<>0 then 14 <*opt*> else 0);
  5 10924               end
  4 10925               else
  4 10926               if res<0 and (d.opref.data(3)=1 or d.opref.data(3)=2) and
  4 10927                 opgave <= 2 then
  4 10928               begin
  5 10929                 bus:= vogn; garage:= type:= ttmm:= 0;
  5 10930                 res:= 0; omr:= 0; sig:= 0;
  5 10931               end
  4 10932               else
  4 10933               if opgave>1 and opgave<>9 then
  4 10934                 type:= ttmm:= res:= 0;
  4 10935     \f

  4 10935     message procedure radio side 4 - 880930/cl;
  4 10936     
  4 10936               if res=0 and (opgave<=4 or opgave=9) and
  4 10937                 (omr<1 or 2<omr) and
  4 10938                 (d.opref.data(3)>2 or d.opref.data(3)=0) then
  4 10939               begin <* reserver i vogntabel *>
  5 10940                 waitch(cs_vt_adgang,vt_op,true,-1);
  5 10941                 start_operation(vt_op,410+talevej,cs_radio(talevej),
  5 10942                   if opgave <=2 or opgave=9 then 15 else 16);
  5 10943                 d.vt_op.data(1):= if opgave<=2 or opgave=9 then
  5 10944                   (if vogn=0 then garage shift 14 + bus else 
  5 10945                    if ll<>0 then ll else garage shift 14 + bus)
  5 10946                   else vogn <*gruppeid*>;
  5 10947                 d.vt_op.data(4):= if d.opref.data(3)<>0 then
  5 10948                                     d.opref.data(3) extract 8
  5 10949                                   else omr extract 8;
  5 10950                 signalch(cs_vt,vt_op,gen_optype or rad_optype);
  5 10951     <*V*>       waitch(cs_radio(talevej),vt_op,rad_optype,-1);
  5 10952     
  5 10952                 res:= d.vt_op.resultat;
  5 10953                 if res=3 then res:= 0;
  5 10954                 vtop2:= d.vt_op.data(2);
  5 10955                 vtop3:= d.vt_op.data(3);
  5 10956                 tekn_inf:= d.vt_op.data(4);
  5 10957                 signalch(cs_vt_adgang,vt_op,gen_optype or vt_optype);
  5 10958               end;
  4 10959     
  4 10959               if res<>0 then
  4 10960               begin
  5 10961                 d.opref.resultat:= res;
  5 10962                 signalch(d.opref.retur,opref,d.opref.optype);
  5 10963               end
  4 10964               else
  4 10965     
  4 10965               if opgave <= 9 then
  4 10966               begin <* opkald *>
  5 10967                 res:= hookoff(talevej,rad_op,cs_radio(talevej),
  5 10968                     opgave<>9 and d.opref.data(6)<>0);
  5 10969     
  5 10969                 if res<>0 then
  5 10970                   goto returner_op;
  5 10971     
  5 10971                 if opgave=7 or opgave=8 then <* KATASTROFEOPKALD *>
  5 10972                 begin
  6 10973                   start_operation(rad_op,410+talevej,cs_radio(talevej),
  6 10974                     'H' shift 12 + 60);
  6 10975                   d.rad_op.data(1):= talevej;
  6 10976                   d.rad_op.data(2):= 'D';
  6 10977                   d.rad_op.data(3):= 6; <* rear *>
  6 10978                   d.rad_op.data(4):= 1; <* rear no *>
  6 10979                   d.rad_op.data(5):= 0; <* disconnect *>
  6 10980                   signalch(cs_radio_ud,rad_op,rad_optype);
  6 10981     <*V*>         waitch(cs_radio(talevej),rad_op,rad_optype,-1);
  6 10982                   if d.rad_op.resultat<>0 then
  6 10983                   begin
  7 10984                     res:= d.rad_op.resultat;
  7 10985                     goto returner_op;
  7 10986                   end;
  6 10987     <*
  6 10988                   while optaget_flag shift (-1) <> 0 do
  6 10989                     delay(1);
  6 10990     *>
  6 10991                 end;
  5 10992     \f

  5 10992     message procedure radio side 5 - 880930/cl;
  5 10993     
  5 10993                 start_operation(rad_op,410+talevej,cs_radio(talevej),
  5 10994                   'B' shift 12 + 60);
  5 10995                 d.rad_op.data(1):= talevej;
  5 10996                 d.rad_op.data(2):= 'D';
  5 10997                 d.rad_op.data(3):= if opgave=9 then 3 else
  5 10998                                    (2 - (opgave extract 1)); <* højttalerkode *>
  5 10999     
  5 10999                 if 5<=opgave and opgave <=8 then <* ALLE KALD *>
  5 11000                 begin
  6 11001                   j:= 0;
  6 11002                   for i:= 2 step 1 until max_antal_områder do
  6 11003                   begin
  7 11004                     if opgave > 6 or
  7 11005                       (d.opref.data(3) shift (-20) = 15 and
  7 11006                        læsbiti(d.opref.data(3),i)) or
  7 11007                       (d.opref.data(3) shift (-20) = 14 and
  7 11008                        d.opref.data(3) extract 20  =  i)
  7 11009                     then
  7 11010                     begin
  8 11011                       for k:= 1 step 1 until (if i=3 then 2 else 1) do
  8 11012                       begin
  9 11013                         j:= j+1;
  9 11014                         d.rad_op.data(10+(j-1)*2):=
  9 11015                           område_id(i,2) shift 12 +         <* tkt, tkn *>
  9 11016                           (if i=2<*VHF*> then 4 else k) 
  9 11017                                                shift 8 +   <* signal type *>
  9 11018                                                       1;    <* antal tno *>
  9 11019                         d.rad_op.data(11+(j-1)*2):= 0;      <* tno alle *>
  9 11020                       end;
  8 11021                     end;
  7 11022                   end;
  6 11023                   d.rad_op.data(4):= j;
  6 11024                   d.rad_op.data(5):= 0;
  6 11025                 end
  5 11026                 else
  5 11027                 if opgave>2 and opgave <= 4 then <* gruppekald *>
  5 11028                 begin
  6 11029                   d.rad_op.data(4):= vtop2;
  6 11030                   d.rad_op.data(5):= vtop3;
  6 11031                 end
  5 11032                 else
  5 11033                 begin <* enkeltvogn *>
  6 11034                   if omr=0 then
  6 11035                   begin
  7 11036                     sig:= tekn_inf shift (-23);
  7 11037                     omr:= if d.opref.data(3)<>0 then d.opref.data(3)
  7 11038                           else tekn_inf extract 8;
  7 11039                   end
  6 11040                   else
  6 11041                   if d.opref.data(3)<>0 then omr:= d.opref.data(3);
  6 11042     
  6 11042                   <* lytte-kald til nød i TCT, VHF og TLF *>
  6 11043                   <* tvinges til alm. opkald              *>
  6 11044                   if (opgave=9) and (type=2) and (omr<=3) then
  6 11045                   begin
  7 11046                     d.opref.opkode:= 1 shift 12 + d.opref.opkode extract 12;
  7 11047                     opgave:= 1;
  7 11048                     d.radop.data(3):= 1;
  7 11049                   end;
  6 11050     
  6 11050                   if omr=2 <*VHF*> then sig:= 4 else
  6 11051                   if omr=1 <*TLF*> then sig:= 7 else
  6 11052                            <*UHF*>      sig:= sig+1;
  6 11053                   d.rad_op.data(4):= 1;
  6 11054                   d.rad_op.data(5):= 0;
  6 11055                   d.rad_op.data(10):=
  6 11056                      (område_id(omr,2) extract 12) shift 12  +
  6 11057                                       sig shift 8 +
  6 11058                                       1;
  6 11059                   d.rad_op.data(11):= bus;
  6 11060                 end;
  5 11061     \f

  5 11061     message procedure radio side 6 - 880930/cl;
  5 11062     
  5 11062                 signalch(cs_radio_ud,rad_op,rad_optype);
  5 11063     <*V*>       waitch(cs_radio(talevej),rad_op,rad_optype,-1);
  5 11064                 res:= d.rad_op.resultat;
  5 11065     
  5 11065                 d.rad_op.data(6):= 0;
  5 11066                 for i:= 1 step 1 until max_antal_områder do
  5 11067                   if læsbiti(d.rad_op.data(7),i) then 
  5 11068                     increase(d.rad_op.data(6));
  5 11069     returner_op:
  5 11070                 if d.rad_op.data(6)=1 then
  5 11071                 begin
  6 11072                   for i:= 1 step 1 until max_antal_områder do
  6 11073                     if d.rad_op.data(7) extract 20 = 1 shift i then
  6 11074                       d.opref.data(12):= 14 shift 20 + i;
  6 11075                 end
  5 11076                 else
  5 11077                   d.opref.data(12):= 15 shift 20 + d.rad_op.data(7) extract 20;
  5 11078                 d.opref.data(7):= type;
  5 11079                 d.opref.data(8):= garage shift 14 + bus;
  5 11080                 d.opref.data(9):= ll;
  5 11081                 if res=0 then
  5 11082                 begin
  6 11083                   d.opref.resultat:= 3;
  6 11084                   d.opref.data(5):= d.opref.data(6);
  6 11085                   j:= 0;
  6 11086                   for i:= 1 step 1 until max_antal_kanaler do
  6 11087                     if læsbiti(d.rad_op.data(9),i) then j:= j+1;
  6 11088                   if j>1 then
  6 11089                     d.opref.data(6):= 3 shift 22 + 1 shift 20 + d.rad_op.data(9)
  6 11090                   else
  6 11091                   begin
  7 11092                     j:= 0;
  7 11093                     for i:= 1 step 1 until max_antal_kanaler do
  7 11094                       if læsbiti(d.rad_op.data(9),i) then j:= i;
  7 11095                     d.opref.data(6):= 3 shift 22 + j;
  7 11096                   end;
  6 11097                   d.opref.data(7):= type;
  6 11098                   d.opref.data(8):= garage shift 14 + bus;
  6 11099                   d.opref.data(9):= ll;
  6 11100                   d.opref.data(10):= d.opref.data(6);
  6 11101                   for i:= 1 step 1 until max_antal_kanaler do
  6 11102                   begin
  7 11103                     if læsbiti(d.rad_op.data(9),i) then
  7 11104                     begin
  8 11105                       if kanal_id(i) shift (-5) extract 5 = 2 then
  8 11106                         j:= pabx_id( kanal_id(i) extract 5 )
  8 11107                       else
  8 11108                         j:= radio_id( kanal_id(i) extract 5 );
  8 11109                       if j>0 and type=0 then tæl_opkald(j,1);
  8 11110     
  8 11110                       iaf:= (i-1)*kanalbeskrlængde;
  8 11111                       skrivtegn(kanal_tab.iaf,1,talevej);
  8 11112                       kanal_tab.iaf.kanal_id2:= kanal_tab.iaf.kanal_id1;
  8 11113                       kanal_tab.iaf.kanal_alt_id2:= kanal_tab.iaf.kanal_alt_id1;
  8 11114                       kanal_tab.iaf.kanal_id1:=
  8 11115                         if opgave<=2 or opgave=9 then
  8 11116                           d.opref.data(if d.opref.data(9)<>0 then 9 else 8)
  8 11117                         else
  8 11118                           d.opref.data(2);
  8 11119                       kanal_tab.iaf.kanal_alt_id1:=
  8 11120                         if opgave<=2 or opgave=9 then
  8 11121                           d.opref.data(if d.opref.data(9)<>0 then 8 else 9)
  8 11122                         else
  8 11123                           0;
  8 11124                       if kanal_tab.iaf.kanal_id1=0 then
  8 11125                         kanal_tab.iaf.kanal_id1:= 10000;
  8 11126                       kanal_tab.iaf.kanal_spec:=
  8 11127                          if opgave <= 2 or opgave = 9 then ttmm else 0;
  8 11128                     end;
  7 11129                   end;
  6 11130                   if 5<=opgave and opgave<=8 <*alle-/katastrofekald*> then
  6 11131                     sætbit_ia(kanalflag,operatør,1);
  6 11132     \f

  6 11132     message procedure radio side 7 - 880930/cl;
  6 11133     
  6 11133                 end
  5 11134                 else
  5 11135                 begin
  6 11136                   d.opref.resultat:= res;
  6 11137                   if d.opref.data(6)=0 then
  6 11138                   res:= hookon(talevej,rad_op,cs_radio(talevej));
  6 11139                   <* frigiv fra vogntabel hvis reserveret *>
  6 11140                   if (opgave<=4 or opgave=9) and
  6 11141                      (d.opref.data(3)=0 or d.opref.data(3)>2) then
  6 11142                   begin
  7 11143                     waitch(cs_vt_adgang,vt_op,true,-1);
  7 11144                     startoperation(vt_op,410+talevej,cs_radio(talevej),
  7 11145                       if opgave<=2 or opgave=9 then 17 else 18);
  7 11146                     d.vt_op.data(1):= if opgave<=2 or opgave=9 then
  7 11147                       (if vogn=0 then garage shift 14 + bus else
  7 11148                        if ll<>0 then ll else garage shift 14 + bus)
  7 11149                       else vogn;
  7 11150                     d.vt_op.data(4):= omr;
  7 11151                     signalch(cs_vt,vt_op,gen_optype or vt_optype);
  7 11152                     waitch(cs_radio(talevej),vt_op,vt_optype,-1);
  7 11153                     signalch(cs_vt_adgang,vt_op,true);
  7 11154                   end;
  6 11155                 end;
  5 11156                 signalch(d.opref.retur,opref,d.opref.optype);
  5 11157     \f

  5 11157     message procedure radio side 8 - 880930/cl;
  5 11158     
  5 11158               end <* opkald *>
  4 11159               else
  4 11160               if opgave = 10 <* MONITER *> then
  4 11161               begin
  5 11162                 nr:= d.opref.data(2);
  5 11163                 if nr shift (-20) <> 12 then 
  5 11164                   fejlreaktion(3,nr,<: moniter, kanalnr:>,0);
  5 11165                 nr:= nr extract 20;
  5 11166                 iaf:= (nr-1)*kanalbeskrlængde;
  5 11167                 inspect(ss_samtale_nedlagt(nr),i);
  5 11168                 k:= if kanal_tab.iaf.kanal_id2 shift (-20) = 12 then
  5 11169                       kanal_tab.iaf.kanal_id2 extract 20
  5 11170                     else
  5 11171                     if kanal_tab.iaf.kanal_id2<>0 then nr else 0;
  5 11172                 if k<>0 then inspect(ss_samtale_nedlagt(k),j) else j:=0;
  5 11173                 if kanal_tab.iaf.kanal_tilstand shift (-16) = talevej and
  5 11174                    (i<>0 or j<>0) then
  5 11175                 begin
  6 11176                   res:= 0;
  6 11177                   d.opref.data(5):= 12 shift 20 + k;
  6 11178                   d.opref.data(6):= 12 shift 20 + nr;
  6 11179                   sætbit_ia(kanalflag,operatør,1);
  6 11180                   goto radio_nedlæg;
  6 11181                 end
  5 11182                 else
  5 11183                 if i<>0 or j<>0 then
  5 11184                   res:= 49
  5 11185                 else
  5 11186                 if kanal_tab.iaf.kanal_tilstand extract 2 = 0 then
  5 11187                   res:= 49 <* ingen samtale igang *>
  5 11188                 else
  5 11189                 begin
  6 11190                   res:= hookoff(talevej,rad_op,cs_radio(talevej),false);
  6 11191                   if res=0 then
  6 11192                   begin
  7 11193                     start_operation(rad_op,410+talevej,cs_radio(talevej),
  7 11194                       'B' shift 12 + 60);
  7 11195                     d.rad_op.data(1):= talevej;
  7 11196                     d.rad_op.data(2):= 'V';
  7 11197                     d.rad_op.data(3):= 0;
  7 11198                     d.rad_op.data(4):= 1;
  7 11199                     d.rad_op.data(5):= 0;
  7 11200                     d.rad_op.data(10):=
  7 11201                       (kanal_id(nr) shift (-5) shift 18) +
  7 11202                       (kanal_id(nr) extract  5 shift 12) + 0;
  7 11203                     signalch(cs_radio_ud,rad_op,rad_optype);
  7 11204     <*V*>           waitch(cs_radio(talevej),rad_op,rad_optype,-1);
  7 11205                     res:= d.rad_op.resultat;
  7 11206                     if res=0 then
  7 11207                     begin
  8 11208                       d.opref.data(5):= 0;
  8 11209                       d.opref.data(6):= 3 shift 22 + 0 shift 20 + nr;
  8 11210                       d.opref.data(7):= kanal_tab.iaf.kanal_tilstand extract 10;
  8 11211                       res:= 3;
  8 11212                     end;
  7 11213                   end;
  6 11214                 end;
  5 11215     \f

  5 11215     message procedure radio side 9 - 880930/cl;
  5 11216                 if res=3 then
  5 11217                 begin
  6 11218                   if kanal_tab.iaf.kanal_tilstand shift (-16) = talevej then
  6 11219                     sætbiti(kanal_tab.iaf.kanal_tilstand,5,1) <* monbit *>
  6 11220                   else
  6 11221                     sætbit_ia(kanal_tab.iaf.kanal_mon_maske,talevej,1);
  6 11222                   d.opref.data(6):= 12 shift 20 + nr;
  6 11223                   i:= kanal_tab.iaf.kanal_id2;
  6 11224                   if i<>0 then
  6 11225                   begin
  7 11226                     if i shift (-20) = 12 then
  7 11227                     begin <* ident2 henviser til anden kanal *>
  8 11228                       iaf1:= ((i extract 20)-1)*kanalbeskrlængde;
  8 11229                       if kanal_tab.iaf1.kanal_tilstand shift (-16) = talevej then
  8 11230                         sætbiti(kanal_tab.iaf.kanal_tilstand,5,1)
  8 11231                       else
  8 11232                         sætbit_ia(kanal_tab.iaf.kanal_mon_maske,talevej,1);
  8 11233                       d.opref.data(5):= 12 shift 20 + i;
  8 11234                     end
  7 11235                     else
  7 11236                       d.opref.data(5):= 12 shift 20 + nr;
  7 11237                   end
  6 11238                   else
  6 11239                     d.opref.data(5):= 0;
  6 11240                 end;
  5 11241     
  5 11241                 if res<>3 then
  5 11242                 begin
  6 11243                   res:= 0;
  6 11244                   sætbit_ia(kanalflag,operatør,1);
  6 11245                   goto radio_nedlæg;
  6 11246                 end;
  5 11247                 d.opref.resultat:= res;
  5 11248                 signalch(d.opref.retur,opref,d.opref.optype);
  5 11249     \f

  5 11249     message procedure radio side 10 - 880930/cl;
  5 11250     
  5 11250               end <* MONITERING *>
  4 11251               else
  4 11252               if opgave = 11 then <* GENNEMSTILLING *>
  4 11253               begin
  5 11254                 nr:= d.opref.data(6) extract 20;
  5 11255                 k:= if d.opref.data(5) shift (-20) = 12 then
  5 11256                       d.opref.data(5) extract 20
  5 11257                     else
  5 11258                       0;
  5 11259                 inspect(ss_samtale_nedlagt(nr),i);
  5 11260                 if k<>0 then inspect(ss_samtale_nedlagt(k),j) else j:=0;
  5 11261                 if i<>0 and j<>0 then
  5 11262                 begin
  6 11263                   res:= hookon(talevej,rad_op,cs_radio(talevej));
  6 11264                   goto radio_nedlæg;
  6 11265                 end;
  5 11266     
  5 11266                 iaf:= (nr-1)*kanal_beskr_længde;
  5 11267                 if kanal_tab.iaf.kanal_tilstand shift (-16) = talevej then
  5 11268                 begin
  6 11269                   if læsbiti(kanal_tab.iaf.kanal_tilstand,5) and
  6 11270                      kanal_tab.iaf.kanal_tilstand extract 2 = 3
  6 11271                   then
  6 11272                     res:= hookoff(talevej,rad_op,cs_radio(talevej),true)
  6 11273                   else
  6 11274                   if kanal_tab.iaf.kanal_tilstand extract 2 = 1 and
  6 11275                      d.opref.data(5)<>0
  6 11276                   then
  6 11277                     res:= 0
  6 11278                   else
  6 11279                     res:= 21; <* ingen at gennemstille til *>
  6 11280                 end
  5 11281                 else
  5 11282                   res:= 50; <* kanalnr *>
  5 11283     
  5 11283                 if res=0 then
  5 11284                   res:= hookon(talevej,rad_op,cs_radio(talevej));
  5 11285                 if res=0 then
  5 11286                 begin
  6 11287                   sætbiti(kanal_tab.iaf.kanal_tilstand,5,0);
  6 11288                   kanal_tab.iaf.kanal_tilstand:=
  6 11289                     kanal_tab.iaf.kanal_tilstand shift (-2) shift 2 + 3;
  6 11290                   d.opref.data(6):= 0;
  6 11291                   if kanal_tab.iaf.kanal_id2=0 then
  6 11292                     kanal_tab.iaf.kanal_id2:= d.opref.data(5);
  6 11293     
  6 11293                   if kanal_tab.iaf.kanal_id2 shift (-22) = 3 then
  6 11294                   begin <* gennemstillet til anden kanal *>
  7 11295                     iaf1:= ((kanal_tab.iaf.kanal_id2 extract 20) - 1)
  7 11296                                                             *kanalbeskrlængde;
  7 11297                     sætbiti(kanal_tab.iaf1.kanal_tilstand,5,0);
  7 11298                     kanal_tab.iaf1.kanal_tilstand:=
  7 11299                       kanal_tab.iaf1.kanal_tilstand shift (-2) shift 2 + 3;
  7 11300                     if kanal_tab.iaf1.kanal_id2=0 then
  7 11301                       kanal_tab.iaf1.kanal_id2:= 12 shift 20 + nr;
  7 11302                   end;
  6 11303                   d.opref.data(5):= 0;
  6 11304     
  6 11304                   res:= 3;
  6 11305                 end;
  5 11306     
  5 11306                 d.opref.resultat:= res;
  5 11307                 signalch(d.opref.retur,opref,d.opref.optype);
  5 11308     \f

  5 11308     message procedure radio side 11 - 880930/cl;
  5 11309     
  5 11309               end
  4 11310               else
  4 11311               if opgave = 12 then <* NEDLÆG *>
  4 11312               begin
  5 11313                 res:= hookon(talevej,rad_op,cs_radio(talevej));
  5 11314     radio_nedlæg:
  5 11315                 if res=0 then
  5 11316                 begin
  6 11317                  for k:= 5, 6  do
  6 11318                  begin
  7 11319                   if d.opref.data(k) shift (-20) = 12 then
  7 11320                   begin
  8 11321                     i:= d.opref.data(k) extract 20;
  8 11322                     iaf:= (i-1)*kanalbeskrlængde;
  8 11323                     if kanal_tab.iaf.kanal_tilstand shift (-16) = talevej then
  8 11324                       frigiv_kanal(d.opref.data(k) extract 20)
  8 11325                     else
  8 11326                       sætbit_ia(kanal_tab.iaf.kanal_mon_maske,talevej,0);
  8 11327                   end
  7 11328                   else
  7 11329                   if d.opref.data(k) shift (-20) = 13 then
  7 11330                   begin
  8 11331                     for i:= 1 step 1 until max_antal_kanaler do
  8 11332                       if læsbiti(d.opref.data(k),i) then
  8 11333                       begin
  9 11334                         iaf:= (i-1)*kanalbeskrlængde;
  9 11335                         if kanal_tab.iaf.kanal_tilstand shift (-16) = talevej then
  9 11336                           frigiv_kanal(i)
  9 11337                         else
  9 11338                           sætbit_ia(kanal_tab.iaf.kanal_mon_maske,talevej,0);
  9 11339                       end;
  8 11340                     sætbit_ia(kanalflag,operatør,1);
  8 11341                   end;
  7 11342                  end;
  6 11343                   d.opref.data(5):= 0;
  6 11344                   d.opref.data(6):= 0;
  6 11345                   d.opref.data(9):= 0;
  6 11346                   res:= if opgave=12 then 3 else 49;
  6 11347                 end;
  5 11348                 d.opref.resultat:= res;
  5 11349                 signalch(d.opref.retur,opref,d.opref.optype);
  5 11350               end
  4 11351               else
  4 11352               if opgave=13 then <* R *>
  4 11353               begin
  5 11354                 startoperation(rad_op,410+talevej,cs_radio(talevej),
  5 11355                   'H' shift 12 + 60);
  5 11356                 d.rad_op.data(1):= talevej;
  5 11357                 d.rad_op.data(2):= 'M';
  5 11358                 d.rad_op.data(3):= 0; <*tkt*>
  5 11359                 d.rad_op.data(4):= 0; <*tkn*>
  5 11360                 d.rad_op.data(5):= 1 - (d.opref.data(2) extract 1);
  5 11361                 signalch(cs_radio_ud,rad_op,rad_optype);
  5 11362     <*V*>       waitch(cs_radio(talevej),rad_op,rad_optype,-1);
  5 11363                 res:= d.rad_op.resultat;
  5 11364                 d.opref.resultat:= if res=0 then 3 else res;
  5 11365                 signalch(d.opref.retur,opref,d.opref.optype);
  5 11366               end
  4 11367               else
  4 11368               if opgave=14 <* VENTEPOS *> then
  4 11369               begin
  5 11370                 res:= 0;
  5 11371                 while (res<=3 and d.opref.data(2)>0) do
  5 11372                 begin
  6 11373                   nr:= d.opref.data(6) extract 20;
  6 11374                   k:= if d.opref.data(5) shift (-20) = 12 then
  6 11375                         d.opref.data(5) extract 20
  6 11376                       else
  6 11377                         0;
  6 11378                   inspect(ss_samtale_nedlagt(nr),i);
  6 11379                   if k<>0 then inspect(ss_samtale_nedlagt(k),j) else j:= 0;
  6 11380                   if i<>0 or j<>0 then
  6 11381                   begin
  7 11382                     res:= hookon(talevej,radop,cs_radio(talevej));
  7 11383                     goto radio_nedlæg;
  7 11384                   end;
  6 11385     
  6 11385                   res:= hookoff(talevej,radop,cs_radio(talevej),true);
  6 11386     
  6 11386                   if res=0 then
  6 11387                   begin
  7 11388                     i:= d.opref.data(5);
  7 11389                     d.opref.data(5):= d.opref.data(6);
  7 11390                     d.opref.data(6):= i;
  7 11391                     res:= 3;
  7 11392                   end;
  6 11393     
  6 11393                   d.opref.data(2):= d.opref.data(2)-1;
  6 11394                 end;
  5 11395                 d.opref.resultat:= res;
  5 11396                 signalch(d.opref.retur,opref,d.opref.optype);
  5 11397               end
  4 11398               else
  4 11399               begin
  5 11400                 fejlreaktion(2,opgave,<: radioopgave fra operatør:>,1);
  5 11401                 d.opref.resultat:= 31;
  5 11402                 signalch(d.opref.retur,opref,d.opref.optype);
  5 11403               end;
  4 11404     
  4 11404             end <* radiokommando fra operatør *>
  3 11405             else
  3 11406             begin
  4 11407     
  4 11407               d.op_ref.resultat:= 45; <* ikke implementeret *>
  4 11408     
  4 11408               signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  4 11409     
  4 11409             end;
  3 11410               
  3 11410           until false;
  3 11411     radio_trap:
  3 11412           disable skriv_radio(zbillede,1);
  3 11413         end radio;
  2 11414     \f

  2 11414     message procedure radio_ind side 1 - 810521/hko;
  2 11415     
  2 11415       procedure radio_ind(op);
  2 11416           value           op;
  2 11417           integer         op;
  2 11418         begin
  3 11419           integer array field op_ref,ref,io_opref;
  3 11420           integer ac, lgd, ttyp, ptyp, pnum, pos, tegn, bs, b_pt, b_pn,
  3 11421             antal_sendt, antal_spec, sum, csum, i, j, k, filref, zno;
  3 11422           integer array typ, val(1:6), answ, tlgr(1:32);
  3 11423           integer array field spec;
  3 11424           real field rf;
  3 11425           long array field laf;
  3 11426     
  3 11426           procedure skriv_radio_ind(zud,omfang);
  3 11427             value                       omfang;
  3 11428             zone                    zud;
  3 11429             integer                     omfang;
  3 11430             begin integer ii;
  4 11431               disable ii:=write(zud,"nl",1,<:+++ radio-ind ::>);
  4 11432               if omfang > 0 then
  4 11433               disable begin integer x; long array field tx;
  5 11434                 tx:= 0;
  5 11435                 trap(slut);
  5 11436                 write(zud,"nl",1,
  5 11437                   <:  op-ref:      :>,op_ref,"nl",1,
  5 11438                   <:  ref:         :>,ref,"nl",1,
  5 11439                   <:  io-opref:    :>,io_opref,"nl",1,
  5 11440                   <:  ac:          :>,ac,"nl",1,
  5 11441                   <:  lgd:         :>,lgd,"nl",1,
  5 11442                   <:  ttyp:        :>,ttyp,"nl",1,
  5 11443                   <:  ptyp:        :>,ptyp,"nl",1,
  5 11444                   <:  pnum:        :>,pnum,"nl",1,
  5 11445                   <:  pos:         :>,pos,"nl",1,
  5 11446                   <:  tegn:        :>,tegn,"nl",1,
  5 11447                   <:  bs:          :>,bs,"nl",1,
  5 11448                   <:  b-pt:        :>,b_pt,"nl",1,
  5 11449                   <:  b-pn:        :>,b_pn,"nl",1,
  5 11450                   <:  antal-sendt: :>,antal_sendt,"nl",1,
  5 11451                   <:  antal-spec:  :>,antal_spec,"nl",1,
  5 11452                   <:  sum:         :>,sum,"nl",1,
  5 11453                   <:  csum:        :>,csum,"nl",1,
  5 11454                   <:  i:           :>,i,"nl",1,
  5 11455                   <:  j:           :>,j,"nl",1,
  5 11456                   <:  k:           :>,k,"nl",1,
  5 11457                   <:  filref       :>,filref,"nl",1,
  5 11458                   <:  zno:         :>,zno,"nl",1,
  5 11459                   <:  answ:        :>,answ.tx,"nl",1,
  5 11460                   <:  tlgr:        :>,tlgr.tx,"nl",1,
  5 11461                   <:  spec:        :>,spec,"nl",1);
  5 11462                 trap(slut);
  5 11463     slut:
  5 11464               end; <*disable*>
  4 11465             end skriv_radio_ind;
  3 11466     \f

  3 11466     message procedure indsæt_opkald side 1 - 811105/hko;
  3 11467     
  3 11467       integer procedure indsæt_opkald(bus,type,omr,sig);
  3 11468         value                         bus,type,omr,sig;
  3 11469         integer                       bus,type,omr,sig;
  3 11470         begin
  4 11471           integer res,tilst,ll,operatør;
  4 11472           integer array field vt_op,ref,næste,forrige;
  4 11473           real r;
  4 11474     
  4 11474           res:= -1;
  4 11475           begin
  5 11476     <*V*>   waitch(cs_vt_adgang,vt_op,true,if type=2 then -1 else 10);
  5 11477             if vt_op <> 0 then
  5 11478             begin
  6 11479              wait(bs_opkaldskø_adgang);
  6 11480              if omr>2 then
  6 11481              begin
  7 11482               start_operation(vt_op,401,cs_radio_ind,14<*bus i kø*>);
  7 11483               d.vt_op.data(1):= bus;
  7 11484               d.vt_op.data(4):= omr;
  7 11485               tilst:= vt_op;
  7 11486               signal_ch(cs_vt,vt_op,gen_optype or vt_optype);
  7 11487     <*V*>     wait_ch(cs_radio_ind,vt_op,vt_optype,-1);
  7 11488     <*+4*>    if tilst <> vt_op then
  7 11489                 fejlreaktion(11<*fremmed post*>,vt_op,<:radio,indsæt opkald:>,0);
  7 11490     <*-4*>
  7 11491     <*+2*>    if testbit34 and overvåget then
  7 11492               disable begin
  8 11493                 write(out,"nl",1,<:radio_ind,indsæt.reservation retur:>);
  8 11494                 skriv_op(out,vt_op);
  8 11495                 ud;
  8 11496               end;
  7 11497              end
  6 11498              else
  6 11499              begin
  7 11500                d.vt_op.data(1):= bus;
  7 11501                d.vt_op.data(2):= 0;
  7 11502                d.vt_op.data(3):= bus;
  7 11503                d.vt_op.data(4):= omr;
  7 11504                d.vt_op.resultat:= 0;
  7 11505                ref:= første_nødopkald;
  7 11506                if ref<>0 then tilst:= 2
  7 11507                else
  7 11508                begin
  8 11509                  ref:= første_opkald;
  8 11510                  tilst:= if ref=0 then 0 else 1;
  8 11511                end;
  7 11512                if tilst=0 then
  7 11513                  d.vt_op.resultat:= 3
  7 11514                else
  7 11515                begin
  8 11516                  while ref<>0 and d.vt_op.resultat=0 do
  8 11517                  begin
  9 11518                    if opkaldskø.ref(2) extract 14 = bus and
  9 11519                       opkaldskø.ref(5) extract  8 = omr
  9 11520                    then
  9 11521                      d.vt_op.resultat:= 18
  9 11522                    else
  9 11523                    begin
 10 11524                      ref:= opkaldskø.ref(1) extract 12;
 10 11525                      if ref=0 and tilst=2 then
 10 11526                      begin
 11 11527                        ref:= første_opkald;
 11 11528                        tilst:= if ref=0 then 0 else 1;
 11 11529                      end
 10 11530                      else
 10 11531                      if ref=0 then tilst:= 0;
 10 11532                    end;
  9 11533                  end;
  8 11534                  if d.vt_op.resultat=0 then d.vt_op.resultat:= 3;
  8 11535                end;
  7 11536              end;
  6 11537     <*-2*>
  6 11538     \f

  6 11538     message procedure indsæt_opkald side 1a- 820301/hko;
  6 11539     
  6 11539               if d.vt_op.resultat=18<*bus i kø*> and type=2<*nød*> then
  6 11540               begin
  7 11541                 ref:=første_opkald;
  7 11542                 tilst:=-1;
  7 11543                 while ref<>0 and tilst=-1 do
  7 11544                 begin
  8 11545                   if opkaldskø.ref(2) extract 14 = bus extract 14 then
  8 11546                   begin <* udtag normalopkald *>
  9 11547                     næste:=opkaldskø.ref(1);
  9 11548                     forrige:=næste shift(-12);
  9 11549                     næste:=næste extract 12;
  9 11550                     if forrige<>0 then
  9 11551                       opkaldskø.forrige(1):=
  9 11552                         opkaldskø.forrige(1) shift(-12) shift 12 +næste
  9 11553                     else
  9 11554                       første_opkald:=næste;
  9 11555                     if næste<>0 then
  9 11556                       opkaldskø.næste(1):=
  9 11557                         opkaldskø.næste(1) extract 12 + forrige shift 12
  9 11558                     else
  9 11559                       sidste_opkald:=forrige;
  9 11560                     opkaldskø.ref(1):=første_frie_opkald;
  9 11561                     første_frie_opkald:=ref;
  9 11562                     opkaldskø_ledige:=opkaldskø_ledige +1;
  9 11563                     tilst:=0;
  9 11564                   end
  8 11565                   else
  8 11566                     ref:=opkaldskø.ref(1) extract 12;
  8 11567                 end; <*while*>
  7 11568                 if tilst=0 then
  7 11569                   d.vt_op.resultat:=3;
  7 11570               end; <*nødopkald bus i kø*>
  6 11571     \f

  6 11571     message procedure indsæt_opkald side 2 - 820304/hko;
  6 11572     
  6 11572               if d.vt_op.resultat = 3 then
  6 11573               begin
  7 11574                 ll:= d.vt_op.data(2);
  7 11575                 tilst:= d.vt_op.data(3);
  7 11576                 læstegn(radio_linietabel,(ll shift (-12) extract 10)+1,operatør);
  7 11577                 if operatør < 0 or max_antal_operatører < operatør then
  7 11578                   operatør:= 0;
  7 11579                 if operatør=0 then
  7 11580                   operatør:= (tilst shift (-14) extract 8);
  7 11581                 if operatør=0 then
  7 11582                   operatør:= radio_områdetabel(d.vt_op.data(4) extract 8);
  7 11583                 if operatør=0 or -,læsbit_ia(operatørmaske,operatør) then
  7 11584                   tofrom(opkaldsflag,alle_operatører,op_maske_lgd)
  7 11585                 else sæt_bit_ia(opkaldsflag,operatør,1);
  7 11586                 ref:= første_frie_opkald; <* forudsættes <> 0 *>
  7 11587                 første_frie_opkald:=opkaldskø.ref(1) extract 12; <*hægt ud*>
  7 11588                 forrige:= (if type = 1 then sidste_opkald
  7 11589                                        else sidste_nødopkald);
  7 11590                 opkaldskø.ref(1):= forrige shift 12;
  7 11591                 if type = 1 then
  7 11592                 begin
  8 11593                   if første_opkald = 0 then første_opkald:= ref;
  8 11594                   sidste_opkald:= ref;
  8 11595                 end
  7 11596                 else
  7 11597                 begin <*type = 2*>
  8 11598                   if første_nødopkald = 0 then første_nødopkald:= ref;
  8 11599                   sidste_nødopkald:= ref;
  8 11600                 end;
  7 11601                 if forrige <> 0 then
  7 11602                   opkaldskø.forrige(1):= opkaldskø.forrige(1) shift (-12)
  7 11603                                          shift 12 +ref;
  7 11604     
  7 11604                 opkaldskø.ref(2):= tilst extract 22 add
  7 11605                     (if type=2 then 1 shift 23 else 0);
  7 11606                 opkaldskø.ref(3):= ll;
  7 11607                 systime(5,0.0,r);
  7 11608                 ll:= round r//100;<*ttmm*>
  7 11609                 opkaldskø.ref(4):= ll shift 12 +type shift 8 +operatør extract 8;
  7 11610                 opkaldskø.ref(5):= sig shift 20 + omr;
  7 11611                 tofrom(opkaldskø.ref.opkald_meldt,ingen_operatører,op_maske_lgd);
  7 11612                 res:= 0;
  7 11613                 if type=2 then nød_opkald_brugt:=nødopkald_brugt + 1;
  7 11614                 opkaldskø_ledige:= opkaldskø_ledige -1;
  7 11615                 <*meddel opkald til berørte operatører *>
  7 11616                 signal_bin(bs_mobil_opkald);
  7 11617                 tæl_opkald(omr,type+1);
  7 11618               end <* resultat = 3 *>
  6 11619               else
  6 11620               begin
  7 11621     \f

  7 11621     message procedure indsæt_opkald side 3 - 810601/hko;
  7 11622     
  7 11622                 <* d.vt_op.resultat <> 3 *>
  7 11623     
  7 11623                 res:= d.vt_op.resultat;
  7 11624                 if res = 10 then
  7 11625                   fejlreaktion(20<*mobilopkald, bus *>,bus,
  7 11626                     <:er ikke i bustabel:>,1)
  7 11627                 else
  7 11628     <*+4*>      if res <> 14 and res <> 18 then
  7 11629                   fejlreaktion(19<*radio*>,res,<:busreservationsresultat:>,1);
  7 11630     <*-4*>
  7 11631                 ;
  7 11632               end;
  6 11633               signalbin(bs_opkaldskø_adgang);
  6 11634               signal_ch(cs_vt_adgang,vt_op,gen_optype or vt_optype);
  6 11635             end
  5 11636             else
  5 11637               res:= -2; <*timeout for cs_vt_adgang*>
  5 11638           end;
  4 11639           indsæt_opkald:= res;
  4 11640         end indsæt_opkald;
  3 11641     \f

  3 11641     message procedure afvent_telegram side 1 - 880901/cl;
  3 11642     
  3 11642     integer procedure afvent_telegram(tlgr,lgd,ttyp,ptyp,pnum);
  3 11643       integer array                   tlgr;
  3 11644       integer                              lgd,ttyp,ptyp,pnum;
  3 11645     begin
  4 11646       integer i, pos, tegn, ac, sum, csum;
  4 11647     
  4 11647       pos:= 1;
  4 11648       lgd:= 0;
  4 11649       ttyp:= 'Z';
  4 11650     <*V*> ac:= afvent_radioinput(z_fr_in,tlgr,false);
  4 11651       if ac >= 0 then
  4 11652       begin
  5 11653         lgd:= 1;
  5 11654         while læstegn(tlgr,lgd,tegn)<>0 do ;
  5 11655         lgd:= lgd-2;
  5 11656         if lgd >= 3 then
  5 11657         begin
  6 11658           i:= 1;
  6 11659           ttyp:= læstegn(tlgr,i,tegn);
  6 11660           ptyp:= læstegn(tlgr,i,tegn) - '@';
  6 11661           pnum:= læstegn(tlgr,i,tegn) - '@';
  6 11662         end
  5 11663         else ac:= 6; <* for kort telegram - retransmitter *>
  5 11664       end;
  4 11665     
  4 11665       afvent_telegram:= ac;
  4 11666     end;
  3 11667     \f

  3 11667     message procedure b_answ side 1 - 880901/cl;
  3 11668     
  3 11668     procedure b_answ(answ,ht,spec,more,ac);
  3 11669       value               ht,     more,ac;
  3 11670       integer array  answ,   spec;
  3 11671       boolean                     more;
  3 11672       integer             ht,          ac;
  3 11673     begin
  4 11674       integer pos, i, sum, tegn;
  4 11675     
  4 11675       pos:= 1;
  4 11676       skrivtegn(answ,pos,'B');
  4 11677       skrivtegn(answ,pos,if more then 'B' else ' ');
  4 11678       skrivtegn(answ,pos,ac+'@');
  4 11679       skrivtegn(answ,pos,spec(1) shift (-18) extract 6+'@');
  4 11680       skrivtegn(answ,pos,spec(1) shift (-12) extract 6+'@');
  4 11681       skrivtegn(answ,pos,'@');
  4 11682       skrivtegn(answ,pos,spec(1) shift (-8) extract 4+'@');
  4 11683       skrivtegn(answ,pos,spec(1) extract 8+'@');
  4 11684       for i:= 1 step 1 until spec(1) extract 8 do
  4 11685         if spec(1+i)=0 then skrivtegn(answ,pos,'@')
  4 11686         else
  4 11687         begin
  5 11688           skrivtegn(answ,pos,'D');
  5 11689           anbringtal(answ,pos,spec(1+i),-4);
  5 11690         end;
  4 11691       for i:= 1 step 1 until 4 do
  4 11692         skrivtegn(answ,pos,'@');
  4 11693       skrivtegn(answ,pos,ht+'@');
  4 11694       skrivtegn(answ,pos,'@');
  4 11695     
  4 11695       i:= 1; sum:= 0;
  4 11696       while i < pos do
  4 11697         sum:= (sum + læstegn(answ,i,tegn)) mod 256;
  4 11698       skrivtegn(answ,pos,(sum shift (-4)) extract 4 + '@');
  4 11699       skrivtegn(answ,pos,sum extract 4 + '@');
  4 11700       repeat skrivtegn(answ,pos,0) until (pos mod 6)=1;
  4 11701     end;
  3 11702     \f

  3 11702     message procedure ann_opkald side 1 - 881108/cl;
  3 11703     
  3 11703     integer procedure ann_opkald(vogn,omr);
  3 11704       value                      vogn,omr;
  3 11705       integer                    vogn,omr;
  3 11706     begin
  4 11707       integer array field vt_op,ref,næste,forrige;
  4 11708       integer res, t, i, o;
  4 11709     
  4 11709       waitch(cs_vt_adgang,vt_op,true,-1);
  4 11710       res:= -1;
  4 11711       wait(bs_opkaldskø_adgang);
  4 11712       ref:= første_nødopkald;
  4 11713       if ref <> 0 then
  4 11714         t:= 2
  4 11715       else
  4 11716       begin
  5 11717         ref:= første_opkald;
  5 11718         t:= if ref<>0 then 1 else 0;
  5 11719       end;
  4 11720     
  4 11720       if t=0 then
  4 11721         res:= 19 <* kø tom *>
  4 11722       else
  4 11723       begin
  5 11724         while ref<>0 and res=(-1) do
  5 11725         begin
  6 11726           if vogn=opkaldskø.ref(2) extract 14 and
  6 11727               omr=opkaldskø.ref(5) extract 8
  6 11728           then
  6 11729             res:= 0
  6 11730           else
  6 11731           begin
  7 11732             ref:= opkaldskø.ref(1) extract 12;
  7 11733             if ref=0 and t=2 then
  7 11734             begin
  8 11735               ref:= første_opkald;
  8 11736               t:= if ref=0 then 0 else 1;
  8 11737             end;
  7 11738           end;
  6 11739         end; <*while*>
  5 11740     \f

  5 11740     message procedure ann_opkald side 2 - 881108/cl;
  5 11741     
  5 11741         if ref<>0 then
  5 11742         begin
  6 11743           start_operation(vt_op,401,cs_radio_ind,17);
  6 11744           d.vt_op.data(1):= vogn;
  6 11745           d.vt_op.data(4):= omr;
  6 11746           signalch(cs_vt,vt_op,gen_optype or vt_optype);
  6 11747           waitch(cs_radio_ind,vt_op,vt_optype,-1);
  6 11748     
  6 11748           o:= opkaldskø.ref(4) extract 8;
  6 11749           næste:= opkaldskø.ref(1);
  6 11750           forrige:= næste shift (-12);
  6 11751           næste:= næste extract 12;
  6 11752           if forrige<>0 then
  6 11753             opkaldskø.forrige(1):= opkaldskø.forrige(1) shift (-12) shift 12
  6 11754                                    + næste
  6 11755           else
  6 11756           if t=2 then første_nødopkald:= næste
  6 11757           else første_opkald:= næste;
  6 11758     
  6 11758           if næste<>0 then
  6 11759             opkaldskø.næste(1):= opkaldskø.næste(1) extract 12
  6 11760                                  + forrige shift 12
  6 11761           else
  6 11762           if t=2 then sidste_nødopkald:= forrige
  6 11763           else sidste_opkald:= forrige;
  6 11764     
  6 11764           opkaldskø.ref(1):= første_frie_opkald;
  6 11765           første_frie_opkald:= ref;
  6 11766           opkaldskø_ledige:= opkaldskø_ledige + 1;
  6 11767           if t=2 then nødopkald_brugt:= nødopkald_brugt - 1;
  6 11768     
  6 11768           if -, læsbit_ia(operatør_maske,o) or o=0 then
  6 11769             tofrom(opkaldsflag,alle_operatører,op_maske_lgd)
  6 11770           else
  6 11771           begin
  7 11772             sætbit_ia(opkaldsflag,o,1);
  7 11773           end;
  6 11774           signalbin(bs_mobilopkald);
  6 11775         end;
  5 11776       end;
  4 11777     
  4 11777       signalbin(bs_opkaldskø_adgang);
  4 11778       signalch(cs_vt_adgang, vt_op, true);
  4 11779       ann_opkald:= res;
  4 11780     end;
  3 11781     \f

  3 11781     message procedure frigiv_id side 1 - 881114/cl;
  3 11782     
  3 11782     integer procedure frigiv_id(id,omr);
  3 11783       value                     id,omr;
  3 11784       integer                   id,omr;
  3 11785     begin
  4 11786       integer array field vt_op;
  4 11787     
  4 11787       if id shift (-22) < 3 and omr > 2 then
  4 11788       begin
  5 11789         waitch(cs_vt_adgang,vt_op,true,-1);
  5 11790         start_operation(vt_op,401,cs_radio_ind,
  5 11791           if id shift (-22) = 2 then 18 else 17);
  5 11792         d.vt_op.data(1):= id;
  5 11793         d.vt_op.data(4):= omr;
  5 11794         signalch(cs_vt,vt_op,vt_optype or gen_optype);
  5 11795         waitch(cs_radio_ind,vt_op,vt_optype,-1);
  5 11796         frigiv_id:= d.vt_op.resultat;
  5 11797         signalch(cs_vt_adgang,vt_op,true);
  5 11798       end;
  4 11799     end;
  3 11800     \f

  3 11800     message procedure radio_ind side 2 - 810524/hko;
  3 11801         trap(radio_ind_trap);
  3 11802         laf:= 0;
  3 11803         stack_claim((if cm_test then 200 else 150) +135+75);
  3 11804     
  3 11804     <*+2*>if testbit32 and overvåget or testbit28 then
  3 11805             skriv_radio_ind(out,0);
  3 11806     <*-2*>
  3 11807           answ.laf(1):= long<:<'nl'>:>;
  3 11808           io_opref:= op;
  3 11809     
  3 11809           repeat
  3 11810             ac:= afvent_telegram(tlgr,lgd,ttyp,ptyp,pnum);
  3 11811             pos:= 4;
  3 11812             if ac = 0 then
  3 11813             begin
  4 11814     \f

  4 11814     message procedure radio_ind side 3 - 881107/cl;
  4 11815               if ttyp = 'A' then
  4 11816               begin
  5 11817                 if ptyp<>4 or pnum<1 or pnum>max_antal_taleveje then
  5 11818                   ac:= 1
  5 11819                 else
  5 11820                 begin
  6 11821                   typ(1):= 1 shift 12 + (opkode - 1); <* eq shortint opgave *>
  6 11822                   val(1):= ttyp;
  6 11823                   typ(2):= 2 shift 12 + (data + 2);   <* eq integer  data(1) *>
  6 11824                   val(2):= pnum;
  6 11825                   typ(3):= -1;
  6 11826                   getch(cs_radio_ind,opref,rad_optype,typ,val);
  6 11827                   if opref>0 then
  6 11828                   begin
  7 11829                     if læstegn(tlgr,pos,tegn)<>'@' <*BST*> or
  7 11830                        læstegn(tlgr,pos,tegn)<>'A' <*PET*> or
  7 11831                        læstegn(tlgr,pos,tegn)<>d.opref.data(2)+'@' <*CTYP*> or
  7 11832                        læstegn(tlgr,pos,tegn)<>'@' <*TNO*>
  7 11833                     then
  7 11834                     begin
  8 11835                       ac:= 1; d.opref.resultat:= 31; <* systemfejl *>
  8 11836                     end
  7 11837                     else
  7 11838                     begin
  8 11839                       ac:= 0;
  8 11840                       d.opref.resultat:= 0;
  8 11841                       sætbit_ia(hookoff_maske,pnum,1);
  8 11842                     end;
  7 11843                     signalch(d.opref.retur,opref,d.opref.optype);
  7 11844                   end
  6 11845                   else
  6 11846                     ac:= 2;
  6 11847                 end;
  5 11848                 pos:= 1;
  5 11849                 skrivtegn(answ,pos,'A');
  5 11850                 skrivtegn(answ,pos,' ');
  5 11851                 skrivtegn(answ,pos,ac+'@');
  5 11852                 for i:= 1 step 1 until 5 do
  5 11853                   skrivtegn(answ,pos,'@');
  5 11854                 skrivtegn(answ,pos,'0');
  5 11855                 i:= 1; sum:= 0;
  5 11856                 while i < pos do
  5 11857                   sum:= (sum + læstegn(answ,i,tegn)) mod 256;
  5 11858                 skrivtegn(answ,pos,sum shift (-4) extract 4 + '@');
  5 11859                 skrivtegn(answ,pos,sum extract 4 + '@');
  5 11860                 repeat afsluttext(answ,pos) until pos mod 6 = 1;
  5 11861                 write(z_fr_out,"nl",1,answ.laf,"cr",1);
  5 11862     <*+2*>      if (testbit36 or testbit38) and overvåget then
  5 11863                 disable begin
  6 11864                   write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf);
  6 11865                   outchar(zrl,'nl');
  6 11866                 end;
  5 11867     <*-2*>
  5 11868                 disable setposition(z_fr_out,0,0);
  5 11869                 ac:= -1;
  5 11870     \f

  5 11870     message procedure radio_ind side 4 - 881107/cl;
  5 11871               end <* ttyp=A *>
  4 11872               else
  4 11873               if ttyp = 'B' then
  4 11874               begin
  5 11875                 if ptyp<>4 or pnum<1 or pnum>max_antal_taleveje then
  5 11876                   ac:= 1
  5 11877                 else
  5 11878                 begin
  6 11879                   typ(1):= 1 shift 12 + (opkode-1); val(1):= 'B';
  6 11880                   typ(2):= 2 shift 12 + (data+2); val(2):= pnum;
  6 11881                   typ(3):= -1;
  6 11882                   getch(cs_radio_ind,opref,rad_optype,typ,val);
  6 11883                   if opref > 0 then
  6 11884                   begin
  7 11885     <*+2*> if testbit37 and overvåget then
  7 11886            disable begin
  8 11887              skriv_radio_ind(out,0);
  8 11888              write(out,<:radio-ind B-op udtaget fra cs:>,<<d>,cs_radio_ind);
  8 11889              skriv_op(out,opref);
  8 11890            end;
  7 11891     <*-2*>
  7 11892                     læstegn(tlgr,pos,bs);
  7 11893                     if bs = 'V' then
  7 11894                     begin
  8 11895                       b_pt:= læstegn(tlgr,pos,tegn) - '@';
  8 11896                       b_pn:= læstegn(tlgr,pos,tegn) - '@';
  8 11897                     end;
  7 11898                     if bs<>'Z' and bs<>d.opref.data(2) or bs='V' and
  7 11899                        (b_pt<>d.opref.data(10) shift (-18) extract 6 or
  7 11900                        b_pn<>d.opref.data(10) shift (-12) extract 6)
  7 11901                     then
  7 11902                     begin
  8 11903                       ac:= 1;
  8 11904                       d.opref.resultat:= 31; <* systemfejl *>
  8 11905                       signalch(d.opref.retur,opref,d.opref.optype);
  8 11906                     end
  7 11907                     else
  7 11908                     if bs='V' then
  7 11909                     begin
  8 11910                       ac:= 0;
  8 11911                       d.opref.resultat:= 1;
  8 11912                       d.opref.data(4):= 0;
  8 11913                       d.opref.data(7):=
  8 11914                          1 shift (if b_pt=2 then pabx_id(b_pn) else
  8 11915                                         radio_id(b_pn));
  8 11916                       systime(1,0.0,d.opref.tid);
  8 11917                       signalch(cs_radio_ind,opref,d.opref.optype);
  8 11918                       spec:= data+18;
  8 11919                       b_answ(answ,0,d.opref.spec,false,ac);
  8 11920     <*+2*>            if (testbit36 or testbit38) and overvåget then
  8 11921                       disable begin
  9 11922                         write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf);
  9 11923                         outchar(zrl,'nl');
  9 11924                       end;
  8 11925     <*-2*>
  8 11926                       write(z_fr_out,"nl",1,answ.laf,"cr",1);
  8 11927                       disable setposition(z_fr_out,0,0);
  8 11928                       ac:= -1;
  8 11929     \f

  8 11929     message procedure radio_ind side 5 - 881107/cl;
  8 11930                     end
  7 11931                     else
  7 11932                     begin
  8 11933                       integer sig_type;
  8 11934     
  8 11934                       ac:= 0;
  8 11935                       antal_spec:= d.opref.data(4);
  8 11936                       filref:= d.opref.data(5);
  8 11937                       spec:= d.opref.data(6);
  8 11938                       if antal_spec>0 then
  8 11939                       begin
  9 11940                         antal_spec:= antal_spec-1;
  9 11941                         if filref<>0 then
  9 11942                         begin
 10 11943                           læsfil(filref,1,zno);
 10 11944                           b_pt:= fil(zno).spec(1) shift (-12);
 10 11945                           sig_type:= fil(zno).spec(1) shift (-8) extract 4;
 10 11946                           b_answ(answ,d.opref.data(3),fil(zno).spec,
 10 11947                             antal_spec>0,ac);
 10 11948                           spec:= spec + (fil(zno).spec(1) extract 8 + 1)*2;
 10 11949                         end
  9 11950                         else
  9 11951                         begin
 10 11952                           b_pt:= d.opref.spec(1) shift (-12);
 10 11953                           sig_type:= d.opref.spec(1) shift (-8) extract 4;
 10 11954                           b_answ(answ,d.opref.data(3),d.opref.spec,
 10 11955                             antal_spec>0,ac);
 10 11956                           spec:= spec + d.opref.spec(1) extract 8*2 + 2;
 10 11957                         end;
  9 11958      
  9 11958                         <* send answer *>
  9 11959     <*+2*>              if (testbit36 or testbit38) and overvåget then
  9 11960                         disable begin
 10 11961                           write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf);
 10 11962                           outchar(zrl,'nl');
 10 11963                         end;
  9 11964     <*-2*>
  9 11965                         write(z_fr_out,"nl",1,answ.laf,"cr",1);
  9 11966                         disable setposition(z_fr_out,0,0);
  9 11967                         if ac<>0 then
  9 11968                         begin
 10 11969                           antal_spec:= 0;
 10 11970                           ac:= -1;
 10 11971                         end
  9 11972                         else
  9 11973                         begin
 10 11974                           for i:= 1 step 1 until max_antal_områder do
 10 11975                           if område_id(i,2)=b_pt then
 10 11976                           begin
 11 11977                             j:= (if b_pt=3 and sig_type=2 then 0 else i);
 11 11978                             if sætbiti(d.opref.data(7),j,1)=0 then 
 11 11979                               d.opref.resultat:= d.opref.resultat + 1;
 11 11980                           end;
 10 11981                         end;
  9 11982                       end;
  8 11983     \f

  8 11983     message procedure radio_ind side 6 - 881107/cl;
  8 11984     
  8 11984                       <* afvent nyt telegram *>
  8 11985                       d.opref.data(4):= antal_spec;
  8 11986                       d.opref.data(6):= spec;
  8 11987                       ac:= -1;
  8 11988                       systime(1,0.0,d.opref.tid);
  8 11989     <*+2*>            if testbit37 and overvåget then
  8 11990                       disable begin
  9 11991                         skriv_radio_ind(out,0);
  9 11992                         write(out,<:radio-ind B-op retur på cs:>,<<d>,cs_radio_ind);                    skriv_op(out,opref);
  9 11993                         ud;
  9 11994                       end;
  8 11995     <*-2*>
  8 11996                       signalch(cs_radio_ind,opref,d.opref.optype);
  8 11997                     end;
  7 11998                   end
  6 11999                   else ac:= 2;
  6 12000                 end;
  5 12001                 if ac > 0 then
  5 12002                 begin
  6 12003                   for i:= 1 step 1 until 6 do val(i):= 0;
  6 12004                   b_answ(answ,0,val,false,ac);
  6 12005     <*+2*>
  6 12006                   if (testbit36 or testbit38) and overvåget then
  6 12007                   disable begin
  7 12008                     write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf);
  7 12009                     outchar(zrl,'nl');
  7 12010                   end;
  6 12011     <*-2*>
  6 12012                   write(z_fr_out,"nl",1,answ.laf,"cr",1);
  6 12013                   disable setposition(z_fr_out,0,0);
  6 12014                   ac:= -1;
  6 12015                 end;
  5 12016     \f

  5 12016     message procedure radio_ind side 7 - 881107/cl;
  5 12017               end <* ttyp = 'B' *>
  4 12018               else
  4 12019               if ttyp='C' or ttyp='J' then
  4 12020               begin
  5 12021                 if ptyp<>4 or pnum<1 or pnum>max_antal_taleveje then
  5 12022                   ac:= 1
  5 12023                 else
  5 12024                 begin
  6 12025                   typ(1):= 1 shift 12 + (opkode - 1); val(1):= 'B';
  6 12026                   typ(2):= 2 shift 12 + (data + 2); val(2):= pnum;
  6 12027                   typ(3):= -1;
  6 12028                   getch(cs_radio_ind,opref,rad_optype,typ,val);
  6 12029                   if opref > 0 then
  6 12030                   begin
  7 12031                     d.opref.resultat:= d.opref.resultat - 1;
  7 12032                     if ttyp  = 'C' then
  7 12033                     begin
  8 12034                       b_pt:= læstegn(tlgr,4,tegn)-'@'; <* ????? *>
  8 12035                       b_pn:= læstegn(tlgr,5,tegn)-'@'; <* ????? *>
  8 12036                       j:= 0;
  8 12037                       for i:= 1 step 1 until max_antal_kanaler do
  8 12038                         if kanal_id(i)=b_pt shift 5 + b_pn then j:= i;
  8 12039                       if kanal_til_omr(j)=3 and d.opref.resultat>0 then
  8 12040                         d.opref.resultat:= d.opref.resultat-1;
  8 12041                       sætbiti(optaget_flag,j,1);
  8 12042                       sætbiti(d.opref.data(9),j,1);
  8 12043                     end
  7 12044                     else
  7 12045                     begin <* INGEN FORBINDELSE *>
  8 12046                       sætbiti(d.opref.data(8),læstegn(tlgr,4,tegn)-'@',1);
  8 12047                     end;
  7 12048                     ac:= 0;
  7 12049                     if d.opref.resultat<>0 or d.opref.data(4)<>0 then
  7 12050                     begin
  8 12051                       systime(1,0,d.opref.tid);
  8 12052                       signal_ch(cs_radio_ind,opref,d.opref.op_type);
  8 12053                     end
  7 12054                     else
  7 12055                     begin
  8 12056                       d.opref.resultat:= if d.opref.data(9)<>0 then 0 else 
  8 12057                          if læsbiti(d.opref.data(8),9) then 52 else
  8 12058                          if læsbiti(d.opref.data(8),10) then 20 else
  8 12059                          if læsbiti(d.opref.data(8),2) then 52 else 59;
  8 12060                       signalch(d.opref.retur, opref, d.opref.optype);
  8 12061                     end;
  7 12062                   end
  6 12063                   else
  6 12064                     ac:= 2;
  6 12065                 end;
  5 12066                 pos:= 1;
  5 12067                 skrivtegn(answ,pos,ttyp);
  5 12068                 skrivtegn(answ,pos,' ');
  5 12069                 skrivtegn(answ,pos,ac+'@');
  5 12070                 i:= 1; sum:= 0;
  5 12071                 while i < pos do
  5 12072                   sum:= (sum + læstegn(answ,i,tegn)) mod 256;
  5 12073                 skrivtegn(answ,pos,sum shift (-4) + '@');
  5 12074                 skrivtegn(answ,pos,sum extract 4 + '@');
  5 12075                 repeat afsluttext(answ,pos) until pos mod 6 = 1;
  5 12076     <*+2*>      if (testbit36 or testbit38) and overvåget then
  5 12077                 disable begin
  6 12078                   write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf);
  6 12079                   outchar(zrl,'nl');
  6 12080                 end;
  5 12081     <*-2*>
  5 12082                 write(z_fr_out,"nl",1,answ.laf,"cr",1);
  5 12083                 disable setposition(z_fr_out,0,0);
  5 12084                 ac:= -1;
  5 12085     \f

  5 12085     message procedure radio_ind side 8 - 881107/cl;
  5 12086               end <* ttyp = 'C' or 'J' *>
  4 12087               else
  4 12088               if ttyp = 'D' then
  4 12089               begin
  5 12090                 if ptyp = 4 <* VDU *> then
  5 12091                 begin
  6 12092                   if pnum<1 or pnum>max_antal_taleveje then
  6 12093                     ac:= 1
  6 12094                   else
  6 12095                   begin
  7 12096                     inspect(bs_talevej_udkoblet(pnum),j);
  7 12097                     if j>=0 then
  7 12098                     begin
  8 12099                       sætbit_ia(samtaleflag,pnum,1);
  8 12100                       signal_bin(bs_mobil_opkald);
  8 12101                     end;
  7 12102                     if læsbit_ia(hookoff_maske,pnum) then
  7 12103                       signalbin(bs_talevej_udkoblet(pnum));
  7 12104                     ac:= 0;
  7 12105                   end
  6 12106                 end
  5 12107                 else
  5 12108                 if ptyp=3 or ptyp=2 then
  5 12109                 begin
  6 12110                   if ptyp=3 and (pnum<1 or max_antal_radiokanaler<pnum) or
  6 12111                      ptyp=2 and pnum<>2
  6 12112                   then
  6 12113                     ac:= 1
  6 12114                   else
  6 12115                   begin
  7 12116                     if læstegn(tlgr,5,tegn)='D' then
  7 12117                     begin <* teknisk nr i telegram *>
  8 12118                       b_pn:= 0;
  8 12119                       for i:= 1 step 1 until 4 do
  8 12120                         b_pn:= b_pn*10 + læstegn(tlgr,5+i,tegn)-'0';
  8 12121                     end
  7 12122                     else
  7 12123                       b_pn:= 0;
  7 12124                     b_pt:= port_til_omr(ptyp shift 6 + pnum);
  7 12125                     i:= 0;
  7 12126                     for j:= 1 step 1 until max_antal_kanaler do
  7 12127                     if kanal_id(j) = ptyp shift 5 + pnum then i:= j;
  7 12128                     if i<>0 then
  7 12129                     begin
  8 12130                       ref:= (i-1)*kanalbeskrlængde;
  8 12131                       inspect(ss_samtale_nedlagt(i),j);
  8 12132                       if j>=0 then
  8 12133                       begin
  9 12134                         sætbit_ia(samtaleflag,
  9 12135                           tv_operatør(kanal_tab.ref.kanal_tilstand shift (-16)),1);
  9 12136                         signalbin(bs_mobil_opkald);
  9 12137                       end;
  8 12138                       signal(ss_samtale_nedlagt(i));
  8 12139                       if b_pn<>0 then frigiv_id(b_pn,b_pt);
  8 12140                       begin
  9 12141                         if kanal_tab.ref.kanal_id1<>0 and
  9 12142                           (kanal_tab.ref.kanal_id1 shift (-22)<>0 or
  9 12143                            kanal_tab.ref.kanal_id1 extract 14<>b_pn) then
  9 12144                           frigiv_id(kanal_tab.ref.kanal_id1,b_pt);
  9 12145                         if kanal_tab.ref.kanal_id2<>0 and
  9 12146                           (kanal_tab.ref.kanal_id2 shift (-22)<>0 or
  9 12147                            kanal_tab.ref.kanal_id2 extract 14<>b_pn) then
  9 12148                           frigiv_id(kanal_tab.ref.kanal_id2,b_pt);
  9 12149                       end;
  8 12150                       sætbiti(optaget_flag,i,0);
  8 12151                     end;
  7 12152                     ac:= 0;
  7 12153                   end;
  6 12154                 end
  5 12155                 else ac:= 1;
  5 12156                 if ac>=0 then
  5 12157                 begin
  6 12158                   pos:= i:= 1; sum:= 0;
  6 12159                   skrivtegn(answ,pos,'D');
  6 12160                   skrivtegn(answ,pos,' ');
  6 12161                   skrivtegn(answ,pos,ac+'@');
  6 12162                   skrivtegn(answ,pos,'@');
  6 12163                   while i<pos do
  6 12164                     sum:= (sum + læstegn(answ,i,tegn)) mod 256;
  6 12165                   skrivtegn(answ,pos, sum shift (-4) extract 4 + '@');
  6 12166                   skrivtegn(answ,pos, sum extract 4 + '@');
  6 12167                   repeat afsluttext(answ,pos) until pos mod 6 = 1;
  6 12168     <*+2*>
  6 12169                   if (testbit36 or testbit38) and overvåget then
  6 12170                   disable begin
  7 12171                     write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf);
  7 12172                     outchar(zrl,'nl');
  7 12173                   end;
  6 12174     <*-2*>
  6 12175                   write(z_fr_out,"nl",1,answ.laf,"cr",1);
  6 12176                   disable setposition(z_fr_out,0,0);
  6 12177                   ac:= -1;
  6 12178                 end;
  5 12179     \f

  5 12179     message procedure radio_ind side 9 - 881107/cl;
  5 12180               end <* ttyp = D *>
  4 12181               else
  4 12182               if ttyp='H' then
  4 12183               begin
  5 12184                 integer htyp;
  5 12185     
  5 12185                 htyp:= læstegn(tlgr,7+læstegn(tlgr,6,tegn)-'@',tegn);
  5 12186     
  5 12186                 if htyp='A' then
  5 12187                 begin <*mobilopkald*>
  6 12188                  if (ptyp=2 and pnum<>2) or (ptyp=3 and
  6 12189                    (pnum<1 or pnum>max_antal_radiokanaler)) then
  6 12190                      ac:= 1
  6 12191                  else
  6 12192                  begin
  7 12193                   b_pt:= læstegn(tlgr,5,tegn)-'@';
  7 12194                   if læstegn(tlgr,6,tegn)='D' then
  7 12195                   begin <*teknisk nr. i telegram*>
  8 12196                     b_pn:= 0;
  8 12197                     for i:= 1 step 1 until 4 do
  8 12198                       b_pn:= b_pn*10 + læstegn(tlgr,6+i,tegn)-'0';
  8 12199                   end
  7 12200                   else b_pn:= 0;
  7 12201                   bs:= læstegn(tlgr,9+læstegn(tlgr,6,tegn)-'@',tegn)-'@'+1;
  7 12202                                           <* opkaldstype *>
  7 12203                   j:= (if ptyp=2 then pabx_id(pnum) else radio_id(pnum));
  7 12204                   if j>0 then
  7 12205                   begin
  8 12206                     if bs=10 then
  8 12207                       ann_opkald(b_pn,j)
  8 12208                     else
  8 12209                       indsæt_opkald(b_pn,bs,j,if b_pt>1 then 1 else 0);
  8 12210                     ac:= 0;
  8 12211                   end else ac:= 1;
  7 12212                  end;
  6 12213     \f

  6 12213     message procedure radio_ind side 10 - 881107/cl;
  6 12214                 end
  5 12215                 else
  5 12216                 if htyp='E' then
  5 12217                 begin <* radiokanal status *>
  6 12218                   long onavn;
  6 12219     
  6 12219                   ac:= 0;
  6 12220                   j:= 0;
  6 12221                   for i:= 1 step 1 until max_antal_kanaler do
  6 12222                   if kanal_id(i) = ptyp shift 5 + pnum then j:= i;
  6 12223     
  6 12223                   <* Alarmer for K12 = GLX ignoreres *>
  6 12224                   <* 94.06.14/CL                     *>
  6 12225                   <* Alarmer for K15 = HG  ignoreres *>
  6 12226                   <* 95.07.31/CL                     *>
  6 12227                   if j>0 then
  6 12228                   begin
  7 12229                     onavn:= områdenavn(port_til_omr(ptyp shift 6 + pnum));
  7 12230                     j:= (if (onavn = long<:GLX:>) or (onavn = long<:HG:>)
  7 12231                          then 0 else j);
  7 12232                   end;
  6 12233     
  6 12233                   læstegn(tlgr,9,tegn);
  6 12234                   if j<>0 and (tegn='A' or tegn='E') then
  6 12235                   begin
  7 12236                     ref:= (j-1)*kanalbeskrlængde;
  7 12237                     bs:= if tegn='E' then 0 else 15;
  7 12238                     if bs<>sæt_hex_ciffer(kanal_tab.ref,3,bs) then
  7 12239                     begin
  8 12240                       tofrom(kanalflag,alle_operatører,op_maske_lgd);
  8 12241                       signalbin(bs_mobil_opkald);
  8 12242                     end;
  7 12243                   end;
  6 12244                   if tegn<>'A' and tegn<>'E' and j<>0 then
  6 12245                   begin
  7 12246                     waitch(cs_radio_pulje,opref,true,-1);
  7 12247                     startoperation(opref,401,cs_radio_pulje,23);
  7 12248                     i:= 1;
  7 12249                     hægtstring(d.opref.data,i,<:radiofejl :>);
  7 12250                     if læstegn(tlgr,4,k)<>'@' then
  7 12251                     begin
  8 12252                       if k-'@' = 17 then
  8 12253                         hægtstring(d.opref.data,i,<: AMV:>)
  8 12254                       else
  8 12255                       if k-'@' = 18 then
  8 12256                         hægtstring(d.opref.data,i,<: BHV:>)
  8 12257                       else
  8 12258                       begin
  9 12259                         hægtstring(d.opref.data,i,<: BST:>);
  9 12260                         anbringtal(d.opref.data,i,k-'@',1);
  9 12261                       end;
  8 12262                     end;
  7 12263                     skrivtegn(d.opref.data,i,' ');
  7 12264                     hægtstring(d.opref.data,i,string kanal_navn(j));
  7 12265                     skrivtegn(d.opref.data,i,' ');
  7 12266                     hægtstring(d.opref.data,i,
  7 12267                       string område_navn(kanal_til_omr(j)));
  7 12268                     if '@'<=tegn and tegn<='F' then
  7 12269                       hægtstring(d.opref.data,i,case (tegn-'@'+1) of (
  7 12270                         <*@*> <:: ukendt fejl:>,
  7 12271                         <*A*> <:: compad-fejl:>,
  7 12272                         <*B*> <:: ladefejl:>,
  7 12273                         <*C*> <:: dør åben:>,
  7 12274                         <*D*> <:: senderfejl:>,
  7 12275                         <*E*> <:: compad ok:>,
  7 12276                         <*F*> <:: liniefejl:>,
  7 12277                         <::>))
  7 12278                     else
  7 12279                     begin
  8 12280                       hægtstring(d.opref.data,i,<:: fejlkode :>);
  8 12281                       skrivtegn(d.opref.data,i,tegn);
  8 12282                     end;
  7 12283                     repeat afsluttext(d.opref.data,i) until i mod 6 = 1;
  7 12284                     signalch(cs_io,opref,gen_optype or rad_optype);
  7 12285                     ref:= (j-1)*kanalbeskrlængde;
  7 12286                     tofrom(kanal_tab.ref.kanal_alarm,alle_operatører,op_maske_lgd);
  7 12287                     tofrom(kanalflag,alle_operatører,op_maske_lgd);
  7 12288                     signalbin(bs_mobilopkald);
  7 12289                   end;
  6 12290     \f

  6 12290     message procedure radio_ind side 11 - 881107/cl;
  6 12291                 end
  5 12292                 else
  5 12293                 if htyp='G' then
  5 12294                 begin <* fjerninkludering/-ekskludering af område *>
  6 12295                   bs:= læstegn(tlgr,9,tegn)-'@';
  6 12296                   j:= 0;
  6 12297                   for i:= 1 step 1 until max_antal_kanaler do
  6 12298                   if kanal_id(i) = ptyp shift 5 + pnum then j:= i;
  6 12299                   if j<>0 then
  6 12300                   begin
  7 12301                     ref:= (j-1)*kanalbeskrlængde;
  7 12302                     sætbiti(kanal_tab.ref.kanal_tilstand,11,bs extract 1);
  7 12303                   end;
  6 12304                   tofrom(kanalflag,alle_operatører,op_maske_lgd);
  6 12305                   signalbin(bs_mobilopkald);
  6 12306                   ac:= 0;
  6 12307                 end
  5 12308                 else
  5 12309                 if htyp='L' then
  5 12310                 begin <* vogntabelændringer *>
  6 12311                   long field ll;
  6 12312     
  6 12312                   ll:= 10;
  6 12313                   ac:= 0;
  6 12314                   zno:= port_til_omr(ptyp shift 6 + pnum);
  6 12315                   læstegn(tlgr,9,tegn);
  6 12316                   if (tegn='N') or (tegn='O') then
  6 12317                   begin
  7 12318                     typ(1):= 1 shift 12 + (opkode-1); val(1):= 'H';
  7 12319                     typ(2):= -1;
  7 12320                     getch(cs_radio_ind,opref,rad_optype,typ,val);
  7 12321                     if opref>0 then
  7 12322                     begin
  8 12323                       d.opref.resultat:= if tegn='N' then 3 else 60;
  8 12324                       signalch(d.opref.retur,opref,d.opref.optype);
  8 12325                     end;
  7 12326                     ac:= -1;
  7 12327                   end
  6 12328                   else
  6 12329                   if (tegn='G') and (tlgr.ll=(long<:FFFFF:> add 'F')) then
  6 12330                     ac:= -1
  6 12331                   else
  6 12332                   if tegn='G' then <*indkodning*>
  6 12333                   begin
  7 12334                     pos:= 10; i:= 0;
  7 12335                     while læstegn(tlgr,pos,tegn)>='0' and tegn<='9' and pos<=14 do
  7 12336                       i:= i*10 + (tegn-'0');
  7 12337                     i:= i mod 1000;
  7 12338                     b_pn:= (1 shift 22) + (i shift 12);
  7 12339                     if pos=14 and 'A'<=tegn and tegn<='Å' then
  7 12340                       b_pn:= b_pn + ((tegn-'@') shift 7);
  7 12341                     pos:= 14; i:= 0;
  7 12342                     while læstegn(tlgr,pos,tegn)>='0' and tegn<='9' and pos<=16 do
  7 12343                       i:= i*10 + (tegn-'0');
  7 12344                     b_pn:= b_pn + i;
  7 12345                     pos:= 16; i:= 0;
  7 12346                     while læstegn(tlgr,pos,tegn)>='0' and tegn<='9' and pos<=20 do
  7 12347                       i:= i*10 + (tegn-'0');
  7 12348                     b_pt:= i;
  7 12349                     bs:= 11;
  7 12350     \f

  7 12350     message procedure radio_ind side 12 - 881107/cl;
  7 12351                   end
  6 12352                   else
  6 12353                   if tegn='H' then <*udkodning*>
  6 12354                   begin
  7 12355                     pos:= 10; i:= 0;
  7 12356                     while læstegn(tlgr,pos,tegn)>='0' and tegn<='9' and pos<=14 do
  7 12357                       i:= i*10 + (tegn-'0');
  7 12358                     b_pt:= i;
  7 12359                     b_pn:= 0;
  7 12360                     bs:= 12;
  7 12361                   end
  6 12362                   else
  6 12363                   if tegn='I' then <*slet tabel*>
  6 12364                   begin
  7 12365                     b_pt:= 1; b_pn:= 999; bs:= 19;
  7 12366                     pos:= 10; i:= 0;
  7 12367                     i:= hex_to_dec(læstegn(tlgr,pos,tegn))*16 +
  7 12368                         hex_to_dec(læstegn(tlgr,pos,tegn));
  7 12369                     zno:= i;
  7 12370                   end
  6 12371                   else ac:= 2;
  6 12372                   if ac<0 then
  6 12373                     ac:= 0
  6 12374                   else
  6 12375     
  6 12375                   if ac=0 then
  6 12376                   begin
  7 12377                     waitch(cs_vt_adgang,opref,true,-1);
  7 12378                     startoperation(opref,401,cs_vt_adgang,bs);
  7 12379                     d.opref.data(1):= b_pt;
  7 12380                     d.opref.data(2):= b_pn;
  7 12381                     d.opref.data(if bs=19 then 3 else 4):= zno;
  7 12382                     signalch(cs_vt,opref,gen_optype or vt_optype);
  7 12383                   end;
  6 12384                 end
  5 12385                 else
  5 12386                   ac:= 2;
  5 12387     
  5 12387                 pos:= 1;
  5 12388                 skrivtegn(answ,pos,'H');
  5 12389                 skrivtegn(answ,pos,' ');
  5 12390                 skrivtegn(answ,pos,ac+'@');
  5 12391                 i:= 1; sum:= 0;
  5 12392                 while i < pos do
  5 12393                   sum:= (sum + læstegn(answ,i,tegn)) mod 256;
  5 12394                 skriv_tegn(answ,pos, sum shift (-4) extract 4 +'@');
  5 12395                 skriv_tegn(answ,pos, sum extract 4 +'@');
  5 12396                 repeat afsluttext(answ,pos) until pos mod 6 = 1;
  5 12397     <*+2*>      if (testbit36 or testbit38) and overvåget then
  5 12398                 disable begin
  6 12399                   write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf);
  6 12400                   outchar(zrl,'nl');
  6 12401                 end;
  5 12402     <*-2*>
  5 12403                 write(z_fr_out,"nl",1,answ.laf,"cr",1);
  5 12404                 disable setposition(z_fr_out,0,0);
  5 12405                 ac:= -1;
  5 12406     \f

  5 12406     message procedure radio_ind side 13 - 881107/cl;
  5 12407               end
  4 12408               else
  4 12409               if ttyp = 'I' then
  4 12410               begin
  5 12411                 typ(1):= -1;
  5 12412                 repeat
  5 12413                   getch(cs_radio_ind,opref,true,typ,val);
  5 12414                   if opref<>0 then
  5 12415                   begin
  6 12416                     d.opref.resultat:= 31;
  6 12417                     signalch(d.opref.retur,opref,d.opref.op_type);
  6 12418                   end;
  5 12419                 until opref=0;
  5 12420                 for i:= 1 step 1 until max_antal_taleveje do
  5 12421                   if læsbit_ia(hookoff_maske,i) then
  5 12422                   begin
  6 12423                     signalbin(bs_talevej_udkoblet(i));
  6 12424                     sætbit_ia(samtaleflag,tv_operatør(i),1);
  6 12425                   end;
  5 12426                 if antal_bits_ia(samtaleflag,1,max_antal_operatører)<>0 then
  5 12427                   signal_bin(bs_mobil_opkald);
  5 12428                 for i:= 1 step 1 until max_antal_kanaler do
  5 12429                 begin
  6 12430                   ref:= (i-1)*kanalbeskrlængde;
  6 12431                   if kanal_tab.ref.kanal_tilstand extract 2 <> 0 then
  6 12432                   begin
  7 12433                     if kanal_tab.ref.kanal_id2<>0 and
  7 12434                        kanal_tab.ref.kanal_id2 shift (-22)<>3
  7 12435                     then
  7 12436                     begin
  8 12437                       signal(ss_samtale_nedlagt(i));
  8 12438                       frigiv_id(kanal_tab.ref.kanal_id2,kanal_til_omr(i));
  8 12439                     end;
  7 12440                     if kanal_tab.ref.kanal_id1<>0 then
  7 12441                     begin
  8 12442                       signal(ss_samtale_nedlagt(i));
  8 12443                       frigiv_id(kanal_tab.ref.kanal_id1,kanal_til_omr(i));
  8 12444                     end;
  7 12445                   end;
  6 12446                   sæt_hex_ciffer(kanal_tab.ref,3,15);
  6 12447                 end;
  5 12448     <*V*>       waitch(cs_radio_pulje,opref,true,-1);
  5 12449                 startoperation(opref,401,cs_radio_pulje,23);
  5 12450                 i:= 1;
  5 12451                 hægtstring(d.opref.data,i,<:radio-info: :>);
  5 12452                 j:= 4;
  5 12453                 while j<=lgd and i<(d.opref.opsize - data - 2)//2*3 do
  5 12454                 begin
  6 12455                   skrivtegn(d.opref.data,i,læstegn(tlgr,j,tegn));
  6 12456                 end;
  5 12457                 repeat afsluttext(d.opref.data,i) until i mod 6 = 1;
  5 12458                 signalch(cs_io,opref,gen_optype or rad_optype);
  5 12459                 optaget_flag:= 0;
  5 12460                 pos:= i:= 1; sum:= 0;
  5 12461                 skrivtegn(answ,pos,'I');
  5 12462                 skrivtegn(answ,pos,' ');
  5 12463                 skrivtegn(answ,pos,'@');
  5 12464                 while i<pos do
  5 12465                   sum:= (sum+læstegn(answ,i,tegn)) mod 256;
  5 12466                 skrivtegn(answ,pos,sum shift (-4) extract 4 + '@');
  5 12467                 skrivtegn(answ,pos,sum extract 4 + '@');
  5 12468                 repeat afsluttext(answ,pos) until pos mod 6 = 1;
  5 12469     <*+2*>      if (testbit36 or testbit38) and overvåget then
  5 12470                 disable begin
  6 12471                   write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf); 
  6 12472                   outchar(zrl,'nl');
  6 12473                 end;
  5 12474     <*-2*>
  5 12475                 write(z_fr_out,"nl",1,answ.laf,"cr",1);
  5 12476                 disable setposition(z_fr_out,0,0);
  5 12477                 ac:= -1;
  5 12478     \f

  5 12478     message procedure radio_ind side 14 - 881107/cl;
  5 12479               end
  4 12480               else
  4 12481               if ttyp='L' then
  4 12482               begin
  5 12483                 ac:= 0;
  5 12484     <****** RADIO-INFO meddelelser til hovedkonsol afhængig af testbi21 ******>
  5 12485                if testbit21 then
  5 12486                begin
  6 12487                 waitch(cs_radio_pulje,opref,true,-1);
  6 12488                 startoperation(opref,401,cs_radio_pulje,23);
  6 12489                 i:= 1;
  6 12490                 hægtstring(d.opref.data,i,<:radio-info: :>);
  6 12491                 j:= 4;
  6 12492                 while j<=lgd and i<(d.opref.opsize-data-2)//2*3 do
  6 12493                 begin
  7 12494                   skrivtegn(d.opref.data,i,læstegn(tlgr,j,tegn));
  7 12495                 end;
  6 12496                 repeat afsluttext(d.opref.data,i) until i mod 6 = 1;
  6 12497                 signalch(cs_io,opref,gen_optype or rad_optype);
  6 12498                end; <*testbit21*>
  5 12499               end
  4 12500               else
  4 12501               if ttyp='Z' then
  4 12502               begin
  5 12503     <*+2*>      if (testbit36 or testbit38) and overvåget then
  5 12504                 disable begin
  6 12505                   write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf); 
  6 12506                   outchar(zrl,'nl');
  6 12507                 end;
  5 12508     <*-2*>
  5 12509                 write(z_fr_out,"nl",1,answ.laf,"cr",1);
  5 12510                 disable setposition(z_fr_out,0,0);
  5 12511                 ac:= -1;
  5 12512               end
  4 12513               else
  4 12514                 ac:= 1;
  4 12515             end; <* telegram modtaget ok *>
  3 12516     \f

  3 12516     message procedure radio_ind side 15 - 881107/cl;
  3 12517             if ac>=0 then
  3 12518             begin
  4 12519               pos:= i:= 1; sum:= 0;
  4 12520               skrivtegn(answ,pos,ttyp);
  4 12521               skrivtegn(answ,pos,' ');
  4 12522               skrivtegn(answ,pos,ac+'@');
  4 12523               while i<pos do
  4 12524                 sum:= (sum+læstegn(answ,i,tegn)) mod 256;
  4 12525               skrivtegn(answ,pos, sum shift (-4) extract 4 + '@');
  4 12526               skrivtegn(answ,pos, sum extract 4 + '@');
  4 12527               repeat afsluttext(answ,pos) until pos mod 6 = 1;
  4 12528     <*+2*>    if (testbit36 or testbit38) and overvåget then
  4 12529               disable begin
  5 12530                 write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf); 
  5 12531                 outchar(zrl,'nl');
  5 12532               end;
  4 12533     <*-2*>
  4 12534               write(z_fr_out,"nl",1,answ.laf,"cr",1);
  4 12535               disable setposition(z_fr_out,0,0);
  4 12536               ac:= -1;
  4 12537             end;
  3 12538       
  3 12538             typ(1):= 0;
  3 12539             typ(2):= 1 shift 18 + 4 shift 12 + tid; <* lt real tid *>
  3 12540             rf:= 4;
  3 12541             systime(1,0.0,val.rf);
  3 12542             val.rf:= val.rf - 30.0;
  3 12543             typ(3):= -1;
  3 12544             repeat
  3 12545               getch(cs_radio_ind,opref,true,typ,val);
  3 12546               if opref>0 then
  3 12547               begin
  4 12548                 d.opref.resultat:= 53; <*annuleret*>
  4 12549                 signalch(d.opref.retur,opref,d.opref.optype);
  4 12550               end;
  3 12551             until opref=0;
  3 12552     
  3 12552           until false;
  3 12553     
  3 12553     radio_ind_trap:
  3 12554         
  3 12554           disable skriv_radio_ind(zbillede,1);
  3 12555       
  3 12555         end radio_ind;
  2 12556     \f

  2 12556     message procedure radio_ud side 1 - 820301/hko;
  2 12557     
  2 12557       procedure radio_ud(op);
  2 12558           value          op;
  2 12559           integer        op;
  2 12560         begin
  3 12561           integer array field opref,io_opref;
  3 12562           integer opgave, kode, pos, tegn, i, sum, rc, svar_status;
  3 12563           integer array answ, tlgr(1:32);
  3 12564           long array field laf;
  3 12565     
  3 12565           procedure skriv_radio_ud(z,omfang);
  3 12566             value                    omfang;
  3 12567             zone                   z;
  3 12568             integer                  omfang;
  3 12569             begin integer i1;
  4 12570               disable i1:= write(z,"nl",1,<:+++ radio-ud  ::>);
  4 12571               if omfang > 0 then
  4 12572               disable begin real x; long array field tx;
  5 12573                 tx:= 0;
  5 12574                 trap(slut);
  5 12575                 write(z,"nl",1,
  5 12576                     <:  opref:        :>,opref,"nl",1,
  5 12577                     <:  io-opref:     :>,io_opref,"nl",1,
  5 12578                     <:  opgave:       :>,opgave,"nl",1,
  5 12579                     <:  kode:         :>,kode,"nl",1,
  5 12580                     <:  pos:          :>,pos,"nl",1,
  5 12581                     <:  tegn:         :>,tegn,"nl",1,
  5 12582                     <:  i:            :>,i,"nl",1,
  5 12583                     <:  sum:          :>,sum,"nl",1,
  5 12584                     <:  rc:           :>,rc,"nl",1,
  5 12585                     <:  svar-status:  :>,svar_status,"nl",1,
  5 12586                     <:  tlgr:         ":>,tlgr.tx,<:":>,"nl",1,
  5 12587                     <:  answ:         ":>,answ.tx,<:":>,"nl",1,
  5 12588                     <::>);
  5 12589                skriv_coru(z,coru_no(402));
  5 12590     slut:
  5 12591              end; <*disable*>
  4 12592            end skriv_radio_ud;
  3 12593     
  3 12593           trap(radio_ud_trap);
  3 12594           laf:= 0;
  3 12595           stack_claim((if cm_test then 200 else 150) +35+100);
  3 12596     
  3 12596     <*+2*>if testbit32 and overvåget  or testbit28 then
  3 12597             skriv_radio_ud(out,0);
  3 12598     <*-2*>
  3 12599     
  3 12599           io_opref:= op;
  3 12600     \f

  3 12600     message procedure radio_ud side 2 - 810529/hko;
  3 12601     
  3 12601           repeat
  3 12602     
  3 12602     <*V*>   wait_ch(cs_radio_ud,op_ref,gen_optype or rad_optype,-1);
  3 12603             kode:= d.op_ref.opkode;
  3 12604             opgave:= kode shift(-12);
  3 12605             kode:= kode extract 12;
  3 12606             if opgave < 'A' or opgave > 'I' then
  3 12607             begin
  4 12608               d.opref.resultat:= 31;
  4 12609             end
  3 12610             else
  3 12611             begin
  4 12612               pos:= 1;
  4 12613               if opgave='A' or opgave='B' or opgave='D' or opgave='H' then
  4 12614               begin
  5 12615                 skrivtegn(tlgr,pos,opgave);
  5 12616                 if d.opref.data(1) = 0 then
  5 12617                 begin
  6 12618                   skrivtegn(tlgr,pos,'G');
  6 12619                   skrivtegn(tlgr,pos,'A');
  6 12620                 end
  5 12621                 else
  5 12622                 begin
  6 12623                   skrivtegn(tlgr,pos,'D');
  6 12624                   skrivtegn(tlgr,pos,d.opref.data(1)+'@'); <*talevejsnr*>
  6 12625                 end;
  5 12626                 if opgave='A' then
  5 12627                 begin
  6 12628                   skrivtegn(tlgr,pos,d.opref.data(2)+'@'); <*calltype*>
  6 12629                 end
  5 12630                 else
  5 12631                 if opgave='B' then
  5 12632                 begin
  6 12633                   skrivtegn(tlgr,pos,d.opref.data(2));
  6 12634                   if d.opref.data(2)='V' then
  6 12635                   begin
  7 12636                     skrivtegn(tlgr,pos,
  7 12637                         d.opref.data(10) shift (-18) extract 6+'@'); <*trunktype*>
  7 12638                     skrivtegn(tlgr,pos,
  7 12639                         d.opref.data(10) shift (-12) extract 6+'@'); <*trunknum.*>
  7 12640                   end;
  6 12641                   d.opref.data(7):= d.opref.data(8):= d.opref.data(9):= 0;
  6 12642                   d.opref.data(6):= if d.opref.data(5)<>0 then 2 else data+18;
  6 12643                 end
  5 12644                 else
  5 12645                 if opgave='H' then
  5 12646                 begin
  6 12647                   skrivtegn(tlgr,pos,d.opref.data(3)+'@'); <*trunktype*>
  6 12648                   skrivtegn(tlgr,pos,d.opref.data(4)+'@'); <*trunknum.*>
  6 12649                   hægtstring(tlgr,pos,<:@@@:>);
  6 12650                   skrivtegn(tlgr,pos,d.opref.data(2)); <*H_tlgr_type*>
  6 12651                   skrivtegn(tlgr,pos,'A');
  6 12652                   skrivtegn(tlgr,pos,(if d.opref.data(2)='L' and
  6 12653                      d.opref.data(5)=8 then 7 else d.opref.data(5))+'@'); 
  6 12654                   if d.opref.data(2)='L' then
  6 12655                   begin
  7 12656                     if d.opref.data(5)=7 then
  7 12657                     begin
  8 12658                       anbringtal(tlgr,pos,
  8 12659                         d.opref.data(8) shift (-12) extract 10,-4);
  8 12660                       anbringtal(tlgr,pos,
  8 12661                         d.opref.data(8) extract 7,-2);
  8 12662                     end
  7 12663                     else
  7 12664                     if d.opref.data(5)=8 then
  7 12665                     begin
  8 12666                       hægtstring(tlgr,pos,<:FFFFFF:>);
  8 12667                     end;
  7 12668                     if d.opref.data(5)<>9 then
  7 12669                       anbringtal(tlgr,pos,d.opref.data(7),-4);
  7 12670                     skrivtegn(tlgr,pos,
  7 12671                       dec_to_hex(d.opref.data(6) shift (-4) extract 4));
  7 12672                     skrivtegn(tlgr,pos,
  7 12673                       dec_to_hex(d.opref.data(6) extract 4));
  7 12674                     skrivtegn(tlgr,10,pos-11+'@');
  7 12675                   end;
  6 12676                 end;
  5 12677               end
  4 12678               else
  4 12679               if opgave='I' then
  4 12680               begin
  5 12681                 hægtstring(tlgr,pos,<:IGA:>);
  5 12682               end
  4 12683               else d.opref.resultat:= 31; <*systemfejl*>
  4 12684             end;
  3 12685     \f

  3 12685     message procedure radio_ud side 3 - 881107/cl;
  3 12686     
  3 12686             if d.opref.resultat=0 then
  3 12687             begin
  4 12688               if (opgave <= 'B')
  4 12689                  <* or (opgave='H' and d.opref.data(2)='L') *> then
  4 12690               begin
  5 12691                 systime(1,0,d.opref.tid);
  5 12692                 signalch(cs_radio_ind,opref,d.opref.optype);
  5 12693                 opref:= 0;
  5 12694               end;
  4 12695               <* beregn checksum og send *>
  4 12696               i:= 1; sum:= 0;
  4 12697               while i < pos do
  4 12698                 sum:= (sum + læstegn(tlgr,i,tegn)) mod 256;
  4 12699               skrivtegn(tlgr,pos,sum shift (-4) + '@');
  4 12700               skrivtegn(tlgr,pos,sum extract 4  + '@');
  4 12701               repeat skrivtegn(tlgr,pos,0) until pos mod 6 = 1;
  4 12702     <**********************************************>
  4 12703     <* specialaktion p.g.a. modtagebesvær i COMET *>
  4 12704     
  4 12704               if opgave='B' then delay(1);
  4 12705      
  4 12705     <*                                94.04.19/cl *>
  4 12706     <**********************************************>
  4 12707      
  4 12707     <*+2*>    if (testbit36 or testbit39) and overvåget then
  4 12708               disable begin
  5 12709                 write(zrl,<<zd dd dd.dd >,now,<:rf-tlgr: :>,tlgr.laf);
  5 12710                 outchar(zrl,'nl');
  5 12711               end;
  4 12712     <*-2*>
  4 12713               setposition(z_rf_in,0,0);
  4 12714               write(z_rf_out,"nl",1,tlgr.laf,"cr",1);
  4 12715               disable setposition(z_rf_out,0,0);
  4 12716               rc:= 0;
  4 12717     
  4 12717               <* afvent svar*>
  4 12718               repeat
  4 12719     <*V*>       svar_status:= afvent_radioinput(z_rf_in,answ,true);
  4 12720                 if svar_status=6 then
  4 12721                 begin
  5 12722                   svar_status:= -3;
  5 12723                   goto radio_ud_check;
  5 12724                 end;
  4 12725                 pos:= 1;
  4 12726                 while læstegn(answ,pos,i)<>0 do ;
  4 12727                 pos:= pos-2;
  4 12728                 if pos > 0 then
  4 12729                 begin
  5 12730                   if pos<3 then
  5 12731                     svar_status:= -2 <*format error*>
  5 12732                   else
  5 12733                   begin
  6 12734                     if læstegn(answ,3,tegn)<>'@' then
  6 12735                       svar_status:= tegn - '@'
  6 12736                     else
  6 12737                     begin
  7 12738                       pos:= 1;
  7 12739                       læstegn(answ,pos,tegn);
  7 12740                       if tegn<>opgave then
  7 12741                         svar_status:= -4 <*gal type*>
  7 12742                       else
  7 12743                       if læstegn(answ,pos,tegn)<>' ' then
  7 12744                         svar_status:= -tegn <*fejl*>
  7 12745                       else
  7 12746                         svar_status:= læstegn(answ,pos,tegn)-'@';
  7 12747                     end;
  6 12748                   end;
  5 12749                 end
  4 12750                 else
  4 12751                   svar_status:= -1;
  4 12752     \f

  4 12752     message procedure radio_ud side 5 - 881107/cl;
  4 12753     
  4 12753     radio_ud_check:
  4 12754                 rc:= rc+1;
  4 12755                 if -3<=svar_status and svar_status< -1 then
  4 12756                 disable begin
  5 12757                   write(z_rf_out,<:<'nl'>Z@@MJ<'cr'>:>);
  5 12758                   setposition(z_rf_out,0,0);
  5 12759     <*+2*>        if (testbit36 or testbit39) and overvåget then
  5 12760                   begin
  6 12761                     write(zrl,<<zd dd dd.dd >,now,<:rf-tlgr: Z@@MJ:>);
  6 12762                     outchar(zrl,'nl');
  6 12763                   end;
  5 12764     <*-2*>
  5 12765                 end
  4 12766                 else
  4 12767                 if svar_status=6 or svar_status=(-4) or svar_status=(-1) then
  4 12768                 disable begin
  5 12769                   write(z_rf_out,"nl",1,tlgr.laf,"cr",1);
  5 12770                   setposition(z_rf_out,0,0);
  5 12771     <*+2*>        if (testbit36 or testbit39) and overvåget then
  5 12772                   begin
  6 12773                     write(zrl,<<zd dd dd.dd >,now,<:rf-tlgr: :>,
  6 12774                       tlgr.laf,<: (repeat):>); outchar(zrl,'nl');
  6 12775                   end;
  5 12776     <*-2*>
  5 12777                 end
  4 12778                 else
  4 12779                 if svar_status=0 and opref<>0 then
  4 12780                   d.opref.resultat:= 0
  4 12781                 else
  4 12782                 if opref<>0 then
  4 12783                   d.opref.resultat:= 31;
  4 12784               until svar_status=0 or rc>3;
  4 12785             end;
  3 12786             if opref<>0 then
  3 12787             begin
  4 12788               if svar_status<>0 and rc>3 then
  4 12789                 d.opref.resultat:= 53; <* annulleret *>
  4 12790               signalch(d.opref.retur,opref,d.opref.optype);
  4 12791               opref:= 0;
  4 12792             end;
  3 12793           until false;
  3 12794     
  3 12794     radio_ud_trap:
  3 12795     
  3 12795           disable skriv_radio_ud(zbillede,1);
  3 12796     
  3 12796         end radio_ud;
  2 12797     \f

  2 12797     message procedure radio_medd_opkald side 1 - 810610/hko;
  2 12798     
  2 12798       procedure radio_medd_opkald;
  2 12799         begin
  3 12800           integer array field ref,op_ref;
  3 12801           integer i;
  3 12802     
  3 12802           procedure skriv_radio_medd_opkald(z,omfang);
  3 12803             value                             omfang;
  3 12804             zone                            z;
  3 12805             integer                           omfang;
  3 12806             begin integer x;
  4 12807               disable x:= write(z,"nl",1,<:+++ radio-medd-opkald:>);
  4 12808               write(z,"sp",26-x);
  4 12809               if omfang > 0 then
  4 12810               disable begin
  5 12811                 trap(slut);
  5 12812                 write(z,"nl",1,
  5 12813                   <:  ref:    :>,ref,"nl",1,
  5 12814                   <:  opref:  :>,op_ref,"nl",1,
  5 12815                   <:  i:      :>,i,"nl",1,
  5 12816                   <::>);
  5 12817                 skriv_coru(z,abs curr_coruno);
  5 12818     slut:
  5 12819               end;<*disable*>
  4 12820             end skriv_radio_medd_opkald;
  3 12821     
  3 12821           trap(radio_medd_opkald_trap);
  3 12822     
  3 12822           stack_claim((if cm_test then 200 else 150) +1);
  3 12823     
  3 12823     <*+2*>if testbit32 and overvåget or testbit28 then
  3 12824             disable skriv_radio_medd_opkald(out,0);
  3 12825     <*-2*>
  3 12826     \f

  3 12826     message procedure radio_medd_opkald side 2 - 820301/hko;
  3 12827     
  3 12827           repeat
  3 12828     
  3 12828     <*V*>   wait(bs_mobil_opkald);
  3 12829     <*V*>   wait_ch(cs_radio_medd,op_ref,genoptype or rad_optype,-1);
  3 12830     <*V*>   wait(bs_opkaldskø_adgang);
  3 12831     
  3 12831             ref:= første_nød_opkald;
  3 12832             while ref <> 0 do <* meld ikke meldt nødopkald til io *>
  3 12833             begin
  4 12834               i:= opkaldskø.ref(2);
  4 12835               if i < 0 then
  4 12836               begin
  5 12837                 <* nødopkald ikke meldt *>
  5 12838     
  5 12838                 start_operation(op_ref,403,cs_radio_medd,45<*nødop.modt.*>);
  5 12839                 d.op_ref.data(1):= <* vogn_id *>
  5 12840                   if opkaldskø.ref(3)<>0 then opkaldskø.ref(3) else i extract 22;
  5 12841                 opkaldskø.ref(2):= i extract 22;
  5 12842                 d.op_ref.data(2):= opkaldskø.ref(4) shift(-12); <* ttmm *>
  5 12843                 d.op_ref.data(3):= opkaldskø.ref(5) extract 20;
  5 12844                 i:= op_ref;
  5 12845     <*+2*>      if testbit35 and overvåget then
  5 12846                 disable begin
  6 12847                   write(out,"nl",1,<:radio nød-medd:>);
  6 12848                   skriv_op(out,op_ref);
  6 12849                   ud;
  6 12850                 end;
  5 12851     <*-2*>
  5 12852                 signal_ch(cs_io,op_ref,gen_optype or rad_optype);
  5 12853     <*V*>       wait_ch(cs_radio_medd,op_ref,rad_optype,-1);
  5 12854     <*+4*>      if i <> op_ref then
  5 12855                   fejlreaktion(11<*fremmed post*>,i,<:radio io/medd:>,0);
  5 12856     <*-4*>
  5 12857               end;<*nødopkald ikke meldt*>
  4 12858     
  4 12858               ref:= opkaldskø.ref(1) extract 12;
  4 12859             end; <* melding til io *>
  3 12860     \f

  3 12860     message procedure radio_medd_opkald side 3 - 820304/hko;
  3 12861     
  3 12861             start_operation(op_ref,403,cs_radio_medd,
  3 12862                             40<*opdater opkaldskøbill*>);
  3 12863             signal_bin(bs_opkaldskø_adgang);
  3 12864     <*+2*>  if testbit35 and overvåget then
  3 12865             disable begin
  4 12866               write(out,"nl",1,<:radio opdater opkaldskø-billede:>);
  4 12867               skriv_op(out,op_ref);
  4 12868               write(out,       <:opkaldsflag: :>,"nl",1);
  4 12869               outintbits_ia(out,opkaldsflag,1,op_maske_lgd//2);
  4 12870               write(out,"nl",1,<:kanalflag:   :>,"nl",1);
  4 12871               outintbits_ia(out,kanalflag,1,op_maske_lgd//2);
  4 12872               write(out,"nl",1,<:samtaleflag: :>,"nl",1);
  4 12873               outintbits_ia(out,samtaleflag,1,op_maske_lgd//2);
  4 12874               ud;
  4 12875             end;
  3 12876     <*-2*>
  3 12877             signal_ch(cs_op,op_ref,gen_optype or rad_optype);
  3 12878     
  3 12878           until false;
  3 12879     
  3 12879     radio_medd_opkald_trap:
  3 12880     
  3 12880           disable skriv_radio_medd_opkald(zbillede,1);
  3 12881     
  3 12881         end radio_medd_opkald;
  2 12882     \f

  2 12882     message procedure radio_adm side 1 - 820301/hko;
  2 12883     
  2 12883       procedure radio_adm(op);
  2 12884       value               op;
  2 12885       integer             op;
  2 12886         begin
  3 12887           integer array field opref, rad_op, iaf;
  3 12888           integer nr,i,j,k,res,opgave,tilst,operatør;
  3 12889     
  3 12889           procedure skriv_radio_adm(z,omfang);
  3 12890             value                 omfang;
  3 12891             zone                z;
  3 12892             integer               omfang;
  3 12893             begin integer i1;
  4 12894               disable i1:= write(z,"nl",1,<:+++ radio-adm:>);
  4 12895               write(z,"sp",26-i1);
  4 12896               if omfang > 0 then
  4 12897               disable begin real x;
  5 12898                 trap(slut);
  5 12899     \f

  5 12899     message procedure radio_adm side 2- 820301/hko;
  5 12900     
  5 12900                 write(z,"nl",1,
  5 12901                   <:  op_ref:    :>,op_ref,"nl",1,
  5 12902                   <:  iaf:       :>,iaf,"nl",1,
  5 12903                   <:  rad-op:    :>,rad_op,"nl",1,
  5 12904                   <:  nr:        :>,nr,"nl",1,
  5 12905                   <:  i:         :>,i,"nl",1,
  5 12906                   <:  j:         :>,j,"nl",1,
  5 12907                   <:  k:         :>,k,"nl",1,
  5 12908                   <:  tilst:     :>,tilst,"nl",1,
  5 12909                   <:  res:       :>,res,"nl",1,
  5 12910                   <:  opgave:    :>,opgave,"nl",1,
  5 12911                   <:  operatør:  :>,operatør,"nl",1);
  5 12912                 skriv_coru(z,coru_no(404));
  5 12913     slut:
  5 12914               end;<*disable*>
  4 12915             end skriv_radio_adm;
  3 12916     \f

  3 12916     message procedure radio_adm side 3 - 820304/hko;
  3 12917     
  3 12917           rad_op:= op;
  3 12918     
  3 12918           trap(radio_adm_trap);
  3 12919           stack_claim((if cm_test then 200 else 150) +50);
  3 12920     
  3 12920     <*+2*>if testbit32 and overvåget or testbit28 then
  3 12921             skriv_radio_adm(out,0);
  3 12922     <*-2*>
  3 12923     
  3 12923           pass;
  3 12924           if -,testbit22 then
  3 12925           begin
  4 12926             startoperation(rad_op,404,cs_radio_adm,'I' shift 12 + 60);
  4 12927             signalch(cs_radio_ud,rad_op,rad_optype);
  4 12928             waitch(cs_radio_adm,rad_op,rad_optype,-1);
  4 12929           end;
  3 12930           repeat
  3 12931             waitch(cs_radio_adm,opref,true,-1);
  3 12932     <*+2*>
  3 12933             if testbit33 and overvåget then
  3 12934             disable begin
  4 12935               skriv_radio_adm(out,0);
  4 12936               write(out,<: operation modtaget på cs:>,<<d>,cs_radio_adm);
  4 12937               skriv_op(out,opref);
  4 12938             end;
  3 12939     <*-2*>
  3 12940     
  3 12940             k:= d.op_ref.opkode extract 12;
  3 12941             opgave:= d.opref.opkode shift (-12);
  3 12942             nr:=operatør:=d.op_ref.data(1);
  3 12943     
  3 12943     <*+4*>  if (d.op_ref.optype and
  3 12944                   (gen_optype or io_optype or op_optype or vt_optype))
  3 12945               extract 12 = 0 then fejlreaktion(12<*operationstype*>,op_ref,
  3 12946                                     <:radio_adm:>,0);
  3 12947     <*-4*>
  3 12948             if k = 74 <* RA,I *> then
  3 12949             begin
  4 12950               startoperation(rad_op,404,cs_radio_adm,'I' shift 12 + 60);
  4 12951               signalch(cs_radio_ud,rad_op,rad_optype);
  4 12952               waitch(cs_radio_adm,rad_op,rad_optype,-1);
  4 12953               d.opref.resultat:= if d.rad_op.resultat=0 then 3
  4 12954                                  else d.rad_op.resultat;
  4 12955               signalch(d.opref.retur,opref,d.opref.optype);
  4 12956     \f

  4 12956     message procedure radio_adm side 4 - 820301/hko;
  4 12957             end
  3 12958             else
  3 12959     
  3 12959             if k = 1<*IN,O*> or k = 2<*EK,O*> or k = 77<*FO,O*> or
  3 12960                k = 5<*FO,L*> or k = 6<*ST  *>                   then
  3 12961             begin
  4 12962               if k = 5 or k=77 then
  4 12963               begin
  5 12964     
  5 12964     <*V*>       wait(bs_opkaldskø_adgang);
  5 12965                 if k=5 then
  5 12966                 begin
  6 12967                   disable for iaf:= 0 step 512 until (max_linienr//768*512) do
  6 12968                   begin
  7 12969                     i:= læs_fil(1035,iaf//512+1,nr);
  7 12970                     if i <> 0 then
  7 12971                       fejlreaktion(5<*læs_fil*>,i,<:liniefordelingstabel:>,0);
  7 12972                     tofrom(radio_linietabel.iaf,fil(nr),
  7 12973                       if (((max_linienr+1 - (iaf//2*3))+2)//3*2) > 512 then 512
  7 12974                       else ((max_linienr+1 - (iaf//2*3))+2)//3*2);
  7 12975                   end;
  6 12976     
  6 12976                   for i:= 1 step 1 until max_antal_mobilopkald do
  6 12977                   begin
  7 12978                     iaf:= i*opkaldskø_postlængde;
  7 12979                     nr:= opkaldskø.iaf(3) shift (-12) extract 10; <*linienr*>
  7 12980                     if nr>0 then
  7 12981                     begin
  8 12982                       læs_tegn(radio_linietabel,nr+1,operatør);
  8 12983                       if operatør>max_antal_operatører then operatør:= 0;
  8 12984                       opkaldskø.iaf(4):= opkaldskø.iaf(4) shift(-8) shift 8 +
  8 12985                                          operatør;
  8 12986                     end;
  7 12987                   end;
  6 12988                 end
  5 12989                 else
  5 12990                 if k=77 then
  5 12991                 begin
  6 12992                   disable i:= læsfil(1034,1,nr);
  6 12993                   if i<>0 then fejlreaktion(5,i,<:områdefordelingstabel:>,0);
  6 12994                   tofrom(radio_områdetabel,fil(nr),max_antal_områder*2);
  6 12995                   for i:= 1 step 1 until max_antal_mobilopkald do
  6 12996                   begin
  7 12997                     iaf:= i*opkaldskø_postlængde;
  7 12998                     nr:= opkaldskø.iaf(5) extract 4;
  7 12999                     operatør:= radio_områdetabel(nr);
  7 13000                     if operatør < 0 or max_antal_operatører < operatør then
  7 13001                       operatør:= 0;
  7 13002                     if opkaldskø.iaf(4) extract 8=0 and
  7 13003                        opkaldskø.iaf(3) shift (-12) extract 10 = 0 then
  7 13004                           opkaldskø.iaf(4):= opkaldskø.iaf(4) shift(-8) shift 8 +
  7 13005                                              operatør;
  7 13006                   end;
  6 13007                 end;
  5 13008     
  5 13008                 tofrom(opkaldsflag,alle_operatører,op_maske_lgd);
  5 13009                 signal_bin(bs_opkaldskø_adgang);
  5 13010     
  5 13010                 signal_bin(bs_mobil_opkald);
  5 13011     
  5 13011                 d.op_ref.resultat:= res:= 3;
  5 13012     \f

  5 13012     message procedure radio_adm side 5 - 820304/hko;
  5 13013     
  5 13013               end <*k = 5 / k = 77*>
  4 13014               else
  4 13015               begin <*k =1,2 eller 6 (IN,O - EK,O eller ST) *>
  5 13016                 res:= 3;
  5 13017                 for nr:= 1 step 1 until max_antal_kanaler do
  5 13018                 begin
  6 13019                   iaf:= (nr-1)*kanal_beskr_længde;
  6 13020                   if kanal_tab.iaf.kanal_tilstand shift (-16) = 
  6 13021                                                   op_talevej(operatør) then
  6 13022                   begin
  7 13023                     tilst:= kanal_tab.iaf.kanal_tilstand extract 2;
  7 13024                     if tilst <> 0 then
  7 13025                       res:= 16; <*skærm optaget*>
  7 13026                   end; <* kanal_tab(operatør) = operatør*>
  6 13027                 end;
  5 13028                 tofrom(opkaldsflag,alle_operatører,op_maske_lgd);
  5 13029                 sæt_bit_ia(opkaldsflag,operatør,k extract 1);
  5 13030                 signal_bin(bs_mobil_opkald);
  5 13031                 d.op_ref.resultat:= res;
  5 13032               end;<*k=1,2 eller 6 *>
  4 13033     
  4 13033     <*+2*>    if testbit35 and overvåget then
  4 13034               disable begin
  5 13035                 skriv_radio_adm(out,0);
  5 13036                 write(out,<: sender til :>,
  5 13037                   if k=5 or k=6 or k=77 or res > 3 then d.op_ref.retur
  5 13038                     else cs_op);
  5 13039                 skriv_op(out,op_ref);
  5 13040               end;
  4 13041     <*-2*>
  4 13042     
  4 13042               if k=5 or k=6 or k=77 or res > 3 then
  4 13043                 signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype)
  4 13044               else
  4 13045               begin <*k = (1 eller 2) og res = 3 *>
  5 13046                 d.op_ref.resultat:=0;
  5 13047                 signal_ch(cs_op,op_ref,d.op_ref.optype);
  5 13048               end;
  4 13049     \f

  4 13049     message procedure radio_adm side 6 - 816610/hko;
  4 13050     
  4 13050             end <*k=1,2,5 eller 6*>
  3 13051             else
  3 13052             if k=3 <*IN,R*> or k=4 <*EK,R*> then
  3 13053             begin
  4 13054               nr:= d.op_ref.data(1);
  4 13055               res:= 3;
  4 13056     
  4 13056               if nr<=3 then
  4 13057                 res:= 51 <* afvist *>
  4 13058               else
  4 13059               begin
  5 13060     
  5 13060                 <* gennemstilling af område *>
  5 13061                 j:= 1;
  5 13062                 for i:= 1 step 1 until max_antal_kanaler do
  5 13063                 begin
  6 13064                   if kanal_id(i) shift (-5) extract 3 = 3 and
  6 13065                      radio_id(kanal_id(i) extract 5) = nr then j:= i;
  6 13066                 end;
  5 13067                 nr:= j;
  5 13068                 iaf:= (nr-1)*kanalbeskrlængde;
  5 13069                 if læsbiti(kanal_tab.iaf.kanal_tilstand,11) == (k=4) then
  5 13070                 begin
  6 13071                   startoperation(radop,404,cs_radio_adm,'H' shift 12 + 60);
  6 13072                   d.rad_op.data(1):= 0;
  6 13073                   d.rad_op.data(2):= 'G'; <* gennemstil område *>
  6 13074                   d.rad_op.data(3):= kanal_id(nr) shift (-5) extract 3;
  6 13075                   d.rad_op.data(4):= kanal_id(nr) extract 5;
  6 13076                   d.rad_op.data(5):= k extract 1; <* set/slet gennemstilling *>
  6 13077                   signalch(cs_radio_ud,rad_op,rad_optype);
  6 13078                   waitch(cs_radio_adm,rad_op,rad_optype,-1);
  6 13079                   res:= d.rad_op.resultat;
  6 13080                   if res=0 then res:= 3;
  6 13081                   sætbiti(kanal_tab.iaf.kanal_tilstand,11,k extract 1);
  6 13082                   sætbiti(kanal_tab.iaf.kanal_tilstand,10,k extract 1);
  6 13083                 end;
  5 13084               end;
  4 13085               d.op_ref.resultat:=res;
  4 13086               signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  4 13087               tofrom(kanalflag,alle_operatører,op_maske_lgd);
  4 13088               signal_bin(bs_mobil_opkald);
  4 13089     \f

  4 13089     message procedure radio_adm side 7 - 880930/cl;
  4 13090     
  4 13090     
  4 13090             end <* k=3 eller 4 *>
  3 13091             else
  3 13092             if k=72<*EK,K*> or k=73<*IN,K*> then
  3 13093             begin
  4 13094               nr:= d.opref.data(1) extract 22;
  4 13095               res:= 3;
  4 13096               iaf:= (nr-1)*kanalbeskrlængde;
  4 13097                 start_operation(radop,404,cs_radio_adm,'H' shift 12 + 60);
  4 13098                 d.rad_op.data(1):= 0;
  4 13099                 d.rad_op.data(2):= 'C'; <* kanal inkluder/ekskluder *>
  4 13100                 d.rad_op.data(3):= kanalid(nr) shift (-5) extract 3;
  4 13101                 d.rad_op.data(4):= kanalid(nr) extract 5;
  4 13102                 d.rad_op.data(5):= k extract 1;
  4 13103                 signalch(cs_radio_ud,radop,rad_optype);
  4 13104                 waitch(cs_radio_adm,radop,rad_optype,-1);
  4 13105                 res:= d.radop.resultat;
  4 13106                 if res=0 then res:= 3;
  4 13107                 j:= if k=72 then 15 else 0;
  4 13108                 if res=3 and j<>sæt_hex_ciffer(kanal_tab.iaf,3,j) then
  4 13109                 begin
  5 13110                   tofrom(kanalflag,alle_operatører,op_maske_lgd);
  5 13111                   signalbin(bs_mobilopkald);
  5 13112                 end;
  4 13113               d.opref.resultat:= res;
  4 13114               signalch(d.opref.retur,opref,d.opref.optype);
  4 13115             end
  3 13116             else
  3 13117             if k=11 or k=12 or k=19 then <*vt_opd*>
  3 13118             begin
  4 13119               nr:= d.opref.data(1) extract 8;
  4 13120               opgave:= if k=19 then 9 else (k-4);
  4 13121               if nr<=3 then
  4 13122                res:= 51 <*afvist*>
  4 13123               else
  4 13124               begin
  5 13125                 startoperation(radop,404,cs_radio_adm,'H' shift 12 + 60);
  5 13126                 d.radop.data(1):= 0;
  5 13127                 d.radop.data(2):= 'L';
  5 13128                 d.radop.data(3):= omr_til_trunk(nr) shift (-6);
  5 13129                 d.radop.data(4):= omr_til_trunk(nr) extract 6;
  5 13130                 d.radop.data(5):= opgave;
  5 13131                 d.radop.data(6):= d.opref.data(1) shift (-8) extract 8;
  5 13132                 d.radop.data(7):= d.opref.data(2);
  5 13133                 d.radop.data(8):= d.opref.data(3);
  5 13134                 signalch(cs_radio_ud,radop,rad_optype);
  5 13135     <*V*>       waitch(cs_radio_adm,radop,rad_optype,-1);
  5 13136                 res:= d.radop.resultat;
  5 13137                 if res=0 then res:= 3;
  5 13138               end;
  4 13139               d.opref.resultat:= res;
  4 13140               signalch(d.opref.retur,opref,d.opref.optype);
  4 13141             end
  3 13142             else
  3 13143     
  3 13143             begin
  4 13144     
  4 13144               d.op_ref.resultat:= 45; <* ikke implementeret *>
  4 13145     
  4 13145               signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype);
  4 13146     
  4 13146             end;
  3 13147               
  3 13147           until false;
  3 13148     radio_adm_trap:
  3 13149           disable skriv_radio_adm(zbillede,1);
  3 13150         end radio_adm;
  2 13151     
  2 13151     \f

  2 13151     message vogntabel erklæringer side 1 - 820301/cl;
  2 13152     
  2 13152     integer cs_vt, cs_vt_adgang,cs_vt_logpool,cs_vt_opd,cs_vt_rap,
  2 13153             cs_vt_tilst,cs_vt_auto,cs_vt_grp,cs_vt_spring,vt_op,
  2 13154             cs_vt_log;
  2 13155     integer sidste_bus,sidste_linie_løb,tf_vogntabel,
  2 13156             max_antal_i_gruppe,tf_gruppedef,tf_gruppeidenter,tf_springdef,
  2 13157             vt_log_slicelgd;
  2 13158     integer array bustabel,bustabel1(0:max_antal_busser),
  2 13159                   linie_løb_tabel(0:max_antal_linie_løb),
  2 13160                   springtabel(1:max_antal_spring,1:3),
  2 13161                   gruppetabel(1:max_antal_grupper),
  2 13162                   gruppeopkald(1:max_antal_gruppeopkald,1:2), <* ident , filref *>
  2 13163                   vt_logop(1:2),
  2 13164                   vt_logdisc(1:4),
  2 13165                   vt_log_tail(1:10);
  2 13166     boolean array busindeks(-1:max_antal_linie_løb),
  2 13167                   bustilstand(-1:max_antal_busser),
  2 13168                   linie_løb_indeks(-1:max_antal_busser);
  2 13169     real array springtid,springstart(1:max_antal_spring);
  2 13170     real          vt_logstart;
  2 13171     integer field v_kode,v_bus,v_ll1,v_ll2;
  2 13172     integer array field v_tekst;
  2 13173     real field v_tid;
  2 13174     
  2 13174     zone zvtlog(128,1,stderror);
  2 13175     
  2 13175     \f

  2 13175     message vogntabel erklæringer side 2 - 851001/cl;
  2 13176     
  2 13176     procedure skriv_vt_variable(zud);
  2 13177       zone                      zud;
  2 13178     begin integer i; long array field laf;
  3 13179       laf:= 0;
  3 13180       write(zud,"nl",1,<:+++++ vogntabel variable::>,"nl",1,<<d>,
  3 13181         <:vt-op-længde       :>,vt_op_længde,"nl",1,
  3 13182         <:cs-vt              :>,cs_vt,"nl",1,
  3 13183         <:cs-vt-adgang       :>,cs_vt_adgang,"nl",1,
  3 13184         <:cs-vt-logpool      :>,cs_vt_logpool,"nl",1,
  3 13185         <:cs-vt-opd          :>,cs_vt_opd,"nl",1,
  3 13186         <:cs-vt-rap          :>,cs_vt_rap,"nl",1,
  3 13187         <:cs-vt-tilst        :>,cs_vt_tilst,"nl",1,
  3 13188         <:cs-vt-auto         :>,cs_vt_auto,"nl",1,
  3 13189         <:cs-vt-grp          :>,cs_vt_grp,"nl",1,
  3 13190         <:cs-vt-spring       :>,cs_vt_spring,"nl",1,
  3 13191         <:cs-vt-log          :>,cs_vt_log,"nl",1,
  3 13192         <:vt-op              :>,vt_op,"nl",1,
  3 13193         <:vt-logop(1)        :>,vt_logop(1),"nl",1,
  3 13194         <:vt-logop(2)        :>,vt_logop(2),"nl",1,
  3 13195         <:sidste-bus         :>,sidste_bus,"nl",1,
  3 13196         <:sidste-linie-løb   :>,sidste_linie_løb,"nl",1,
  3 13197         <:max-antal-i-gruppe :>,max_antal_i_gruppe,"nl",1,
  3 13198         <:tf-vogntabel       :>,tf_vogntabel,"nl",1,
  3 13199         <:tf-gruppedef       :>,tf_gruppedef,"nl",1,
  3 13200         <:tf-gruppeidenter   :>,tf_gruppeidenter,"nl",1,
  3 13201         <:tf-springdef       :>,tf_springdef,"nl",1,
  3 13202         <:vt-logskift        :>,vt_logskift,"nl",1,
  3 13203         <:vt-logdisc         :>,vt_logdisc.laf,"nl",1,
  3 13204         <:vt-log-slicelgd    :>,vt_log_slicelgd,"nl",1,
  3 13205         <:vt-log-aktiv       :>,
  3 13206            if vt_log_aktiv then <:true:> else <:false:>,"nl",1,
  3 13207         <:vt-logstart        :>,<<zdddddd.dd>,vt_logstart,"nl",1,
  3 13208         <::>);
  3 13209       write(zud,"nl",1,<:vt-logtail:<'nl'>:>);
  3 13210       laf:= 2;
  3 13211       write(zud,"sp",2,<<d>,vt_logtail(1),"sp",1,vt_logtail.laf);
  3 13212       for i:= 6 step 1 until 10 do
  3 13213         write(zud,"sp",1,<<d>,vt_logtail(i));
  3 13214       write(zud,"nl",1);
  3 13215     end;
  2 13216     \f

  2 13216     message procedure p_vogntabel side 1 - 820301/cl;
  2 13217     
  2 13217     procedure p_vogntabel(z);
  2 13218       zone z;
  2 13219     begin
  3 13220       integer i,b,s,o,t,li,lb,lø,g;
  3 13221       write(z,<:<10>***** udskrift af vogntabel *****<10>:>,
  3 13222         <:<10>max-antal-busser =:>,max_antal_busser,<:  sidste-bus =:>,
  3 13223         sidste_bus,<:<10>max-antal-linie-løb =:>,max_antal_linie_løb,
  3 13224         <:  sidste-linie-løb =:>,sidste_linie_løb,"nl",1);
  3 13225     
  3 13225       for i:= 1 step 1 until sidste_bus do
  3 13226       begin
  4 13227         b:= bustabel(i) extract 14;
  4 13228         g:= bustabel(i) shift (-14);
  4 13229         s:= bustabel1(i) shift (-23);
  4 13230         o:= bustabel1(i) extract 8;
  4 13231         t:= intg(bustilstand(i));
  4 13232         li:= linie_løb_tabel(linie_løb_indeks(i) extract 12);
  4 13233         lø:= li extract 7;
  4 13234         lb:= li shift (-7) extract 5;
  4 13235         lb:= if lb=0 then 32 else lb+64;
  4 13236         li:= li shift (-12) extract 10;
  4 13237         write(z,if i mod 2 = 1 then <:<10>:> else <:      :>,
  4 13238           <<zddd>,b,if s=1 then <:B:> else <: :>,"sp",1,
  4 13239           if g > 0 then string bpl_navn(g) else <:   :>,
  4 13240           ";",1,true,4,string område_navn(o),
  4 13241           <:(:>,<<-dd>,t,<:)  :>," ",if lb=' ' then 1 else 0,<<ddd>,
  4 13242           li,false add lb,if lb=' ' then 0 else 1,<:/:>,<<zd>,lø);
  4 13243       end;
  3 13244     end p_vogntabel;
  2 13245     \f

  2 13245     message procedure p_gruppetabel side 1 - 810531/cl;
  2 13246     
  2 13246     procedure p_gruppetabel(z);
  2 13247       zone                  z;
  2 13248     begin
  3 13249       integer i,nr,bogst;
  3 13250       boolean spc_gr;
  3 13251       write(z,"nl",2,<:*****  udskrift af gruppetabel  *****:>,"nl",1,
  3 13252         <:max-antal-grupper =:>,max_antal_grupper,
  3 13253         <:   max-antal-i-gruppe =:>,max_antal_i_gruppe,
  3 13254         <:   max-antal-gruppeopkald =:>,max_antal_gruppeopkald,"nl",2,
  3 13255         <:gruppetabel::>);
  3 13256       for i:= 1 step 1 until max_antal_grupper do
  3 13257         write(z,if i mod 10 = 1 then <:<10>:> else <:  :>,<<dd>,i,":",1,
  3 13258           if gruppetabel(i) <> 0 then "G" else " ",1,true,2,<<b>,
  3 13259           gruppetabel(i) extract 7);
  3 13260       write(z,"nl",2,<:gruppeopkald::>);
  3 13261       for i:= 1 step 1 until max_antal_gruppeopkald do
  3 13262       begin
  4 13263         write(z,if i mod 4 = 1 then <:<10>:> else <:   :>,<<dd>,i,":",1);
  4 13264         if gruppeopkald(i,1) = 0 then
  4 13265           write(z,"sp",11)
  4 13266         else
  4 13267         begin
  5 13268           spc_gr:= gruppeopkald(i,1) shift (-21) = 5;
  5 13269           if spc_gr then nr:= gruppeopkald(i,1) extract 7
  5 13270           else
  5 13271           begin
  6 13272             nr:= gruppeopkald(i,1) shift (-5) extract 10;
  6 13273             bogst:= gruppeopkald(i,1) extract 5 +'@';
  6 13274             if bogst = '@' then bogst:= 'sp';
  6 13275           end;
  5 13276           if spc_gr then
  5 13277             write(z,<:(G:>,<<d>,true,3,nr)
  5 13278           else
  5 13279             write(z,"(",1,<<ddd>,nr,false add bogst,1);
  5 13280           write(z,",",1,<<dddd>,gruppeopkald(i,2),")",1);
  5 13281         end;
  4 13282       end;
  3 13283     end p_gruppetabel;
  2 13284     \f

  2 13284     message procedure p_springtabel side 1 - 810519/cl;
  2 13285     
  2 13285     procedure p_springtabel(z);
  2 13286       zone                  z;
  2 13287     begin
  3 13288       integer li,bo,max,st,nr;
  3 13289       long indeks;
  3 13290       real t;
  3 13291     
  3 13291       write(z,"nl",2,<:***** springtabel *****:>,"nl",1,
  3 13292         <:max-antal-spring =:>,max_antal_spring,"nl",2,
  3 13293         <:nr spring-id max status   næste-tid:>,"nl",1);
  3 13294       for nr:= 1 step 1 until max_antal_spring do
  3 13295       begin
  4 13296         write(z,<<dd>,nr);
  4 13297         <* if springtabel(nr,1)<>0 then *>
  4 13298         begin
  5 13299           li:= springtabel(nr,1) shift (-5) extract 10;
  5 13300           bo:= springtabel(nr,1) extract 5;
  5 13301           if bo<>0 then bo:= bo + 'A' - 1;
  5 13302           indeks:= extend springtabel(nr,2) shift 24;
  5 13303           st:= extend springtabel(nr,3) shift (-12) extract 24;
  5 13304           max:= springtabel(nr,3) extract 12;
  5 13305           write(z,"sp",(bo=0) extract 1 + 2,<<ddd>,li,false add bo,1,<:.:>);
  5 13306           write(z,"sp",4-write(z,string indeks),<< dd>,max,<<    -dd>,st);
  5 13307           if springtid(nr)<>0.0 then
  5 13308             write(z,<< zddddd.dddd>,systime(4,springtid(nr),t)+t/1000000)
  5 13309           else
  5 13310             write(z,<<      d.d   >,0.0);
  5 13311           if springstart(nr)<>0.0 then
  5 13312             write(z,<< zddddd.dddd>,systime(4,springstart(nr),t)+t/1000000)
  5 13313           else
  5 13314             write(z,<<      d.d   >,0.0);
  5 13315         end
  4 13316     <*  else
  4 13317           write(z,<:  --------:>)*>;
  4 13318         write(z,"nl",1);
  4 13319       end;
  3 13320     end p_springtabel;
  2 13321     \f

  2 13321     message procedure find_busnr side 1 - 820301/cl;
  2 13322     
  2 13322     integer procedure findbusnr(ll_id,busnr,garage,tilst);
  2 13323       value   ll_id;
  2 13324       integer ll_id, busnr, garage, tilst;
  2 13325     begin
  3 13326       integer i,j;
  3 13327     
  3 13327       j:= binærsøg(sidste_linie_løb,
  3 13328             (linie_løb_tabel(i) - ll_id), i);
  3 13329       if j<>0 then <* linie/løb findes ikke *>
  3 13330       begin
  4 13331         find_busnr:= -1;
  4 13332         busnr:= 0;
  4 13333         garage:= 0;
  4 13334         tilst:= 0;
  4 13335       end
  3 13336       else
  3 13337       begin
  4 13338         busnr:= bustabel(busindeks(i) extract 12);
  4 13339         tilst:= intg(bustilstand(intg(busindeks(i))));
  4 13340         garage:= busnr shift (-14);
  4 13341         busnr:= busnr extract 14;
  4 13342         find_busnr:= busindeks(i) extract 12;
  4 13343       end;
  3 13344     end find_busnr;
  2 13345     \f

  2 13345     message procedure søg_omr_bus side 1 - 881027/cl;
  2 13346     
  2 13346     
  2 13346     integer procedure søg_omr_bus(bus,ll,gar,omr,sig,tilst);
  2 13347       value bus;
  2 13348       integer bus,ll,gar,omr,sig,tilst;
  2 13349     begin
  3 13350       integer i,j,nr,bu,bi,bl;
  3 13351     
  3 13351       j:= binærsøg(sidste_bus,((bustabel(bi) extract 14) - (bus extract 14)),bi);
  3 13352       nr:= -1;
  3 13353       if j=0 then
  3 13354       begin
  4 13355         bl:= bu:= bi;
  4 13356         while bl>1 and bustabel(bl-1) extract 14 = bus extract 14 do bl:=bl-1;
  4 13357         while bu<sidste_bus and
  4 13358           bustabel(bu+1) extract 14 = bus extract 14 do bu:= bu+1;
  4 13359     
  4 13359         if bl<>bu then
  4 13360         begin
  5 13361           <* flere busser med samme tekniske nr. omr skal passe *>
  5 13362           nr:= -2;
  5 13363           for bi:= bl step 1 until bu do
  5 13364             if bustabel1(bi) extract 8 = omr extract 8 then nr:= bi;
  5 13365         end
  4 13366         else
  4 13367           nr:= bi;
  4 13368       end;
  3 13369     
  3 13369       if nr<0 then
  3 13370       begin
  4 13371         <* bus findes ikke *>
  4 13372         ll:= gar:= tilst:= sig:= 0;
  4 13373       end
  3 13374       else
  3 13375       begin
  4 13376         tilst:= intg(bustilstand(nr));
  4 13377         gar:= bustabel(nr) shift (-14);
  4 13378         ll:= linie_løb_tabel( linie_løb_indeks(nr) extract 12 );
  4 13379         if omr=0 then omr:= bustabel1(nr) extract 8;
  4 13380         sig:= bustabel1(nr) shift (-23);
  4 13381       end;
  3 13382       søg_omr_bus:= nr;
  3 13383     end;
  2 13384     \f

  2 13384     message procedure find_linie_løb side 1 - 820301/cl;
  2 13385     
  2 13385     integer procedure find_linie_løb(busnr,linie_løb,garage,tilst);
  2 13386       value   busnr;
  2 13387       integer busnr, linie_løb, garage, tilst;
  2 13388     begin
  3 13389       integer i,j;
  3 13390     
  3 13390       j:= binærsøg(sidste_bus,((bustabel(i) extract 14) - (busnr extract 14)), i);
  3 13391     
  3 13391       if j<>0 then <* bus findes ikke *>
  3 13392       begin
  4 13393         find_linie_løb:= -1;
  4 13394         linie_løb:= 0;
  4 13395         garage:= 0;
  4 13396         tilst:= 0;
  4 13397       end
  3 13398       else
  3 13399       begin
  4 13400         tilst:= intg(bustilstand(i));
  4 13401         garage:= bustabel(i) shift (-14);
  4 13402         linie_løb:= linie_løb_tabel(linie_løb_indeks(i) extract 12);
  4 13403         find_linie_løb:= linie_løb_indeks(i) extract 12;
  4 13404       end;
  3 13405     end find_linie_løb;
  2 13406     \f

  2 13406     message procedure h_vogntabel side 1 - 810413/cl;
  2 13407     
  2 13407     <* hovedmodulcorutine for vogntabelmodul *>
  2 13408     
  2 13408     procedure h_vogntabel;
  2 13409     begin
  3 13410       integer array field op;
  3 13411       integer dest_sem,k;
  3 13412     
  3 13412       procedure skriv_h_vogntabel(zud,omfang);
  3 13413         value                         omfang;
  3 13414         zone                      zud;
  3 13415         integer                       omfang;
  3 13416       begin
  4 13417         write(zud,"nl",1,<:+++ hovedmodul vogntabel :>);
  4 13418         if omfang<>0 then
  4 13419         disable
  4 13420         begin
  5 13421           skriv_coru(zud,abs curr_coruno);
  5 13422           write(zud,"nl",1,<<d>,
  5 13423             <:cs-vt     :>,cs_vt,"nl",1,
  5 13424             <:op        :>,op,"nl",1,
  5 13425             <:dest-sem  :>,dest_sem,"nl",1,
  5 13426             <:k         :>,k,"nl",1,
  5 13427             <::>);
  5 13428         end;
  4 13429       end;
  3 13430     \f

  3 13430     message procedure h_vogntabel side 2 - 820301/cl;
  3 13431     
  3 13431       stackclaim(if cm_test then 198 else 146);
  3 13432       trap(h_vt_trap);
  3 13433     
  3 13433     <*+2*>
  3 13434     <**> disable if testbit47 and overvåget or testbit28 then
  3 13435     <**>   skriv_h_vogntabel(out,0);
  3 13436     <*-2*>
  3 13437     
  3 13437       repeat
  3 13438         waitch(cs_vt,op,true,-1);
  3 13439     <*+4*>
  3 13440       if (d.op.optype and gen_optype) extract 12 = 0 and
  3 13441          (d.op.optype and vt_optype) extract 12 = 0 then
  3 13442        fejlreaktion(12,op,<:vogntabel:>,0);
  3 13443     <*-4*>
  3 13444       disable
  3 13445       begin
  4 13446     
  4 13446         k:= d.op.opkode extract 12;
  4 13447         dest_sem:=
  4 13448           if k =   9 then cs_vt_rap else
  4 13449           if k =  10 then cs_vt_rap else
  4 13450           if k =  11 then cs_vt_opd else
  4 13451           if k =  12 then cs_vt_opd else
  4 13452           if k =  13 then cs_vt_opd else
  4 13453           if k =  14 then cs_vt_tilst else
  4 13454           if k =  15 then cs_vt_tilst else
  4 13455           if k =  16 then cs_vt_tilst else
  4 13456           if k =  17 then cs_vt_tilst else
  4 13457           if k =  18 then cs_vt_tilst else
  4 13458           if k =  19 then cs_vt_opd else
  4 13459           if k =  20 then cs_vt_opd else
  4 13460           if k =  21 then cs_vt_auto else
  4 13461           if k =  24 then cs_vt_opd else
  4 13462           if k =  25 then cs_vt_grp else
  4 13463           if k =  26 then cs_vt_grp else
  4 13464           if k =  27 then cs_vt_grp else
  4 13465           if k =  28 then cs_vt_grp else
  4 13466           if k =  30 then cs_vt_spring else
  4 13467           if k =  31 then cs_vt_spring else
  4 13468           if k =  32 then cs_vt_spring else
  4 13469           if k =  33 then cs_vt_spring else
  4 13470           if k =  34 then cs_vt_spring else
  4 13471           if k =  35 then cs_vt_spring else
  4 13472           -1;
  4 13473     \f

  4 13473     message procedure h_vogntabel side 3 - 810422/cl;
  4 13474     
  4 13474     <*+2*>
  4 13475     <**> if testbit41 and overvåget then
  4 13476     <**> begin
  5 13477     <**>   skriv_h_vogntabel(out,0); write(out,<:   modtaget operation:>);
  5 13478     <**>   skriv_op(out,op);
  5 13479     <**> end;
  4 13480     <*-2*>
  4 13481       end;
  3 13482     
  3 13482       if dest_sem = -1 then
  3 13483         fejlreaktion(2,k,<:vogntabel:>,0);
  3 13484       disable signalch(dest_sem,op,d.op.optype);
  3 13485     until false;
  3 13486     h_vt_trap:
  3 13487       disable skriv_h_vogntabel(zbillede,1);
  3 13488     end h_vogntabel;
  2 13489     \f

  2 13489     message procedure vt_opdater side 1 - 810317/cl;
  2 13490     
  2 13490     procedure vt_opdater(op1);
  2 13491       value              op1;
  2 13492       integer            op1;
  2 13493     begin
  3 13494       integer array field op,radop;
  3 13495       integer funk,res,busnr,ll_id,ll1,omr,gar,sig,tilst,bi,li,s,zi,
  3 13496         format,ll_id1,ll_id2,inf1,inf2,i,bi1,bi2,li1,li2,pm1,
  3 13497         flin,slin,finx,sinx;
  3 13498       integer field bn,ll;
  3 13499     
  3 13499     procedure skriv_vt_opd(zud,omfang);
  3 13500       value omfang; integer omfang;
  3 13501       zone zud;
  3 13502     begin
  4 13503       write(zud,"nl",1,<:+++ vt_opdater           :>);
  4 13504       if omfang <> 0 then
  4 13505       disable
  4 13506       begin
  5 13507         skriv_coru(zud,abs curr_coruno);
  5 13508         write(zud,"nl",1,
  5 13509           <:  op:   :>,op,"nl",1,
  5 13510           <:  radop::>,radop,"nl",1,
  5 13511           <:  funk: :>,funk,"nl",1,
  5 13512           <:  res:  :>,res,"nl",1,
  5 13513           <::>);
  5 13514       end;
  4 13515     end skriv_vt_opd;
  3 13516     
  3 13516       integer procedure opd_omr(fnk,omr,bus,ll);
  3 13517         value                   fnk,omr,bus,ll;
  3 13518         integer                 fnk,omr,bus,ll;
  3 13519       begin
  4 13520         opd_omr:= 3;
  4 13521         <*GØR PROCEDUREN TIL DUMMYPROCEDURE - 
  4 13522           ændringer skal ikke længere meldes til yderområder *>
  4 13523         goto dummy_retur;
  4 13524     
  4 13524         if omr extract 8 > 3 then
  4 13525         begin
  5 13526           startoperation(radop,501,cs_vt_opd,fnk);
  5 13527           d.radop.data(1):= omr;
  5 13528           d.radop.data(2):= bus;
  5 13529           d.radop.data(3):= ll;
  5 13530           signalch(cs_rad,radop,vt_optype);
  5 13531     <*V*> waitch(cs_vt_opd,radop,vt_optype,-1);
  5 13532           opd_omr:= d.radop.resultat;
  5 13533         end
  4 13534         else
  4 13535           opd_omr:= 0;
  4 13536     dummy_retur:
  4 13537       end;
  3 13538     message procedure vt_opdater side 1a - 920517/cl;
  3 13539     
  3 13539       procedure opd_log(kilde,kode,bus,ll1,ll2);
  3 13540         value           kilde,kode,bus,ll1,ll2;
  3 13541         integer         kilde,kode,bus,ll1,ll2;
  3 13542       begin
  4 13543         integer array field op;
  4 13544     
  4 13544     <*V*> waitch(cs_vt_logpool,op,vt_optype,-1);
  4 13545     
  4 13545         startoperation(op,curr_coruid,cs_vt_logpool,0);
  4 13546         systime(1,0.0,d.op.data.v_tid);
  4 13547         d.op.data.v_kode:= kode + (if kilde=506 <*vt_auto*> then 0 else 4);
  4 13548         d.op.data.v_bus:= bus;
  4 13549         d.op.data.v_ll1:= ll1;
  4 13550         d.op.data.v_ll2:= ll2;
  4 13551         signalch(cs_vt_log,op,vt_optype);
  4 13552       end;
  3 13553     
  3 13553       stackclaim((if cm_test then 198 else 146)+125);
  3 13554     
  3 13554       bn:= 4; ll:= 2;
  3 13555       radop:= op1;
  3 13556       trap(vt_opd_trap);
  3 13557     
  3 13557     <*+2*>
  3 13558     <**> disable if testbit47 and overvåget or testbit28 then
  3 13559     <**>   skriv_vt_opd(out,0);
  3 13560     <*-2*>
  3 13561     \f

  3 13561     message procedure vt_opdater side 2 - 851001/cl;
  3 13562     
  3 13562     vent_op:
  3 13563       waitch(cs_vt_opd,op,gen_optype or vt_optype,-1);
  3 13564     
  3 13564     <*+2*>
  3 13565     <**>  disable
  3 13566     <**>  if testbit41 and overvåget then
  3 13567     <**>  begin
  4 13568     <**>    skriv_vt_opd(out,0);
  4 13569     <**>    write(out,<:   modtaget operation:>);
  4 13570     <**>    skriv_op(out,op);
  4 13571     <**>  end;
  3 13572     <*-2*>
  3 13573     
  3 13573     <*+4*>
  3 13574     <**>if op<>vt_op then
  3 13575     <**>begin
  4 13576     <**>  disable begin
  5 13577     <**>    fejlreaktion(11,op,<:vt-opdater:>,1);
  5 13578     <**>    d.op.resultat:= 31; <*systemfejl*>
  5 13579     <**>    signalch(d.op.retur,op,d.op.optype);
  5 13580     <**>  end;
  4 13581     <**>  goto vent_op;
  4 13582     <**>end;
  3 13583     <*-4*>
  3 13584       disable
  3 13585       begin integer opk;
  4 13586     
  4 13586         opk:= d.op.opkode extract 12;
  4 13587         funk:= if opk=11 then 1 else
  4 13588                if opk=12 then 2 else
  4 13589                if opk=13 then 3 else
  4 13590                if opk=19 then 4 else
  4 13591                if opk=20 then 5 else
  4 13592                if opk=24 then 6 else
  4 13593                0;
  4 13594         if funk=0 then fejlreaktion( 2,opk,<:vt_opdater:>,0);
  4 13595       end;
  3 13596       res:= 0;
  3 13597       goto case funk of (indsæt,udtag,omkod,slet,flyt,roker);
  3 13598     \f

  3 13598     message procedure vt_opdater side 3 - 820301/cl;
  3 13599     
  3 13599     indsæt:
  3 13600       begin
  4 13601         integer busnr,ll_id,ll1,omr,gar,sig,tilst,bi,li,s,zi;
  4 13602     <*+4*>
  4 13603     <**> if d.op.data(1) shift (-22) <> 0 then
  4 13604     <**> begin
  5 13605     <**>   res:= 31; fejlreaktion(10,d.op.data(1),<:indsæt busnr:>,1);
  5 13606     <**>   goto slut_indsæt;
  5 13607     <**> end;
  4 13608     <*-4*>
  4 13609         busnr:= d.op.data(1) extract 14;
  4 13610     <*+4*>
  4 13611     <**> if d.op.data(2) shift (-22) <> 1 then
  4 13612     <**> begin
  5 13613     <**>   res:= 31; fejlreaktion(10,d.op.data(2),<:indsæt linie/løb:>,1);
  5 13614     <**>   goto slut_indsæt;
  5 13615     <**> end;
  4 13616     <*-4*>
  4 13617         ll_id:= d.op.data(2);
  4 13618         s:= omr:= d.op.data(4) extract 8;
  4 13619         bi:= søg_omr_bus(busnr,ll1,gar,omr,sig,tilst);
  4 13620         if bi<0 then
  4 13621         begin
  5 13622           if bi=(-1) then res:=10 <*bus ukendt*> else
  5 13623           if s<>0 then res:= 58 <*ulovligt omr*> else res:= 57 <*omr nødv.*>;
  5 13624         end
  4 13625         else
  4 13626         if s<>0 and s<>omr then
  4 13627           res:= 58 <* ulovligt område for bus *>
  4 13628         else
  4 13629         if intg(bustilstand(bi)) <> 0 then
  4 13630           res:=(if intg(bustilstand(bi))=(-1) then 18 <* i kø *>
  4 13631                 else 14 <* optaget *>)
  4 13632         else
  4 13633         begin
  5 13634           if linie_løb_indeks(bi) extract 12 <> 0 then
  5 13635           begin <* linie/løb allerede indsat *>
  6 13636             res:= 11;
  6 13637             d.op.data(3):= linie_løb_tabel(linie_løb_indeks(bi) extract 12);
  6 13638           end
  5 13639           else
  5 13640           begin
  6 13641     \f

  6 13641     message procedure vt_opdater side 3a - 900108/cl;
  6 13642     
  6 13642             if d.op.kilde//100 <> 4 then
  6 13643             res:= opd_omr(11,gar shift 8 +
  6 13644               bustabel1(bi) extract 8,busnr,ll_id);
  6 13645             if res>3 then goto slut_indsæt;
  6 13646             s:= binærsøg(sidste_linie_løb,linie_løb_tabel(li) - ll_id,li);
  6 13647             if s=0 then <* linie/løb findes allerede *>
  6 13648             begin
  7 13649               sig:= busindeks(li) extract 12;
  7 13650               d.op.data(3):= bustabel(sig);
  7 13651               linie_løb_indeks(sig):= false;
  7 13652               disable modiffil(tf_vogntabel,sig,zi);
  7 13653               fil(zi).ll:= 0;
  7 13654               fil(zi).bn:= bustabel(sig) extract 14 add
  7 13655                            (bustabel1(sig) extract 8 shift 14);
  7 13656               opd_log(d.op.kilde,2,bustabel(sig),ll_id,0);
  7 13657     
  7 13657               linie_løb_indeks(bi):= false add li;
  7 13658               busindeks(li):= false add bi;
  7 13659               disable modiffil(tf_vogntabel,bi,zi);
  7 13660               fil(zi).ll:= ll_id;
  7 13661               fil(zi).bn:= bustabel(bi) extract 14 add
  7 13662                            (bustabel1(bi) extract 8 shift 14);
  7 13663               opd_log(d.op.kilde,1,busnr,0,ll_id);
  7 13664               res:= 3;
  7 13665             end
  6 13666             else
  6 13667             begin
  7 13668     \f

  7 13668     message procedure vt_opdater side 4 - 810527/cl;
  7 13669     
  7 13669               if s<0 then li:= li +1;
  7 13670               if sidste_linie_løb=max_antal_linie_løb then
  7 13671               begin
  8 13672                 fejlreaktion(10,max_antal_linie_løb,<:for mange linie/løb:>,1);
  8 13673                 res:= 31;
  8 13674               end
  7 13675               else
  7 13676               begin
  8 13677                 for i:= sidste_linie_løb step -1 until li do
  8 13678                 begin
  9 13679                   linie_løb_tabel(i+1):=linie_løb_tabel(i);
  9 13680                   linie_løb_indeks(bus_indeks(i) extract 12):=false add (i+1);
  9 13681                   bus_indeks(i+1):=bus_indeks(i);
  9 13682                 end;
  8 13683                 sidste_linie_løb:= sidste_linie_løb +1;
  8 13684                 linie_løb_tabel(li):= ll_id;
  8 13685                 linie_løb_indeks(bi):= false add li;
  8 13686                 busindeks(li):= false add bi;
  8 13687                 disable s:= modiffil(tf_vogntabel,bi,zi);
  8 13688                 if s<>0 then fejlreaktion(7,s,<:vt_indsæt:>,0);
  8 13689                 fil(zi).bn:= busnr extract 14 add
  8 13690                              (bustabel1(bi) extract 8 shift 14);
  8 13691                 fil(zi).ll:= ll_id;
  8 13692                 opd_log(d.op.kilde,1,busnr,0,ll_id);
  8 13693                 res:= 3; <* ok *>
  8 13694               end;
  7 13695             end;
  6 13696           end;
  5 13697         end;
  4 13698     slut_indsæt:
  4 13699         d.op.resultat:= res;
  4 13700       end;
  3 13701       goto returner;
  3 13702     \f

  3 13702     message procedure vt_opdater side 5 - 820301/cl;
  3 13703     
  3 13703     udtag:
  3 13704       begin
  4 13705         integer busnr,ll_id,omr,gar,sig,bi,li,s,format,tilst,zi;
  4 13706     
  4 13706         busnr:= ll_id:= 0;
  4 13707         omr:= s:= d.op.data(2) extract 8;
  4 13708         format:= d.op.data(1) shift (-22);
  4 13709         if format=0 then <*busnr*>
  4 13710         begin
  5 13711           busnr:= d.op.data(1) extract 14;
  5 13712           bi:= søg_omr_bus(busnr,ll_id,gar,omr,sig,tilst);
  5 13713           if bi<0 then
  5 13714           begin
  6 13715             if bi=-1 then res:= 10 else
  6 13716             if s<>0 then res:= 58 else res:= 57;
  6 13717             goto slut_udtag;
  6 13718           end;
  5 13719           if bi>0 and s<>0 and s<>omr then
  5 13720           begin
  6 13721             res:= 58; goto slut_udtag;
  6 13722           end;
  5 13723           li:= linie_løb_indeks(bi) extract 12;
  5 13724           busnr:= bustabel(bi);
  5 13725           if li=0 or linie_løb_tabel(li)=0 then
  5 13726           begin <* bus ej indsat *>
  6 13727             res:= 13;
  6 13728             goto slut_udtag;
  6 13729           end;
  5 13730           ll_id:= linie_løb_tabel(li);
  5 13731         end
  4 13732         else
  4 13733         if format=1 then <* linie_løb *>
  4 13734         begin
  5 13735           ll_id:= d.op.data(1);
  5 13736           s:= binærsøg(sidste_linie_løb,linie_løb_tabel(li)-ll_id,li);
  5 13737           if s<>0 then
  5 13738           begin <* linie/løb findes ikke *>
  6 13739             res:= 9;
  6 13740             goto slut_udtag;
  6 13741           end;
  5 13742           bi:= busindeks(li) extract 12;
  5 13743           busnr:= bustabel(bi);
  5 13744         end
  4 13745         else <* ulovlig identifikation *>
  4 13746         begin
  5 13747           res:= 31;
  5 13748           fejlreaktion(10,d.op.data(1),<:udtag ident:>,1);
  5 13749           goto slut_udtag;
  5 13750         end;
  4 13751     \f

  4 13751     message procedure vt_opdater side 6 - 820301/cl;
  4 13752     
  4 13752        tilst:= intg(bustilstand(bi));
  4 13753         if tilst<>0 then
  4 13754         begin
  5 13755           res:= if tilst = -1 then 18<*i kø*> else 14<*optaget*>;
  5 13756           goto slut_udtag;
  5 13757         end;
  4 13758         if d.op.kilde//100 <> 4 then
  4 13759         res:= opd_omr(12, bustabel(bi) shift (-14) extract 8 shift 8 +
  4 13760                 bustabel1(bi) extract 8,bustabel(bi) extract 14,0);
  4 13761         if res>3 then goto slut_udtag;
  4 13762         linie_løb_indeks(bi):= false;
  4 13763         for i:= li step 1 until sidste_linie_løb -1 do
  4 13764         begin
  5 13765           linie_løb_tabel(i):= linie_løb_tabel(i+1);
  5 13766           linie_løb_indeks(bus_indeks(i+1) extract 12):= false add i;
  5 13767           bus_indeks(i):= bus_indeks(i+1);
  5 13768         end;
  4 13769         linie_løb_tabel(sidste_linie_løb):= 0;
  4 13770         bus_indeks(sidste_linie_løb):= false;
  4 13771         sidste_linie_løb:= sidste_linie_løb -1;
  4 13772         disable s:= modif_fil(tf_vogntabel,bi,zi);
  4 13773         if s<>0 then fejlreaktion(7,s,<:vt_udtag:>,0);
  4 13774         fil(zi).ll:= 0;
  4 13775         fil(zi).bn:= busnr add (bustabel1(bi) extract 8 shift 14);
  4 13776         opd_log(d.op.kilde,2,busnr,ll_id,0);
  4 13777         res:= 3; <* ok *>
  4 13778     slut_udtag:
  4 13779         d.op.resultat:= res;
  4 13780         d.op.data(2):= ll_id;
  4 13781         d.op.data(3):= busnr;
  4 13782       end;
  3 13783       goto returner;
  3 13784     \f

  3 13784     message procedure vt_opdater side 7 - 851001/cl;
  3 13785     
  3 13785     omkod:
  3 13786     flyt:
  3 13787     roker:
  3 13788       begin
  4 13789         integer ll_id1,ll_id2,inf1,inf2,i,s,bi1,bi2,li1,li2,tilst,zi,pm1;
  4 13790     
  4 13790         inf1:= inf2:= 0;
  4 13791         ll_id1:= d.op.data(1);
  4 13792         ll_id2:= d.op.data(2);
  4 13793         if ll_id1=ll_id2 then
  4 13794         begin
  5 13795           res:= 24; inf1:= ll_id2;
  5 13796           goto slut_flyt;
  5 13797         end;
  4 13798     <*+4*>
  4 13799     <**>  for i:= 1,2 do
  4 13800     <**>    if d.op.data(i) shift (-22) <> 1 then
  4 13801     <**>    begin
  5 13802     <**>      res:= 31;
  5 13803     <**>      fejlreaktion(10,d.op.data(i),case i of (
  5 13804     <**>        <:omkod/flyt/roker ident1:>,<:omkod/flyt/roker ident2:>),1);
  5 13805     <**>      goto slut_flyt;
  5 13806     <**>    end;
  4 13807     <*-4*>
  4 13808     
  4 13808         s:= binærsøg(sidste_linie_løb,linie_løb_tabel(li1) - ll_id1,li1);
  4 13809         if s<>0 and funk=6 <* roker *> then
  4 13810         begin
  5 13811           i:= ll_id1; ll_id1:= ll_id2; ll_id2:= i;
  5 13812           s:= binærsøg(sidste_linie_løb,linie_løb_tabel(li1) - ll_id1,li1);
  5 13813         end;
  4 13814         if s<>0 then
  4 13815         begin
  5 13816           res:= 9; <* ukendt linie/løb *>
  5 13817           goto slut_flyt;
  5 13818         end;
  4 13819         bi1:= busindeks(li1) extract 12;
  4 13820         inf1:= bustabel(bi1);
  4 13821         tilst:= intg(bustilstand(bi1));
  4 13822         if tilst<>0 then <* bus ikke fri *>
  4 13823         begin
  5 13824           res:= if tilst=-1 then 18 <* i kø *> else 14 <*optaget*>;
  5 13825           goto slut_flyt;
  5 13826         end;
  4 13827     \f

  4 13827     message procedure vt_opdater side 7a- 851001/cl;
  4 13828         if d.op.kilde//100 <> 4 then
  4 13829     
  4 13829         res:= opd_omr(11, bustabel(bi1) shift (-14) extract 8 shift 8 +
  4 13830                 bustabel1(bi1) extract 8, inf1 extract 14, ll_id2);
  4 13831         if res>3 then goto slut_flyt;
  4 13832     
  4 13832         s:= binærsøg(sidste_linie_løb,linie_løb_tabel(li2) - ll_id2,li2);
  4 13833         if s=0 then
  4 13834         begin <* ll_id2 er indkodet *>
  5 13835           bi2:= busindeks(li2) extract 12;
  5 13836           inf2:= bustabel(bi2);
  5 13837           tilst:= intg(bustilstand(bi2));
  5 13838           if funk=3 then res:= 12 <* ulovlig ved omkod *> else
  5 13839           if tilst=-1 then res:= 18 else if tilst<>0 then res:= 14;
  5 13840           if res>3 then
  5 13841           begin
  6 13842             inf1:= inf2; inf2:= 0;
  6 13843             goto slut_flyt;
  6 13844           end;
  5 13845     
  5 13845           if d.op.kilde//100 <> 4 then
  5 13846           res:= opd_omr(11, bustabel(bi2) shift (-14) extract 8 shift 8 +
  5 13847                   bustabel1(bi2) extract 8, inf2 extract 14, ll_id1);
  5 13848           if res>3 then goto slut_flyt;
  5 13849     
  5 13849           <* flyt bus *>
  5 13850           if funk=6 then
  5 13851             linie_løb_indeks(bi2):= false add li1
  5 13852           else
  5 13853             linie_løb_indeks(bi2):= false;
  5 13854           linie_løb_indeks(bi1):= false add li2;
  5 13855           if funk=6 then
  5 13856             busindeks(li1):= false add bi2
  5 13857           else
  5 13858             busindeks(li1):= false;
  5 13859           busindeks(li2):= false add bi1;
  5 13860     
  5 13860          if funk<>6 then
  5 13861          begin
  6 13862           <* fjern ll_id1 *>
  6 13863           for i:= li1 step 1 until sidste_linie_løb - 1 do
  6 13864           begin
  7 13865             linie_løb_tabel(i):= linie_løb_tabel(i+1);
  7 13866             linie_løb_indeks(intg(busindeks(i+1))):= false add i;
  7 13867             busindeks(i):= busindeks(i+1);
  7 13868           end;
  6 13869           linie_løb_tabel(sidste_linie_løb):= 0;
  6 13870           bus_indeks(sidste_linie_løb):= false;
  6 13871           sidste_linie_løb:= sidste_linie_løb-1;
  6 13872          end;
  5 13873     
  5 13873           <* opdater vogntabelfil *>
  5 13874           disable s:= modiffil(tf_vogntabel,bi2,zi);
  5 13875           if s<>0 then fejlreaktion(7,s,<:vt-omkod/flyt:>,0);
  5 13876           fil(zi).ll:= if funk=6 then ll_id1 else 0;
  5 13877           fil(zi).bn:= inf2 extract 14 add (bustabel1(bi2) extract 8 shift 14);
  5 13878           if funk=6 then
  5 13879             opd_log(d.op.kilde,3,bustabel(bi2),ll_id2,ll_id1)
  5 13880           else
  5 13881             opd_log(d.op.kilde,2,bustabel(bi2),ll_id2,0);
  5 13882           disable s:= modiffil(tf_vogntabel,bi1,zi);
  5 13883           if s<>0 then fejlreaktion(7,s,<:vt-omkod/flyt:>,0);
  5 13884           fil(zi).ll:= ll_id2;
  5 13885           fil(zi).bn:= inf1 extract 14 add (bustabel1(bi1) extract 8 shift 14);
  5 13886           opd_log(d.op.kilde,3,bustabel(bi1),ll_id1,ll_id2);
  5 13887     \f

  5 13887     message procedure vt_opdater side 8 - 820301/cl;
  5 13888     
  5 13888         end <* ll_id2 indkodet *>
  4 13889         else
  4 13890         begin
  5 13891           if sign(s)=sign(li2-li1) then li2:=li2-sign(s);
  5 13892           <* li2 skal være indeks for sidste linie/løb der skal flyttes i vt *>
  5 13893           pm1:= sgn(li2-li1);
  5 13894           for i:= li1 step pm1 until li2-pm1 do
  5 13895           begin
  6 13896             linie_løb_tabel(i):= linie_løb_tabel(i+pm1);
  6 13897             busindeks(i):= busindeks(i+pm1);
  6 13898             linie_løb_indeks(intg(busindeks(i+pm1))):= false add i;
  6 13899           end;
  5 13900           linie_løb_tabel(li2):= ll_id2;
  5 13901           busindeks(li2):= false add bi1;
  5 13902           linie_løb_indeks(bi1):= false add li2;
  5 13903           disable s:= modiffil(tf_vogntabel,bi1,zi);
  5 13904           if s<>0 then fejlreaktion(7,s,<:vt-omkod/flyt:>,0);
  5 13905           fil(zi).ll:= ll_id2;
  5 13906           fil(zi).bn:= inf1 extract 14 add (bustabel1(bi1) extract 8 shift 14);
  5 13907           opd_log(d.op.kilde,3,bustabel(bi1),ll_id1,ll_id2);
  5 13908         end;
  4 13909         res:= 3; <*udført*>
  4 13910     slut_flyt:
  4 13911         d.op.resultat:= res;
  4 13912         d.op.data(3):= inf1;
  4 13913         if funk=5 then d.op.data(4):= inf2;
  4 13914       end;
  3 13915       goto returner;
  3 13916     \f

  3 13916     message procedure vt_opdater side 9 - 851001/cl;
  3 13917     
  3 13917     slet:
  3 13918       begin
  4 13919         integer flin,slin,finx,sinx,s,li,bi,omr,gar;
  4 13920         boolean test24;
  4 13921     
  4 13921         if d.op.data(2)=0 then d.op.data(2):= d.op.data(1);
  4 13922         omr:= d.op.data(3);
  4 13923     
  4 13923         if d.op.data(1) > d.op.data(2) then
  4 13924         begin
  5 13925           res:= 44; <* intervalstørrelse ulovlig *>
  5 13926           goto slut_slet;
  5 13927         end;
  4 13928     
  4 13928         flin:= (1 shift 22) + (d.op.data(1) extract 21 shift 7);
  4 13929         slin:= (1 shift 22) + (d.op.data(2) extract 21 shift 7) + 127;
  4 13930     
  4 13930         s:= binærsøg(sidste_linie_løb, (linie_løb_tabel(finx)-flin), finx);
  4 13931         if s<0 then finx:= finx+1;
  4 13932         s:= binærsøg(sidste_linie_løb, (linie_løb_tabel(sinx)-slin), sinx);
  4 13933         if s>0 then sinx:= sinx-1;
  4 13934     
  4 13934         for li:= finx step 1 until sinx do
  4 13935         begin
  5 13936           bi:= busindeks(li) extract 12;
  5 13937           gar:= bustabel(bi) shift (-14) extract 8;
  5 13938           if intg(bustilstand(bi))=0 and 
  5 13939              (omr = 0 or (omr > 0 and omr = gar) or
  5 13940               (omr < 0 and omr extract 8 = bustabel1(bi) extract 8)) then
  5 13941           begin
  6 13942             opd_log(d.op.kilde,2,bustabel(bi),linie_løb_tabel(li),0);
  6 13943             linie_løb_indeks(bi):= busindeks(li):= false;
  6 13944             linie_løb_tabel(li):= 0;
  6 13945           end;
  5 13946         end;
  4 13947     \f

  4 13947     message procedure vt_opdater side 10 - 850820/cl;
  4 13948     
  4 13948         sinx:= finx-1;
  4 13949         for li:= finx step 1 until sidste_linie_løb do
  4 13950         begin
  5 13951           if linie_løb_tabel(li)<>0 then
  5 13952           begin
  6 13953             sinx:= sinx+1;
  6 13954             if sinx<>li then
  6 13955             begin
  7 13956               linie_løb_tabel(sinx):= linie_løb_tabel(li);
  7 13957               busindeks(sinx):= busindeks(li);
  7 13958               linie_løb_indeks(busindeks(sinx) extract 12):= false add sinx;
  7 13959               linie_løb_tabel(li):= 0;
  7 13960               busindeks(li):= false;
  7 13961             end;
  6 13962           end;
  5 13963         end;
  4 13964         sidste_linie_løb:= sinx;
  4 13965     
  4 13965         test24:= testbit24; testbit24:= false;
  4 13966         for bi:= 1 step 1 until sidste_bus do 
  4 13967         disable
  4 13968         begin
  5 13969           s:= modiffil(tf_vogntabel,bi,finx);
  5 13970           if s<>0 then fejlreaktion(7,s,<:vt-slet:>,0);
  5 13971           fil(finx).bn:= bustabel(bi) extract 14 add
  5 13972                          (bustabel1(bi) extract 8 shift 14);
  5 13973           fil(finx).ll:= linie_løb_tabel(linie_løb_indeks(bi) extract 12);
  5 13974         end;
  4 13975         testbit24:= test24;
  4 13976         res:= 3;
  4 13977     
  4 13977     slut_slet:
  4 13978         d.op.resultat:= res;
  4 13979       end;
  3 13980       goto returner;
  3 13981     \f

  3 13981     message procedure vt_opdater side 11 - 810409/cl;
  3 13982     
  3 13982     returner:
  3 13983       disable
  3 13984       begin
  4 13985     
  4 13985     <*+2*>
  4 13986     <**>  if testbit40 and overvåget then
  4 13987     <**>  begin
  5 13988     <**>    skriv_vt_opd(out,0);
  5 13989     <**>    write(out,<:   vogntabel efter ændring:>);
  5 13990     <**>    p_vogntabel(out);
  5 13991     <**>  end;
  4 13992     <**>  if testbit41 and overvåget then
  4 13993     <**>  begin
  5 13994     <**>    skriv_vt_opd(out,0);
  5 13995     <**>    write(out,<:   returner operation:>);
  5 13996     <**>    skriv_op(out,op);
  5 13997     <**>  end;
  4 13998     <*-2*>
  4 13999     
  4 13999         signalch(d.op.retur,op,d.op.optype);
  4 14000       end;
  3 14001       goto vent_op;
  3 14002     
  3 14002     vt_opd_trap:
  3 14003       disable skriv_vt_opd(zbillede,1);
  3 14004     
  3 14004     end vt_opdater;
  2 14005     \f

  2 14005     message procedure vt_tilstand side 1 - 810424/cl;
  2 14006     
  2 14006     procedure vt_tilstand(cs_fil,fil_opref);
  2 14007       value               cs_fil,fil_opref;
  2 14008       integer             cs_fil,fil_opref;
  2 14009     begin
  3 14010       integer array field op,filop;
  3 14011       integer funk,format,busid,res,bi,tilst,opk,opk_indeks,
  3 14012               g_type,gr,antal,ej_res,zi,li,filref;
  3 14013       integer array identer(1:max_antal_i_gruppe);
  3 14014     
  3 14014       procedure skriv_vt_tilst(zud,omfang);
  3 14015         value                      omfang;
  3 14016         zone                   zud;
  3 14017         integer                    omfang;
  3 14018       begin
  4 14019         real array field raf;
  4 14020         raf:= 0;
  4 14021         write(zud,"nl",1,<:+++ vt_tilstand          :>);
  4 14022         if omfang <> 0 then
  4 14023         begin
  5 14024           skriv_coru(zud,abs curr_coruno);
  5 14025           write(zud,"nl",1,<<d>,
  5 14026             <:cs-fil     :>,cs_fil,"nl",1,
  5 14027             <:filop      :>,filop,"nl",1,
  5 14028             <:op         :>,op,"nl",1,
  5 14029             <:funk       :>,funk,"nl",1,
  5 14030             <:format     :>,format,"nl",1,
  5 14031             <:busid      :>,busid,"nl",1,
  5 14032             <:res        :>,res,"nl",1,
  5 14033             <:bi         :>,bi,"nl",1,
  5 14034             <:tilst      :>,tilst,"nl",1,
  5 14035             <:opk        :>,opk,"nl",1,
  5 14036             <:opk-indeks :>,opk_indeks,"nl",1,
  5 14037             <:g-type     :>,g_type,"nl",1,
  5 14038             <:gr         :>,gr,"nl",1,
  5 14039             <:antal      :>,antal,"nl",1,
  5 14040             <:ej-res     :>,ej_res,"nl",1,
  5 14041             <:zi         :>,zi,"nl",1,
  5 14042             <:li         :>,li,"nl",1,
  5 14043             <::>);
  5 14044           write(zud,"nl",1,<:identer:>);
  5 14045           skriv_hele(zud,identer.raf,max_antal_i_gruppe*2,2);
  5 14046         end;
  4 14047       end;
  3 14048     
  3 14048         procedure sorter_gruppe(tab,l,u);
  3 14049           value                     l,u;
  3 14050           integer array         tab;
  3 14051           integer                   l,u;
  3 14052         begin
  4 14053           integer array field ii,jj;
  4 14054           integer array ww, xx(1:2);
  4 14055     
  4 14055           integer procedure sml(a,b);
  4 14056             integer array       a,b;
  4 14057           begin
  5 14058             integer res;
  5 14059     
  5 14059             res:= sign((a(1) shift (-8) extract 4) - (b(1) shift (-8) extract 4));
  5 14060             if res = 0 then
  5 14061               res:= sign((b(1) shift (-18)) - (a(1) shift (-18)));
  5 14062             if res = 0 then
  5 14063               res:=
  5 14064                  sign((a(1) shift (-12) extract 6) - (b(1) shift (-12) extract 6));
  5 14065             if res = 0 then
  5 14066               res:= sign((a(2) extract 14) - (b(2) extract 14));
  5 14067             sml:= res;
  5 14068           end;
  4 14069     
  4 14069           ii:= ((l+u)//2 - 1)*4;
  4 14070           tofrom(xx,tab.ii,4);
  4 14071           ii:= (l-1)*4; jj:= (u-1)*4;
  4 14072           repeat
  4 14073             while sml(tab.ii,xx) < 0 do ii:= ii+4;
  4 14074             while sml(xx,tab.jj) < 0 do jj:= jj-4;
  4 14075             if ii <= jj then
  4 14076             begin
  5 14077               tofrom(ww,tab.ii,4);
  5 14078               tofrom(tab.ii,tab.jj,4);
  5 14079               tofrom(tab.jj,ww,4);
  5 14080               ii:= ii+4;
  5 14081               jj:= jj-4;
  5 14082             end;
  4 14083           until ii>jj;
  4 14084           if l < jj//4+1 then sorter_gruppe(tab,l,jj//4+1);
  4 14085           if ii//4+1 < u then sorter_gruppe(tab,ii//4+1,u);
  4 14086         end;
  3 14087     \f

  3 14087     message procedure vt_tilstand side 2 - 820301/cl;
  3 14088     
  3 14088       filop:= filopref;
  3 14089       stackclaim(if cm_test then 550 else 500);
  3 14090       trap(vt_tilst_trap);
  3 14091     
  3 14091     <*+2*>
  3 14092     <**> disable if testbit47 and overvåget or testbit28 then
  3 14093     <**>   skriv_vt_tilst(out,0);
  3 14094     <*-2*>
  3 14095     
  3 14095     vent_op:
  3 14096       waitch(cs_vt_tilst,op,vt_optype or gen_optype,-1);
  3 14097     <*+2*>disable
  3 14098     <**>  if (testbit41 and overvåget) or
  3 14099              (testbit46 and overvåget and
  3 14100               (d.op.opkode extract 12 = 16 or d.op.opkode extract 12 = 18))
  3 14101           then
  3 14102     <**>  begin
  4 14103     <**>    skriv_vt_tilst(out,0);
  4 14104     <**>    write(out,<:   modtaget operation:>);
  4 14105     <**>    skriv_op(out,op);
  4 14106     <**>  end;
  3 14107     <*-2*>
  3 14108     
  3 14108     <*+4*>
  3 14109     <**>  if op <> vt_op then
  3 14110     <**>  begin
  4 14111     <**>    disable begin
  5 14112     <**>      d.op.resultat:= 31;
  5 14113     <**>      fejlreaktion(11,op,<:vt-tilstand:>,1);
  5 14114     <**>  end;
  4 14115     <**>  goto returner;
  4 14116     <**>  end;
  3 14117     <*-4*>
  3 14118     
  3 14118         opk:= d.op.opkode extract 12;
  3 14119         funk:= if opk = 14 <*bus i kø*> then 1 else
  3 14120                if opk = 15 <*bus res *> then 2 else
  3 14121                if opk = 16 <*grp res *> then 4 else
  3 14122                if opk = 17 <*bus fri *> then 3 else
  3 14123                if opk = 18 <*grp fri *> then 5 else
  3 14124                0;
  3 14125         if funk = 0 then fejlreaktion(2,opk,<:vt_tilstand:>,0);
  3 14126         res:= 0;
  3 14127         format:= d.op.data(1) shift (-22);
  3 14128     
  3 14128       goto case funk of(enkelt_bus,enkelt_bus,enkelt_bus,grp_res,grp_fri);
  3 14129     \f

  3 14129     message procedure vt_tilstand side 3 - 820301/cl;
  3 14130     
  3 14130     enkelt_bus:
  3 14131       <* sæt enkelt bus i kø, reserver eller frigiv enkelt bus *>
  3 14132       disable
  3 14133       begin integer busnr,i,s,tilst,ll,gar,omr,sig;
  4 14134     <*+4*>
  4 14135     <**>if format <> 0 and format <> 1 then
  4 14136     <**>begin
  5 14137     <**>  res:= 31;
  5 14138     <**>  fejlreaktion(10,d.op.data(1),<:tilstand ident:>,1);
  5 14139     <**>  goto slut_enkelt_bus;
  5 14140     <**>end;
  4 14141     <*-4*>
  4 14142         <* find busnr og tilstand *>
  4 14143         case format+1 of
  4 14144         begin
  5 14145           <* 0: budident *>
  5 14146           begin
  6 14147             busnr:= d.op.data(1) extract 14;
  6 14148             s:= omr:= d.op.data(4) extract 8;
  6 14149             bi:= søg_omr_bus(busnr,ll,gar,omr,sig,tilst);
  6 14150             if bi<0 then
  6 14151             begin
  7 14152               res:= if bi=(-1) then 10 else (if s<>0 then 58 else 57);
  7 14153               goto slut_enkelt_bus;
  7 14154             end
  6 14155             else
  6 14156             begin
  7 14157               tilst:= intg(bustilstand(bi));
  7 14158             end;
  6 14159           end;
  5 14160     
  5 14160           <* 1: linie_løb_ident *>
  5 14161           begin
  6 14162             bi:= findbusnr(d.op.data(1),busnr,i,tilst);
  6 14163             if bi < 0 then <* ukendt linie_løb *>
  6 14164             begin
  7 14165               res:= 9;
  7 14166               goto slut_enkelt_bus;
  7 14167             end;
  6 14168           end;
  5 14169         end case;
  4 14170     \f

  4 14170     message procedure vt_tilstand side 4 - 830310/cl;
  4 14171     
  4 14171         if funk < 3 then
  4 14172         begin
  5 14173           d.op.data(2):= if linie_løb_indeks(bi) extract 12 <> 0 then
  5 14174                            linie_løb_tabel(linie_løb_indeks(bi) extract 12)
  5 14175                          else 0;
  5 14176           d.op.data(3):= bustabel(bi);
  5 14177           d.op.data(4):= bustabel1(bi);
  5 14178         end;
  4 14179     
  4 14179         <* check tilstand *>
  4 14180         if funk = 3 <*frigiv*> and tilst >= 0 <*fri/optaget_i_gruppe*> then
  4 14181           res:= 39 <* bus ikke reserveret *>
  4 14182         else
  4 14183         if tilst <> 0 and tilst <> (-1) and funk < 3 then
  4 14184           res:= 14 <* bus optaget *>
  4 14185         else
  4 14186         if funk = 1 <* i kø *>  and tilst = (-1) then
  4 14187           res:= 18 <* i kø *>
  4 14188         else
  4 14189           res:= 3; <*udført*>
  4 14190     
  4 14190         if res = 3 then
  4 14191           bustilstand(bi):= false add (case funk of (-1,-2,0));
  4 14192     
  4 14192     slut_enkelt_bus:
  4 14193         d.op.resultat:= res;
  4 14194       end <*disable*>;
  3 14195       goto returner;
  3 14196     \f

  3 14196     message procedure vt_tilstand side 5 - 810424/cl;
  3 14197     
  3 14197     grp_res:  <* reserver gruppe *>
  3 14198       disable
  3 14199       begin
  4 14200     
  4 14200     <*+4*>
  4 14201     <**>  if format <> 2 then
  4 14202     <**>  begin
  5 14203     <**>    res:= 31;
  5 14204     <**>    fejlreaktion(10,d.op.data(1),<:tilstand ident:>,1);
  5 14205     <**>    goto slut_grp_res_1;
  5 14206     <**>  end;
  4 14207     <*-4*>
  4 14208     
  4 14208         <* find frit indeks i opkaldstabel *>
  4 14209         opk_indeks:= 0;
  4 14210         for i:= max_antal_gruppeopkald step -1 until 1 do
  4 14211         begin
  5 14212           if gruppeopkald(i,1)=0 then opk_indeks:= i <*fri plads*> else
  5 14213           if gruppeopkald(i,1)=d.op.data(1) then res:= 15 <*optaget*>;
  5 14214         end;
  4 14215         if opk_indeks = 0 then res:= 32; <* ingen plads *>
  4 14216         if res <> 0 then goto slut_grp_res_1;
  4 14217         g_type:= d.op.data(1) shift (-21) extract 1;
  4 14218         if g_type = 1 <*special gruppe*> then
  4 14219         begin <*check eksistens*>
  5 14220           gr:= 0;
  5 14221           for i:= 1 step 1 until max_antal_grupper do
  5 14222             if gruppetabel(i) = d.op.data(1) then gr:= i;
  5 14223           if gr = 0 then <*gruppe ukendt*>
  5 14224           begin
  6 14225             res:= 8;
  6 14226             goto slut_grp_res_1;
  6 14227           end;
  5 14228         end;
  4 14229     
  4 14229         <* reserver i opkaldstabel *>
  4 14230         gruppeopkald(opk_indeks,1):= d.op.data(1);
  4 14231     \f

  4 14231     message procedure vt_tilstand side 6 - 810428/cl;
  4 14232     
  4 14232         <* tilknyt fil *>
  4 14233         start_operation(filop,curr_coruid,cs_fil,101);
  4 14234         d.filop.data(1):= 0;  <*postantal*>
  4 14235         d.filop.data(2):= 256;  <*postlængde*>
  4 14236         d.filop.data(3):= 1;  <*segmentantal*>
  4 14237         d.filop.data(4):= 2 shift 10;  <*spool fil*>
  4 14238         signalch(cs_opret_fil,filop,vt_optype);
  4 14239     
  4 14239     slut_grp_res_1:
  4 14240         if res <> 0 then d.op.resultat:= res;
  4 14241       end;
  3 14242       if res <> 0 then goto returner;
  3 14243     
  3 14243       waitch(cs_fil,filop,vt_optype,-1);
  3 14244     
  3 14244       <* check filsys-resultat *>
  3 14245       if d.filop.data(9) <> 0 then
  3 14246         fejlreaktion(13,d.filop.data(9),<:gruppe,res:>,0);
  3 14247       filref:= d.filop.data(4);
  3 14248     \f

  3 14248     message procedure vt_tilstand side 7 - 820301/cl;
  3 14249       disable if g_type = 0 <*linie-gruppe*> then
  3 14250       begin
  4 14251         integer s,i,ll_id;
  4 14252         integer array field iaf1;
  4 14253     
  4 14253         ll_id:= 1 shift 22 + d.op.data(1) shift 7;
  4 14254         iaf1:= 2;
  4 14255         s:= binærsøg(sidste_linie_løb,
  4 14256               linie_løb_tabel(i) - ll_id, i);
  4 14257         if s < 0 then i:= i +1;
  4 14258         antal:= ej_res:= 0;
  4 14259         skrivfil(filref,1,zi);
  4 14260         if i <= sidste_linie_løb then
  4 14261         begin
  5 14262           while linie_løb_tabel(i) shift (-7) shift 7 = ll_id do
  5 14263           begin
  6 14264             if (intg(bustilstand(intg(busindeks(i))))<>0) or
  6 14265                (bustabel1(intg(busindeks(i))) extract 8 <> 3) then
  6 14266               ej_res:= ej_res+1
  6 14267             else
  6 14268             begin
  7 14269               antal:= antal+1;
  7 14270               bi:= busindeks(i) extract 12;
  7 14271               fil(zi).iaf1(1):=
  7 14272                 område_id( bustabel1(bi) extract 8, 2) extract 12 shift 12 +
  7 14273                 (bustabel1(bi) shift (-23) + 1) shift 8 + 1;
  7 14274               fil(zi).iaf1(2):= bustabel(bi);
  7 14275               iaf1:= iaf1+4;
  7 14276               bustilstand(bi):= false add opk_indeks;
  7 14277             end;
  6 14278             i:= i +1;
  6 14279             if i > sidste_linie_løb then goto slut_l_grp;
  6 14280           end;
  5 14281         end;
  4 14282     \f

  4 14282     message procedure vt_tilstand side 8 - 820301/cl;
  4 14283     
  4 14283     slut_l_grp:
  4 14284       end
  3 14285       else
  3 14286       begin <*special gruppe*>
  4 14287         integer i,s,li,omr,gar,tilst;
  4 14288         integer array field iaf1;
  4 14289     
  4 14289         iaf1:= 2;
  4 14290         antal:= ej_res:= 0;
  4 14291         s:= læsfil(tf_gruppedef,gr,zi);
  4 14292         if s <> 0 then fejlreaktion(5,s,<:gruppe,res:>,0);
  4 14293         tofrom(identer,fil(zi),max_antal_i_gruppe*2);
  4 14294         s:= skrivfil(filref,1,zi);
  4 14295         if s<>0 then fejlreaktion(6,s,<:gruppe,res:>,0);
  4 14296         i:= 1;
  4 14297         while identer(i) <> 0 do
  4 14298         begin
  5 14299           if identer(i) shift (-22) = 0 then
  5 14300           begin <*busident*>
  6 14301             omr:= 0;
  6 14302             bi:= søg_omr_bus(identer(i),li,gar,omr,s,tilst);
  6 14303             if bi<0 then goto næste_ident;
  6 14304             li:= linie_løb_indeks(bi) extract 12;
  6 14305           end
  5 14306           else
  5 14307           begin <*linie/løb ident*>
  6 14308             s:= binærsøg(sidste_linie_løb,
  6 14309                   linie_løb_tabel(li) - identer(i), li);
  6 14310             if s <> 0 then goto næste_ident;
  6 14311             bi:= busindeks(li) extract 12;
  6 14312           end;
  5 14313           if (intg(bustilstand(bi))<>0) or
  5 14314              (bustabel1(bi) extract 8 <> 3) then
  5 14315             ej_res:= ej_res+1
  5 14316           else
  5 14317           begin
  6 14318             antal:= antal +1;
  6 14319             fil(zi).iaf1(1):=
  6 14320               område_id( bustabel1(bi) extract 8, 2) extract 12 shift 12 +
  6 14321               (bustabel1(bi) shift (-23) + 1) shift 8 + 1;
  6 14322             fil(zi).iaf1(2):= bustabel(bi);
  6 14323             iaf1:= iaf1+4;
  6 14324             bustilstand(bi):= false add opk_indeks;
  6 14325           end;
  5 14326     næste_ident:
  5 14327           i:= i +1;
  5 14328           if i > max_antal_i_gruppe then goto slut_s_grp;
  5 14329         end;
  4 14330     slut_s_grp:
  4 14331       end;
  3 14332     \f

  3 14332     message procedure vt_tilstand side 9 - 820301/cl;
  3 14333     
  3 14333       if antal > 0 then <*ok*>
  3 14334       disable begin
  4 14335         integer array field spec,akt;
  4 14336         integer a;
  4 14337         integer field antal_spec;
  4 14338     
  4 14338         antal_spec:= 2; a:= 0;
  4 14339         spec:= 2; akt:= 2;
  4 14340         sorter_gruppe(fil(zi).spec,1,antal);
  4 14341         fil(zi).antal_spec:= 0;
  4 14342         while akt//4 < antal do
  4 14343         begin
  5 14344           fil(zi).spec(1):= fil(zi).akt(1) shift (-8) shift 8;
  5 14345           a:= 0;
  5 14346           while fil(zi).akt(1) shift (-8) = fil(zi).spec(1) shift (-8)
  5 14347             and a<15 do
  5 14348           begin
  6 14349             a:= a+1;
  6 14350             fil(zi).spec(1+a):= fil(zi).akt(2) extract 14;
  6 14351             akt:= akt+4;
  6 14352           end;
  5 14353           fil(zi).spec(1):= fil(zi).spec(1) + a;
  5 14354           fil(zi).antal_spec:= fil(zi).antal_spec+1;
  5 14355           spec:= spec + 2*a + 2;
  5 14356         end;
  4 14357         antal:= fil(zi).antal_spec;
  4 14358         gruppeopkald(opk_indeks,2):= filref;
  4 14359         d.op.resultat:= 3;
  4 14360         d.op.data(2):= antal;
  4 14361         d.op.data(3):= filref;
  4 14362         d.op.data(4):= ej_res;
  4 14363       end
  3 14364       else
  3 14365       begin
  4 14366         disable begin
  5 14367           d.filop.opkode:= 104; <*slet fil*>
  5 14368           signalch(cs_slet_fil,filop,vt_optype);
  5 14369           gruppeopkald(opk_indeks,1):= 0; <*fri*>
  5 14370           d.op.resultat:= 54;
  5 14371           d.op.data(2):= antal;
  5 14372           d.op.data(3):= 0;
  5 14373           d.op.data(4):= ej_res;
  5 14374         end;
  4 14375         waitch(cs_fil,filop,vt_optype,-1);
  4 14376         if d.filop.data(9) <> 0 then
  4 14377           fejlreaktion(16,d.filop.data(9),<:gruppe,res:>,0);
  4 14378       end;
  3 14379       goto returner;
  3 14380     \f

  3 14380     message procedure vt_tilstand side 10 - 820301/cl;
  3 14381     
  3 14381     grp_fri:  <* frigiv gruppe *>
  3 14382       disable
  3 14383       begin integer i,j,s,ll,gar,omr,tilst;
  4 14384         integer array field spec;
  4 14385     
  4 14385     <*+4*>
  4 14386     <**>  if format <> 2 then
  4 14387     <**>  begin
  5 14388     <**>    res:= 31;
  5 14389     <**>    fejlreaktion(10,d.op.data(1),<:tilstand ident:>,1);
  5 14390     <**>    goto slut_grp_fri;
  5 14391     <**>  end;
  4 14392     <*-4*>
  4 14393     
  4 14393         <* find indeks i opkaldstabel *>
  4 14394         opk_indeks:= 0;
  4 14395         for i:= 1 step 1 until max_antal_gruppeopkald do
  4 14396           if gruppeopkald(i,1) = d.op.data(1) then opk_indeks:= i;
  4 14397         if opk_indeks = 0 <*ikke fundet*> then
  4 14398         begin
  5 14399           res:= 40; <*gruppe ej reserveret*>
  5 14400           goto slut_grp_fri;
  5 14401         end;
  4 14402         filref:= gruppeopkald(opk_indeks,2);
  4 14403         start_operation(filop,curr_coruid,cs_fil,104);
  4 14404         d.filop.data(4):= filref;
  4 14405         hentfildim(d.filop.data);
  4 14406         læsfil(filref,1,zi);
  4 14407         spec:= 0;
  4 14408         antal:= fil(zi).spec(1);
  4 14409         spec:= spec+2;
  4 14410         for i:= 1 step 1 until antal do
  4 14411         begin
  5 14412           for j:= 1 step 1 until fil(zi).spec(1) extract 8 do
  5 14413           begin
  6 14414             busid:= fil(zi).spec(1+j) extract 14;
  6 14415             omr:= 0;
  6 14416             bi:= søg_omr_bus(busid,ll,gar,omr,s,tilst);
  6 14417             if bi>=0 then bustilstand(bi):= false;
  6 14418           end;
  5 14419           spec:= spec + 2*(fil(zi).spec(1) extract 8) + 2;
  5 14420         end;
  4 14421     
  4 14421     slut_grp_fri:
  4 14422         d.op.resultat:= res;
  4 14423       end;
  3 14424       if res <> 0 then goto returner;
  3 14425       gruppeopkald(opk_indeks,1):= gruppeopkald(opk_indeks,2):= 0;
  3 14426       signalch(cs_slet_fil,filop,vt_optype);
  3 14427     \f

  3 14427     message procedure vt_tilstand side 11 - 810424/cl;
  3 14428     
  3 14428       waitch(cs_fil,filop,vt_optype,-1);
  3 14429     
  3 14429       if d.filop.data(9) <> 0 then
  3 14430         fejlreaktion(16,d.filop.data(9),<:gruppe,fri:>,0);
  3 14431       d.op.resultat:= 3;
  3 14432     
  3 14432     returner:
  3 14433       disable
  3 14434       begin
  4 14435     <*+2*>
  4 14436     <**>  if testbit40 and overvåget then
  4 14437     <**>  begin
  5 14438     <**>    skriv_vt_tilst(out,0);
  5 14439     <**>    write(out,<:   vogntabel efter ændring:>);
  5 14440     <**>    p_vogntabel(out);
  5 14441     <**>  end;
  4 14442     <**>  if testbit43 and overvåget and (funk=4 or funk=5) then
  4 14443     <**>  begin
  5 14444     <**>    skriv_vt_tilst(out,0); write(out,<:   gruppetabel efter ændring:>);
  5 14445     <**>    p_gruppetabel(out);
  5 14446     <**>  end;
  4 14447     <**>  if (testbit41 and overvåget) or
  4 14448     <**>     (testbit46 and overvåget and (funk=4 or funk=5)) then
  4 14449     <**>  begin
  5 14450     <**>    skriv_vt_tilst(out,0);
  5 14451     <**>    write(out,<:   returner operation:>);
  5 14452     <**>    skriv_op(out,op);
  5 14453     <**>  end;
  4 14454     <*-2*>
  4 14455         signalch(d.op.retur,op,d.op.optype);
  4 14456       end;
  3 14457       goto vent_op;
  3 14458     
  3 14458     vt_tilst_trap:
  3 14459       disable skriv_vt_tilst(zbillede,1);
  3 14460     
  3 14460     end vt_tilstand;
  2 14461     \f

  2 14461     message procedure vt_rapport side 1 - 810428/cl;
  2 14462     
  2 14462     procedure vt_rapport(cs_fil,fil_opref);
  2 14463       value              cs_fil,fil_opref;
  2 14464       integer            cs_fil,fil_opref;
  2 14465     begin
  3 14466       integer array field op,filop;
  3 14467       integer funk,filref,antal,id_ant,res;
  3 14468       integer field i1,i2;
  3 14469     
  3 14469       procedure skriv_vt_rap(z,omfang);
  3 14470         value                  omfang;
  3 14471         zone                 z;
  3 14472         integer                omfang;
  3 14473       begin
  4 14474         write(z,"nl",1,<:+++ vt_rapport           :>);
  4 14475         if omfang <> 0 then
  4 14476         begin
  5 14477           skriv_coru(z,abs curr_coruno);
  5 14478           write(z,"nl",1,<<d>,
  5 14479             <:  cs_fil  :>,cs_fil,"nl",1,
  5 14480             <:  filop   :>,filop,"nl",1,
  5 14481             <:  op      :>,op,"nl",1,
  5 14482             <:  funk    :>,funk,"nl",1,
  5 14483             <:  filref  :>,filref,"nl",1,
  5 14484             <:  antal   :>,antal,"nl",1,
  5 14485             <:  id-ant  :>,id_ant,"nl",1,
  5 14486             <:  res     :>,res,"nl",1,
  5 14487             <::>);
  5 14488     
  5 14488           end;
  4 14489       end skriv_vt_rap;
  3 14490     
  3 14490       stackclaim(if cm_test then 198 else 146);
  3 14491       filop:= fil_opref;
  3 14492       i1:= 2; i2:= 4;
  3 14493       trap(vt_rap_trap);
  3 14494     
  3 14494     <*+2*>
  3 14495     <**> disable if testbit47 and overvåget or testbit28 then
  3 14496     <**>   skriv_vt_rap(out,0);
  3 14497     <*-2*>
  3 14498     \f

  3 14498     message procedure vt_rapport side 2 - 810505/cl;
  3 14499     
  3 14499     vent_op:
  3 14500       waitch(cs_vt_rap,op,gen_optype or vt_optype,-1);
  3 14501     
  3 14501     <*+2*>
  3 14502     <**>  disable begin
  4 14503     <**>  if testbit41 and overvåget then
  4 14504     <**>  begin
  5 14505     <**>    skriv_vt_rap(out,0);
  5 14506     <**>    write(out,<:   modtaget operation:>);
  5 14507     <**>    skriv_op(out,op);
  5 14508     <**>    ud;
  5 14509     <**>  end;
  4 14510     <**>  end;<*disable*>
  3 14511     <*-2*>
  3 14512     
  3 14512       disable
  3 14513       begin
  4 14514         integer opk;
  4 14515     
  4 14515         opk:= d.op.opkode extract 12;
  4 14516         funk:= if opk = 9 then 1 else
  4 14517                if opk =10 then 2 else
  4 14518                0;
  4 14519         if funk = 0 then fejlreaktion(2,opk,<:vt_gruppe:>,0);
  4 14520     
  4 14520         <* opret og tilknyt fil *>
  4 14521         start_operation(filop,curr_coruid,cs_fil,101);
  4 14522         d.filop.data(1):= 0; <*postantal(midlertidigt)*>
  4 14523         d.filop.data(2):= 2; <*postlængde*>
  4 14524         d.filop.data(3):=10; <*segmenter*>
  4 14525         d.filop.data(4):= 2 shift 10; <*spool fil*>
  4 14526         signalch(cs_opretfil,filop,vt_optype);
  4 14527       end;
  3 14528     
  3 14528       waitch(cs_fil,filop,vt_optype,-1);
  3 14529     
  3 14529       <* check resultat *>
  3 14530       if d.filop.data(9) <> 0 then
  3 14531        fejlreaktion(13,d.filop.data(9),<:vt-rapport:>,0);
  3 14532       filref:= d.filop.data(4);
  3 14533       antal:= 0;
  3 14534       goto case funk of (l_rapport,b_rapport);
  3 14535     \f

  3 14535     message procedure vt_rapport side 3 - 850820/cl;
  3 14536     
  3 14536     l_rapport:
  3 14537       disable
  3 14538       begin
  4 14539         integer i,j,s,ll,zi;
  4 14540         idant:= 0;
  4 14541         for id_ant:= id_ant+1 while d.op.data(id_ant)<>0 and id_ant<5 do 
  4 14542     <*+4*>
  4 14543     <**> if d.op.data(id_ant) shift (-22) <> 2 then
  4 14544     <**> begin
  5 14545     <**>   res:= 31;
  5 14546     <**>   fejlreaktion(10,d.op.data(id_ant),<:l-rapport ident:>,1);
  5 14547     <**>   goto l_rap_slut;
  5 14548     <**> end;
  4 14549     <*-4*>
  4 14550         ;
  4 14551     
  4 14551         for i:= 1 step 1 until id_ant do
  4 14552         begin
  5 14553           ll:= (1 shift 22) + d.op.data(i) extract 15 shift 7;
  5 14554           s:= binærsøg(sidste_linie_løb,
  5 14555                      linie_løb_tabel(j) - ll, j);
  5 14556           if s < 0 then j:= j +1;
  5 14557     
  5 14557           if j<= sidste_linie_løb then
  5 14558           begin <* skriv identer *>
  6 14559             while linie_løb_tabel(j) shift (-7) shift 7 = ll do
  6 14560             begin
  7 14561               antal:= antal +1;
  7 14562               s:= skrivfil(filref,antal,zi);
  7 14563               if s <> 0 then fejlreaktion(6,s,<:vt_rapport:>,0);
  7 14564               fil(zi).i1:= linie_løb_tabel(j);
  7 14565               fil(zi).i2:= bustabel(busindeks(j) extract 12);
  7 14566               j:= j +1;
  7 14567               if j > sidste_bus then goto linie_slut;
  7 14568             end;
  6 14569           end;
  5 14570     linie_slut:
  5 14571         end;
  4 14572         res:= 3;
  4 14573     l_rap_slut:
  4 14574       end <*disable*>;
  3 14575       goto returner;
  3 14576     \f

  3 14576     message procedure vt_rapport side 4 - 820301/cl;
  3 14577     
  3 14577     b_rapport:
  3 14578       disable
  3 14579       begin
  4 14580         integer i,j,s,zi,busnr1,busnr2;
  4 14581     <*+4*>
  4 14582     <**> for i:= 1,2 do
  4 14583     <**>   if d.op.data(i) shift (-14) <> 0 then
  4 14584     <**>   begin
  5 14585     <**>     res:= 31;
  5 14586     <**>     fejlreaktion(10,d.op.data(i),<:b-rapport ident:>,1);
  5 14587     <**>     goto bus_slut;
  5 14588     <**>   end;
  4 14589     <*-4*>
  4 14590     
  4 14590         busnr1:= d.op.data(1) extract 14;
  4 14591         busnr2:= if d.op.data(2) = 0 then busnr1 else d.op.data(2) extract 14;
  4 14592         if busnr1 = 0 or busnr2 < busnr1 then
  4 14593         begin
  5 14594           res:= 7; <* fejl i busnr *>
  5 14595           goto bus_slut;
  5 14596         end;
  4 14597     
  4 14597         s:= binærsøg(sidste_bus,bustabel(j) extract 14
  4 14598                        - busnr1,j);
  4 14599         if s < 0 then j:= j +1;
  4 14600         while j>1 and bustabel(j-1) extract 14 >= busnr1 do j:= j-1;
  4 14601         if j <= sidste_bus then
  4 14602         begin <* skriv identer *>
  5 14603           while bustabel(j) extract 14 <= busnr2 do
  5 14604           begin
  6 14605             i:= linie_løb_indeks(j) extract 12;
  6 14606             if i<>0 then
  6 14607             begin
  7 14608               antal:= antal +1;
  7 14609               s:= skriv_fil(filref,antal,zi);
  7 14610               if s <> 0 then fejlreaktion(6,s,<:vt-rapport:>,0);
  7 14611               fil(zi).i1:= bustabel(j);
  7 14612               fil(zi).i2:= linie_løb_tabel(i);
  7 14613             end;
  6 14614             j:= j +1;
  6 14615             if j > sidste_bus then goto bus_slut;
  6 14616           end;
  5 14617         end;
  4 14618     bus_slut:
  4 14619       end <*disable*>;
  3 14620       res:= 3; <*ok*>
  3 14621     \f

  3 14621     message procedure vt_rapport side 5 - 810409/cl;
  3 14622     
  3 14622     returner:
  3 14623       disable
  3 14624       begin
  4 14625         d.op.resultat:= res;
  4 14626         d.op.data(6):= antal;
  4 14627         d.op.data(7):= filref;
  4 14628         d.filop.data(1):= antal;
  4 14629         d.filop.data(3):= (antal*d.filop.data(2) -1)//256 +1;
  4 14630         i:= sæt_fil_dim(d.filop.data);
  4 14631         if i <> 0 then fejlreaktion(9,i,<:vt-rapport:>,0);
  4 14632     <*+2*>
  4 14633     <**>  if testbit41 and overvåget then
  4 14634     <**>  begin
  5 14635     <**>    skriv_vt_rap(out,0);
  5 14636     <**>    write(out,<:   returner operation:>);
  5 14637     <**>    skriv_op(out,op);
  5 14638     <**>  end;
  4 14639     <*-2*>
  4 14640         signalch(d.op.retur,op,d.op.optype);
  4 14641       end;
  3 14642       goto vent_op;
  3 14643     
  3 14643     vt_rap_trap:
  3 14644       disable skriv_vt_rap(zbillede,1);
  3 14645     
  3 14645     end vt_rapport;
  2 14646     \f

  2 14646     message procedure vt_gruppe side 1 - 810428/cl;
  2 14647     
  2 14647     procedure vt_gruppe(cs_fil,fil_opref);
  2 14648     
  2 14648       value             cs_fil,fil_opref;
  2 14649       integer           cs_fil,fil_opref;
  2 14650     begin
  3 14651       integer array field op, fil_op, iaf;
  3 14652       integer funk, res, filref, gr, i, antal, zi, s;
  3 14653       integer array identer(1:(if max_antal_grupper>max_antal_i_gruppe then
  3 14654                               max_antal_grupper else max_antal_i_gruppe));
  3 14655     
  3 14655       procedure skriv_vt_gruppe(zud,omfang);
  3 14656         value                       omfang;
  3 14657         integer                     omfang;
  3 14658         zone                    zud;
  3 14659       begin
  4 14660         integer øg;
  4 14661     
  4 14661         write(zud,"nl",1,<:+++ vt_gruppe            :>);
  4 14662         if omfang <> 0 then
  4 14663         disable
  4 14664         begin
  5 14665           skriv_coru(zud,abs curr_coruno);
  5 14666           write(zud,"nl",1,<<d>,
  5 14667             <:  cs_fil :>,cs_fil,"nl",1,
  5 14668             <:  op     :>,op,"nl",1,
  5 14669             <:  filop  :>,filop,"nl",1,
  5 14670             <:  funk   :>,funk,"nl",1,
  5 14671             <:  res    :>,res,"nl",1,
  5 14672             <:  filref :>,filref,"nl",1,
  5 14673             <:  gr     :>,gr,"nl",1,
  5 14674             <:  i      :>,i,"nl",1,
  5 14675             <:  antal  :>,antal,"nl",1,
  5 14676             <:  zi     :>,zi,"nl",1,
  5 14677             <:  s      :>,s,"nl",1,
  5 14678             <::>);
  5 14679           raf:= 0;
  5 14680           system(3,øg,identer);
  5 14681           write(zud,"nl",1,<:identer::>);
  5 14682           skriv_hele(zud,identer.raf,øg*2,2);
  5 14683         end;
  4 14684       end;
  3 14685     
  3 14685       stackclaim(if cm_test then 198 else 146);
  3 14686       filop:= fil_opref;
  3 14687       trap(vt_grp_trap);
  3 14688       iaf:= 0;
  3 14689     \f

  3 14689     message procedure vt_gruppe side 2 - 810409/cl;
  3 14690     
  3 14690     <*+2*>
  3 14691     <**> disable if testbit47 and overvåget or testbit28 then
  3 14692     <**>   skriv_vt_gruppe(out,0);
  3 14693     <*-2*>
  3 14694     
  3 14694     vent_op:
  3 14695       waitch(cs_vt_grp,op,gen_optype or vt_optype,-1);
  3 14696     <*+2*>
  3 14697     <**>disable
  3 14698     <**>begin
  4 14699     <**>  if testbit41 and overvåget then
  4 14700     <**>  begin
  5 14701     <**>    skriv_vt_gruppe(out,0);
  5 14702     <**>    write(out,<:   modtaget operation:>);
  5 14703     <**>    skriv_op(out,op);
  5 14704     <**>    ud;
  5 14705     <**>  end;
  4 14706     <**>end;
  3 14707     <*-2*>
  3 14708     
  3 14708       disable
  3 14709       begin
  4 14710         integer opk;
  4 14711     
  4 14711         opk:= d.op.opkode extract 12;
  4 14712         funk:= if opk=25 then 1 else
  4 14713                if opk=26 then 2 else
  4 14714                if opk=27 then 3 else
  4 14715                if opk=28 then 4 else
  4 14716                0;
  4 14717         if funk=0 then fejlreaktion(2,opk,<:vt_gruppe:>,0);
  4 14718       end;
  3 14719     <*+4*>
  3 14720     <**> if funk<4 and d.op.data(1) shift (-21) <> 5 then
  3 14721     <**> begin
  4 14722     <**>   disable begin
  5 14723     <**>     d.op.resultat:= 31;
  5 14724     <**>     fejlreaktion(10,d.op.data(1),<:gruppe ident:>,1);
  5 14725     <**>   end;
  4 14726     <**>   goto returner;
  4 14727     <**> end;
  3 14728     <*-4*>
  3 14729     
  3 14729       goto case funk of(definer,slet,vis,oversigt);
  3 14730     \f

  3 14730     message procedure vt_gruppe side 3 - 810505/cl;
  3 14731     
  3 14731     definer:
  3 14732       disable
  3 14733       begin
  4 14734         gr:= 0; res:= 0;
  4 14735         for i:= max_antal_grupper step -1 until 1 do
  4 14736         begin
  5 14737           if gruppetabel(i)=0 then gr:= i <*fri plads*> else
  5 14738           if gruppetabel(i)=d.op.data(1) then res:= 34; <*allerede defineret*>
  5 14739         end;
  4 14740         if gr=0 then res:= 32; <*ingen plads*>
  4 14741       end;
  3 14742       if res<>0 then goto slut_definer;
  3 14743       disable
  3 14744       begin <*fri plads fundet*>
  4 14745         antal:= d.op.data(2);
  4 14746         if antal <=0 or max_antal_i_gruppe<antal then
  4 14747           res:= 33 <*fejl i gruppestørrelse*>
  4 14748         else
  4 14749         begin
  5 14750           for i:= 1 step 1 until antal do
  5 14751           begin
  6 14752             s:= læsfil(d.op.data(3),i,zi);
  6 14753             if s<>0 then fejlreaktion(5,s,<:gruppe,def:>,0);
  6 14754             identer(i):= fil(zi).iaf(1);
  6 14755           end;
  5 14756           s:= modif_fil(tf_gruppedef,gr,zi);
  5 14757           if s<>0 then fejlreaktion(7,s,<:gruppe,def:>,0);
  5 14758           tofrom(fil(zi).iaf,identer,antal*2);
  5 14759           for i:= antal+1 step 1 until max_antal_i_gruppe do
  5 14760             fil(zi).iaf(i):= 0;
  5 14761           gruppetabel(gr):= d.op.data(1);
  5 14762           s:= modiffil(tf_gruppeidenter,gr,zi);
  5 14763           if s<>0 then fejlreaktion(7,s,<:gruppe,def:>,0);
  5 14764           fil(zi).iaf(1):= gruppetabel(gr);
  5 14765           res:= 3;
  5 14766         end;
  4 14767       end;
  3 14768     slut_definer:
  3 14769       <*slet fil*>
  3 14770       start_operation(fil_op,curr_coruid,cs_fil,104);
  3 14771       d.filop.data(4):= d.op.data(3);
  3 14772       signalch(cs_slet_fil,filop,vt_optype);
  3 14773       waitch(cs_fil,filop,vt_optype,-1);
  3 14774       if d.filop.data(9)<>0 then fejlreaktion(16,d.filop.data(9),<:gruppe,def:>,0);
  3 14775       d.op.resultat:= res;
  3 14776       goto returner;
  3 14777     \f

  3 14777     message procedure vt_gruppe side 4 - 810409/cl;
  3 14778     
  3 14778     slet:
  3 14779       disable
  3 14780       begin
  4 14781         gr:= 0; res:= 0;
  4 14782         for i:= 1 step 1 until max_antal_grupper do
  4 14783         begin
  5 14784           if gruppetabel(i)=d.op.data(1) then gr:= i;
  5 14785         end;
  4 14786         if gr = 0 then res:= 8 <*gruppe ej defineret*>
  4 14787         else
  4 14788         begin
  5 14789           for i:= 1 step 1 until max_antal_gruppeopkald do
  5 14790             if gruppeopkald(i,1)=d.op.data(1) then res:=15; <*gruppe optaget*>
  5 14791           if res = 0 then
  5 14792           begin
  6 14793             gruppetabel(gr):= 0;
  6 14794             s:= modif_fil(tf_gruppeidenter,gr,zi);
  6 14795             if s<>0 then fejlreaktion(7,s,<:gruppe,slet:>,0);
  6 14796             fil(zi).iaf(1):= gruppetabel(gr);
  6 14797             res:= 3;
  6 14798           end;
  5 14799         end;
  4 14800         d.op.resultat:= res;
  4 14801       end;
  3 14802       goto returner;
  3 14803     \f

  3 14803     message procedure vt_gruppe side 5 - 810505/cl;
  3 14804     
  3 14804     vis:
  3 14805       disable
  3 14806       begin
  4 14807         res:= 0; gr:= 0; antal:= 0; filref:= 0;
  4 14808         for i:= 1 step 1 until max_antal_grupper do
  4 14809           if gruppetabel(i) = d.op.data(1) then gr:= i;
  4 14810         if gr = 0 then res:= 8
  4 14811         else
  4 14812         begin
  5 14813           s:= læsfil(tf_gruppedef,gr,zi);
  5 14814           if s<>0 then fejlreaktion(5,s,<:gruppe,vis:>,0);
  5 14815           for i:= 1 step 1 until max_antal_i_gruppe do
  5 14816           begin
  6 14817             identer(i):= fil(zi).iaf(i);
  6 14818             if identer(i) <> 0 then antal:= antal +1;
  6 14819           end;
  5 14820           start_operation(filop,curr_coruid,cs_fil,101);
  5 14821           d.filop.data(1):= antal;  <*postantal*>
  5 14822           d.filop.data(2):= 1;      <*postlængde*>
  5 14823           d.filop.data(3):= (antal-1)//256 + 1; <*segmenter*>
  5 14824           d.filop.data(4):= 2 shift 10; <*spool fil*>
  5 14825           d.filop.data(5):= d.filop.data(6):=
  5 14826           d.filop.data(7):= d.filop.data(8):= 0;   <*navn*>
  5 14827           signalch(cs_opret_fil,filop,vt_optype);
  5 14828         end;
  4 14829       end;
  3 14830       if res <> 0 then goto slut_vis;
  3 14831       waitch(cs_fil,filop,vt_optype,-1);
  3 14832       disable
  3 14833       begin
  4 14834         if d.filop.data(9) <> 0 then
  4 14835           fejlreaktion(13,d.filop.data(9),<:gruppe,vis:>,0);
  4 14836         filref:= d.filop.data(4);
  4 14837         for i:= 1 step 1 until antal do
  4 14838         begin
  5 14839           s:= skrivfil(filref,i,zi);
  5 14840           if s <> 0 then fejlreaktion(6,s,<:gruppe,vis:>,0);
  5 14841           fil(zi).iaf(1):= identer(i);
  5 14842         end;
  4 14843         res:= 3;
  4 14844       end;
  3 14845     slut_vis:
  3 14846       d.op.resultat:= res; d.op.data(2):= antal; d.op.data(3):= filref;
  3 14847       goto returner;
  3 14848     \f

  3 14848     message procedure vt_gruppe side 6 - 810508/cl;
  3 14849     
  3 14849     oversigt:
  3 14850       disable
  3 14851       begin
  4 14852         res:= 0; antal:= 0; filref:= 0; iaf:= 0;
  4 14853         for i:= 1 step 1 until max_antal_grupper do
  4 14854         begin
  5 14855           if gruppetabel(i) <> 0 then
  5 14856           begin
  6 14857             antal:= antal +1;
  6 14858             identer(antal):= gruppetabel(i);
  6 14859           end;
  5 14860         end;
  4 14861         start_operation(filop,curr_coruid,cs_fil,101);
  4 14862         d.filop.data(1):= antal;  <*postantal*>
  4 14863         d.filop.data(2):= 1;      <*postlængde*>
  4 14864         d.filop.data(3):= if antal = 0 then 1 else
  4 14865                           (antal-1)//256 +1; <*segm.antal*>
  4 14866         d.filop.data(4):= 2 shift 10; <*spool fil*>
  4 14867         d.filop.data(5):= d.filop.data(6):=
  4 14868         d.filop.data(7):= d.filop.data(8):= 0; <*navn*>
  4 14869         signalch(cs_opretfil,filop,vt_optype);
  4 14870       end;
  3 14871       waitch(cs_fil,filop,vt_optype,-1);
  3 14872       disable
  3 14873       begin
  4 14874         if d.filop.data(9) <> 0 then
  4 14875           fejlreaktion(13,d.filop.data(9),<:grupper,over:>,0);
  4 14876         filref:= d.filop.data(4);
  4 14877         for i:= 1 step 1 until antal do
  4 14878         begin
  5 14879           s:= skriv_fil(filref,i,zi);
  5 14880           if s <> 0 then fejlreaktion(6,s,<:gruppe,over:>,0);
  5 14881           fil(zi).iaf(1):= identer(i);
  5 14882         end;
  4 14883         d.op.resultat:= 3; <*ok*>
  4 14884         d.op.data(1):= antal;
  4 14885         d.op.data(2):= filref;
  4 14886       end;
  3 14887     \f

  3 14887     message procedure vt_gruppe side 7 - 810505/cl;
  3 14888     
  3 14888     returner:
  3 14889       disable
  3 14890       begin
  4 14891     <*+2*>
  4 14892     <**>  if testbit43 and overvåget and (funk=1 or funk=2) then
  4 14893     <**>  begin
  5 14894     <**>    skriv_vt_gruppe(out,0);
  5 14895     <**>    write(out,<:   gruppetabel efter ændring:>);
  5 14896     <**>    p_gruppetabel(out);
  5 14897     <**>  end;
  4 14898     <**>  if testbit41 and overvåget then
  4 14899     <**>  begin
  5 14900     <**>    skriv_vt_gruppe(out,0);
  5 14901     <**>    write(out,<:  returner operation:>);
  5 14902     <**>    skriv_op(out,op);
  5 14903     <**>  end;
  4 14904     <*-2*>
  4 14905       signalch(d.op.retur,op,d.op.optype);
  4 14906       end;
  3 14907       goto vent_op;
  3 14908     
  3 14908     vt_grp_trap:
  3 14909       disable skriv_vt_gruppe(zbillede,1);
  3 14910     
  3 14910     end vt_gruppe;
  2 14911     \f

  2 14911     message procedure vt_spring side 1 - 810506/cl;
  2 14912     
  2 14912     procedure vt_spring(cs_spring_retur,spr_opref);
  2 14913       value             cs_spring_retur,spr_opref;
  2 14914       integer           cs_spring_retur,spr_opref;
  2 14915     begin
  3 14916       integer array field komm_op,spr_op,iaf;
  3 14917       real nu;
  3 14918       integer funk,interval,nr,i,s,id1,id2,res,res_inf,medd_kode,zi;
  3 14919     
  3 14919       procedure skriv_vt_spring(zud,omfang);
  3 14920         value                       omfang;
  3 14921         zone                    zud;
  3 14922         integer                     omfang;
  3 14923       begin
  4 14924         write(zud,"nl",1,<:+++ vt_spring            :>);
  4 14925         if omfang <> 0 then
  4 14926         begin
  5 14927           skriv_coru(zud,abs curr_coruno);
  5 14928           write(zud,"nl",1,<<d>,
  5 14929             <:cs-spring-retur:>,cs_spring_retur,"nl",1,
  5 14930             <:spr-op         :>,spr_op,"nl",1,
  5 14931             <:komm-op        :>,komm_op,"nl",1,
  5 14932             <:funk           :>,funk,"nl",1,
  5 14933             <:interval       :>,interval,"nl",1,
  5 14934             <:nr             :>,nr,"nl",1,
  5 14935             <:i              :>,i,"nl",1,
  5 14936             <:s              :>,s,"nl",1,
  5 14937             <:id1            :>,id1,"nl",1,
  5 14938             <:id2            :>,id2,"nl",1,
  5 14939             <:res            :>,res,"nl",1,
  5 14940             <:res-inf        :>,res_inf,"nl",1,
  5 14941             <:medd-kode      :>,medd_kode,"nl",1,
  5 14942             <:zi             :>,zi,"nl",1,
  5 14943             <:nu             :>,<<zddddd.dddd>,nu,"nl",1,
  5 14944             <::>);
  5 14945         end;
  4 14946       end;
  3 14947     \f

  3 14947     message procedure vt_spring side 2 - 810506/cl;
  3 14948     
  3 14948       procedure vt_operation(aktion,id1,id2,res,res_inf);
  3 14949         value             aktion,id1,id2;
  3 14950         integer           aktion,id1,id2,res,res_inf;
  3 14951       begin  <* aktion: 11=indsæt, 12=udtag, 13=omkod *>
  4 14952         integer array field akt_op;
  4 14953     
  4 14953         <* vent på adgang til vogntabel *>
  4 14954         waitch(cs_vt_adgang,akt_op,true,-1);
  4 14955     
  4 14955         <* start operation *>
  4 14956         disable
  4 14957         begin
  5 14958           start_operation(akt_op,curr_coruid,cs_spring_retur,aktion);
  5 14959           d.akt_op.data(1):= id1;
  5 14960           d.akt_op.data(2):= id2;
  5 14961           signalch(cs_vt_opd,akt_op,vt_optype);
  5 14962         end;
  4 14963     
  4 14963         <* afvent svar *>
  4 14964         waitch(cs_spring_retur,akt_op,vt_optype,-1);
  4 14965         res:= d.akt_op.resultat;
  4 14966         res_inf:= d.akt_op.data(3);
  4 14967     <*+2*>
  4 14968     <**> disable
  4 14969     <**>  if testbit45 and overvåget then
  4 14970     <**>  begin
  5 14971     <**>    real t;
  5 14972     <**>    skriv_vt_spring(out,0);
  5 14973     <**>    write(out,"nl",1,<<zddddd>,systime(4,d.akt_op.tid,t),<:.:>,t);
  5 14974     <**>    skriv_id(out,springtabel(nr,1),0);
  5 14975     <**>    write(out,<:.:>,string(extend springtabel(nr,2) shift 24),<:(:>,
  5 14976     <**>      <<d>,extend springtabel(nr,3) shift (-12) extract 24,<:)::>,
  5 14977     <**>      if aktion=11 then <:indsæt:> else if aktion=12 then <:udtag:> else
  5 14978     <**>      if aktion=13 then <:omkod:> else <:***:>,<: - res=:>,
  5 14979     <**>      d.akt_op.resultat,"sp",2);
  5 14980     <**>    skriv_id(out,d.akt_op.data(1),8);
  5 14981     <**>    skriv_id(out,d.akt_op.data(2),8);
  5 14982     <**>    skriv_id(out,d.akt_op.data(3),8);
  5 14983     <**>    systime(4,springtid(nr),t);
  5 14984     <**>    write(out,<:  springtid: :>,<<zd.dd>,entier(t/100),"nl",1);
  5 14985     <**>  end;
  4 14986     <*-2*>
  4 14987     
  4 14987         <* åbn adgang til vogntabel *>
  4 14988         disable signalch(cs_vt_adgang,akt_op,gen_optype or vt_optype);
  4 14989       end vt_operation;
  3 14990     \f

  3 14990     message procedure vt_spring side 2a - 810506/cl;
  3 14991     
  3 14991       procedure io_meddelelse(medd_no,bus,linie,springno);
  3 14992         value                 medd_no,bus,linie,springno;
  3 14993         integer               medd_no,bus,linie,springno;
  3 14994       begin
  4 14995         disable start_operation(spr_op,curr_coruid,cs_spring_retur,36);
  4 14996         d.spr_op.data(1):= medd_no;
  4 14997         d.spr_op.data(2):= bus;
  4 14998         d.spr_op.data(3):= linie;
  4 14999         d.spr_op.data(4):= springtabel(springno,1);
  4 15000         d.spr_op.data(5):= springtabel(springno,2);
  4 15001         disable signalch(cs_io,spr_op,io_optype or gen_optype);
  4 15002         waitch(cs_spring_retur,spr_op,io_optype or gen_optype,-1);
  4 15003       end;
  3 15004     
  3 15004       procedure returner_op(op,res);
  3 15005         value                  res;
  3 15006         integer array field op;
  3 15007         integer                res;
  3 15008       begin
  4 15009     <*+2*>
  4 15010     <**>  disable
  4 15011     <**>  if testbit41 and overvåget then
  4 15012     <**>  begin
  5 15013     <**>    skriv_vt_spring(out,0); write(out,<:   returner operation::>);
  5 15014     <**>    skriv_op(out,op);
  5 15015     <**>  end;
  4 15016     <*-2*>
  4 15017         d.op.resultat:= res;
  4 15018         signalch(d.op.retur,op,d.op.optype);
  4 15019       end;
  3 15020     \f

  3 15020     message procedure vt_spring side 3 - 810603/cl;
  3 15021     
  3 15021       iaf:= 0;
  3 15022       spr_op:= spr_opref;
  3 15023       stack_claim((if cm_test then 198 else 146) + 24);
  3 15024     
  3 15024       trap(vt_spring_trap);
  3 15025     
  3 15025       for i:= 1 step 1 until max_antal_spring do
  3 15026       begin
  4 15027         springtabel(i,1):= springtabel(i,2):= springtabel(i,3):= 0;
  4 15028         springtid(i):= springstart(i):= 0.0;
  4 15029       end;
  3 15030     
  3 15030     <*+2*>
  3 15031     <**> disable
  3 15032     <**> if testbit44 and overvåget then
  3 15033     <**> begin
  4 15034     <**>    skriv_vt_spring(out,0);
  4 15035     <**>    write(out,<:   springtabel efter initialisering:>);
  4 15036     <**>    p_springtabel(out); ud;
  4 15037     <**> end;
  3 15038     <*-2*>
  3 15039     
  3 15039     <*+2*>
  3 15040     <**> disable if testbit47 and overvåget or testbit28 then
  3 15041     <**>   skriv_vt_spring(out,0);
  3 15042     <*-2*>
  3 15043     \f

  3 15043     message procedure vt_spring side 4 - 810609/cl;
  3 15044     
  3 15044     næste_tid: <* find næste tid *>
  3 15045       disable
  3 15046       begin
  4 15047         interval:= -1; <*vent uendeligt*>
  4 15048         systime(1,0.0,nu);
  4 15049         for i:= 1 step 1 until max_antal_spring do
  4 15050           if springtabel(i,3) < 0 then
  4 15051             interval:= 5
  4 15052           else
  4 15053           if springtid(i) <> 0.0 and
  4 15054           ( (springtid(i)-nu) < interval or interval < 0 ) then
  4 15055             interval:= (if springtid(i) <= nu then 0 else
  4 15056                    round(springtid(i) -nu));
  4 15057         if interval=0 then interval:= 1;
  4 15058       end;
  3 15059     \f

  3 15059     message procedure vt_spring side 4a - 810525/cl;
  3 15060     
  3 15060       <* afvent operation eller timeout *>
  3 15061       waitch(cs_vt_spring,komm_op,vt_optype or gen_optype,interval);
  3 15062       if komm_op <> 0 then goto afkod_operation;
  3 15063     
  3 15063       <* timeout *>
  3 15064       systime(1,0.0,nu);
  3 15065       nr:= 1;
  3 15066     næste_sekv:
  3 15067       if nr > max_antal_spring then goto næste_tid;
  3 15068       if springtid(nr) > nu and springtabel(nr,3) > 0 or springstart(nr)=0.0 then
  3 15069       begin
  4 15070         nr:= nr +1;
  4 15071         goto næste_sekv;
  4 15072       end;
  3 15073       disable s:= modif_fil(tf_springdef,nr,zi);
  3 15074       if s <> 0 then fejlreaktion(7,s,<:spring:>,0);
  3 15075       if springtabel(nr,3) < 0 then
  3 15076       begin <* hængende spring *>
  4 15077         if springtid(nr) <= nu then
  4 15078         begin <* spring ikke udført indenfor angivet interval - annuler *>
  5 15079           <* find frit løb *>
  5 15080            disable
  5 15081            begin
  6 15082              id2:= 0;
  6 15083              for i:= 1 step 1 until springtabel(nr,3) extract 12 do
  6 15084                if fil(zi).iaf(2+i) shift (-22) = 1 then
  6 15085                id2:= fil(zi).iaf(1) extract 15 shift 7
  6 15086                    + fil(zi).iaf(2+i) shift (-12) extract 7 +1 shift 22;
  6 15087           end;
  5 15088           <* send meddelelse til io *>
  5 15089           io_meddelelse(5,0,id2,nr);
  5 15090     
  5 15090           <* annuler spring*>
  5 15091           for i:= 1,2,3 do springtabel(nr,i):= 0;
  5 15092           springtid(nr):= springstart(nr):= 0.0;
  5 15093         end
  4 15094         else
  4 15095         begin <* forsøg igen *>
  5 15096     \f

  5 15096     message procedure vt_spring side 5 - 810525/cl;
  5 15097     
  5 15097           i:= abs(extend springtabel(nr,3) shift (-12) extract 24);
  5 15098           if i = 2 <* første spring ej udført *> then
  5 15099           begin
  6 15100             id1:= fil(zi).iaf(1) extract 15 shift 7
  6 15101                 + fil(zi).iaf(3) shift (-12) extract 7 +1 shift 22;
  6 15102             id2:= id1;
  6 15103             vt_operation(12<*udtag*>,id1,id2,res,res_inf);
  6 15104           end
  5 15105           else
  5 15106           begin
  6 15107             id1:= fil(zi).iaf(1) extract 15 shift 7
  6 15108                 + fil(zi).iaf(2+i-1) shift (-12) extract 7 +1 shift 22;
  6 15109             id2:= id1 shift (-7) shift 7
  6 15110                 + fil(zi).iaf(2+i-2) shift (-12) extract 7;
  6 15111             vt_operation(13<*omkod*>,id1,id2,res,res_inf);
  6 15112           end;
  5 15113     
  5 15113           <* check resultat *>
  5 15114           medd_kode:= if res = 3 and i = 2 then 7 else
  5 15115                       if res = 3 and i > 2 then 8 else
  5 15116                    <* if res = 9 then 1 else
  5 15117                       if res =12 then 2 else
  5 15118                       if res =14 then 4 else
  5 15119                       if res =18 then 3 else *>
  5 15120                       0;
  5 15121           if medd_kode > 0 then
  5 15122             io_meddelelse(medd_kode,res_inf,if res=3 or res=12 then
  5 15123               id2 else id1,nr);
  5 15124           if res = 3 then
  5 15125           begin <* spring udført *>
  6 15126             disable s:= modiffil(tf_springdef,nr,zi); 
  6 15127             if s<>0 then fejlreaktion(7,s,<:spring:>,0);
  6 15128             springtabel(nr,3):= i shift 12 +springtabel(nr,3) extract 12;
  6 15129             fil(zi).iaf(2+i-1):= 1 shift 22 +fil(zi).iaf(2+i-1) extract 22;
  6 15130             if i > 2 then fil(zi).iaf(2+i-2):=
  6 15131               fil(zi).iaf(2+i-2) extract 22 add (1 shift 23);
  6 15132           end;
  5 15133         end;
  4 15134       end <* hængende spring *>
  3 15135       else
  3 15136       begin
  4 15137         i:= spring_tabel(nr,3) shift (-12);
  4 15138         id1:= fil(zi).iaf(1) extract 15 shift 7
  4 15139             + fil(zi).iaf(2+i) shift (-12) extract 7 +1 shift 22;
  4 15140         id2:= fil(zi).iaf(2+i-1) shift (-12) extract 7
  4 15141             + id1 shift (-7) shift 7;
  4 15142         vt_operation(13<*omkod*>,id1,id2,res,res_inf);
  4 15143     \f

  4 15143     message procedure vt_spring side 6 - 820304/cl;
  4 15144     
  4 15144         <* check resultat *>
  4 15145         medd_kode:= if res = 3 then 8 else
  4 15146                     if res = 9 then 1 else
  4 15147                     if res =12 then 2 else
  4 15148                     if res =14 then 4 else
  4 15149                     if res =18 then 3 else 
  4 15150                     if res =60 then 9 else 0;
  4 15151         if medd_kode > 0 then
  4 15152           io_meddelelse(medd_kode,res_inf,if res=3 or res=12 then id2 else id1,nr);
  4 15153     
  4 15153         <* opdater springtabel *>
  4 15154         disable s:= modiffil(tf_springdef,nr,zi);
  4 15155         if s<>0 then fejlreaktion(7,s,<:spring:>,0);
  4 15156         if fil(zi).iaf(2+i) extract 12 = 0 <*sidste løb*> then
  4 15157         begin
  5 15158           io_meddelelse(if res=3 then 6 else 5,0,
  5 15159             if res=3 then id1 else id2,nr);
  5 15160           for i:= 1,2,3 do springtabel(nr,i):= 0; <*annuleret*>
  5 15161           springtid(nr):= springstart(nr):= 0.0;
  5 15162         end
  4 15163         else
  4 15164         begin
  5 15165           springtid(nr):= springtid(nr) +(fil(zi).iaf(2+i) extract 12)*60.0;
  5 15166           if res = 3 then
  5 15167           begin
  6 15168             fil(zi).iaf(2+i-1):= (1 shift 23) add
  6 15169                                  (fil(zi).iaf(2+i-1) extract 22);
  6 15170             fil(zi).iaf(2+i)  := (1 shift 22) add
  6 15171                                  (fil(zi).iaf(2+i)   extract 22);
  6 15172             springtabel(nr,3):=(i+1) shift 12 add (springtabel(nr,3) extract 12);
  6 15173           end
  5 15174           else
  5 15175           springtabel(nr,3):= (-i-1) shift 12 add (springtabel(nr,3) extract 12);
  5 15176         end;
  4 15177       end;
  3 15178     <*+2*>
  3 15179     <**> disable
  3 15180     <**> if testbit44 and overvåget then
  3 15181     <**> begin
  4 15182     <**>   skriv_vt_spring(out,0); write(out,<:   springtabel efter ændring:>);
  4 15183     <**>   p_springtabel(out); ud;
  4 15184     <**> end;
  3 15185     <*-2*>
  3 15186     
  3 15186       nr:= nr +1;
  3 15187       goto næste_sekv;
  3 15188     \f

  3 15188     message procedure vt_spring side 7 - 810506/cl;
  3 15189     
  3 15189     afkod_operation:
  3 15190     <*+2*>
  3 15191     <**>  disable
  3 15192     <**>  if testbit41 and overvåget then
  3 15193     <**>  begin
  4 15194     <**>    skriv_vt_spring(out,0); write(out,<:   modtaget operation:>);
  4 15195     <**>    skriv_op(out,komm_op);
  4 15196     <**>  end;
  3 15197     <*-2*>
  3 15198     
  3 15198       disable
  3 15199       begin integer opk;
  4 15200     
  4 15200         opk:= d.komm_op.opkode extract 12;
  4 15201         funk:= if opk = 30 <*sp,d*> then 5 else
  4 15202                if opk = 31 <*sp. *> then 1 else
  4 15203                if opk = 32 <*sp,v*> then 4 else
  4 15204                if opk = 33 <*sp,o*> then 6 else
  4 15205                if opk = 34 <*sp,r*> then 2 else
  4 15206                if opk = 35 <*sp,a*> then 3 else
  4 15207                   0;
  4 15208         if funk = 0 then fejlreaktion(2,opk,<:vt_spring:>,0);
  4 15209     
  4 15209         if funk <> 6 <*sp,o*> then
  4 15210         begin <* find nr i springtabel *>
  5 15211           nr:= 0;
  5 15212           for i:= 1 step 1 until max_antal_spring do
  5 15213             if springtabel(i,1) = d.komm_op.data(1) and
  5 15214                springtabel(i,2) = d.komm_op.data(2) then nr:= i;
  5 15215         end;
  4 15216       end;
  3 15217       if funk = 6 then goto oversigt;
  3 15218       if funk = 5 then goto definer;
  3 15219     
  3 15219       if nr = 0 then
  3 15220       begin
  4 15221         returner_op(komm_op,37<*spring ukendt*>);
  4 15222         goto næste_tid;
  4 15223     end;
  3 15224     
  3 15224       goto case funk of(start,indsæt,annuler,vis);
  3 15225     \f

  3 15225     message procedure vt_spring side 8 - 810525/cl;
  3 15226     
  3 15226     start:
  3 15227       if springtabel(nr,3) shift (-12) <> 0 then
  3 15228       begin returner_op(komm_op,38); goto næste_tid; end;
  3 15229       disable
  3 15230       begin <* find linie_løb_og_udtag *>
  4 15231         s:= modif_fil(tf_springdef,nr,zi);
  4 15232         if s <> 0 then fejlreaktion(7,s,<:spring,start:>,0);
  4 15233         id1:= fil(zi).iaf(1) extract 15 shift 7
  4 15234             + fil(zi).iaf(3) shift (-12) extract 7 +1 shift 22;
  4 15235         id2:= 0;
  4 15236       end;
  3 15237       vt_operation(12,id1,id2,res,res_inf);
  3 15238     
  3 15238       disable <* check resultat *>
  3 15239         medd_kode:= if res = 3 <*ok*> then 7 else
  3 15240                     if res = 9 <*linie/løb ukendt*> then 1 else
  3 15241                     if res =14 <*optaget*> then 4 else
  3 15242                     if res =18 <*i kø*> then 3 else 0;
  3 15243       returner_op(komm_op,3);
  3 15244       if medd_kode = 0 then goto næste_tid;
  3 15245     
  3 15245       <* send spring-meddelelse til io *>
  3 15246       io_meddelelse(medd_kode,res_inf,id1,nr);
  3 15247     
  3 15247       <* opdater springtabel *>
  3 15248       disable
  3 15249       begin
  4 15250         s:= modif_fil(tf_springdef,nr,zi);
  4 15251         if s <> 0 then fejlreaktion(7,s,<:spring,start:>,0);
  4 15252         springtabel(nr,3):= (if res = 3 then 2 else (-2)) shift 12
  4 15253                             add (springtabel(nr,3) extract 12);
  4 15254         systime(1,0.0,nu);
  4 15255         springstart(nr):= nu;
  4 15256         springtid(nr):= nu +fil(zi).iaf(3) extract 12 *60.0;
  4 15257         if res = 3 then fil(zi).iaf(3):= fil(zi).iaf(3) add (1 shift 22);
  4 15258       end;
  3 15259     <*+2*>
  3 15260     <**> disable
  3 15261     <**> if testbit44 and overvåget then
  3 15262     <**> begin
  4 15263     <**>   skriv_vt_spring(out,0); write(out,<:   springtabel efter ændring:>);
  4 15264     <**>   p_springtabel(out); ud;
  4 15265     <**> end;
  3 15266     <*-2*>
  3 15267     
  3 15267       goto næste_tid;
  3 15268     \f

  3 15268     message procedure vt_spring side 9 - 810506/cl;
  3 15269     
  3 15269     indsæt:
  3 15270       if springtabel(nr,3) shift (-12) = 0 then
  3 15271       begin <* ikke igangsat *>
  4 15272         returner_op(komm_op,41);
  4 15273        goto næste_tid;
  4 15274       end;
  3 15275       <* find frie linie/løb *>
  3 15276       disable
  3 15277       begin
  4 15278         s:= læs_fil(tf_springdef,nr,zi);
  4 15279         if s <> 0 then fejlreaktion(5,s,<:spring,reserve:>,0);
  4 15280         id2:= 0;
  4 15281         for i:= 1 step 1 until springtabel(nr,3) extract 12 do
  4 15282           if fil(zi).iaf(2+i) shift (-22) = 1 then
  4 15283           id2:= 1 shift 22 +fil(zi).iaf(1) extract 15 shift 7
  4 15284                            +fil(zi).iaf(2+i) shift (-12) extract 7;
  4 15285           id1:= d.komm_op.data(3);
  4 15286       end;
  3 15287     
  3 15287       if id2<>0 then
  3 15288         vt_operation(11,id1,id2,res,res_inf)
  3 15289       else
  3 15290         res:= 42;
  3 15291     
  3 15291       disable <* check resultat *>
  3 15292       medd_kode:= if res = 3 <*ok*> then 8 else
  3 15293                   if res =10 <*bus ukendt*> then 0 else
  3 15294                   if res =11 <*bus allerede indsat*> then 0 else
  3 15295                   if res =12 <*linie/løb allerede besat*> then 2 else
  3 15296                   if res =42 <*intet frit linie/løb*> then 5 else 0;
  3 15297       if res = 11 or res = 12 then d.komm_op.data(4):= res_inf;
  3 15298       returner_op(komm_op,res);
  3 15299       if medd_kode = 0 then goto næste_tid;
  3 15300       
  3 15300       <* send springmeddelelse til io *>
  3 15301       if res<>42 then io_meddelelse(medd_kode,id1,id2,nr);
  3 15302       io_meddelelse(5,0,0,nr);
  3 15303     \f

  3 15303     message procedure vt_spring side 9a - 810525/cl;
  3 15304     
  3 15304       <* annuler springtabel *>
  3 15305       for i:= 1,2,3 do springtabel(nr,i):= 0;
  3 15306       springtid(nr):=  springstart(nr):= 0.0;
  3 15307     <*+2*>
  3 15308     <**> disable
  3 15309     <**> if testbit44 and overvåget then
  3 15310     <**> begin
  4 15311     <**>   skriv_vt_spring(out,0); write(out,<:   springtabel efter ændring:>);
  4 15312     <**>   p_springtabel(out); ud;
  4 15313     <**> end;
  3 15314     <*-2*>
  3 15315     
  3 15315       goto næste_tid;
  3 15316     \f

  3 15316     message procedure vt_spring side 10 - 810525/cl;
  3 15317     
  3 15317     annuler:
  3 15318       disable
  3 15319       begin <* find evt. frit linie/løb *>
  4 15320         s:= læs_fil(tf_springdef,nr,zi);
  4 15321         if s <> 0 then fejlreaktion(5,s,<:spring,annuler:>,0);
  4 15322         id1:= id2:= 0;
  4 15323         for i:= 1 step 1 until springtabel(nr,3) extract 12 do
  4 15324           if fil(zi).iaf(2+i) shift (-22) = 1 then
  4 15325             id2:= fil(zi).iaf(1) extract 15 shift 7
  4 15326                 + fil(zi).iaf(2+i) shift (-12) extract 7 +1 shift 22;
  4 15327         returner_op(komm_op,3);
  4 15328       end;
  3 15329     
  3 15329       <* send springmeddelelse til io *>
  3 15330       io_meddelelse(5,id1,id2,nr);
  3 15331     
  3 15331       <* annuler springtabel *>
  3 15332       for i:= 1,2,3 do springtabel(nr,i):= 0;
  3 15333       springtid(nr):= springstart(nr):= 0.0;
  3 15334     <*+2*>
  3 15335     <**> disable
  3 15336     <**> if testbit44 and overvåget then
  3 15337     <**> begin
  4 15338     <**>   skriv_vt_spring(out,0); write(out,<:   springtabel efter ændring:>);
  4 15339     <**>   p_springtabel(out); ud;
  4 15340     <**> end;
  3 15341     <*-2*>
  3 15342     
  3 15342       goto næste_tid;
  3 15343     
  3 15343     definer:
  3 15344       if nr <> 0 then <* allerede defineret *>
  3 15345       begin
  4 15346         res:= 36;
  4 15347         goto slut_definer;
  4 15348       end;
  3 15349     
  3 15349       <* find frit nr *>
  3 15350       i:= 0;
  3 15351       for i:= i+1 while i<= max_antal_spring and nr = 0 do
  3 15352         if springtabel(i,1) = 0 then nr:= i;
  3 15353       if nr = 0 then
  3 15354       begin
  4 15355         res:= 32; <* ingen fri plads *>
  4 15356         goto slut_definer;
  4 15357       end;
  3 15358     \f

  3 15358     message procedure vt_spring side 11 - 810525/cl;
  3 15359     
  3 15359       disable
  3 15360       begin integer array fdim(1:8),ia(1:32);
  4 15361         <* læs sekvens *>
  4 15362         fdim(4):= d.komm_op.data(3);
  4 15363         s:= hent_fil_dim(fdim);
  4 15364         if s <> 0 then fejlreaktion(8,s,<:spring,def:>,0);
  4 15365         if fdim(1) > 30 then
  4 15366           res:= 35 <* springsekvens for stor *>
  4 15367         else
  4 15368         begin
  5 15369           for i:= 1 step 1 until fdim(1) do
  5 15370           begin
  6 15371             s:= læs_fil(fdim(4),i,zi);
  6 15372             if s <> 0 then fejlreaktion(5,s,<:spring,def:>,0);
  6 15373             ia(i):= fil(zi).iaf(1) shift 12;
  6 15374             if i>1 then ia(i-1):= ia(i-1) + fil(zi).iaf(1) shift (-12);
  6 15375           end;
  5 15376           s:= modif_fil(tf_springdef,nr,zi);
  5 15377           if s <> 0 then fejlreaktion(7,s,<:spring,def:>,0);
  5 15378           fil(zi).iaf(1):= springtabel(nr,1):= d.komm_op.data(1);
  5 15379           fil(zi).iaf(2):= springtabel(nr,2):= d.komm_op.data(2);
  5 15380           iaf:= 4;
  5 15381           tofrom(fil(zi).iaf,ia,60);
  5 15382           iaf:= 0;
  5 15383           springtabel(nr,3):= fdim(1);
  5 15384           springtid(nr):= springstart(nr):= 0.0;
  5 15385           res:= 3;
  5 15386         end;
  4 15387       end;
  3 15388     \f

  3 15388     message procedure vt_spring side 11a - 81-525/cl;
  3 15389     
  3 15389     slut_definer:
  3 15390     
  3 15390       <* slet fil *>
  3 15391       start_operation(spr_op,curr_coruid,cs_spring_retur,104);
  3 15392       d.spr_op.data(4):= d.komm_op.data(3); <* filref *>
  3 15393       signalch(cs_slet_fil,spr_op,vt_optype);
  3 15394       waitch(cs_spring_retur,spr_op,vt_optype,-1);
  3 15395       if d.spr_op.data(9) <> 0 then
  3 15396         fejlreaktion(16,d.spr_op.data(9),<:spring,def:>,0);
  3 15397       returner_op(komm_op,res);
  3 15398     <*+2*>
  3 15399     <**> disable
  3 15400     <**> if testbit44 and overvåget then
  3 15401     <**> begin
  4 15402     <**>   skriv_vt_spring(out,0); write(out,<:    springtabel efter ændring:>);
  4 15403     <**>   p_springtabel(out); ud;
  4 15404     <**> end;
  3 15405     <*-2*>
  3 15406       goto næste_tid;
  3 15407     \f

  3 15407     message procedure vt_spring side 12 - 810525/cl;
  3 15408     
  3 15408     vis:
  3 15409       disable
  3 15410       begin
  4 15411         <* tilknyt fil *>
  4 15412         start_operation(spr_op,curr_coruid,cs_spring_retur,101);
  4 15413         d.spr_op.data(1):= (springtabel(nr,3) extract 12)*2;
  4 15414         d.spr_op.data(2):= 1;
  4 15415         d.spr_op.data(3):= (d.spr_op.data(1) -1)//256 +1;
  4 15416         d.spr_op.data(4):= 2 shift 10; <* spoolfil *>
  4 15417         signalch(cs_opret_fil,spr_op,vt_optype);
  4 15418       end;
  3 15419     
  3 15419       <* afvent svar *>
  3 15420       waitch(cs_spring_retur,spr_op,vt_optype,-1);
  3 15421       if d.spr_op.data(9) <> 0 then
  3 15422        fejlreaktion(13,d.spr_op.data(9),<:spring,vis:>,0);
  3 15423       disable
  3 15424       begin integer array ia(1:30);
  4 15425         s:= læs_fil(tf_springdef,nr,zi);
  4 15426         if s <> 0 then fejlreaktion(5,s,<:spring,vis:>,0);
  4 15427         iaf:= 4;
  4 15428         tofrom(ia,fil(zi).iaf,60);
  4 15429         iaf:= 0;
  4 15430         for i:= 1 step 1 until d.spr_op.data(1) do
  4 15431         begin
  5 15432           s:= skriv_fil(d.spr_op.data(4),(i-1)*2+1,zi);
  5 15433           if s <> 0 then fejlreaktion(6,s,<:spring,vis:>,0);
  5 15434           fil(zi).iaf(1):= if ia(i) shift (-22) = 0 then
  5 15435                            ia(i) shift (-12) extract 7
  5 15436                          else -(ia(i) shift (-12) extract 7);
  5 15437           s:= skriv_fil(d.spr_op.data(4),2*i,zi);
  5 15438           if s <> 0 then fejlreaktion(6,s,<:spring,vis:>,0);
  5 15439           fil(zi).iaf(1):= if i < d.spr_op.data(1) then
  5 15440                              (if ia(i+1) shift (-22) <> 0 then -(ia(i) extract 12)
  5 15441                               else ia(i) extract 12)
  5 15442                            else 0;
  5 15443         end;
  4 15444         d.spr_op.data(1):= d.spr_op.data(1) - 1;
  4 15445         sæt_fil_dim(d.spr_op.data);
  4 15446         d.komm_op.data(3):= d.spr_op.data(1);
  4 15447         d.komm_op.data(4):= d.spr_op.data(4);
  4 15448         raf:= data+8;
  4 15449         d.komm_op.raf(1):= springstart(nr);
  4 15450         returner_op(komm_op,3);
  4 15451       end;
  3 15452       goto næste_tid;
  3 15453     \f

  3 15453     message procedure vt_spring side 13 - 810525/cl;
  3 15454     
  3 15454     oversigt:
  3 15455       disable
  3 15456       begin
  4 15457         <* opret fil *>
  4 15458         start_operation(spr_op,curr_coruid,cs_spring_retur,101);
  4 15459         d.spr_op.data(1):= max_antal_spring;
  4 15460         d.spr_op.data(2):= 4;
  4 15461         d.spr_op.data(3):= (max_antal_spring -1)//64 +1;
  4 15462         d.spr_op.data(4):= 2 shift 10; <* spoolfil *>
  4 15463         signalch(cs_opret_fil,spr_op,vt_optype);
  4 15464       end;
  3 15465     
  3 15465       <* afvent svar *>
  3 15466       waitch(cs_spring_retur,spr_op,vt_optype,-1);
  3 15467       if d.spr_op.data(9) <> 0 then
  3 15468         fejlreaktion(13,d.spr_op.data(9),<:spring,over:>,0);
  3 15469       disable
  3 15470       begin
  4 15471         nr:= 0;
  4 15472         for i:= 1 step 1 until max_antal_spring do
  4 15473         begin
  5 15474           if springtabel(i,1) <> 0 then
  5 15475           begin
  6 15476             nr:= nr +1;
  6 15477             s:= skriv_fil(d.spr_op.data(4),nr,zi);
  6 15478             if s <> 0 then fejlreaktion(6,s,<:spring,over:>,0);
  6 15479             fil(zi).iaf(1):= springtabel(i,1);
  6 15480             fil(zi).iaf(2):= springtabel(i,2);
  6 15481             fil(zi,2):= springstart(i);
  6 15482           end;
  5 15483         end;
  4 15484         d.spr_op.data(1):= nr;
  4 15485         s:= sæt_fil_dim(d.spr_op.data);
  4 15486         if s <> 0 then fejlreaktion(9,s,<:spring,over:>,0);
  4 15487         d.komm_op.data(1):= nr;
  4 15488         d.komm_op.data(2):= d.spr_op.data(4);
  4 15489         returner_op(komm_op,3);
  4 15490       end;
  3 15491       goto næste_tid;
  3 15492     
  3 15492     vt_spring_trap:
  3 15493       disable skriv_vt_spring(zbillede,1);
  3 15494     
  3 15494     end vt_spring;
  2 15495     \f

  2 15495     message procedure vt_auto side 1 - 810505/cl;
  2 15496     
  2 15496     procedure vt_auto(cs_auto_retur,auto_opref);
  2 15497       value           cs_auto_retur,auto_opref;
  2 15498       integer         cs_auto_retur,auto_opref;
  2 15499     begin
  3 15500       integer array field op,auto_op,iaf;
  3 15501       integer filref,id1,id2,aktion,postnr,sidste_post,interval,res,
  3 15502               res_inf,i,s,zi,kl,døgnstart;
  3 15503       real t,nu,næste_tid;
  3 15504       boolean optaget;
  3 15505       integer array filnavn,nytnavn(1:4);
  3 15506     
  3 15506       procedure skriv_vt_auto(zud,omfang);
  3 15507         value                     omfang;
  3 15508         zone                  zud;
  3 15509         integer                   omfang;
  3 15510       begin
  4 15511         long array field laf;
  4 15512     
  4 15512         laf:= 0;
  4 15513         write(zud,"nl",1,<:+++ vt_auto              :>);
  4 15514         if omfang<>0 then
  4 15515         begin
  5 15516           skriv_coru(zud,abs curr_coruno);
  5 15517           write(zud,"nl",1,<<d>,
  5 15518             <:cs-auto-retur  :>,cs_auto_retur,"nl",1,
  5 15519             <:op             :>,op,"nl",1,
  5 15520             <:auto-op        :>,auto_op,"nl",1,
  5 15521             <:filref         :>,filref,"nl",1,
  5 15522             <:id1            :>,id1,"nl",1,
  5 15523             <:id2            :>,id2,"nl",1,
  5 15524             <:aktion         :>,aktion,"nl",1,
  5 15525             <:postnr         :>,postnr,"nl",1,
  5 15526             <:sidste-post    :>,sidste_post,"nl",1,
  5 15527             <:interval       :>,interval,"nl",1,
  5 15528             <:res            :>,res,"nl",1,
  5 15529             <:res-inf        :>,res_inf,"nl",1,
  5 15530             <:i              :>,i,"nl",1,
  5 15531             <:s              :>,s,"nl",1,
  5 15532             <:zi             :>,zi,"nl",1,
  5 15533             <:kl             :>,kl,"nl",1,
  5 15534             <:døgnstart      :>,døgnstart,"nl",1,
  5 15535             <:optaget        :>,if optaget then <:true:> else <:false:>,"nl",1,
  5 15536             <:t              :>,<<zddddd.dddd>,t,"nl",1,
  5 15537             <:nu             :>,nu,"nl",1,
  5 15538             <:næste-tid      :>,næste_tid,"nl",1,
  5 15539             <:filnavn        :>,filnavn.laf,"nl",1,
  5 15540             <:nytnavn        :>,nytnavn.laf,"nl",1,
  5 15541             <::>);
  5 15542         end;
  4 15543       end skriv_vt_auto;
  3 15544     \f

  3 15544     message procedure vt_auto side 2 - 810507/cl;
  3 15545     
  3 15545       iaf:= 0;
  3 15546       auto_op:= auto_opref;
  3 15547       filref:= id1:= id2:= aktion:= postnr:= sidste_post:= 0;
  3 15548       optaget:= false;
  3 15549       næste_tid:= 0.0;
  3 15550       for i:= 1,2,3,4 do filnavn(i):=nytnavn(i):=0;
  3 15551       stack_claim(if cm_test then 298 else 246);
  3 15552       trap(vt_auto_trap);
  3 15553     
  3 15553     <*+2*>
  3 15554     <**> disable if testbit47 and overvåget or testbit28 then
  3 15555     <**>   skriv_vt_auto(out,0);
  3 15556     <*-2*>
  3 15557     
  3 15557     vent:
  3 15558     
  3 15558       systime(1,0.0,nu);
  3 15559       interval:= if filref=0 then (-1) <*uendeligt*> else
  3 15560                  if næste_tid > nu then round(næste_tid-nu) else
  3 15561                  if optaget then 5 else 0;
  3 15562       if interval=0 then interval:= 1;
  3 15563     
  3 15563     <*v*> waitch(cs_vt_auto,op,vt_optype or gen_optype,interval);
  3 15564     
  3 15564       if op<>0 then goto filskift;
  3 15565     
  3 15565       <* vent på adgang til vogntabel *>
  3 15566     <*v*> waitch(cs_vt_adgang,op,vt_optype,-1);
  3 15567     
  3 15567       <* afsend relevant operation til opdatering af vogntabel *>
  3 15568       start_operation(op,curr_coruid,cs_auto_retur,aktion);
  3 15569       d.op.data(1):= id1;
  3 15570       d.op.data(2):= id2;
  3 15571       signalch(cs_vt_opd,op,vt_optype);
  3 15572     <*v*> waitch(cs_auto_retur,op,vt_optype,-1);
  3 15573       res:= d.op.resultat;
  3 15574       id2:= d.op.data(2);
  3 15575       res_inf:= d.op.data(3);
  3 15576     
  3 15576       <* åbn for vogntabel *>
  3 15577       signalch(cs_vt_adgang,op,vt_optype or gen_optype);
  3 15578     \f

  3 15578     message procedure vt_auto side 3 - 810507/cl;
  3 15579     
  3 15579       <* behandl svar fra opdatering *>
  3 15580     <*+2*>
  3 15581     <**> disable
  3 15582     <**> if testbit45 and overvåget then
  3 15583     <**> begin
  4 15584     <**>   integer li,lø,bo;
  4 15585     <**>   skriv_vt_auto(out,0);
  4 15586     <**>   write(out,"nl",1,<<zddddd>,systime(4,d.op.tid,t),<:.:>,entier t,
  4 15587     <**>     <:  POSTNR. :>,<<d>,postnr,if aktion=12 then <:: SLET:> else
  4 15588     <**>     <:: OMKOD:>,<: - RES=:>,res);
  4 15589     <**>   for i:= 1,2 do
  4 15590     <**>   begin
  5 15591     <**>     li:= d.op.data(i);
  5 15592     <**>     lø:= li extract 7; bo:= li shift (-7) extract 5;
  5 15593     <**>     if bo<>0 then bo:= bo + 'A' - 1;
  5 15594     <**>     li:= li shift (-12) extract 10;
  5 15595     <**>     write(out,<< ddd>,li,false add bo,1,"/",1,<<d>,lø);
  5 15596     <**>   end;
  4 15597     <**>   systime(4,næste_tid,t);
  4 15598     <**>   write(out,<< zddd>,d.op.data(3) extract 14,<:  - AUTOTID::>,
  4 15599     <**>     << zd.dd>,t/10000,"nl",1);
  4 15600     <**> end;
  3 15601     <*-2*>
  3 15602       if res=31 then
  3 15603         fejlreaktion(10,aktion,<:AUTO: SYSTEMFEJL:>,1)
  3 15604       else
  3 15605       if res<>3 then
  3 15606       begin
  4 15607         if -, optaget then
  4 15608         begin
  5 15609           disable start_operation(auto_op,curr_coruid,cs_auto_retur,22);
  5 15610           d.auto_op.data(1):= if res=9 then 1 else if res=12 then 2 else
  5 15611              if res=18 then 3 else if res=60 then 9 else 4;
  5 15612           d.auto_op.data(2):= res_inf;
  5 15613           d.auto_op.data(3):= if res=12 then id2 else id1;
  5 15614           signalch(cs_io,auto_op,io_optype or gen_optype);
  5 15615           waitch(cs_auto_retur,auto_op,io_optype or gen_optype,-1);
  5 15616         end;
  4 15617         if res=14 or res=18 then <* i kø eller optaget *>
  4 15618         begin
  5 15619           optaget:= true;
  5 15620           goto vent;
  5 15621         end;
  4 15622       end;
  3 15623       optaget:= false;
  3 15624     \f

  3 15624     message procedure vt_auto side 4 - 810507/cl;
  3 15625     
  3 15625       <* find næste post *>
  3 15626       disable
  3 15627       begin
  4 15628         if postnr=sidste_post then
  4 15629         begin <* døgnskift *>
  5 15630           postnr:= 1;
  5 15631           døgnstart:= systime(4,systid(døgnstart+1,120000),t);
  5 15632         end
  4 15633         else postnr:= postnr+1;
  4 15634         s:= læsfil(filref,postnr,zi);
  4 15635         if s<>0 then fejlreaktion(5,s,<:auto:>,0);
  4 15636         aktion:= fil(zi).iaf(1);
  4 15637         næste_tid:= systid(døgnstart,fil(zi).iaf(2));
  4 15638         id1:= fil(zi).iaf(3);
  4 15639         id2:= fil(zi).iaf(4);
  4 15640       end;
  3 15641       goto vent;
  3 15642     \f

  3 15642     message procedure vt_auto side 5 - 810507/cl;
  3 15643     
  3 15643     filskift:
  3 15644     
  3 15644     <*+2*>
  3 15645     <**> disable
  3 15646     <**> if testbit41 and overvåget then
  3 15647     <**> begin
  4 15648     <**>   skriv_vt_auto(out,0);
  4 15649     <**>   write(out,<:   modtaget operation::>);
  4 15650     <**>   skriv_op(out,op);
  4 15651     <**> end;
  3 15652     <*-2*>
  3 15653       for i:= 1 step 1 until 4 do filnavn(i):=nytnavn(i):= 0;
  3 15654       res:= 46;
  3 15655       if d.op.opkode extract 12 <> 21 then
  3 15656         fejlreaktion(2,d.op.opkode extract 12,<:auto,filskift:>,0);
  3 15657       if filref = 0 then goto knyt;
  3 15658     
  3 15658       <* gem filnavn til io-meddelelse *>
  3 15659       disable begin
  4 15660         integer array fdim(1:8);
  4 15661         integer array field navn;
  4 15662         fdim(4):= filref;
  4 15663         hentfildim(fdim);
  4 15664         navn:= 8;
  4 15665         tofrom(filnavn,fdim.navn,8);
  4 15666       end;
  3 15667     
  3 15667       <* frivgiv tilknyttet autofil *>
  3 15668       disable start_operation(auto_op,curr_coruid,cs_auto_retur,103);
  3 15669       d.auto_op.data(4):= filref;
  3 15670       signalch(cs_frigiv_fil,auto_op,vt_optype);
  3 15671     <*v*> waitch(cs_auto_retur,auto_op,vt_optype,-1);
  3 15672       if d.auto_op.data(9) <> 0 then
  3 15673         fejlreaktion(15,d.auto_op.data(9),<:auto,filskift:>,0);
  3 15674       filref:= aktion:= id1:= id2:= postnr:= sidste_post:= 0;
  3 15675       optaget:= false;
  3 15676       næste_tid:= 0.0;
  3 15677       res:= 3;
  3 15678     \f

  3 15678     message procedure vt_auto side 6 - 810507/cl;
  3 15679     
  3 15679       <* tilknyt evt. ny autofil *>
  3 15680     knyt:
  3 15681       if d.op.data(1)<>0 then
  3 15682       begin
  4 15683         disable startoperation(auto_op,curr_coruid,cs_auto_retur,102);
  4 15684         d.auto_op.data(4):= 30 shift 12; <* contentskey,subno *> 
  4 15685         for i:= 1,2,3,4 do d.auto_op.data(4+i):= d.op.data(i);
  4 15686         disable
  4 15687         begin integer pos1,pos2;
  5 15688           pos1:= pos2:= 13;
  5 15689           while læstegn(d.auto_op.data,pos1,i)<>0 do
  5 15690           begin
  6 15691             if 'A'<=i and i<='Å' then i:= i - 'A' + 'a';
  6 15692             skrivtegn(d.auto_op.data,pos2,i);
  6 15693           end;
  5 15694         end;
  4 15695         signalch(cs_tilknyt_fil,auto_op,vt_optype);
  4 15696     <*v*> waitch(cs_auto_retur,auto_op,vt_optype,-1);
  4 15697         s:= d.auto_op.data(9);
  4 15698         if s=0        then res:= 3  <* ok           *> else
  4 15699         if s=1 or s=2 then res:= 46 <* ukendt navn  *> else
  4 15700         if s=5 or s=7 then res:= 47 <* galt indhold *> else
  4 15701         if s=6        then res:= 48 <* i brug       *> else
  4 15702           fejlreaktion(14,2,<:auto,filskift:>,0);
  4 15703         if res<>3 then goto returner;
  4 15704     
  4 15704         tofrom(nytnavn,d.op.data,8);
  4 15705     
  4 15705         <* find første post *>
  4 15706         disable
  4 15707         begin
  5 15708           døgnstart:= systime(5,0.0,t);
  5 15709           kl:= round t;
  5 15710           filref:= d.auto_op.data(4);
  5 15711           sidste_post:= d.auto_op.data(1);
  5 15712           postnr:= 0;
  5 15713           for postnr:= postnr+1 while postnr <= sidste_post do
  5 15714           begin
  6 15715               s:= læsfil(filref,postnr,zi);
  6 15716             if s<>0 then fejlreaktion(5,s,<:auto,filskift:>,0);
  6 15717             if fil(zi).iaf(2) > kl then goto post_fundet;
  6 15718           end;
  5 15719           postnr:= 1;
  5 15720           døgnstart:= systime(4,systid(døgnstart+1,120000),t);
  5 15721     \f

  5 15721     message procedure vt_auto side 7 - 810507/cl;
  5 15722     
  5 15722     post_fundet:
  5 15723           s:= læsfil(filref,postnr,zi);
  5 15724           if s<>0 then fejlreaktion(5,s,<:auto,filskift:>,0);
  5 15725           aktion:= fil(zi).iaf(1);
  5 15726           næste_tid:= systid(døgnstart,fil(zi).iaf(2));
  5 15727           id1:= fil(zi).iaf(3);
  5 15728           id2:= fil(zi).iaf(4);
  5 15729           res:= 3;
  5 15730         end;
  4 15731       end ny fil;
  3 15732     
  3 15732     returner:
  3 15733       d.op.resultat:= res;
  3 15734     <*+2*>
  3 15735     <**> disable
  3 15736     <**> if testbit41 and overvåget then
  3 15737     <**> begin
  4 15738     <**>   skriv_vt_auto(out,0);
  4 15739     <**>   write(out,<:   returner operation::>);
  4 15740     <**>   skriv_op(out,op);
  4 15741     <**> end;
  3 15742     <*-2*>
  3 15743       signalch(d.op.retur,op,d.op.optype);
  3 15744     
  3 15744       if vt_log_aktiv then
  3 15745       begin
  4 15746         waitch(cs_vt_logpool,op,vt_optype,-1);
  4 15747         startoperation(op,curr_coruid,cs_vt_logpool,0);
  4 15748         if nytnavn(1)=0 then
  4 15749           hægtstring(d.op.data.v_tekst,1,<:ophør:>)
  4 15750         else
  4 15751           skriv_text(d.op.data.v_tekst,1,nytnavn);
  4 15752         d.op.data.v_kode:= 4; <*PS (PlanSkift)*>
  4 15753         systime(1,0.0,d.op.data.v_tid);
  4 15754         signalch(cs_vt_log,op,vt_optype);
  4 15755       end;
  3 15756     
  3 15756       if filnavn(1)<>0 then
  3 15757       begin <* meddelelse til io om annulering *>
  4 15758         disable begin
  5 15759           start_operation(auto_op,curr_coruid,cs_auto_retur,23<*io_gen_medd*>);
  5 15760           i:= 1;
  5 15761           hægtstring(d.auto_op.data,i,<:auto :>);
  5 15762           skriv_text(d.auto_op.data,i,filnavn);
  5 15763           hægtstring(d.auto_op.data,i,<: annuleret:>);
  5 15764           repeat skrivtegn(d.auto_op.data,i,'nul') until (i-1) mod 6 = 0;
  5 15765           signalch(cs_io,auto_op,io_optype or gen_optype);
  5 15766         end;
  4 15767         waitch(cs_auto_retur,auto_op,io_optype or gen_optype,-1);
  4 15768       end;
  3 15769       goto vent;
  3 15770     
  3 15770     vt_auto_trap:
  3 15771       disable skriv_vt_auto(zbillede,1);
  3 15772     
  3 15772     end vt_auto;
  2 15773     message procedure vt_log side 1 - 920517/cl;
  2 15774     
  2 15774     procedure vt_log;
  2 15775     begin
  3 15776       integer i,j,ventetid;
  3 15777       real dg,t,nu,skiftetid;
  3 15778       boolean fil_åben;
  3 15779       integer array ia(1:10),dp,dp1(1:8);
  3 15780       integer array field op, iaf;
  3 15781     
  3 15781       procedure skriv_vt_log(zud,omfang);
  3 15782         value                    omfang;
  3 15783         zone                 zud;
  3 15784         integer                  omfang;
  3 15785       begin
  4 15786         write(zud,"nl",1,<:+++ vt-log :>);
  4 15787         if omfang<>0 then
  4 15788         begin
  5 15789           skriv_coru(zud, abs curr_coruno);
  5 15790           write(zud,"nl",1,<<d>,
  5 15791             <:i              :>,i,"nl",1,
  5 15792             <:j              :>,j,"nl",1,
  5 15793             <:ventetid       :>,ventetid,"nl",1,
  5 15794             <:dg             :>,<<zddddd.dd>,dg,"nl",1,
  5 15795             <:t              :>,t,"nl",1,
  5 15796             <:nu             :>,nu,"nl",1,
  5 15797             <:skiftetid      :>,skiftetid,"nl",1,
  5 15798             <:filåben        :>,if fil_åben then <:true:> else <:false:>,"nl",1,
  5 15799             <:op             :>,<<d>,op,"nl",1,
  5 15800             <::>);
  5 15801           raf:= 0;
  5 15802           write(zud,"nl",1,<:ia::>);
  5 15803           skrivhele(zud,ia.raf,20,2);
  5 15804           write(zud,"nl",2,<:dp::>);
  5 15805           skrivhele(zud,dp.raf,16,2);
  5 15806           write(zud,"nl",2,<:dp1::>);
  5 15807           skrivhele(zud,dp1.raf,16,2);
  5 15808         end;
  4 15809       end;
  3 15810     
  3 15810     message procedure vt_log side 2 - 920517/cl;
  3 15811     
  3 15811       procedure slet_fil;
  3 15812       begin
  4 15813         integer segm,res;
  4 15814         integer array tail(1:10);
  4 15815     
  4 15815         res:= monitor(42)lookup_entry:(zvtlog,0,tail);
  4 15816         if res=0 then
  4 15817         begin
  5 15818           segm:= tail(10);
  5 15819           res:=monitor(48)remove_entry:(zvtlog,0,tail);
  5 15820           if res=0 then
  5 15821           begin
  6 15822             close(zvtlog,true);
  6 15823             open(zvtlog,4,<:vtlogpool:>,0); close(zvtlog,true);
  6 15824             res:=monitor(42)lookup_entry:(zvtlog,0,tail);
  6 15825             if res=0 then
  6 15826             begin
  7 15827               tail(1):= tail(1)+segm;
  7 15828               monitor(44)change_entry:(zvtlog,0,tail);
  7 15829             end;
  6 15830           end;
  5 15831         end;
  4 15832       end;
  3 15833     
  3 15833       boolean procedure udvid_fil;
  3 15834       begin
  4 15835         integer res,spos;
  4 15836         integer array tail(1:10);
  4 15837         zone z(1,1,stderror);
  4 15838     
  4 15838         udvid_fil:= false;
  4 15839         open(z,0,<:vtlogpool:>,0); close(z,true);
  4 15840         res:= monitor(42)lookup_entry:(z,0,tail);
  4 15841         if (res=0) and (tail(1) >= vt_log_slicelgd) then
  4 15842         begin
  5 15843           tail(1):=tail(1) - vt_log_slicelgd;
  5 15844           res:=monitor(44)change_entry:(z,0,tail);
  5 15845           if res=0 then
  5 15846           begin
  6 15847             spos:= vt_logtail(1);
  6 15848             vt_logtail(1):= vt_logtail(1)+vt_log_slicelgd;
  6 15849             res:=monitor(44)change_entry:(zvtlog,0,vt_logtail);
  6 15850             if res<>0 then
  6 15851             begin
  7 15852               vt_logtail(1):= vt_logtail(1) - vt_log_slicelgd;
  7 15853               tail(1):= tail(1) + vt_log_slicelgd;
  7 15854               monitor(44)change_entry:(z,0,tail);
  7 15855             end
  6 15856             else
  6 15857             begin
  7 15858               setposition(zvtlog,0,spos);
  7 15859               udvid_fil:= true;
  7 15860             end;
  6 15861           end;
  5 15862         end;
  4 15863       end;
  3 15864     
  3 15864     message procedure vt_log side 3 - 920517/cl;
  3 15865     
  3 15865     boolean procedure ny_fil;
  3 15866     begin
  4 15867       integer res,i,j;
  4 15868       integer array nyt(1:4), ia,tail(1:10);
  4 15869       long array field navn;
  4 15870       real t;
  4 15871     
  4 15871       navn:=0;
  4 15872       if fil_åben then
  4 15873       begin
  5 15874         close(zvtlog,true);
  5 15875         fil_åben:= false;
  5 15876         nyt.navn(1):= long<:vtlo:>;
  5 15877         nyt.navn(2):= long<::>;
  5 15878         anbringtal(nyt,5,round systime(4,vt_logstart,t),-6);
  5 15879         j:= 'a' - 1;
  5 15880         repeat
  5 15881           res:=monitor(46)rename_entry:(zvtlog,0,nyt);
  5 15882           if res=3 then
  5 15883           begin
  6 15884             j:= j+1;
  6 15885             if j <= 'å' then skrivtegn(nyt,11,j);
  6 15886           end;
  5 15887         until (res<>3) or (j > 'å');
  5 15888     
  5 15888         if res=0 then
  5 15889         begin
  6 15890           open(zvtlog,4,<:vtlogklar:>,0);
  6 15891           res:=monitor(42)lookup_entry:(zvtlog,0,tail);
  6 15892           if res=0 then
  6 15893             res:=monitor(52)create_areaproc:(zvtlog,0,ia);
  6 15894           if res=0 then
  6 15895           begin
  7 15896             res:=monitor(8)reserve_process:(zvtlog,0,ia);
  7 15897             if res<>0 then monitor(64)remove_areaproc:(zvtlog,0,ia);
  7 15898           end;
  6 15899     
  6 15899           if res=0 then
  6 15900           begin
  7 15901             setposition(zvtlog,0,tail(10)//64);
  7 15902             navn:= (tail(10) mod 64)*8;
  7 15903             if (tail(1) <= tail(10)//64) then
  7 15904               outrec6(zvtlog,512)
  7 15905             else
  7 15906               swoprec6(zvtlog,512);
  7 15907             tofrom(zvtlog.navn,nyt,8);
  7 15908             tail(10):= tail(10)+1;
  7 15909             setposition(zvtlog,0,tail(10)//64);
  7 15910             monitor(44)change_entry:(zvtlog,0,tail);
  7 15911             close(zvtlog,true);
  7 15912           end
  6 15913           else
  6 15914           begin
  7 15915             navn:= 0;
  7 15916             close(zvtlog,true);
  7 15917             open(zvtlog,4,<:vtlog:>,0);
  7 15918             slet_fil;
  7 15919           end;
  6 15920         end
  5 15921         else
  5 15922           slet_fil;
  5 15923       end;
  4 15924     
  4 15924       <* logfilen er nu omdøbt og indskrevet i vtlogklar *>
  4 15925       <* eller den er blevet slettet.                    *>
  4 15926     
  4 15926       open(zvtlog,4,<:vtlog:>,0);
  4 15927       for i:= 1 step 1 until 10 do vt_logtail(i):= 0;
  4 15928       iaf:= 2; tofrom(vt_logtail.iaf,vt_logdisc,8);
  4 15929       vt_logtail(6):= systime(7,0,t);
  4 15930     
  4 15930       res:=monitor(40)create_entry:(z_vtlog,0,vt_logtail);
  4 15931       if res=0 then
  4 15932       begin
  5 15933         monitor(50)permanent_entry:(zvtlog,3,ia);
  5 15934         if res<>0 then
  5 15935           monitor(48)remove_entry:(zvtlog,0,ia);
  5 15936       end;
  4 15937     
  4 15937       if res=0 then fil_åben:= true;
  4 15938     
  4 15938       ny_fil:= fil_åben;
  4 15939     end ny_fil;
  3 15940     
  3 15940     message procedure vt_log side 4 - 920517/cl;
  3 15941     
  3 15941     procedure skriv_post(logpost);
  3 15942       integer array      logpost;
  3 15943     begin
  4 15944       integer array field post;
  4 15945       real t;
  4 15946     
  4 15946       if vt_logtail(10)//32 < vt_logtail(1) then
  4 15947       begin
  5 15948         outrec6(zvtlog,512);
  5 15949         post:= (vt_logtail(10) mod 32)*16;
  5 15950         tofrom(zvtlog.post,logpost,16);
  5 15951         vt_logtail(10):= vt_logtail(10)+1;
  5 15952         setposition(zvtlog,0,vt_logtail(10)//32);
  5 15953         vt_logtail(6):= systime(7,0,t);
  5 15954         monitor(44)change_entry:(zvtlog,0,vt_logtail);
  5 15955       end;
  4 15956     end;
  3 15957     
  3 15957     procedure sletsendte;
  3 15958     begin
  4 15959       zone z(128,1,stderror), zpool,zlog(1,1,stderror);
  4 15960       integer array pooltail,tail,ia(1:10);
  4 15961       integer i,res;
  4 15962     
  4 15962       open(zpool,0,<:vtlogpool:>,0); close(zpool,true);
  4 15963       res:=monitor(42,zpool,0,pooltail);
  4 15964     
  4 15964       open(z,4,<:vtlogslet:>,0);
  4 15965       if monitor(42,z,0,tail)=0 and tail(10)>0 then
  4 15966       begin
  5 15967         if monitor(52,z,0,tail)=0 then
  5 15968         begin
  6 15969           if monitor(8,z,0,tail)=0 then
  6 15970           begin
  7 15971             for i:=1 step 1 until tail(10) do
  7 15972             begin
  8 15973               inrec6(z,8);
  8 15974               open(zlog,0,z,0); close(zlog,true);
  8 15975               if monitor(42,zlog,0,ia)=0 then
  8 15976               begin
  9 15977                 if monitor(48,zlog,0,ia)=0 then
  9 15978                 begin
 10 15979                   pooltail(1):=pooltail(1)+ia(1);
 10 15980                 end;
  9 15981               end;
  8 15982             end;
  7 15983             tail(10):=0;
  7 15984             monitor(44,z,0,tail);
  7 15985           end
  6 15986           else
  6 15987             monitor(64,z,0,tail);
  6 15988         end;
  5 15989         if res=0 then monitor(44,zpool,0,pooltail);
  5 15990       end;
  4 15991       close(z,true);
  4 15992     end;
  3 15993     
  3 15993     message procedure vt_log side 5 - 920517/cl;
  3 15994     
  3 15994       trap(vt_log_trap);
  3 15995       stack_claim(200);
  3 15996     
  3 15996       fil_åben:= false;
  3 15997       if -, vt_log_aktiv then goto init_slut;
  3 15998       open(zvtlog,4,<:vtlog:>,0);
  3 15999       i:=monitor(42)lookup_entry:(zvtlog,0,vt_logtail);
  3 16000       if i=0 then
  3 16001         i:=monitor(52)create_areaproc:(zvtlog,0,ia);
  3 16002       if i=0 then
  3 16003       begin
  4 16004         i:=monitor(8)reserve_process:(zvtlog,0,ia);
  4 16005         if i<>0 then monitor(64)remove_areaproc:(zvtlog,0,ia);
  4 16006       end;
  3 16007     
  3 16007       if (i=0) and (vt_logtail(1)=0) then
  3 16008       begin
  4 16009         close(zvtlog,true);
  4 16010         monitor(48)remove_entry:(zvtlog,0,ia);
  4 16011         i:= 1;
  4 16012       end;
  3 16013     
  3 16013       disable
  3 16014       if i=0 then
  3 16015       begin
  4 16016         fil_åben:= true;
  4 16017         inrec6(zvtlog,512);
  4 16018         vt_logstart:= zvtlog.v_tid;
  4 16019         systime(1,0.0,nu);
  4 16020         if (nu - vt_logstart) < 24*60*60.0 then
  4 16021         begin
  5 16022           setposition(zvtlog,0,vt_logtail(10)//32);
  5 16023           if (vt_logtail(10)//32) < vt_logtail(1) then
  5 16024           begin
  6 16025             inrec6(zvtlog,512);
  6 16026             setposition(zvtlog,0,vt_logtail(10)//32);
  6 16027           end;
  5 16028         end
  4 16029         else
  4 16030         begin
  5 16031           if ny_fil then
  5 16032           begin
  6 16033             if udvid_fil then
  6 16034             begin
  7 16035               systime(1,0.0,dp.v_tid);
  7 16036               vt_logstart:= dp.v_tid;
  7 16037               dp.v_kode:=0;
  7 16038               skriv_post(dp);
  7 16039             end
  6 16040             else
  6 16041             begin
  7 16042               close(zvtlog,true);
  7 16043               monitor(48)remove_entry:(zvtlog,0,ia);
  7 16044               fil_åben:= false;
  7 16045             end;
  6 16046           end;
  5 16047         end;
  4 16048       end
  3 16049       else
  3 16050       begin
  4 16051         close(zvtlog,true);
  4 16052         if ny_fil then
  4 16053         begin
  5 16054           if udvid_fil then
  5 16055           begin
  6 16056             systime(1,0.0,dp.v_tid);
  6 16057             vt_logstart:= dp.v_tid;
  6 16058             dp.v_kode:=0;
  6 16059             skriv_post(dp);
  6 16060           end
  5 16061           else
  5 16062           begin
  6 16063             close(zvtlog,true);
  6 16064             monitor(48)remove_entry:(zvtlog,0,ia);
  6 16065             fil_åben:= false;
  6 16066           end;
  5 16067         end;
  4 16068       end;
  3 16069     
  3 16069     init_slut:
  3 16070     
  3 16070       dg:= systime(5,0,t);
  3 16071       if t < vt_logskift then
  3 16072         skiftetid:= systid(dg,vt_logskift)
  3 16073       else
  3 16074         skiftetid:= systid(dg+1,vt_logskift);
  3 16075     
  3 16075     message procedure vt_log side 6 - 920517/cl;
  3 16076     
  3 16076     vent:
  3 16077     
  3 16077       systime(1,0.0,nu); dg:= systime(5,0.0,t);
  3 16078       ventetid:= round(skiftetid - nu);
  3 16079       if ventetid < 1 then ventetid:= 1;
  3 16080     
  3 16080     <*V*> waitch(cs_vt_log,op,vt_optype,ventetid);
  3 16081     
  3 16081       systime(1,0.0,nu); dg:=systime(4,nu,t);
  3 16082       if op <> 0 then
  3 16083       begin
  4 16084         tofrom(dp,d.op.data,16);
  4 16085         signalch(cs_vt_logpool,op,vt_optype);
  4 16086       end;
  3 16087     
  3 16087       if -, vt_log_aktiv then goto vent;
  3 16088     
  3 16088       disable if (op=0) or (nu > skiftetid) then
  3 16089       begin
  4 16090         if fil_åben then
  4 16091         begin
  5 16092           dp1.v_tid:= systid(dg,vt_logskift);
  5 16093           dp1.v_kode:= 1;
  5 16094           if (vt_logtail(10)//32) >= vt_logtail(1) then
  5 16095           begin
  6 16096             if udvid_fil then
  6 16097               skriv_post(dp1);
  6 16098           end
  5 16099           else
  5 16100             skriv_post(dp1);
  5 16101         end;
  4 16102     
  4 16102         if (op=0) or (nu > skiftetid) then
  4 16103           skiftetid:= skiftetid + 24*60*60.0;
  4 16104     
  4 16104         sletsendte;
  4 16105     
  4 16105         if ny_fil then
  4 16106         begin
  5 16107           if udvid_fil then
  5 16108           begin
  6 16109             vt_logstart:=dp1.v_tid:= systid(dg,vt_logskift);
  6 16110             dp1.v_kode:= 0;
  6 16111             skriv_post(dp1);
  6 16112           end
  5 16113           else
  5 16114           begin
  6 16115             close(zvtlog,true);
  6 16116             monitor(48)remove_entry:(zvtlog,0,ia);
  6 16117             fil_åben:= false;
  6 16118           end;
  5 16119         end;
  4 16120       end;
  3 16121     
  3 16121       disable if op<>0 and fil_åben then
  3 16122       begin
  4 16123         if (vt_logtail(10)//32) >= vt_logtail(1) then
  4 16124         begin
  5 16125           if -, udvid_fil then
  5 16126           begin
  6 16127             if ny_fil then
  6 16128             begin
  7 16129               if udvid_fil then
  7 16130               begin
  8 16131                 systime(1,0.0,dp1.v_tid);
  8 16132                 vt_logstart:= dp1.v_tid;
  8 16133                 dp1.v_kode:= 0;
  8 16134                 skriv_post(dp1);
  8 16135               end
  7 16136               else
  7 16137               begin
  8 16138                 close(zvtlog,true);
  8 16139                 monitor(48)remove_entry:(zvtlog,0,ia);
  8 16140                 fil_åben:= false;
  8 16141               end;
  7 16142             end;
  6 16143           end;
  5 16144         end;
  4 16145     
  4 16145         if fil_åben then skriv_post(dp);
  4 16146       end;
  3 16147     
  3 16147       goto vent;
  3 16148     
  3 16148     vt_log_trap:
  3 16149       disable skriv_vt_log(zbillede,1);
  3 16150     end vt_log;
  2 16151 \f

  2 16151 
  2 16151 algol list.off;
  2 16152 message coroutinemonitor - 11 ;
  2 16153   
  2 16153 
  2 16153     <*************** coroutine monitor procedures ***************>
  2 16154 
  2 16154 
  2 16154     <***** delay *****
  2 16155 
  2 16155     this procedure links the calling coroutine into the timerqueue and sets
  2 16156     the timeout value to 'timeout'. *>
  2 16157 
  2 16157 
  2 16157     procedure delay (timeout);
  2 16158     value timeout;
  2 16159     integer timeout;
  2 16160     begin
  3 16161       link(current, idlequeue);
  3 16162       link(current + corutimerchain, timerqueue);
  3 16163       d.current.corutimer:= timeout;
  3 16164 
  3 16164 
  3 16164       passivate;
  3 16165       d.current.corutimer:= 0;
  3 16166     end;
  2 16167 \f

  2 16167 
  2 16167 message coroutinemonitor - 12 ;
  2 16168 
  2 16168 
  2 16168     <***** pass *****
  2 16169 
  2 16169     this procedure moves the calling coroutine from the head of the ready 
  2 16170     queue down below all coroutines of lower or equal priority. *>
  2 16171   
  2 16171   
  2 16171     procedure pass;
  2 16172     begin
  3 16173       linkprio(current, readyqueue);
  3 16174 
  3 16174 
  3 16174       passivate;
  3 16175     end;
  2 16176 
  2 16176 
  2 16176     <***** signal ****
  2 16177 
  2 16177     this procedure increases the value af 'semaphore' by 1.
  2 16178     in case some coroutine is already waiting, it is linked into the ready 
  2 16179     queue for activation. the calling coroutine continues execution. *>
  2 16180   
  2 16180 
  2 16180     procedure signal (semaphore);
  2 16181     value semaphore;
  2 16182     integer semaphore;
  2 16183     begin
  3 16184       integer array field sem;
  3 16185       sem:= semaphore;
  3 16186       if d.sem.simvalue < 0 then linkprio(d.sem.simcoru, readyqueue);
  3 16187       d.sem.simvalue:= d.sem.simvalue + 1;
  3 16188 
  3 16188 
  3 16188     end;
  2 16189 \f

  2 16189 
  2 16189 message coroutinemonitor - 13 ;
  2 16190 
  2 16190 
  2 16190     <***** wait *****
  2 16191 
  2 16191     this procedure decreases the value of 'semaphore' by 1.
  2 16192     in case the value of the semaphore is negative after the decrease, the
  2 16193     calling coroutine is linked into the semaphore queue waiting for a
  2 16194     coroutine to signal this semaphore. *>
  2 16195   
  2 16195   
  2 16195     procedure wait (semaphore);
  2 16196     value semaphore;
  2 16197     integer semaphore;
  2 16198     begin
  3 16199       integer array field sem;
  3 16200       sem:= semaphore;
  3 16201       d.sem.simvalue:= d.sem.simvalue - 1;
  3 16202 
  3 16202 
  3 16202       linkprio(current, if d.sem.simvalue < 0 then sem+simcoru else readyqueue);
  3 16203       passivate;
  3 16204     end;
  2 16205 \f

  2 16205 
  2 16205 message coroutinemonitor - 14 ;
  2 16206 
  2 16206 
  2 16206     <***** inspect *****
  2 16207 
  2 16207     this procedure inspects the value of the semaphore and returns it in
  2 16208     'elements'.
  2 16209     the semaphore is left unchanged. *>
  2 16210 
  2 16210 
  2 16210     procedure inspect (semaphore, elements);
  2 16211     value semaphore;
  2 16212     integer semaphore, elements;
  2 16213     begin
  3 16214       integer array field sem;
  3 16215       sem:= semaphore;
  3 16216       elements:= d.sem.simvalue;
  3 16217 
  3 16217 
  3 16217     end;
  2 16218 \f

  2 16218 
  2 16218 message coroutinemonitor - 15 ;
  2 16219 
  2 16219 
  2 16219     <***** signalch *****
  2 16220 
  2 16220     this procedure delivers an operation at 'semaphore'.
  2 16221     in case another coroutine is already waiting for an operation of the
  2 16222     kind 'operationtype' this coroutine will get the operation and it will
  2 16223     be put into the ready queue for activation.
  2 16224     in case no coroutine is waiting for the actial kind of operation it is
  2 16225     linked into the semaphore queue, at the end of the queue
  2 16226     if operation is positive and at the beginning if operation is negative. 
  2 16227     the calling coroutine continues execution. *>
  2 16228   
  2 16228   
  2 16228     procedure signalch (semaphore, operation, operationtype);
  2 16229     value semaphore, operation, operationtype;
  2 16230     integer semaphore, operation;
  2 16231     boolean operationtype;
  2 16232     begin
  3 16233       integer array field firstcoru, currcoru, op,currop;
  3 16234       op:= abs  operation;
  3 16235       d.op.optype:= operationtype;
  3 16236       firstcoru:= semaphore + semcoru;
  3 16237       currcoru:= d.firstcoru.next;
  3 16238       while currcoru <> firstcoru do
  3 16239       begin
  4 16240         if (d.currcoru.corutypeset and operationtype) extract 12 <> 0 then
  4 16241         begin
  5 16242           link(operation, 0);
  5 16243           d.currcoru.coruop:= operation;
  5 16244           linkprio(currcoru, readyqueue);
  5 16245           link(currcoru + corutimerchain, idlequeue);
  5 16246           goto exit;
  5 16247         end else currcoru:= d.currcoru.next;
  4 16248       end;
  3 16249       currop:=semaphore + semop;
  3 16250       if operation < 0 then currop:=d.currop.next;
  3 16251       link(op, currop);
  3 16252   exit:
  3 16253 
  3 16253 
  3 16253     end;
  2 16254 \f

  2 16254 
  2 16254 message coroutinemonitor - 16 ;
  2 16255 
  2 16255 
  2 16255     <***** waitch *****
  2 16256 
  2 16256     this procedure fetches an operation from a semaphore.
  2 16257     in case an operation matching 'operationtypeset' is already waiting at
  2 16258     'semaphore' it is handed over to the calling coroutine.
  2 16259     in case no matching operation is waiting, the calling coroutine is
  2 16260     linked to the semaphore.
  2 16261     in any case the calling coroutine will be stopped and all corouti-
  2 16262     nes are rescheduled. *>
  2 16263   
  2 16263   
  2 16263     procedure waitch (semaphore, operation, operationtypeset, timeout);
  2 16264     value semaphore, operationtypeset, timeout;
  2 16265     integer semaphore, operation, timeout;
  2 16266     boolean operationtypeset;
  2 16267     begin
  3 16268       integer array field firstop, currop;
  3 16269       firstop:= semaphore + semop;
  3 16270       currop:= d.firstop.next;
  3 16271 
  3 16271 
  3 16271       while currop <> firstop do
  3 16272       begin
  4 16273         if (d.currop.optype and operationtypeset) extract 12 <> 0 then
  4 16274         begin
  5 16275           link(currop, 0);
  5 16276           d.current.coruop:= currop;
  5 16277           operation:= currop;
  5 16278 \f

  5 16278 
  5 16278 message coroutinemonitor - 17 ;
  5 16279 
  5 16279           linkprio(current, readyqueue);
  5 16280           passivate;
  5 16281           goto exit;
  5 16282         end else currop:= d.currop.next;
  4 16283       end;
  3 16284       linkprio(current, semaphore + semcoru);
  3 16285       if timeout > 0 then
  3 16286       begin
  4 16287         link(current + corutimerchain, timerqueue);
  4 16288         d.current.corutimer:= timeout;
  4 16289       end else d.current.corutimer:= 0;
  3 16290       d.current.corutypeset:= operationtypeset;
  3 16291       passivate;
  3 16292       if d.current.corutimer < 0 then operation:= 0
  3 16293                                  else operation:= d.current.coruop;
  3 16294       d.current.corutimer:= 0;
  3 16295       currop:= operation;
  3 16296       d.current.coruop:= currop;
  3 16297       link(current+corutimerchain, idlequeue);
  3 16298   exit:
  3 16299 
  3 16299 
  3 16299     end;
  2 16300 \f

  2 16300 
  2 16300 message coroutinemonitor - 18 ;
  2 16301 
  2 16301 
  2 16301     <***** inspectch *****
  2 16302 
  2 16302     this procedure inspects the queue of operations waiting at 'semaphore'.
  2 16303     the number of matching operations are counted and delivered in 'elements'.
  2 16304 if no operations are found the number of coroutines waiting
  2 16305 for operations of the typeset are counted and delivered as
  2 16306 negative value in 'elements'.
  2 16307     the semaphore is left unchanged. *>
  2 16308   
  2 16308   
  2 16308     procedure inspectch (semaphore, operationtypeset, elements);
  2 16309     value semaphore, operationtypeset;
  2 16310     integer semaphore, elements;
  2 16311     boolean operationtypeset;
  2 16312     begin
  3 16313       integer array field firstop, currop,firstcoru,currcoru;
  3 16314       integer counter;
  3 16315       counter:= 0;
  3 16316       firstop:= semaphore + semop;
  3 16317       currop:= d.firstop.next;
  3 16318       while currop <> firstop do
  3 16319       begin
  4 16320         if (operationtypeset and d.currop.optype) extract 12 <> 0 then
  4 16321           counter:= counter + 1;
  4 16322         currop:= d.currop.next;
  4 16323       end;
  3 16324       if counter=0 then
  3 16325       begin
  4 16326         firstcoru:=semaphore + sem_coru;
  4 16327         curr_coru:=d.firstcoru.next;
  4 16328         while curr_coru<>first_coru do
  4 16329         begin
  5 16330           if (operationtypeset and d.curr_coru.corutypeset) extract 12 <>0 then
  5 16331             counter:=counter - 1;
  5 16332           curr_coru:=d.curr_coru.next;
  5 16333         end;
  4 16334       end;
  3 16335       elements:= counter;
  3 16336 
  3 16336 
  3 16336     end;
  2 16337 \f

  2 16337 
  2 16337 message coroutinemonitor - 19 ;
  2 16338 
  2 16338 
  2 16338     <***** csendmessage *****
  2 16339 
  2 16339     this procedure sends the message in 'mess' to the process defined by the name
  2 16340     in 'receiver', and returns an identification of the message extension used
  2 16341     for sending the message (this identification is to be used for calling 'cwait-
  2 16342     answer' or 'cregretmessage'. *>
  2 16343   
  2 16343   
  2 16343     procedure csendmessage (receiver, mess, messextension);
  2 16344     real array receiver;
  2 16345     integer array mess;
  2 16346     integer messextension;
  2 16347     begin
  3 16348       integer bufref, messext;
  3 16349       messref(maxmessext):= 0;
  3 16350       messext:= 1;
  3 16351       while messref(messext) <> 0 do messext:= messext + 1;
  3 16352       if messext = maxmessext then <* no resources *> messext:= 0 else
  3 16353       begin
  4 16354         messcode(messext):= 1 shift 12 add 2;
  4 16355         mon(16) send message :(0, mess, 0, receiver);
  4 16356         messref(messext):= monw2;
  4 16357         if monw2 > 0 then messextension:= messext else messextension:= 0;
  4 16358       end;
  3 16359 
  3 16359 
  3 16359     end;
  2 16360 \f

  2 16360 
  2 16360 message coroutinemonitor - 20 ;
  2 16361 
  2 16361 
  2 16361     <***** cwaitanswer *****
  2 16362 
  2 16362     this procedure asks the coroutine monitor to get an answer to the message
  2 16363     corresponding to 'messextension'. in case the answer has already arrived
  2 16364     it stays in the eventqueue until 'cwaitanswer' is called.
  2 16365     in case 'timeout' is positive, the coroutine is linked into the timer
  2 16366     queue, and in case the answer does not arrive within 'timout' seconds the
  2 16367     coroutine is restarted with result = 0. *>
  2 16368   
  2 16368   
  2 16368     procedure cwaitanswer (messextension, answer, result, timeout);
  2 16369     value messextension, timeout;
  2 16370     integer messextension, result, timeout;
  2 16371     integer array answer;
  2 16372     begin
  3 16373       integer messext;
  3 16374       messext:= messextension;
  3 16375       messcode(messext):= messcode(messext) extract 12;
  3 16376       link(current, idlequeue);
  3 16377       messop(messext):= current;
  3 16378       if timeout > 0 then
  3 16379       begin
  4 16380         link(current + corutimerchain, timerqueue);
  4 16381         d.current.corutimer:= timeout;
  4 16382       end else d.current.corutimer:= 0;
  3 16383 
  3 16383 
  3 16383       passivate;
  3 16384       if d.current.corutimer < 0 then result:= 0 else
  3 16385       begin
  4 16386         mon(18) wait answer :(0, answer, messref(messextension), 0);
  4 16387         result:= monw0;
  4 16388         baseevent:= 0;
  4 16389         messref(messextension):= 0;
  4 16390       end;
  3 16391       d.current.corutimer:= 0;
  3 16392       link(current+corutimerchain, idlequeue);
  3 16393     end;
  2 16394 \f

  2 16394 
  2 16394 message coroutinemonitor - 21 ;
  2 16395 
  2 16395 
  2 16395     <***** cwaitmessage *****
  2 16396 
  2 16396     this procedure asks the coroutine monitor to give it a message, when some-
  2 16397     one arrives. in case a message has arrived already it stays at the event queue
  2 16398     until 'cwaitmessage' is called.
  2 16399     in case 'timeout' is positive, the coroutine is linked into the timer queue,
  2 16400     if no message arrives within 'timeout' seconds, the coroutine is restarted
  2 16401     with messbufferref = 0. *>
  2 16402   
  2 16402   
  2 16402     procedure cwaitmessage (processextension, mess, messbufferref, timeout);
  2 16403     value timeout, processextension;
  2 16404     integer processextension, messbufferref, timeout;
  2 16405     integer array mess;
  2 16406     begin
  3 16407       integer i;
  3 16408       integer array field messbuf;
  3 16409       proccode(processextension):= 2;
  3 16410       procop(processextension):= current;
  3 16411       link(current, idlequeue);
  3 16412       if timeout > 0 then
  3 16413       begin
  4 16414         link(current + corutimerchain, timerqueue);
  4 16415         d.current.corutimer:= timeout;
  4 16416       end else d.current.corutimer:= 0;
  3 16417 
  3 16417 
  3 16417       passivate;
  3 16418       if d.current.corutimer < 0 then messbufferref:= 0 else
  3 16419       begin
  4 16420         messbuf:= procop(processextension);
  4 16421         for i:=1 step 1 until 8 do mess(i):= core.messbuf(4+i);
  4 16422         proccode(procext):= 1 shift 12;
  4 16423         messbufferref:= messbuf;
  4 16424         baseevent:= 0;
  4 16425       end;
  3 16426       d.current.corutimer:= 0;
  3 16427       link(current+corutimerchain, idlequeue);
  3 16428     end;
  2 16429 \f

  2 16429 
  2 16429 message coroutinemonitor - 22 ;
  2 16430 
  2 16430 
  2 16430     <***** cregretmessage *****
  2 16431 
  2 16431     this procedure regrets the message corresponding to messageexten-
  2 16432     sion, to release message buffer and message extension.
  2 16433     i/o messages are not regretable. *>
  2 16434 
  2 16434   
  2 16434   
  2 16434     procedure cregretmessage (messageextension);
  2 16435     value messageextension;
  2 16436     integer messageextension;
  2 16437     begin
  3 16438       integer array field messbuf;
  3 16439       messbuf:= messref(messageextension);
  3 16440       mon(82) regret message :(0, 0, messbuf, 0);
  3 16441       messref(messageextension):= 0;
  3 16442 
  3 16442 
  3 16442     end;
  2 16443 \f

  2 16443 
  2 16443 message coroutinemonitor - 23 ;
  2 16444 
  2 16444 
  2 16444     <***** semsendmessage *****
  2 16445 
  2 16445     this procedure sends the message 'mess' to 'receiver' and at the same time it
  2 16446     defines a 'signalch(semaphore, operation, operationtype)' to be performed
  2 16447     by the monitor, when the answer arrives.
  2 16448     in case there are too few resources to send the message, the operation is
  2 16449     returned immediately with the result field set to zero. *>
  2 16450   
  2 16450   
  2 16450     procedure semsendmessage (receiver, mess, semaphore, operation, operationtype);
  2 16451     value semaphore, operation, operationtype;
  2 16452     real array receiver;
  2 16453     integer array mess;
  2 16454     integer semaphore, operation;
  2 16455     boolean operationtype;
  2 16456     begin
  3 16457       integer array field op;
  3 16458       integer messext;
  3 16459       op:= operation;
  3 16460       messref(maxmessext):= 0;
  3 16461       messext:= 1;
  3 16462       while messref(messext) <> 0 do messext:= messext + 1;
  3 16463       if messext < maxmessext then
  3 16464       begin
  4 16465         messop(messext):= op;
  4 16466         messcode(messext):=1;
  4 16467         d.op(1):= semaphore;
  4 16468         d.op.optype:= operationtype;
  4 16469         mon(16) send message :(0, mess, 0, receiver);
  4 16470         messref(messext):= monw2;
  4 16471       end;
  3 16472 
  3 16472 
  3 16472       if messext = maxmessext or messref(messext) = 0 <* no resources *> then
  3 16473       begin   <* return the operation immediately with result = 0 *>
  4 16474         d.op(9):= 0;
  4 16475         signalch(semaphore, op, operationtype);
  4 16476       end;
  3 16477     end;
  2 16478 \f

  2 16478 
  2 16478 message coroutinemonitor - 24 ;
  2 16479 
  2 16479 
  2 16479     <***** semwaitmessage *****
  2 16480 
  2 16480     this procedure defines a 'signalch(semaphore, operation, operationtype)' to
  2 16481     be performed by the coroutine monitor when a message arrives to the process
  2 16482     corresponding to 'processextension'. *>
  2 16483   
  2 16483   
  2 16483     procedure semwaitmessage (processextension, semaphore, operation, operationtype);
  2 16484     value processextension, semaphore, operation, operationtype;
  2 16485     integer processextension, semaphore, operation;
  2 16486     boolean operationtype;
  2 16487     begin
  3 16488       integer array field op;
  3 16489       op:= operation;
  3 16490       procop(processextension):= operation;
  3 16491       d.op(1):= semaphore;
  3 16492       d.op.optype:= operationtype;
  3 16493       proccode(processextension):= 1;
  3 16494 
  3 16494 
  3 16494     end;
  2 16495 \f

  2 16495 
  2 16495 message coroutinemonitor - 25 ;
  2 16496 
  2 16496 
  2 16496     <***** semregretmessage *****
  2 16497 
  2 16497     this procedure regrets a message sent by semsendmessage.
  2 16498     the message is identified by the operation in which the answer should be
  2 16499     returned.
  2 16500     the procedure sets the result field of the operation to zero, and then
  2 16501     returns it by performing a signalch. *>
  2 16502   
  2 16502   
  2 16502     procedure semregretmessage (operation);
  2 16503     value operation;
  2 16504     integer operation;
  2 16505     begin
  3 16506       integer i, j;
  3 16507       integer array field op, sem;
  3 16508       op:= operation;
  3 16509       i:= 1;
  3 16510       while i < maxmessext do
  3 16511       begin
  4 16512         if messref(i) > 0 and (messcode(i) = 1 and messop(i) = op) then
  4 16513         begin
  5 16514           mon(82) regret message :(0, 0, messref(i), 0);
  5 16515           messref(i):= 0;
  5 16516           sem:= d.op(1);
  5 16517           for j:=1 step 1 until 9 do d.op(j):= 0;
  5 16518           signalch(sem, op, d.op.optype);
  5 16519           i:= maxmessext;
  5 16520         end;
  4 16521         i:= i + 1;
  4 16522       end;
  3 16523 
  3 16523 
  3 16523     end;
  2 16524 \f

  2 16524 
  2 16524 message coroutinemonitor - 26 ;
  2 16525 
  2 16525 
  2 16525     <***** link *****
  2 16526 
  2 16526     this procedure links an object (allocated in the descriptor array 'd') into
  2 16527     a queue of alements (allocated in the descriptor array 'd'). the queues
  2 16528     are all double chained, and the chainhead is of the same format as the chain
  2 16529     fields of the objects.
  2 16530     the procedure links the object immediately after the head. *>
  2 16531   
  2 16531   
  2 16531     procedure link (object, chainhead);
  2 16532     value object, chainhead;
  2 16533     integer object, chainhead;
  2 16534     begin
  3 16535       integer array field prevelement, nextelement, chead, obj;
  3 16536       obj:= object;
  3 16537       chead:= chainhead;
  3 16538       prevelement:= d.obj.prev;
  3 16539       nextelement:= d.obj.next;
  3 16540       d.prevelement.next:= nextelement;
  3 16541       d.nextelement.prev:= prevelement;
  3 16542       if chead > 0 then <* link into queue *>
  3 16543       begin
  4 16544         prevelement:= d.chead.prev;
  4 16545         d.obj.prev:= prevelement;
  4 16546         d.prevelement.next:= obj;
  4 16547         d.obj.next:= chead;
  4 16548         d.chead.prev:= obj;
  4 16549       end else
  3 16550       begin  <* link onto itself *>
  4 16551         d.obj.prev:= obj;
  4 16552         d.obj.next:= obj;
  4 16553       end;
  3 16554     end;
  2 16555 \f

  2 16555 
  2 16555 message coroutinemonitor - 27 ;
  2 16556 
  2 16556 
  2 16556     <***** linkprio *****
  2 16557 
  2 16557     this procedure is used to link coroutines into queues corresponding to
  2 16558     the priorities of the actual coroutine and the queue elements.
  2 16559     the object is linked immediately before the first coroutine of lower prio-
  2 16560     rity. *>
  2 16561   
  2 16561   
  2 16561     procedure linkprio (object, chainhead);
  2 16562     value object, chainhead;
  2 16563     integer object, chainhead;
  2 16564     begin
  3 16565       integer array field currelement, chead, obj;
  3 16566       obj:= object;
  3 16567       chead:= chainhead;
  3 16568       currelement:= d.chead.next;
  3 16569       while currelement <> chead
  3 16570             and d.currelement.corupriority <= d.obj.corupriority 
  3 16571               do currelement:= d.currelement.next;
  3 16572       link(obj, currelement);
  3 16573     end;
  2 16574 \f

  2 16574 
  2 16574 message coroutinemonitor - 28 ;
  2 16575 
  2 16575 \f

  2 16575 
  2 16575 message coroutinemonitor - 30a ;
  2 16576 
  2 16576 
  2 16576     <*************** extention to coroutine monitor procedures **********>
  2 16577 
  2 16577     <***** signalbin *****
  2 16578 
  2 16578     this procedure simulates a binary semaphore on a simple semaphore
  2 16579     by testing the value of the semaphore before signaling the
  2 16580     semaphore. if the value of the semaphore is one (=open) nothing is
  2 16581     done, otherwise a normal signal is carried out. *>
  2 16582 
  2 16582 
  2 16582     procedure signalbin(semaphore);
  2 16583     value semaphore;
  2 16584     integer semaphore;
  2 16585     begin
  3 16586       integer array field sem;
  3 16587       integer val;
  3 16588       sem:= semaphore;
  3 16589       inspect(sem,val);
  3 16590       if val<1 then signal(sem);
  3 16591     end;
  2 16592 \f

  2 16592 
  2 16592 message coroutinemonitor - 30b ;
  2 16593 
  2 16593   <***** coruno *****
  2 16594 
  2 16594   delivers the coroutinenumber for a give coroutine id.
  2 16595   if the coroutine does not exists the value 0 is delivered *>
  2 16596 
  2 16596   integer procedure coru_no(coru_id);
  2 16597   value                     coru_id;
  2 16598   integer                   coru_id;
  2 16599   begin
  3 16600     integer array field cor;
  3 16601 
  3 16601     coru_no:= 0;
  3 16602     for cor:= firstcoru step corusize until (coruref-1) do
  3 16603       if d.cor.coruident//1000 = coru_id then
  3 16604       coru_no:= d.cor.coruident mod 1000;
  3 16605   end;
  2 16606 \f

  2 16606 
  2 16606 message coroutinemonitor - 30c ;
  2 16607 
  2 16607   <***** coroutine *****
  2 16608 
  2 16608   delivers the referencebyte for the coroutinedescriptor for
  2 16609   a coroutine identified by coroutinenumber *>
  2 16610 
  2 16610   integer procedure coroutine(cor_no);
  2 16611     value                     cor_no;
  2 16612     integer                   cor_no;
  2 16613   coroutine:= if cor_no <= 0 or maxcoru < cor_no then -1 else
  2 16614               firstcoru + (cor_no-1)*corusize;
  2 16615 \f

  2 16615 
  2 16615 message coroutinemonitor - 30d ;
  2 16616 
  2 16616 <***** curr_coruno *****
  2 16617 
  2 16617 delivers number of calling coroutine 
  2 16618     curr_coruno:
  2 16619         < 0     = -current_coroutine_number in disabled mode
  2 16620         = 0     = procedure not called from coroutine
  2 16621         > 0     = current_coroutine_number in enabled mode   *>
  2 16622 
  2 16622 integer procedure curr_coruno;
  2 16623 begin
  3 16624   integer i;
  3 16625   integer array ia(1:12);
  3 16626 
  3 16626   i:= system(12,0,ia);
  3 16627   if i > 0 then
  3 16628   begin
  4 16629     i:= system(12,1,ia);
  4 16630     curr_coruno:= ia(3);
  4 16631   end else curr_coruno:= 0;
  3 16632 end curr_coruno;
  2 16633 \f

  2 16633 
  2 16633 message coroutinemonitor - 30e ;
  2 16634 
  2 16634 <***** curr_coruid *****
  2 16635 
  2 16635 delivers coruident of calling coroutine :
  2 16636 
  2 16636     curr_coruid:
  2 16637         > 0     = coruident of calling coroutine
  2 16638         = 0     = procedure not called from coroutine  *>
  2 16639 
  2 16639 integer procedure curr_coruid;
  2 16640 begin
  3 16641   integer cor_no;
  3 16642   integer array field cor;
  3 16643 
  3 16643   cor_no:= abs curr_coruno;
  3 16644   if cor_no <> 0 then
  3 16645   begin
  4 16646     cor:= coroutine(cor_no);
  4 16647     curr_coruid:= d.cor.coruident // 1000;
  4 16648   end
  3 16649   else curr_coruid:= 0;
  3 16650 end curr_coruid;
  2 16651 \f

  2 16651 message coroutinemonitor - 30f.1 ;
  2 16652 
  2 16652     <**** getch *****
  2 16653 
  2 16653     this procedure searches the queue of operations waiting at 'semaphore'
  2 16654     to find an operation that matches the operationstypeset and a set of
  2 16655     select-values. each select value is specified by type and fieldvalue
  2 16656     in integer array 'type' and by the value in integer array 'val'.
  2 16657 
  2 16657 0: eq  0:   not used
  2 16658 1: lt  1:   boolean
  2 16659 2: le  2:   integer
  2 16660 3: gt  3:   long
  2 16661 4: ge  4:   real
  2 16662 5: ne
  2 16663 *>
  2 16664 
  2 16664     procedure getch(semaphore,operation,operationtypeset,type,val);
  2 16665     value semaphore,operationtypeset;
  2 16666     integer semaphore,operation;
  2 16667     boolean operationtypeset;
  2 16668     integer array type,val;
  2 16669     begin
  3 16670       integer array field firstop,currop;
  3 16671       integer ø,n,i,f,t,rel,i1,i2;
  3 16672       boolean field bf,bfval;
  3 16673       integer field intf;
  3 16674       long field lf,lfval; long l1,l2;
  3 16675       real field rf,rfval; real r1,r2;
  3 16676   
  3 16676       boolean match;
  3 16677 
  3 16677       operation:= 0;
  3 16678       n:= system(3,ø,type);
  3 16679       match:= false;
  3 16680       firstop:= semaphore + semop;
  3 16681       currop:= d.firstop.next;
  3 16682       while currop <> firstop and -,match do
  3 16683       begin
  4 16684         if (operationtypeset and d.currop.optype) extract 12 <> 0 then
  4 16685         begin
  5 16686           i:= n;
  5 16687           match:= true;
  5 16688 \f

  5 16688 message coroutinemonitor - 30f.2 ;
  5 16689 
  5 16689           while match and (if i <= ø then type(i) >= 0 else false) do
  5 16690           begin
  6 16691             rel:= type(i) shift(-18);
  6 16692             t:= type(i) shift(-12) extract 6;
  6 16693             f:= type(i) extract 12;
  6 16694             if f > 2047 then f:= f -4096;
  6 16695             case t+1 of
  6 16696             begin
  7 16697               ; <* not used *>
  7 16698 
  7 16698               begin <*boolean or signed short integer*>
  8 16699                 bf:= f;
  8 16700                 bfval:= 2*i;
  8 16701                 i1:= d.currop.bf extract 12;
  8 16702                 if i1 > 2047 then i1:= i1-4096;
  8 16703                 i2:= val.bfval extract 12;
  8 16704                 if i2 > 2047 then i2:= i2-4096;
  8 16705                 match:= case rel+1 of (i1=i2,i1<i2,i1<=i2,i1>i2,i1>=i2,i1<>i2);
  8 16706               end;
  7 16707 
  7 16707               begin <*integer*>
  8 16708                 intf:= f;
  8 16709                 i1:= d.currop.intf;
  8 16710                 i2:= val(i);
  8 16711                 match:= case rel+1 of (i1=i2,i1<i2,i1<=i2,i1>i2,i1>=i2,i1<>i2);
  8 16712               end;
  7 16713 
  7 16713               begin <*long*>
  8 16714                 lf:= f;
  8 16715                 lfval:= i*2;
  8 16716                 l1:= d.currop.lf;
  8 16717                 l2:= val.lfval;
  8 16718                 match:= case rel+1 of (l1=l2,l1<l2,l1<=l2,l1>l2,l1>=l2,l1<>l2);
  8 16719               end;
  7 16720 
  7 16720               begin <*real*>
  8 16721                 rf:= f;
  8 16722                 rfval:= i*2;
  8 16723                 r1:= d.currop.rf;
  8 16724                 r2:= val.rfval;
  8 16725                 match:= case rel+1 of (r1=r2,r1<r2,r1<=r2,r1>r2,r1>=r2,r1<>r2);
  8 16726               end;
  7 16727 
  7 16727             end;<*case t+1*>
  6 16728 
  6 16728             i:= i+1;
  6 16729           end; <*while match and i<=ø and t>=0 *>
  5 16730 \f

  5 16730 message coroutinemonitor - 30f.3 ;
  5 16731 
  5 16731         end; <* if operationtypeset and ---*>
  4 16732         if -,match then currop:= d.currop.next;
  4 16733       end; <*while currop <> firstop and -,match*>
  3 16734 
  3 16734       if match then
  3 16735       begin
  4 16736         link(currop,0);
  4 16737         d.current.coruop:= currop;
  4 16738         operation:= currop;
  4 16739       end;
  3 16740     end getch;
  2 16741 \f

  2 16741 
  2 16741 message coroutinemonitor - 31 ;
  2 16742 
  2 16742     activity(maxcoru);
  2 16743 
  2 16743     goto initialization;
  2 16744 
  2 16744 
  2 16744 
  2 16744     <*************** event handling ***************>
  2 16745 
  2 16745 
  2 16745   
  2 16745   takeexternal:
  2 16746     currevent:= baseevent;
  2 16747     eventqueueempty:= false;
  2 16748     repeat
  2 16749       current:= 0;
  2 16750       prevevent:= currevent;
  2 16751       mon(66) test event :(0, 0, currevent, 0);
  2 16752       currevent:= monw2;
  2 16753       if monw0 < 0 <* no event *> then goto takeinternal;
  2 16754       if monw0 = 1 and monw1 > 0 and monw1 <= maxcoru then
  2 16755         cmi:= monw1
  2 16756       else
  2 16757         cmi:= - monw0;
  2 16758 
  2 16758       if cmi > 0 then
  2 16759         begin <* answer to activity zone *>
  3 16760           current:= firstcoru + (cmi - 1) * corusize;
  3 16761           linkprio(current, readyqueue);
  3 16762           baseevent:= 0;
  3 16763         end else
  2 16764   
  2 16764       if cmi = 0 then
  2 16765         begin <* message arrived *>
  3 16766 \f

  3 16766 
  3 16766 message coroutinemonitor - 32 ;
  3 16767 
  3 16767           receiver:= core.currevent(3);
  3 16768           if receiver < 0 then receiver:= - receiver;
  3 16769           procref(maxprocext):= receiver;
  3 16770           procext:= 1;
  3 16771           while procref(procext) <> receiver do procext:= procext + 1;
  3 16772           if procext = maxprocext then
  3 16773           begin <* receiver unknown *>
  4 16774             <* leave the message unchanged *>
  4 16775           end else
  3 16776           if proccode(procext) shift (-12) = 0 then
  3 16777           begin  <* the receiver is ready for accepting messages *>
  4 16778             mon(26) get event :(0, 0, currevent, 0);
  4 16779             case proccode(procext) of
  4 16780             begin
  5 16781               begin <* message received by semwaitmessage *>
  6 16782                 op:= procop(procext);
  6 16783                 sem:= d.op(1);
  6 16784                 for cmj:=1 step 1 until 8 do d.op(cmj):= core.currevent(4+cmj);
  6 16785                 d.op(9):= currevent;
  6 16786                 signalch(sem, op, d.op.optype);
  6 16787                 proccode(procext):= 1 shift 12;
  6 16788               end;
  5 16789               begin <* message received by cwaitmessage *>
  6 16790                 current:= procop(procext);
  6 16791                 procop(procext):= currevent;
  6 16792                 linkprio(current, readyqueue);
  6 16793                 link(current + corutimerchain, idlequeue);
  6 16794 
  6 16794 
  6 16794               end;
  5 16795             end; <* case *>
  4 16796             currevent:= baseevent;
  4 16797             proccode(procext):= 1 shift 12;
  4 16798           end;
  3 16799         end <* message *> else
  2 16800   
  2 16800       if cmi = -1 then
  2 16801         begin  <* answer arrived *>
  3 16802 \f

  3 16802 
  3 16802 message coroutinemonitor - 33 ;
  3 16803 
  3 16803           if currevent = timermessage then
  3 16804           begin
  4 16805             mon(26) get event :(0, 0, currevent, 0);
  4 16806             coru:= d.timerqueue.next;
  4 16807             while coru <> timerqueue do
  4 16808             begin
  5 16809               current:= coru - corutimerchain;
  5 16810               d.current.corutimer:= d.current.corutimer - clockmess(2);
  5 16811               coru:= d.coru.next;
  5 16812               if d.current.corutimer <= 0 then
  5 16813               begin <* timer perion expired *>
  6 16814                 d.current.corutimer:= -1;
  6 16815                 linkprio(current, readyqueue);
  6 16816                 link(current + corutimerchain, idlequeue);
  6 16817               end;
  5 16818             end;
  4 16819             mon(16) send message :(0, clockmess, 0, clock);
  4 16820             timermessage:= monw2;
  4 16821             currevent:= baseevent;
  4 16822           end <* timer answer *> else
  3 16823           begin
  4 16824             messref(maxmessext):= currevent;
  4 16825             messext:= 1;
  4 16826             while messref(messext) <> currevent do messext:= messext + 1;
  4 16827             if messext = maxmessext then
  4 16828             begin <* the answer is unknown *>
  5 16829               <* leave the answer unchanged - it may belong to an activity *>
  5 16830             end else
  4 16831             if messcode(messext) shift (-12) = 0 then
  4 16832             begin
  5 16833               case messcode(messext) extract 12 of
  5 16834               begin
  6 16835 \f

  6 16835 
  6 16835 message coroutinemonitor - 34 ;
  6 16836                 begin <* answer arrived after semsendmessage *>
  7 16837                   op:= messop(messext);
  7 16838                   sem:= d.op(1);
  7 16839                   mon(18) wait answer :(0, d.op, currevent, 0);
  7 16840                   d.op(9):= monw0;
  7 16841                   signalch(sem, op, d.op.optype);
  7 16842                   messref(messext):= 0;
  7 16843                   baseevent:= 0;
  7 16844                 end;
  6 16845                 begin <* answer arrived after csendmessage *>
  7 16846                   current:= messop(messext);
  7 16847                   linkprio(current, readyqueue);
  7 16848                   link(current + corutimerchain, idlequeue);
  7 16849 
  7 16849 
  7 16849                 end;
  6 16850               end;
  5 16851             end else baseevent:= currevent;
  4 16852           end;
  3 16853         end;
  2 16854     until eventqueueempty;
  2 16855 \f

  2 16855 
  2 16855 message coroutinemonitor - 35 ;
  2 16856 
  2 16856 
  2 16856 
  2 16856     <*************** coroutine activation ***************>
  2 16857 
  2 16857 takeinternal:
  2 16858   
  2 16858     current:= d.readyqueue.next;
  2 16859     if current = readyqueue then
  2 16860     begin
  3 16861       mon(24) wait event :(0, 0, prevevent, 0);
  3 16862       goto takeexternal;
  3 16863     end;
  2 16864 
  2 16864 <*+2*> if testbit30 and d.current.corutestmask shift(-11) then
  2 16865 <**>   begin
  3 16866 <**>     systime(5,0,r);
  3 16867 <**>     write(out,"nl",1,<<zd dd dd>,r,<: coroutine: :>,<<dd>,
  3 16868 <**>       d.current.coruident mod 1000,<:  ident: :>,<<ddd>,
  3 16869 <**>       d.current.coruident//1000,<: aktiveres:>);
  3 16870 <**>   end;
  2 16871 <*-2*>
  2 16872 
  2 16872     corustate:= activate(d.current.coruident mod 1000);
  2 16873     cmi:= corustate extract 24;
  2 16874 <*+2*> if testbit30 and d.current.corutestmask shift(-11) then
  2 16875 <**>   begin
  3 16876 <**>     systime(5,0,r);
  3 16877 <**>     write(out,"nl",1,<<zd dd dd>,r,<: coroutine: :>,<<dd>,
  3 16878 <**>       d.current.coruident mod 1000,<:  ident: :>,<<ddd>,
  3 16879 <**>       d.current.coruident//1000,<: afbrudt, årsag=:>,cmi);
  3 16880 <**>   end;
  2 16881 <*-2*>
  2 16882 
  2 16882     if cmi = 1 then
  2 16883     begin  <* programmed passivate *>
  3 16884       goto takeexternal;
  3 16885     end;
  2 16886 
  2 16886     if cmi = 2 then
  2 16887     begin <* implicit passivate in activity *>
  3 16888 
  3 16888 
  3 16888       link(current, idlequeue);
  3 16889       goto takeexternal;
  3 16890     end;
  2 16891 \f

  2 16891 
  2 16891 message coroutinemonitor - 36 ;
  2 16892 
  2 16892     <* coroutine termination (normal or abnormal) *>
  2 16893 
  2 16893 <* aktioner ved normal og unormal coroutineterminering insættes her *>
  2 16894 coru_term:
  2 16895 
  2 16895     begin
  3 16896       if false and alarmcause extract 24 = (-9) <* break *> and
  3 16897          alarmcause shift (-24) extract 24 = 0 then
  3 16898       begin
  4 16899         endaction:= 2;
  4 16900         goto program_slut;
  4 16901       end;
  3 16902       if alarmcause extract 24 = (-9) <* break *> and
  3 16903          alarmcause shift (-24) = 8 <* parent *>
  3 16904       then sæt_bit_i(trapmode,15<*killed activities*>,0<*normal output*>);
  3 16905       if alarmcause shift (-24) extract  24 <> -2 or
  3 16906          alarmcause extract 24 <> -13 then
  3 16907       begin
  4 16908         write(zbillede,"nl",1,<:alarmcause(param,cause)=:>,<<d>,
  4 16909               alarmcause shift (-24),<:,:>,
  4 16910               alarmcause extract 24);
  4 16911         for i:=1 step 1 until max_coru do
  4 16912           j:=activate(-i); <* kill *>
  4 16913 <*      skriv billede *>
  4 16914       end
  3 16915       else
  3 16916       begin
  4 16917         errorbits:= 0; <* ok.yes warning.no *>
  4 16918         goto finale;
  4 16919       end;
  3 16920     end;
  2 16921 
  2 16921 goto dump;
  2 16922 
  2 16922     link(current, idlequeue);
  2 16923     goto takeexternal;
  2 16924 \f

  2 16924 
  2 16924 message coroutinemonitor - 37 ;
  2 16925 
  2 16925 
  2 16925 
  2 16925   initialization:
  2 16926 
  2 16926 
  2 16926     <*************** initialization ***************>
  2 16927   
  2 16927     <* chain head *>
  2 16928   
  2 16928        prev:= -2;                         <* -2  prev *>
  2 16929        next:= 0;                          <* +0  next *>
  2 16930   
  2 16930     <* corutine descriptor *>
  2 16931   
  2 16931                                           <* -2  prev *>
  2 16932                                           <* +0  next *>
  2 16933                                           <* +2  (link field) *>
  2 16934        corutimerchain:= next + 4;         <* +4  corutimerchain *>
  2 16935                                           <* +6  (link field) *>
  2 16936        coruop:= corutimerchain + 4;       <* +8  coruop *>
  2 16937        corutimer:= coruop + 2;            <*+10  corutimer *>
  2 16938        coruident:= corutimer + 2;         <*+12  coruident *>
  2 16939        corupriority:= coruident + 2;      <*+14  corupriority *>
  2 16940        corutypeset:= corupriority + 1;    <*+15  corutypeset *>
  2 16941        corutestmask:= corutypeset + 1;    <*+16  corutestmask *>
  2 16942   
  2 16942     <* simple semaphore *>
  2 16943   
  2 16943                                           <* -2  (link field) *>
  2 16944        simcoru:= next;                    <* +0  simcoru *>
  2 16945        simvalue:= simcoru + 2;            <* +2  simvalue *>
  2 16946   
  2 16946     <* chained semaphore *>
  2 16947   
  2 16947                                           <* -2  (link field) *>
  2 16948        semcoru:= next;                    <* +0  semcoru *>
  2 16949                                           <* +2  (link field) *>
  2 16950        semop:= semcoru + 4;               <* +4  semop *>
  2 16951 \f

  2 16951 
  2 16951 message coroutinemonitor - 38 ;
  2 16952   
  2 16952     <* operation *>
  2 16953   
  2 16953        opsize:= next - 6;                 <* -6  opsize *>
  2 16954        optype:= opsize + 1;               <* -5  optype *>
  2 16955                                           <* -2  prev *>
  2 16956                                           <* +0  next *>
  2 16957                                           <* +2  operation(1) *>
  2 16958                                           <* +4  operation(2) *>
  2 16959                                           <* +6      -        *>
  2 16960                                           <*  .      -        *>
  2 16961                                           <*  .      -        *>
  2 16962   
  2 16962 \f

  2 16962 
  2 16962 message coroutinemonitor - 39 ;
  2 16963   
  2 16963       trap(dump);
  2 16964       systime(1, 0, starttime);
  2 16965       for cmi:= 1 step 1 until maxmessext do messref(cmi):= 0;
  2 16966       clockmess(1):= 0;
  2 16967       clockmess(2):= timeinterval;  
  2 16968       clock(1):= real <:clock:>;
  2 16969       clock(2):= real <::>;
  2 16970       mon(16) send message :(0, clockmess, 0, clock);
  2 16971       timermessage:= monw2;
  2 16972       readyqueue:= 4;
  2 16973       initchain(readyqueue);
  2 16974       idlequeue:= readyqueue + 4;
  2 16975       initchain(idlequeue);
  2 16976       timerqueue:= idlequeue + 4;
  2 16977       initchain(timerqueue);
  2 16978       current:= 0;
  2 16979       corucount:= 0;
  2 16980       proccount:= 0;
  2 16981       baseevent:= 0;
  2 16982       coruref:= timerqueue + 4;
  2 16983       firstcoru:= coruref;
  2 16984       simref:= coruref + maxcoru * corusize;
  2 16985       firstsim:= simref;
  2 16986       semref:= simref + maxsem * simsize;
  2 16987       firstsem:= semref;
  2 16988       opref:= semref + maxsemch * semsize + 4;
  2 16989       firstop:= opref;
  2 16990       optop:= opref + maxop * opheadsize + maxnettoop - 6;
  2 16991       for cmi:= coruref step 2 until optop - 2 do d(cmi/2):= 0;
  2 16992       reflectcore(core);
  2 16993 
  2 16993 algol list.on;
  2 16994   
  2 16994       \f

  2 16994       message sys_initialisering side 1 - 810601/hko;
  2 16995       
  2 16995         trapmode:= 1 shift 15;
  2 16996         errorbits:= 1; <* warning.no ok.no *>
  2 16997         trap(coru_term);
  2 16998       
  2 16998         open(zbillede,4,<:billede:>,0);
  2 16999         write(zbillede,"ff",1,"nl",2,<:********** billede for kørsel startet :>,
  2 17000               <<zddddd>,systime(5,0,r),".",1,r,<: **********:>,"nl",1);
  2 17001         system(2,0,ia);
  2 17002         open(zdummy,4,ia,0); close(zdummy,false);
  2 17003         monitor(42,zdummy,0,ia);
  2 17004         laf:= 0;
  2 17005         write(zbillede,"nl",1,<:prog.vers.  :>,<<dddddd.dddd>,
  2 17006           systime(6,ia(6),r)+r/1000000,"nl",2,
  2 17007           <:konsolnavn: :>,konsol_navn.laf,"nl",1);
  2 17008       
  2 17008         open(zrl,4,<:radiolog:>,0);
  2 17009         if monitor(42)lookup_entry:(zrl,0,ia)<>0 or
  2 17010            monitor(52)create_areaproc:(zrl,0,ia)<>0 or
  2 17011            monitor(8)reserve_process:(zrl,0,ia)<>0 then
  2 17012         begin
  3 17013           ia(1):=1; ia(2):= 3;
  3 17014           for i:= 3 step 1 until 10 do ia(i):= 0;
  3 17015           monitor(40)create_area:(zrl,0,ia);
  3 17016         end;
  2 17017       
  2 17017         for i:=1 step 1 until max_antal_fejltekster do
  2 17018           fejltekst(i):= real (case i of (
  2 17019       <* 1*><:filsystem:>,
  2 17020       <* 2*><:operationskode:>,
  2 17021       <* 3*><:programfejl:>,
  2 17022       <* 4*><:monitor<'_'>resultat=:>,
  2 17023       <* 5*><:læs<'_'>fil:>,
  2 17024       <* 6*><:skriv<'_'>fil:>,
  2 17025       <* 7*><:modif<'_'>fil:>,
  2 17026       <* 8*><:hent<'_'>fil<'_'>dim:>,
  2 17027       <* 9*><:sæt<'_'>fil<'_'>dim:>,
  2 17028       <*10*><:vogntabel:>,
  2 17029       <*11*><:fremmed operation:>,
  2 17030       <*12*><:operationstype:>,
  2 17031       <*13*><:opret<'_'>fil:>,
  2 17032       <*14*><:tilknyt<'_'>fil:>,
  2 17033       <*15*><:frigiv<'_'>fil:>,
  2 17034       <*16*><:slet<'_'>fil:>,
  2 17035       <*17*><:ydre enhed, status=:>,
  2 17036       <*18*><:tabelfil:>,
  2 17037       <*19*><:radio:>,
  2 17038       <*20*><:mobilopkald, bus:>,
  2 17039       <*21*><:talevejsswitch:>,
  2 17040       <*99*><:ftslut:>));
  2 17041       
  2 17041       for i:= 1 step 1 until max_antal_områder do
  2 17042       begin
  3 17043         område_navn(i):= long (case i of
  3 17044           (<:TLF:>,<:VHF:>,<:KBH:>,<:RO:>,<:FS:>,<:HHL:>,<:GLX:>,
  3 17045            <:KJ:>,<:HI:>,<:HG:>,<:BA:>) ); 
  3 17046         område_id(i,1):= område_navn(i) shift (-24) extract 24;
  3 17047         område_id(i,2):= 
  3 17048           (case i of ( 2,  3, 13,  3,  3,  3,  3,  3,  3,  3,  3)) shift 6 add
  3 17049           (case i of ( 2,  5,  2,  9, 10, 11, 12, 13, 14, 15, 16));
  3 17050       end;
  2 17051       
  2 17051       pabx_id(1):= -1;
  2 17052       pabx_id(2):= 1;
  2 17053       
  2 17053       for i:= 1 step 1 until max_antal_radiokanaler do
  2 17054       begin
  3 17055         radio_id(i):= 
  3 17056           case i of ( 3, 3, 3, 3, 2, -1, -1, -1, 4, 5, 6, 7, 8, 9, 10, 11);
  3 17057       end;
  2 17058       
  2 17058       for i:=1 step 1 until max_antal_kanaler do
  2 17059       begin
  3 17060         kanal_navn(i):= long (case i of (
  3 17061           <:K1:>,<:K2:>,<:K3:>,<:K4:>,<:K5:>,<:K9:>,<:K10:>,<:K11:>,<:K12:>,
  3 17062           <:K13:>,<:K14:>,<:K15:>,<:K16:>,<:L4190:>) );
  3 17063         kanal_id(i):= 
  3 17064           (case i of ( 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2)) shift 5 +
  3 17065           (case i of ( 2, 3, 4, 1, 5, 9,10,11,12,13,14,15,16, 2));
  3 17066       end;
  2 17067       
  2 17067       for i:= 1 step 1 until op_maske_lgd//2 do
  2 17068         ingen_operatører(i):= alle_operatører(i):= 0;
  2 17069       for i:= 1 step 1 until tv_maske_lgd//2 do
  2 17070         ingen_taleveje(i):= alle_taleveje(i):= 0;
  2 17071       
  2 17071       begin
  3 17072         long array navn(1:2);
  3 17073         long array field doc, ref;
  3 17074       
  3 17074         doc:= 2; iaf:= 0;
  3 17075         movestring(navn,1,<:terminal0:>);
  3 17076         for i:= 1 step 1 until max_antal_operatører do
  3 17077         begin
  4 17078           ref:=(i-1)*8; k:=9;
  4 17079           if i>9 then skrivtegn(navn.iaf, k, '0' + i//10);
  4 17080           skrivtegn(navn.iaf,k,'0'+ i mod 10);
  4 17081           open(zdummy,8,navn,0); close(zdummy,true);
  4 17082           k:= monitor(42,zdummy,0,ia);
  4 17083           if k=0 then tofrom(terminal_navn.ref,ia.doc,8)
  4 17084           else tofrom(terminal_navn.ref,navn,8);
  4 17085           operatør_auto_include(i):= false;
  4 17086           sætbit_ia(alle_operatører,i,1);
  4 17087         end;
  3 17088       
  3 17088         movestring(navn,1,<:garage0:>);
  3 17089         for i:= 1 step 1 until max_antal_garageterminaler do
  3 17090         begin
  4 17091           ref:=(i-1)*8; k:=7;
  4 17092           if i>9 then skrivtegn(navn.iaf, k, '0' + i//10);
  4 17093           skrivtegn(navn.iaf,k,'0'+ i mod 10);
  4 17094           open(zdummy,8,navn,0); close(zdummy,true);
  4 17095           k:= monitor(42,zdummy,0,ia);
  4 17096           if k=0 then tofrom(garage_terminal_navn.ref,ia.doc,8)
  4 17097           else tofrom(garage_terminal_navn.ref,navn,8);
  4 17098           garage_auto_include(i):= false;
  4 17099         end;
  3 17100       end;
  2 17101       
  2 17101       for i:= 1 step 1 until max_antal_taleveje do
  2 17102         sætbit_ia(alle_taleveje,i,1);
  2 17103       for i:= 1 step 1 until findfpparam(<:operatør:>,true,ia) do
  2 17104         if 1<=ia(i) and ia(i)<=max_antal_operatører then
  2 17105           operatør_auto_include(ia(i)):= true;
  2 17106       for i:= 1 step 1 until findfpparam(<:garage:>,true,ia) do
  2 17107         if 1<=ia(i) and ia(i)<=max_antal_garageterminaler then
  2 17108           garage_auto_include(ia(i)):= true;
  2 17109       
  2 17109       
  2 17109       \f

  2 17109       message fil_init side 1 - 801030/jg;
  2 17110       
  2 17110       begin integer i,antz,tz,s;
  3 17111             real array field raf;
  3 17112       
  3 17112       filskrevet:=fillæst:=0;                                    <*fil*>
  3 17113       dbsegmax:= 2**18-1;
  3 17114       
  3 17114       tz:=dbantez+dbantsz; antz:=tz+dbanttz;
  3 17115       for i:=1 step 1 until dbantez do
  3 17116         begin open(fil(i),4,<::>,0); close(fil(i),false) end;
  3 17117       for i:=dbantez+1 step 1 until tz do
  3 17118         open(fil(i),4,dbsnavn,0);
  3 17119       for i:=tz+1 step 1 until antz do
  3 17120         open(fil(i),4,dbtnavn,0);
  3 17121       
  3 17121       for i:=1 step 1 until dbantez do                        <*dbkatz*>
  3 17122         dbkatz(i,1):=dbkatz(i,2):=0;
  3 17123       for i:=dbantez+1 step 1 until tz do
  3 17124         begin dbkatz(i,1):=2 shift 10;dbkatz(i,2):=0 end;
  3 17125       for i:=tz+1 step 1 until antz do
  3 17126         begin dbkatz(i,1):=1 shift 10;dbkatz(i,2):=i+1 end;
  3 17127       dbkatz(antz,2):=tz+1;
  3 17128       dbsidstetz:=antz;
  3 17129       dbsidstesz:=tz;
  3 17130       
  3 17130       for i:=1 step 1 until dbmaxef do                        <*dbkate*>
  3 17131         begin integer j;
  4 17132           for j:=1,3 step 1 until 6 do
  4 17133             dbkate(i,j):=0;
  4 17134           dbkate(i,2):=i+1;
  4 17135         end;
  3 17136       dbkate(dbmaxef,2):=0;
  3 17137       dbkatefri:=1;
  3 17138       dbantef:=0;
  3 17139       \f

  3 17139       message fil_init side 2 - 801030/jg;
  3 17140       
  3 17140       
  3 17140       for i:= 1 step 1 until dbmaxsf do                       <*dbkats*>
  3 17141         begin
  4 17142           dbkats(i,1):=0;
  4 17143           dbkats(i,2):=i+1;
  4 17144         end;
  3 17145       dbkats(dbmaxsf,2):=0;
  3 17146       dbkatsfri:=1;
  3 17147       dbantsf:=0;
  3 17148       
  3 17148       for i:=1 step 1 until dbmaxb do                         <*dbkatb*>
  3 17149         dbkatb(i):=false add (i+1);
  3 17150       dbkatb(dbmaxb):=false;
  3 17151       dbkatbfri:=1;
  3 17152       dbantb:=0;
  3 17153       raf:=4;
  3 17154       for i:=1 step 1 until dbmaxtf do
  3 17155         begin
  4 17156           inrec6(fil(antz),4);
  4 17157           dbkatt.raf(i):=fil(antz,1);
  4 17158         end;
  3 17159       inrec6(fil(antz),4);
  3 17160       if fil(antz,1)<>real extend 8388607 shift 24 add 8388607 then
  3 17161         fejl_reaktion(1,dbmaxtf,<:tabelfil init:>,0);
  3 17162       setposition(fil(antz),0,0);
  3 17163       
  3 17163       end filsystem;
  2 17164       \f

  2 17164       message fil_init side 3 - 810209/cl;
  2 17165       
  2 17165       bs_kats_fri:= nextsem;
  2 17166       <*+3*> skriv_new_sem(out,1,bs_kats_fri,<:bs-kats-fri:>);
  2 17167       <*-3*>
  2 17168       bs_kate_fri:= nextsem;
  2 17169       <*+3*> skriv_new_sem(out,1,bs_kate_fri,<:bs-kate-fri:>);
  2 17170       <*-3*>
  2 17171       cs_opret_fil:= nextsemch;
  2 17172       <*+3*> skriv_new_sem(out,3,cs_opret_fil,<:cs-opret-fil:>);
  2 17173       <*-3*>
  2 17174       cs_tilknyt_fil:= nextsemch;
  2 17175       <*+3*> skriv_new_sem(out,3,cs_tilknyt_fil,<:cs-tilknyt-fil:>);
  2 17176       <*-3*>
  2 17177       cs_frigiv_fil:= nextsemch;
  2 17178       <*+3*> skriv_new_sem(out,3,cs_frigiv_fil,<:cs-frigiv-fil:>);
  2 17179       <*-3*>
  2 17180       cs_slet_fil:= nextsemch;
  2 17181       <*+3*> skriv_new_sem(out,3,cs_slet_fil,<:cs-slet-fil:>);
  2 17182       <*-3*>
  2 17183       cs_opret_spoolfil:= nextsemch;
  2 17184       <*+3*> skriv_new_sem(out,3,cs_opret_spoolfil,<:cs-opret-spoolfil:>);
  2 17185       <*-3*>
  2 17186       cs_opret_eksternfil:= nextsemch;
  2 17187       <*+3*> skriv_new_sem(out,3,cs_opret_eksternfil,<:cs-opret-ekst-fil:>);
  2 17188       <*-3*>
  2 17189       \f

  2 17189       message fil_init side 4 810209/cl;
  2 17190       
  2 17190       
  2 17190       <* initialisering af filsystemcoroutiner *>
  2 17191       
  2 17191       i:= nextcoru(001,10,true);
  2 17192       j:= newactivity(i,0,opretfil);
  2 17193       <*+3*> skriv_newactivity(out,i,j);
  2 17194       <*-3*>
  2 17195       
  2 17195       i:= nextcoru(002,10,true);
  2 17196       j:= newactivity(i,0,tilknytfil);
  2 17197       <*+3*> skriv_newactivity(out,i,j);
  2 17198       <*-3*>
  2 17199       
  2 17199       i:= nextcoru(003,10,true);
  2 17200       j:= newactivity(i,0,frigivfil);
  2 17201       <*+3*> skriv_newactivity(out,i,j);
  2 17202       <*-3*>
  2 17203       
  2 17203       i:= nextcoru(004,10,true);
  2 17204       j:= newactivity(i,0,sletfil);
  2 17205       <*+3*> skriv_newactivity(out,i,j);
  2 17206       <*-3*>
  2 17207       
  2 17207       i:= nextcoru(005,10,true);
  2 17208       j:= newactivity(i,0,opretspoolfil);
  2 17209       <*+3*> skriv_newactivity(out,i,j);
  2 17210       <*-3*>
  2 17211       
  2 17211       i:= nextcoru(006,10,true);
  2 17212       j:= newactivity(i,0,opreteksternfil);
  2 17213       <*+3*> skriv_newactivity(out,i,j);
  2 17214       <*-3*>
  2 17215       \f

  2 17215       message attention_initialisering side 1 - 850820/cl;
  2 17216       
  2 17216         tf_kommandotabel:= 1 shift 10 + 1;
  2 17217       
  2 17217         begin
  3 17218           integer i, s, zno;
  3 17219           zone z(128,1,stderror);
  3 17220           integer array fdim(1:8);
  3 17221       
  3 17221           fdim(4):= tf_kommandotabel;
  3 17222           hentfildim(fdim);
  3 17223       
  3 17223           open(z,4,<:htkommando:>,0);
  3 17224           for i:= 1 step 1 until fdim(3) do
  3 17225           begin
  4 17226             inrec6(z,512);
  4 17227             s:= skrivfil(tf_kommandotabel,i,zno);
  4 17228             if s<>0 then fejlreaktion(6,s,<:kommandotabelinit:>,0);
  4 17229             tofrom(fil(zno),z,512);
  4 17230           end;
  3 17231           close(z,true);
  3 17232         end;
  2 17233       \f

  2 17233       message attention_initialisering side 1a - 810428/hko;
  2 17234       
  2 17234         for j:= system(3,i,terminal_tab) step 1 until i do
  2 17235           terminal_tab(j):= 0;
  2 17236       
  2 17236         cs_att_pulje:=next_semch;
  2 17237       <*+3*> skriv_new_sem(out,3,cs_att_pulje,<:cs-att-pulje:>);
  2 17238       <*-3*>
  2 17239       
  2 17239         bs_fortsæt_adgang:= nextsem;
  2 17240       <*+3*> skriv_new_sem(out,1,bs_fortsæt_adgang,<:bs-fortsæt-adgang:>);
  2 17241       <*-3*>
  2 17242         signalbin(bs_fortsæt_adgang);
  2 17243       
  2 17243         for i:= 1,
  2 17244             1 step 1 until max_antal_operatører,
  2 17245             1 step 1 until max_antal_garageterminaler do
  2 17246       
  2 17246         <* initialisering af pulje med attention_operationer *>
  2 17247       
  2 17247           signalch(cs_att_pulje,    <* pulje_semafor   *>
  2 17248                    nextop(data+att_op_længde), <* næste_operation *>
  2 17249                    gen_optype);
  2 17250       
  2 17250         att_proc_ref:=next_proc_ext(system(6<* own process*>,i,ra));
  2 17251       
  2 17251         i:=next_coru(010,<*ident*>
  2 17252                        2,<*prioritet*>
  2 17253                      true<*test_maske*>);
  2 17254         j:=newactivity(        i, <*activityno     *>
  2 17255                                0, <*ikke virtual   *>
  2 17256                        attention);<*ingen parametre*>
  2 17257       
  2 17257       <*+3*>skriv_newactivity(out,i,j);
  2 17258       <*-3*>
  2 17259       \f

  2 17259       message io_initialisering side 1 - 810507/hko;
  2 17260       
  2 17260         io_spoolfil:= 1028;
  2 17261         begin
  3 17262           integer array fdim(1:8);
  3 17263           fdim(4):= io_spoolfil;
  3 17264           hent_fildim(fdim);
  3 17265           io_spool_postantal:= fdim(1);
  3 17266           io_spool_postlængde:= fdim(2);
  3 17267         end;
  2 17268       
  2 17268         io_spool_post:= 4;
  2 17269       
  2 17269           cs_io:= next_semch;
  2 17270       <*+3*> skriv_new_sem(out,3,cs_io,<:cs-io:>);
  2 17271       <*-3*>
  2 17272       
  2 17272           i:= next_coru(100,<*ident *>
  2 17273                          5,<*prioritet *>
  2 17274                         true<*test_maske*>);
  2 17275       
  2 17275           j:= new_activity(   i,
  2 17276                               0,
  2 17277                            h_io);
  2 17278       
  2 17278       <*+3*>skriv_newactivity(out,i,j);
  2 17279       <*-3*>
  2 17280         cs_io_komm:= next_semch;
  2 17281       <*+3*> skriv_new_sem(out,3,cs_io_komm,<:cs-io-komm:>);
  2 17282       <*-3*>
  2 17283       
  2 17283         i:= next_coru(101,<*ident*>
  2 17284                        10,<*prioritet*>
  2 17285                      true <*testmaske*>);
  2 17286         j:= new_activity(          i,
  2 17287                                    0,
  2 17288                          io_komm);<*ingen parametre*>
  2 17289       
  2 17289       <*+3*>skriv_newactivity(out,i,j);
  2 17290       <*-3*>
  2 17291       \f

  2 17291       message io_initialisering side 2 - 810520/hko/cl;
  2 17292       
  2 17292         bs_zio_adgang:= next_sem;
  2 17293       <*+3*> skriv_new_sem(out,1,bs_zio_adgang,<:bs-zio-adgang:>);
  2 17294       <*-3*>
  2 17295         signal_bin(bs_zio_adgang);
  2 17296       
  2 17296         cs_io_spool:= next_semch;
  2 17297       <*+3*> skriv_new_sem(out,3,cs_io_spool,<:cs-io-spool:>);
  2 17298       <*-3*>
  2 17299       
  2 17299         cs_io_fil:=next_semch;
  2 17300       <*+3*> skriv_new_sem(out,3,cs_io_fil,<:cs-io-fil:>);
  2 17301       <*-3*>
  2 17302         signal_ch(cs_io_fil,next_op(data+18),gen_optype);
  2 17303       
  2 17303         ss_io_spool_fulde:= next_sem;
  2 17304       <*+3*> skriv_new_sem(out,2,ss_io_spool_fulde,<:ss-io-spool-fulde:>);
  2 17305       <*-3*>
  2 17306       
  2 17306         ss_io_spool_tomme:= next_sem;
  2 17307       <*+3*> skriv_new_sem(out,2,ss_io_spool_tomme,<:ss-io-spool-tomme:>);
  2 17308       <*-3*>
  2 17309         for i:= 1 step 1 until io_spool_postantal do
  2 17310           signal(ss_io_spool_tomme);
  2 17311       \f

  2 17311       message io_initialisering side 3 - 880901/cl;
  2 17312       
  2 17312         i:= next_coru(102,
  2 17313                        5,
  2 17314                       true);
  2 17315         j:= new_activity(i,0,io_spool);
  2 17316       
  2 17316       <*+3*>skriv_newactivity(out,i,j);
  2 17317       <*-3*>
  2 17318       
  2 17318         i:= next_coru(103,
  2 17319                        10,
  2 17320                       true);
  2 17321         j:= new_activity(i,0,io_spon);
  2 17322       
  2 17322       <*+3*>skriv_newactivity(out,i,j);
  2 17323       <*-3*>
  2 17324       
  2 17324           cs_io_medd:= next_semch;
  2 17325       <*+3*> skriv_new_sem(out,3,cs_io_medd,<:cs-io-medd:>);
  2 17326       <*-3*>
  2 17327       
  2 17327           i:= next_coru(104,<*ident *>
  2 17328                         10,<*prioritet *>
  2 17329                         true<*test_maske*>);
  2 17330       
  2 17330           j:= new_activity(   i,
  2 17331                               0,
  2 17332                         io_medd);
  2 17333       
  2 17333       <*+3*>skriv_newactivity(out,i,j);
  2 17334       <*-3*>
  2 17335       
  2 17335         open(z_io,8,konsol_navn,1 shift 21 + 1 shift 9);
  2 17336         i:= monitor(8)reserve process:(z_io,0,ia);
  2 17337         if i <> 0 then
  2 17338         begin
  3 17339           fejlreaktion(4<*monitor result*>,+i,<:io reservation:>,0);
  3 17340         end
  2 17341         else
  2 17342         begin
  3 17343           ref:= 0;
  3 17344           terminal_tab.ref.terminal_tilstand:= 0;
  3 17345           write(z_io,"nl",3,"sp",10,"*",15,<: busradio startet :>,
  3 17346                   <<zddddd>,systime(5,0.0,r),".",1,r,
  3 17347                   "sp",1,"*",15,"nl",1);
  3 17348           setposition(z_io,0,0);
  3 17349         end;
  2 17350       \f

  2 17350       message operatør_initialisering side 1 - 810520/hko;
  2 17351       
  2 17351         top_bpl_gruppe:= 64;
  2 17352         
  2 17352         bpl_navn(0):= long<::>;
  2 17353         for i:= 1 step 1 until 127 do
  2 17354         begin
  3 17355           k:= læsfil(tf_bpl_navne,i,j);
  3 17356           if k<>0 then fejlreaktion(5,k,<:bplnavne init:>,0);
  3 17357           bpl_navn(i):= (long fil(j,1)) shift (-8) shift 8;
  3 17358           if i<=max_antal_operatører then
  3 17359             operatør_auto_include(i):= false add (fil(j,1) extract 8);
  3 17360           if i>64 and fil(j,1)<>real<::> and i>top_bpl_gruppe then
  3 17361             top_bpl_gruppe:= i;
  3 17362         end;
  2 17363       
  2 17363         for i:= 0 step 1 until 64 do
  2 17364         begin
  3 17365           iaf:= i*op_maske_lgd;
  3 17366           tofrom(bpl_def.iaf,ingen_operatører,op_maske_lgd);
  3 17367           bpl_tilst(i,1):= bpl_tilst(i,2):= 0;
  3 17368           if 1<=i and i<= max_antal_operatører then
  3 17369           begin
  4 17370             bpl_tilst(i,2):= 1;
  4 17371             sætbit_ia(bpl_def.iaf,i,1);
  4 17372           end;
  3 17373         end;
  2 17374         for i:= 65 step 1 until 127 do
  2 17375         begin
  3 17376           k:= læsfil(tf_bpl_def,i-64,j);
  3 17377           if k<>0 then fejlreaktion(5,k,<:bpldef init:>,0);
  3 17378           iaf:= i*op_maske_lgd;
  3 17379           tofrom(bpl_def.iaf,fil(j),op_maske_lgd);
  3 17380           bpl_tilst(i,1):= 0;
  3 17381           bpl_tilst(i,2):= fil(j,2) extract 24;
  3 17382         end;
  2 17383       
  2 17383         for k:= 0,1,2,3 do operatør_stop(0,k):= 0;
  2 17384         iaf:= 0;
  2 17385         for i:= 1 step 1 until max_antal_operatører do
  2 17386         begin
  3 17387           k:= læsfil(tf_stoptabel,i,j);
  3 17388           if k<>0 then fejlreaktion(5,k,<:stoptabel init:>,0);
  3 17389           operatør_stop(i,0):= i;
  3 17390           for k:= 1,2,3 do
  3 17391             operatør_stop(i,k):= fil(j).iaf(k+1);
  3 17392           ant_i_opkø(i):= 0;
  3 17393         end;
  2 17394       
  2 17394         tofrom(operatørmaske,ingen_operatører,op_maske_lgd);
  2 17395         for i:= 0 step 1 until max_antal_operatører do op_talevej(i):= 0;
  2 17396         for i:= 0 step 1 until max_antal_taleveje do tv_operatør(i):= 0;
  2 17397         sidste_tv_brugt:= max_antal_taleveje;
  2 17398       
  2 17398         for i:= 1 step 1 until max_antal_operatører*(opk_alarm_tab_lgd//2) do
  2 17399           opk_alarm(i):= 0;
  2 17400         for i:= 1 step 1 until max_antal_operatører do
  2 17401         begin
  3 17402           integer array field tab;
  3 17403       
  3 17403           k:= læsfil(tf_alarmlgd,i,j);
  3 17404           if k<>0 then fejlreaktion(5,k,<:alarmlængde init:>,0);
  3 17405           tab:= (i-1)*opk_alarm_tab_lgd;
  3 17406           opk_alarm.tab.alarm_lgd:= fil(j).iaf(1);
  3 17407           opk_alarm.tab.alarm_start:= 0.0;
  3 17408         end;
  2 17409       
  2 17409         op_spool_kilde:= 2;
  2 17410         op_spool_tid  := 6;
  2 17411         op_spool_text := 6;
  2 17412         begin
  3 17413           long array field laf1, laf2;
  3 17414           laf2:= 4; laf1:= 0;
  3 17415           op_spool_buf.laf1(1):= long<::>;
  3 17416           tofrom(op_spool_buf.laf2,op_spool_buf.laf1,
  3 17417             op_spool_postantal*op_spool_postlgd-4);
  3 17418         end;
  2 17419       
  2 17419         k:=læsfil(1033,1,j);
  2 17420         systime(1,0.0,r);
  2 17421         if k<>0 then fejlreaktion(5,k,<:CQF-tabel init:>,0);
  2 17422         for i:= 1 step 1 until max_cqf do
  2 17423         begin
  3 17424           ref:= (i-1)*cqf_lgd; iaf:= (i-1)*8;
  3 17425           tofrom(cqf_tabel.ref,fil(j).iaf,8);
  3 17426           cqf_tabel.ref.cqf_næste_tid:= 
  3 17427             (if cqf_tabel.ref.cqf_bus > 0 then (r + 5*60.0) else real<::>);
  3 17428           cqf_tabel.ref.cqf_ok_tid:= real<::>;
  3 17429         end;
  2 17430         op_cqf_tab_ændret:= true;
  2 17431       
  2 17431         laf:= raf:= 0;
  2 17432         open(z_tv_in,8,taleswitch_in_navn,1 shift 21 + 1 shift 9);
  2 17433         i:= monitor(8)reserve_process:(z_tv_in,0,ia);
  2 17434         j:= 1;
  2 17435         if i<>0 then 
  2 17436           fejlreaktion(4,i,string taleswitch_in_navn.raf(increase(j)),1);
  2 17437         open(z_tv_out,4 shift 12 + 8,taleswitch_out_navn,1 shift 9);
  2 17438         i:= monitor(8)reserve_process:(z_tv_in,0,ia);
  2 17439         j:= 1;
  2 17440         if i<>0 then 
  2 17441           fejlreaktion(4,i,string taleswitch_out_navn.raf(increase(j)),1);
  2 17442       
  2 17442         ia(1):= 3; <*canonical*>
  2 17443         ia(2):= 0; <*no echo*>
  2 17444         ia(3):= 0; <*prompt*>
  2 17445         ia(4):= 2; <*timeout*>
  2 17446         setcspterm(taleswitch_in_navn.laf,ia);
  2 17447         setcspterm(taleswitch_out_navn.laf,ia);
  2 17448       
  2 17448         cs_op:= next_semch;
  2 17449       
  2 17449       <*+3*>skriv_new_sem(out,3,cs_op,<:cs-op(hovedmodul):>);
  2 17450       <*-3*>
  2 17451       
  2 17451         cs_op_retur:= next_semch;
  2 17452       
  2 17452       <*+3*>skriv_new_sem(out,3,cs_op_retur,<:cs_op_retur:>);
  2 17453       <*-3*>
  2 17454       
  2 17454         i:= nextcoru(200,<*ident*>
  2 17455                       10,<*prioitet*>
  2 17456                      true<*test_maske*>);
  2 17457       
  2 17457         j:= new_activity(         i,
  2 17458                                   0,
  2 17459                          h_operatør);
  2 17460       
  2 17460       <*+3*>skriv_newactivity(out,i,j);
  2 17461       <*-3*>
  2 17462       \f

  2 17462       message operatør_initialisering side 2 - 810520/hko;
  2 17463       
  2 17463         for k:= 1 step 1 until max_antal_operatører do
  2 17464         begin
  3 17465           ref:= (k-1)*8;
  3 17466           open(z_op(k),8,terminal_navn.ref,1 shift 21 +1 shift 9);
  3 17467           i:= monitor(4) processaddress:(z_op(k),0,ia);
  3 17468           ref:=k*terminal_beskr_længde;
  3 17469           if i = 0 then
  3 17470           begin
  4 17471             fejlreaktion(3<*programfejl*>,k,<:skærm eksisterer ikke:>,1);
  4 17472             terminal_tab.ref.terminal_tilstand:= 4 shift 21;
  4 17473           end
  3 17474           else
  3 17475           begin
  4 17476             terminal_tab.ref.terminal_tilstand:= 7 shift 21;<*ej knyttet*>
  4 17477           end;
  3 17478       
  3 17478           cs_operatør(k):= next_semch;
  3 17479       <*+3*>skriv_new_sem(out,3,cs_operatør(k),<:cs-operatør( ):>);
  3 17480       <*-3*>
  3 17481       
  3 17481           cs_op_fil(k):= nextsemch;
  3 17482       <*+3*> skriv_new_sem(out,3,cs_op_fil(k),<:cs-op-fil( ):>);
  3 17483       <*-3*>
  3 17484           signalch(cs_op_fil(k),nextop(filoplængde),op_optype);
  3 17485       
  3 17485           i:= next_coru(200+k,<*ident*>
  3 17486                            10,<*prioitet*>
  3 17487                           true<*testmaske*>);
  3 17488           j:= new_activity(       i,
  3 17489                                   0,
  3 17490                            operatør,k);
  3 17491       
  3 17491       <*+3*>skriv_newactivity(out,i,j);
  3 17492       <*-3*>
  3 17493         end;
  2 17494       
  2 17494         cs_cqf:= next_semch;
  2 17495       <*+3*>skriv_new_sem(out,3,cs_cqf,<:cs-cqf:>);
  2 17496       <*-3*>
  2 17497       
  2 17497         signalch(cs_cqf,nextop(60),true);
  2 17498       
  2 17498         i:= next_coru(292, <*ident*>
  2 17499                       10,  <*prioritet*>
  2 17500                       true <*testmaske*>);
  2 17501         j:= new_activity(         i,
  2 17502                                   0,
  2 17503                          op_cqftest);
  2 17504       <*+3*>skriv_new_activity(out,i,j);
  2 17505       <*-3*>
  2 17506       
  2 17506         cs_op_spool:= next_semch;
  2 17507       <*+3*>skriv_new_sem(out,3,cs_op_spool,<:cs-op-spool:>);
  2 17508       <*-3*>
  2 17509       
  2 17509         cs_op_medd:= next_semch;
  2 17510       <*+3*>skriv_new_sem(out,3,cs_op_medd,<:cs-op-medd:>);
  2 17511       <*-3*>
  2 17512       
  2 17512         ss_op_spool_tomme:= next_sem;
  2 17513       <*+3*>skriv_new_sem(out,2,ss_op_spool_tomme,<:ss-op-spool-tomme:>);
  2 17514       <*-3*>
  2 17515         for i:= 1 step 1 until op_spool_postantal do signal(ss_op_spool_tomme);
  2 17516       
  2 17516         ss_op_spool_fulde:= next_sem;
  2 17517       <*+3*>skriv_new_sem(out,2,ss_op_spool_fulde,<:ss-op-spool-fulde:>);
  2 17518       <*-3*>
  2 17519       
  2 17519         signalch(cs_op_medd,nextop(data+op_spool_postlgd),gen_optype);
  2 17520       
  2 17520         i:= next_coru(293, <*ident*>
  2 17521                       10,  <*prioritet*>
  2 17522                       true <*testmaske*>);
  2 17523         j:= new_activity(         i,
  2 17524                                   0,
  2 17525                          op_spool);
  2 17526       <*+3*>skriv_new_activity(out,i,j);
  2 17527       <*-3*>
  2 17528       
  2 17528         i:= next_coru(294, <*ident*>
  2 17529                       10,  <*prioritet*>
  2 17530                       true <*testmaske*>);
  2 17531         j:= new_activity(         i,
  2 17532                                   0,
  2 17533                          op_medd);
  2 17534       <*+3*>skriv_new_activity(out,i,j);
  2 17535       <*-3*>
  2 17536       
  2 17536         cs_op_iomedd:= next_semch;
  2 17537       <*+3*>skriv_new_sem(out,3,cs_op_iomedd,<:cs-op-iomedd:>);
  2 17538       <*-3*>
  2 17539       
  2 17539         bs_opk_alarm:= next_sem;
  2 17540       <*+3*>skriv_new_sem(out,1,bs_opk_alarm,<:bs-opk-alarm:>);
  2 17541       <*-3*>
  2 17542       
  2 17542         cs_opk_alarm:= next_semch;
  2 17543       <*+3*>skriv_new_sem(out,3,cs_opk_alarm,<:cs-opk-alarm:>);
  2 17544       <*-3*>
  2 17545       
  2 17545         cs_opk_alarm_ur:= next_semch;
  2 17546       <*+3*>skriv_new_sem(out,3,cs_opk_alarm_ur,<:cs-opk-alarm-ur:>);
  2 17547       <*-3*>
  2 17548       
  2 17548         cs_opk_alarm_ur_ret:= next_semch;
  2 17549       <*+3*>skriv_new_sem(out,3,cs_opk_alarm_ur_ret,<:cs-opk-alarm-ur-ret:>);
  2 17550       <*-3*>
  2 17551       
  2 17551         cs_tvswitch_adgang:= next_semch;
  2 17552       <*+3*>skriv_new_sem(out,3,cs_tvswitch_adgang,<:cs-tvswitch-adgang:>);
  2 17553       <*-3*>
  2 17554       
  2 17554         cs_tv_switch_input:= next_semch;
  2 17555       <*+3*>skriv_new_sem(out,3,cs_tv_switch_input,<:cs-tvswitch-input:>);
  2 17556       <*-3*>
  2 17557       
  2 17557         cs_tv_switch_adm:= next_semch;
  2 17558       <*+3*>skriv_new_sem(out,3,cs_tv_switch_adm,<:cs-tvswitch-adm:>);
  2 17559       <*-3*>
  2 17560       
  2 17560         cs_talevejsswitch:= next_semch;
  2 17561       <*+3*>skriv_new_sem(out,3,cs_talevejsswitch,<:cs-talevejsswitch:>);
  2 17562       <*-3*>
  2 17563       
  2 17563         signalch(cs_op_iomedd,nextop(60),gen_optype);
  2 17564       
  2 17564         iaf:= nextop(data+128);
  2 17565         if testbit22 then
  2 17566           signal_ch(cs_tv_switch_adgang,iaf,op_optype)
  2 17567         else
  2 17568         begin
  3 17569           startoperation(iaf,298,cs_tv_switch_adgang,'I' shift 12 + 44);
  3 17570           signal_ch(cs_talevejsswitch,iaf,op_optype);
  3 17571         end;
  2 17572       
  2 17572         i:= next_coru(295, <*ident*>
  2 17573                       8,   <*prioritet*>
  2 17574                       true <*testmaske*>);
  2 17575         j:= new_activity(         i,
  2 17576                                   0,
  2 17577                          alarmur);
  2 17578       <*+3*>skriv_new_activity(out,i,j);
  2 17579       <*-3*>
  2 17580       
  2 17580         signal_ch(cs_opk_alarm_ur_ret,nextop(data),op_optype);
  2 17581       
  2 17581         i:= next_coru(296, <*ident*>
  2 17582                       8,   <*prioritet*>
  2 17583                       true <*testmaske*>);
  2 17584         j:= new_activity(         i,
  2 17585                                   0,
  2 17586                          opkaldsalarmer);
  2 17587       <*+3*>skriv_new_activity(out,i,j);
  2 17588       <*-3*>
  2 17589       
  2 17589         i:= next_coru(297, <*ident*>
  2 17590                       3,  <*prioritet*>
  2 17591                       true <*testmaske*>);
  2 17592         j:= new_activity(         i,
  2 17593                                   0,
  2 17594                          tv_switch_input);
  2 17595       <*+3*>skriv_new_activity(out,i,j);
  2 17596       <*-3*>
  2 17597       
  2 17597         for i:= 1,2 do
  2 17598           signalch(cs_tvswitch_input,nextop(data+256),op_optype);
  2 17599       
  2 17599         i:= next_coru(298, <*ident*>
  2 17600                       20,  <*prioritet*>
  2 17601                       true <*testmaske*>);
  2 17602         j:= new_activity(         i,
  2 17603                                   0,
  2 17604                          tv_switch_adm);
  2 17605       <*+3*>skriv_new_activity(out,i,j);
  2 17606       <*-3*>
  2 17607       
  2 17607         i:= next_coru(299, <*ident*>
  2 17608                       3,   <*prioritet*>
  2 17609                       true <*testmaske*>);
  2 17610         j:= new_activity(         i,
  2 17611                                   0,
  2 17612                          talevejsswitch);
  2 17613       <*+3*>skriv_new_activity(out,i,j);
  2 17614       <*-3*>
  2 17615       \f

  2 17615       message garage_initialisering side 1 - 810521/hko;
  2 17616       
  2 17616         cs_gar:= next_semch;
  2 17617       <*+3*>skriv_new_sem(out,3,cs_gar,<:cs-gar(hovedmodul):>);
  2 17618       <*-3*>
  2 17619       
  2 17619         i:= next_coru(300,<*ident*>
  2 17620                        10,<*prioritet*>
  2 17621                       true<*test_maske*>);
  2 17622       
  2 17622         j:= new_activity(       i,
  2 17623                                 0,
  2 17624                          h_garage);
  2 17625       
  2 17625       <*+3*>skriv_newactivity(out,i,j);
  2 17626       <*-3*>
  2 17627       
  2 17627         for k:= 1 step 1 until max_antal_garageterminaler do
  2 17628         begin
  3 17629           ref:= (k-1)*8;
  3 17630           open(z_gar(k),8,garage_terminal_navn.raf,1 shift 21 + 1 shift 9);
  3 17631           ref:= (max_antal_operatører+k)*terminal_beskr_længde;
  3 17632           i:=monitor(4)process address:(z_gar(k),0,ia);
  3 17633           if i = 0 then
  3 17634           begin
  4 17635             fejlreaktion(4<*monitor result*>,k,<:garageterminal eksisterer ikke:>,1);
  4 17636             terminal_tab.ref.terminal_tilstand:= 4 shift 21;
  4 17637           end
  3 17638           else
  3 17639           begin
  4 17640             terminal_tab.ref.terminal_tilstand:= 
  4 17641               if garage_auto_include(k) then 0 else 7 shift 21;
  4 17642             if garage_auto_include(k) then
  4 17643               monitor(8)reserve:(z_gar(k),0,ia);
  4 17644           end;
  3 17645           cs_garage(k):= next_semch;
  3 17646       <*+3*>skriv_new_sem(out,3,cs_garage(k),<:cs-garage( ):>);
  3 17647       <*-3*>
  3 17648           i:= next_coru(300+k,<*ident*>
  3 17649                            10,<*prioritet*>
  3 17650                          true <*testmaske*>);
  3 17651           j:= new_activity(     i,
  3 17652                                 0,
  3 17653                            garage,k);
  3 17654       
  3 17654       <*+3*>skriv_newactivity(out,i,j);
  3 17655       <*-3*>
  3 17656       
  3 17656         end;
  2 17657       \f

  2 17657       message radio_initialisering side 1 - 820301/hko;
  2 17658       
  2 17658         cs_rad:= next_semch;
  2 17659       <*+3*>skriv_new_sem(out,3,cs_rad,<:cs_rad(h_mod):>);
  2 17660       <*-3*>
  2 17661       
  2 17661         i:= next_coru(400,<*ident*>
  2 17662                        10,<*prioritet*>
  2 17663                       true<*test_maske*>);
  2 17664         j:= new_activity(      i,
  2 17665                                0,
  2 17666                          h_radio);
  2 17667       <*+3*>skriv_newactivity(out,i,j);
  2 17668       <*-3*>
  2 17669       
  2 17669         opkalds_kø_ledige:= max_antal_mobilopkald;
  2 17670         nødopkald_brugt:= 0;
  2 17671         læsfil(1034,1,i);
  2 17672         tofrom(radio_områdetabel,fil(i),max_antal_områder*2);
  2 17673       
  2 17673         opkald_meldt:= opkaldskø_postlængde - op_maske_lgd;
  2 17674         for i:= system(3,j,opkaldskø) step 1 until j do
  2 17675           opkaldskø(i):= 0;
  2 17676         første_frie_opkald:=opkaldskø_postlængde;
  2 17677         første_opkald:=sidste_opkald:=
  2 17678         første_nødopkald:=sidste_nødopkald:=j:=0;
  2 17679       
  2 17679         for i:=1 step 1 until max_antal_mobil_opkald -1 do
  2 17680         begin
  3 17681           ref:=i*opkaldskø_postlængde;
  3 17682           opkaldskø.ref(1):=j:=j shift 12 +ref +opkaldskø_postlængde;
  3 17683         end;
  2 17684         ref:=ref+opkaldskø_postlængde;
  2 17685         opkaldskø.ref(1):=j shift 12;
  2 17686       
  2 17686         for ref:= 0 step 512 until (max_linienr//768*512) do
  2 17687         begin
  3 17688           i:= læs_fil(1035,ref//512+1,j);
  3 17689           if i <> 0 then
  3 17690             fejlreaktion(5<*læs_fil*>,i,<:liniefordelingstabel:>,0);
  3 17691           tofrom(radio_linietabel.ref,fil(j),
  3 17692           if (((max_linienr+1 - (ref//2*3))+2)//3*2) > 512 then 512
  3 17693           else ((max_linienr+1 - (ref//2*3))+2)//3*2);
  3 17694         end;
  2 17695       
  2 17695         for i:= system(3,j,kanal_tab) step 1 until j do
  2 17696           kanal_tab(i):= 0;
  2 17697         kanal_tilstand:= 2;
  2 17698         kanal_id1:= 4;
  2 17699         kanal_id2:= 6;
  2 17700         kanal_spec:= 8;
  2 17701         kanal_alt_id1:= 10;
  2 17702         kanal_alt_id2:= 12;
  2 17703         kanal_mon_maske:= 12;
  2 17704         kanal_alarm:= kanal_mon_maske+tv_maske_lgd;
  2 17705       
  2 17705         for i:= 1 step 1 until max_antal_kanaler do
  2 17706         begin
  3 17707           ref:= (i-1)*kanalbeskrlængde;
  3 17708           sæthexciffer(kanal_tab.ref,3,15);
  3 17709           if kanal_id(i) shift (-5) extract 3 = 2 or
  3 17710              kanal_id(i) shift (-5) extract 3 = 3 and
  3 17711              radio_id(kanal_id(i) extract 5)<=3
  3 17712           then
  3 17713           begin
  4 17714             sætbiti(kanal_tab.ref.kanal_tilstand,11,1);
  4 17715             sætbiti(kanal_tab.ref.kanal_tilstand,10,1);
  4 17716           end;
  3 17717         end;
  2 17718         tofrom(opkaldsflag,alle_operatører,op_maske_lgd);
  2 17719         tofrom(samtaleflag,ingen_operatører,op_maske_lgd);
  2 17720         tofrom(hookoff_maske,ingen_taleveje,tv_maske_lgd);
  2 17721         optaget_flag:= 0;
  2 17722       \f

  2 17722       message radio_initialisering side 2 - 810524/hko;
  2 17723       
  2 17723         bs_mobil_opkald:= next_sem;
  2 17724       
  2 17724       <*+3*>skriv_new_sem(out,1,bs_mobil_opkald,<:bs_mobil_opkald:>);
  2 17725       <*-3*>
  2 17726       
  2 17726         bs_opkaldskø_adgang:= next_sem;
  2 17727         signal_bin(bs_opkaldskø_adgang);
  2 17728       
  2 17728       <*+3*>skriv_new_sem(out,1,bs_opkaldskø_adgang,<:bs_opk.kø_adgang:>);
  2 17729       <*-3*>
  2 17730       
  2 17730         cs_radio_medd:=next_semch;
  2 17731         signal_ch(cs_radio_medd,nextop(data+6),gen_optype or rad_optype);
  2 17732       
  2 17732       <*+3*>skriv_new_sem(out,3,cs_radio_medd,<:cs_radio_medd:>);
  2 17733       <*-3*>
  2 17734       
  2 17734         i:= next_coru(403,
  2 17735                         5,<*prioritet*>
  2 17736                       true<*testmaske*>);
  2 17737       
  2 17737         j:= new_activity(      i,
  2 17738                                0,
  2 17739                radio_medd_opkald);
  2 17740       
  2 17740       <*+3*>skriv_newactivity(out,i,j);
  2 17741       <*-3*>
  2 17742       
  2 17742       cs_radio_adm:= nextsemch;
  2 17743       <*+3*>skriv_new_sem(out,3,cs_radio_adm,<:cs_radio_adm:>);
  2 17744       <*-3*>
  2 17745       
  2 17745       i:= next_coru(404,
  2 17746                      10,
  2 17747                    true);
  2 17748       j:= new_activity(i,
  2 17749                        0,
  2 17750                        radio_adm,next_op(data+radio_op_længde));
  2 17751       <*+3*>skriv_new_activity(out,i,j);
  2 17752       <*-3*>
  2 17753       \f

  2 17753       message radio_initialisering side 3 - 810526/hko;
  2 17754        for k:= 1 step 1 until max_antal_taleveje do
  2 17755        begin
  3 17756       
  3 17756         cs_radio(k):=next_semch;
  3 17757       
  3 17757       <*+3*>skriv_new_sem(out,3,cs_radio(k),<:cs_radio(  ):>);
  3 17758       <*-3*>
  3 17759       
  3 17759         bs_talevej_udkoblet(k):= nextsem;
  3 17760       <*+3*>skriv_new_sem(out,1,bs_talevej_udkoblet(k),<:bs_talevej_udkoblet( ):>);
  3 17761       <*-3*>
  3 17762       
  3 17762         i:=next_coru(410+k,
  3 17763                       10,
  3 17764                      true);
  3 17765       
  3 17765         j:=new_activity(     i,
  3 17766                              0,
  3 17767                         radio,k,next_op(data + radio_op_længde));
  3 17768       
  3 17768       <*+3*>skriv_newactivity(out,i,j);
  3 17769       <*-3*>
  3 17770        end;
  2 17771       
  2 17771         cs_radio_pulje:=next_semch;
  2 17772       
  2 17772       <*+3*>skriv_new_sem(out,3,cs_radio_pulje,<:cs-radio-pulje:>);
  2 17773       <*-3*>
  2 17774       
  2 17774         for i:= 1 step 1 until radiopulje_størrelse do
  2 17775           signal_ch(cs_radio_pulje,
  2 17776                     next_op(60),
  2 17777                     gen_optype or rad_optype);
  2 17778       
  2 17778         cs_radio_kø:= next_semch;
  2 17779       
  2 17779       <*+3*>skriv_new_sem(out,3,cs_radio_kø,<:cs_radio_kø:>);
  2 17780       <*-3*>
  2 17781       
  2 17781         mobil_opkald_aktiveret:= true;
  2 17782       \f

  2 17782       message radio_initialisering side 4 - 810522/hko;
  2 17783       
  2 17783           laf:=raf:=0;
  2 17784       
  2 17784           open(z_fr_in,8,radio_fr_navn,radio_giveup);
  2 17785           i:= monitor(8)reserve process:(z_fr_in,0,ia);
  2 17786           j:=1;
  2 17787           if i <> 0 then
  2 17788             fejlreaktion(4<*monitor resultat*>,i,
  2 17789               string radio_fr_navn.raf(increase(j)),1);
  2 17790           open(z_fr_out,4 shift 12 + 8,radio_fr_navn,radio_giveup);
  2 17791           i:= monitor(8)reserve process:(z_fr_out,0,ia);
  2 17792           j:=1;
  2 17793           if i <> 0 then
  2 17794             fejlreaktion(4,i,string radio_fr_navn.raf(increase(j)),1);
  2 17795           ia(1):= 3 <*canonical*>;
  2 17796           ia(2):= 0 <*no echo*>;
  2 17797           ia(3):= 0 <*prompt*>;
  2 17798           ia(4):= 5 <*timeout*>;
  2 17799           setcspterm(radio_fr_navn.laf,ia);
  2 17800       
  2 17800           open(z_rf_in,8,radio_rf_navn,radio_giveup);
  2 17801           i:= monitor(8)reserve process:(z_rf_in,0,ia);
  2 17802           j:= 1;
  2 17803           if i <> 0 then
  2 17804             fejlreaktion(4<*monitor resultat*>,i,
  2 17805               string radio_rf_navn.raf(increase(j)),1);
  2 17806           open(z_rf_out,4 shift 12 + 8,radio_rf_navn,radio_giveup);
  2 17807           i:= monitor(8)reserve process:(z_rf_out,0,ia);
  2 17808           j:= 1;
  2 17809           if i <> 0 then
  2 17810             fejlreaktion(4,i,string radio_rf_navn.raf(increase(j)),1);
  2 17811           ia(1):= 3 <*canonical*>;
  2 17812           ia(2):= 0 <*no echo*>;
  2 17813           ia(3):= 0 <*prompt*>;
  2 17814           ia(4):= 5 <*timeout*>;
  2 17815           setcspterm(radio_rf_navn.laf,ia);
  2 17816       \f

  2 17816       message radio_initialisering side 5 - 810521/hko;
  2 17817           for k:= 1 step 1 until max_antal_kanaler do
  2 17818           begin
  3 17819       
  3 17819             ss_radio_aktiver(k):=next_sem;
  3 17820       <*+3*>skriv_new_sem(out,2,ss_radio_aktiver(k),<:ss_rad_aktiver( ):>);
  3 17821       <*-3*>
  3 17822       
  3 17822             ss_samtale_nedlagt(k):=next_sem;
  3 17823       <*+3*>skriv_new_sem(out,2,ss_samtale_nedlagt(k),<:ss_samtale_nedlagt(  ):>);
  3 17824       <*-3*>
  3 17825           end;
  2 17826       
  2 17826           cs_radio_ind:= next_semch;
  2 17827       <*+3*>skriv_new_sem(out,3,cs_radio_ind,<:cs_radio_ind:>);
  2 17828       <*-3*>
  2 17829       
  2 17829           i:= next_coru(401,<*ident radio_ind*>
  2 17830                            3, <*prioritet*>
  2 17831                          true <*testmaske*>);
  2 17832           j:= new_activity(      i,
  2 17833                                  0,
  2 17834                            radio_ind,next_op(data + 64));
  2 17835       
  2 17835       <*+3*>skriv_newactivity(out,i,j);
  2 17836       <*-3*>
  2 17837       
  2 17837           cs_radio_ud:=next_semch;
  2 17838       <*+3*>skriv_new_sem(out,3,cs_radio_ud,<:cs_radio_ud:>);
  2 17839       <*-3*>
  2 17840       
  2 17840           i:= next_coru(402,<*ident radio_out*>
  2 17841                            10,<*prioritet*>
  2 17842                          true <*testmaske*>);
  2 17843           j:= new_activity(         i,
  2 17844                                     0,
  2 17845                            radio_ud,next_op(data + 64));
  2 17846       
  2 17846       <*+3*>skriv_newactivity(out,i,j);
  2 17847       <*-3*>
  2 17848       \f

  2 17848       message vogntabel initialisering side 1 - 820301;
  2 17849       
  2 17849       sidste_bus:= sidste_linie_løb:= 0;
  2 17850       
  2 17850       tf_vogntabel:= 1 shift 10 + 2;
  2 17851       tf_gruppedef:= ia(4):= 1 shift 10 +3;
  2 17852       tf_gruppeidenter:= 1 shift 10 +6;
  2 17853       tf_springdef:= 1 shift 10 +7;
  2 17854       hent_fil_dim(ia);
  2 17855       max_antal_i_gruppe:= ia(2);
  2 17856       if ia(1) < max_antal_grupper then
  2 17857         max_antal_grupper:= ia(1);
  2 17858       
  2 17858       <* initialisering af interne vogntabeller *>
  2 17859       begin
  3 17860         long array field laf1,laf2;
  3 17861         integer array fdim(1:8);
  3 17862         zone z(128,1,stderror);
  3 17863         integer busnr,i,j,zi,s,pant,ll_nr,b_nr,res,tegn,g_nr,o_nr;
  3 17864         long omr,garageid;
  3 17865         integer field ll, bn;
  3 17866         boolean binær, test24;
  3 17867       
  3 17867         ll:= 2; bn:= 4;
  3 17868         
  3 17868         <* nulstil tabellerne *>
  3 17869         laf1:= -2;
  3 17870         laf2:=  2;
  3 17871         bustabel1.laf2(0):=
  3 17872         bustabel.laf2(0):= bustilstand.laf2(0):= linie_løb_tabel.laf2(0):= 
  3 17873         bus_indeks.laf2(0):= linie_løb_indeks.laf2(0):= extend 0;
  3 17874         tofrom(bustabel.laf2,bustabel.laf1,(max_antal_busser+1)*2-4);
  3 17875         tofrom(bustabel1.laf2,bustabel1.laf1,(max_antal_busser+1)*2-4);
  3 17876         tofrom(linie_løb_tabel.laf2,linie_løb_tabel.laf1,(max_antal_linie_løb+1)*2-4);
  3 17877         tofrom(busindeks.laf2,busindeks.laf1,max_antal_linie_løb-4);
  3 17878         tofrom(linie_løb_indeks.laf2,linie_løb_indeks.laf1,max_antal_busser-4);
  3 17879         tofrom(bustilstand.laf2,bustilstand.laf1,max_antal_busser-4);
  3 17880       \f

  3 17880       message vogntabel initialisering side 1a - 810505/cl;
  3 17881       
  3 17881       
  3 17881         <* initialisering af intern busnummertabel *>
  3 17882         open(z,4,<:busnumre:>,0);
  3 17883         busnr:= -1;
  3 17884         read(z,busnr);
  3 17885         while busnr > 0 do
  3 17886         begin
  4 17887           if busnr < bustabel(sidste_bus) extract 14 or busnr >= 1 shift 14 then
  4 17888             fejlreaktion(10,busnr,<:fejl i busnrfil:>,0);
  4 17889           sidste_bus:= sidste_bus+1;
  4 17890           if sidste_bus > max_antal_busser then
  4 17891             fejlreaktion(10,busnr,<:for mange busser i busnrfil:>,0);
  4 17892           repeatchar(z); readchar(z,tegn);
  4 17893           garageid:= extend 0; binær:= false; omr:= extend 0;
  4 17894           g_nr:= o_nr:= 0;
  4 17895           if tegn='!' then
  4 17896           begin
  5 17897             binær:= true;
  5 17898             readchar(z,tegn);
  5 17899           end;
  4 17900           if tegn='/' then <*garageid*>
  4 17901           begin
  5 17902             readchar(z,tegn); repeatchar(z);
  5 17903             if '0'<=tegn and tegn<='9' then
  5 17904             begin
  6 17905               read(z,g_nr); if g_nr<1 or g_nr>max_antal_operatører then g_nr:= 0;
  6 17906               if g_nr<>0 then garageid:=bpl_navn(g_nr);
  6 17907               if g_nr<>0 and garageid=long<::> then
  6 17908               begin
  7 17909                 fejlreaktion(10,busnr,<:ukendt garageidentifikation for bus:>,1);
  7 17910                 g_nr:= 0;
  7 17911               end;
  6 17912             end
  5 17913             else
  5 17914             begin
  6 17915               while ('A'<= tegn and tegn <='Å') or ('0'<=tegn and tegn<='9') do
  6 17916               begin
  7 17917                 garageid:= garageid shift 8 + tegn;
  7 17918                 readchar(z,tegn);
  7 17919               end;
  6 17920               while garageid shift (-40) extract 8 = 0 do
  6 17921                 garageid:= garageid shift 8;
  6 17922               g_nr:= find_bpl(garageid);
  6 17923               if g_nr=0 then
  6 17924                 fejlreaktion(10,busnr,<:ukendt garageidentifikation for bus:>,1);
  6 17925             end;
  5 17926             repeatchar(z); readchar(z,tegn);
  5 17927           end;
  4 17928           if tegn=';' then
  4 17929           begin
  5 17930             readchar(z,tegn); repeatchar(z);
  5 17931             if '0'<=tegn and tegn<='9' then
  5 17932             begin
  6 17933               read(z,o_nr);
  6 17934               if o_nr<1 or max_antal_områder<o_nr then o_nr:= 0;
  6 17935               if o_nr<>0 then omr:= område_navn(o_nr);
  6 17936               if o_nr<>0 and omr=long<::> then
  6 17937               begin
  7 17938                 fejlreaktion(10,busnr,<:ukendt områdeidentifikation for bus:>,1);
  7 17939                 o_nr:= 0;
  7 17940               end;
  6 17941             end
  5 17942             else
  5 17943             begin
  6 17944               while ('A'<=tegn and tegn<='Å') or ('0'<=tegn and tegn<='9') do
  6 17945               begin
  7 17946                 omr:= omr shift 8 + tegn;
  7 17947                 readchar(z,tegn);
  7 17948               end;
  6 17949               while omr shift (-40) extract 8 = 0 do
  6 17950                 omr:= omr shift 8;
  6 17951               if omr=long<:TCT:> then omr:=long<:KBH:>;
  6 17952               i:= 1;
  6 17953               while i<=max_antal_områder and o_nr=0 do
  6 17954               begin
  7 17955                 if omr=område_navn(i) then o_nr:= i;
  7 17956                 i:= i+1;
  7 17957               end;
  6 17958               if o_nr=0 then
  6 17959                 fejlreaktion(10,busnr,<:ukendt områdeidentifikation for bus:>,1);
  6 17960             end;
  5 17961             repeatchar(z); readchar(z,tegn);
  5 17962           end;
  4 17963           if o_nr=0 then o_nr:= 3;
  4 17964           bustabel (sidste_bus):= g_nr shift 14 + busnr;
  4 17965           bustabel1(sidste_bus):= (binær extract 1) shift 23 + o_nr;
  4 17966       
  4 17966           busnr:= -1;
  4 17967           read(z,busnr);
  4 17968         end;
  3 17969         close(z,true);
  3 17970       \f

  3 17970       message vogntabel initialisering side 2 - 820301/cl;
  3 17971       
  3 17971         <* initialisering af intern linie/løbs-tabel og bus-indekstabel *>
  3 17972         test24:= testbit24;
  3 17973         testbit24:= false;
  3 17974         i:= 1;
  3 17975         s:= læsfil(tf_vogntabel,i,zi);
  3 17976         if s<>0 then fejlreaktion(5,s,<:vogntabelinit:>,0);
  3 17977         while fil(zi).bn<>0 do
  3 17978         begin
  4 17979           if fil(zi).ll <> 0 then
  4 17980           begin <* indsæt linie/løb *>
  5 17981             res:= binærsøg(sidste_linie_løb,linie_løb_tabel(j) -
  5 17982                     fil(zi).ll,j);
  5 17983             if res < 0 then j:= j+1;
  5 17984             if res = 0 then fejlreaktion(10,fil(zi).bn,
  5 17985               <:dobbeltregistrering i vogntabel:>,1)
  5 17986             else
  5 17987             begin
  6 17988               o_nr:= fil(zi).bn shift (-14) extract 8;
  6 17989               b_nr:= søg_omr_bus(fil(zi).bn extract 14,ll_nr,g_nr,o_nr,s,tegn);
  6 17990               if b_nr<0 then fejlreaktion(10,fil(zi).bn extract 14,
  6 17991                 <:ukendt bus i vogntabel:>,1)
  6 17992               else
  6 17993               begin
  7 17994                 if sidste_linie_løb >= max_antal_linie_løb then
  7 17995                   fejlreaktion(10,fil(zi).bn extract 14,
  7 17996                       <:for mange linie/løb i vogntabel:>,0);
  7 17997                 for ll_nr:= sidste_linie_løb step (-1) until j do
  7 17998                 begin
  8 17999                   linie_løb_tabel(ll_nr+1):= linie_løb_tabel(ll_nr);
  8 18000                   bus_indeks(ll_nr+1):= bus_indeks(ll_nr);
  8 18001                 end;
  7 18002                 linie_løb_tabel(j):= fil(zi).ll;
  7 18003                 bus_indeks(j):= false add b_nr;
  7 18004                 sidste_linie_løb:= sidste_linie_løb + 1;
  7 18005               end;
  6 18006             end;
  5 18007           end;
  4 18008           i:= i+1;
  4 18009           s:= læsfil(tf_vogntabel,i,zi);
  4 18010           if s<>0 then fejlreaktion(5,s,<:vogntabelinit:>,0);
  4 18011         end;
  3 18012       \f

  3 18012       message vogntabel initialisering side 3 - 810428/cl;
  3 18013       
  3 18013         <* initialisering af intern linie/løb-indekstabel *>
  3 18014         for ll_nr:= 1 step 1 until sidste_linie_løb do
  3 18015           linie_løb_indeks(bus_indeks(ll_nr) extract 12):= false add ll_nr;
  3 18016       
  3 18016         <* gem ny vogntabel i tabelfil *>
  3 18017         for i:= 1 step 1 until sidste_bus do
  3 18018         begin
  4 18019           s:= skriv_fil(tf_vogntabel,i,zi);
  4 18020           if s<>0 then fejlreaktion(6,s,<:vogntabelinit:>,0);
  4 18021           fil(zi).bn:= bustabel(i) extract 14 add
  4 18022                        (bustabel1(i) extract 8 shift 14);
  4 18023           fil(zi).ll:= linie_løb_tabel(linie_løb_indeks(i) extract 12);
  4 18024         end;
  3 18025         fdim(4):= tf_vogntabel;
  3 18026         hent_fil_dim(fdim);
  3 18027         pant:= fdim(3) * (256//fdim(2));
  3 18028         for i:= sidste_bus+1 step 1 until pant do
  3 18029         begin
  4 18030           s:= skriv_fil(tf_vogntabel,i,zi);
  4 18031           if s<>0 then fejlreaktion(6,s,<:vogntabelinit:>,0);
  4 18032           fil(zi).ll:= fil(zi).bn:= 0;
  4 18033         end;
  3 18034       
  3 18034         <* initialisering/nulstilling af gruppetabeller *>
  3 18035         for i:= 1 step 1 until max_antal_grupper do
  3 18036         begin
  4 18037           s:= læs_fil(tf_gruppeidenter,i,zi);
  4 18038           if s <> 0 then fejlreaktion(5,s,<:gruppetabelinit:>,0);
  4 18039           gruppetabel(i):= fil(zi).ll;
  4 18040         end;
  3 18041         for i:= 1 step 1 until max_antal_gruppeopkald do
  3 18042           gruppeopkald(i,1):= gruppeopkald(i,2):= 0;
  3 18043         testbit24:= test24;
  3 18044       end;
  2 18045       
  2 18045       
  2 18045       <*+2*>
  2 18046       <**> if testbit40 then p_vogntabel(out);
  2 18047       <**> if testbit43 then p_gruppetabel(out);
  2 18048       <*-2*>
  2 18049       
  2 18049       message vogntabel initialisering side 3a -920517/cl;
  2 18050       
  2 18050         <* initialisering for vt_log *>
  2 18051       
  2 18051         v_tid:= 4;
  2 18052         v_kode:= 6;
  2 18053         v_bus:= 8;
  2 18054         v_ll1:= 10;
  2 18055         v_ll2:= 12;
  2 18056         v_tekst:= 6;
  2 18057         for i:= 1 step 1 until 4 do vt_logdisc(i):= 0;
  2 18058         for i:= 1 step 1 until 10 do vt_log_tail(i):= 0;
  2 18059         if vt_log_aktiv then
  2 18060         begin
  3 18061           integer i;
  3 18062           real t;
  3 18063           integer array field iaf;
  3 18064           integer array
  3 18065             tail(1:10),ia(1:10),chead(1:20);
  3 18066       
  3 18066           open(zvtlog,4,<:vtlogpool:>,0); close(zvtlog,true);
  3 18067           i:= monitor(42)lookup_entry:(zvtlog,0,tail);
  3 18068           if i=0 then
  3 18069             i:=monitor(52)create_areaproc:(zvtlog,0,ia);
  3 18070           if i=0 then
  3 18071           begin
  4 18072             i:=monitor(8)reserve_process:(zvtlog,0,ia);
  4 18073             monitor(64)remove_areaproc:(zvtlog,0,ia);
  4 18074           end;
  3 18075       
  3 18075           if i=0 then
  3 18076           begin
  4 18077             iaf:= 2;
  4 18078             tofrom(vt_logdisc,tail.iaf,8);
  4 18079             i:=slices(vt_logdisc,0,tail,chead);
  4 18080             if i > (-2048) then
  4 18081             begin
  5 18082               vt_log_slicelgd:= chead(15);
  5 18083               i:= 0;
  5 18084             end;
  4 18085           end;
  3 18086       
  3 18086           if i=0 then
  3 18087           begin
  4 18088             open(zvtlog,4,<:vtlogklar:>,0); close(zvtlog,true);
  4 18089             i:=monitor(42)lookup_entry:(zvtlog,0,tail);
  4 18090             if i=0 then
  4 18091               i:= monitor(52)create_areapproc:(zvtlog,0,ia);
  4 18092             if i=0 then
  4 18093             begin
  5 18094               i:=monitor(8)reserve_process:(zvtlog,0,ia);
  5 18095               monitor(64)remove_areaproc:(zvtlog,0,ia);
  5 18096             end;
  4 18097       
  4 18097             if i<>0 then
  4 18098             begin
  5 18099               for i:= 1 step 1 until 10 do tail(i):= 0;
  5 18100               tail(1):= 1;
  5 18101               iaf:= 2;
  5 18102               tofrom(tail.iaf,vt_logdisc,8);
  5 18103               tail(6):=systime(7,0,t);
  5 18104               i:=monitor(40)create_entry:(zvtlog,0,tail);
  5 18105               if i=0 then
  5 18106                 i:=monitor(50)permanent_entry:(zvtlog,3,ia);
  5 18107             end;
  4 18108           end;
  3 18109       
  3 18109           if i<>0 then vt_log_aktiv:= false;
  3 18110         end;
  2 18111       
  2 18111       
  2 18111       \f

  2 18111       message vogntabel initialisering side 4 - 810520/cl;
  2 18112       
  2 18112       cs_vt:= nextsemch;
  2 18113       <*+3*> skriv_new_sem(out,3,cs_vt,<:cs-vt:>);
  2 18114       <*-3*>
  2 18115       
  2 18115       cs_vt_adgang:= nextsemch;
  2 18116       <*+3*> skriv_new_sem(out,3,cs_vt_adgang,<:cs-vt-adgang:>);
  2 18117       <*-3*>
  2 18118       
  2 18118       cs_vt_opd:= nextsemch;
  2 18119       <*+3*> skriv_new_sem(out,3,cs_vt_opd,<:cs-vt-opd:>);
  2 18120       <*-3*>
  2 18121       
  2 18121       cs_vt_rap:= nextsemch;
  2 18122       <*+3*> skriv_new_sem(out,3,cs_vt_rap,<:cs-vt-rap:>);
  2 18123       <*-3*>
  2 18124       
  2 18124       cs_vt_tilst:= nextsemch;
  2 18125       <*+3*> skriv_new_sem(out,3,cs_vt_tilst,<:cs-vt-tilst:>);
  2 18126       <*-3*>
  2 18127       
  2 18127       cs_vt_auto:= nextsemch;
  2 18128       <*+3*> skriv_new_sem(out,3,cs_vt_auto,<:cs-vt-auto:>);
  2 18129       <*-3*>
  2 18130       
  2 18130       cs_vt_grp:= nextsemch;
  2 18131       <*+3*> skriv_new_sem(out,3,cs_vt_grp,<:cs-vt-grp:>);
  2 18132       <*-3*>
  2 18133       
  2 18133       cs_vt_spring:= nextsemch;
  2 18134       <*+3*> skriv_new_sem(out,3,cs_vt_spring,<:cs-vt-spring:>);
  2 18135       <*-3*>
  2 18136       
  2 18136       cs_vt_log:= nextsemch;
  2 18137       <*+3*> skriv_new_sem(out,3,cs_vt_log,<:cs-vt-log:>);
  2 18138       <*-3*>
  2 18139       
  2 18139       cs_vt_logpool:= nextsemch;
  2 18140       <*+3*> skriv_new_sem(out,3,cs_vt_logpool,<:cs-vt-logpool:>);
  2 18141       <*-3*>
  2 18142       
  2 18142       vt_op:= nextop(vt_op_længde);
  2 18143       signalch(cs_vt_adgang,vt_op,gen_optype or vt_optype);
  2 18144       
  2 18144       vt_logop(1):= nextop(vt_op_længde);
  2 18145       signalch(cs_vt_logpool,vt_logop(1),vt_optype);
  2 18146       vt_logop(2):= nextop(vt_op_længde);
  2 18147       signalch(cs_vt_logpool,vt_logop(2),vt_optype);
  2 18148       
  2 18148       \f

  2 18148       message vogntabel initialisering side 5 - 81-520/cl;
  2 18149       
  2 18149       i:= nextcoru(500, <*ident*>
  2 18150                     10, <*prioitet*>
  2 18151                    true <*testmaske*>);
  2 18152       j:= new_activity( i,
  2 18153                         0,
  2 18154                        h_vogntabel);
  2 18155       <*+3*> skriv_newactivity(out,i,j);
  2 18156       <*-3*>
  2 18157       
  2 18157       i:= nextcoru(501,   <*ident*>
  2 18158                     10,   <*prioritet*>
  2 18159                    true   <*testmaske*>);
  2 18160       iaf:= nextop(filop_længde);
  2 18161       j:= new_activity(i,
  2 18162                        0,
  2 18163                        vt_opdater,iaf);
  2 18164       <*+3*> skriv_newactivity(out,i,j);
  2 18165       <*-3*>
  2 18166       
  2 18166       i:= nextcoru(502,   <*ident*>
  2 18167                     10,   <*prioritet*>
  2 18168                    true   <*testmaske*>);
  2 18169       k:= nextsemch;
  2 18170       <*+3*> skriv_new_sem(out,3,k,<:cs-fil(vt-tilst):>);
  2 18171       <*-3*>
  2 18172       iaf:= nextop(fil_op_længde);
  2 18173       j:= newactivity(i,
  2 18174                       0,
  2 18175                       vt_tilstand,
  2 18176                       k,
  2 18177                       iaf);
  2 18178       <*+3*> skriv_newactivity(out,i,j);
  2 18179       <*-3*>
  2 18180       \f

  2 18180       message vogntabel initialisering side 6 - 810520/cl;
  2 18181       
  2 18181       i:= nextcoru(503,   <*ident*>
  2 18182                     10,   <*prioritet*>
  2 18183                    true   <*testmaske*>);
  2 18184       k:= nextsemch;
  2 18185       <*+3*> skriv_new_sem(out,3,k,<:cs-fil(vt-rapport):>);
  2 18186       <*-3*>
  2 18187       iaf:= nextop(fil_op_længde);
  2 18188       j:= newactivity(i,
  2 18189                       0,
  2 18190                       vt_rapport,
  2 18191                       k,
  2 18192                       iaf);
  2 18193       <*+3*> skriv_newactivity(out,i,j);
  2 18194       <*-3*>
  2 18195       
  2 18195       i:= nextcoru(504,   <*ident*>
  2 18196                     10,   <*prioritet*>
  2 18197                    true   <*testmaske*>);
  2 18198       k:= nextsemch;
  2 18199       <*+3*> skriv_new_sem(out,3,k,<:cs-fil(vt-gruppe):>);
  2 18200       <*-3*>
  2 18201       iaf:= nextop(fil_op_længde);
  2 18202       j:= new_activity(i,
  2 18203                        0,
  2 18204                        vt_gruppe,
  2 18205                        k,
  2 18206                        iaf);
  2 18207       <*+3*> skriv_newactivity(out,i,j);
  2 18208       <*-3*>
  2 18209       \f

  2 18209       message vogntabel initialisering side 7 - 810520/cl;
  2 18210       
  2 18210       i:= nextcoru(505,   <*ident*>
  2 18211                     10,   <*prioritet*>
  2 18212                    true   <*testmaske*>);
  2 18213       k:= nextsemch;
  2 18214       <*+3*> skriv_new_sem(out,3,k,<:cs-spring-retur:>);
  2 18215       <*-3*>
  2 18216       iaf:= nextop(fil_op_længde);
  2 18217       j:= newactivity(i,
  2 18218                       0,
  2 18219                       vt_spring,
  2 18220                       k,
  2 18221                       iaf);
  2 18222       <*+3*> skriv_newactivity(out,i,j);
  2 18223       <*-3*>
  2 18224       
  2 18224       i:= nextcoru(506,   <*ident*>
  2 18225                     10,
  2 18226                    true   <*testmaske*>);
  2 18227       k:= nextsemch;
  2 18228       <*+3*> skriv_new_sem(out,3,k,<:cs-auto-retur:>);
  2 18229       <*-3*>
  2 18230       iaf:= nextop(if fil_op_længde>(data+20) then fil_op_længde else (data+20));
  2 18231       j:= newactivity(i,
  2 18232                       0,
  2 18233                       vt_auto,
  2 18234                       k,
  2 18235                       iaf);
  2 18236       <*+3*> skriv_newactivity(out,i,j);
  2 18237       <*-3*>
  2 18238       
  2 18238       i:=nextcoru(507, <*ident*>
  2 18239                    10, <*prioritet*>
  2 18240                   true <*testmaske*>);
  2 18241       j:=newactivity(i,
  2 18242                      0,
  2 18243                      vt_log);
  2 18244       <*+3*> skriv_newactivity(out,i,j);
  2 18245       <*-3*>
  2 18246       
  2 18246       <*+2*>
  2 18247       <**> if testbit42  then skriv_vt_variable(out);
  2 18248       <*-2*>
  2 18249       \f

  2 18249       message sysslut initialisering side 1 - 810406/cl;
  2 18250       begin
  3 18251         zone z(128,1,stderror);
  3 18252         integer i,coruid,j,k;
  3 18253         integer array field cor;
  3 18254       
  3 18254         open(z,4,<:overvågede:>,0);
  3 18255         for i:= read(z,coruid) while i > 0 do
  3 18256         begin
  4 18257           if coruid = 0 then
  4 18258           begin
  5 18259             for coruid:= 1 step 1 until maxcoru do
  5 18260             begin
  6 18261               cor:= coroutine(coruid);
  6 18262               d.cor.corutestmask:= d.cor.corutestmask shift 1 shift (-1);
  6 18263             end
  5 18264           end
  4 18265           else
  4 18266           begin
  5 18267             cor:= coroutine(coru_no(abs coruid));
  5 18268             if cor > 0 then
  5 18269             begin
  6 18270               d.cor.corutestmask:=
  6 18271                 (d.cor.corutestmask shift 1 shift (-1)) add
  6 18272                 ((coruid > 0) extract 1 shift 11);
  6 18273             end;
  5 18274           end;
  4 18275         end;
  3 18276         close(z,true);
  3 18277       
  3 18277         læsfil(tf_systællere,1,k);
  3 18278         cor:= 0;
  3 18279         tofrom(opkalds_tællere,fil(k).cor,max_antal_områder*6);
  3 18280       
  3 18280       end;
  2 18281       \f

  2 18281       message sysslut initialisering side 2 - 810603/cl;
  2 18282       
  2 18282       
  2 18282         if låsning > 0 then
  2 18283           <* låsning 1 : *>  lock(takeexternal,coru_term,mon,1); <* centrallogik *>
  2 18284       
  2 18284         if låsning > 1 then
  2 18285           <* låsning 2 : *>  lock(readchar,1,write,2);
  2 18286       
  2 18286         if låsning > 2 then
  2 18287           <* låsning 3 : *>  lock(activate,1,link,1,setposition,1);
  2 18288       
  2 18288       
  2 18288       
  2 18288       
  2 18288         if låsning > 0 then
  2 18289         begin
  3 18290           i:= locked(ia);
  3 18291           write(z_io,"nl",2,<:låsning::>,låsning,"nl",1,i,<: segmenter er låst:>);
  3 18292         end;
  2 18293       \f

  2 18293       message sysslut initialisering side 3 - 810406/cl;
  2 18294       
  2 18294       write(z_io,"nl",2,<:initialisering slut:>);
  2 18295       system(2)free core:(i,ra);
  2 18296       write(z_io,"nl",1,<:free core =:>,i,"nl",1);
  2 18297       setposition(z_io,0,0);
  2 18298       write(zbillede,"ff",0,"nl",1,<:initialisering slut :>,<<zddddd>,
  2 18299             systime(5,0,r),".",1,r,"nl",1,<:free core=:>,i,
  2 18300             "nl",1);
  2 18301       errorbits:= 3; <* ok.no warning.yes *>
  2 18302 \f

  2 18302 
  2 18302 algol list.off;
  2 18303 message coroutinemonitor - 40 ;
  2 18304 
  2 18304       if simref <> firstsem then initerror(1, false);
  2 18305       if semref <> firstop - 4 then initerror(2, false);
  2 18306       if coruref <> firstsim then initerror(3, false);
  2 18307       if opref <> optop + 6 then initerror(4, false);
  2 18308       if proccount <> maxprocext -1 then initerror(5, false);
  2 18309       goto takeexternal;
  2 18310 
  2 18310 dump:
  2 18311   op:= op;
  2 18312     \f

  2 18312     message sys trapaktion side 1 - 810521/hko/cl;
  2 18313       trap(finale);
  2 18314       write(zbillede,"ff",1,"nl",1,<:***** coroutine-monitor køer *****:>);
  2 18315       for i:= 4<*readyqueue*>, 8<*idlequeue*>, 12<*timerqueue*> do
  2 18316       begin
  3 18317         k:= 0;
  3 18318         write(zbillede,"nl",2,case i//4 of(<:readyqueue->:>,<:idlequeue ->:>,
  3 18319           <:timerqueue->:>));
  3 18320         iaf:= i;
  3 18321         for iaf:= d.iaf.next while iaf<>i do
  3 18322         begin
  4 18323           ref:= firstcoru + (iaf-firstcoru)//corusize*corusize;
  4 18324           write(zbillede,<: cr:>,<<zdd>,d.ref.coruident//1000);
  4 18325           k:=k+1; if k mod 10 = 0 then write(zbillede,"nl",1,"sp",12);
  4 18326         end;
  3 18327       end;
  2 18328       outchar(zbillede,'nl');
  2 18329     
  2 18329       skriv_opkaldstællere(zbillede);
  2 18330     
  2 18330     
  2 18330     pfilsystem(zbillede);
  2 18331     
  2 18331     \f

  2 18331     message operatør trapaktion1 side 1 - 810521/hko;
  2 18332       write(zbillede,"nl",2,"=",20,<: operatørmodul :>,"=",20,"nl",1);
  2 18333     
  2 18333       write(zbillede,"nl",1,<:betjeningspladsnavne::>,"nl",1);
  2 18334       for i:= 1 step 1 until max_antal_operatører do
  2 18335       begin
  3 18336         laf:= (i-1)*8;
  3 18337         write(zbillede,<<dd>,i,<:: :>,true,6,string bpl_navn(i),
  3 18338           case operatør_auto_include(i) extract 2 + 1 of (
  3 18339           <:EK    :>,<:IN(ÅB):>,<:??    :>,<:IN(ST):>),<:   :>,
  3 18340           terminal_navn.laf,"nl",1);
  3 18341       end;
  2 18342       write(zbillede,"nl",1);
  2 18343     
  2 18343       write(zbillede,"nl",1,<:top-bpl-gruppe: :>,<<d>,top_bpl_gruppe,"nl",1,
  2 18344         <:betjeningspladsgrupper::>,"nl",1);
  2 18345       for i:= 1 step 1 until 127 do
  2 18346       if bpl_navn(i)<>long<::> then
  2 18347       begin
  3 18348         k:= write(zbillede,<<dd >,i,true,6,string bpl_navn(i),<:(:>,<<d>,
  3 18349           bpl_tilst(i,1),<:/:>,bpl_tilst(i,2),<:):>);
  3 18350         write(zbillede,"sp",16-k,<:= :>);
  3 18351         iaf:= i*op_maske_lgd; j:=0;
  3 18352         for k:= 1 step 1 until max_antal_operatører do
  3 18353         begin
  4 18354           if læsbit_ia(bpl_def.iaf,k) then
  4 18355           begin
  5 18356             if j mod 6 = 0 and j > 0 then write(zbillede,"nl",1,"sp",18);
  5 18357             write(zbillede,true,6,string bpl_navn(k));
  5 18358             j:= j+1;
  5 18359           end;
  4 18360         end;
  3 18361         write(zbillede,"nl",1);
  3 18362       end;
  2 18363     
  2 18363       write(zbillede,"nl",1,<:stoptabel::>,"nl",1);
  2 18364       for i:= 1 step 1 until max_antal_operatører do
  2 18365       begin
  3 18366         write(zbillede,<<dd >,i);
  3 18367         for j:= 0 step 1 until 3 do
  3 18368         begin
  4 18369           k:= operatør_stop(i,j);
  4 18370           write(zbillede,if j=0 then <: :> else <:->:>,if k=0 then <:ALLE:>
  4 18371             else string bpl_navn(k));
  4 18372         end;
  3 18373         write(zbillede,<:  (:>,<<d>,ant_i_opkø(i),<:):>,"nl",1);
  3 18374       end;
  2 18375     
  2 18375       skriv_terminal_tab(zbillede);
  2 18376       write(zbillede,"nl",1,<:operatør-maske::>,"nl",1);
  2 18377       outintbits_ia(zbillede,operatørmaske,1,op_maske_lgd//2);
  2 18378       skriv_opk_alarm_tab(zbillede);
  2 18379       skriv_talevejs_tab(zbillede);
  2 18380       skriv_op_spool_buf(zbillede);
  2 18381       skriv_cqf_tabel(zbillede,true);
  2 18382       write(zbillede,"nl",2,"=",20,<: garagemodul :>,"=",20,"nl",1);
  2 18383       
  2 18383       write(zbillede,"nl",1,<:garageterminaler::>,"nl",1);
  2 18384       for i:= 1 step 1 until max_antal_garageterminaler do
  2 18385       begin
  3 18386         laf:= (i-1)*8;
  3 18387         write(zbillede,<<dd>,i,<:: :>, if garage_auto_include(i) then
  3 18388           <:IN,G  :> else <:EK,G  :>,garage_terminal_navn.laf,"nl",1);
  3 18389       end;
  2 18390     \f

  2 18390     message radio trapaktion side 1 - 820301/hko;
  2 18391       write(zbillede,"nl",2,"=",20,<: radiomodul :>,"=",20,"nl",1);
  2 18392       skriv_kanal_tab(zbillede);
  2 18393       skriv_opkaldskø(zbillede);
  2 18394       skriv_radio_linietabel(zbillede);
  2 18395       skriv_radio_områdetabel(zbillede);
  2 18396     
  2 18396     \f

  2 18396     message vogntabel trapaktion side 1 - 810520/cl;
  2 18397     write(zbillede,"nl",2,"=",20,<: vogntabelmodul :>,"=",20,"nl",1);
  2 18398     skriv_vt_variable(zbillede);
  2 18399     p_vogntabel(zbillede);
  2 18400     p_gruppetabel(zbillede);
  2 18401     p_springtabel(zbillede);
  2 18402     \f

  2 18402     message sysslut trapaktion side 1 - 810519/cl;
  2 18403     write(zbillede,"nl",2,"=",20,<: corutinemonitor :>,"=",20,"nl",1);
  2 18404     corutable(zbillede);
  2 18405     write(zbillede,"ff",1,<:***** simple semaphores *****:>,"nl",2,
  2 18406       <: ref værdi prev next:>,"nl",1);
  2 18407     iaf:= firstsim;
  2 18408     repeat
  2 18409       write(zbillede,<<dddd>,iaf,<< -dddd>,d.iaf.simvalue,<< dddd>,
  2 18410         d.iaf(simcoru//2-1),d.iaf.simcoru,"nl",1);
  2 18411       iaf:= iaf + simsize;
  2 18412     until iaf>=simref;
  2 18413     write(zbillede,"ff",1,<:***** chained semaphores *****:>,"nl",2,
  2 18414       <: ref prev.coru next.coru   prev.op   next.op:>,"nl",1);
  2 18415     iaf:= firstsem;
  2 18416     repeat
  2 18417       write(zbillede,<<dddd>,iaf,<<______dddd>,d.iaf(semcoru//2-1),
  2 18418         d.iaf.semcoru,d.iaf(semop//2-1),d.iaf.semop,"nl",1);
  2 18419       iaf:= iaf+semsize;
  2 18420     until iaf>=semref;
  2 18421     write(zbillede,"ff",1,<:***** operations *****:>,"nl",2);
  2 18422     iaf:= firstop;
  2 18423     repeat
  2 18424       skriv_op(zbillede,iaf);
  2 18425       iaf:= iaf+opheadsize+d.iaf.opsize;
  2 18426     until iaf>=optop;
  2 18427     write(zbillede,"ff",1,<:***** message extentions *****:>,"nl",2,
  2 18428       <:  messref messcode   messop:>,"nl",1);
  2 18429     for i:= 1 step 1 until maxmessext do
  2 18430       write(zbillede,<< dddddddd>,messref(i),messcode(i),messop(i),"nl",1);
  2 18431     write(zbillede,"nl",4,<:***** process extentions *****:>,"nl",2,
  2 18432       <:  procref proccode   procop:>,"nl",1);
  2 18433     for i:= 1 step 1 until maxprocext do
  2 18434       write(zbillede,<< dddddddd>,procref(i),proccode(i),procop(i),"nl",1);
  2 18435     
  2 18435 
  2 18435     \f

  2 18435     message sys_finale side 1 - 810428/hko;
  2 18436     
  2 18436     finale:
  2 18437        trap(slut_finale);
  2 18438     <* algol_pause:=algol_pause shift 24 shift (-24); *>
  2 18439        endaction:=0;
  2 18440     \f

  2 18440     message filsystem finale side 1 - 810428/cl;
  2 18441     
  2 18441     <* lukning af zoner *>
  2 18442     write(out,<:lukker filsystem:>); ud;
  2 18443     for i:= 1 step 1 until dbantez+dbantsz+dbanttz do
  2 18444       close(fil(i),true);
  2 18445     \f

  2 18445     message operatør_finale side 1 - 810428/hko;
  2 18446     
  2 18446     goto op_trap2_slut;
  2 18447     
  2 18447       write(out,<:lukker operatører:>); ud;
  2 18448       for k:= 1 step 1 until max_antal_operatører do
  2 18449       begin
  3 18450         close(z_op(k),true);
  3 18451       end;
  2 18452     op_trap2_slut:
  2 18453       k:=k;
  2 18454     
  2 18454     \f

  2 18454     message garage_finale side 1 - 810428/hko;
  2 18455     
  2 18455       write(out,<:lukker garager:>); ud;
  2 18456       for k:= 1 step 1 until max_antal_garageterminaler do
  2 18457       begin
  3 18458         close(z_gar(k),true);
  3 18459       end;
  2 18460     \f

  2 18460     message radio_finale side 1 - 810525/hko;
  2 18461         write(out,<:lukker radio:>); ud;
  2 18462         close(z_fr_in,true);
  2 18463         close(z_fr_out,true);
  2 18464         close(z_rf_in,true);
  2 18465         close(z_rf_out,true);
  2 18466     \f

  2 18466     message sysslut finale side 1 - 810530/cl;
  2 18467     
  2 18467     slut_finale:
  2 18468     
  2 18468     trap(exit_finale);
  2 18469     
  2 18469     outchar(zrl,'em');
  2 18470     close(zrl,true);
  2 18471     
  2 18471     write(zbillede,
  2 18472             "nl",2,<:blocksread=:>,blocksread,
  2 18473             "nl",1,<:blocksout= :>,blocksout,
  2 18474             "nl",1,<:fillæst=   :>,fillæst,
  2 18475             "nl",1,<:filskrevet=:>,filskrevet,
  2 18476             "nl",3,<:********** billede genereret :>,<<zddddd>,
  2 18477       systime(5,0,r),".",1,r,<: **********:>,"nl",1,"em",1);
  2 18478     close(zbillede,true);
  2 18479     monitor(42,zbillede,0,ia);
  2 18480     ia(6):= systime(7,0,0.0);
  2 18481     monitor(44,zbillede,0,ia);
  2 18482     setposition(z_io,0,0);
  2 18483     write(z_io,"nl",3,"sp",10,"*",15,<: busradio afsluttet :>,<<zddddd>,
  2 18484       systime(5,0,r),".",1,r,"sp",1,"*",15,"nl",1,"em",1);
  2 18485     close(z_io,true);
  2 18486     exit_finale: trapmode:= 1 shift 10;
  2 18487 
  2 18487   end;
  1 18488 
  1 18488 
  1 18488 algol list.on;
  1 18489 message programslut;
  1 18490 program_slut:
  1 18491 end
\f


 1.   5514448  4605152  594    0    0
 2.  10123322  3684071  341    0    0
 3.  12326475 16148847  407  362    0
 4.  14864464 15016082  417 1630  721
 5.  12875118 12958772  567 29244  590
 6.   6583910 16231490  568    0    0
 7.  14968945  5223819  616    0    0
 8.  18481 18475 18462 18444 18431 18423 18413 18405 18394 18383
     18376 18363 18349 18340 18332 18318 18306 18297 18287 18271
     18244 18224 18201 18181 18159 18143 18128 18113 18094 18078
     18059 18035 18021 18000 17989 17976 17950 17926 17905 17885
     17877 17872 17840 17823 17810 17799 17788 17771 17757 17740
     17724 17709 17690 17672 17650 17632 17617 17597 17577 17560
     17546 17530 17513 17497 17482 17467 17449 17438 17425 17416
     17396 17383 17371 17356 17345 17325 17307 17295 17274 17250
     17236 17223 17207 17193 17178 17163 17148 17123 17113 17101
     17093 17083 17076 17060 17039 17015 17007 17000 16991 16963
     16904 16874 16861 16833 16805 16778 16740 16711 16684 16626
     16572 16534 16491 16456 16416 16384 16351 16293 16267 16216
     16173 16134 16109 16084 16070 16038 16019 15999 15977 15965
     15953 15935 15917 15903 15888 15866 15840 15823 15805 15797
     15789 15765 15759 15746 15726 15715 15697 15685 15669 15655
     15635 15611 15598 15586 15570 15552 15537 15530 15522 15513
     15486 15471 15451 15438 15430 15421 15402 15391 15377 15365
     15338 15323 15305 15283 15263 15250 15231 15208 15182 15161
     15150 15128 15108 15086 15068 15040 15019 15001 14988 14980
     14973 14958 14939 14932 14915 14895 14875 14861 14836 14821
     14800 14774 14762 14753 14724 14702 14682 14672 14661 14636
     14615 14595 14565 14546 14527 14507 14486 14478 14452 14439
     14422 14403 14377 14358 14341 14314 14294 14272 14255 14235
     14204 14173 14138 14111 14090 14077 14066 14045 14037 14028
     14009 13989 13966 13939 13922 13904 13891 13881 13870 13846
     13822 13803 13773 13760 13727 13692 13677 13656 13644 13618
     13597 13577 13553 13542 13512 13493 13470 13440 13424 13401
     13374 13339 13312 13305 13291 13270 13258 13244 13236 13221
     13207 13200 13193 13186 13178 13145 13130 13110 13097 13079
     13065 13037 13010 12992 12971 12953 12936 12919 12907 12897
     12873 12867 12852 12832 12816 12799 12774 12761 12726 12709
     12692 12669 12653 12641 12623 12596 12585 12577 12554 12535
     12526 12509 12494 12476 12467 12455 12446 12428 12412 12397
     12386 12367 12339 12318 12297 12281 12267 12260 12248 12231
     12201 12182 12167 12148 12134 12103 12079 12069 12056 12041
     12025 12007 11989 11965 11954 11938 11921 11905 11888 11864
     11857 11839 11812 11794 11769 11744 11700 11689 11678 11650
     11617 11587 11560 11518 11491 11470 11457 11449 11441 11431
     11402 11385 11364 11349 11329 11306 11284 11260 11232 11210
     11193 11168 11151 11136 11112 11097 11077 11058 11023 10995
     10973 10951 10938 10911 10886 10871 10850 10830 10809 10785
     10772 10751 10722 10687 10649 10613 10570 10555 10548 10540
     10532 10511 10485 10467 10453 10432 10417 10401 10394 10384
     10373 10357 10349 10340 10324 10296 10270 10259 10205 10168
     10130 10066 10042 10028 10008  9992  9979  9960  9945  9932
      9915  9903  9885  9860  9844  9820  9790  9773  9755  9747
      9738  9707  9687  9670  9653  9629  9604  9582  9569  9556
      9542  9521  9513  9504  9486  9468  9455  9433  9424  9406
      9398  9386  9361  9344  9322  9305  9284  9267  9252  9229
      9222  9196  9176  9158  9144  9133  9105  9087  9080  9056
      9043  9032  9008  8991  8975  8963  8935  8919  8914  8894
      8888  8881  8868  8854  8840  8824  8810  8799  8779  8770
      8760  8735  8720  8713  8699  8683  8669  8659  8645  8629
      8617  8579  8570  8544  8533  8519  8493  8473  8453  8432
      8393  8376  8365  8355  8344  8334  8320  8309  8295  8281
      8273  8253  8246  8235  8224  8209  8200  8192  8173  8161
      8145  8127  8116  8102  8092  8081  8060  8046  8027  8015
      8000  7987  7979  7965  7941  7923  7907  7886  7874  7852
      7837  7821  7808  7794  7779  7738  7714  7680  7654  7631
      7617  7595  7581  7551  7537  7516  7496  7466  7450  7438
      7420  7407  7390  7372  7361  7346  7330  7318  7300  7271
      7249  7229  7206  7183  7166  7150  7127  7110  7092  7055
      7032  7025  7000  6988  6965  6951  6942  6923  6911  6894
      6882  6861  6849  6831  6813  6791  6769  6761  6754  6746
      6720  6694  6675  6655  6637  6621  6609  6589  6580  6563
      6546  6535  6524  6513  6503  6498  6486  6476  6457  6444
      6417  6406  6390  6382  6364  6348  6337  6301  6285  6271
      6239  6219  6211  6196  6187  6163  6149  6138  6126  6114
      6096  6076  6063  6038  6026  5999  5971  5956  5929  5903
      5888  5876  5863  5844  5827  5815  5793  5781  5772  5759
      5746  5723  5694  5677  5662  5638  5613  5602  5588  5570
      5554  5529  5502  5487  5473  5454  5440  5417  5399  5385
      5371  5351  5334  5317  5307  5296  5284  5267  5258  5242
      5225  5213  5203  5186  5173  5158  5140  5128  5113  5095
      5074  5054  5039  5025  5008  4990  4969  4942  4929  4915
      4897  4876  4861  4831  4813  4793  4772  4760  4737  4722
      4707  4685  4662  4638  4621  4585  4562  4547  4539  4531
      4508  4483  4466  4446  4433  4401  4376  4335  4317  4291
      4272  4261  4237  4228  4208  4189  4170  4150  4128  4108
      4090  4073  4049  4016  3978  3955  3926  3882  3842  3790
      3749  3709  3683  3621  3560  3515  3479  3432  3414  3377
      3325  3277  3233  3217  3199  3182  3165  3143  3124  3107
      3084  3041  3023  2988  2949  2923  2889  2863  2832  2801
      2769  2752  2643  2583  2562  2528  2507  2469  2422  2399
      2383  2365  2342  2323  2312  2303  2275  2260  2230  2219
      2194  2173  2158  2134  2108  2081  2068  2047  2029  2016
      1993  1974  1966  1941  1922  1907  1877  1856  1841  1833
      1808  1790  1768  1752  1742  1717  1710  1697  1685  1671
      1655  1642  1634  1624  1593  1577  1545  1506  1475  1443
      1419  1387  1363  1336  1322  1291  1266  1244  1218  1210
      1195  1190  1181  1151  1144  1138  1118  1105  1096  1091
      1068  1053  1019   996   965   937   899   869   848   838
       815   787   775   740   715   677   635   610   541   383
       335   320   289   279   221   206   191   178   159     1
         1     1     1
     14968945  5223819  943 506071 31003
 9.     16   192    16     4 950731 203944 buskom1
         7     0  1989   801 algftnrts
         0     1     0     2 *version
       956   400   956     4 flushout
       956    44   956     4 911004 101112 sendmessage
       957   106   957    12 910308 134214 copyout
       958   244   958    12 890821 163833 getzone6
         0   410     0     0 out
       959   178   959    12 940411 220029 testbit
       962   414   962    18 940411 222629 findfpparam
       965    46   965    18 890821 163814 system
       968   238   968    18 movestring
       968    56   968    18 890821 163907 outdate
       969   124   969    18 isotable
       970   176   969    18 890821 163656 write
       975   310   975   152 intable
       976    34   975   152 890821 163503 read
       980    24   980   340 890821 163714 tofrom
       967   420   965    18 stderror
       982    80   982   340 890821 163740 open
       986   112   986   340 890821 163754 monitor
       983   344   982   340 close
       967   378   965    18 increase
       984    22   982   340 setposition
       974    50   969    18 outchar
       989    76   989   340 890821 163802 systime
         0  1700     0     0 trapmode
       990   302   990   340 trap
       990   112   990   340 890821 163915 initzones
       991   268   991   340 940411 222959 læsbitia
       992    22   992   340 sign
       992    28   992   340 890821 163648 ln
       993   432   993   340 810409 111908 skrivhele
       958   320   958    12 setzone6
      1001    52  1001   340 inrec6
      1001    28  1001   340 890821 163732 changerec6
      1002   228  1002   340 940411 222949 sætbitia
       976    36   975   152 readchar
      1003   348  1003   340 940411 222633 læstegn
      1699     0     0     0 000003 rs proc
      1004   278  1004   340 940411 222636 skrivtegn
      1005   384  1005   340 940411 222639 afsluttext
      1006   394  1006   340 940411 222952 læsbiti
      1007   498  1007   340 940411 222816 systid
      1009    28  1009   340 getnumber
      1009    18  1009   340 890426 134020 putnumber
       969    26   969    18 replacechar
         1   656     0     0 errorbits
      1016    60  1016   342 940411 222943 sætbiti
      1017   354  1017   342 940411 222801 openbs
      1019   228  1019   342 940411 222742 hægttekst
      1001    54  1001   340 outrec6
         0  1704     0     0 alarmcause
      1020   332  1020   342 940411 222745 hægtstring
      1021   254  1021   342 940411 222749 anbringtal
       975   288   975   152 repeatchar
      1022   444  1022   342 940411 223002 intg
      1023   350  1023   342 940411 222739 binærsøg
       992    20   992   340 sgn
      1024   380  1024   342 940411 222646 skrivtext
      1001    56  1001   340 swoprec6
      1028    56  1025   342 passivate
      1025    40  1025   342 890821 163947 activity
      1030    78  1030   350 260479 150000 mon
         1  1043  1030   350 monw2
         1  1039  1030   350 monw0
         1  1041  1030   350 monw1
      1027    56  1025   342 activate
         0  1588     0     0 endaction
      1030   320  1030   350 reflectcore
      1026    50  1025   342 newactivity
      1031   372  1031   358 940327 154135 setcspterm
      1033   428  1033   358 941030 233200 slices
      1037    52  1037   358 890821 163933 lock
      1037   258  1037   358 locked
         0  1612     0     0 blocksread
         0  1642     0     0 blocksout
      1038   162  1038   358 940411 222622 fpparam
         1  1049  1039   358 nl
         1  1047  1039   358 220978 131500 bel
      1040   330  1040   446 940411 222722 ud
      1041   252  1041   446 940411 222656 taltekst
         1  1045  1030   350 monw3
       958   296   958    12 getshare6
       958   398   958    12 setshare6
           70      474 1044  446    0
algol end 1044
*if ok.no
*if warning.yes
*o c
▶EOF◀