|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 992256 (0xf2400) Types: TextFile Names: »buskomudx04 «
└─⟦110021343⟧ Bits:30007476 RC8000 Backup tape fra HT's bus-radio system └─⟦a957ba283⟧ └─⟦this⟧ »buskomudx04 «
*mode 8.no 9.no *buskom1=algol buskom1text list.yes blocks.yes xref.no details, * .8.9 message.yes buskom1text d.1424949.0155 0 1 begin algol list.off; 1 2 1 2 <* variables for claiming (accumulating) basic entities *> 1 3 integer maxsem, maxsemch, maxop, maxcoru, maxmessext, maxprocext, maxnettoop; 1 4 1 4 <* fields defining current position in pools af basic entities 1 5 during initialization *> 1 6 integer array field firstsem, firstsim, firstcoru, firstop, optop; 1 7 1 7 <* variables used as pointers to 'current object' (work variables) *> 1 8 integer messext, procext, timeinterval, testbuffering; 1 9 integer array field timermessage, coru, sem, op, receiver, currevent, 1 10 baseevent, prevevent; 1 11 1 11 <* variables defining the size of basic entities (descriptors) *> 1 12 integer corusize, semsize, simsize, opheadsize; 1 13 integer array clockmess(1:2); 1 14 real array clock(1:3); 1 15 boolean eventqueueempty; 1 16 algol list.on; 1 17 1 17 \f 1 17 message sys_parametererklæringer side 1 - 810127/cl; 1 18 1 18 boolean testbit0 ,testbit1 ,testbit2 ,testbit3 ,testbit4 ,testbit5 , 1 19 testbit6 ,testbit7 ,testbit8 ,testbit9 ,testbit10,testbit11, 1 20 testbit12,testbit13,testbit14,testbit15,testbit16,testbit17, 1 21 testbit18,testbit19,testbit20,testbit21,testbit22,testbit23, 1 22 testbit24,testbit25,testbit26,testbit27,testbit28,testbit29, 1 23 testbit30,testbit31,testbit32,testbit33,testbit34,testbit35, 1 24 testbit36,testbit37,testbit38,testbit39,testbit40,testbit41, 1 25 testbit42,testbit43,testbit44,testbit45,testbit46,testbit47; 1 26 boolean cl_overvåget,out_tw_lp, 1 27 cm_test; 1 28 1 28 integer låsning; 1 29 \f 1 29 message sys_parametererklæringer side 2 - 810310.hko; 1 30 1 30 <* hjælpevariable *> 1 31 1 31 integer i,j,k; 1 32 integer array ia(1:32); 1 33 integer array field iaf,ref; 1 34 1 34 real r; 1 35 real array ra(1:3); 1 36 real array field raf; 1 37 real field rf; 1 38 1 38 long array la(1:2); 1 39 long array field laf; 1 40 1 40 procedure ud; 1 41 begin 2 42 <* 2 43 outchar(out,'nl'); 2 44 if out_tw_lp then setposition(out,0,0); 2 45 *> 2 46 flushout('nl'); 2 47 end; 1 48 \f 1 48 message sys_parametererklæringer side 3 - 810310/hko; 1 49 1 49 <* hovedmodul_parametre *> 1 50 1 50 integer 1 51 sys_mod, 1 52 io_mod, 1 53 op_mod, 1 54 gar_mod, 1 55 rad_mod, 1 56 vt_mod; 1 57 1 57 <* operations_parametre *> 1 58 1 58 integer field 1 59 kilde, 1 60 retur, 1 61 resultat, 1 62 opkode; 1 63 1 63 real field 1 64 tid; 1 65 1 65 integer array field 1 66 data; 1 67 1 67 boolean 1 68 sys_optype, 1 69 io_optype, 1 70 op_optype, 1 71 gar_optype, 1 72 rad_optype, 1 73 vt_optype, 1 74 gen_optype; 1 75 \f 1 75 message sys_parametererklæringer side 4 - 820301/hko,cl; 1 76 1 76 <* trimme-variable *> 1 77 1 77 integer 1 78 max_antal_operatører, 1 79 max_antal_taleveje, 1 80 max_antal_garageterminaler, 1 81 max_antal_garager, 1 82 max_antal_områder, 1 83 max_antal_radiokanaler, 1 84 max_antal_pabx, 1 85 max_antal_kanaler, 1 86 max_antal_mobilopkald, 1 87 min_antal_nødopkald, 1 88 max_antal_grupper, 1 89 max_antal_gruppeopkald, 1 90 max_antal_spring, 1 91 max_antal_busser, 1 92 max_antal_linie_løb, 1 93 max_antal_fejltekster, 1 94 max_linienr, 1 95 op_maske_lgd, 1 96 tv_maske_lgd; 1 97 1 97 integer array 1 98 konsol_navn, 1 99 taleswitch_in_navn, 1 100 taleswitch_out_navn, 1 101 radio_fr_navn, 1 102 radio_rf_navn(1:4), 1 103 alfabet(0:255); 1 104 1 104 integer 1 105 tf_systællere, 1 106 tf_stoptabel, 1 107 tf_bplnavne, 1 108 tf_bpldef, 1 109 tf_alarmlgd; 1 110 \f 1 110 message filparm side 1 - 800529/jg/cl; 1 111 1 111 integer 1 112 fil_op_længde, 1 113 dbantez,dbantsz,dbanttz, 1 114 dbmaxtf, dbmaxsf, dbblokt, 1 115 dbmaxb,dbbidlængde,dbbidmax, 1 116 dbmaxef; 1 117 long array 1 118 dbsnavn, dbtnavn(1:2); 1 119 1 119 message attention parametererklæringer side 1 - 810318/hko; 1 120 1 120 integer 1 121 att_op_længde, 1 122 att_maske_lgd, 1 123 terminal_beskr_længde; 1 124 integer field 1 125 terminal_tilstand, 1 126 terminal_suppl; 1 127 1 127 message io_parametererklæringer side 1 - 820301/hko; 1 128 1 128 message operatør_parametererklæringer side 1 - 810422/hko; 1 129 1 129 integer field 1 130 cqf_bus, cqf_fejl, 1 131 alarm_kmdo, alarm_tilst, alarm_gtilst, alarm_lgd; 1 132 real field 1 133 cqf_ok_tid, cqf_næste_tid, 1 134 alarm_start; 1 135 long field 1 136 cqf_id; 1 137 1 137 integer 1 138 max_cqf, cqf_lgd, 1 139 op_spool_postlgd, 1 140 op_spool_postantal, 1 141 opk_alarm_tab_lgd; 1 142 1 142 1 142 \f 1 142 message procedure radio_parametererklæringer side 1 - 810524/hko; 1 143 1 143 integer 1 144 radio_giveup, 1 145 opkaldskø_postlængde, 1 146 kanal_beskr_længde, 1 147 radio_op_længde, 1 148 radio_pulje_størrelse; 1 149 1 149 1 149 \f 1 149 message vogntabel parametererklæringer side 1 - 810309/cl; 1 150 1 150 integer vt_op_længde, vt_logskift; 1 151 boolean vt_log_aktiv; 1 152 1 152 \f 1 152 1 152 algol list.off; 1 153 message coroutinemonitor - 2 ; 1 154 1 154 maxsem:= maxsemch:= maxop:= maxcoru:= maxnettoop:= 0; 1 155 maxmessext:= maxprocext:= 1; 1 156 corusize:= 20; 1 157 simsize:= 6; 1 158 semsize:= 8; 1 159 opheadsize:= 8; 1 160 testbuffering:= 1; 1 161 timeinterval:= 5; 1 162 algol list.on; 1 163 algol list.on; 1 164 1 164 \f 1 164 message sys_parameterinitialisering side 1 - 810305/hko; 1 165 1 165 copyout; 1 166 1 166 cl_overvåget:= false; 1 167 getzone6(out,ia); 1 168 out_tw_lp:= ia(1) extract 12 = 8 or ia(1) extract 12 = 14; 1 169 1 169 testbit0 :=testbit( 0); 1 170 testbit1 :=testbit( 1); 1 171 testbit2 :=testbit( 2); 1 172 testbit3 :=testbit( 3); 1 173 testbit4 :=testbit( 4); 1 174 testbit5 :=testbit( 5); 1 175 testbit6 :=testbit( 6); 1 176 testbit7 :=testbit( 7); 1 177 testbit8 :=testbit( 8); 1 178 testbit9 :=testbit( 9); 1 179 testbit10:=testbit(10); 1 180 testbit11:=testbit(11); 1 181 testbit12:=testbit(12); 1 182 testbit13:=testbit(13); 1 183 testbit14:=testbit(14); 1 184 testbit15:=testbit(15); 1 185 testbit16:=testbit(16); 1 186 testbit17:=testbit(17); 1 187 testbit18:=testbit(18); 1 188 testbit19:=testbit(19); 1 189 testbit20:=testbit(20); 1 190 testbit21:=testbit(21); 1 191 testbit22:=testbit(22); 1 192 testbit23:=testbit(23); 1 193 \f 1 193 message sys_parameterinitialisering side 2 - 810316/cl; 1 194 1 194 testbit24:=testbit(24); 1 195 testbit25:=testbit(25); 1 196 testbit26:=testbit(26); 1 197 testbit27:=testbit(27); 1 198 testbit28:=testbit(28); 1 199 testbit29:=testbit(29); 1 200 testbit30:=testbit(30); 1 201 testbit31:=testbit(31); 1 202 testbit32:=testbit(32); 1 203 testbit33:=testbit(33); 1 204 testbit34:=testbit(34); 1 205 testbit35:=testbit(35); 1 206 testbit36:=testbit(36); 1 207 testbit37:=testbit(37); 1 208 testbit38:=testbit(38); 1 209 testbit39:=testbit(39); 1 210 testbit40:=testbit(40); 1 211 testbit41:=testbit(41); 1 212 testbit42:=testbit(42); 1 213 testbit43:=testbit(43); 1 214 testbit44:=testbit(44); 1 215 testbit45:=testbit(45); 1 216 testbit46:=testbit(46); 1 217 testbit47:=testbit(47); 1 218 cm_test:= false; 1 219 \f 1 219 message sys_parameterinitialisering side 3 - 810409/cl,hko; 1 220 1 220 timeinterval:=1; <* tidsinterval for cmon's timeoutinspection *> 1 221 1 221 if findfpparam(<:låsning:>,true,ia) > 0 then låsning:= ia(1) 1 222 else låsning:= 0; 1 223 \f 1 223 message sys_parameterinitialisering side 4 - 820301/hko/cl; 1 224 1 224 <* initialisering af hovedmodul_parametre *> 1 225 1 225 i:=0; sys_mod:=i; 1 226 i:=i+1; io_mod:=i; 1 227 i:=i+1; op_mod:=i; 1 228 i:=i+1; gar_mod:=i; 1 229 i:=i+1; rad_mod:=i; 1 230 i:=i+1; vt_mod:=i; 1 231 1 231 <* initialisering af operationstyper *> 1 232 1 232 sys_optype:=false add (1 shift sys_mod); 1 233 io_optype:= false add (1 shift io_mod); 1 234 op_optype:= false add (1 shift op_mod); 1 235 gar_optype:=false add (1 shift gar_mod); 1 236 rad_optype:=false add (1 shift rad_mod); 1 237 vt_optype:= false add (1 shift vt_mod); 1 238 gen_optype:=false add (1 shift 11); 1 239 1 239 <* initialisering af fieldvariable for operationer *> 1 240 1 240 i:=2; kilde:=i; 1 241 i:=i+4; tid:=i; 1 242 i:=i+2; retur:=i; 1 243 i:=i+2; opkode:=i; 1 244 i:=i+2; resultat:=i; 1 245 i:=i+0; data:=i; 1 246 1 246 <* initialisering af trimme-variable *> 1 247 1 247 max_antal_operatører:=28; <* hvis > 32 skal tf_systællere udvides *> 1 248 max_antal_taleveje:=12; 1 249 max_antal_garageterminaler:=3; 1 250 max_antal_garager:=99; 1 251 max_antal_radiokanaler:=16; 1 252 max_antal_pabx:=2; 1 253 max_antal_kanaler:=14; <* 1 pabx + 13 radio *> 1 254 max_antal_områder:=11; <* hvis > 16 skal tf_systællere udvides *> 1 255 max_antal_mobilopkald:=100; 1 256 min_antal_nødopkald:=20; 1 257 max_antal_grupper:=16; 1 258 max_antal_gruppeopkald:=16; 1 259 max_antal_spring:=16; 1 260 max_antal_busser:=2000; 1 261 max_antal_linie_løb:=2000; 1 262 max_antal_fejltekster:=21; 1 263 max_linienr:=999; <*<=999*> 1 264 1 264 op_maske_lgd:= ((1+max_antal_operatører+23)//24)*2; 1 265 tv_maske_lgd:= ((1+max_antal_taleveje+23)//24)*2; 1 266 \f 1 266 message sys_parameterinitialisering side 5 - 880901/cl; 1 267 1 267 <* initialisering af konsol-navn *> 1 268 raf:= 0; 1 269 if findfpparam(<:io:>,false,ia)>0 then 1 270 begin 2 271 for i:= 1 step 1 until 4 do konsol_navn(i):= ia(i); 2 272 end 1 273 else 1 274 system(7,0,konsol_navn); 1 275 <* 1 276 movestring(konsol_navn.raf,1,<:console1:>); 1 277 *> 1 278 1 278 raf:= 0; 1 279 1 279 <* intialiserning af talevejsswitchens navn *> 1 280 1 280 movestring(taleswitch_in_navn.raf,1,<:taleswitchi:>); 1 281 movestring(taleswitch_out_navn.raf,1,<:taleswitch:>); 1 282 1 282 <* initialisering af radiokanalnavne *> 1 283 1 283 movestring(radio_fr_navn.raf,1,<:radiofr:>); 1 284 movestring(radio_rf_navn.raf,1,<:radiorf:>); 1 285 1 285 <* initialisering af 'input'-alfabet *> 1 286 1 286 isotable(alfabet); 1 287 alfabet('esc'):= 8 shift 12 + 'esc'; 1 288 <* for i:='a' step 1 until 'å' do alfabet(i):=alfabet(i)-32; *> 1 289 for i:= 128 step 1 until 255 do alfabet(i):= 0 shift 12 + i; 1 290 intable(alfabet); 1 291 1 291 <* initialsering af tf_systællere *> 1 292 1 292 tf_systællere:= 1024<*tabelfil*> + 8; 1 293 tf_stoptabel := 1024<*tabelfil*> + 5; 1 294 tf_bpl_navne := 1024<*tabelfil*> + 12; 1 295 tf_bpl_def := 1024<*tabelfil*> + 13; 1 296 tf_alarmlgd := 1024<*tabelfil*> + 14; 1 297 1 297 \f 1 297 message filparminit side 1 - 801030/jg; 1 298 1 298 fil_op_længde:= data + 18 <*halvord*>; 1 299 1 299 1 299 dbantez:= 1; 1 300 dbantsz:= 2; 1 301 dbanttz:= 3; <* >=2 aht. samtidig tilgang*> 1 302 dbblokt:= 8; 1 303 dbmaxsf:= 7; 1 304 dbbidlængde:= 3; 1 305 dbbidmax:= 5; 1 306 dbmaxb:= dbmaxsf * dbbidmax; 1 307 dbmaxef:= 12; 1 308 movestring(dbsnavn,1,<:spoolfil:>); 1 309 movestring(dbtnavn,1,<:tabelfil:>); 1 310 if findfpparam(<:tabelfil:>,false,ia)>0 then 1 311 tofrom(dbtnavn,ia,8); 1 312 \f 1 312 message filparminit side 2 - 801030/jg; 1 313 1 313 1 313 <* reserver og check spoolfil og tabelfil *> 1 314 begin integer s,i,funk,f; 2 315 zone z(128,1,stderror); integer array tail(1:10); 2 316 2 316 for f:=1,2 do 2 317 begin 3 318 <*open(z,4,string (case f of(dbsnavn,dbtnavn)),0);*> 3 319 case f of 3 320 begin 4 321 open(z,4,dbsnavn,0); 4 322 open(z,4,dbtnavn,0); 4 323 end; 3 324 for funk:=52<*create*>,8<*reserve*>,42<*lookup*> do 3 325 begin 4 326 s:=monitor(funk,z,i,tail); 4 327 if s<>0 then system(9,funk*100+s, 4 328 case f of(<:<10>spoolfil:>,<:<10>tabelfil:>)); 4 329 end; 3 330 case f of begin 4 331 begin integer antseg; <*spoolfil*> 5 332 antseg:=dbmaxb * dbbidlængde; 5 333 if tail(1) < antseg then 5 334 begin 6 335 tail(1):=antseg; 6 336 s:=monitor(44<*change*>,z,i,tail); 6 337 if s<>0 then 6 338 system(9,44*100+s,<:<10>spoolfil:>); 6 339 end; 5 340 end; 4 341 begin <*tabelfil*> 5 342 dbmaxtf:=tail(10); 5 343 if dbmaxtf<1 or dbmaxtf>1023 then 5 344 system(9,dbmaxtf,<:<10>tabelfil:>); 5 345 end 4 346 end case; 3 347 close(z,false); 3 348 end for; 2 349 end; 1 350 \f 1 350 message attention parameterinitialisering side 1 - 810318/hko; 1 351 1 351 att_op_længde:= 40; 1 352 att_maske_lgd:= 1 353 (1+max_antal_operatører+max_antal_garageterminaler+1+23)//24*2; 1 354 terminal_beskr_længde:=6; 1 355 terminal_tilstand:= 2; 1 356 terminal_suppl:=4; 1 357 1 357 message io_parameterinitialisering side 1 - 810421/hko; 1 358 1 358 1 358 message operatør_parameterinitialisering side 1 - 810422/hko; 1 359 1 359 <* felter i cqf_tabel *> 1 360 cqf_lgd:= 1 361 cqf_næste_tid:= 16; 1 362 cqf_ok_tid := 12; 1 363 cqf_id := 8; 1 364 cqf_fejl := 4; 1 365 cqf_bus := 2; 1 366 1 366 max_cqf:= 64; 1 367 1 367 <* felter i opkaldsalarmtabel *> 1 368 alarm_kmdo := 2; 1 369 alarm_tilst := 4; 1 370 alarm_gtilst:= 6; 1 371 alarm_lgd := 8; 1 372 alarm_start := 12; 1 373 1 373 opk_alarm_tab_lgd:= 12; 1 374 op_spool_postantal:= 16; 1 375 op_spool_postlgd:= 64; 1 376 1 376 1 376 \f 1 376 message procedure radio_parameterinitialisering side 1 - 810601/hko; 1 377 1 377 radio_giveup:= 1 shift 21 + 1 shift 9; 1 378 opkaldskø_postlængde:= 10+op_maske_lgd; 1 379 kanal_beskr_længde:= 12+op_maske_lgd+tv_maske_lgd; 1 380 radio_op_længde:= 30*2; 1 381 radio_pulje_størrelse:= 1+max_antal_taleveje; 1 382 1 382 \f 1 382 message vogntabel parameterinitialisering side 1 - 810309/cl; 1 383 1 383 vt_op_længde:= data + 16; <* halvord *> 1 384 1 384 if findfpparam(<:vtlogskift:>,true,ia) > 0 then 1 385 vt_logskift:= ia(1) else vt_logskift:= -1; 1 386 1 386 vt_log_aktiv:= (vt_logskift >= 0) and (vt_logskift < 240000); 1 387 1 387 1 387 \f 1 387 message filclaim, side 1 - 810202/cl; 1 388 1 388 maxcoru:= maxcoru+6; 1 389 maxsem:= maxsem+2; 1 390 maxsemch:= maxsemch+6; 1 391 \f 1 391 message attention_claiming side 1 - 810318/hko; 1 392 1 392 1 392 maxcoru:=maxcoru+1; 1 393 1 393 max_op:=max_op +1 1 394 +max_antal_operatører 1 395 +max_antal_garageterminaler; 1 396 1 396 max_nettoop:=maxnettoop+(data+att_op_længde) 1 397 *(1+max_antal_operatører 1 398 +max_antal_garageterminaler); 1 399 1 399 max_procext:=max_procext+1; 1 400 1 400 max_sem:= max_sem+1; 1 401 1 401 max_semch:=maxsemch+1; 1 402 1 402 1 402 \f 1 402 message io_claiming side 1 - 810421/hko; 1 403 1 403 max_coru:= max_coru 1 404 + 1 <* hovedmodul io *> 1 405 + 1 <* io kommando *> 1 406 + 1 <* io operatørmeddelelser *> 1 407 + 1 <* io spontane meddelelser *> 1 408 + 1 <* io spoolkorutine *> 1 409 + 1 <* io tællernulstilling *> 1 410 ; 1 411 1 411 max_semch:= max_semch 1 412 + 1 <* cs_io *> 1 413 + 1 <* cs_io_komm *> 1 414 + 1 <* cs_io_fil *> 1 415 + 1 <* cs_io_medd *> 1 416 + 1 <* cs_io_spool *> 1 417 + 1 <* cs_io_nulstil *> 1 418 ; 1 419 1 419 max_sem:= max_sem 1 420 + 1 <* ss_io_spool_fulde *> 1 421 + 1 <* ss_io_spool_tomme *> 1 422 + 1; <* bs_zio_adgang *> 1 423 1 423 max_op:=max_op 1 424 + 1; <* fil-operation *> 1 425 1 425 max_nettoop:=max_nettoop 1 426 + (data+18); <* fil-operation *> 1 427 1 427 \f 1 427 message operatør_claiming side 1 - 810520/hko; 1 428 1 428 max_coru:= max_coru +1 <* h_op *> 1 429 +1 <* alarmur *> 1 430 +1 <* opkaldsalarmer *> 1 431 +1 <* talevejsswitch *> 1 432 +1 <* tv_switch_adm *> 1 433 +1 <* tv_switch_input *> 1 434 +1 <* op_spool *> 1 435 +1 <* op_medd *> 1 436 +1 <* op_cqftest *> 1 437 +max_antal_operatører; 1 438 1 438 max_sem:= 1 <* bs_opk_alarm *> 1 439 +1 <* ss_op_spool_tomme *> 1 440 +1 <* ss_op_spool_fulde *> 1 441 +max_sem; 1 442 1 442 max_semch:= max_semch +1 <* cs_op *> 1 443 +1 <* cs_op_retur *> 1 444 +1 <* cs_opk_alarm_ur *> 1 445 +1 <* cs_opk_alarm_ur_ret *> 1 446 +1 <* cs_opk_alarm *> 1 447 +1 <* cs_talevejsswitch *> 1 448 +1 <* cs_tv_switch_adm *> 1 449 +1 <* cs_tvswitch_adgang *> 1 450 +1 <* cs_tvswitch_input *> 1 451 +1 <* cs_op_iomedd *> 1 452 +1 <* cs_op_spool *> 1 453 +1 <* cs_op_medd *> 1 454 +1 <* cs_cqf *> 1 455 +max_antal_operatører<* cs_operatør *> 1 456 +max_antal_operatører<* cs_op_fil *>; 1 457 1 457 max_op:= max_op + 1 <* talevejsoperation *> 1 458 + 2 <* tv_switch_input *> 1 459 + 1 <* op_iomedd *> 1 460 + 1 <* opk_alarm_ur *> 1 461 + 1 <* op_spool_medd *> 1 462 + 1 <* op_cqftest *> 1 463 + max_antal_operatører; 1 464 1 464 max_netto_op:= filoplængde*max_antal_operatører 1 465 + data+128 <* talevejsoperation *> 1 466 + 2*(data+256) <* tv_switch_input *> 1 467 + 60 <* op_iomedd *> 1 468 + data <* opk_alarm_ur *> 1 469 + data+op_spool_postlgd <* op_spool_med *> 1 470 + 60 <* op_cqftest *> 1 471 + max_netto_op; 1 472 1 472 \f 1 472 message garage_claiming side 1 -810226/hko; 1 473 1 473 max_coru:= max_coru +1 1 474 +max_antal_garageterminaler; 1 475 1 475 max_semch:= max_semch +1 1 476 +max_antal_garageterminaler; 1 477 1 477 \f 1 477 message procedure radio_claiming side 1 - 810526/hko; 1 478 1 478 max_coru:= max_coru 1 479 +1 <* hovedmodul radio *> 1 480 +1 <* opkaldskø_meddelelse *> 1 481 +1 <* radio_adm *> 1 482 +max_antal_taleveje <* radio *> 1 483 +2; <* radio ind/-ud*> 1 484 1 484 max_semch:= max_semch 1 485 +1 <* cs_rad *> 1 486 +max_antal_taleveje <* cs_radio *> 1 487 +1 <* cs_radio_pulje *> 1 488 +1 <* cs_radio_kø *> 1 489 +1 <* cs_radio_medd *> 1 490 +1 <* cs_radio_adm *> 1 491 +2 ; <* cs_radio_ind/-ud *> 1 492 1 492 max_sem:= 1 493 +1 <* bs_mobil_opkald *> 1 494 +1 <* bs_opkaldskø_adgang *> 1 495 +max_antal_kanaler <* ss_radio_aktiver *> 1 496 +max_antal_kanaler <* ss_samtale_nedlagt *> 1 497 +max_antal_taleveje <* bs_talevej_udkoblet *> 1 498 +max_sem; 1 499 1 499 max_op:= 1 500 + radio_pulje_størrelse <* radio_pulje_operationer *> 1 501 + 1 <* radio_medd *> 1 502 + 1 <* radio_adm *> 1 503 + max_antal_taleveje <* operationer for radio *> 1 504 + 2 <* operationer for radio_ind/-ud *> 1 505 + max_op; 1 506 1 506 max_netto_op:= 1 507 + radio_pulje_størrelse * 60 <* radio_pulje_operationer *> 1 508 + data + 6 <* radio_medd *> 1 509 + max_antal_taleveje <* operationer for radio *> 1 510 * (data + radio_op_længde) 1 511 + data + radio_op_længde <* operation for radio_adm *> 1 512 + 2*(data + 64) <* operationer for radio_ind/-ud *> 1 513 + max_netto_op; 1 514 \f 1 514 message vogntabel_claiming side 1 - 810413/cl; 1 515 1 515 maxcoru:= 1 <* coroutine h_vogntabel (hovedmodulcoroutine) *> 1 516 + 1 <* coroutine vt_opdater *> 1 517 + 1 <* coroutine vt_tilstand *> 1 518 + 1 <* coroutine vt_rapport *> 1 519 + 1 <* coroutine vt_gruppe *> 1 520 + 1 <* coroutine vt_spring *> 1 521 + 1 <* coroutine vt_auto *> 1 522 + 1 <* coroutine vt_log *> 1 523 + maxcoru; 1 524 1 524 maxsemch:= 1 <* cs_vt *> 1 525 + 1 <* cs_vt_adgang *> 1 526 + 1 <* cs_vt_logpool *> 1 527 + 1 <* cs_vt_opd *> 1 528 + 1 <* cs_vt_rap *> 1 529 + 1 <* cs_vt_tilst *> 1 530 + 1 <* cs_vtt_auto *> 1 531 + 1 <* cs_vt_grp *> 1 532 + 1 <* cs_vt_spring *> 1 533 + 1 <* cs_vt_log *> 1 534 + 5 <* cs_vt_filretur(coru) *> 1 535 + maxsemch; 1 536 1 536 maxop:= 1 <* vt_op *> 1 537 + 2 <* vt_log_op *> 1 538 + 6 <* vt_fil_op + radop *> 1 539 + maxop; 1 540 1 540 maxnettoop:= vt_op_længde * 3 <* vt_op + vt_log_op *> 1 541 + 5*fil_op_længde 1 542 + (if fil_op_længde>(data+20) then fil_op_længde else (data+20)) 1 543 + maxnettoop; 1 544 1 544 \f 1 544 1 544 algol list.off; 1 545 message coroutinemonitor - 3 ; 1 546 1 546 begin 2 547 2 547 <* work variables - primarily used during initialization *> 2 548 integer array field simref, semref, coruref, opref; 2 549 integer proccount, corucount, messcount, cmi, cmj; 2 550 integer array zoneia(1:20); 2 551 2 551 <* field variables describing the format of basic entities *> 2 552 integer field 2 553 <* chain head *> 2 554 next, prev, 2 555 <* simple semaphore *> 2 556 simvalue, simcoru, 2 557 <* chained semaphore *> 2 558 semop, semcoru, 2 559 <* coroutine *> 2 560 coruop, corutimerchain, corutimer, corupriority, coruident, 2 561 <* operation head *> 2 562 opnext, opsize; 2 563 2 563 \f 2 563 2 563 message coroutinemonitor - 4 ; 2 564 2 564 boolean field 2 565 corutypeset, corutestmask, optype; 2 566 real starttime; 2 567 long corustate; 2 568 2 568 <* field variables used as queue identifiers (addresses) *> 2 569 integer array field current, readyqueue, idlequeue, timerqueue; 2 570 2 570 <* extensions (message- and process- extensions) *> 2 571 integer array messref, messcode, messop (1:maxmessext); 2 572 integer array procref, proccode, procop (1:maxprocext); 2 573 2 573 <* core array used for accessing the core using addresses as field 2 574 variables (as delivered by the monitor functions) 2 575 - descriptor array 'd' in which all basic entities are allocated 2 576 (except for extensions) *> 2 577 integer array core (1:1), d (1:(4 <* readyqueue *> + 2 578 4 <* idlequeue *> + 2 579 4 <* timerqueue *> + 2 580 maxcoru * corusize + 2 581 maxsem * simsize + 2 582 maxsemch * semsize + 2 583 maxop * opheadsize + 2 584 maxnettoop)/2); 2 585 \f 2 585 2 585 message coroutinemonitor - 5 ; 2 586 2 586 2 586 2 586 <*************** initialization procedures ***************> 2 587 2 587 2 587 2 587 procedure initchain (chainref); 2 588 value chainref; 2 589 integer array field chainref; 2 590 begin 3 591 integer array field cref; 3 592 cref:= chainref; 3 593 d.cref.next:= d.cref.prev:= cref; 3 594 end; 2 595 \f 2 595 2 595 message coroutinemonitor - 6 ; 2 596 2 596 2 596 <***** nextsem ***** 2 597 2 597 this procedure allocates and initializes the next simple semaphore in the 2 598 pool of claimed semaphores. 2 599 the procedure returns the identification (the address) of the semaphore to 2 600 be used when calling 'signal', 'wait' and 'inspect'. *> 2 601 2 601 integer procedure nextsem; 2 602 begin 3 603 nextsem:= simref; 3 604 if simref >= firstsem then initerror(1, true); 3 605 initchain(simref + simcoru); 3 606 d.simref.simvalue:= 0; 3 607 simref:= simref + simsize; 3 608 end; 2 609 2 609 2 609 <***** nextsemch ***** 2 610 2 610 this procedure allocates and initializes the next simple semaphore in the 2 611 pool of claimed semaphores. 2 612 the procedure returns the identification (the address) of the semaphore to 2 613 be used when calling 'signalch', 'waitch' and 'inspectch'. *> 2 614 2 614 integer procedure nextsemch; 2 615 begin 3 616 nextsemch:= semref; 3 617 if semref >= firstop-4 then initerror(2, true); 3 618 initchain(semref + semcoru); 3 619 initchain(semref + semop); 3 620 semref:= semref + semsize; 3 621 end; 2 622 \f 2 622 2 622 message coroutinemonitor - 7 ; 2 623 2 623 2 623 <***** nextcoru ***** 2 624 2 624 this procedure initializes the next coroutine description in the pool of 2 625 claimed coroutine descriptions. 2 626 at initialization is defined the priority (an integer value), an identi- 2 627 fication (an integer value 0..8000) and a test pattern (a boolean). *> 2 628 2 628 integer procedure nextcoru(ident, priority, testmask); 2 629 value ident, priority, testmask; 2 630 integer ident, priority; 2 631 boolean testmask; 2 632 begin 3 633 corucount:= corucount + 1; 3 634 if corucount > maxcoru then initerror(3, true); 3 635 nextcoru:= corucount; 3 636 initchain(coruref + next); 3 637 initchain(coruref + corutimerchain); 3 638 initchain(coruref + coruop); 3 639 d.coruref.corupriority:= priority; 3 640 d.coruref.coruident:= ident * 1000 + corucount; 3 641 d.coruref.corutypeset:= false; 3 642 d.coruref.corutimer:= 0; 3 643 d.coruref.corutestmask:= testmask; 3 644 linkprio(coruref, readyqueue); 3 645 current:= coruref; 3 646 coruref:= coruref + corusize; 3 647 end; 2 648 \f 2 648 2 648 message coroutinemonitor - 8 ; 2 649 2 649 2 649 <***** nextop ***** 2 650 2 650 this procedure initializes the next operation in the pool of claimed ope- 2 651 rations (heads and buffers). 2 652 the head is allocated and immediately following the head is allocated 'size' 2 653 halfwords forming the operation buffer. 2 654 the procedure returns an identification of the operation (an address) and 2 655 in case this address is held in a field variable 'op', the buffer area may 2 656 be accessed as: d.op(1), d.op(2), d.op(3) ... *> 2 657 2 657 integer procedure nextop (size); 2 658 value size; 2 659 integer size; 2 660 begin 3 661 nextop:= opref; 3 662 if opref >= optop then initerror(4, true); 3 663 initchain(opref + next); 3 664 d.opref.opsize:= size; 3 665 opref:= opref + size + opheadsize; 3 666 end; 2 667 \f 2 667 2 667 message coroutinemonitor - 9 ; 2 668 2 668 2 668 <***** nextprocext ***** 2 669 2 669 this procedure initializes the next process extension in the series of 2 670 claimed process extensions. 2 671 the process description address is put into the process extension and the 2 672 state of the extension is initialized to be closed. *> 2 673 2 673 integer procedure nextprocext (processref); 2 674 value processref; 2 675 integer processref; 2 676 begin 3 677 proccount:= proccount + 1; 3 678 if proccount >= maxprocext then initerror(5, true); 3 679 nextprocext:= proccount; 3 680 procref(proccount):= processref; 3 681 proccode(proccount):= 1 shift 12; 3 682 end; 2 683 \f 2 683 2 683 message coroutinemonitor - 10 ; 2 684 2 684 2 684 <***** initerror ***** 2 685 2 685 this procedure is activated in case the initialized set of resources does 2 686 not match the claimed set. 2 687 in case more resources are claimed than used, a warning is written, 2 688 in case too few resources are claimed, an error message is written and 2 689 the execution is terminated. *> 2 690 2 690 procedure initerror (resource, exceeded); 2 691 value resource, exceeded; 2 692 integer resource; boolean exceeded; 2 693 begin 3 694 write(out, false add 10, 1, 3 695 if exceeded then <:more :> else <:less :>, 3 696 case resource of ( 3 697 <:simple semaphores:>, 3 698 <:chained semaphores:>, 3 699 <:coroutines:>, 3 700 <:operations:>, 3 701 <:process extensions:>), 3 702 <: initialized than claimed:>, 3 703 false add 10, 1); 3 704 if exceeded then goto dump; 3 705 end; 2 706 2 706 2 706 <***** stackclaim ***** 2 707 2 707 this procedure is used by a coroutine from its first activation to it 2 708 arrives its first waiting point. the procedure is used to claim an addi- 2 709 tional amount of stack space. this must be done because the maximum 2 710 stack space for a coroutine is set to be the max amount used during its 2 711 very first activation. *> 2 712 2 712 2 712 procedure stackclaim (size); 2 713 value size; integer size; 2 714 begin 3 715 boolean array stackspace (1:size); 3 716 end; 2 717 algol list.on; 2 718 2 718 \f 2 718 message sys_erklæringer side 1 - 810406/cl,hko; 2 719 2 719 zone 2 720 zdummy(1,1,stderror), 2 721 zrl(128,1,stderror), 2 722 zbillede(128,1,stderror); 2 723 2 723 real array 2 724 fejltekst(1:max_antal_fejltekster); 2 725 2 725 real 2 726 systællere_nulstillet; 2 727 2 727 integer 2 728 nulstil_systællere, 2 729 top_bpl_gruppe; 2 730 2 730 integer array 2 731 ingen_operatører, alle_operatører(1:(op_maske_lgd//2)), 2 732 ingen_taleveje, alle_taleveje(1:(tv_maske_lgd//2)), 2 733 bpl_def(1:(128*(op_maske_lgd//2))), 2 734 bpl_tilst(0:127,1:2), 2 735 operatør_stop(0:max_antal_operatører,0:3), 2 736 område_id(1:max_antal_områder,1:2), 2 737 pabx_id(1:max_antal_pabx), 2 738 radio_id(1:max_antal_radiokanaler), 2 739 kanal_id(1:max_antal_kanaler), 2 740 opkalds_tællere(1:(max_antal_områder*5)), <* maxantal <= 16 *> 2 741 operatør_tællere(1:(max_antal_operatører*5)); <* maxantal <= 32 *> 2 742 2 742 boolean array 2 743 operatør_auto_include(1:max_antal_operatører), 2 744 garage_auto_include(1:max_antal_garageterminaler); 2 745 2 745 long array 2 746 terminal_navn(1:(2*max_antal_operatører)), 2 747 garage_terminal_navn(1:(2*max_antal_garageterminaler)), 2 748 bpl_navn(0:127), 2 749 område_navn(1:max_antal_områder), 2 750 kanal_navn(1:max_antal_kanaler); 2 751 \f 2 751 message procedure findområde side 1 - 880901/cl; 2 752 2 752 integer procedure find_bpl(navn); 2 753 value navn; 2 754 long navn; 2 755 begin 3 756 integer i; 3 757 3 757 find_bpl:= 0; 3 758 for i:= 0 step 1 until 127 do 3 759 if navn = bpl_navn(i) then find_bpl:= i; 3 760 end; 2 761 2 761 integer procedure findområde(omr); 2 762 value omr; 2 763 integer omr; 2 764 begin 3 765 integer i; 3 766 3 766 if omr = '*' shift 16 then findområde:= -1 else 3 767 begin 4 768 findområde:= 0; 4 769 for i:= 1 step 1 until max_antal_områder do 4 770 if (extend omr) shift 24=område_navn(i) then findområde:= i; 4 771 end; 3 772 end; 2 773 \f 2 773 message procedure tæl_opkald side 1 - 880926/cl; 2 774 2 774 procedure opdater_tf_systællere; 2 775 begin 3 776 integer zi; 3 777 integer array field iaf; 3 778 real field rf; 3 779 3 779 disable begin 4 780 skrivfil(tf_systællere,1,zi); 4 781 rf:= iaf:= 4; 4 782 fil(zi).rf:= systællere_nulstillet; 4 783 fil(zi).iaf(1):= nulstil_systællere; 4 784 iaf:= 32; 4 785 tofrom(fil(zi).iaf,opkalds_tællere,max_antal_områder*10); 4 786 iaf:= 192; 4 787 tofrom(fil(zi).iaf,operatør_tællere,max_antal_operatører*10); 4 788 setposition(fil(zi),0,0); 4 789 end; 3 790 end; 2 791 2 791 procedure tæl_opkald(område,type); 2 792 value område,type; 2 793 integer område,type; 2 794 begin 3 795 increase(opkalds_tællere((område-1)*5+type)); 3 796 disable opdater_tf_systællere; 3 797 end; 2 798 2 798 procedure tæl_opkald_pr_operatør(operatør,type); 2 799 value operatør,type; 2 800 integer operatør,type; 2 801 begin 3 802 increase(operatør_tællere((operatør-1)*5+type)); 3 803 disable opdater_tf_systællere; 3 804 end; 2 805 2 805 procedure skriv_opkaldstællere(z); 2 806 zone z; 2 807 begin 3 808 integer omr,typ,rpc; 3 809 real r; 3 810 3 810 write(z,"nl",2,<:+++++ opkaldstællere +++++:>,"nl",2, 3 811 <:omr ud ind-alm ind-nød ej.forb optaget:>,"nl",1); 3 812 for omr:= 1 step 1 until max_antal_områder do 3 813 begin 4 814 write(z,true,6,string område_navn(omr),":",1); 4 815 for typ:= 1 step 1 until 5 do 4 816 write(z,<< ddddddd>,opkalds_tællere((omr-1)*5+typ)); 4 817 outchar(z,'nl'); 4 818 end; 3 819 3 819 write(z,"nl",1, 3 820 <:oper. ud ind-alm ind-nød ej.forb optaget:>,"nl",1); 3 821 for omr:= 1 step 1 until max_antal_operatører do 3 822 begin 4 823 if bpl_navn(omr)=long<::> then 4 824 write(z,"sp",6-write(z,<:op:>,<<d>,omr),":",1) 4 825 else 4 826 write(z,true,6,string bpl_navn(omr),":",1); 4 827 for typ:= 1 step 1 until 5 do 4 828 write(z,<< ddddddd>,operatør_tællere((omr-1)*5+typ)); 4 829 outchar(z,'nl'); 4 830 end; 3 831 3 831 rpc:= replace_char(1,':'); 3 832 write(z,"nl",1,<:nulstilles :>); 3 833 if nulstil_systællere = (-1) then write(z,<:ikke automatisk:>,"nl",1) 3 834 else write(z,<:automatisk kl. :>,<<zd dd dd>,nulstil_systællere,"nl",1); 3 835 replace_char(1,'.'); 3 836 write(z,<:nulstillet d. :>,<<zd dd dd>, 3 837 systime(4,systællere_nulstillet,r)," ",1); 3 838 replace_char(1,':'); 3 839 write(z,<<zd dd dd>,r,"nl",1); 3 840 replace_char(1,rpc); 3 841 end; 2 842 \f 2 842 message procedure start_operation side 1 - 810521/hko; 2 843 2 843 procedure start_operation(op_ref,kor,ret_sem,kode); 2 844 value kor,ret_sem,kode; 2 845 integer array field op_ref; 2 846 integer kor,ret_sem,kode; 2 847 <* 2 848 op_ref: kald, reference til operation 2 849 2 849 kor: kald, kilde= hovedmodulnr*100 +løbenr 2 850 = korutineident. 2 851 ret_sem: kald, retursemafor 2 852 2 852 kode: kald, suppl shift 12 + operationskode 2 853 2 853 proceduren initialiserer en operations hoved med 2 854 parameterværdierne samt tidfeltet med aktueltid. 2 855 resultatfelt og datafelter nulstilles. 2 856 2 856 *> 2 857 begin 3 858 integer i; 3 859 d.op_ref.kilde:= kor; 3 860 systime(1,0,d.op_ref.tid); 3 861 d.op_ref.retur:=ret_sem; 3 862 d.op_ref.op_kode:=kode; 3 863 d.op_ref.resultat:=0; 3 864 for i:=(d.op_ref.opsize-data)//2 step -1 until 1 do 3 865 d.op_ref.data(i):=0; 3 866 end start_operation; 2 867 \f 2 867 message procedure afslut_operation side 1 - 810331/hko; 2 868 2 868 procedure afslut_operation(op_ref,sem); 2 869 value op_ref,sem; 2 870 integer op_ref,sem; 2 871 begin 3 872 integer array field op; 3 873 op:=op_ref; 3 874 if sem>0 then signal_ch(sem,op,d.op.optype) else 3 875 if sem=-1 then signal_ch(d.op.retur,op,d.op.optype) else 3 876 ; 3 877 end afslut_operation; 2 878 \f 2 878 message procedure fejlreaktion - side 1 - 810424/cl,hko; 2 879 2 879 procedure fejlreaktion(nr,værdi,str,måde); 2 880 value nr,værdi,måde; 2 881 integer nr,værdi,måde; 2 882 string str; 2 883 begin 3 884 disable begin 4 885 write(out,<:<10>!!! :>); 4 886 if nr>0 and nr <=max_antal_fejltekster then 4 887 write(out,string fejltekst(nr)) 4 888 else write(out,<:fejl nr.:>,nr); 4 889 outchar(out,'sp'); 4 890 if måde shift (-12) extract 2=1 then 4 891 outintbits(out,værdi) 4 892 else 4 893 if måde shift (-12) extract 2=2 then 4 894 write(out,<:":>,false add værdi,1,<:":>) 4 895 else 4 896 write(out,værdi); 4 897 write(out,"sp",1,str,"nl",1,<< zddddd>,systime(5,0,r),r, 4 898 <: korutine nr=:>,<<d>, abs curr_coruno, 4 899 <: ident=:>,curr_coruid,"nl",0); 4 900 if testbit27 and måde extract 12=1 then 4 901 trace(1); 4 902 ud; 4 903 end;<*disable*> 3 904 if måde extract 12 =2 then trapmode:=1 shift 13; 3 905 if måde extract 12= 0 then trap(-1) 3 906 else if måde extract 12 = 2 then trap(-2); 3 907 end fejlreaktion; 2 908 2 908 procedure trace(n); 2 909 value n; 2 910 integer n; 2 911 begin 3 912 trap(finis); 3 913 trap(n); 3 914 finis: 3 915 end trace; 2 916 \f 2 916 message procedure overvåget side 1 - 810413/cl; 2 917 2 917 boolean procedure overvåget; 2 918 begin 3 919 disable begin 4 920 integer i,måde; 4 921 integer array field cor; 4 922 integer array ia(1:12); 4 923 4 923 i:= system(12,0,ia); 4 924 if i > 0 then 4 925 begin 5 926 i:= system(12,1,ia); 5 927 måde:= ia(3); 5 928 end 4 929 else måde:= 0; 4 930 4 930 if måde<>0 then 4 931 begin 5 932 cor:= coroutine(abs ia(3)); 5 933 overvåget:= d.cor.corutestmask shift (-11); 5 934 end 4 935 else overvåget:= cl_overvåget; 4 936 end; 3 937 end; 2 938 \f 2 938 message procedure antal_bits_ia side 1 - 940424/cl; 2 939 2 939 integer procedure antal_bits_ia(ia,n,ø); 2 940 value n,ø; 2 941 integer array ia; 2 942 integer n,ø; 2 943 begin 3 944 integer i, ant; 3 945 3 945 ant:= 0; 3 946 for i:= n step 1 until ø do 3 947 if læsbit_ia(ia,i) then ant:= ant+1; 3 948 end; 2 949 2 949 message procedure trunk_til_omr side 1 - 881006/cl; 2 950 2 950 integer procedure trunk_til_omr(trunk); 2 951 value trunk; integer trunk; 2 952 begin 3 953 integer i,j; 3 954 3 954 j:=0; 3 955 for i:= 1 step 1 until max_antal_områder do 3 956 if område_id(i,2) extract 12 = trunk extract 12 then j:=i; 3 957 trunk_til_omr:=j; 3 958 end; 2 959 2 959 integer procedure omr_til_trunk(omr); 2 960 value omr; integer omr; 2 961 begin 3 962 omr_til_trunk:= område_id(omr,2) extract 12; 3 963 end; 2 964 2 964 integer procedure port_til_omr(port); 2 965 value port; integer port; 2 966 begin 3 967 if port shift (-6) extract 6 = 2 then 3 968 port_til_omr:= pabx_id(port extract 6) 3 969 else 3 970 if port shift (-6) extract 6 = 3 then 3 971 port_til_omr:= radio_id(port extract 6) 3 972 else 3 973 port_til_omr:= 0; 3 974 end; 2 975 2 975 integer procedure kanal_til_port(kanal); 2 976 value kanal; integer kanal; 2 977 begin 3 978 kanal_til_port:= kanal_id(kanal) shift (-5) extract 3 shift 6 + 3 979 kanal_id(kanal) extract 5; 3 980 end; 2 981 2 981 integer procedure port_til_kanal(port); 2 982 value port; integer port; 2 983 begin 3 984 integer i,j; 3 985 3 985 j:=0; 3 986 for i:= 1 step 1 until max_antal_kanaler do 3 987 if kanal_id(i) = port shift (-6) shift 5 + port extract 5 then j:=i; 3 988 port_til_kanal:= j; 3 989 end; 2 990 2 990 integer procedure kanal_til_omr(kanal); 2 991 value kanal; integer kanal; 2 992 begin 3 993 kanal_til_omr:= port_til_omr( kanal_til_port(kanal) ); 3 994 end; 2 995 2 995 \f 2 995 message procedure out_xxx_bits side 1 - 810406/cl; 2 996 2 996 procedure outboolbits(zud,b); 2 997 value b; 2 998 zone zud; 2 999 boolean b; 2 1000 begin 3 1001 integer i; 3 1002 3 1002 for i:= -11 step 1 until 0 do 3 1003 outchar(zud,if b shift i then '1' else '.'); 3 1004 end; 2 1005 2 1005 procedure outintbits(zud,j); 2 1006 value j; 2 1007 zone zud; 2 1008 integer j; 2 1009 begin 3 1010 integer i; 3 1011 3 1011 for i:= -23 step 1 until 0 do 3 1012 begin 4 1013 outchar(zud,if j shift i extract 1 = 1 then '1' else '.'); 4 1014 if i<>0 and abs(i) mod 6 = 0 then outchar(zud,'sp'); 4 1015 end; 3 1016 end; 2 1017 2 1017 procedure outintbits_ia(zud,ia,n,ø); 2 1018 value n,ø; 2 1019 zone zud; 2 1020 integer array ia; 2 1021 integer n,ø; 2 1022 begin 3 1023 integer i; 3 1024 3 1024 for i:= n step 1 until ø do 3 1025 begin 4 1026 outintbits(zud,ia(i)); 4 1027 outchar(zud,'nl'); 4 1028 end; 3 1029 end; 2 1030 2 1030 real procedure now; 2 1031 begin 3 1032 real f,r,r1; long l; 3 1033 3 1033 systime(1,0,r); l:=r*100; f:=(l mod 100)/100; 3 1034 systime(4,r,r1); 3 1035 now:= r1+f; 3 1036 end; 2 1037 \f 2 1037 message procedure skriv_id side 1 - 820301/cl; 2 1038 2 1038 procedure skriv_id(z,id,lgd); 2 1039 value id,lgd; 2 1040 integer id,lgd; 2 1041 zone z; 2 1042 begin 3 1043 integer type,p,li,lø,bo; 3 1044 3 1044 type:= id shift (-22); 3 1045 case type+1 of 3 1046 begin 4 1047 <* 1: bus *> 4 1048 begin 5 1049 p:= write(z,<<d>,id extract 14); 5 1050 if id shift (-14) <> 0 then 5 1051 p:= p + write(z,".",1,string bpl_navn(id shift (-14))); 5 1052 end; 4 1053 4 1053 <* 2: linie/løb *> 4 1054 begin 5 1055 li:= id shift (-12) extract 10; 5 1056 bo:= id shift (-7) extract 5; 5 1057 if bo<>0 then bo:= bo + 'A' - 1; 5 1058 lø:= id extract 7; 5 1059 p:= write(z,<<d>,li,false add bo,(bo<>0) extract 1,"/",1,lø); 5 1060 end; 4 1061 4 1061 <* 3: gruppe *> 4 1062 begin 5 1063 if id shift (-21) = 4 <* linie-gruppe *> then 5 1064 begin 6 1065 li:= id shift (-5) extract 10; 6 1066 bo:= id extract 5; 6 1067 if bo<>0 then bo:= bo + 'A' - 1; 6 1068 p:= write(z,<<d>,li,false add bo,(bo<>0) extract 1); 6 1069 end 5 1070 else <* special-gruppe *> 5 1071 p:= write(z,"G",1,<<d>,id extract 7); 5 1072 end; 4 1073 4 1073 <* 4: telefon *> 4 1074 begin 5 1075 bo:= id shift (-20) extract 2; 5 1076 li:= id extract 20; 5 1077 case bo+1 of 5 1078 begin 6 1079 p:= write(z,string kanalnavn(li)); 6 1080 p:= write(z,<:K*:>); 6 1081 p:= write(z,<:OMR :>,string områdenavn(li)); 6 1082 p:= write(z,<:OMR*:>); 6 1083 end; 5 1084 end; 4 1085 end case; 3 1086 write(z,"sp",lgd-p); 3 1087 end skriv_id; 2 1088 <*+3*> 2 1089 \f 2 1089 message skriv_new_sem side 1 - 810520/cl; 2 1090 2 1090 procedure skriv_new_sem(z,type,ref,navn); 2 1091 value type,ref; 2 1092 zone z; 2 1093 integer type,ref; 2 1094 string navn; 2 1095 <* skriver en identifikation af en semafor 'ref' i zonen z. 2 1096 2 1096 type: 1=binær sem 2 1097 2=simpel sem 2 1098 3=kædet sem 2 1099 2 1099 ref: semaforreference 2 1100 2 1100 navn: semafornavn, max 18 tegn 2 1101 *> 2 1102 begin 3 1103 disable if testbit29 then 3 1104 write(z,"nl",1,"sp",26*(type-1),case type of(<:bs:>,<:ss:>,<:cs:>), 3 1105 true,5,<<zddd>,ref,true,19,navn); 3 1106 end; 2 1107 \f 2 1107 message procedure skriv_newactivity side 1 - 810520/hko/cl; 2 1108 2 1108 <**> procedure skriv_newactivity(zud,actno,cause); 2 1109 <**> value actno,cause; 2 1110 <**> zone zud; 2 1111 <**> integer actno,cause; 2 1112 <**> begin 3 1113 <*+2*> 3 1114 <**> if testbit28 then 3 1115 <**> begin integer array field cor; 4 1116 <**> cor:= coroutine(actno); 4 1117 <**> write(zud,<: coroutine::>,<< dd>,actno,<: ident::>, 4 1118 <**> << zdd>,d.cor.coruident//1000); 4 1119 <**> end; 3 1120 <**> if -, testbit23 then goto skriv_newact_slut; 3 1121 <*-2*> 3 1122 <**> write(zud,"nl",1,<:newactivity(:>,<<d>,actno, 3 1123 <**> <:) cause=:>,<<-d>,cause); 3 1124 <**> if cause<1 then write(zud,<: !!!:>); 3 1125 <**> skriv_coru(zud,actno); 3 1126 <**> skriv_newact_slut: 3 1127 <**> end skriv_newactivity; 2 1128 <*-3*> 2 1129 <*+99*> 2 1130 \f 2 1130 message procedure skriv_activity side 1 - 810313/hko; 2 1131 2 1131 <**> procedure skriv_activity(zud,actno); 2 1132 <**> value actno; 2 1133 <**> zone zud; 2 1134 <**> integer actno; 2 1135 <**> begin 3 1136 <**> integer i; 3 1137 <**> integer array iact(1:12); 3 1138 <**> 3 1139 <**> i:=system(12,actno,iact); 3 1140 <**> write(zud,"nl",1,<: activity(:>,<<d>,actno,<:) af :>,i,"sp",1, 3 1141 <**> if i=0 then <:neutral:> else (case sign(iact(3))+2 of 3 1142 <**> (<:disable:>,<:monitor:>,<:activity:>)),<: mode:>); 3 1143 <**> if i>0 and actno>0 and actno<=i then 3 1144 <**> begin 4 1145 <**> write(zud,"nl",1,"sp",4,<:tilstand= :>,case iact(8)+1 of 4 1146 <**> (<:tom:>,<:passivate:>, 4 1147 <**> <:implicit passivate:>,<:activate:>)); 4 1148 <**> if iact(1)<>0 then 4 1149 <**> write(zud,<: ventende på message:>,iact(1)); 4 1150 <**> if iact(7)>0 then 4 1151 <**> write(zud,"nl",1,"sp",4,<:virtuel stak::>,iact(7),"sp",2, 4 1152 <**> <:hovedlager stak benyttes af activity(:>,<<d>, 4 1153 <**> iact(2)); 4 1154 <**> write(zud,"nl",1,"sp",4,<:stak(top,bund,sidst,csr,cza)=:>, 4 1155 <**> iact(4),iact(5),iact(6),iact(10),iact(11)); 4 1156 <**> if iact(9)<> 1 shift 22 then 4 1157 <**> write(zud,"nl",1,"sp",4,<:'head of zonechain'=:>,iact(9)); 4 1158 <**> write(zud,"nl",1,"sp",4,<:'trap chain'=:>,iact(12)); 4 1159 <**> end; 3 1160 <**> end skriv_activity 2 1161 <*-99*> 2 1162 <*+98*> 2 1163 \f 2 1163 message procedure identificer side 1 - 810520/cl; 2 1164 2 1164 procedure identificer(z); 2 1165 zone z; 2 1166 begin 3 1167 disable write(z,<:coroutine::>,<< dd>,curr_coruno, 3 1168 <: ident::>,<< zdd >,curr_coruid); 3 1169 end; 2 1170 \f 2 1170 message procedure skriv_coru side 1 - 810317/cl; 2 1171 2 1171 <**> procedure skriv_coru(zud,cor_no); 2 1172 <**> value cor_no; 2 1173 <**> zone zud; 2 1174 <**> integer cor_no; 2 1175 <**> begin 3 1176 <**> integer i; 3 1177 <**> integer array field cor; 3 1178 <**> 3 1179 <**> 3 1180 <**> write(zud,"nl",1,<: coroutine: :>,<<d>,cor_no); 3 1181 <**> 3 1182 <**> cor:= coroutine(cor_no); 3 1183 <**> if cor = -1 then 3 1184 <**> write(zud,<: eksisterer ikke !!!:>) 3 1185 <**> else 3 1186 <**> begin 4 1187 <**> write(zud,<:; ident = :>,<<zdd>,d.cor.coruident//1000, 4 1188 <**> <: refbyte: :>,<<d>,cor,"nl",1, 4 1189 <**> <: prev: :>,<<dddd>,d.cor.prev,"nl",1, 4 1190 <**> <: next: :>,d.cor.next,"nl",1, 4 1191 <**> <: timerchain.prev: :>,d.cor(corutimerchain//2-1),"nl",1, 4 1192 <**> <: timerchain.next: :>,d.cor.corutimerchain,"nl",1, 4 1193 <**> <: opchain.prev: :>,d.cor(coruop//2-1),"nl",1, 4 1194 <**> <: opchain.next: :>,d.cor.coruop,"nl",1, 4 1195 <**> <: timer: :>,d.cor.corutimer,"nl",1, 4 1196 <**> <: priority: :>,d.cor.corupriority,"nl",1, 4 1197 <**> <: typeset: :>); 4 1198 <**> for i:= -11 step 1 until 0 do 4 1199 <**> write(zud,if d.cor.corutypeset shift i then <:1:> else <:.:>); 4 1200 <**> write(zud,"nl",1,<: testmask: :>); 4 1201 <**> for i:= -11 step 1 until 0 do 4 1202 <**> write(zud,if d.cor.corutestmask shift i then <:1:> else <:.:>); 4 1203 <*+99*> 4 1204 <**> skriv_activity(zud,cor_no); 4 1205 <*-99*> 4 1206 <**> end; 3 1207 <**> end skriv_coru; 2 1208 <*-98*> 2 1209 <*+98*> 2 1210 \f 2 1210 message procedure skriv_op side 1 - 810409/cl; 2 1211 2 1211 <**> procedure skriv_op(zud,opref); 2 1212 <**> value opref; 2 1213 <**> integer opref; 2 1214 <**> zone zud; 2 1215 <**> begin 3 1216 <**> integer array field op; 3 1217 <**> real array field raf; 3 1218 <**> integer lgd,i; 3 1219 <**> real t; 3 1220 <**> 3 1221 <**> raf:= data; 3 1222 <**> op:= opref; 3 1223 <**> write(zud,"nl",1,<:op:>,<<d>,opref,<:::>); 3 1224 <**> if opref<first_op ! optop<=opref then 3 1225 <**> begin 4 1226 <**> write(zud,<: !!! illegal reference !!!:>,"nl",1); 4 1227 <**> goto slut_skriv_op; 4 1228 <**> end; 3 1229 <**> 3 1230 <**> lgd:= d.op.opsize; 3 1231 <**> write(zud,"nl",1,<<d>, 3 1232 <**> <: opsize :>,d.op.opsize,"nl",1, 3 1233 <**> <: optype :>); 3 1234 <**> for i:= -11 step 1 until 0 do 3 1235 <**> write(zud,if d.op.optype shift i then <:1:> else <:.:>); 3 1236 <**> write(zud,"nl",1,<<d>, 3 1237 <**> <: prev :>,d.op.prev,"nl",1, 3 1238 <**> <: next :>,d.op.next); 3 1239 <**> if lgd=0 then goto slut_skriv_op; 3 1240 <**> write(zud,"nl",1,<<d>, 3 1241 <**> <: kilde :>,d.op.kilde extract 10,"nl",1, 3 1242 <**> <: tid :>,<<zddddd>,systime(4,d.op.tid,t),<:.:>,t,"nl",1,<<d>, 3 1243 <**> <: retur-sem :>,if d.op.retur<>0 then <:cs:> else <:--:>,<<b>, 3 1244 d.op.retur,"nl",1, 3 1245 <**> <: opkode :>,<<b>,d.op.opkode shift (-12),"sp",1,<<d>, 3 1246 <**> d.op.opkode extract 12,"nl",1, 3 1247 <**> <: resultat :>,d.op.resultat,"nl",2, 3 1248 <**> <:data::>); 3 1249 <**> skriv_hele(zud,d.op.raf,lgd-data,1278); 3 1250 <**>slut_skriv_op: 3 1251 <**> end skriv_op; 2 1252 <*-98*> 2 1253 \f 2 1253 message procedure corutable side 1 - 810406/cl; 2 1254 2 1254 procedure corutable(zud); 2 1255 zone zud; 2 1256 begin 3 1257 integer i; 3 1258 integer array field cor; 3 1259 3 1259 write(zud,"ff",1,<:***** coroutines *****:>,"nl",2, 3 1260 <:no id ref chain timerch opchain timer pr:>, 3 1261 <: typeset testmask:>,"nl",2); 3 1262 for i:= 1 step 1 until maxcoru do 3 1263 begin 4 1264 cor:= coroutine(i); 4 1265 write(zud,<<zd>,i,<< zdd>,d.cor.coruident//1000,<< dddd>,cor, 4 1266 d.cor.prev,d.cor.next,d.cor(corutimerchain//2-1), 4 1267 d.cor.corutimerchain,d.cor(coruop//2-1),d.cor.coruop,<< ddddd>, 4 1268 d.cor.corutimer,<< dd>,d.cor.corupriority); 4 1269 outchar(zud,'sp'); 4 1270 outboolbits(zud,d.cor.corutypeset); 4 1271 outchar(zud,'sp'); 4 1272 outboolbits(zud,d.cor.corutestmask); 4 1273 outchar(zud,'nl'); 4 1274 end; 3 1275 end; 2 1276 \f 2 1276 message filglobal side 1 - 790302/jg; 2 1277 2 1277 integer 2 1278 dbantsf,dbkatsfri, 2 1279 dbantb,dbkatbfri, 2 1280 dbantef,dbkatefri, 2 1281 dbsidstesz,dbsidstetz, 2 1282 dbsegmax, 2 1283 filskrevet,fillæst; 2 1284 integer 2 1285 bs_kats_fri, bs_kate_fri, 2 1286 cs_opret_fil, cs_tilknyt_fil, 2 1287 cs_frigiv_fil, cs_slet_fil, 2 1288 cs_opret_spoolfil, cs_opret_eksternfil; 2 1289 integer array 2 1290 dbkatt(1:dbmaxtf,1:2), 2 1291 dbkats(1:dbmaxsf,1:2), 2 1292 dbkate(1:dbmaxef,1:6), 2 1293 dbkatz(1:dbantez+dbantsz+dbanttz,1:2); 2 1294 boolean array 2 1295 dbkatb(1:dbmaxb); 2 1296 zone array 2 1297 fil(dbantez+dbantsz+dbanttz,128,1,stderror); 2 1298 \f 2 1298 message hentfildim side 1 - 781120/jg; 2 1299 2 1299 2 1299 integer procedure hentfildim(fdim); 2 1300 integer array fdim; 2 1301 <*inddata filref i fdim(4),uddata fdim(1:8)*> 2 1302 2 1302 begin integer ftype,fno,katf,i,s; 3 1303 ftype:=fdim(4) shift (-10); 3 1304 fno:=fdim(4) extract 10; 3 1305 if ftype>3 or ftype=0 or fno=0 then 3 1306 begin s:=1; goto udgang; end; 3 1307 if fno>(case ftype of(dbmaxtf,dbmaxsf,dbmaxef)) then 3 1308 begin s:=1; goto udgang end; <*paramfejl*> 3 1309 katf:=case ftype of(dbkatt(fno,1),dbkats(fno,1),dbkate(fno,1)); 3 1310 if katf extract 9 = 0 then 3 1311 begin s:=2; goto udgang end; <*tom indgang*> 3 1312 3 1312 fdim(1):=katf shift (-9); <*post antal*> 3 1313 fdim(2):=katf extract 9; <*post længde*> 3 1314 fdim(3):=case ftype of( <*seg antal*> 3 1315 dbkatt(fno,2) extract 18 - (if fno=1 then dbblokt else dbkatt(fno-1,2) 3 1316 extract 18), dbkats(fno,2) shift (-12) extract 6 * dbbidlængde, 3 1317 dbkate(fno,2) extract 18); 3 1318 for i:=5 step 1 until 8 do <*externt filnavn*> 3 1319 fdim(i):=if ftype=3 then dbkate(fno,i-2) else 0; 3 1320 s:=0; 3 1321 udgang: 3 1322 hentfildim:=s; 3 1323 <*+2*> 3 1324 <*tz*> if testbit24 and overvåget then <*zt*> 3 1325 <*tz*> begin <*zt*> 4 1326 <*tz*> write(out,<:<10>hentfildim::>,s,<: :>); <*zt*> 4 1327 <*tz*> pfdim(fdim); <*zt*> 4 1328 <*tz*> ud; <*zt*> 4 1329 <*tz*> end; <*zt*> 3 1330 <*-2*> 3 1331 end hentfildim; 2 1332 \f 2 1332 message sætfildim side 1 - 780916/jg; 2 1333 2 1333 integer procedure sætfildim(fdim); 2 1334 integer array fdim; 2 1335 <*inddata fdim(1:4), segant ingen effekt for tabel- og spoolfil*> 2 1336 2 1336 begin 3 1337 integer ftype,fno,katf,s,pl; 3 1338 integer array gdim(1:8); 3 1339 gdim(4):=fdim(4); 3 1340 s:=hentfildim(gdim); 3 1341 if s>0 then 3 1342 goto udgang; 3 1343 fno:=fdim(4) extract 10; 3 1344 ftype:=fdim(4) shift (-10); 3 1345 pl:= fdim(2) extract 12; 3 1346 if fdim(1)<0 or pl<1 or pl>256 or fdim(3)<0 then 3 1347 begin 4 1348 s:=1; <*parameter fejl*> 4 1349 goto udgang 4 1350 end; 3 1351 if fdim(1)>256//pl*fdim(3) then 3 1352 begin 4 1353 s:=1; 4 1354 goto udgang; 4 1355 end; 3 1356 3 1356 <*segant*> 3 1357 if ftype=3 then 3 1358 begin integer segant; 4 1359 segant:= fdim(3); 4 1360 if segant > dbsegmax then 4 1361 begin 5 1362 s:=4; <*ingen plads*> 5 1363 goto udgang 5 1364 end; 4 1365 \f 4 1365 message sætfildim side 2 - 780916/jg; 4 1366 4 1366 4 1366 if segant<>gdim(3) then 4 1367 begin integer i,z,s; array field enavn; integer array tail(1:10); 5 1368 z:=dbkate(fno,2) shift (-19); if z>0 then begin 6 1369 if dbkatz(z,1) extract 12=fdim(4) then <*zone tilknyttet*> 6 1370 begin integer array zd(1:20); 7 1371 getzone6(fil(z),zd); 7 1372 if zd(13)>5 and zd(9)>=segant then 7 1373 begin <*dødt segment skal ikke udskrives*> 8 1374 zd(13):=5; 8 1375 setzone6(fil(z),zd) 8 1376 end 7 1377 end end; 5 1378 \f 5 1378 message sætfildim side 3 - 801031/jg; 5 1379 5 1379 5 1379 enavn:=8; <*ændr fil størrelse*> 5 1380 i:=1; 5 1381 open(zdummy,0,string gdim.enavn(increase(i)),0); 5 1382 s:=monitor(42,zdummy,0,tail); <*lookup*> 5 1383 if s>0 then 5 1384 fejlreaktion(1,s,<:lookup entry:>,0); 5 1385 tail(1):=segant; 5 1386 s:=monitor(44,zdummy,0,tail); <*change entry*> 5 1387 close(zdummy,false); 5 1388 if s<>0 then 5 1389 begin 6 1390 if s=6 then 6 1391 begin <*ingen plads*> 7 1392 s:=4; goto udgang 7 1393 end 6 1394 else fejlreaktion(1,s,<:change entry:>,0); 6 1395 end; 5 1396 dbkate(fno,2):=dbkate(fno,2) shift (-18) shift (18) 5 1397 add segant; 5 1398 \f 5 1398 message sætfildim side 4 - 801013/jg; 5 1399 5 1399 5 1399 end; 4 1400 fdim(3):=segant 4 1401 end 3 1402 else 3 1403 if fdim(3)>gdim(3) then 3 1404 begin 4 1405 s:=4; <*altid ingen plads*> 4 1406 goto udgang 4 1407 end 3 1408 else fdim(3):=gdim(3); <*samme længde*> 3 1409 <*postantal,postlængde*> 3 1410 katf:=fdim(1) shift 9 add pl; 3 1411 case ftype of begin 4 1412 dbkatt(fno,1):=katf; 4 1413 dbkats(fno,1):=katf; 4 1414 dbkate(fno,1):=katf end; 3 1415 udgang: 3 1416 sætfildim:=s; 3 1417 <*+2*> 3 1418 <*tz*> if testbit24 and overvåget then <*zt*> 3 1419 <*tz*> begin integer i; <*zt*> 4 1420 <*tz*> write(out,<:<10>sætfildim::>,s,<: :>); <*zt*> 4 1421 <*tz*> for i:=1 step 1 until 3 do gdim(i):=fdim(i); <*zt*> 4 1422 <*tz*> pfdim(gdim); <*zt*> 4 1423 <*tz*> ud; <*zt*> 4 1424 <*tz*> end; <*zt*> 3 1425 <*-2*> 3 1426 end sætfildim; 2 1427 \f 2 1427 message findfilenavn side 1 - 780916/jg; 2 1428 2 1428 integer procedure findfilenavn(navn); 2 1429 real array navn; 2 1430 2 1430 begin 3 1431 integer fno; array field enavn; 3 1432 for fno:=1 step 1 until dbmaxef do 3 1433 if dbkate(fno,1) extract 9>0 then <*optaget indgang*> 3 1434 begin 4 1435 enavn:=fno*12+4; 4 1436 if navn(1)=dbkate.enavn(1) and 4 1437 navn(2)=dbkate.enavn(2) then 4 1438 begin 5 1439 findfilenavn:=fno; 5 1440 goto udgang 5 1441 end 4 1442 end; 3 1443 findfilenavn:=0; 3 1444 udgang: 3 1445 end findfilenavn; 2 1446 \f 2 1446 message læsfil side 1 - 781120/jg; 2 1447 2 1447 integer procedure læsfil(filref,postindex,zoneno); 2 1448 value filref,postindex; 2 1449 integer filref,postindex,zoneno; 2 1450 <*+2*> 2 1451 <*tz*> begin integer i,o,s; <*zt*> 3 1452 <*tz*> i:=fillæst;o:=filskrevet; s:= <*zt*> 3 1453 <*-2*> 3 1454 3 1454 læsfil:=tilgangfil(filref,postindex,zoneno,5); 3 1455 3 1455 <*+2*> 3 1456 <*tz*> if testbit24 and overvåget then <*zt*> 3 1457 <*tz*> begin <*zt*> 4 1458 <*tz*> write(out,<:<10>læsfil::>,s,filref,postindex,zoneno, <*zt*> 4 1459 <*tz*> <: io::>,fillæst-i,filskrevet-o);ud; <*zt*> 4 1460 <*tz*> end; <*zt*> 3 1461 <*tz*> end procedure; <*zt*> 2 1462 <*-2*> 2 1463 \f 2 1463 message skrivfil side 1 - 781120/jg; 2 1464 2 1464 integer procedure skrivfil(filref,postindex,zoneno); 2 1465 value filref,postindex; 2 1466 integer filref,postindex,zoneno; 2 1467 <*+2*> 2 1468 <*tz*> begin integer i,o,s; <*zt*> 3 1469 <*tz*> i:=fillæst;o:=filskrevet; s:= <*zt*> 3 1470 <*-2*> 3 1471 3 1471 skrivfil:=tilgangfil(filref,postindex,zoneno,6); 3 1472 3 1472 <*+2*> 3 1473 <*tz*> if testbit24 and overvåget then <*zt*> 3 1474 <*tz*> begin <*zt*> 4 1475 <*tz*> write(out,<:<10>skrivfil::>,s,filref,postindex,zoneno, <*zt*> 4 1476 <*tz*> <: io::>,fillæst-i,filskrevet-o);ud; <*zt*> 4 1477 <*tz*> end; <*zt*> 3 1478 <*tz*> end procedure; <*zt*> 2 1479 <*-2*> 2 1480 \f 2 1480 message modiffil side 1 - 781120/jg; 2 1481 2 1481 integer procedure modiffil(filref,postindex,zoneno); 2 1482 value filref,postindex; 2 1483 integer filref,postindex,zoneno; 2 1484 <*+2*> 2 1485 <*tz*> begin integer i,o,s; <*zt*> 3 1486 <*tz*> i:=fillæst;o:=filskrevet; s:= <*zt*> 3 1487 <*-2*> 3 1488 3 1488 modiffil:=tilgangfil(filref,postindex,zoneno,7); 3 1489 3 1489 <*+2*> 3 1490 <*tz*> if testbit24 and overvåget then <*zt*> 3 1491 <*tz*> begin <*zt*> 4 1492 <*tz*> write(out,<:<10>modiffil::>,s,filref,postindex,zoneno, <*zt*> 4 1493 <*tz*> <: io::>,fillæst-i,filskrevet-o);ud; <*zt*> 4 1494 <*tz*> end; <*zt*> 3 1495 <*tz*> end procedure; <*zt*> 2 1496 <*-2*> 2 1497 \f 2 1497 message tilgangfil side 1 - 781003/jg; 2 1498 2 1498 integer procedure tilgangfil(filref,postindex,zoneno,operation); 2 1499 value filref,postindex,operation; 2 1500 integer filref,postindex,zoneno,operation; 2 1501 <*proceduren kaldes fra læsfil,skrivfil og modiffil*> 2 1502 2 1502 begin 3 1503 integer ftype,fno,f,pl,pr,pps,seg,zno,zstate,katf,st; 3 1504 integer array zd(1:20),fdim(1:8); 3 1505 3 1505 3 1505 3 1505 <*hent katalog*> 3 1506 3 1506 fdim(4):=filref; 3 1507 st:=hentfildim(fdim); 3 1508 if st<>0 then 3 1509 goto udgang; <*parameter fejl eller fil findes ikke*> 3 1510 fno:=filref extract 10; 3 1511 ftype:=filref shift (-10); 3 1512 pl:=fdim(2); 3 1513 katf:=case ftype of(dbkatt(fno,2),dbkats(fno,2),dbkate(fno,2)); 3 1514 \f 3 1514 message tilgangfil side 2 - 781003/jg; 3 1515 3 1515 3 1515 3 1515 <*find segment adr og check postindex*> 3 1516 3 1516 pps:=256//pl; <*poster pr segment*> 3 1517 seg:=(postindex-1)//pps; <*relativt segment*> 3 1518 pr:=(postindex-1) mod pps; <*post relativ til seg*> 3 1519 if postindex <1 then 3 1520 begin <*parameter fejl*> 4 1521 st:=1; 4 1522 goto udgang 4 1523 end; 3 1524 if seg>=fdim(3) then 3 1525 begin <*post findes ikke*> 4 1526 st:=3; 4 1527 goto udgang 4 1528 end; 3 1529 case ftype of 3 1530 begin <*find absolut segment*> 4 1531 4 1531 <*tabelfil*> 4 1532 seg:=seg+(if fno=1 then dbblokt else dbkatt(fno-1,2) extract 18); 4 1533 4 1533 begin <*spoolfil*> 5 1534 integer i,bidno; 5 1535 bidno:=katf extract 12; 5 1536 for i:=seg//dbbidlængde step -1 until 1 do 5 1537 bidno:=dbkatb(bidno) extract 12; 5 1538 seg:=(bidno-1)*dbbidlængde+seg mod dbbidlængde 5 1539 end; 4 1540 4 1540 <*extern fil,seg ok*> 4 1541 4 1541 end case find abs seg; 3 1542 \f 3 1542 message tilgangfil side 3 - 801030/jg; 3 1543 3 1543 <*alloker zone*> 3 1544 3 1544 zno:=katf shift(-19); 3 1545 case ftype of begin 4 1546 4 1546 begin <*tabelfil*> 5 1547 integer førstetz; 5 1548 førstetz:=dbkatz(dbsidstetz,2); 5 1549 if zno=0 then 5 1550 zno:=førstetz 5 1551 else if dbkatz(zno,1)<>filref then 5 1552 zno:=førstetz 5 1553 else if zno <> førstetz and zno <> dbsidstetz then 5 1554 begin integer z; 6 1555 for z:=zno,dbkatz(z,2) while dbkatz(z,2)<>zno do; 6 1556 dbkatz(z,2):=dbkatz(zno,2); 6 1557 dbkatz(zno,2):=førstetz; 6 1558 dbkatz(dbsidstetz,2):=zno; 6 1559 end; 5 1560 dbsidstetz:=zno 5 1561 end; 4 1562 \f 4 1562 message tilgangfil side 4 - 801030/jg; 4 1563 4 1563 4 1563 begin <*spoolfil*> 5 1564 integer p,zslut,z; 5 1565 if zno>0 then begin if dbkatz(zno,1) =filref then 6 1566 goto udgangs end; <*strategi 1*> 5 1567 p:=0; 5 1568 zno:=dbsidstesz; <*strategi 4 hvis bedre ikke findes*> 5 1569 zslut:= <*if dbantez>dbantef then 1 else*> dbantez+1; 5 1570 for z:=dbantez+dbantsz step -1 until zslut do 5 1571 begin integer zfref; 6 1572 zfref:=dbkatz(z,1); 6 1573 if zfref extract 10=0 then <*fri zone*> 6 1574 begin <*strategi 2*> 7 1575 zno:=z; 7 1576 goto udgangs 7 1577 end 6 1578 else 6 1579 if zfref shift (-10)=2 then 6 1580 begin <*zone tilknyttet spoolfil*> 7 1581 integer q; 7 1582 q:=dbkatz(z,2); <*prioritet*> 7 1583 if q>p then 7 1584 begin <*strategi 3*> 8 1585 p:=q; 8 1586 zno:=z 8 1587 end 7 1588 end; 6 1589 end z; 5 1590 udgangs: 5 1591 if zno> dbantez then dbsidstesz:=zno; 5 1592 end; 4 1593 \f 4 1593 message tilgangfil side 5 - 780916/jg; 4 1594 4 1594 begin <*extern fil*> 5 1595 integer z; 5 1596 if zno=0 then 5 1597 zno:=1 5 1598 else if dbkatz(zno,1) = filref then 5 1599 goto udgange; <*strategi 1*> 5 1600 for z:=1 step 1 until dbantez do 5 1601 begin integer zfref; 6 1602 zfref:=dbkatz(z,1); 6 1603 if zfref=0 then <*zone fri*> 6 1604 begin zno:=z; goto udgange end <*strategi 2*> 6 1605 else if zfref shift (-10) =2 then <*spoolfil*> 6 1606 zno:=z; <*strategi 3*> <*else strategi 4-5*> 6 1607 end z; 5 1608 udgange: 5 1609 end 4 1610 end case alloker zone; 3 1611 3 1611 3 1611 3 1611 <*åbn zone*> 3 1612 3 1612 if zno<=dbantez then 3 1613 begin <*extern zone;spool og tabel zoner altid åbne*> 4 1614 integer zfref; 4 1615 zfref:=dbkatz(zno,1); 4 1616 if zfref<>0 and zfref<>filref and ftype=3 then 4 1617 begin <*luk hvis ny extern fil*> 5 1618 getzone6(fil(zno),zd); 5 1619 if zd(13)>5 then filskrevet:=filskrevet+1; 5 1620 zfref:=0; 5 1621 close(fil(zno),false); 5 1622 end; 4 1623 if zfref=0 then 4 1624 begin <*åbn zone*> 5 1625 array field enavn; integer i; 5 1626 enavn:=4*2; i:=1; 5 1627 open(fil(zno),4,case ftype-1 of(string dbsnavn(increase(i)), 5 1628 string fdim.enavn(increase(i))),0) 5 1629 end 4 1630 end; 3 1631 \f 3 1631 message tilgangfil side 6 - 780916/jg; 3 1632 3 1632 3 1632 3 1632 <*hent segment og sæt zone descriptor*> 3 1633 3 1633 getzone6(fil(zno),zd); 3 1634 zstate:=zd(13); 3 1635 if zstate=0 or zd(9)<>seg then 3 1636 begin <*positioner*> 4 1637 if zstate>5 then 4 1638 filskrevet:=filskrevet+1; 4 1639 setposition(fil(zno),0,seg); 4 1640 if -,(operation=6 and pr=0) then 4 1641 begin <*læs seg medmindre op er skriv første post*> 5 1642 inrec6(fil(zno),512); 5 1643 fillæst:=fillæst+1 5 1644 end; 4 1645 zstate:=operation 4 1646 end 3 1647 else <*zstate:=max(operation,zone state)*> 3 1648 if operation>zstate then 3 1649 zstate:=operation; 3 1650 zd(9):=seg; 3 1651 zd(13):=zstate; 3 1652 zd(16):=pl shift 1; 3 1653 zd(14):=zd(19)+pr*zd(16); 3 1654 setzone6(fil(zno),zd); 3 1655 \f 3 1655 message tilgangfil side 7 - 780916/jg; 3 1656 3 1656 3 1656 3 1656 <*opdater kataloger*> 3 1657 3 1657 katf:=zno shift 19 add (katf extract 19); 3 1658 case ftype of 3 1659 begin 4 1660 dbkatt(fno,2):=katf; 4 1661 dbkats(fno,2):=katf; 4 1662 dbkate(fno,2):=katf 4 1663 end; 3 1664 dbkatz(zno,1):= filref; 3 1665 if ftype=3 then dbkatz(zno,2):=0 else 3 1666 <*if ftype=1 then allerede opd under zoneallokering*> 3 1667 if ftype=2 then dbkatz(zno,2):= <*prioritet spoolfil*> 3 1668 if zstate=5 then (if pr=pps-1 then 2 else 1) 3 1669 else if zstate=6 and pr=pps-1 then 3 else 0; 3 1670 3 1670 3 1670 3 1670 <*udgang*> 3 1671 3 1671 udgang: 3 1672 if st=0 then 3 1673 zoneno:=zno 3 1674 else zoneno:=0; <*fejl*> 3 1675 tilgangfil:=st; 3 1676 end tilgangfil; 2 1677 \f 2 1677 2 1677 message pfilsystem side 1 - 781003/jg; 2 1678 2 1678 procedure pfilparm(z); 2 1679 zone z; 2 1680 write(z,<:<10>dbantez=:>,dbantez,<: dbantsz=:>,dbantsz,<: dbanttz=:>, 2 1681 dbanttz,<:<10>dbmaxtf=:>,dbmaxtf,<: dbblokt=:>,dbblokt,<: dbmaxsf=:>,dbmaxsf, 2 1682 <:<10>dbmaxb=:>,dbmaxb,<: dbbidlængde=:>,dbbidlængde,<: dbbidmax=:>, 2 1683 dbbidmax,<:<10>dbmaxef=:>,dbmaxef); 2 1684 2 1684 procedure pfilglobal(z); 2 1685 zone z; 2 1686 write(z,<:<10>dbantsf=:>,dbantsf,<: dbkatsfri=:>,dbkatsfri, 2 1687 <:<10>dbantb=:>,dbantb,<: dbkatbfri=:>,dbkatbfri, 2 1688 <:<10>dbantef=:>,dbantef,<: dbkatefri=:>,dbkatefri, 2 1689 <:<10>dbsidstesz=:>,dbsidstesz,<: dbsidstetz=:>,dbsidstetz, 2 1690 <:<10>filskrevet=:>,filskrevet,<: fillæst=:>,fillæst, 2 1691 <:<10>dbsnavn=:>,dbsnavn,<: dbtnavn=:>,dbtnavn); 2 1692 2 1692 2 1692 procedure pdbkate(z,i); 2 1693 value i; integer i; 2 1694 zone z; 2 1695 begin integer j; array field navn; 3 1696 navn:=i*12+4; j:=1; 3 1697 write(z,<:<10>dbkate(:>,i,<:)=:>, 3 1698 dbkate(i,1) shift (-9), 3 1699 dbkate(i,1) extract 9, 3 1700 dbkate(i,2) shift (-19), 3 1701 dbkate(i,2) shift (-18) extract 1, 3 1702 dbkate(i,2) extract 18, 3 1703 <: :>,string dbkate.navn(increase(j))); 3 1704 end; 2 1705 \f 2 1705 message pfilsystem side 2 - 781003/jg; 2 1706 2 1706 2 1706 2 1706 procedure pdbkats(z,i); 2 1707 value i; integer i; 2 1708 zone z; 2 1709 write(z,<:<10>dbkats(:>,i,<:)=:>, 2 1710 dbkats(i,1) shift (-9), 2 1711 dbkats(i,1) extract 9, 2 1712 dbkats(i,2) shift (-19), 2 1713 dbkats(i,2) shift (-18) extract 1, 2 1714 dbkats(i,2) shift (-12) extract 6, 2 1715 dbkats(i,2) extract 12); 2 1716 2 1716 procedure pdbkatb(z,i); 2 1717 value i;integer i; 2 1718 zone z; 2 1719 write(z,<:<10>dbkatb(:>,i,<:)=:>, 2 1720 dbkatb(i) extract 12); 2 1721 2 1721 procedure pdbkatt(z,i); 2 1722 value i; integer i; 2 1723 zone z; 2 1724 write(z,<:<10>dbkatt(:>,i,<:)=:>, 2 1725 dbkatt(i,1) shift (-9), 2 1726 dbkatt(i,1) extract 9, 2 1727 dbkatt(i,2) shift (-19), 2 1728 dbkatt(i,2) shift (-18) extract 1, 2 1729 dbkatt(i,2) extract 18); 2 1730 2 1730 procedure pdbkatz(z,i); 2 1731 value i; integer i; 2 1732 zone z; 2 1733 write(z,<:<10>dbkatz(:>,i,<:)=:>, 2 1734 dbkatz(i,1),dbkatz(i,2)); 2 1735 \f 2 1735 message pfilsystem side 3 - 781003/jg; 2 1736 2 1736 2 1736 2 1736 procedure pfil(z,i); 2 1737 value i; integer i; 2 1738 zone z; 2 1739 begin integer j,k; array field navn; integer array zd(1:20); 3 1740 navn:=2; k:=1; 3 1741 getzone6(fil(i),zd); 3 1742 write(z,<:<10>fil(:>,i,<:)=:>, 3 1743 zd(1) shift (-12),<:+:>,zd(1) extract 12,<: :>, 3 1744 string zd.navn(increase(k))); 3 1745 for j:=6 step 1 until 10 do write(z,zd(j)); 3 1746 write(z,<:<10>:>); 3 1747 for j:=11 step 1 until 20 do write(z,zd(j)); 3 1748 end; 2 1749 2 1749 procedure pfilsystem(z); 2 1750 zone z; 2 1751 begin integer i; 3 1752 3 1752 write(z,<:<12>udskrift af variable i filsystem:>); 3 1753 write(z,<:<10><10>filparm::>); 3 1754 pfilparm(z); 3 1755 write(z,<:<10><10>filglobal::>); 3 1756 pfilglobal(z); 3 1757 write(z,<:<10><10>fil: zone descriptor:>); 3 1758 for i:=1 step 1 until dbantez+dbantsz+dbanttz do pfil(z,i); 3 1759 write(z,<:<10><10>dbkatz: filref ezdis/szprioritet/tzref:>); 3 1760 for i:=1 step 1 until dbantez+dbantsz+dbanttz do pdbkatz(z,i); 3 1761 write(z,<:<10><10>dbkate: pa pl zref dis stot/kateref enavn:>); 3 1762 for i :=1 step 1 until dbmaxef do pdbkate(z,i); 3 1763 write(z,<:<10><10>dbkats: pa pl zref dis bant bref/katsref:>); 3 1764 for i:=1 step 1 until dbmaxsf do pdbkats(z,i); 3 1765 write(z,<:<10><10>dbkatb: katbref:>); 3 1766 for i:=1 step 1 until dbmaxb do pdbkatb(z,i); 3 1767 write(z,<:<10><10>dbkatt: pa pl zref dis stot:>); 3 1768 for i:=1 step 1 until dbmaxtf do pdbkatt(z,i); 3 1769 end pfilsystem; 2 1770 \f 2 1770 message pfilsystem side 4 - 781003/jg; 2 1771 2 1771 2 1771 2 1771 procedure pfdim(fdim); 2 1772 integer array fdim; 2 1773 begin 3 1774 integer i; 3 1775 array field navn; 3 1776 i:=1;navn:=8; 3 1777 write(out,<:fdim::>,fdim(1),fdim(2),fdim(3),fdim(4),<: :>, 3 1778 string fdim.navn(increase(i))); 3 1779 end pfdim; 2 1780 \f 2 1780 message opretfil side 0 - 810529/cl; 2 1781 2 1781 procedure opretfil; 2 1782 <* checker parametre og vidresender operation 2 1783 til opret_spoolfil eller opret_eksternfil *> 2 1784 2 1784 begin 3 1785 integer array field op; 3 1786 integer status,pant,pl,segant,p_nøgle,fno,ftype; 3 1787 3 1787 procedure skriv_opret_fil(z,omfang); 3 1788 value omfang; 3 1789 zone z; 3 1790 integer omfang; 3 1791 begin 4 1792 write(z,"nl",1,<:+++ opret fil :>); 4 1793 if omfang > 0 then 4 1794 disable 4 1795 begin 5 1796 skriv_coru(z,abs curr_coruno); 5 1797 write(z,"nl",1,<<d>, 5 1798 <:op :>,op,"nl",1, 5 1799 <:status :>,status,"nl",1, 5 1800 <:pant :>,pant,"nl",1, 5 1801 <:pl :>,pl,"nl",1, 5 1802 <:segant :>,segant,"nl",1, 5 1803 <:p-nøgle:>,p_nøgle,"nl",1, 5 1804 <:fno :>,fno,"nl",1, 5 1805 <:ftype :>,ftype,"nl",1, 5 1806 <::>); 5 1807 end; 4 1808 end skriv_opret_fil; 3 1809 \f 3 1809 message opretfil side 1 - 810526/cl; 3 1810 3 1810 trap(opretfil_trap); 3 1811 <*+2*> 3 1812 <**> disable if testbit28 then 3 1813 <**> skriv_opret_fil(out,0); 3 1814 <*-2*> 3 1815 3 1815 stack_claim(if cm_test then 200 else 150); 3 1816 3 1816 <*+2*> 3 1817 <**> if testbit28 then write(out,"nl",1,<:+++ opret fil :>); 3 1818 <*-2*> 3 1819 3 1819 trin1: 3 1820 waitch(cs_opret_fil,op,true,-1); 3 1821 3 1821 trin2: <* check parametre *> 3 1822 disable begin 4 1823 4 1823 ftype:= d.op.data(4) shift (-10); 4 1824 fno:= d.op.data(4) extract 10; 4 1825 if ftype<2 or ftype>3 or fno<>0 then 4 1826 begin 5 1827 status:= 1; <*parameterfejl*> 5 1828 goto returner; 5 1829 end; 4 1830 4 1830 pant:= d.op.data(1); 4 1831 pl:= d.op.data(2); 4 1832 segant:= d.op.data(3); 4 1833 p_nøgle:= d.op.opkode shift (-12); 4 1834 if pant<0 or pl<1 or pl>256 or segant<(case ftype-1 of(1,0)) 4 1835 or p_nøgle<>0 and p_nøgle<>2 and p_nøgle<>3 then 4 1836 status:= 1 <*parameterfejl *> 4 1837 else 4 1838 if pant>256//pl*segant then status:= 1 else 4 1839 if segant>(case ftype-1 of(dbbidmax*dbbidlængde,dbsegmax)) then 4 1840 status:= 4 <*ingen plads*> 4 1841 else 4 1842 status:=0; 4 1843 \f 4 1843 message opretfil side 2 - 810526/cl; 4 1844 4 1844 4 1844 returner: 4 1845 4 1845 d.op.data(9):= status; 4 1846 4 1846 <*+2*> 4 1847 <*tz*> if testbit24 and overvåget and status<>0 then <*zt*> 4 1848 <*tz*> begin <*zt*> 5 1849 <*tz*> write(out,<:<10>opretfil::>,status,<: :>); <*zt*> 5 1850 <*tz*> pfdim(d.op.data); <*zt*> 5 1851 <*tz*> write(out,<: op::>,op,d.op.retur); ud; <*zt*> 5 1852 <*tz*> end; <*zt*> 4 1853 <*-2*> 4 1854 4 1854 <*returner eller vidresend operation*> 4 1855 signalch(if status>0 then d.op.retur else 4 1856 case ftype-1 of(cs_opret_spoolfil,cs_opret_eksternfil), 4 1857 op,d.op.optype); 4 1858 end; 3 1859 goto trin1; 3 1860 opretfil_trap: 3 1861 disable skriv_opret_fil(zbillede,1); 3 1862 3 1862 end opretfil; 2 1863 \f 2 1863 message tilknytfil side 0 - 810526/cl; 2 1864 2 1864 procedure tilknytfil; 2 1865 <* tilknytter ekstern fil og returnerer intern filid *> 2 1866 2 1866 begin 3 1867 integer array field op; 3 1868 integer status,i,fno,segant,pa,pl,sliceant,s; 3 1869 array field enavn; 3 1870 integer array tail(1:10); 3 1871 3 1871 procedure skriv_tilknyt_fil(z,omfang); 3 1872 value omfang; 3 1873 zone z; 3 1874 integer omfang; 3 1875 begin 4 1876 write(z,"nl",1,<:+++ tilknyt fil :>); 4 1877 if omfang > 0 then 4 1878 disable 4 1879 begin real array field raf; 5 1880 skriv_coru(z,abs curr_coruno); 5 1881 write(z,"nl",1,<<d>, 5 1882 <:op :>,op,"nl",1, 5 1883 <:status :>,status,"nl",1, 5 1884 <:i :>,i,"nl",1, 5 1885 <:fno :>,fno,"nl",1, 5 1886 <:segant :>,segant,"nl",1, 5 1887 <:pa :>,pa,"nl",1, 5 1888 <:pl :>,pl,"nl",1, 5 1889 <:sliceant:>,sliceant,"nl",1, 5 1890 <:s :>,s,"nl",1, 5 1891 <::>); 5 1892 raf:= 0; 5 1893 write(z,<:tail::>); skriv_hele(z,tail.raf,20,128); 5 1894 write(z,<:ia::>); skriv_hele(z,ia.raf,20,128); 5 1895 end; 4 1896 end skriv_tilknyt_fil; 3 1897 \f 3 1897 message tilknytfil side 1 - 810529/cl; 3 1898 3 1898 stack_claim(if cm_test then 200 else 150); 3 1899 trap(tilknytfil_trap); 3 1900 3 1900 <*+2*> 3 1901 <**> if testbit28 then 3 1902 <**> skriv_tilknyt_fil(out,0); 3 1903 <*-2*> 3 1904 3 1904 trin1: 3 1905 waitch(cs_tilknyt_fil,op,true,-1); 3 1906 3 1906 trin2: 3 1907 wait(bs_kate_fri); 3 1908 3 1908 trin3: 3 1909 disable begin 4 1910 4 1910 <* find ekstern rapportfil *> 4 1911 enavn:= 8; 4 1912 if find_fil_enavn(d.op.data.enavn)>0 then 4 1913 begin 5 1914 status:= 6; <* fil i brug *> 5 1915 goto returner; 5 1916 end; 4 1917 open(zdummy,0,d.op.data.enavn,0); 4 1918 s:= monitor(42)lookup entry:(zdummy,0,tail); 4 1919 if s<>0 then 4 1920 begin 5 1921 if s=3 then status:= 2 <* fil findes ikke *> 5 1922 else if s=6 then status:= 1 <* parameterfejl, navn *> 5 1923 else fejlreaktion(1,s,<:lookup entry:>,0); 5 1924 goto returner; 5 1925 end; 4 1926 if tail(9)<>d.op.data(4) <* contentskey,subno *> then 4 1927 begin 5 1928 status:= 5; <* forkert indhold *> goto returner; 5 1929 end; 4 1930 segant:= tail(1); 4 1931 if segant>db_seg_max then 4 1932 segant:= db_seg_max; 4 1933 pa:= tail(10); 4 1934 pl:= tail(7) extract 12; 4 1935 if pl < 1 or pl > 256 then 4 1936 begin status:= 7; goto returner; end; 4 1937 \f 4 1937 message tilknytfil side 2 - 810529/cl; 4 1938 if pa>256//pl*segant then 4 1939 begin status:= 7; goto returner; end; 4 1940 4 1940 <* reserver *> 4 1941 s:= monitor(52)create area:(zdummy,0,ia); 4 1942 if s<>0 then 4 1943 begin 5 1944 if s=3 then status:= 2 <* fil findes ikke *> 5 1945 else if s=1 <* areaclaims exeeded *> then 5 1946 begin 6 1947 status:= 4; 6 1948 fejlreaktion(1,s,<:create area:>,1); 6 1949 end 5 1950 else fejlreaktion(1,s,<:create area:>,0); 5 1951 goto returner; 5 1952 end; 4 1953 4 1953 s:= monitor(8)reserve:(zdummy,0,ia); 4 1954 if s<>0 then 4 1955 begin 5 1956 if s<3 then status:= 6 <* i brug *> 5 1957 else fejlreaktion(1,s,<:reserve:>,0); 5 1958 monitor(64)remove area:(zdummy,0,ia); 5 1959 goto returner; 5 1960 end; 4 1961 4 1961 tail(7):= 1 shift 12 +pl; <* tilknyttet *> 4 1962 s:= monitor(44)change entry:(zdummy,0,tail); 4 1963 if s<>0 then fejlreaktion(1,s,<:change entry:>,0); 4 1964 4 1964 <* opdater katalog *> 4 1965 dbantef:= dbantef+1; 4 1966 fno:= dbkatefri; 4 1967 dbkatefri:= dbkate(fno,2); 4 1968 dbkate(fno,1):= pa shift 9 add pl; <* postantal,postlængde *> 4 1969 dbkate(fno,2):= segant; 4 1970 for i:= 5 step 1 until 8 do 4 1971 dbkate(fno,i-2):= d.op.data(i); 4 1972 4 1972 <* returparametre *> 4 1973 d.op.data(1):= pa; 4 1974 d.op.data(2):= pl; 4 1975 d.op.data(3):= segant; 4 1976 d.op.data(4):= 3 shift 10 +fno; 4 1977 status:= 0; 4 1978 \f 4 1978 message tilknytfil side 3 - 810526/cl; 4 1979 4 1979 4 1979 returner: 4 1980 close(zdummy,false); 4 1981 d.op.data(9):= status; 4 1982 4 1982 4 1982 <*+2*> 4 1983 <*tz*> if testbit24 and overvåget then <*zt*> 4 1984 <*tz*> begin <*zt*> 5 1985 <*tz*> write(out,<:<10>tilknytfil::>,status,<: :>); <*zt*> 5 1986 <*tz*> pfdim(d.op.data); <*zt*> 5 1987 <*tz*> write(out,<: op::>,op,d.op.retur); ud; <*zt*> 5 1988 <*tz*> end; <*zt*> 4 1989 <*-2*> 4 1990 4 1990 signalch(d.op.retur,op,d.op.optype); 4 1991 if dbantef < dbmaxef then 4 1992 signalbin(bs_kate_fri); 4 1993 end; 3 1994 goto trin1; 3 1995 tilknytfil_trap: 3 1996 disable skriv_tilknyt_fil(zbillede,1); 3 1997 end tilknyt_fil; 2 1998 \f 2 1998 message frigivfil side 0 - 810529/cl; 2 1999 2 1999 procedure frigivfil; 2 2000 <* frigiver en tilknyttet ekstern fil *> 2 2001 2 2001 begin 3 2002 integer array field op; 3 2003 integer status,fref,ftype,fno,s,i,z; 3 2004 array field enavn; 3 2005 integer array tail(1:10); 3 2006 3 2006 procedure skriv_frigiv_fil(zud,omfang); 3 2007 value omfang; 3 2008 zone zud; 3 2009 integer omfang; 3 2010 begin 4 2011 write(zud,"nl",1,<:+++ frigiv fil :>); 4 2012 if omfang > 0 then 4 2013 disable 4 2014 begin real array field raf; 5 2015 skriv_coru(zud,abs curr_coruno); 5 2016 write(zud,"nl",1,<<d>, 5 2017 <:op :>,op,"nl",1, 5 2018 <:status:>,status,"nl",1, 5 2019 <:fref :>,fref,"nl",1, 5 2020 <:ftype :>,ftype,"nl",1, 5 2021 <:fno :>,fno,"nl",1, 5 2022 <:s :>,s,"nl",1, 5 2023 <:i :>,i,"nl",1, 5 2024 <:z :>,z,"nl",1, 5 2025 <::>); 5 2026 raf:= 0; 5 2027 write(zud,<:tail::>); skriv_hele(zud,tail.raf,20,128); 5 2028 end; 4 2029 end skriv_frigiv_fil; 3 2030 \f 3 2030 message frigivfil side 1 - 810526/cl; 3 2031 3 2031 3 2031 stack_claim(if cm_test then 200 else 150); 3 2032 trap(frigivfil_trap); 3 2033 3 2033 <*+2*> 3 2034 <**> disable if testbit28 then 3 2035 <**> skriv_frigiv_fil(out,0); 3 2036 <*-2*> 3 2037 3 2037 trin1: 3 2038 waitch(cs_frigiv_fil,op,true,-1); 3 2039 3 2039 trin2: 3 2040 disable begin 4 2041 4 2041 <* find fil *> 4 2042 fref:= d.op.data(4); 4 2043 ftype:= fref shift (-10); 4 2044 fno:= fref extract 10; 4 2045 if ftype=0 or ftype>3 or fno=0 then 4 2046 begin status:= 1; goto returner; end; 4 2047 if fno>(case ftype of(dbmaxtf,dbmaxsf,dbmaxef)) then 4 2048 begin status:= 1; goto returner; end; 4 2049 if case ftype of(dbkatt(fno,1),dbkats(fno,1),dbkate(fno,1)) 4 2050 extract 9 = 0 then 4 2051 begin 5 2052 status:= 2; <* fil findes ikke *> 5 2053 goto returner; 5 2054 end; 4 2055 if ftype <> 3 then 4 2056 begin status:= 5; goto returner; end; 4 2057 4 2057 <* frigiv evt. tilknyttet zone og areaprocess *> 4 2058 z:= dbkate(fno,2) shift (-19); 4 2059 if z > 0 then 4 2060 begin 5 2061 if dbkatz(z,1)=fref then 5 2062 begin integer array zd(1:20); 6 2063 getzone6(fil(z),zd); 6 2064 if zd(13)>5 then filskrevet:= filskrevet +1; 6 2065 close(fil(z),true); 6 2066 dbkatz(z,1):= 0; 6 2067 end; 5 2068 end; 4 2069 \f 4 2069 message frigivfil side 2 - 810526/cl; 4 2070 4 2070 <* opdater tail *> 4 2071 enavn:= fno*12+4; 4 2072 open(zdummy,0,dbkate.enavn,0); 4 2073 s:= monitor(42)lookup entry:(zdummy,0,tail); 4 2074 if s<>0 then fejlreaktion(1,s,<:lookup entry:>,0); 4 2075 tail(7):= dbkate(fno,1) extract 9; <* ej tilknyttet,postlængde *> 4 2076 tail(10):=dbkate(fno,1) shift (-9);<* postantal *> 4 2077 s:= monitor(44)change entry:(zdummy,0,tail); 4 2078 if s<>0 then fejlreaktion(1,s,<:change entry:>,0); 4 2079 monitor(64)remove process:(zdummy,0,tail); 4 2080 close(zdummy,true); 4 2081 4 2081 <* frigiv indgang *> 4 2082 for i:= 1, 3 step 1 until 6 do 4 2083 dbkate(fno,1):= 0; 4 2084 dbkate(fno,2):= dbkatefri; 4 2085 dbkatefri:= fno; 4 2086 dbantef:= dbantef -1; 4 2087 signalbin(bs_kate_fri); 4 2088 d.op.data(4):= 0; <* filref null *> 4 2089 status:= 0; 4 2090 4 2090 returner: 4 2091 d.op.data(9):= status; 4 2092 <*+2*> 4 2093 <*tz*> if testbit24 and overvåget then <*zt*> 4 2094 <*tz*> begin <*zt*> 5 2095 <*tz*> write(out,<:<10>frigivfil::>,status,<: :>); <*zt*> 5 2096 <*tz*> pfdim(d.op.data); <*zt*> 5 2097 <*tz*> write(out,<: op::>,op,d.op.retur); ud; <*zt*> 5 2098 <*tz*> end; <*zt*> 4 2099 <*-2*> 4 2100 4 2100 signalch(d.op.retur,op,d.op.optype); 4 2101 end; 3 2102 goto trin1; 3 2103 frigiv_fil_trap: 3 2104 disable skriv_frigiv_fil(zbillede,1); 3 2105 end frigivfil; 2 2106 \f 2 2106 message sletfil side 0 - 810526/cl; 2 2107 2 2107 procedure sletfil; 2 2108 <* sletter en spool- eller ekstern fil *> 2 2109 2 2109 begin 3 2110 integer array field op; 3 2111 integer fref,fno,ftype,status; 3 2112 3 2112 procedure skriv_slet_fil(z,omfang); 3 2113 value omfang; 3 2114 zone z; 3 2115 integer omfang; 3 2116 begin 4 2117 write(z,"nl",1,<:+++ slet fil :>); 4 2118 if omfang > 0 then 4 2119 disable 4 2120 begin 5 2121 skriv_coru(z,abs curr_coruno); 5 2122 write(z,"nl",1,<<d>, 5 2123 <:op :>,op,"nl",1, 5 2124 <:fref :>,fref,"nl",1, 5 2125 <:fno :>,fno,"nl",1, 5 2126 <:ftype :>,ftype,"nl",1, 5 2127 <:status:>,status,"nl",1, 5 2128 <::>); 5 2129 end; 4 2130 end skriv_slet_fil; 3 2131 \f 3 2131 message sletfil side 1 - 810526/cl; 3 2132 3 2132 stack_claim(if cm_test then 200 else 150); 3 2133 3 2133 trap(sletfil_trap); 3 2134 <*+2*> 3 2135 <**> disable if testbit28 then 3 2136 <**> skriv_slet_fil(out,0); 3 2137 <*-2*> 3 2138 3 2138 trin1: 3 2139 waitch(cs_slet_fil,op,true,-1); 3 2140 3 2140 trin2: 3 2141 disable begin 4 2142 4 2142 <* find fil *> 4 2143 fref:= d.op.data(4); 4 2144 ftype:= fref shift (-10); 4 2145 fno:= fref extract 10; 4 2146 if ftype=0 or ftype>3 or fno=0 then 4 2147 begin status:= 1; goto returner; end; 4 2148 if fno>(case ftype of(dbmaxtf,dbmaxsf,dbmaxef)) then 4 2149 begin status:= 1; goto returner; end; 4 2150 if case ftype of(dbkatt(fno,1),dbkats(fno,1),dbkate(fno,1)) 4 2151 extract 9 = 0 then 4 2152 begin 5 2153 status:= 2; <* fil findes ikke *> 5 2154 goto returner; 5 2155 end; 4 2156 4 2156 4 2156 <* slet spool- eller ekstern fil *> 4 2157 case ftype of 4 2158 begin 5 2159 5 2159 <* tabelfil - ingen aktion *> 5 2160 ; 5 2161 \f 5 2161 message sletfil side 2 - 810203/cl; 5 2162 5 2162 <* spoolfil *> 5 2163 begin 6 2164 integer z,bidno,bf,bidant,i; 6 2165 6 2165 <* hvis tilknyttet så frigiv *> 6 2166 z:= dbkats(fno,2) shift (-19); 6 2167 if z>0 then 6 2168 begin 7 2169 if dbkatz(z,1)=fref then 7 2170 begin integer array zd(1:20); 8 2171 dbkatz(z,1):= 2 shift 10; 8 2172 getzone6(fil(z),zd); <*annuler evt. udskrivning*> 8 2173 if zd(13)>5 then 8 2174 begin zd(13):= 0; setzone6(fil(z),zd); end; 8 2175 end; 7 2176 end; 6 2177 6 2177 <* frigiv bidder *> 6 2178 bidno:= bf:= dbkats(fno,2) extract 12; <*bid start*> 6 2179 bidant:= dbkats(fno,2) shift (-12) extract 6; 6 2180 for i:= bidant -1 step -1 until 1 do 6 2181 bidno:= dbkatb(bidno) extract 12; 6 2182 dbkatb(bidno):= false add dbkatbfri; 6 2183 dbkatbfri:= bf; 6 2184 dbantb:= dbantb-bidant; 6 2185 6 2185 <* frigiv indgang *> 6 2186 dbkats(fno,1):= 0; 6 2187 dbkats(fno,2):= dbkatsfri; 6 2188 dbkatsfri:= fno; 6 2189 dbantsf:= dbantsf -1; 6 2190 signalbin(bs_kats_fri); 6 2191 end spoolfil; 5 2192 \f 5 2192 message sletfil side 3 - 810203/cl; 5 2193 5 2193 <* extern fil *> 5 2194 begin 6 2195 integer i,s,z; 6 2196 real array field enavn; 6 2197 integer array tail(1:10); 6 2198 6 2198 <* find head and tail *> 6 2199 enavn:= fno*12+4; 6 2200 open(zdummy,0,dbkate.enavn,0); 6 2201 s:= monitor(42)lookup entry:(zdummy,0,tail); 6 2202 if s<>0 then fejlreaktion(1,s,<:lookup entry:>,0); 6 2203 6 2203 <*frigiv evt. tilknyttet zone og areaprocess*> 6 2204 z:=dbkate(fno,2) shift (-19); 6 2205 if z>0 then 6 2206 begin 7 2207 if dbkatz(z,1)=fref then 7 2208 begin integer array zd(1:20); 8 2209 getzone6(fil(z),zd); 8 2210 if zd(13)>5 then <* udskrivning *> 8 2211 begin <*annuler*> 9 2212 zd(13):= 0; 9 2213 setzone6(fil(z),zd); 9 2214 end; 8 2215 close(fil(z),true); 8 2216 dbkatz(z,1):= 0; 8 2217 end; 7 2218 end; 6 2219 6 2219 <* fjern entry *> 6 2220 s:= monitor(48)remove entry:(zdummy,0,tail); 6 2221 if s<>0 then fejlreaktion(1,s,<:remove entry:>,0); 6 2222 close(zdummy,true); 6 2223 6 2223 <* frigiv indgang *> 6 2224 for i:=1, 3 step 1 until 6 do 6 2225 dbkate(fno,i):= 0; 6 2226 dbkate(fno,2):= dbkatefri; 6 2227 dbkatefri:= fno; 6 2228 dbantef:= dbantef -1; 6 2229 signalbin(bs_kate_fri); 6 2230 end eksternfil; 5 2231 5 2231 end ftype; 4 2232 \f 4 2232 message sletfil side 4 - 810526/cl; 4 2233 4 2233 4 2233 status:= 0; 4 2234 if ftype > 1 then 4 2235 d.op.data(4):= 0; <*filref null*> 4 2236 4 2236 returner: 4 2237 d.op.data(9):= status; 4 2238 4 2238 <*+2*> 4 2239 <*tz*> if testbit24 and overvåget then <*zt*> 4 2240 <*tz*> begin <*zt*> 5 2241 <*tz*> write(out,<:<10>sletfil::>,status,<: :>); <*zt*> 5 2242 <*tz*> pfdim(d.op.data); <*zt*> 5 2243 <*tz*> write(out,<: op::>,op,d.op.retur); ud; <*zt*> 5 2244 <*tz*> end; <*zt*> 4 2245 <*-2*> 4 2246 4 2246 signalch(d.op.retur,op,d.op.optype); 4 2247 end; 3 2248 goto trin1; 3 2249 sletfil_trap: 3 2250 disable skriv_slet_fil(zbillede,1); 3 2251 end sletfil; 2 2252 \f 2 2252 message opretspoolfil side 0 - 810526/cl; 2 2253 2 2253 procedure opretspoolfil; 2 2254 <* opretter en spoolfil og returnerer intern filid *> 2 2255 2 2255 begin 3 2256 integer array field op; 3 2257 integer bidantal,fno,i,bs,bidstart; 3 2258 3 2258 procedure skriv_opret_spoolfil(z,omfang); 3 2259 value omfang; 3 2260 zone z; 3 2261 integer omfang; 3 2262 begin 4 2263 write(z,"nl",1,<:+++ opret spoolfil :>); 4 2264 if omfang > 0 then 4 2265 disable 4 2266 begin 5 2267 skriv_coru(z,abs curr_coruno); 5 2268 write(z,"nl",1,<<d>, 5 2269 <:op :>,op,"nl",1, 5 2270 <:bidantal:>,bidantal,"nl",1, 5 2271 <:fno :>,fno,"nl",1, 5 2272 <:i :>,i,"nl",1, 5 2273 <:bs :>,bs,"nl",1, 5 2274 <:bidstart:>,bidstart,"nl",1, 5 2275 <::>); 5 2276 end; 4 2277 end skriv_opret_spoolfil; 3 2278 \f 3 2278 message opretspoolfil side 1 - 810526/cl; 3 2279 3 2279 stack_claim(if cm_test then 200 else 150); 3 2280 3 2280 signalbin(bs_kats_fri); <*initialiseres til åben*> 3 2281 3 2281 trap(opretspool_trap); 3 2282 <*+2*> 3 2283 <**> disable if testbit28 then 3 2284 <**> skriv_opret_spoolfil(out,0); 3 2285 <*-2*> 3 2286 trin1: 3 2287 waitch(cs_opret_spoolfil,op,true,-1); 3 2288 3 2288 trin2: 3 2289 bidantal:= (d.op.data(3)<*segant*> - 1)//dbbidlængde +1; 3 2290 wait(bs_kats_fri); 3 2291 3 2291 trin3: 3 2292 if bidantal>dbmaxb-dbantb then <*ikke plads,vent*> 3 2293 begin 4 2294 wait(bs_kats_fri); 4 2295 goto trin3; 4 2296 end; 3 2297 disable begin 4 2298 4 2298 <*alloker bidder*> 4 2299 bs:= bidstart:= dbkatbfri; 4 2300 for i:= bidantal-1 step -1 until 1 do 4 2301 bs:= dbkatb(bs) extract 12; 4 2302 dbkatbfri:= dbkatb(bs) extract 12; 4 2303 dbkatb(bs):= false; <*sidste ref null*> 4 2304 dbantb:= dbantb+bidantal; 4 2305 4 2305 <*alloker indgang*> 4 2306 fno:= dbkatsfri; 4 2307 dbkatsfri:= dbkats(fno,2); 4 2308 dbantsf:= dbantsf +1; 4 2309 dbkats(fno,1):= d.op.data(1) shift 9 <*postantal*> add 4 2310 d.op.data(2) extract 9; <*postlængde*> 4 2311 dbkats(fno,2):= bidantal shift 12 add bidstart; <*zone null*> 4 2312 \f 4 2312 message opretspoolfil side 2 - 810526/cl; 4 2313 4 2313 <*returner*> 4 2314 d.op.data(3):= bidantal*dbbidlængde; <*segantal*> 4 2315 d.op.data(4):= 2 shift 10 add fno; <*filref*> 4 2316 for i:= 5 step 1 until 8 do <*filnavn null*> 4 2317 d.op.data(i):= 0; 4 2318 d.op.data(9):= 0; <*status ok*> 4 2319 4 2319 <*+2*> 4 2320 <*tz*> if testbit24 and overvåget then <*zt*> 4 2321 <*tz*> begin <*zt*> 5 2322 <*tz*> write(out,<:<10>opretfil::>,0,<: :>); <*zt*> 5 2323 <*tz*> pfdim(d.op.data); <*zt*> 5 2324 <*tz*> write(out,<: op:>,op,d.op.retur); ud; <*zt*> 5 2325 <*tz*> end; <*zt*> 4 2326 <*-2*> 4 2327 4 2327 signalch(d.op.retur,op,d.op.optype); 4 2328 if dbantsf<dbmaxsf then signalbin(bs_kats_fri); 4 2329 end; 3 2330 goto trin1; 3 2331 3 2331 opretspool_trap: 3 2332 disable skriv_opret_spoolfil(zbillede,1); 3 2333 3 2333 end opretspoolfil; 2 2334 \f 2 2334 message opreteksternfil side 0 - 810526/cl; 2 2335 2 2335 procedure opreteksternfil; 2 2336 <* opretter og knytter en ekstern fil *> 2 2337 2 2337 begin 3 2338 integer array field op; 3 2339 integer status,s,i,fno,p_nøgle; 3 2340 integer array tail(1:10),zd(1:20); 3 2341 real r; 3 2342 real array field enavn; 3 2343 3 2343 procedure skriv_opret_ekstfil(z,omfang); 3 2344 value omfang; 3 2345 zone z; 3 2346 integer omfang; 3 2347 begin 4 2348 write(z,"nl",1,<:+++ opret ekstern fil :>); 4 2349 if omfang > 0 then 4 2350 disable 4 2351 begin real array field raf; 5 2352 skriv_coru(z,abs curr_coruno); 5 2353 write(z,"nl",1,<<d>, 5 2354 <:op :>,op,"nl",1, 5 2355 <:status :>,status,"nl",1, 5 2356 <:s :>,s,"nl",1, 5 2357 <:i :>,i,"nl",1, 5 2358 <:fno :>,fno,"nl",1, 5 2359 <:p-nøgle:>,p_nøgle,"nl",1, 5 2360 <::>); 5 2361 raf:= 0; 5 2362 write(z,<:tail::>); skriv_hele(z,tail.raf,20,128); 5 2363 write(z,<:zd::>); skriv_hele(z,zd.raf,40,28); 5 2364 end; 4 2365 end skriv_opret_ekstfil; 3 2366 \f 3 2366 message opreteksternfil side 1 - 810526/cl; 3 2367 3 2367 stack_claim(if cm_test then 200 else 150); 3 2368 3 2368 signalbin(bs_kate_fri); <*initialiseres til åben*> 3 2369 3 2369 trap(opretekst_trap); 3 2370 <*+2*> 3 2371 <**> disable if testbit28 then 3 2372 <**> skriv_opret_ekstfil(out,0); 3 2373 <*-2*> 3 2374 trin1: 3 2375 waitch(cs_opret_eksternfil,op,true,-1); 3 2376 3 2376 trin2: 3 2377 wait(bs_kate_fri); 3 2378 3 2378 trin3: 3 2379 <*opret temporær fil og tilknyt den*> 3 2380 disable begin 4 2381 4 2381 enavn:= 8; 4 2382 <*opret*> 4 2383 open(zdummy,0,d.op.data.enavn,0); 4 2384 tail(1):= d.op.data(3); <*segant*> 4 2385 tail(2):= 1; 4 2386 tail(6):= systime(7,0,r); <*shortclock*> 4 2387 tail(7):= 1 shift 12 +d.op.data(2) extract 12; <*tilknyttet,postlgd*> 4 2388 tail(8):= 0; 4 2389 tail(9):= 31 shift 12; <*contentskey=ekstern fil,subnr=0*> 4 2390 tail(10):= d.op.data(1); <*postantal*> 4 2391 s:= monitor(40)create entry:(zdummy,0,tail); 4 2392 if s<>0 then 4 2393 begin 5 2394 if s=4 <*claims exeeded*> then 5 2395 begin 6 2396 status:= 4; 6 2397 fejlreaktion(1,s,<:create entry:>,1); 6 2398 goto returner; 6 2399 end; 5 2400 if s=3 <*navn ikke unikt*> then 5 2401 begin status:= 6; goto returner; end; 5 2402 fejlreaktion(1,s,<:create entry:>,0); 5 2403 end; 4 2404 \f 4 2404 message opreteksternfil side 2 - 810203/cl; 4 2405 4 2405 p_nøgle:= d.op.opkode shift (-12); 4 2406 s:= monitor(50)permanent_entry:(zdummy,p_nøgle,tail); 4 2407 if s<>0 then 4 2408 begin 5 2409 if s=6 then 5 2410 begin <*claims exeeded*> 6 2411 status:= 4; 6 2412 fejlreaktion(1,s,<:permanent entry:>,1); 6 2413 monitor(48)remove entry:(zdummy,0,tail); 6 2414 goto returner; 6 2415 end 5 2416 else fejlreaktion(1,s,<:permanent entry:>,0); 5 2417 end; 4 2418 4 2418 <*reserver*> 4 2419 s:= monitor(52)create areaprocess:(zdummy,0,zd); 4 2420 if s<>0 then 4 2421 begin 5 2422 fejlreaktion(1,s,<:create area:>,if s=1 then 1 else 0); 5 2423 status:= 4; 5 2424 monitor(48)remove entry:(zdummy,0,zd); 5 2425 goto returner; 5 2426 end; 4 2427 4 2427 s:= monitor(8)reserve:(zdummy,0,zd); 4 2428 if s<>0 then fejlreaktion(1,s,<:reserve:>,0); 4 2429 4 2429 <*tilknyt*> 4 2430 dbantef:= dbantef +1; 4 2431 fno:= dbkatefri; 4 2432 dbkatefri:= dbkate(fno,2); 4 2433 dbkate(fno,1):= tail(10) shift 9 add (tail(7) extract 12); 4 2434 dbkate(fno,2):= tail(1); 4 2435 getzone6(zdummy,zd); 4 2436 for i:= 2 step 1 until 5 do 4 2437 dbkate(fno,i+1):= d.op.data(3+i):= zd(i); <*navn*> 4 2438 d.op.data(3):= tail(1); 4 2439 d.op.data(4):= 3 shift 10 +fno; 4 2440 status:= 0; 4 2441 \f 4 2441 message opreteksternfil side 3 - 810526/cl; 4 2442 4 2442 returner: 4 2443 4 2443 close(zdummy,false); 4 2444 d.op.data(9):= status; 4 2445 4 2445 <*+2*> 4 2446 <*tz*> if testbit24 and overvåget then <*zt*> 4 2447 <*tz*> begin <*zt*> 5 2448 <*tz*> write(out,<:<10>opretfil::>,status,<: :>); <*zt*> 5 2449 <*tz*> pfdim(d.op.data); <*zt*> 5 2450 <*tz*> write(out,<: op::>,op,d.op.retur); ud; <*zt*> 5 2451 <*tz*> end; <*zt*> 4 2452 <*-2*> 4 2453 4 2453 signalch(d.op.retur,op,d.op.optype); 4 2454 if dbantef<dbmaxef then signalbin(bs_kate_fri); 4 2455 end; 3 2456 goto trin1; 3 2457 3 2457 opretekst_trap: 3 2458 disable skriv_opret_ekstfil(zbillede,1); 3 2459 3 2459 end opreteksternfil; 2 2460 2 2460 \f 2 2460 message attention_erklæringer side 1 - 850820/cl; 2 2461 2 2461 integer 2 2462 tf_kommandotabel, 2 2463 cs_att_pulje, 2 2464 bs_fortsæt_adgang, 2 2465 att_proc_ref; 2 2466 2 2466 integer array 2 2467 att_flag, 2 2468 att_signal(1:att_maske_lgd//2); 2 2469 2 2469 integer array 2 2470 terminal_tab(1:terminal_beskr_længde//2*(1<*io*>+ 2 2471 max_antal_operatører+max_antal_garageterminaler)), 2 2472 fortsæt(1:32); 2 2473 \f 2 2473 message procedure afslut_kommando side 1 - 810507/hko; 2 2474 2 2474 procedure afslut_kommando(op_ref); 2 2475 integer array field op_ref; 2 2476 begin integer nr,i,sem; 3 2477 i:= d.op_ref.kilde; 3 2478 nr:= if i=299 then max_antal_operatører+max_antal_garageterminaler+1 3 2479 else case i//100 of (0,i mod 100,max_antal_operatører+(i mod 100)); 3 2480 sætbit_ia(att_flag,nr,0); 3 2481 d.op_ref.optype:=gen_optype; 3 2482 <* "husket" attention disabled **************** 3 2483 if sætbit_ia(att_signal,nr,0)=1 then 3 2484 begin 3 2485 sem:=if i=299 then cs_talevejsswitch else 3 2486 case i//100 of (cs_io_komm,cs_operatør(i mod 100), 3 2487 cs_garage(i mod 100)); 3 2488 afslut_operation(op_ref,0); 3 2489 start_operation(op_ref,i,cs_att_pulje,0); 3 2490 signal_ch(sem,op_ref,gen_optype); 3 2491 end 3 2492 else 3 2493 ********************* disable "husket" attention *> 3 2494 afslut_operation(op_ref,cs_att_pulje); 3 2495 end; 2 2496 \f 2 2496 message procedure læs_store side 1 - 880919/cl; 2 2497 2 2497 integer procedure læs_store(z,c); 2 2498 zone z; 2 2499 integer c; 2 2500 begin 3 2501 læs_store:= readchar(z,c); 3 2502 if 'a' <= c and c <= 'å' then c:= c - 'a' + 'A'; 3 2503 end; 2 2504 \f 2 2504 message procedure param side 1 - 810226/cl; 2 2505 2 2505 2 2505 2 2505 integer procedure param(txt,pos,spec,tabel_id,type,værdi,sep); 2 2506 value tabel_id; 2 2507 integer pos, tabel_id, type, sep; 2 2508 integer array txt, spec, værdi; 2 2509 2 2509 2 2509 2 2509 <*************************************> 2 2510 <* *> 2 2511 <* CLAUS LARSEN: 15.07.77 *> 2 2512 <* *> 2 2513 <*************************************> 2 2514 2 2514 2 2514 2 2514 2 2514 <* param syntax-analyserer en parameterliste, og *> 2 2515 <* bestemmer næste parameter og den separator der *> 2 2516 <* afslutter parameteren *> 2 2517 2 2517 2 2517 2 2517 begin 3 2518 integer array klasse(0:127), aktuel_param(1:4), fdim(1:8); 3 2519 real array indgang(1:2); 3 2520 integer i, j, tegn, tegn_pos, tal, hashnøgle, 3 2521 zone_nr, top, max_segm, start_segm, lpos; 3 2522 boolean minus, separator; 3 2523 lpos := pos; 3 2524 type:=-1; 3 2525 for i:=1 step 1 until 4 do værdi(i):=0; 3 2526 \f 3 2526 message procedure param side 2 - 810428/cl,hko; 3 2527 3 2527 3 2527 3 2527 <* grænsecheck for pos *> 3 2528 begin 4 2529 integer nedre, øvre; 4 2530 4 2530 nedre := system(3,øvre,txt); 4 2531 nedre := nedre * 3 - 2; 4 2532 øvre := øvre * 3; 4 2533 if lpos < (nedre - 1) or øvre < lpos then 4 2534 begin 5 2535 sep:= -1; 5 2536 param:= 5; 5 2537 goto slut; 5 2538 end; 4 2539 4 2539 <* er parameterlisten slut *> 4 2540 lpos:= lpos+1; 4 2541 læs_tegn(txt,lpos,tegn); 4 2542 if tegn = 'em' or tegn = 'nl' or tegn = 'nul' then 4 2543 begin 5 2544 lpos := lpos - 2; 5 2545 sep := tegn; 5 2546 param := 5; 5 2547 5 2547 goto slut; 5 2548 end else lpos:= lpos-1; 4 2549 end; 3 2550 \f 3 2550 message procedure param side 3 - 810428/cl; 3 2551 3 2551 3 2551 <* initialisering *> 3 2552 for i := 1 step 1 until 4 do 3 2553 aktuel_param(i) := 0; 3 2554 minus := separator := false; 3 2555 3 2555 <* initialiser klassetabel *> 3 2556 for i := 65 step 1 until 93, 3 2557 97 step 1 until 125 do klasse(i) := 1; 3 2558 for i := 48 step 1 until 57 do klasse(i) := 2; 3 2559 for i := 0 step 1 until 47, 58 step 1 until 64, 3 2560 94, 95, 96, 126, 127 do klasse(i) := 4; 3 2561 3 2561 3 2561 <* sæt specialtegn *> 3 2562 i := 1; 3 2563 læs_tegn(spec,i,tegn); 3 2564 while tegn <> 0 do 3 2565 begin 4 2566 if klasse(tegn) = 4 and tegn <> 'sp' and tegn <> 'nl' then 4 2567 klasse(tegn) := 3; 4 2568 læs_tegn(spec,i,tegn); 4 2569 end; 3 2570 \f 3 2570 message procedure param side 4 - 810226/cl; 3 2571 3 2571 3 2571 <* læs første tegn i ny parameter og bestem typen *> 3 2572 læs_tegn(txt,lpos,tegn); 3 2573 3 2573 case klasse(tegn) of 3 2574 begin 4 2575 4 2575 <* case 1 - bogstav *> 4 2576 begin 5 2577 type := 0; 5 2578 param := 0; 5 2579 tegn_pos := 1; 5 2580 hashnøgle := 0; 5 2581 5 2581 <* læs parameter *> 5 2582 while tegn_pos < 12 and klasse(tegn) <> 4 do 5 2583 begin 6 2584 hashnøgle := hashnøgle + tegn; 6 2585 skriv_tegn(aktuel_param,tegn_pos,tegn); 6 2586 læs_tegn(txt,lpos,tegn); 6 2587 end; 5 2588 5 2588 <* find separator *> 5 2589 while klasse(tegn) <> 4 do læs_tegn(txt,lpos,tegn); 5 2590 sep := tegn; 5 2591 \f 5 2591 message procedure param side 5 - 810226/cl; 5 2592 5 2592 <* tabelopslag *> 5 2593 if tabel_id <> 0 then 5 2594 begin 6 2595 <* hent max_segm *> 6 2596 6 2596 fdim(4) := tabel_id; 6 2597 j := hent_fil_dim(fdim); 6 2598 if j > 0 then 6 2599 begin 7 2600 param := 4; 7 2601 for i := 1 step 1 until 4 do 7 2602 værdi(i) := aktuel_param(i); 7 2603 goto slut; 7 2604 end; 6 2605 max_segm := fdim(3); 6 2606 6 2606 <* forbered opslag *> 6 2607 start_segm := (hashnøgle mod max_segm) + 1; 6 2608 indgang(1) := 0.0 shift 48 add aktuel_param(1) 6 2609 shift 24 add aktuel_param(2); 6 2610 indgang(2) := 0.0 shift 48 add aktuel_param(3) 6 2611 shift 24 add aktuel_param(4); 6 2612 hashnøgle := start_segm; 6 2613 \f 6 2613 message procedure param side 6 - 810226/cl; 6 2614 6 2614 <* søg navn *> 6 2615 repeat 6 2616 <* læs segment *> 6 2617 læs_fil(tabel_id,hashnøgle,zone_nr); 6 2618 6 2618 <* beregn sidste element *> 6 2619 top := fil(zone_nr,1) extract 24; 6 2620 top := (top - 1) * 4 + 2; 6 2621 6 2621 <* søg *> 6 2622 for i := 2 step 4 until top do 6 2623 if fil(zone_nr,i) = indgang(1) and 6 2624 fil(zone_nr,i+1) = indgang(2) then 6 2625 begin 7 2626 <* fundet *> 7 2627 værdi(1) := fil(zone_nr,i+2) shift (-24) 7 2628 extract 24; 7 2629 værdi(2) := fil(zone_nr,i+2) extract 24; 7 2630 værdi(3) := fil(zone_nr,i+3) shift (-24) 7 2631 extract 24; 7 2632 værdi(4) := fil(zone_nr,i+3) extract 24; 7 2633 goto fundet; 7 2634 end; 6 2635 6 2635 if top = 122 then <*overløb *> 6 2636 hashnøgle := (hashnøgle mod max_segm) + 1; 6 2637 until top < 122 or hashnøgle = start_segm; 6 2638 6 2638 <* navn findes ikke *> 6 2639 param := 2; 6 2640 for j := 1 step 1 until 4 do 6 2641 værdi(j) := aktuel_param(j); 6 2642 fundet: ; 6 2643 end <*tabel_id <> 0 *> 5 2644 else 5 2645 for i := 1 step 1 until 4 do 5 2646 værdi(i) := aktuel_param(i); 5 2647 end <* case 1 *>; 4 2648 \f 4 2648 message procedure param side 7 - 810310/cl,hko; 4 2649 4 2649 <* case 2 - ciffer *> 4 2650 cif: begin 5 2651 type:=tal := 0; 5 2652 while klasse(tegn) = 2 do 5 2653 begin 6 2654 type:=type+1; 6 2655 tal := tal * 10 + (tegn - 48); 6 2656 læs_tegn(txt,lpos,tegn); 6 2657 end; 5 2658 if minus then tal := -tal; 5 2659 værdi(1) := tal; 5 2660 sep := tegn; 5 2661 param := 0; 5 2662 end <* case 2 *>; 4 2663 \f 4 2663 message procedure param side 8 - 810428/cl; 4 2664 4 2664 <* case 3 - specialtegn *> 4 2665 spc: begin 5 2666 if tegn = '-' then 5 2667 begin 6 2668 læs_tegn(txt,lpos,tegn); 6 2669 if klasse(tegn) = 2 then 6 2670 begin 7 2671 minus := true; 7 2672 goto cif; 7 2673 end 6 2674 else 6 2675 begin 7 2676 tegn := '-'; 7 2677 lpos := lpos - 1; 7 2678 end; 6 2679 end; 5 2680 <* syntaxfejl *> 5 2681 param := if separator then 1 else 3; 5 2682 sep := tegn; 5 2683 end <* case 3 *>; 4 2684 4 2684 <* case 4 - separator *> 4 2685 begin 5 2686 separator := true; 5 2687 goto spc; 5 2688 end <* case 4 *>; 4 2689 4 2689 end <* case *>; 3 2690 3 2690 lpos := lpos - 1; 3 2691 slut: 3 2692 pos := lpos; 3 2693 end; 2 2694 \f 2 2694 message procedure læs_param_sæt side 1 - 830310/cl; 2 2695 2 2695 integer procedure læs_param_sæt(tekst,pos,ant,parm,term,res); 2 2696 integer array tekst, parm; 2 2697 integer pos,ant, term,res; 2 2698 2 2698 <* proceduren læser et sammenhørende sæt parametre 2 2699 afsluttet med (sp),(nl),(;),(,) eller (nul) 2 2700 2 2700 læs_param_sæt returstatus eller 'typen' af det læste parametersæt 2 2701 (retur,int) 2 2702 type ant parm indeholder: 2 2703 <0: x (ingenting) 'læs_param_sæt= nr på fejlkvit.' 2 2704 0: 0 (ingenting) 'rest kommando er tom' 2 2705 1: 1 (tekst) 'indtil 11 tegn' 2 2706 2: 1 (pos.tal) 2 2707 3: 1 (neg.tal) 2 2708 4: 1 (pos.tal<1000)(bogstav) 'linienummer' 2 2709 5: 1 G(pos.tal<100) 'gruppe_ident' 2 2710 6: 2 (linie)/(løb) 'vogn_ident' 2 2711 7: 3 (bus)/(linie)/(løb) 2 2712 8: 3 (linie).(indeks):(løb) 2 2713 9: 2 (linie).(indeks) 2 2714 10: 2 (pos.tal).(pos.tal) 2 2715 11: 2-3 G(pos.tal<100):(vogn) '(vogn)::=(bus)!(linie)/(løb)' 2 2716 12: 3 D.(dato).(tid) 2 2717 2 2717 tekst indeholder teksten hvori parametersættet 2 2718 (kald,int.arr.) skal søges. 2 2719 2 2719 pos 2 2720 (kald/retur,int.) position efter hvilken søgningen starter, og 2 2721 ved retur positionen for afsluttende tegn. 2 2722 (ikke ændret ved fejl) 2 2723 2 2723 ant hvis kaldeværdien er >0 skal parametersættet 2 2724 (kald/retur,int) indeholde det angivne antal enkeltparametre, 2 2725 i modsat fald returneres med fejltype -26 2 2726 (skilletegn) eller -25 (parameter mangler). 2 2727 ellers læses op til 3 enkeltparametre. retur- 2 2728 værdien afhænger af det læste parametersæts 2 2729 type, se ovenfor under læs_param_sæt. 2 2730 \f 2 2730 message procedure læs_param_sæt side 2 - 810428/hko; 2 2731 2 2731 parm skal omfatte elementerne 1 til 4. 2 2732 (retur,int.arr.) ved returstatus<=0 indeholder alle elemen- 2 2733 terne værdien 0. 2 2734 2 2734 type (element,indhold) 2 2735 1: 1-4,teksten 2 2736 2-3: 1, talværdien 2 2737 4: 1, tal shift 5 +tegnværdi (A=1,B=2,--,Å=29) 2 2738 5: 1, talværdi (uden G) 2 2739 6: 1, (som'4') shift 7 + løb 2 2740 7: 1, bus 2 2741 2, linie/løb som '6' 2 2742 8: 1, tal shift 5 eller som '4' 2 2743 2, tekst (1-3 bogstaver) 2 2744 3, løb 2 2745 9: 1 og 2, som '8' 2 2746 10: 1, talværdi 2 2747 2, talværdi 2 2748 11: 1, som '5' 2 2749 2, vogn (bus eller linie/løb) 2 2750 12: 1, dato 2 2751 2, tid 2 2752 2 2752 term iso-tegnværdien for tegnet der afslutter 2 2753 (retur,int) parameter_sættet. 2 2754 2 2754 res som læs_param_sæt. 2 2755 (retur,int) 2 2756 2 2756 *> 2 2757 \f 2 2757 message procedure læs_param_sæt side 3 - 810310/hko; 2 2758 2 2758 begin 3 2759 integer max_ant; 3 2760 3 2760 max_ant:= 3; 3 2761 3 2761 begin 4 2762 integer 4 2763 i,j,k, <* hjælpe variable *> 4 2764 nr, <* nummer på parameter i sættet *> 4 2765 apos, <* aktuel tegnposition *> 4 2766 cifre, <* parametertype (param: 0=tekst, >1=tal) *> 4 2767 sep; <* afsluttende skilletegn ved param *> 4 2768 4 2768 integer array field 4 2769 iaf; <* hjælpe variabel *> 4 2770 4 2770 integer array 4 2771 par(1:4*max_ant), <* 4 elementer for hver aktuel parameter *> 4 2772 s, <* 1 element med separator for hver parameter *> 4 2773 t(1:max_ant), <* 1 element med typen for hver parameter *> 4 2774 værdi(1:4), <* værdi af aktuel parameter jvf. param *> 4 2775 spec(1:1); <* specialtegn i navne jvf. param *> 4 2776 4 2776 <* de interne typer af enkeltparametre er 4 2777 4 2777 type parameter 4 2778 4 2778 1: 1-3 tegn tekst (1 ord) 4 2779 2: 4-6 tegn (2 ord) 4 2780 3: 7-9 tegn (3 ord) 4 2781 4:10-11 tegn (4 ord) 4 2782 5: positivt heltal 4 2783 6: negativt heltal 4 2784 7: positivt heltal<1000 efterfulgt af stort bogstav 4 2785 8: G efterfulgt af positivt heltal<100 4 2786 4 2786 *> 4 2787 \f 4 2787 message procedure læs_param_sæt side 4 - 810408/hko; 4 2788 4 2788 nr:= 0; 4 2789 res:= -1; 4 2790 spec(1):= 0; <* ingen specialtegn *> 4 2791 apos:= pos; 4 2792 for i:= 1 step 1 until 4 do parm(i):= 0; 4 2793 for i:= 1 step 1 until max_ant do 4 2794 begin 5 2795 s(i):= t(i):= 0; 5 2796 for j:= 1 step 1 until 4 do par((i-1)*4+j):= 0; 5 2797 end; 4 2798 repeat 4 2799 <* skip foranstillede sp-tegn *> 4 2800 for i:= param(tekst,apos,spec,0<*intet tabelopslag*>,cifre,værdi,sep) 4 2801 while i=1 and sep='sp' do; 4 2802 <*+2*> 4 2803 begin 5 2804 if testbit25 and testbit26 then 5 2805 disable begin 6 2806 write(out,"nl",1,<:param (apos,cifre,sep):>,<< -dddd>, 6 2807 i,apos,cifre,sep); 6 2808 laf:=0; 6 2809 if cifre<>0 then 6 2810 write(out,<: værdi(1-4)::>, 6 2811 << -dddd>,værdi(1),værdi(2),værdi(3),værdi(4)) 6 2812 else write(out,<: værdi::>,værdi.laf); 6 2813 ud; 6 2814 end; 5 2815 end; 4 2816 <*-2*> 4 2817 ; 4 2818 if i<>0 then <* ikke ok *> 4 2819 begin 5 2820 if i=1 and (sep=',' or sep=';') then <* slut_tegn*> 5 2821 begin 6 2822 apos:= apos -1; 6 2823 res:= 0; 6 2824 end 5 2825 else if i=1 then res:=-26 <* skilletegn *> 5 2826 else <* i=5 *> res:= -25 <* parameter mangler *> 5 2827 end 4 2828 else <* i=0 *> 4 2829 begin 5 2830 if sep=',' or sep=';' then apos:=apos-1; 5 2831 iaf:= nr*8; 5 2832 nr:= nr +1; 5 2833 \f 5 2833 message procedure læs_param_sæt side 5 - 810520/hko/cl; 5 2834 5 2834 if cifre=0 <* navne_parameter *> then 5 2835 begin 6 2836 if værdi(2)=0 6 2837 and læstegn(værdi,1,i)='G' 6 2838 and læstegn(værdi,2,j)>'0' and j<='9' 6 2839 and (læstegn(værdi,3,k)=0 or (k>='0' and k<='9')) 6 2840 then 6 2841 begin <* gruppenavn, repræsenteres som tal *> 7 2842 t(nr):= 8; 7 2843 j:= j -'0'; 7 2844 par.iaf(1):= if k=0 then j else (j*10+(k-'0')); 7 2845 s(nr):= sep; 7 2846 end 6 2847 else 6 2848 begin <* generel tekst *> 7 2849 i:= 0; 7 2850 for i:= i +1 while i<=4 do 7 2851 begin 8 2852 if værdi(i)<>0 then 8 2853 begin 9 2854 t(nr):= i; 9 2855 par.iaf(i):= værdi(i); 9 2856 end 8 2857 else i:= 4; 8 2858 end; 7 2859 s(nr):= sep; 7 2860 end <* generel tekst *> 6 2861 end <* navne_parameter *> 5 2862 else 5 2863 begin <* talparameter *> 6 2864 i:= if værdi(1)<0 then 6 <* neg.tal *> 6 2865 else if værdi(1)>0 and værdi(1)<1000 6 2866 and sep>='A' and sep<='Å' then 7 6 2867 else 5 <* positivt tal *>; 6 2868 t(nr):= i; 6 2869 par.iaf(1):= if i<>7 then værdi(1) 6 2870 else værdi(1) shift 5 +(sep+1-'A'); 6 2871 par.iaf(2):= cifre; 6 2872 apos:= apos+1; 6 2873 s(nr):= if i=7 then læstegn(tekst,apos,sep) else sep; 6 2874 apos:= apos-1; 6 2875 end; 5 2876 end;<* i=0 *> 4 2877 until (ant>0 and nr=ant) 4 2878 or nr=max_ant 4 2879 or res<> -1 4 2880 or sep='sp' or sep=';' or sep='em' 4 2881 or sep=',' or sep='nl' or sep='nul'; 4 2882 \f 4 2882 message procedure læs_param_sæt side 6 - 810508/hko; 4 2883 4 2883 if ant>nr then res:= -25 <*parameter mangler*> 4 2884 else 4 2885 if nr=0 or t(1)=0 then 4 2886 begin <* ingen parameter før skilletegn *> 5 2887 if res=-25 then res:= 0; 5 2888 end 4 2889 else if sep<>'sp' and sep<>'nl' and sep <> 'em' 4 2890 and sep<>';' and sep<>',' then 4 2891 begin <* ulovligt afsluttende skilletegn *> 5 2892 res:= -26; 5 2893 end 4 2894 else 4 2895 begin <* en eller flere lovligt afsluttede parametre *> 5 2896 if t(1)<5 and nr=1 then 5 2897 5 2897 <* 1 navne_parameter *> 5 2898 5 2898 begin 6 2899 res:= 1; 6 2900 tofrom(parm,par,8); 6 2901 end 5 2902 else if <*t(1)<9 and *> nr=1 then 5 2903 5 2903 <* 1 parameter af anden type *> 5 2904 5 2904 begin <*tal,linie eller gruppe *> 6 2905 res:= t(1) -3; 6 2906 parm(1):= par(1); 6 2907 end 5 2908 else if t(1)=5 <* pos.tal *> or t(1)=7 <*linie*> then 5 2909 5 2909 <* mere end 1 parameter, hvoraf 1. er pos.tal eller linienr *> 5 2910 5 2910 begin 6 2911 i:= par(1); <* lovlige parametre er alle repræsenteret i et ord *> 6 2912 j:= par(5); <* internt *> 6 2913 k:= par(9); <* *> 6 2914 if nr=2 then 6 2915 <* 2 parametre i sættet *> 6 2916 begin 7 2917 res:= if (s(1)='/' or s(1)='.') and t(2)=5 <*pos.tal*> then 6 7 2918 else if s(1)='.' and t(2)=1 then 9 7 2919 else if s(1)='-' and t(1)=5 and t(2)=5 then 10 7 2920 else if s(1)<>'/' and s(1)<>'.' 7 2921 and s(1)<>'-' then -26 <* skilletegn *> 7 2922 else -27;<* parametertype*> 7 2923 \f 7 2923 message procedure læs_param_sæt side 7 - 810501/hko; 7 2924 7 2924 <* mere end 1 parameter, hvoraf 1. er pos.tal eller linienr *> 7 2925 7 2925 <* 2 parametre i sættet *> 7 2926 if res=6 then 7 2927 begin 8 2928 if (i<1 or i>999) and t(1)=5 then 8 2929 res:= -5 <* ulovligt linienr *> 8 2930 else if (j<1 or j>99) then 8 2931 res:= -6 <* ulovligt løbsnr *> 8 2932 else 8 2933 begin 9 2934 if t(1)=5 then i:= i shift 5; 9 2935 parm(1):= i shift 7 +j; 9 2936 end; 8 2937 end <* res=6 *> 7 2938 else if res=9 then 7 2939 begin 8 2940 if t(1)=5 and (i<1 or 999<i) then 8 2941 res:= -5 <*ulovligt linienr*> 8 2942 else 8 2943 begin 9 2944 if t(1)=5 then i:=i shift 5; 9 2945 parm(1):= i; 9 2946 parm(2):= j; 9 2947 end; 8 2948 end <* res=9 *> 7 2949 else if res=10 then 7 2950 begin 8 2951 begin 9 2952 parm(1):= i; 9 2953 parm(2):= j; 9 2954 end; 8 2955 end; <* res=10 *> 7 2956 end <* nr=2 *> 6 2957 else 6 2958 if nr=3 then 6 2959 <* 3 paramtre i sættet *> 6 2960 begin 7 2961 res:= if (s(1)='/' or s(1)='.') and 7 2962 (s(2)='/' or s(2)='.') then 7 7 2963 else if s(1)='.' and s(2)=':' then 8 7 2964 else -26; <* skilletegn *> 7 2965 \f 7 2965 message procedure læs_param_sæt side 8 - 810501/hko; 7 2966 7 2966 <* mere end 1 parameter, hvoraf 1. er pos.tal eller linienr *> 7 2967 <* 3 parametre i sættet *> 7 2968 if res=7 then 7 2969 begin 8 2970 if t(1)<>5 or (t(2)<>5 and t(2)<>7) 8 2971 or t(3)<>5 then 8 2972 res:= -27 <* parametertype *> 8 2973 else 8 2974 if i<1 or i>9999 then res:= -7 <* ulovligt busnr *> 8 2975 else if t(2)=5 and (j<1 or j>999) then res:=-5 <* linie *> 8 2976 else if k<1 or k>99 then res:= -6 <* løb *> 8 2977 else 8 2978 begin <* ok *> 9 2979 parm(1):= i; 9 2980 if t(2)=5 then j:= j shift 5; 9 2981 parm(2):= j shift 7 +k; 9 2982 end; 8 2983 end 7 2984 else if res=8 then 7 2985 begin 8 2986 if t(2)<>1 or t(3)<>5 then res:= -27 8 2987 else if t(1)=5 and (i<1 or i>999) then res:= -5 8 2988 else if k<1 or k>99 then res:= -6 8 2989 else 8 2990 begin 9 2991 if t(1)=5 then i:= i shift 5; 9 2992 parm(1):= i; 9 2993 parm(2):= j; 9 2994 parm(3):= k; 9 2995 end; 8 2996 end; 7 2997 end <* nr=3 *> 6 2998 else res:=-24; <* syntaks *> 6 2999 \f 6 2999 message procedure læs_param_sæt side 9 - 810428/hko; 6 3000 6 3000 end <* mere end 1 parameter,hvoraf 1. er pos.tal eller linienr *> 5 3001 else if t(1)=8 <* gruppe_id *> then 5 3002 begin 6 3003 <* mere end 1 parameter , hvoraf den første 6 3004 er en gruppe_identifikation ved navn. 6 3005 lovlige parametre er alle internt repræsenteret i et ord *> 6 3006 6 3006 i:=par(1); 6 3007 j:=par(5); 6 3008 k:=par(9); 6 3009 6 3009 if nr=2 then 6 3010 <* 2 parametre *> 6 3011 begin 7 3012 res:=if s(1)=':' and t(2)=5 then 11 7 3013 else if s(1)<>':' then -26 <* skilletegn *> 7 3014 else -27; <*param.type *> 7 3015 if res=11 then 7 3016 begin 8 3017 if j<1 or j>9999 then res:=-7 <* ulovligt busnr *> 8 3018 else 8 3019 begin 9 3020 parm(1):=i; 9 3021 parm(2):=j; 9 3022 end; 8 3023 end; 7 3024 \f 7 3024 message procedure læs_param_sæt side 10 - 810428/hko; 7 3025 7 3025 <* mere end 1 parameter, hvoraf 1. er en gruppeidentifikation ved navn *> 7 3026 7 3026 end <*nr=2*> 6 3027 else if nr=3 then 6 3028 <* 3 parametre *> 6 3029 begin 7 3030 res:=if s(1)=':' and s(2)='/' then 11 7 3031 else -26; <* skilletegn *> 7 3032 if res=11 then 7 3033 begin 8 3034 if (t(2)<>5 and t(2)<>7) or t(3)<>5 then res:=-27 <*param.type*> 8 3035 else 8 3036 begin 9 3037 if t(2)=5 and (j<1 or j>999) then res:=-5 <* linie *> 9 3038 else 9 3039 begin 10 3040 parm(1):=i; 10 3041 if t(2)=5 then j:=j shift 5; 10 3042 parm(2):= 1 shift 22 +j shift 7 +k; 10 3043 end; 9 3044 end; 8 3045 end; 7 3046 end <* nr=3 *> 6 3047 else res:=-24; <* syntaks *> 6 3048 \f 6 3048 message procedure læs_param_sæt side 11 - 810501/hko; 6 3049 6 3049 end <* t(1)=8 *> 5 3050 else if t(1)=1 and par(1)= 'D' shift 16 then 5 3051 begin 6 3052 <* mere end 1 parameter i sættet og 1. parameter er et 'D'. 6 3053 lovlige parametre er alle internt repræsenteret i et ord. *> 6 3054 i:=par(1); 6 3055 j:=par(5); 6 3056 k:=par(9); 6 3057 6 3057 if nr=3 then 6 3058 begin 7 3059 res:=if s(1)='.' and s(2)='.' then 12 7 3060 else -26; <* skilletegn *> 7 3061 if res=12 then 7 3062 begin 8 3063 if t(2)<>5 or t(3)<>5 then res:=-27 <* param. type *> 8 3064 else 8 3065 begin 9 3066 integer år,md,dg,tt,mm,ss; 9 3067 real dato,tid; 9 3068 år:=j//10000; 9 3069 md:=(j//100) mod 100; 9 3070 dg:=j mod 100; 9 3071 cifre:= par(10); 9 3072 tt:=if cifre>4 then k//10000 else if cifre>2 then k//100 9 3073 else k; 9 3074 mm:=if cifre>4 then (k//100) mod 100 9 3075 else if cifre>2 then k mod 100 else 0; 9 3076 ss:=if cifre>4 then k mod 100 else 0; 9 3077 \f 9 3077 message procedure læs_param_sæt side 12 - 810501/hko; 9 3078 9 3078 dato:=systime(5,0.0,tid); 9 3079 if j=0 then dg:=round dato mod 100; 9 3080 if år=0 and md=0 then md:=(round dato//100) mod 100; 9 3081 if år=0 then år:=round dato//10000; 9 3082 if år>99 or md<1 or md>12 or tt>23 or mm>59 or ss>59 then 9 3083 res:=-24 <* syntaks *> 9 3084 else if dg<1 or dg > (case md of ( 9 3085 31,(if år mod 4=0 then 29 else 28),31, 30,31,30, 9 3086 31,31,30, 31,30,31)) then res:=-24 9 3087 else 9 3088 begin 10 3089 parm(1):=år*10000+md*100+dg; 10 3090 parm(2):=tt*10000+mm*100+ss; 10 3091 end; 9 3092 end; 8 3093 8 3093 end; <* res=12 *> 7 3094 end <* nr=3 *> 6 3095 else res:=-24; <*syntaks*> 6 3096 end <* t(1)=1 and par(1)='D' shift 16 *> 5 3097 5 3097 else res:=-27;<*parametertype*> 5 3098 end; <* en eller flere parametre *> 4 3099 4 3099 læs_param_sæt:= res; 4 3100 term:= sep; 4 3101 if res>= 0 then pos:= apos; 4 3102 end; 3 3103 end læs_param_sæt; 2 3104 \f 2 3104 message procedure læs_kommando side 1 - 810428/hko; 2 3105 2 3105 integer procedure læs_kommando(z,kilde,op_ref,pos,indeks,sep,slut_tegn); 2 3106 value kilde; 2 3107 zone z; 2 3108 integer kilde, pos,indeks,sep,slut_tegn; 2 3109 integer array field op_ref; 2 3110 2 3110 <* proceduren indlæser er kommmando fra en terminal (telex, 2 3111 skærm eller skrivemaskine). ved indlæsning fra skærm eller 2 3112 skrivemaskine inviteres først ved udskrivning af '>'-tegn. 2 3113 for terminalers vedkommendeslettes linie 23 og 24 og 'cursor' positioneres til 2 3114 23'ende linie inden invitation. 2 3115 *> 2 3116 \f 2 3116 message procedure læs_kommando side 2 - 810428/hko; 2 3117 2 3117 begin 3 3118 integer 3 3119 a_pos, 3 3120 a_res,res, 3 3121 i,j,k; 3 3122 boolean 3 3123 skip; 3 3124 3 3124 <*V*>setposition(z,0,0); 3 3125 3 3125 case kilde//100 of 3 3126 begin 4 3127 begin <* io *> 5 3128 write(z,"nl",1,">",1); 5 3129 end; 4 3130 4 3130 begin <* operatør *> 5 3131 cursor(z,24,1); 5 3132 write(z,"esc" add 128,1,<:ÆK:>); 5 3133 cursor(z,23,1); 5 3134 write(z,"esc" add 128,1,<:ÆK:>); 5 3135 outchar(z,'>'); 5 3136 end; 4 3137 4 3137 begin <* garageterminal *> ; 5 3138 outchar(z,'nl'); 5 3139 end 4 3140 end; 3 3141 3 3141 <*V*>setposition(z,0,0); 3 3142 \f 3 3142 message procedure læs_kommando side 3 - 810921/hko,cl; 3 3143 3 3143 res:=0; 3 3144 skip:= false; 3 3145 <*V*> 3 3146 k:=læs_store(z,i); 3 3147 3 3147 apos:= 1; 3 3148 while k<=6 <*klasse=bogstav*> do 3 3149 begin 4 3150 if a_pos<3 then skriv_tegn(d.op_ref.data,apos,i); 4 3151 <*V*> k:= læs_store(z,i); 4 3152 end; 3 3153 3 3153 skip:= skip or i='?' or (a_pos=1 and (i=',' or i=';')); 3 3154 3 3154 if i=',' and a_pos>1 then 3 3155 begin 4 3156 skrivtegn(d.op_ref.data,a_pos,i); 4 3157 repeat 4 3158 <*V*> k:= læs_store(z,i); 4 3159 if a_pos=4 and k=6 then skriv_tegn(d.op_ref.data,a_pos,i); 4 3160 until k>=7; 4 3161 end; 3 3162 3 3162 pos:=a_pos; 3 3163 while k<8 do 3 3164 begin 4 3165 if a_pos< (att_op_længde//2*3-2) then 4 3166 skriv_tegn(d.op_ref.data,a_pos,i); 4 3167 skip:= skip or i='?'; 4 3168 <*V*> k:= læs_store(z,i); 4 3169 pos:=pos+1; 4 3170 end; 3 3171 3 3171 skip:= skip or i='?' or i='esc'; 3 3172 slut_tegn:= i; 3 3173 skrivtegn(d.op_ref.data,apos,'em'); 3 3174 afslut_text(d.op_ref.data,apos); 3 3175 \f 3 3175 message procedure læs_kommando side 4 - 820301/hko/cl; 3 3176 3 3176 disable 3 3177 begin 4 3178 integer 4 3179 i1, 4 3180 nr, 4 3181 partype, 4 3182 cifre; 4 3183 integer array 4 3184 spec(1:1), 4 3185 værdi(1:4); 4 3186 4 3186 <*+2*> 4 3187 if testbit25 and overvåget then 4 3188 disable begin 5 3189 real array field raf; 5 3190 write(out,"nl",1,<:kommando læst::>); 5 3191 laf:=data; 5 3192 write(out,d.op_ref.laf,<:<'<'>sluttegn<'>'>=:>,<<d>,sluttegn, 5 3193 <: skip=:>,if skip then <:true:> else <:false:>); 5 3194 ud; 5 3195 end; 4 3196 <*-2*> 4 3197 4 3197 for i:=1 step 1 until 32 do ia(i):=0; 4 3198 4 3198 if skip then 4 3199 begin 5 3200 res:=53; <*annulleret*> 5 3201 pos:= -1; 5 3202 goto slut_læskommando; 5 3203 end; 4 3204 \f 4 3204 message procedure læs_kommando side 5 - 850820/cl; 4 3205 4 3205 i:= kilde//100; <* hovedmodul *> 4 3206 k:= kilde mod 100; <* løbenr *> 4 3207 <* if pos>79 then linieoverløb; *> 4 3208 pos:=a_pos:=0; 4 3209 spec(1):= ',' shift 16; 4 3210 4 3210 <*+4*> 4 3211 if k<1 or k>(case i of (1,max_antal_operatører, 4 3212 max_antal_garageterminaler)) then 4 3213 begin 5 3214 fejlreaktion(3<*programfejl*>,kilde,<:ukendt kilde til kommando:>,1); 5 3215 res:=31; 5 3216 end 4 3217 else 4 3218 <*-4*> 4 3219 if i>0 and i<4 then <* io, operatør eller garageterminal *> 4 3220 begin 5 3221 <* læs operationskode *> 5 3222 j:=param(d.op_ref.data,apos,spec,tf_kommandotabel,cifre,værdi,sep); 5 3223 5 3223 res:= if j=1 and sep='.' and i=2<*operatør*> then -1 <* skærmopdatering *> 5 3224 else if cifre>0 or j=1 or j=3 or j=5 then 24 <* syntaks *> 5 3225 else if j=2 then 4 <*ukendt kommando*> 5 3226 else if j=4 then 31 <*systemfejl: ukendt tabelfil*> 5 3227 else if sep<>'sp' and sep<>',' 5 3228 and sep<>'nl' and sep<>';' 5 3229 and sep<>'nul' and sep<>'em' then 26 5 3230 <*skilletegn*> 5 3231 else if -, læsbit_i(værdi(4),i-1) then 4 5 3232 <* logand(extend 0 add værdi(4) 5 3233 extend 1 shift (case i of (0,k,8+k)))=0 then 4 5 3234 *> <*ukendt kommando*> 5 3235 else 1; 5 3236 \f 5 3236 message procedure læs_kommando side 5a- 810409/hko; 5 3237 5 3237 <*+2*>if testbit25 and overvåget then 5 3238 begin 6 3239 write(out,"nl",0,<:funk opslag: param,apos,cifre,sep,res::>, 6 3240 << -dddd>,j,apos,cifre,sep,res, 6 3241 <: værdi(1-4)::>,værdi(1),værdi(2),værdi(3),værdi(4), 6 3242 "nl",0); 6 3243 if j<>0 then skriv_op(out,op_ref); 6 3244 ud; 6 3245 end; 5 3246 <*-2*> 5 3247 5 3247 if res=31 then fejlreaktion(18<*tabelfil*>,j, 5 3248 <:=res, filnr 1025, læskommando:>,0); 5 3249 5 3249 if res=1 then <* operationskode ok *> 5 3250 begin 6 3251 if sep<>'sp' then apos:=apos-1; 6 3252 d.op_ref.opkode:=værdi(1); 6 3253 indeks:=værdi(2); 6 3254 partype:= værdi(3); 6 3255 nr:= 0; 6 3256 pos:= apos; 6 3257 \f 6 3257 message procedure læs_kommando side 6 - 810409/hko; 6 3258 6 3258 while res=1 do 6 3259 begin 7 3260 læs_param_sæt(d.op_ref.data,apos,0<*indtil 3 enkeltparametre*>, 7 3261 værdi,sep,a_res); 7 3262 nr:= nr +1; 7 3263 i1:= værdi(1); 7 3264 <*+2*> if testbit25 and overvåget then 7 3265 begin 8 3266 write(out,"nl",1,<:param sæt: apos,sep,ares::>,<< -dddddd>, 8 3267 apos,sep,ares,<: værdi(1-4)::>, 8 3268 værdi(1),værdi(2),værdi(3),værdi(4), 8 3269 "nl",0); 8 3270 ud; 8 3271 end; 7 3272 <*-2*> 7 3273 case par_type of 7 3274 begin 8 3275 8 3275 <*1: (<ingenting>!<busnr> (<omr>)!<linienr>/<løbnr> (<omr>)) *> 8 3276 8 3276 begin 9 3277 if nr=1 then 9 3278 begin 10 3279 if a_res=0 then res:=2 <*godkendt*> 10 3280 else if a_res=2 and (i1<1 or i1>9999) 10 3281 then res:=7 <*busnr ulovligt*> 10 3282 else if a_res=2 or a_res=6 then 10 3283 begin 11 3284 ia(1):= if a_res=2 then i1 11 3285 else 1 shift 22 +i1; 11 3286 end 10 3287 else res:= 27; <*parametertype*> 10 3288 if res<4 then pos:= apos; 10 3289 end <*nr=1*> 9 3290 else 9 3291 if nr=2 then 9 3292 begin 10 3293 if ares=0 then res:= 2 <*godkendt*> 10 3294 else if ares=1 then 10 3295 begin 11 3296 ia(2):= find_område(i1); 11 3297 if ia(2)=0 then res:= 17; <* kanal-nr ukendt *> 11 3298 end 10 3299 else res:= 27; <* syntaks, parametertype *> 10 3300 end 9 3301 else 9 3302 if ares=0 then res:= 2<*godkendt*> else res:= 24 <* syntaks *>; 9 3303 end; 8 3304 \f 8 3304 message procedure læs_kommando side 7 - 810226/hko; 8 3305 8 3305 <*2: (<busnr> (<område>)!<linie>/<løbnr>) *> 8 3306 8 3306 begin 9 3307 if nr=1 then 9 3308 begin 10 3309 if a_res=0 then res:=25 <*parameter mangler*> 10 3310 else if a_res=2 and (i1<1 or i1>9999) 10 3311 then res:=7 <*busnr ulovligt*> 10 3312 else if a_res=2 or a_res=6 then 10 3313 begin 11 3314 ia(1):=if a_res=2 then i1 11 3315 else 1 shift 22 +i1; 11 3316 end 10 3317 else res:= 27; <*parametertype*> 10 3318 if res<4 then pos:=a_pos; 10 3319 end 9 3320 else 9 3321 if nr=2 then 9 3322 begin 10 3323 if ares=0 then res:= 2 <*godkendt*> else 10 3324 if ares=1 and ia(1) shift (-21) = 0 then 10 3325 begin 11 3326 ia(2):= findområde(i1); 11 3327 if ia(2)=0 then res:= 56; <*område ukendt*> 11 3328 end 10 3329 else res:= 27; 10 3330 if res<4 then pos:= apos; 10 3331 end 9 3332 else 9 3333 if ares=0 then res:= 2 else res:= 24<*syntaks*>; 9 3334 end; 8 3335 \f 8 3335 message procedure læs_kommando side 8 - 810223/hko; 8 3336 8 3336 <*3: (<linie>!G<nr>) *> 8 3337 8 3337 begin 9 3338 if nr=1 then 9 3339 begin 10 3340 if a_res=0 then res:=25 <*parameter mangler*> 10 3341 else if a_res=2 and (i1<1 or i1>999) then res:=5 10 3342 <*linienr ulovligt*> 10 3343 else if a_res=2 or a_res=4 or a_res=5 then 10 3344 begin 11 3345 ia(1):= 11 3346 if a_res=2 then 4 shift 21 +i1 shift 5 11 3347 else if a_res=4 then 4 shift 21 +i1 11 3348 else <* a_res=5 *> 5 shift 21 +i1; 11 3349 end 10 3350 else res:=27; <* parametertype *> 10 3351 if res<4 then pos:= a_pos; 10 3352 end 9 3353 else 9 3354 res:= if nr=2 and a_res<>0 then 24<*syntaks*> 9 3355 else 2;<*godkendt*> 9 3356 end; 8 3357 8 3357 <*4: <ingenting> *> 8 3358 8 3358 begin 9 3359 res:= if a_res<>0 then 24<*syntaks*> 9 3360 else 2;<*godkendt*> 9 3361 end; 8 3362 \f 8 3362 message procedure læs_kommando side 9 - 810226/hko; 8 3363 8 3363 <*5: (<kanalnr>) *> 8 3364 8 3364 begin 9 3365 long field lf; 9 3366 9 3366 if nr=1 then 9 3367 begin 10 3368 if a_res=0 then res:= 25 10 3369 else if a_res<>1 then res:=27<*parametertype*> 10 3370 else 10 3371 begin 11 3372 j:= 0; lf:= 4; 11 3373 for i:= 1 step 1 until max_antal_kanaler do 11 3374 if kanal_navn(i)=værdi.lf then j:= i; 11 3375 if j<>0 then 11 3376 begin 12 3377 ia(1):= 3 shift 22 + j; 12 3378 res:= 2; 12 3379 end 11 3380 else 11 3381 res:= 17; <* kanal ukendt *> 11 3382 end; 10 3383 if res<4 then pos:= a_pos; 10 3384 end 9 3385 else 9 3386 res:=if nr=2 and a_res<>0 then 24<*syntaks*> 9 3387 else 2;<*godkendt*> 9 3388 end; 8 3389 \f 8 3389 message procedure læs_kommando side 10 - 810415/hko; 8 3390 8 3390 <*6: <busnr>/<linie>/<løb> (<område>) *> 8 3391 8 3391 begin 9 3392 if nr=1 then 9 3393 begin 10 3394 if a_res=0 then res:=25<*parameter mangler*> 10 3395 else if a_res=7 then 10 3396 begin 11 3397 ia(1):= i1; 11 3398 ia(2):= 1 shift 22 + værdi(2); 11 3399 end 10 3400 else res:=27;<*parametertype*> 10 3401 if res<4 then pos:= apos; 10 3402 end 9 3403 else 9 3404 if nr=2 then 9 3405 begin 10 3406 if ares=0 then res:= 2 <*godkendt*> else 10 3407 if ares=1 then 10 3408 begin 11 3409 ia(3):= findområde(i1); 11 3410 if ia(3)=0 then res:= 56; <* område ukendt *> 11 3411 end 10 3412 else res:= 27; <*parametertype*> 10 3413 if res<4 then pos:= apos; 10 3414 end 9 3415 else 9 3416 if ares=0 then res:= 2 else res:= 24; 9 3417 end; 8 3418 \f 8 3418 message procedure læs_kommando side 11 - 810512/hko/cl; 8 3419 8 3419 8 3419 <* att_op_længde//2-2 *> 8 3420 <*7: <linienr>.<indeks>:<løbnr> (<interval>.<løb>) *> 8 3421 <* 1 *> 8 3422 8 3422 begin 9 3423 if nr=1 then 9 3424 begin 10 3425 if a_res=0 then res:=25 <*parameter mangler*> 10 3426 else if a_res=8 then 10 3427 begin 11 3428 ia(1):= 4 shift 21 + i1; 11 3429 ia(2):= værdi(2); 11 3430 ia(3):= værdi(3); 11 3431 indeks:= 3; 11 3432 end 10 3433 else res:=27;<*parametertype*> 10 3434 end 9 3435 else if nr<=att_op_længde//2-2 then 9 3436 begin 10 3437 if a_res=0 and (sep=',' or nr>2) then res:=2<*godkendt*> 10 3438 else if a_res=0 then res:=25 <* parameter mangler *> 10 3439 else if a_res=10 then 10 3440 begin 11 3441 if i1>0 and i1<100 and værdi(2)>0 and værdi(2)<100 then 11 3442 begin 12 3443 ia(nr+2):= i1 shift 12 + værdi(2); 12 3444 indeks:= nr +2; 12 3445 end 11 3446 else if i1<1 or i1>99 then res:=44 <*intervalstr. ulovlig*> 11 3447 else res:=6; <*løb-nr ulovligt*> 11 3448 end 10 3449 else res:=27;<*parametertype*> 10 3450 end 9 3451 else 9 3452 res:= if a_res=0 then 2 else 24;<* syntaks *> 9 3453 if res<4 then pos:=a_pos; 9 3454 end; 8 3455 \f 8 3455 message procedure læs_kommando side 12 - 810306/hko; 8 3456 8 3456 <*8: (<operatør>!<radiokanal>!<garageterminal>) *> 8 3457 8 3457 begin 9 3458 if nr=1 then 9 3459 begin 10 3460 if a_res=0 then res:=25 <* parameter mangler *> 10 3461 else if a_res=2 then 10 3462 begin 11 3463 j:=d.op_ref.opkode; 11 3464 ia(1):=i1; 11 3465 k:=(j+1)//2; 11 3466 if k<1 or k=3 or k>4 then 11 3467 fejlreaktion(3<*programfejl*>,j,<:opkode, partype=8:>,1) 11 3468 else 11 3469 begin 12 3470 if k=4 then k:=3; 12 3471 if i1<1 or i1> (case k of 12 3472 (max_antal_operatører,max_antal_radiokanaler, 12 3473 max_antal_garageterminaler)) 12 3474 then res:=case k of (28,29,17); 12 3475 end; 11 3476 end 10 3477 else if a_res=1 and (d.op_ref.opkode+1)//2=1 then 10 3478 begin 11 3479 laf:= 0; 11 3480 ia(1):= find_bpl(værdi.laf(1)); 11 3481 if ia(1)<1 or ia(1)>max_antal_operatører then res:=28; 11 3482 end 10 3483 else res:=27; <*parametertype*> 10 3484 end 9 3485 else 9 3486 if nr=2 and d.opref.opkode=1 then 9 3487 begin 10 3488 <* åbningstilstand for operatørplads *> 10 3489 if a_res=0 then res:= 2 <*godkendt*> 10 3490 else if a_res<>1 then res:= 27 <*parametertype*> 10 3491 else begin 11 3492 res:= 2<*godkendt*>; 11 3493 j:= værdi(1) shift (-16); 11 3494 if j='S' then ia(2):= 3 else 11 3495 if j<>'Å' then res:= 24; <*syntaks*> 11 3496 end; 10 3497 end 9 3498 else 9 3499 begin 10 3500 res:=if a_res=0 then 2 <* godkendt *> 10 3501 else 24;<* syntaks *> 10 3502 end; 9 3503 if res<4 then pos:=a_pos; 9 3504 end; <* partype 8 *> 8 3505 \f 8 3505 message procedure læs_kommando side 13 - 810306/hko; 8 3506 8 3506 8 3506 <* att_op_længde//2 *> 8 3507 <*9: <operatør>((+!-)<linienr>) *> 8 3508 <* 1 *> 8 3509 8 3509 begin 9 3510 if nr=1 then 9 3511 begin 10 3512 if a_res=0 then res:=25 <* parameter mangler *> 10 3513 else if a_res=2 then 10 3514 begin 11 3515 ia(1):=i1; 11 3516 if i1<1 or i1>max_antal_operatører then res:=28; 11 3517 end 10 3518 else if a_res=1 then 10 3519 begin 11 3520 laf:= 0; 11 3521 ia(1):= find_bpl(værdi.laf(1)); 11 3522 if ia(1)<1 or ia(1)>max_antal_operatører then res:=28; 11 3523 end 10 3524 else res:=27; <* parametertype *> 10 3525 end 9 3526 else if nr<=att_op_længde//2 then 9 3527 begin <* nr>1 *> 10 3528 if a_res=0 then res:=(if nr>2 then 2 else 25) 10 3529 else if a_res=2 or a_res=3 then 10 3530 begin 11 3531 ia(nr):=i1; indeks:= nr; 11 3532 if i1=0 or abs(i1)>999 then res:=5; 11 3533 end 10 3534 else res:=27; <* parametertype *> 10 3535 if res<4 then pos:=a_pos; 10 3536 end 9 3537 else 9 3538 res:=if a_res<>0 then 24 <* syntaks (for mange parametre) *> 9 3539 else 2; 9 3540 end; <* partype 9 *> 8 3541 \f 8 3541 message procedure læs_kommando side 14 - 810428/hko; 8 3542 8 3542 <* 2 *> 8 3543 <*10: (bus) *> 8 3544 <* 1 *> 8 3545 8 3545 begin 9 3546 if a_res=0 and nr=1 then res:=25 <* parameter mangler *> 9 3547 else if a_res<>0 and nr>2 then res:=24 <* syntaks (for mange) *> 9 3548 else if a_res=0 then res:=2 <* godkendt *> 9 3549 else if a_res<>2 then res:=27 <* parametertype *> 9 3550 else if i1<1 or i1>9999 then res:=7 <*ulovligt busnr *> 9 3551 else 9 3552 ia(nr):=i1; 9 3553 end; 8 3554 8 3554 <* 5 *> 8 3555 <*11: (<linie>) *> 8 3556 <* 1 *> 8 3557 8 3557 begin 9 3558 if a_res=0 and nr=1 then res:=25 9 3559 else if a_res<>0 and nr>5 then res:=24 9 3560 else if a_res=0 then res:=2 9 3561 else if a_res<>2 and a_res<>4 then res:=27 9 3562 else if a_res=2 and (i1<1 or i1>999) then res:=5 <* ulovl.linie *> 9 3563 else 9 3564 ia(nr):= 9 3565 (if a_res=4 then i1 else i1 shift 5) + 4 shift 21; 9 3566 end; 8 3567 \f 8 3567 message procedure læs_kommando side 15 - 810306/hko; 8 3568 8 3568 <*12: (<ingenting>!<navn>) *> 8 3569 8 3569 begin 9 3570 if nr=1 then 9 3571 begin 10 3572 if a_res=0 then res:=2 <*godkendt*> 10 3573 else if a_res=1 then 10 3574 tofrom(ia,værdi,8) 10 3575 else res:=27; <* parametertype *> 10 3576 end 9 3577 else 9 3578 res:=if a_res<>0 then 24 <* syntaks (for mange) *> 9 3579 else 2; 9 3580 end; <* partype 12 *> 8 3581 \f 8 3581 message procedure læs_kommando side 16 - 810512/hko/cl; 8 3582 8 3582 <* 15 *> 8 3583 <*13: G<grp.nr>:(<bus>!<linie>/<løb>) (<bus>!<linie>/<løb>) *> 8 3584 <* 1 *> 8 3585 8 3585 begin 9 3586 if nr=1 then 9 3587 begin 10 3588 if a_res=0 then res:=25 <* parameter mangler *> 10 3589 else 10 3590 if a_res=11 then 10 3591 begin 11 3592 ia(1):= 5 shift 21 + i1; 11 3593 ia(2):=værdi(2); 11 3594 indeks:= 2; 11 3595 end 10 3596 else res:=27; <* parametertype *> 10 3597 end 9 3598 else if nr<= att_op_længde//2-1 then 9 3599 begin 10 3600 if a_res=0 and(sep=',' or nr>2)then res:=2 <* godkendt *> 10 3601 else if a_res=0 then res:=25 <* parameter mangler *> 10 3602 else if ares=2 and (i1<1 or i1>9999) then 10 3603 res:= 7 <*busnr ulovligt*> 10 3604 else if a_res=2 or a_res=6 then 10 3605 begin 11 3606 ia(nr+1):=i1+ (if a_res=6 then 1 shift 22 else 0); 11 3607 indeks:= nr+1; 11 3608 end 10 3609 else res:=27; <* parametertype *> 10 3610 end 9 3611 else 9 3612 res:=if a_res=0 then 2 <*godkendt *> 9 3613 else 24;<* syntaks *> 9 3614 if res<4 then pos:=a_pos; 9 3615 end; <* partype 13 *> 8 3616 \f 8 3616 message procedure læs_kommando side 17 - 810311/hko; 8 3617 8 3617 <*14: <linie>.<indeks> *> 8 3618 8 3618 begin 9 3619 if nr=1 then 9 3620 begin 10 3621 if a_res=0 then res:=25 <* parameter mangler *> 10 3622 else if a_res=9 then 10 3623 begin 11 3624 ia(1):= 1 shift 23 +i1; 11 3625 ia(2):= værdi(2); 11 3626 end 10 3627 else res:=27; <* parametertype *> 10 3628 end 9 3629 else <* nr>1 *> 9 3630 res:= if a_res=0 then 2 <* godkendt *> 9 3631 else 24;<* syntaks *> 9 3632 end; <* partype 14 *> 8 3633 \f 8 3633 message procedure læs_kommando side 18 - 810313/hko; 8 3634 8 3634 <*15: <linie>.<indeks> <bus> *> 8 3635 8 3635 begin 9 3636 if nr=1 then 9 3637 begin 10 3638 if a_res=0 then res:= 25 <* parameter mangler *> 10 3639 else if a_res=9 then 10 3640 begin 11 3641 ia(1):= 1 shift 23 +i1; 11 3642 ia(2):= værdi(2); 11 3643 end 10 3644 else res:=27; <* parametertype *> 10 3645 end 9 3646 else if nr=2 then 9 3647 begin 10 3648 if a_res=0 then res:=25 10 3649 else if a_res=2 then 10 3650 begin 11 3651 if i1<1 or i1>9999 then res:=7 <* ulovligt busnr *> 11 3652 else ia(3):= i1; 11 3653 end 10 3654 else res:=27; <*parametertype *> 10 3655 end 9 3656 else 9 3657 res:=if a_res=0 then 2 <* godkendt *> 9 3658 else 24;<* syntaks *> 9 3659 if res<4 then pos:=a_pos; 9 3660 end; <* partype 15 *> 8 3661 \f 8 3661 message procedure læs_kommando side 19 - 810311/hko; 8 3662 8 3662 <*16: (<ingenting>!D.<dato>.<klokkeslet> *> 8 3663 8 3663 begin 9 3664 if nr=1 then 9 3665 begin 10 3666 if a_res=0 then res:=2 <* godkendt *> 10 3667 else if a_res=12 then 10 3668 begin 11 3669 raf:=0; 11 3670 ia.raf(1):= systid(i1,værdi(2)); 11 3671 end 10 3672 else res:=27; <* parametertype *> 10 3673 end 9 3674 else 9 3675 res:= if a_res=0 then 2 <* godkendt *> 9 3676 else 24;<* syntaks *> 9 3677 if res<4 then pos:=a_pos; 9 3678 end; <* partype 16 *> 8 3679 \f 8 3679 message procedure læs_kommando side 20 - 810511/hko; 8 3680 8 3680 <*17: G<grp.nr> *> 8 3681 8 3681 begin 9 3682 if nr=1 then 9 3683 begin 10 3684 if a_res=0 then res:=25 <*parameter mangler *> 10 3685 else if a_res=5 then 10 3686 begin 11 3687 ia(1):= 5 shift 21 +i1; 11 3688 end 10 3689 else res:=27; <* parametertype *> 10 3690 end 9 3691 else 9 3692 res:= if a_res=0 then 2 <* godkendt *> 9 3693 else 24;<* syntaks *> 9 3694 end; <* partype 17 *> 8 3695 8 3695 <* att_op_længde//2 *> 8 3696 <*18: (<heltal>) *> 8 3697 <* 1 *> 8 3698 8 3698 begin 9 3699 if nr=1 and a_res=0 then res:= 25 <*parameter mangler*> 9 3700 else 9 3701 if nr<=att_op_længde//2 then 9 3702 begin 10 3703 if a_res=2 or a_res=3 <* pos/neg heltal *> then 10 3704 begin 11 3705 ia(nr):= i1; indeks:= nr; 11 3706 end 10 3707 else if a_res=0 then res:= 2 10 3708 else res:= 27; <*parametertype*> 10 3709 end 9 3710 else 9 3711 res:= if a_res=0 then 2 else 24;<*syntaks (for mange)*> 9 3712 end; 8 3713 \f 8 3713 message procedure læs_kommando side 21 - 820302/cl; 8 3714 8 3714 <*19: <linie>/<løb> <linie>/<løb> *> 8 3715 8 3715 begin 9 3716 if nr<3 and a_res=0 then res:= 25 <*parameter mangler*> 9 3717 else if nr<3 and a_res<>6 then res:= 27 <*parametertype*> 9 3718 else if nr<3 then 9 3719 begin 10 3720 ia(nr):=i1 + 1 shift 22; 10 3721 end 9 3722 else 9 3723 res:= if a_res=0 then 2 <*godkendt*> 9 3724 else 24;<*syntaks (for mange)*> 9 3725 if res<4 then pos:= a_pos; 9 3726 end; <* partype 19 *> 8 3727 8 3727 <*20: <busnr> <kortnavn> *> 8 3728 begin 9 3729 if nr=1 then 9 3730 begin 10 3731 if ares=0 then res:= 25 else 10 3732 if ares=2 and (i1<1 or 9999<i1) then res:= 24 else 10 3733 if ares<>2 then res:= 27 else ia(1):= i1; 10 3734 end 9 3735 else 9 3736 if nr=2 then 9 3737 begin 10 3738 if ares=1 and værdi(2) extract 8 = 0 then 10 3739 begin 11 3740 ia(2):= værdi(1); ia(3):= værdi(2); 11 3741 end 10 3742 else res:= if ares=0 then 25 else if ares=1 then 62 else 27; 10 3743 end 9 3744 else 9 3745 if ares=0 then res:= 2 else res:= 24; 9 3746 end; <* partype 20 *> 8 3747 \f 8 3747 message procedure læs_kommando side 22 - 851001/cl; 8 3748 8 3748 <* 2 *> 8 3749 <*21: ( <linie> ) (<garage> ! OMR (ALL ! <område>)) *> 8 3750 <* 0 *> 8 3751 8 3751 begin 9 3752 laf:= 0; 9 3753 if nr=1 and a_res=0 then res:= 25 <*parameter mangler*> 9 3754 else if a_res=0 and (ia(3)=-2 or ia(3)=0) then res:= 25 9 3755 else if a_res<>0 and nr>4 then res:= 24 <*syntaks (for mange)*> 9 3756 else if a_res=0 then res:= 2 <*godkendt*> 9 3757 else if a_res=2 and (i1<1 or i1>999) then res:= 5 <*ulovligt*> 9 3758 else if (a_res=2 or a_res=4) and nr<=2 then 9 3759 begin 10 3760 if ia(3)<>0 then res:= 27 else 10 3761 ia(nr):= (4 shift 21) + (if a_res=2 then i1 shift 5 else i1); 10 3762 end 9 3763 else 9 3764 if ares=1 then 9 3765 begin 10 3766 if nr=1 then 10 3767 begin 11 3768 ia(1):= (4 shift 21) + (1 shift 5); 11 3769 ia(2):= (4 shift 21) + (999 shift 5); 11 3770 end; 10 3771 if ia(3)=-2 then 10 3772 begin 11 3773 if i1=long<:ALL:> shift (-24) extract 24 then 11 3774 ia(3):= -1 11 3775 else 11 3776 begin 12 3777 ia(3):= findområde(i1); 12 3778 if ia(3)=0 then res:= 56 else 12 3779 ia(3):= 14 shift 20 + ia(3); 12 3780 end; 11 3781 end 10 3782 else 10 3783 if ia(3) = 0 then 10 3784 begin 11 3785 if i1 = long<:OMR:> shift (-24) extract (24) then 11 3786 ia(3):= -2 11 3787 else 11 3788 ia(3):= find_bpl(værdi.laf(1)); 11 3789 if ia(3)=0 then res:= 55; 11 3790 end 10 3791 else res:= 24; 10 3792 end 9 3793 else res:= 27; <*parametertype*> 9 3794 if res<4 then pos:= apos; 9 3795 end; 8 3796 8 3796 <*22: (<busnr> (<område) ! <linie>/<løb> (<område>) ) *> 8 3797 8 3797 begin 9 3798 if nr=1 then 9 3799 begin 10 3800 if ares=0 then res:= 25 <*parameter mangler*> 10 3801 else if ares=2 and (i1<1 or i1>9999) 10 3802 then res:= 7 <* busnr ulovligt *> 10 3803 else if ares=2 or ares=6 then 10 3804 begin 11 3805 ia(1):= if ares=2 then i1 else 1 shift 22 + i1; 11 3806 end 10 3807 else res:= 27 <* parametertype *> 10 3808 end 9 3809 else 9 3810 if nr=2 then 9 3811 begin 10 3812 if ares=0 then res:= 2 <* godkendt *> 10 3813 else if ares=1 then 10 3814 begin 11 3815 ia(2):= findområde(i1); 11 3816 if ia(2)=0 then res:= 17 <*kanal ukendt*> 11 3817 end 10 3818 else 10 3819 res:= 27; <* parametertype *> 10 3820 end 9 3821 else if ares=0 then res:= 2 <*godkendt*> 9 3822 else res:= 24; <*syntaks*> 9 3823 if res < 4 then pos:= apos; 9 3824 end; 8 3825 8 3825 <*23: ( <linie> (<område>) ! G<nr> (<område>) ) *> 8 3826 8 3826 begin 9 3827 if nr=1 then 9 3828 begin 10 3829 if ares=0 then res:= 25 else 10 3830 if ares=2 and (i1<1 or i1>999) then res:= 5 else 10 3831 if ares=2 or ares=4 or ares=5 then 10 3832 begin 11 3833 ia(1):= 11 3834 if ares=2 then 4 shift 21 + i1 shift 5 else 11 3835 if ares=4 then 4 shift 21 + i1 else 11 3836 5 shift 21 + i1; 11 3837 end 10 3838 else res:= 27; 10 3839 if res < 4 then pos:= apos; 10 3840 end 9 3841 else 9 3842 if nr=2 then 9 3843 begin 10 3844 if ares=0 then res:= 2 else 10 3845 if ares=1 then 10 3846 begin 11 3847 ia(2):= findområde(i1); 11 3848 if ia(2)=0 then res:= 17; 11 3849 end 10 3850 else res:= 27; 10 3851 end 9 3852 else 9 3853 if ares=0 then res:= 2 else res:= 24; 9 3854 end; 8 3855 8 3855 <*24: ( <ingenting> ! <område> ! * ) *> 8 3856 8 3856 begin 9 3857 if nr=1 then 9 3858 begin 10 3859 if ares=0 then res:= 2 else 10 3860 if ares=1 then 10 3861 begin 11 3862 if i1=long<:ALL:> shift (-24) extract 24 then 11 3863 ia(1):= (-1) shift (-3) shift 3 11 3864 else 11 3865 begin 12 3866 k:= findområde(i1); 12 3867 if k=0 then res:= 17 else 12 3868 ia(1):= 14 shift 20 + k; 12 3869 end; 11 3870 end 10 3871 else res:= 27; 10 3872 end 9 3873 else 9 3874 if ares=0 then res:= 2 else res:= 24; 9 3875 if res < 4 then pos:= apos; 9 3876 end; 8 3877 8 3877 <*25: <område> *> 8 3878 8 3878 begin 9 3879 if nr=1 then 9 3880 begin 10 3881 if ares=0 then res:= 25 else 10 3882 if ares=1 then 10 3883 begin 11 3884 if i1 = '*' shift 16 then ia(1):= -1 else 11 3885 ia(1):= findområde(i1); 11 3886 if ia(1)=0 then res:= 17; 11 3887 end 10 3888 else res:= 27; 10 3889 end 9 3890 else 9 3891 if ares=0 then res:= 2 else res:= 24; 9 3892 if res < 4 then pos:= apos; 9 3893 end; 8 3894 8 3894 <*26: <busnr> *> 8 3895 begin 9 3896 if nr=1 then 9 3897 begin 10 3898 if ares=0 then res:= 25 else 10 3899 if ares=2 and (i1<1 or 9999<i1) then res:= 24 else 10 3900 if ares<>2 then res:= 27 else ia(1):= i1; 10 3901 end 9 3902 else 9 3903 if ares=0 then res:= 2 else res:= 24; 9 3904 end; 8 3905 8 3905 <* 8 *> 8 3906 <*27: <operatørnr> (<område>) *> 8 3907 <* 1 *> 8 3908 begin 9 3909 if nr < 3 and a_res=0 then res:= 25 <*parameter mangler*> 9 3910 else if nr=1 then 9 3911 begin 10 3912 if a_res=2 then 10 3913 begin 11 3914 ia(1):= i1; 11 3915 if i1 < 0 or max_antal_operatører < i1 then res:= 28; 11 3916 end 10 3917 else if a_res=1 then 10 3918 begin 11 3919 laf:= 0; 11 3920 ia(1):= find_bpl(værdi.laf(1)); 11 3921 if ia(1)<1 or ia(1)>max_antal_operatører then res:=28; 11 3922 end 10 3923 else res:= 27; <*parametertype*> 10 3924 end 9 3925 else 9 3926 begin 10 3927 if a_res=0 then res:= (if nr > 2 then 2 else 25) 10 3928 else if nr > 9 then res:= 24 10 3929 else if a_res=1 then 10 3930 begin 11 3931 ia(nr):= find_område(i1); 11 3932 indeks:= nr; 11 3933 if ia(nr)=0 then res:= 56; 11 3934 end 10 3935 else res:= 27; 10 3936 end; 9 3937 if res < 4 then pos:= a_pos; 9 3938 end <* partype 27 *>; 8 3939 8 3939 <*28: (<ingenting>!<kanalnr>) *> 8 3940 begin 9 3941 long field lf; 9 3942 9 3942 if nr=1 then 9 3943 begin 10 3944 if ares=0 then res:= 2 else 10 3945 if ares=1 then 10 3946 begin 11 3947 j:= 0; lf:= 4; 11 3948 for i:= 1 step 1 until max_antal_kanaler do 11 3949 if kanal_navn(i)=værdi.lf then j:= i; 11 3950 if j<>0 then 11 3951 begin 12 3952 ia(1):= 3 shift 22 + j; 12 3953 res:= 2; 12 3954 end 11 3955 else 11 3956 res:= 17; <*kanal ukendt*> 11 3957 end 10 3958 else 10 3959 res:= 27; <*parametertype*> 10 3960 if res < 4 then pos:= apos; 10 3961 end 9 3962 else 9 3963 res:= if nr=2 and ares<>0 then 24 <*syntaks*> else 2 <*ok*>; 9 3964 end; 8 3965 8 3965 <* n *> 8 3966 <*29: <btj.pl.navn> ( <operatørnavn>) *> 8 3967 <* 0 *> 8 3968 begin 9 3969 laf:= 0; 9 3970 if nr=1 then 9 3971 begin 10 3972 if a_res=0 then res:= 25 <*parameter mangler*> 10 3973 else if a_res<>1 or værdi(2) extract 8 <>0 then res:= 27 10 3974 else begin 11 3975 indeks:= 2; 11 3976 ia(1):= værdi(1); ia(2):= værdi(2); 11 3977 j:= find_bpl(værdi.laf(1)); 11 3978 if 0<j and j<=max_antal_operatører then 11 3979 res:= 62; <*ulovligt navn*> 11 3980 end; 10 3981 end 9 3982 else 9 3983 begin 10 3984 if a_res=0 then res:= 2 <*godkendt*> 10 3985 else if a_res<>1 then res:= 27 <*parametertype*> 10 3986 else begin 11 3987 indeks:= indeks+1; 11 3988 ia(indeks):= find_bpl(værdi.laf(1)); 11 3989 if ia(indeks)=0 or ia(indeks)>max_antal_operatører then 11 3990 res:= 28; <*ukendt operatør*> 11 3991 end; 10 3992 end; 9 3993 if res<4 then pos:= a_pos; 9 3994 end; 8 3995 8 3995 <* 3 *> 8 3996 <*30: (<operatørnavn>) ( <btj.pl.navn>) *> 8 3997 <* io 0 *> 8 3998 8 3998 begin 9 3999 boolean io; 9 4000 9 4000 io:= (kilde//100 = 1); 9 4001 laf:= 0; 9 4002 if -,io and nr=1 then 9 4003 begin 10 4004 indeks:= 1; 10 4005 ia(1):= kilde mod 100; <*egen operatørplads*> 10 4006 end; 9 4007 9 4007 if io and nr=1 then 9 4008 begin 10 4009 if a_res=0 then res:= 25 <*parameter mangler*> 10 4010 else if a_res<>1 then res:= 27 <*parametertype*> 10 4011 else begin 11 4012 indeks:= nr; 11 4013 ia(indeks):= find_bpl(værdi.laf(1)); 11 4014 if ia(indeks)=0 or ia(indeks)>max_antal_operatører then 11 4015 res:= 28; <*ukendt operatør*> 11 4016 end; 10 4017 end 9 4018 else 9 4019 begin 10 4020 if a_res=0 then res:= 2<*godkendt*> 10 4021 else if indeks=4 then res:= 24 <*syntaks, for mange*> 10 4022 else if a_res<>1 then res:= 27 <*parametertype*> 10 4023 else begin 11 4024 indeks:= indeks+1; 11 4025 ia(indeks):= find_bpl(værdi.laf(1)); 11 4026 if ia(indeks)=0 then res:= 46 <*navn ukendt*> 11 4027 else if ia(indeks)=ia(1) then res:= 62; <*ulovligt navn*> 11 4028 end; 10 4029 end; 9 4030 if res<4 then pos:= a_pos; 9 4031 end; 8 4032 8 4032 <* *> 8 4033 <*31: <operatørnr> ( <navn> (<ingenting>!Å!S) ) *> 8 4034 <* *> 8 4035 8 4035 begin 9 4036 laf:= 0; 9 4037 if nr<2 and a_res=0 then res:= 25 <*parameter mangler*> 9 4038 else 9 4039 if nr=1 then 9 4040 begin 10 4041 if a_res=2 then 10 4042 begin 11 4043 ia(1):= i1; 11 4044 if i1<=0 or max_antal_operatører<i1 then res:= 28; <*ukendt*> 11 4045 end else res:= 27; <*parametertype*> 10 4046 end 9 4047 else 9 4048 if nr=2 then 9 4049 begin 10 4050 if a_res=1 and værdi(2) extract 8 = 0 then 10 4051 begin 11 4052 ia(2):= værdi(1); ia(3):= værdi(2); 11 4053 j:= find_bpl(værdi.laf(1)); 11 4054 if j>0 and j<>ia(1) then res:= 48 <*i brug*>; 11 4055 end 10 4056 else res:= if a_res=0 then 2 <*godkendt*> 10 4057 else 27 <*parametertype*>; 10 4058 end 9 4059 else 9 4060 if nr=3 then 9 4061 begin 10 4062 if a_res=0 then res:=2 <*godkendt*> 10 4063 else if a_res<>1 then res:= 27 <*parametertype*> 10 4064 else begin 11 4065 j:= værdi(1) shift (-16); 11 4066 if j='Å' then ia(4):= 1 else 11 4067 if j='S' then ia(4):= 3 else res:= 24 <*syntaks*>; 11 4068 end; 10 4069 end 9 4070 else res:= if a_res=0 then 2 <*godkendt*> else 24 <*syntaks*>; 9 4071 if res<4 then pos:= a_pos; 9 4072 end; 8 4073 8 4073 <* 1 *> 8 4074 <*32: (heltal) *> 8 4075 <* 0 *> 8 4076 begin 9 4077 if nr=1 then 9 4078 begin 10 4079 if ares=0 then 10 4080 begin 11 4081 indeks:= 0; res:= 2; 11 4082 end 10 4083 else 10 4084 if ares=2 or ares=3 then 10 4085 begin 11 4086 ia(nr):= i1; indeks:= nr; 11 4087 end 10 4088 else res:=27; <*parametertype*> 10 4089 end 9 4090 else 9 4091 res:= (if ares<>0 then 24 <*syntaks, for mange*> else 2); 9 4092 if res < 4 then pos:= a_pos; 9 4093 end; 8 4094 8 4094 <*33 generel tekst*> 8 4095 begin 9 4096 integer p,p1,ch,lgd; 9 4097 9 4097 if nr=1 and a_res<>0 then 9 4098 begin 10 4099 p:=pos; p1:=1; 10 4100 lgd:= (op_spool_postlgd-op_spool_text)//2*3-1; 10 4101 if 95<lgd then lgd:=95; 10 4102 repeat læstegn(d.opref.data,p,ch) until ch<>' '; 10 4103 while ch<>'nl' and ch<>'em' and ch<>0 and p1<lgd do 10 4104 begin 11 4105 skrivtegn(ia,p1,ch); 11 4106 læstegn(d.opref.data,p,ch); 11 4107 end; 10 4108 if p1=1 then res:= 25 else res:= 2; 10 4109 repeat skrivtegn(ia,p1,0) until (p1 mod 6)=1; 10 4110 end 9 4111 else 9 4112 if a_res=0 then res:= 25 else res:= 24; 9 4113 end; 8 4114 8 4114 <*34: (heltal) *> 8 4115 begin 9 4116 if nr=1 then 9 4117 begin 10 4118 if ares=0 then res:= 25 else 10 4119 if ares=2 or ares=3 then 10 4120 begin 11 4121 ia(nr):= i1; indeks:= nr; 11 4122 end 10 4123 else res:=27; <*parametertype*> 10 4124 end 9 4125 else 9 4126 res:= (if ares<>0 then 24 <*syntaks, for mange*> else 2); 9 4127 if res < 4 then pos:= a_pos; 9 4128 end; 8 4129 8 4129 <*+4*> begin 9 4130 fejlreaktion(4<*systemfejl*>,partype, 9 4131 <:parametertype fejl i kommandofil:>,1); 9 4132 res:=31; 9 4133 end 8 4134 <*-4*> 8 4135 end;<*case partype*> 7 4136 end;<* while læs_param_sæt *> 6 4137 end; <* operationskode ok *> 5 4138 end 4 4139 else 4 4140 begin 5 4141 fejlreaktion(3<*programfejl*>,kilde,<:kilde:>,1); 5 4142 end; 4 4143 4 4143 if a_res<0 then res:= -a_res; 4 4144 slut_læskommando: 4 4145 4 4145 læs_kommando:=d.op_ref.resultat:= res; 4 4146 end;<* disable-blok*> 3 4147 end læs_kommando; 2 4148 \f 2 4148 message procedure skriv_kvittering side 1 - 820301/hko/cl; 2 4149 2 4149 procedure skriv_kvittering(z,ref,pos,res); 2 4150 value ref,pos,res; 2 4151 zone z; 2 4152 integer ref,pos,res; 2 4153 begin 3 4154 integer array field op; 3 4155 integer pos1,tegn; 3 4156 op:=ref; 3 4157 if res<1 or res>3 then write(z,<:*** :>); 3 4158 write(z,case res+1 of ( 3 4159 <* 0*><:ubehandlet:>, 3 4160 <* 1*><:ok:>, 3 4161 <* 2*><:godkendt:>, 3 4162 <* 3*><:udført:>, 3 4163 <* 4*><:kommando ukendt:>, 3 4164 3 4164 <* 5*><:linie-nr ulovligt:>, 3 4165 <* 6*><:løb-nr ulovligt:>, 3 4166 <* 7*><:bus-nr ulovligt:>, 3 4167 <* 8*><:gruppe ukendt:>, 3 4168 <* 9*><:linie/løb ukendt:>, 3 4169 3 4169 <*10*><:bus-nr ukendt:>, 3 4170 <*11*><:bus allerede indsat på :>, 3 4171 <*12*><:linie/løb allerede besat af :>, 3 4172 <*13*><:bus ikke indsat:>, 3 4173 <*14*><:bus optaget:>, 3 4174 3 4174 <*15*><:gruppe optaget:>, 3 4175 <*16*><:skærm optaget:>, 3 4176 <*17*><:kanal ukendt:>, 3 4177 <*18*><:bus i kø:>, 3 4178 <*19*><:kø er tom:>, 3 4179 3 4179 <*20*><:ej forbindelse :>, 3 4180 <*21*><:ingen at gennemstille til:>, 3 4181 <*22*><:ingen samtale at nedlægge:>, 3 4182 <*23*><:ingen samtale at monitere:>, 3 4183 <*24*><:syntaks:>, 3 4184 3 4184 <*25*><:syntaks, parameter mangler:>, 3 4185 <*26*><:syntaks, skilletegn:>, 3 4186 <*27*><:syntaks, parametertype:>, 3 4187 <*28*><:operatør ukendt:>, 3 4188 <*29*><:garageterminal ukendt:>, 3 4189 \f 3 4189 3 4189 <*30*><:rapport kan ikke dannes:>, 3 4190 <*31*><:systemfejl:>, 3 4191 <*32*><:ingen fri plads:>, 3 4192 <*33*><:gruppe for stor:>, 3 4193 <*34*><:gruppe allerede defineret:>, 3 4194 3 4194 <*35*><:springsekvens for stor:>, 3 4195 <*36*><:spring allerede defineret:>, 3 4196 <*37*><:spring ukendt:>, 3 4197 <*38*><:spring allerede igangsat:>, 3 4198 <*39*><:bus ikke reserveret:>, 3 4199 3 4199 <*40*><:gruppe ikke reserveret:>, 3 4200 <*41*><:spring ikke igangsat:>, 3 4201 <*42*><:intet frit linie/løb:>, 3 4202 <*43*><:ændring af dato/tid ikke lovlig:>, 3 4203 <*44*><:interval-størrelse ulovlig:>, 3 4204 3 4204 <*45*><:ikke implementeret:>, 3 4205 <*46*><:navn ukendt:>, 3 4206 <*47*><:forkert indhold:>, 3 4207 <*48*><:i brug:>, 3 4208 <*49*><:ingen samtale igang:>, 3 4209 3 4209 <*50*><:kanal:>, 3 4210 <*51*><:afvist:>, 3 4211 <*52*><:kanal optaget :>, 3 4212 <*53*><:annulleret:>, 3 4213 <*54*><:ingen busser at kalde op:>, 3 4214 3 4214 <*55*><:garagenavn ukendt:>, 3 4215 <*56*><:område ukendt:>, 3 4216 <*57*><:område nødvendigt:>, 3 4217 <*58*><:ulovligt område for bus:>, 3 4218 <*59*><:radiofejl :>, 3 4219 3 4219 <*60*><:område kan ikke opdateres:>, 3 4220 <*61*><:ingen talevej:>, 3 4221 <*62*><:ulovligt navn:>, 3 4222 <*63*><:alarmlængde: :>, 3 4223 <*64*><:ulovligt tal:>, 3 4224 3 4224 <*99*><:- <'?'> -:>)); 3 4225 \f 3 4225 message procedure skriv_kvittering side 3 - 820301/hko; 3 4226 if res=3 and op<>0 then 3 4227 begin 4 4228 if d.op.opkode=20 or d.op.opkode=11 then <*vogntabel,flyt -,indsæt*> 4 4229 begin 5 4230 i:= d.op.data(if d.op.opkode=20 then 4 else 3) extract 14; 5 4231 if i<>0 then write(z,i,<: udtaget:>); 5 4232 end; 4 4233 end; 3 4234 if res = 11 or res = 12 then 3 4235 i:=ref; 3 4236 if res=11 then write(z,i shift(-12) extract 10, 3 4237 if i shift(-7) extract 5 =0 then false 3 4238 else "A" add (i shift(-7) extract 5 -1),1, 3 4239 <:/:>,<<d>,i extract 7) else 3 4240 if res=12 then write(z,i extract 14) else 3 4241 if res = 20 or res = 52 or res = 59 then 3 4242 begin 4 4243 i:= d.op.data(12); 4 4244 if i <> 0 then skriv_id(z,i,8); 4 4245 i:=d.op.data(2); 4 4246 if i=0 then i:=d.op.data(9); 4 4247 if i=0 then i:=d.op.data(8); 4 4248 skriv_id(z,i,8); 4 4249 end; 3 4250 if res=63 then 3 4251 begin 4 4252 i:= ref; 4 4253 if i<0 then write(z,<:uendelig:>) else write(z,<<d>,i,<: sek.:>); 4 4254 end; 3 4255 3 4255 if pos>=0 then 3 4256 begin 4 4257 pos:=pos+1; 4 4258 outchar(z,':'); 4 4259 tegn:=-1; 4 4260 while tegn<>10 and tegn<>0 do 4 4261 outchar(z,læs_tegn(d.op.data,pos,tegn)); 4 4262 end; 3 4263 <*V*>setposition(z,0,0); 3 4264 end skriv_kvittering; 2 4265 \f 2 4265 message procedure cursor, side 1 - 810213/hko; 2 4266 2 4266 procedure cursor(z,linie,pos); 2 4267 value linie,pos; 2 4268 zone z; 2 4269 integer linie,pos; 2 4270 begin 3 4271 if linie>0 and linie<25 3 4272 and pos>0 and pos<81 then 3 4273 begin 4 4274 write(z,"esc" add 128,1,<:Æ:>, 4 4275 <<d>,linie,<:;:>,pos,<:H:>); 4 4276 end; 3 4277 end cursor; 2 4278 \f 2 4278 message procedure attention side 1 - 810529/hko; 2 4279 2 4279 procedure attention; 2 4280 begin 3 4281 integer i, j, k; 3 4282 integer array field op_ref,mess_ref; 3 4283 integer array att_message(1:9); 3 4284 long array field laf1, laf2; 3 4285 boolean optaget; 3 4286 procedure skriv_attention(zud,omfang); 3 4287 integer omfang; 3 4288 zone zud; 3 4289 begin 4 4290 write(zud,"nl",1,<:+++ attention :>); 4 4291 if omfang <> 0 then 4 4292 disable begin integer x; 5 4293 trap(slut); 5 4294 write(zud,"nl",1, 5 4295 <: i: :>,i,"nl",1, 5 4296 <: j: :>,j,"nl",1, 5 4297 <: k: :>,k,"nl",1, 5 4298 <: op-ref: :>,op_ref,"nl",1, 5 4299 <: mess-ref: :>,mess_ref,"nl",1, 5 4300 <: optaget: :>,if optaget then <:true:>else<:false:>,"nl",1, 5 4301 <: laf2 :>,laf2,"nl",1, 5 4302 <: att-message::>,"nl",1, 5 4303 <::>); 5 4304 raf:= 0; 5 4305 skriv_hele(zud,att_message.raf,18,127); 5 4306 skriv_coru(zud,coru_no(010)); 5 4307 slut: 5 4308 end; 4 4309 end skriv_attention; 3 4310 3 4310 integer procedure udtag_tal(tekst,pos); 3 4311 long array tekst; 3 4312 integer pos; 3 4313 begin 4 4314 integer i; 4 4315 4 4315 if getnumber(tekst,pos,i) >= 0 then 4 4316 udtag_tal:= i 4 4317 else 4 4318 udtag_tal:= 0; 4 4319 end; 3 4320 3 4320 for i:= 1 step 1 until att_maske_lgd//2 do 3 4321 att_signal(i):=att_flag(i):=0; 3 4322 trap(att_trap); 3 4323 stack_claim((if cm_test then 198 else 146)+50); 3 4324 <*+2*> 3 4325 if testbit26 and overvåget or testbit28 then 3 4326 skriv_attention(out,0); 3 4327 <*-2*> 3 4328 \f 3 4328 message procedure attention side 2 - 810406/hko; 3 4329 3 4329 repeat 3 4330 3 4330 wait_ch(cs_att_pulje,opref,true,-1<*vent ubegrænset*>); 3 4331 3 4331 repeat 3 4332 <*V*> c_wait_message(att_proc_ref,att_message,mess_ref,-1<*vent ubegrænset*>); 3 4333 raf:= laf1:= 0; 3 4334 laf:=core.mess_ref(4)+2; <* reference til sender-procesnavn *> 3 4335 3 4335 <*+2*>if testbit7 and overvåget then 3 4336 disable begin 4 4337 laf2:= abs(laf); 4 4338 write(out,"nl",1,<:attention - :>); 4 4339 if laf<=0 then write(out,<:Regrettet :>); 4 4340 write(out,<:Message modtaget fra :>); 4 4341 if laf2 > 0 then write(out,core.laf2) else write(out,<:???:>); 4 4342 skriv_hele(out,att_message.raf,16,127); 4 4343 ud; 4 4344 end; 3 4345 <*-2*> 3 4346 \f 3 4346 message procedure attention side 3 - 830310/cl; 3 4347 3 4347 if laf <= 0 then 3 4348 i:= -1 3 4349 else 3 4350 if core.laf(1)=konsol_navn.laf1(1) 3 4351 and core.laf(2)=konsol_navn.laf1(2) then 3 4352 i:= 101 3 4353 else 3 4354 begin 4 4355 i:= -1; j:= 1; 4 4356 while i=(-1) and (j <= max_antal_operatører) do 4 4357 begin 5 4358 laf2:= (j-1)*8; 5 4359 if core.laf(1) = terminal_navn.laf2(1) 5 4360 and core.laf(2) = terminal_navn.laf2(2) then i:= 200+j; 5 4361 j:= j+1; 5 4362 end; 4 4363 j:= 1; 4 4364 while i=(-1) and (j<=max_antal_garageterminaler) do 4 4365 begin 5 4366 laf2:= (j-1)*8; 5 4367 if core.laf(1) = garage_terminal_navn.laf2(1) 5 4368 and core.laf(2) = garage_terminal_navn.laf2(2) then i:= 300+j; 5 4369 j:= j+1; 5 4370 end; 4 4371 end; 3 4372 3 4372 if i=101 or (201<=i and i<=200+max_antal_operatører) 3 4373 <* or (301<=i and i<=300+max_antal_garageterminaler) *> 3 4374 then 3 4375 begin 4 4376 4 4376 j:= if i=101 then 0 4 4377 else max_antal_operatører*(i//100-2)+i mod 100; 4 4378 4 4378 ref:=j*terminal_beskr_længde; 4 4379 att_message(9):= 4 4380 if terminal_tab.ref.terminal_tilstand>=0 then 1 <*normal*> 4 4381 else 4 <*disconnected*>; 4 4382 optaget:=læsbit_ia(att_flag,j); 4 4383 if optaget and att_message(9)=1 then 4 4384 sætbit_ia(att_signal,j,0<*1 for 'husket' attention*>) 4 4385 else optaget:=optaget or att_message(9)<>1; 4 4386 if i//100=2 and terminal_tab.ref.terminal_tilstand < 0 then 4 4387 begin <* att fra ekskluderet operatør - inkluder *> 5 4388 start_operation(op_ref,010,cs_att_pulje,1<*IN,O*>); 5 4389 d.op_ref.data(1):= i mod 100; 5 4390 signalch(cs_rad,op_ref,gen_optype); 5 4391 waitch(cs_att_pulje,op_ref,true,-1); 5 4392 end; 4 4393 end 3 4394 else 3 4395 begin 4 4396 optaget:= true; 4 4397 att_message(9):= 2 <*rejected*>; 4 4398 end; 3 4399 3 4399 monitor(22)send_answer:(zdummy,mess_ref,att_message); 3 4400 3 4400 until -,optaget; 3 4401 \f 3 4401 message procedure attention side 4 - 810424/hko; 3 4402 3 4402 sætbit_ia(att_flag,j,1); 3 4403 3 4403 start_operation(op_ref,i,cs_att_pulje,0); 3 4404 3 4404 signal_ch(case i//100 of (cs_io,cs_op,cs_gar),op_ref,gen_optype); 3 4405 3 4405 until false; 3 4406 3 4406 att_trap: 3 4407 3 4407 skriv_attention(zbillede,1); 3 4408 3 4408 3 4408 end attention; 2 4409 2 4409 \f 2 4409 message io_erklæringer side 1 - 810421/hko; 2 4410 2 4410 integer 2 4411 cs_io, 2 4412 cs_io_komm, 2 4413 cs_io_fil, 2 4414 cs_io_spool, 2 4415 cs_io_medd, 2 4416 cs_io_nulstil, 2 4417 ss_io_spool_tomme, 2 4418 ss_io_spool_fulde, 2 4419 bs_zio_adgang, 2 4420 io_spool_fil, 2 4421 io_spool_postantal, 2 4422 io_spool_postlængde; 2 4423 2 4423 integer array field 2 4424 io_spool_post; 2 4425 2 4425 zone z_io(32,1,io_fejl); 2 4426 2 4426 procedure io_fejl(z,s,b); 2 4427 integer s,b; 2 4428 zone z; 2 4429 begin 3 4430 disable begin 4 4431 integer array iz(1:20); 4 4432 integer i,j,k; 4 4433 integer array field iaf; 4 4434 real array field raf; 4 4435 if s<>(1 shift 21 + 2) then 4 4436 begin 5 4437 getzone6(z,iz); 5 4438 raf:=2; 5 4439 iaf:=0; 5 4440 k:=1; 5 4441 5 4441 j:= terminal_tab.iaf.terminal_tilstand; 5 4442 if j shift(-21)<>6 then 5 4443 fejlreaktion(17<*ydre enhed status*>,s,string iz.raf(increase(k)), 5 4444 1 shift 12 <*binært*> +1 <*fortsæt*>); 5 4445 terminal_tab.iaf.terminal_tilstand:= 6 shift 21 5 4446 + terminal_tab.iaf.terminal_tilstand extract 21; 5 4447 end; 4 4448 z(1):=real <:<'?'><'?'><'em'>:>; 4 4449 b:=2; 4 4450 end; <*disable*> 3 4451 end io_fejl; 2 4452 \f 2 4452 message procedure skriv_auto_spring_medd side 1 - 820301/hko; 2 4453 2 4453 procedure skriv_auto_spring_medd(z,medd,tid); 2 4454 value tid; 2 4455 zone z; 2 4456 real tid; 2 4457 integer array medd; 2 4458 begin 3 4459 disable begin 4 4460 real t; 4 4461 integer kode,bus,linie,bogst,løb,dato,kl; 4 4462 long array indeks(1:1); 4 4463 kode:= medd(1); 4 4464 indeks(1):= extend medd(5) shift 24; 4 4465 if kode > 0 and kode < 10 then 4 4466 begin 5 4467 write(z,"nl",0,<:-<'>'>:>,case kode of( 5 4468 <*1*><:linie/løb ikke indsat :>,<*sletning/omkodning/spring *> 5 4469 <*2*><:linie/løb allerede indsat:>,<*omkodning/spring *> 5 4470 <*3*><:vogn i kø:>, <*påmindelse i forb. omkod./spring*> 5 4471 <*4*><:vogn optaget:>, <* - i - - / - *> 5 4472 <*5*><:spring annulleret:>, <*udløb af ventetid *> 5 4473 <*6*><::>, <* - af springliste *> 5 4474 <*7*><::>, <*start af springsekvens *> 5 4475 <*8*><::>, <*afvikling af springsekvens *> 5 4476 <*9*><:område kan ikke opdateres:>,<*vt-ændring*> 5 4477 <::>)); 5 4478 <* if kode = 5 then 5 4479 begin 5 4480 bogst:= medd(4); 5 4481 linie:= bogst shift(-5) extract 10; 5 4482 bogst:= bogst extract 5; 5 4483 if bogst > 0 then bogst:= bogst +'A'-1; 5 4484 write(z,"sp",1,<<z>,linie,false add bogst,1, 5 4485 ".",1,indeks); 5 4486 end; 5 4487 *> 5 4488 outchar(z,'sp'); 5 4489 bus:= medd(2) extract 14; 5 4490 if bus > 0 then 5 4491 write(z,<<z>,bus,"/",1); 5 4492 løb:= medd(3); 5 4493 <*+4*> if løb shift(-22) <> 1 and løb <> 0 then 5 4494 fejlreaktion(3<*programfejl*>,løb,<:ikke linie id, spon.medd.:>,1); 5 4495 <*-4*> 5 4496 \f 5 4496 message procedure skriv_auto_spring_medd side 2 - 810507/hko; 5 4497 5 4497 linie:= løb shift(-12) extract 10; 5 4498 bogst:= løb shift(-7) extract 5; 5 4499 if bogst > 0 then bogst:= bogst +'A'-1; 5 4500 løb:= løb extract 7; 5 4501 if medd(3) <> 0 or kode <> 5 then 5 4502 begin 6 4503 write(z,<<z>,linie,false add bogst,1,"/",1,løb,"sp",1); 6 4504 if kode = 5 or kode = 6 then write(z,<:er frit :>); 6 4505 end; 5 4506 if kode = 7 or kode = 8 then 5 4507 write(z,<*indeks,"sp",1,*> 5 4508 if kode=7 then <:udtaget :> else <:indsat :>); 5 4509 5 4509 dato:= systime(4,tid,t); 5 4510 kl:= t/100.0; 5 4511 løb:= replace_char(1<*space in number*>,'.'); 5 4512 write(z,<<zd_dd_dd>,dato,<< zd_dd>,kl); 5 4513 replace_char(1,løb); 5 4514 end 4 4515 else <*kode < 1 or kode > 8*> 4 4516 fejlreaktion(3<*programfejl*>,kode,<:spon.medd. kode:>,1); 4 4517 end; <*disable*> 3 4518 end skriv_auto_spring_medd; 2 4519 \f 2 4519 message procedure h_io side 1 - 810507/hko; 2 4520 2 4520 <* hovedmodulkorutine for io *> 2 4521 procedure h_io; 2 4522 begin 3 4523 integer array field op_ref; 3 4524 integer k,dest_sem; 3 4525 procedure skriv_hio(zud,omfang); 3 4526 value omfang; 3 4527 zone zud; 3 4528 integer omfang; 3 4529 begin 4 4530 4 4530 write(zud,"nl",1,<:+++ hovedmodul io :>); 4 4531 if omfang>0 then 4 4532 disable begin integer x; 5 4533 trap(slut); 5 4534 write(zud,"nl",1, 5 4535 <: op_ref: :>,op_ref,"nl",1, 5 4536 <: k: :>,k,"nl",1, 5 4537 <: dest_sem: :>,dest_sem,"nl",1, 5 4538 <::>); 5 4539 skriv_coru(zud,coru_no(100)); 5 4540 slut: 5 4541 end; 4 4542 end skriv_hio; 3 4543 3 4543 trap(hio_trap); 3 4544 stack_claim(if cm_test then 198 else 146); 3 4545 3 4545 <*+2*> 3 4546 if testbit0 and overvåget or testbit28 then 3 4547 skriv_hio(out,0); 3 4548 <*-2*> 3 4549 \f 3 4549 message procedure h_io side 2 - 810507/hko; 3 4550 3 4550 repeat 3 4551 wait_ch(cs_io,op_ref,true,-1); 3 4552 <*+4*> 3 4553 if (d.op_ref.optype and (io_optype or gen_optype)) extract 12 =0 3 4554 then fejlreaktion(12<*operationstype*>,op_ref,<:operation til io:>,1); 3 4555 <*-4*> 3 4556 3 4556 k:=d.op_ref.opkode extract 12; 3 4557 dest_sem:= 3 4558 if k = 0 <*attention*> then cs_io_komm else 3 4559 3 4559 if k = 22 <*auto vt opdatering*> 3 4560 or k = 23 <*generel meddelelse*> 3 4561 or k = 36 <*spring meddelelse*> 3 4562 or k = 44 <*udeladt i gruppeopkald*> 3 4563 or k = 45 <*nødopkald modtaget*> 3 4564 or k = 46 <*nødopkald besvaret*> then cs_io_spool else 3 4565 3 4565 if k = 38 <*meddelelse til alle skærme*> then cs_io_medd else 3 4566 0; 3 4567 <*+4*> 3 4568 if dest_sem = 0 then 3 4569 begin 4 4570 fejl_reaktion(2<*operationskode*>,k,<:hovedmodul io:>,1); 4 4571 signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype); 4 4572 end 3 4573 else 3 4574 <*-4*> 3 4575 begin 4 4576 signal_ch(dest_sem,op_ref,d.op_ref.optype); 4 4577 end; 3 4578 until false; 3 4579 3 4579 hio_trap: 3 4580 disable skriv_hio(zbillede,1); 3 4581 end h_io; 2 4582 \f 2 4582 message procedure io_komm side 1 - 810507/hko; 2 4583 2 4583 procedure io_komm; 2 4584 begin 3 4585 integer array field op_ref,ref,vt_op,iaf; 3 4586 integer kode,aktion,status,opgave,dest_sem,vogn,ll,omr, 3 4587 pos,indeks,sep,sluttegn,operatør,i,j,k; 3 4588 long navn; 3 4589 3 4589 procedure skriv_io_komm(zud,omfang); 3 4590 value omfang; 3 4591 zone zud; 3 4592 integer omfang; 3 4593 begin 4 4594 4 4594 disable 4 4595 4 4595 write(zud,"nl",1,<:+++ io_komm :>); 4 4596 if omfang > 0 then 4 4597 disable begin integer x; 5 4598 trap(slut); 5 4599 write(zud,"nl",1, 5 4600 <: op-ref: :>,op_ref,"nl",1, 5 4601 <: kode: :>,kode,"nl",1, 5 4602 <: aktion: :>,aktion,"nl",1, 5 4603 <: ref: :>,ref,"nl",1, 5 4604 <: vt_op: :>,vt_op,"nl",1, 5 4605 <: status: :>,status,"nl",1, 5 4606 <: opgave: :>,opgave,"nl",1, 5 4607 <: dest-sem: :>,dest_sem,"nl",1, 5 4608 <: iaf: :>,iaf,"nl",1, 5 4609 <: i: :>,i,"nl",1, 5 4610 <: j: :>,j,"nl",1, 5 4611 <: k: :>,k,"nl",1, 5 4612 <: navn: :>,string navn,"nl",1, 5 4613 <: pos: :>,pos,"nl",1, 5 4614 <: indeks: :>,indeks,"nl",1, 5 4615 <: sep: :>,sep,"nl",1, 5 4616 <: sluttegn: :>,sluttegn,"nl",1, 5 4617 <: vogn: :>,vogn,"nl",1, 5 4618 <: ll: :>,ll,"nl",1, 5 4619 <: omr: :>,omr,"nl",1, 5 4620 <: operatør: :>,operatør,"nl",1, 5 4621 <::>); 5 4622 skriv_coru(zud,coru_no(101)); 5 4623 slut: 5 4624 end; 4 4625 end skriv_io_komm; 3 4626 \f 3 4626 message procedure io_komm side 2 - 810424/hko; 3 4627 3 4627 trap(io_komm_trap); 3 4628 stack_claim((if cm_test then 200 else 146)+24+200); 3 4629 3 4629 ref:=0; 3 4630 navn:= long<::>; 3 4631 3 4631 <*+2*> 3 4632 if testbit0 and overvåget or testbit28 then 3 4633 skriv_io_komm(out,0); 3 4634 <*-2*> 3 4635 3 4635 repeat 3 4636 3 4636 <*V*> wait_ch(cs_io_komm, 3 4637 op_ref, 3 4638 true, 3 4639 -1<*timeout*>); 3 4640 <*+2*> 3 4641 if testbit1 and overvåget then 3 4642 disable begin 4 4643 skriv_io_komm(out,0); 4 4644 write(out,"nl",1,<:operation fra cs:>,<<d>,cs_io, 4 4645 <: til io :>); 4 4646 skriv_op(out,op_ref); 4 4647 end; 3 4648 <*-2*> 3 4649 3 4649 kode:= d.op_ref.op_kode; 3 4650 i:= terminal_tab.ref.terminal_tilstand; 3 4651 status:= i shift(-21); 3 4652 opgave:= 3 4653 if kode=0 then 1 <* indlæs kommando *> else 3 4654 0; <* afvises *> 3 4655 3 4655 aktion:= if opgave = 0 then 0 else 3 4656 (case status +1 of( 3 4657 <* status *> 3 4658 <* 0 klar *>(1), 3 4659 <* 1 - *>(-1),<* ulovlig tilstand *> 3 4660 <* 2 - *>(-1),<* ulovlig tilstand *> 3 4661 <* 3 stoppet *>(2), 3 4662 <* 4 noneksist *>(-1),<* ulovlig tilstand *> 3 4663 <* 5 - *>(-1),<* ulovlig tilstand *> 3 4664 <* 6 - *>(-1),<* ulovlig tilstand *> 3 4665 <* 7 ej knyttet *>(-1),<* ulovlig tilstand *> 3 4666 -1)); 3 4667 \f 3 4667 message procedure io_komm side 3 - 810428/hko; 3 4668 3 4668 case aktion+6 of 3 4669 begin 4 4670 begin 5 4671 <*-5: terminal optaget *> 5 4672 5 4672 d.op_ref.resultat:= 16; 5 4673 afslut_operation(op_ref,-1); 5 4674 end; 4 4675 4 4675 begin 5 4676 <*-4: operation uden virkning *> 5 4677 5 4677 afslut_operation(op_ref,-1); 5 4678 end; 4 4679 4 4679 begin 5 4680 <*-3: ulovlig operationskode *> 5 4681 5 4681 fejl_reaktion(2<*operationskode*>,kode,<:ulovlig:>,1); 5 4682 afslut_operation(op_ref,-1); 5 4683 end; 4 4684 4 4684 begin 5 4685 <*-2: ulovlig aktion *> 5 4686 5 4686 fejl_reaktion(3<*programfejl*>,-2,<: ulovlig aktion:>,0); 5 4687 afslut_operation(op_ref,-1); 5 4688 end; 4 4689 4 4689 begin 5 4690 <*-1: ulovlig io_tilstand *> 5 4691 5 4691 fejl_reaktion(3<*programfejl*>,status,<: ulovlig io-status:>,0); 5 4692 afslut_operation(op_ref,-1); 5 4693 end; 4 4694 4 4694 begin 5 4695 <* 0: ikke implementeret *> 5 4696 5 4696 fejl_reaktion(2<*operationskode*>,kode,<: ikke implementeret:>,1); 5 4697 afslut_operation(op_ref,-1); 5 4698 end; 4 4699 4 4699 begin 5 4700 \f 5 4700 message procedure io_komm side 4 - 851001/cl; 5 4701 5 4701 <* 1: indlæs kommando *> 5 4702 <*V*> wait(bs_zio_adgang); 5 4703 5 4703 <*V*> læs_kommando(z_io,101,op_ref,pos,indeks,sep,sluttegn); 5 4704 5 4704 if d.op_ref.resultat > 3 then 5 4705 begin 6 4706 <*V*> setposition(z_io,0,0); 6 4707 if sluttegn<>'nl' then outchar(z_io,'nl'); 6 4708 skriv_kvittering(z_io,op_ref,pos, 6 4709 d.op_ref.resultat); 6 4710 end 5 4711 else if d.op_ref.resultat>0 then 5 4712 begin <*godkendt*> 6 4713 kode:=d.op_ref.opkode; 6 4714 i:= kode extract 12; 6 4715 j:= if kode < 5 or 6 4716 kode=7 or kode=8 or 6 4717 kode=72 or kode=73 or kode=74 then 1 <*IN,x/EK,x*>else 6 4718 if kode=5 or kode=77 then 9 <*FO,L/FO,O*>else 6 4719 if kode = 9 or kode=10 then 3 <*VO,B/VO,L*>else 6 4720 if kode =11 or kode=12 or kode=19 or <*VO,I/VO,U/VO,S*> 6 4721 kode=20 or kode=24 then 4<*VO,F/VO,R*>else 6 4722 if kode =21 then 5 <*AU*> else 6 4723 if kode =25 then 6 <*GR,D*> else 6 4724 if kode =26 then 5 <*GR,S*> else 6 4725 if kode =27 or kode =28 then 7 <*GR,V/GR,O*>else 6 4726 if kode =30 then 10 <*SP,D*> else 6 4727 if kode =31 then 5 <*SP*> else 6 4728 if kode =32 or kode =33 then 8 <*SP,V/SP,O*>else 6 4729 if kode =34 or kode =35 then 5 <*SP,R/SP,A*>else 6 4730 if kode=71 then 11 <*FO,V*> else 6 4731 if kode =75 then 12 <*TÆ,V *>else 6 4732 if kode =76 then 12 <*TÆ,N *>else 6 4733 if kode =65 then 13 <*BE,N *>else 6 4734 if kode =66 then 14 <*BE,G *>else 6 4735 if kode =67 then 15 <*BE,V *>else 6 4736 if kode =68 then 16 <*ST,D *>else 6 4737 if kode =69 then 17 <*ST,V *>else 6 4738 if kode =36 then 18 <*AL *>else 6 4739 if kode =37 then 19 <*CC *>else 6 4740 if kode>=80 and kode <=88 then 2 <*sys-spec.*>else 6 4741 if kode>=90 and kode <=92 then 20 <*CQF,I/U/V*>else 6 4742 0; 6 4743 if j > 0 then 6 4744 begin 7 4745 case j of 7 4746 begin 8 4747 begin 9 4748 \f 9 4748 message procedure io_komm side 5 - 810424/hko; 9 4749 9 4749 <* 1: inkluder/ekskluder ydre enhed *> 9 4750 9 4750 d.op_ref.retur:= cs_io_komm; 9 4751 if kode=1 then d.opref.opkode:= 9 4752 ia(2) shift 12 + d.opref.opkode extract 12; 9 4753 d.op_ref.data(1):= ia(1); 9 4754 signal_ch(if kode < 5 or kode>=72 then cs_rad 9 4755 else cs_gar, 9 4756 op_ref,gen_optype or io_optype); 9 4757 indeks:= op_ref; 9 4758 wait_ch(cs_io_komm, 9 4759 op_ref, 9 4760 true, 9 4761 -1<*timeout*>); 9 4762 <*+4*> if op_ref <> indeks then 9 4763 fejlreaktion(11<*fremmed post*>,op_ref,<:io_kommando:>,0); 9 4764 <*-4*> 9 4765 <*V*> setposition(z_io,0,0); 9 4766 if sluttegn<>'nl' then outchar(z_io,'nl'); 9 4767 skriv_kvittering(z_io,op_ref,-1, 9 4768 d.op_ref.resultat); 9 4769 end; 8 4770 8 4770 begin 9 4771 \f 9 4771 message procedure io_komm side 6 - 810501/hko; 9 4772 9 4772 <* 2: tid/attention,ja/attention,nej 9 4773 slut/slut med billede *> 9 4774 9 4774 case d.op_ref.opkode -79 of 9 4775 begin 10 4776 10 4776 <* 80: TI *> begin 11 4777 setposition(z_io,0,0); 11 4778 if sluttegn<>'nl' then outchar(z_io,'nl'); 11 4779 if ia(1) <> 0 or ia(2) <> 0 then 11 4780 begin real field rf; 12 4781 rf:= 4; 12 4782 trap(forbudt); 12 4783 <*V*> setposition(z_io,0,0); 12 4784 systime(3,ia.rf,0.0); 12 4785 if false then 12 4786 begin 13 4787 forbudt: skriv_kvittering(z_io,0,-1, 13 4788 43<*ændring af dato/tid ikke lovlig*>); 13 4789 end 12 4790 else 12 4791 skriv_kvittering(z_io,0,-1,3); 12 4792 end 11 4793 else 11 4794 begin 12 4795 setposition(z_io,0,0); 12 4796 write(z_io,<<zddddd>,systime(5,0,r),".",1,r); 12 4797 end; 11 4798 end TI; 10 4799 \f 10 4799 message procedure io_komm side 7 - 810424/hko; 10 4800 10 4800 <*81: AT,J*> begin 11 4801 <*V*> setposition(z_io,0,0); 11 4802 if sluttegn <> 'nl' then outchar(zio,'nl'); 11 4803 monitor(10)release process:(z_io,0,ia); 11 4804 skriv_kvittering(z_io,0,-1,3); 11 4805 end; 10 4806 10 4806 <* 82: AT,N*> begin 11 4807 i:= monitor(8)reserve process:(z_io,0,ia); 11 4808 <*V*> setposition(z_io,0,0); 11 4809 if sluttegn <> 'nl' then outchar(zio,'nl'); 11 4810 skriv_kvittering(z_io,0,-1, 11 4811 if i = 0 then 3 else 0); 11 4812 end; 10 4813 10 4813 <* 83: SL *> begin 11 4814 errorbits:=0; <* warning.no ok.yes *> 11 4815 trapmode:= 1 shift 13; 11 4816 trap(-2); 11 4817 end; 10 4818 10 4818 <* 84: SL,B *>begin 11 4819 errorbits:=1; <* warning.no ok.no *> 11 4820 trap(-3); 11 4821 end; 10 4822 <* 85: SL,K *>begin 11 4823 errorbits:=1; <* warning.no ok.no *> 11 4824 disable sæt_bit_i(trapmode,15,0); 11 4825 trap(-3); 11 4826 end; 10 4827 \f 10 4827 message procedure io_komm side 7a - 810511/cl; 10 4828 10 4828 <* 86: TE,J *>begin 11 4829 setposition(z_io,0,0); 11 4830 if sluttegn <> 'nl' then outchar(z_io,'nl'); 11 4831 for i:= 1 step 1 until indeks do 11 4832 if 0<=ia(i) and ia(i)<=47 then 11 4833 begin 12 4834 case (ia(i)+1) of 12 4835 begin 13 4836 testbit0 := true;testbit1 := true;testbit2 := true; 13 4837 testbit3 := true;testbit4 := true;testbit5 := true; 13 4838 testbit6 := true;testbit7 := true;testbit8 := true; 13 4839 testbit9 := true;testbit10:= true;testbit11:= true; 13 4840 testbit12:= true;testbit13:= true;testbit14:= true; 13 4841 testbit15:= true;testbit16:= true;testbit17:= true; 13 4842 testbit18:= true;testbit19:= true;testbit20:= true; 13 4843 testbit21:= true;testbit22:= true;testbit23:= true; 13 4844 testbit24:= true;testbit25:= true;testbit26:= true; 13 4845 testbit27:= true;testbit28:= true;testbit29:= true; 13 4846 testbit30:= true;testbit31:= true;testbit32:= true; 13 4847 testbit33:= true;testbit34:= true;testbit35:= true; 13 4848 testbit36:= true;testbit37:= true;testbit38:= true; 13 4849 testbit39:= true;testbit40:= true;testbit41:= true; 13 4850 testbit42:= true;testbit43:= true;testbit44:= true; 13 4851 testbit45:= true;testbit46:= true;testbit47:= true; 13 4852 end; 12 4853 end; 11 4854 skriv_kvittering(z_io,0,-1,3); 11 4855 end; 10 4856 \f 10 4856 message procedure io_komm side 7b - 810511/cl; 10 4857 10 4857 <* 87: TE,N *>begin 11 4858 setposition(z_io,0,0); 11 4859 if sluttegn <> 'nl' then outchar(z_io,'nl'); 11 4860 for i:= 1 step 1 until indeks do 11 4861 if 0<=ia(i) and ia(i)<=47 then 11 4862 begin 12 4863 case (ia(i)+1) of 12 4864 begin 13 4865 testbit0 := false;testbit1 := false;testbit2 := false; 13 4866 testbit3 := false;testbit4 := false;testbit5 := false; 13 4867 testbit6 := false;testbit7 := false;testbit8 := false; 13 4868 testbit9 := false;testbit10:= false;testbit11:= false; 13 4869 testbit12:= false;testbit13:= false;testbit14:= false; 13 4870 testbit15:= false;testbit16:= false;testbit17:= false; 13 4871 testbit18:= false;testbit19:= false;testbit20:= false; 13 4872 testbit21:= false;testbit22:= false;testbit23:= false; 13 4873 testbit24:= false;testbit25:= false;testbit26:= false; 13 4874 testbit27:= false;testbit28:= false;testbit29:= false; 13 4875 testbit30:= false;testbit31:= false;testbit32:= false; 13 4876 testbit33:= false;testbit34:= false;testbit35:= false; 13 4877 testbit36:= false;testbit37:= false;testbit38:= false; 13 4878 testbit39:= false;testbit40:= false;testbit41:= false; 13 4879 testbit42:= false;testbit43:= false;testbit44:= false; 13 4880 testbit45:= false;testbit46:= false;testbit47:= false; 13 4881 end; 12 4882 end; 11 4883 skriv_kvittering(z_io,0,-1,3); 11 4884 end; 10 4885 10 4885 <* 88: O *> begin 11 4886 integer array odescr,zdescr(1:20); 11 4887 long array field laf; 11 4888 integer res, i, j; 11 4889 11 4889 i:= j:= 1; 11 4890 while læstegn(ia,i,res)<>0 do 11 4891 begin 12 4892 if 'A'<=res and res<='Å' then res:= res - 'A' + 'a'; 12 4893 skrivtegn(ia,j,res); 12 4894 end; 11 4895 11 4895 laf:= 2; 11 4896 getzone6(out,odescr); 11 4897 getzone6(z_io,zdescr); 11 4898 close(out,zdescr.laf(1)<>odescr.laf(1) or 11 4899 zdescr.laf(2)<>odescr.laf(2)); 11 4900 laf:= 0; 11 4901 11 4901 if ia(1)=0 then 11 4902 begin 12 4903 res:= 3; 12 4904 j:= 0; 12 4905 end 11 4906 else 11 4907 begin 12 4908 j:= res:= openbs(out,j,ia,0); 12 4909 if res<>0 then 12 4910 res:= 46; 12 4911 end; 11 4912 if res<>0 then 11 4913 begin 12 4914 open(out,8,konsol_navn,0); 12 4915 if j<>0 then 12 4916 begin 13 4917 i:= 1; 13 4918 fejlreaktion(4,j,string ia.laf(increase(i)),1); 13 4919 end; 12 4920 end 11 4921 else res:= 3; 11 4922 setposition(z_io,0,0); 11 4923 skriv_kvittering(z_io,0,-1,res); 11 4924 end; 10 4925 end;<*case d.op_ref.opkode -79*> 9 4926 end;<*case 2*> 8 4927 begin 9 4928 \f 9 4928 message procedure io_komm side 8 - 810424/hko; 9 4929 9 4929 <* 3: vogntabel,linienr/-,busnr*> 9 4930 9 4930 d.op_ref.retur:= cs_io_komm; 9 4931 tofrom(d.op_ref.data,ia,10); 9 4932 indeks:= op_ref; 9 4933 signal_ch(cs_vt,op_ref,gen_optype or io_optype); 9 4934 wait_ch(cs_io_komm, 9 4935 op_ref, 9 4936 io_optype, 9 4937 -1<*timeout*>); 9 4938 <*+2*> if testbit2 and overvåget then 9 4939 disable begin 10 4940 skriv_io_komm(out,0); 10 4941 write(out,"nl",1,<:io operation retur fra vt:>); 10 4942 skriv_op(out,op_ref); 10 4943 end; 9 4944 <*-2*> 9 4945 <*+4*> if indeks <> op_ref then 9 4946 fejlreaktion(11<*fremmed post*>,op_ref,<:io_kommando:>,0); 9 4947 <*-4*> 9 4948 9 4948 i:=d.op_ref.resultat; 9 4949 if i<1 or i>3 then 9 4950 begin 10 4951 <*V*> setposition(z_io,0,0); 10 4952 if sluttegn<>'nl' then outchar(z_io,'nl'); 10 4953 skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat); 10 4954 end 9 4955 else 9 4956 begin 10 4957 \f 10 4957 message procedure io_komm side 9 - 820301/hko,cl; 10 4958 10 4958 integer antal,filref; 10 4959 10 4959 antal:= d.op_ref.data(6); 10 4960 fil_ref:= d.op_ref.data(7); 10 4961 pos:= 0; 10 4962 <*V*> setposition(zio,0,0); 10 4963 if sluttegn <> 'nl' then outchar(z_io,'nl'); 10 4964 for pos:= pos +1 while pos <= antal do 10 4965 begin 11 4966 integer bogst,løb; 11 4967 11 4967 disable i:= læsfil(fil_ref,pos,j); 11 4968 if i <> 0 then 11 4969 fejlreaktion(5<*læs_fel*>,i,<:io komm., vo,l/vo,b:>,0); 11 4970 vogn:= fil(j,1) shift (-24) extract 24; 11 4971 løb:= fil(j,1) extract 24; 11 4972 if d.op_ref.opkode=9 then 11 4973 begin i:=vogn; vogn:=løb; løb:=i; end; 11 4974 ll:= løb shift(-12) extract 10; 11 4975 bogst:= løb shift(-7) extract 5; 11 4976 if bogst > 0 then bogst:= bogst+'A'-1; 11 4977 løb:= løb extract 7; 11 4978 vogn:= vogn extract 14; 11 4979 i:= d.op_ref.opkode -8; 11 4980 for i:= i,i +1 do 11 4981 begin 12 4982 j:= (i+1) extract 1; 12 4983 case j+1 of 12 4984 begin 13 4985 write(zio,"sp",if bogst=0 then 1 else 0,<<ddd>,ll, 13 4986 false add bogst,1,"/",1,true,3,<<d>,løb); 13 4987 write(zio,<<dddd>,vogn,"sp",1); 13 4988 end; 12 4989 end; 11 4990 if pos mod 5 = 0 then 11 4991 begin 12 4992 outchar(zio,'nl'); 12 4993 <*V*> setposition(zio,0,0); 12 4994 end 11 4995 else write(zio,"sp",3); 11 4996 end; 10 4997 write(zio,"*",1); 10 4998 \f 10 4998 message procedure io_komm side 9a - 810505/hko; 10 4999 10 4999 d.op_ref.opkode:=104;<*slet fil*> 10 5000 d.op_ref.data(4):=filref; 10 5001 indeks:=op_ref; 10 5002 signal_ch(cs_slet_fil,op_ref,genoptype or iooptype); 10 5003 <*V*> wait_ch(cs_io_komm,op_ref,io_optype,-1); 10 5004 10 5004 <*+2*> if testbit2 and overvåget then 10 5005 disable begin 11 5006 skriv_io_komm(out,0); 11 5007 write(out,"nl",1,<:io operation retur fra sletfil:>); 11 5008 skriv_op(out,op_ref); 11 5009 end; 10 5010 <*-2*> 10 5011 10 5011 <*+4*> if op_ref<>indeks then 10 5012 fejlreaktion(11<*fr.post*>,op_ref,<:io-komm, sletfil:>,0); 10 5013 <*-4*> 10 5014 if d.op_ref.data(9)<>0 then 10 5015 fejlreaktion(3<*prg.fejl*>,d.op_ref.data(9), 10 5016 <:io-komm, sletfil:>,1); 10 5017 end; 9 5018 end; 8 5019 8 5019 begin 9 5020 \f 9 5020 message procedure io_komm side 10 - 820301/hko; 9 5021 9 5021 <* 4 indsæt/udtag/flyt bus i vogntabel, slet vogntabel *> 9 5022 9 5022 vogn:=ia(1); 9 5023 ll:=ia(2); 9 5024 omr:= if kode=11 or kode=19 then ia(3) else 9 5025 if kode=12 then ia(2) else 0; 9 5026 if kode=19 and omr<=0 then 9 5027 begin 10 5028 if omr=-1 then omr:= 0 10 5029 else omr:= 14 shift 20 + 3; <*OMR TCT*> 10 5030 end; 9 5031 <*V*> wait_ch(cs_vt_adgang, 9 5032 vt_op, 9 5033 gen_optype, 9 5034 -1<*timeout sek*>); 9 5035 start_operation(vtop,101,cs_io_komm, 9 5036 kode); 9 5037 d.vt_op.data(1):=vogn; 9 5038 d.vt_op.data(2):=ll; 9 5039 d.vt_op.data(if kode=19 then 3 else 4):= omr; 9 5040 indeks:= vt_op; 9 5041 signal_ch(cs_vt, 9 5042 vt_op, 9 5043 gen_optype or io_optype); 9 5044 9 5044 <*V*> wait_ch(cs_io_komm, 9 5045 vt_op, 9 5046 io_optype, 9 5047 -1<*timeout sek*>); 9 5048 <*+2*> if testbit2 and overvåget then 9 5049 disable begin 10 5050 skriv_io_komm(out,0); 10 5051 write(out,"nl",1, 10 5052 <:iooperation retur fra vt:>); 10 5053 skriv_op(out,vt_op); 10 5054 end; 9 5055 <*-2*> 9 5056 <*+4*> if vt_op<>indeks then 9 5057 fejl_reaktion(11<*fremmede op*>,op_ref, 9 5058 <:io-kommando:>,0); 9 5059 <*-4*> 9 5060 <*V*> setposition(z_io,0,0); 9 5061 if sluttegn<>'nl' then outchar(z_io,'nl'); 9 5062 skriv_kvittering(z_io,if d.vt_op.resultat = 11 or 9 5063 d.vt_op.resultat = 12 then d.vt_op.data(3) 9 5064 else vt_op,-1,d.vt_op.resultat); 9 5065 d.vt_op.optype:= genoptype or vt_optype; 9 5066 disable afslut_operation(vt_op,cs_vt_adgang); 9 5067 end; 8 5068 8 5068 begin 9 5069 \f 9 5069 message procedure io_komm side 11 - 810428/hko; 9 5070 9 5070 <* 5 autofil-skift 9 5071 gruppe,slet 9 5072 spring (igangsæt) 9 5073 spring,annuler 9 5074 spring,reserve *> 9 5075 9 5075 tofrom(d.op_ref.data,ia,8); 9 5076 d.op_ref.retur:=cs_io_komm; 9 5077 indeks:=op_ref; 9 5078 signal_ch(cs_vt,op_ref,gen_optype or io_optype); 9 5079 <*V*> wait_ch(cs_io_komm, 9 5080 op_ref, 9 5081 io_optype, 9 5082 -1<*timeout*>); 9 5083 <*+2*> if testbit2 and overvåget then 9 5084 disable begin 10 5085 skriv_io_komm(out,0); 10 5086 write(out,"nl",1,<:io operation retur fra vt:>); 10 5087 skriv_op(out,op_ref); 10 5088 end; 9 5089 <*-2*> 9 5090 <*+4*> if indeks<>op_ref then 9 5091 fejlreaktion(11<*fremmed post*>,op_ref, 9 5092 <:io-kommando(autofil):>,0); 9 5093 <*-4*> 9 5094 9 5094 <*V*> setposition(z_io,0,0); 9 5095 if sluttegn<>'nl' then outchar(z_io,'nl'); 9 5096 skriv_kvittering(z_io,if (d.op_ref.resultat=11 or 9 5097 d.op_ref.resultat=12) and kode=34 <*SP,R*> then 9 5098 d.op_ref.data(4) else op_ref,-1,d.op_ref.resultat); 9 5099 end; 8 5100 8 5100 begin 9 5101 \f 9 5101 message procedure io_komm side 12 - 820301/hko/cl; 9 5102 9 5102 <* 6 gruppedefinition *> 9 5103 9 5103 tofrom(d.op_ref.data,ia,indeks*2); 9 5104 <*V*> wait_ch(cs_io_fil,vt_op,true,-1<*timeout*>); 9 5105 start_operation(vt_op,101,cs_io_komm, 9 5106 101<*opret fil*>); 9 5107 d.vt_op.data(1):=256;<*postantal*> 9 5108 d.vt_op.data(2):=1; <*postlængde*> 9 5109 d.vt_op.data(3):=1; <*segmentantal*> 9 5110 d.vt_op.data(4):= 9 5111 2 shift 10; <*spool fil*> 9 5112 signal_ch(cs_opret_fil,vt_op,io_optype); 9 5113 pos:=vt_op;<*variabel lånes*> 9 5114 <*V*> wait_ch(cs_io_komm,vt_op,io_optype,-1<*timeout*>); 9 5115 <*+4*> if vt_op<>pos then 9 5116 fejlreaktion(11<*fremmed post*>,vt_op,<:gruppedef:>,0); 9 5117 if d.vt_op.data(9)<>0 then 9 5118 fejlreaktion(13<*opret-fil*>,d.vt_op.data(9), 9 5119 <:io-kommando(gruppedefinition):>,0); 9 5120 <*-4*> 9 5121 iaf:=0; 9 5122 for i:=1 step 1 until indeks-1 do 9 5123 begin 10 5124 disable k:=modif_fil(d.vt_op.data(4),i,j); 10 5125 if k<>0 then 10 5126 fejlreaktion(7<*modif-fil*>,k, 10 5127 <:io kommando(gruppe-def):>,0); 10 5128 fil(j).iaf(1):=d.op_ref.data(i+1); 10 5129 end; 9 5130 while sep = ',' do 9 5131 begin 10 5132 wait(bs_fortsæt_adgang); 10 5133 pos:= 1; j:= 0; 10 5134 while læs_store(z_io,i) < 8 do 10 5135 begin 11 5136 skrivtegn(fortsæt,pos,i); 11 5137 if i = '?' or i = 'esc' then j:= 1; <* skip kommando *> 11 5138 end; 10 5139 skrivtegn(fortsæt,pos,'em'); 10 5140 afsluttext(fortsæt,pos); 10 5141 sluttegn:= i; 10 5142 if j<>0 then 10 5143 begin 11 5144 setposition(z_io,0,0); 11 5145 if sluttegn <> 'nl' then outchar(z_io,'nl'); 11 5146 skriv_kvittering(zio,opref,-1,53);<*annulleret*> 11 5147 goto gr_ann; 11 5148 end; 10 5149 \f 10 5149 message procedure io_komm side 13 - 810512/hko/cl; 10 5150 10 5150 disable begin 11 5151 integer array værdi(1:4); 11 5152 integer a_pos,res; 11 5153 pos:= 0; 11 5154 repeat 11 5155 apos:= pos; 11 5156 læs_paramsæt(fortsæt,a_pos,0,værdi,sep,res); 11 5157 if res >= 0 then 11 5158 begin 12 5159 if res=0 and (sep=',' or indeks>2) then <*ok*> 12 5160 else if res=0 then res:= -25 <*parameter mangler*> 12 5161 else if res=2 and (værdi(1)<1 or værdi(1)>9999) then 12 5162 res:= -7 <*busnr ulovligt*> 12 5163 else if res=2 or res=6 then 12 5164 begin 13 5165 k:=modiffil(d.vt_op.data(4),indeks,j); 13 5166 if k<>0 then fejlreaktion(7<*modiffil*>,k, 13 5167 <:io kommando(gruppe-def):>,0); 13 5168 iaf:= 0; 13 5169 fil(j).iaf(1):= værdi(1) + 13 5170 (if res=6 then 1 shift 22 else 0); 13 5171 indeks:= indeks+1; 13 5172 if sep = ',' then res:= 0; 13 5173 end 12 5174 else res:= -27; <*parametertype*> 12 5175 end; 11 5176 if res>0 then pos:= a_pos; 11 5177 until sep<>'sp' or res<=0; 11 5178 11 5178 if res<0 then 11 5179 begin 12 5180 d.op_ref.resultat:= -res; 12 5181 i:=1; 12 5182 hægt_tekst(d.op_ref.data,i,fortsæt,1); 12 5183 afsluttext(d.op_ref.data,i); 12 5184 end; 11 5185 end; 10 5186 \f 10 5186 message procedure io_komm side 13a - 810512/hko/cl; 10 5187 10 5187 if d.op_ref.resultat > 3 then 10 5188 begin 11 5189 setposition(z_io,0,0); 11 5190 if sluttegn <> 'nl' then outchar(z_io,'nl'); 11 5191 skriv_kvittering(z_io,op_ref,pos,d.opref.resultat); 11 5192 goto gr_ann; 11 5193 end; 10 5194 signalbin(bs_fortsæt_adgang); 10 5195 end while sep = ','; 9 5196 d.op_ref.data(2):= d.vt_op.data(1):=indeks-1; 9 5197 k:= sætfildim(d.vt_op.data); 9 5198 if k<>0 then fejlreaktion(9,k,<:io kommando(gruppe-def):>,0); 9 5199 d.op_ref.data(3):= d.vt_op.data(4); <*filref*> 9 5200 signalch(cs_io_fil,vt_op,io_optype or gen_optype); 9 5201 d.op_ref.retur:=cs_io_komm; 9 5202 pos:=op_ref; 9 5203 signal_ch(cs_vt,op_ref,gen_optype or io_optype); 9 5204 <*V*> wait_ch(cs_io_komm,op_ref,io_optype,-1<*timeout*>); 9 5205 <*+4*> if pos<>op_ref then 9 5206 fejlreaktion(11<*fremmed post*>,op_ref, 9 5207 <:io kommando(gruppedef retur fra vt):>,0); 9 5208 <*-4*> 9 5209 9 5209 <*V*> setposition(z_io,0,0); 9 5210 if sluttegn<>'nl' then outchar(z_io,'nl'); 9 5211 skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat); 9 5212 9 5212 if false then 9 5213 begin 10 5214 gr_ann: signalch(cs_slet_fil,vt_op,io_optype); 10 5215 waitch(cs_io_komm,vt_op,io_optype,-1); 10 5216 signalch(cs_io_fil,vt_op,io_optype or vt_optype); 10 5217 end; 9 5218 9 5218 end; 8 5219 8 5219 begin 9 5220 \f 9 5220 message procedure io_komm side 14 - 810525/hko/cl; 9 5221 9 5221 <* 7 gruppe(-oversigts-)rapport *> 9 5222 9 5222 d.op_ref.retur:=cs_io_komm; 9 5223 d.op_ref.data(1):=ia(1); 9 5224 indeks:=op_ref; 9 5225 signal_ch(cs_vt,op_ref,gen_optype or io_optype); 9 5226 <*V*> wait_ch(cs_io_komm,op_ref,io_optype,-1<*timeout*>); 9 5227 9 5227 <*+4*> if op_ref<>indeks then 9 5228 fejlreaktion(11<*fremmed post*>,op_ref, 9 5229 <:io-kommando(gruppe-rapport):>,0); 9 5230 <*-4*> 9 5231 9 5231 <*V*> setposition(z_io,0,0); 9 5232 if sluttegn <> 'nl' then outchar(z_io,'nl'); 9 5233 if d.op_ref.resultat<>3 then 9 5234 begin 10 5235 skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat); 10 5236 end 9 5237 else 9 5238 begin 10 5239 integer bogst,løb; 10 5240 10 5240 if kode = 27 then <* gruppe,vis *> 10 5241 begin 11 5242 <*V*> write(z_io,"nl",1,"-",5,"sp",2,<:gruppe: :>, 11 5243 "G",1,<<z>,d.op_ref.data(1) extract 7, 11 5244 "sp",2,"-",5,"nl",1); 11 5245 \f 11 5245 message procedure io_komm side 15 - 820301/hko; 11 5246 11 5246 for pos:=1 step 1 until d.op_ref.data(2) do 11 5247 begin 12 5248 disable i:=læsfil(d.op_ref.data(3),pos,j); 12 5249 if i<>0 then 12 5250 fejlreaktion(5<*læsfil*>,i, 12 5251 <:io_kommando(gruppe,vis):>,0); 12 5252 iaf:=0; 12 5253 vogn:=fil(j).iaf(1); 12 5254 if vogn shift(-22) =0 then 12 5255 write(z_io,<<ddddddd>,vogn extract 14) 12 5256 else 12 5257 begin 13 5258 løb:=vogn extract 7; 13 5259 bogst:=vogn shift(-7) extract 5; 13 5260 if bogst>0 then bogst:=bogst+'A'-1; 13 5261 ll:=vogn shift(-12) extract 10; 13 5262 write(z_io,"sp",if bogst=0 then 1 else 0,<<ddd>,ll, 13 5263 false add bogst,1,"/",1,true,3,<<d>,løb); 13 5264 end; 12 5265 if pos mod 8 =0 then outchar(z_io,'nl') 12 5266 else write(z_io,"sp",2); 12 5267 end; 11 5268 write(z_io,"*",1); 11 5269 \f 11 5269 message procedure io_komm side 16 - 810512/hko/cl; 11 5270 11 5270 end 10 5271 else if kode=28 then <* gruppe,oversigt *> 10 5272 begin 11 5273 write(z_io,"nl",1,"-",5,"sp",2,<:gruppe oversigt:>, 11 5274 "sp",2,"-",5,"nl",2); 11 5275 for pos:=1 step 1 until d.op_ref.data(1) do 11 5276 begin 12 5277 disable i:=læsfil(d.op_ref.data(2),pos,j); 12 5278 if i<>0 then 12 5279 fejlreaktion(5<*læsfil*>,i, 12 5280 <:io-kommando(gruppe-oversigt):>,0); 12 5281 iaf:=0; 12 5282 ll:=fil(j).iaf(1); 12 5283 write(z_io,"G",1,<<z>,true,3,ll extract 7); 12 5284 if pos mod 10 =0 then outchar(z_io,'nl') 12 5285 else write(z_io,"sp",3); 12 5286 end; 11 5287 write(z_io,"*",1); 11 5288 end; 10 5289 <* slet fil *> 10 5290 d.op_ref.opkode:= 104; 10 5291 d.op_ref.data(4):= d.op_ref.data(if kode=28 then 2 else 3); 10 5292 signalch(cs_slet_fil,op_ref,gen_optype or io_optype); 10 5293 waitch(cs_io_komm,op_ref,io_optype or gen_optype,-1); 10 5294 end; <* resultat=3 *> 9 5295 9 5295 end; 8 5296 8 5296 begin 9 5297 \f 9 5297 message procedure io_komm side 17 - 810525/cl; 9 5298 9 5298 <* 8 spring(-oversigts-)rapport *> 9 5299 9 5299 d.op_ref.retur:=cs_io_komm; 9 5300 tofrom(d.op_ref.data,ia,4); 9 5301 indeks:=op_ref; 9 5302 signal_ch(cs_vt,op_ref,gen_optype or io_optype); 9 5303 <*V*> wait_ch(cs_io_komm,op_ref,io_optype,-1<*timeout*>); 9 5304 9 5304 <*+4*> if op_ref<>indeks then 9 5305 fejlreaktion(11<*fremmed post*>,op_ref, 9 5306 <:io-kommando(spring-rapport):>,0); 9 5307 <*-4*> 9 5308 9 5308 <*V*> setposition(z_io,0,0); 9 5309 if sluttegn <> 'nl' then outchar(z_io,'nl'); 9 5310 if d.op_ref.resultat<>3 then 9 5311 begin 10 5312 skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat); 10 5313 end 9 5314 else 9 5315 begin 10 5316 boolean p_skrevet; 10 5317 integer bogst,løb; 10 5318 10 5318 if kode = 32 then <* spring,vis *> 10 5319 begin 11 5320 ll:= d.op_ref.data(1) shift (-5) extract 10; 11 5321 bogst:= d.op_ref.data(1) extract 5; 11 5322 if bogst<>0 then bogst:= bogst + 'A' - 1; 11 5323 <*V*> write(z_io,"nl",1,"-",5,"sp",2,<:spring: :>, 11 5324 <<d>,ll,false add bogst,(bogst<>0) extract 1, 11 5325 <:.:>,string (extend d.op_ref.data(2) shift 24)); 11 5326 raf:= data+8; 11 5327 if d.op_ref.raf(1)<>0.0 then 11 5328 write(z_io,<:, startet :>,<<zddddd>,round 11 5329 systime(4,d.op_ref.raf(1),r),<:.:>,round r) 11 5330 else 11 5331 write(z_io,<:, ikke startet:>); 11 5332 write(z_io,"sp",2,"-",5,"nl",1); 11 5333 \f 11 5333 message procedure io_komm side 18 - 810518/cl; 11 5334 11 5334 p_skrevet:= false; 11 5335 for pos:=1 step 1 until d.op_ref.data(3) do 11 5336 begin 12 5337 disable i:=læsfil(d.op_ref.data(4),pos,j); 12 5338 if i<>0 then 12 5339 fejlreaktion(5<*læsfil*>,i, 12 5340 <:io_kommando(spring,vis):>,0); 12 5341 iaf:=0; 12 5342 i:= fil(j).iaf(1); 12 5343 if i < 0 and -, p_skrevet then 12 5344 begin 13 5345 outchar(z_io,'('); p_skrevet:= true; 13 5346 end; 12 5347 if i > 0 and p_skrevet then 12 5348 begin 13 5349 outchar(z_io,')'); p_skrevet:= false; 13 5350 end; 12 5351 if pos mod 2 = 0 then 12 5352 write(z_io,<< dd>,abs i,<:.:>) 12 5353 else 12 5354 write(z_io,true,3,<<d>,abs i); 12 5355 if pos mod 21 = 0 then outchar(z_io,'nl'); 12 5356 end; 11 5357 write(z_io,"*",1); 11 5358 \f 11 5358 message procedure io_komm side 19 - 810525/cl; 11 5359 11 5359 end 10 5360 else if kode=33 then <* spring,oversigt *> 10 5361 begin 11 5362 write(z_io,"nl",1,"-",5,"sp",2,<:spring oversigt:>, 11 5363 "sp",2,"-",5,"nl",2); 11 5364 for pos:=1 step 1 until d.op_ref.data(1) do 11 5365 begin 12 5366 disable i:=læsfil(d.op_ref.data(2),pos,j); 12 5367 if i<>0 then 12 5368 fejlreaktion(5<*læsfil*>,i, 12 5369 <:io-kommando(spring-oversigt):>,0); 12 5370 iaf:=0; 12 5371 ll:=fil(j).iaf(1) shift (-5) extract 10; 12 5372 bogst:=fil(j).iaf(1) extract 5; 12 5373 if bogst<>0 then bogst:=bogst + 'A' - 1; 12 5374 write(z_io,"sp",(bogst=0) extract 1 + 1,<<ddd>,ll, 12 5375 false add bogst,(bogst<>0) extract 1,<:.:>,true,4, 12 5376 string (extend fil(j).iaf(2) shift 24)); 12 5377 if fil(j,2)<>0.0 then 12 5378 write(z_io,<:startet :>,<<zddddd>, 12 5379 round systime(4,fil(j,2),r),<:.:>,round r); 12 5380 outchar(z_io,'nl'); 12 5381 end; 11 5382 write(z_io,"*",1); 11 5383 end; 10 5384 <* slet fil *> 10 5385 d.op_ref.opkode:= 104; 10 5386 if kode=33 then d.op_ref.data(4):= d.op_ref.data(2); 10 5387 signalch(cs_slet_fil,op_ref,gen_optype or io_optype); 10 5388 waitch(cs_io_komm,op_ref,io_optype or gen_optype,-1); 10 5389 end; <* resultat=3 *> 9 5390 9 5390 end; 8 5391 8 5391 begin 9 5392 \f 9 5392 message procedure io_komm side 20 - 820302/hko; 9 5393 9 5393 <* 9 fordeling af linier/områder på operatører *> 9 5394 9 5394 d.op_ref.retur:=cs_io_komm; 9 5395 disable 9 5396 if kode=5 then 9 5397 begin 10 5398 integer array io_linietabel(1:max_linienr//3+1); 10 5399 10 5399 for ref:= 0 step 512 until (max_linienr//768*512) do 10 5400 begin 11 5401 i:= læs_fil(1035,ref//512+1,j); 11 5402 if i <> 0 then 11 5403 fejlreaktion(5,i,<:liniefordelingstabel:>,0); 11 5404 tofrom(io_linietabel.ref,fil(j), 11 5405 if (((max_linienr+1 - (ref//2*3))+2)//3*2) > 512 then 512 11 5406 else ((max_linienr+1 - (ref//2*3))+2)//3*2); 11 5407 end; 10 5408 ref:=0; 10 5409 operatør:=ia(1); 10 5410 for j:=2 step 1 until indeks do 10 5411 begin 11 5412 ll:=ia(j); 11 5413 if ll<>0 then 11 5414 skrivtegn(io_linietabel,abs(ll)+1, 11 5415 if ll>0 then operatør else 0); 11 5416 end; 10 5417 for ref:= 0 step 512 until (max_linienr//768*512) do 10 5418 begin 11 5419 i:= skriv_fil(1035,ref//512+1,j); 11 5420 if i <> 0 then 11 5421 fejlreaktion(6,i,<:liniefordelingstabel:>,0); 11 5422 tofrom(fil(j),io_linietabel.ref, 11 5423 if (((max_linienr+1 - (ref//2*3))+2)//3*2) > 512 11 5424 then 512 else ((max_linienr+1 - (ref//2*3))+2)//3*2 11 5425 ); 11 5426 end; 10 5427 ref:=0; 10 5428 end 9 5429 else 9 5430 begin 10 5431 modiffil(1034,1,i); 10 5432 ref:=0; 10 5433 operatør:=ia(1); 10 5434 for j:=2 step 1 until indeks do 10 5435 begin 11 5436 ll:=ia(j); 11 5437 fil(i).ref(ll):= if ll>0 then operatør else 0; 11 5438 end; 10 5439 end; 9 5440 indeks:=op_ref; 9 5441 signal_ch(cs_rad,op_ref,gen_optype or io_optype); 9 5442 <*V*> wait_ch(cs_io_komm,op_ref,io_optype,-1); 9 5443 9 5443 <*+4*> if op_ref<>indeks then 9 5444 fejlreaktion(11<*fr.post*>,op_ref, 9 5445 <:io-komm,liniefordeling retur fra rad:>,0); 9 5446 <*-4*> 9 5447 9 5447 <*V*> setposition(z_io,0,0); 9 5448 if sluttegn<>'nl' then outchar(z_io,'nl'); 9 5449 skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat); 9 5450 9 5450 end; 8 5451 8 5451 begin 9 5452 \f 9 5452 message procedure io_komm side 21 - 820301/cl; 9 5453 9 5453 <* 10 springdefinition *> 9 5454 9 5454 tofrom(d.op_ref.data,ia,indeks*2); 9 5455 <*V*> wait_ch(cs_io_fil,vt_op,true,-1<*timeout*>); 9 5456 start_operation(vt_op,101,cs_io_komm, 9 5457 101<*opret fil*>); 9 5458 d.vt_op.data(1):=128;<*postantal*> 9 5459 d.vt_op.data(2):=2; <*postlængde*> 9 5460 d.vt_op.data(3):=1; <*segmentantal*> 9 5461 d.vt_op.data(4):= 9 5462 2 shift 10; <*spool fil*> 9 5463 signal_ch(cs_opret_fil,vt_op,io_optype); 9 5464 pos:=vt_op;<*variabel lånes*> 9 5465 <*V*> wait_ch(cs_io_komm,vt_op,io_optype,-1<*timeout*>); 9 5466 <*+4*> if vt_op<>pos then 9 5467 fejlreaktion(11<*fremmed post*>,vt_op,<:springdef:>,0); 9 5468 if d.vt_op.data(9)<>0 then 9 5469 fejlreaktion(13<*opret-fil*>,d.vt_op.data(9), 9 5470 <:io-kommando(springdefinition):>,0); 9 5471 <*-4*> 9 5472 iaf:=0; 9 5473 for i:=1 step 1 until indeks-2 do 9 5474 begin 10 5475 disable k:=modif_fil(d.vt_op.data(4),i,j); 10 5476 if k<>0 then 10 5477 fejlreaktion(7<*modif-fil*>,k, 10 5478 <:io kommando(spring-def):>,0); 10 5479 fil(j).iaf(1):=d.op_ref.data(i+2); 10 5480 end; 9 5481 while sep = ',' do 9 5482 begin 10 5483 wait(bs_fortsæt_adgang); 10 5484 pos:= 1; j:= 0; 10 5485 while læs_store(z_io,i) < 8 do 10 5486 begin 11 5487 skrivtegn(fortsæt,pos,i); 11 5488 if i = '?' or i = 'esc' then j:= 1; <* skip kommando *> 11 5489 end; 10 5490 skrivtegn(fortsæt,pos,'em'); 10 5491 afsluttext(fortsæt,pos); 10 5492 sluttegn:= i; 10 5493 if j<>0 then 10 5494 begin 11 5495 setposition(z_io,0,0); 11 5496 if sluttegn <> 'nl' then outchar(z_io,'nl'); 11 5497 skriv_kvittering(z_io,opref,-1,53);<*annulleret*> 11 5498 goto sp_ann; 11 5499 end; 10 5500 \f 10 5500 message procedure io_komm side 22 - 810519/cl; 10 5501 10 5501 disable begin 11 5502 integer array værdi(1:4); 11 5503 integer a_pos,res; 11 5504 pos:= 0; 11 5505 repeat 11 5506 apos:= pos; 11 5507 læs_paramsæt(fortsæt,a_pos,0,værdi,sep,res); 11 5508 if res >= 0 then 11 5509 begin 12 5510 if res=0 and (sep=',' or indeks>2) then <*ok*> 12 5511 else if res=0 then res:= -25 <*parameter mangler*> 12 5512 else if res=10 and (værdi(1)<1 or værdi(1)>99) then 12 5513 res:= -44 <*intervalstørrelse ulovlig*> 12 5514 else if res=10 and (værdi(2)<1 or værdi(2)>99) then 12 5515 res:= -6 <*løbnr ulovligt*> 12 5516 else if res=10 then 12 5517 begin 13 5518 k:=modiffil(d.vt_op.data(4),indeks-1,j); 13 5519 if k<>0 then fejlreaktion(7<*modiffil*>,k, 13 5520 <:io kommando(spring-def):>,0); 13 5521 iaf:= 0; 13 5522 fil(j).iaf(1):= værdi(1) shift 12 + værdi(2); 13 5523 indeks:= indeks+1; 13 5524 if sep = ',' then res:= 0; 13 5525 end 12 5526 else res:= -27; <*parametertype*> 12 5527 end; 11 5528 if res>0 then pos:= a_pos; 11 5529 until sep<>'sp' or res<=0; 11 5530 11 5530 if res<0 then 11 5531 begin 12 5532 d.op_ref.resultat:= -res; 12 5533 i:=1; 12 5534 hægt_tekst(d.op_ref.data,i,fortsæt,1); 12 5535 afsluttext(d.op_ref.data,i); 12 5536 end; 11 5537 end; 10 5538 \f 10 5538 message procedure io_komm side 23 - 810519/cl; 10 5539 10 5539 if d.op_ref.resultat > 3 then 10 5540 begin 11 5541 setposition(z_io,0,0); 11 5542 if sluttegn <> 'nl' then outchar(z_io,'nl'); 11 5543 skriv_kvittering(z_io,op_ref,pos,d.opref.resultat); 11 5544 goto sp_ann; 11 5545 end; 10 5546 signalbin(bs_fortsæt_adgang); 10 5547 end while sep = ','; 9 5548 d.vt_op.data(1):= indeks-2; 9 5549 k:= sætfildim(d.vt_op.data); 9 5550 if k<>0 then fejlreaktion(9,k,<:io kommando(spring-def):>,0); 9 5551 d.op_ref.data(3):= d.vt_op.data(4); <*filref*> 9 5552 signalch(cs_io_fil,vt_op,io_optype or gen_optype); 9 5553 d.op_ref.retur:=cs_io_komm; 9 5554 pos:=op_ref; 9 5555 signal_ch(cs_vt,op_ref,gen_optype or io_optype); 9 5556 <*V*> wait_ch(cs_io_komm,op_ref,io_optype,-1<*timeout*>); 9 5557 <*+4*> if pos<>op_ref then 9 5558 fejlreaktion(11<*fremmed post*>,op_ref, 9 5559 <:io kommando(springdef retur fra vt):>,0); 9 5560 <*-4*> 9 5561 9 5561 <*V*> setposition(z_io,0,0); 9 5562 if sluttegn<>'nl' then outchar(z_io,'nl'); 9 5563 skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat); 9 5564 9 5564 if false then 9 5565 begin 10 5566 sp_ann: signalch(cs_slet_fil,vt_op,io_optype); 10 5567 waitch(cs_io_komm,vt_op,io_optype,-1); 10 5568 signalch(cs_io_fil,vt_op,io_optype or vt_optype); 10 5569 signalbin(bs_fortsæt_adgang); 10 5570 end; 9 5571 9 5571 end; 8 5572 begin 9 5573 integer i,j,k,opr,lin,max_lin; 9 5574 boolean o_ud, t_ud; 9 5575 \f 9 5575 message procedure io_komm side 23a - 820301/cl; 9 5576 9 5576 <* 11 fordelingsrapport *> 9 5577 9 5577 <*V*> setposition(z_io,0,0); 9 5578 if sluttegn <> 'nl' then outchar(z_io,'nl'); 9 5579 9 5579 max_lin:= max_linienr; 9 5580 for opr:= 1 step 1 until max_antal_operatører, 0 do 9 5581 begin 10 5582 o_ud:= t_ud:= false; 10 5583 k:= 0; 10 5584 10 5584 if opr<>0 then 10 5585 begin 11 5586 j:= k:= 0; 11 5587 for lin:= 1 step 1 until max_lin do 11 5588 begin 12 5589 læs_tegn(radio_linietabel,lin+1,i); 12 5590 if i<>0 then j:= lin; 12 5591 if opr=i and opr<>0 then 12 5592 begin 13 5593 if -, o_ud then 13 5594 begin 14 5595 o_ud:= true; 14 5596 if opr<>0 then 14 5597 write(z_io,"nl",1,<:operatør:>,<< dd>,opr, 14 5598 "sp",2,string bpl_navn(opr)) 14 5599 else 14 5600 write(z_io,"nl",1,<:ikke fordelte:>); 14 5601 end; 13 5602 if -, t_ud then 13 5603 begin 14 5604 write(z_io,<:<'nl'> linier: :>); 14 5605 t_ud:= true; 14 5606 end; 13 5607 k:=k+1; 13 5608 if k>1 and k mod 10 = 1 then 13 5609 write(z_io,"nl",1,"sp",13); 13 5610 write(z_io,<<ddd >,lin); 13 5611 end; 12 5612 if lin=max_lin then max_lin:= j; 12 5613 end; 11 5614 end; 10 5615 10 5615 k:= 0; t_ud:= false; 10 5616 for i:= 1 step 1 until max_antal_områder do 10 5617 begin 11 5618 if radio_områdetabel(i)= opr then 11 5619 begin 12 5620 if -, o_ud then 12 5621 begin 13 5622 o_ud:= true; 13 5623 if opr<>0 then 13 5624 write(z_io,"nl",1,<:operatør:>,<< dd>,opr, 13 5625 "sp",2,string bpl_navn(opr)) 13 5626 else 13 5627 write(z_io,"nl",1,<:ikke fordelte:>); 13 5628 end; 12 5629 if -, t_ud then 12 5630 begin 13 5631 write(z_io,<:<'nl'> områder: :>); 13 5632 t_ud:= true; 13 5633 end; 12 5634 k:= k+1; 12 5635 if k>1 and k mod 10 = 1 then 12 5636 write(z_io,"nl",1,"sp",13); 12 5637 write(z_io,true,4,string område_navn(i)); 12 5638 end; 11 5639 end; 10 5640 if o_ud then write(z_io,"nl",1); 10 5641 end; 9 5642 write(z_io,"*",1); 9 5643 end; 8 5644 8 5644 begin 9 5645 integer omr,typ,sum; 9 5646 integer array ialt(1:5); 9 5647 real r; 9 5648 \f 9 5648 message procedure io_komm side 24 - 810501/hko; 9 5649 9 5649 <* 12 vis/nulstil opkaldstællere *> 9 5650 9 5650 setposition(z_io,0,0); 9 5651 if sluttegn<>'nl' then outchar(z_io,'nl'); 9 5652 9 5652 if kode=76 and indeks=1 then 9 5653 begin <* TÆ,N <tid> *> 10 5654 if ia(1)<(-1) or 2400<ia(1) then 10 5655 skriv_kvittering(z_io,opref,-1,64) 10 5656 else 10 5657 begin 11 5658 if ia(1)=(-1) then nulstil_systællere:= -1 11 5659 else nulstil_systællere:= (ia(1) mod 2400)*100; 11 5660 opdater_tf_systællere; 11 5661 typ:= opref; <* typ lånes til gemmevariabel *> 11 5662 d.opref.retur:= cs_io_komm; 11 5663 signal_ch(cs_io_nulstil,opref,io_optype); 11 5664 <*V*> wait_ch(cs_io_komm,opref,io_optype,-1); 11 5665 <*+4*> if opref <> typ then 11 5666 fejlreaktion(11<*fremmed post*>,opref, 11 5667 <:io_kommando:>,0); 11 5668 <*-4*> 11 5669 skriv_kvittering(z_io,opref,-1,3); 11 5670 end; 10 5671 end 9 5672 else 9 5673 begin 10 5674 for typ:= 1 step 1 until 5 do ialt(typ):= 0; 10 5675 10 5675 write(z_io, 10 5676 <:område udgående alm. ind nød ind:>, 10 5677 <: ind ialt total ej forb. optaget:>,"nl",1); 10 5678 for omr := 1 step 1 until max_antal_områder do 10 5679 begin 11 5680 sum:= 0; 11 5681 write(z_io,true,6,string område_navn(omr),":",1); 11 5682 for typ:= 1 step 1 until 3 do 11 5683 begin 12 5684 write(z_io,<< ddddddd>,opkalds_tællere((omr-1)*5+typ)); 12 5685 sum:= sum + opkalds_tællere((omr-1)*5+typ); 12 5686 ialt(typ):= ialt(typ)+opkalds_tællere((omr-1)*5+typ); 12 5687 end; 11 5688 write(z_io,<< ddddddd>, 11 5689 sum-opkalds_tællere((omr-1)*5+1),sum,"sp",2); 11 5690 for typ:= 4 step 1 until 5 do 11 5691 begin 12 5692 write(z_io,<< ddddddd>,opkalds_tællere((omr-1)*5+typ)); 12 5693 ialt(typ):= ialt(typ)+opkalds_tællere((omr-1)*5+typ); 12 5694 end; 11 5695 write(z_io,"nl",1); 11 5696 end; 10 5697 sum:= 0; 10 5698 write(z_io,"nl",1,<:ialt ::>); 10 5699 for typ:= 1 step 1 until 3 do 10 5700 begin 11 5701 write(z_io,<< ddddddd>,ialt(typ)); 11 5702 sum:= sum+ialt(typ); 11 5703 end; 10 5704 write(z_io,<< ddddddd>,sum-ialt(1),sum,"sp",2, 10 5705 ialt(4), ialt(5), "nl",3); 10 5706 10 5706 for typ:= 1 step 1 until 5 do ialt(typ):= 0; 10 5707 write(z_io, 10 5708 <:oper. udgående alm. ind nød ind:>, 10 5709 <: ind ialt total ej forb. optaget:>,"nl",1); 10 5710 for omr := 1 step 1 until max_antal_operatører do 10 5711 begin 11 5712 sum:= 0; 11 5713 if bpl_navn(omr)=long<::> then 11 5714 write(z_io,"sp",6-write(z_io,<:op:>,<<d>,omr),":",1) 11 5715 else 11 5716 write(z_io,true,6,string bpl_navn(omr),":",1); 11 5717 for typ:= 1 step 1 until 3 do 11 5718 begin 12 5719 write(z_io,<< ddddddd>,operatør_tællere((omr-1)*4+typ)); 12 5720 sum:= sum + operatør_tællere((omr-1)*5+typ); 12 5721 ialt(typ):= ialt(typ)+operatør_tællere((omr-1)*5+typ); 12 5722 end; 11 5723 write(z_io,<< ddddddd>, 11 5724 sum-operatør_tællere((omr-1)*5+1),sum,"sp",2); 11 5725 for typ:= 4 step 1 until 5 do 11 5726 begin 12 5727 write(z_io,<< ddddddd>,operatør_tællere((omr-1)*5+typ)); 12 5728 ialt(typ):= ialt(typ)+operatør_tællere((omr-1)*5+typ); 12 5729 end; 11 5730 write(z_io,"nl",1); 11 5731 end; 10 5732 sum:= 0; 10 5733 write(z_io,"nl",1,<:ialt ::>); 10 5734 for typ:= 1 step 1 until 3 do 10 5735 begin 11 5736 write(z_io,<< ddddddd>,ialt(typ)); 11 5737 sum:= sum+ialt(typ); 11 5738 end; 10 5739 write(z_io,<< ddddddd>,sum-ialt(1),sum,"sp",2, 10 5740 ialt(4),ialt(5),"nl",2); 10 5741 10 5741 typ:= replacechar(1,':'); 10 5742 write(z_io,<:tællere nulstilles :>); 10 5743 if nulstil_systællere=(-1) then 10 5744 write(z_io,<:ikke automatisk:>,"nl",1) 10 5745 else 10 5746 write(z_io,<:automatisk kl. :>,<<zd dd dd>, 10 5747 nulstil_systællere,"nl",1); 10 5748 replacechar(1,'.'); 10 5749 write(z_io,<:sidst nulstillet d. :>,<<zd dd dd>, 10 5750 systime(4,systællere_nulstillet,r)); 10 5751 replacechar(1,':'); 10 5752 write(z_io,<: kl. :>,<<zd dd dd>,r,"nl",1); 10 5753 replacechar(1,typ); 10 5754 write(z_io,"*",1,"nl",1); 10 5755 setposition(z_io,0,0); 10 5756 10 5756 if kode = 76 <* nulstil tællere *> then 10 5757 disable begin 11 5758 for omr:= 1 step 1 until max_antal_områder*5 do 11 5759 opkalds_tællere(omr):= 0; 11 5760 for omr:= 1 step 1 until max_antal_operatører*5 do 11 5761 operatør_tællere(omr):= 0; 11 5762 systime(1,0.0,systællere_nulstillet); 11 5763 opdater_tf_systællere; 11 5764 typ:= replacechar(1,'.'); 11 5765 write(z_io,<:!!! tællere nulstillet d. :>,<<zd dd dd>, 11 5766 systime(4,systællere_nulstillet,r)); 11 5767 replacechar(1,':'); 11 5768 write(z_io,<: kl. :>,<<zd dd dd>,r,"nl",1); 11 5769 replacechar(1,typ); 11 5770 setposition(z_io,0,0); 11 5771 end; 10 5772 end; 9 5773 end; 8 5774 8 5774 begin 9 5775 \f 9 5775 message procedure io_komm side 25 - 940522/cl; 9 5776 9 5776 <* 13 navngiv betjeningsplads *> 9 5777 boolean incl; 9 5778 long field lf; 9 5779 9 5779 lf:=6; 9 5780 operatør:= ia(1); 9 5781 navn:= ia.lf; 9 5782 incl:= false add (ia(4) extract 8); 9 5783 9 5783 if navn=long<::> then 9 5784 begin 10 5785 <* nedlæg navn - check for i brug *> 10 5786 iaf:= operatør*terminal_beskr_længde; 10 5787 if terminal_tab.iaf.terminal_tilstand shift (-21)<>7 then 10 5788 d.opref.resultat:= 48 <*i brug*> 10 5789 else 10 5790 begin 11 5791 for i:= 65 step 1 until top_bpl_gruppe do 11 5792 begin 12 5793 iaf:= i*op_maske_lgd; 12 5794 if læsbit_ia(bpl_def.iaf,operatør) then 12 5795 d.opref.resultat:= 48<*i brug*>; 12 5796 end; 11 5797 end; 10 5798 if d.opref.resultat <= 3 then 10 5799 begin 11 5800 for i:= 1 step 1 until sidste_bus do 11 5801 if bustabel(i) shift (-14) extract 8 = operatør then 11 5802 d.opref.resultat:= 48<*i brug*>; 11 5803 end; 10 5804 end 9 5805 else 9 5806 begin 10 5807 <* opret/omdøb *> 10 5808 i:= find_bpl(navn); 10 5809 if i<>0 and i<>operatør then 10 5810 d.opref.resultat:= 48 <*i brug*>; 10 5811 end; 9 5812 if d.opref.resultat<=3 then 9 5813 begin 10 5814 bpl_navn(operatør):= navn; 10 5815 operatør_auto_include(operatør):= incl; 10 5816 k:= modif_fil(tf_bpl_navne,operatør,ll); 10 5817 if k<>0 then 10 5818 fejlreaktion(7,k,<:betjeningsplads,navngiv:>,0); 10 5819 lf:= 4; 10 5820 fil(ll).lf:= navn add (incl extract 8); 10 5821 setposition(fil(ll),0,0); 10 5822 10 5822 <* skriv bplnavne *> 10 5823 disable begin 11 5824 zone z(128,1,stderror); 11 5825 long array field laf; 11 5826 integer array ia(1:10); 11 5827 11 5827 open(z,4,<:bplnavne:>,0); 11 5828 laf:= 0; 11 5829 outrec6(z,512); 11 5830 for i:= 1 step 1 until 127 do 11 5831 z.laf(i):= bpl_navn(i); 11 5832 close(z,true); 11 5833 monitor(42,z,0,ia); 11 5834 ia(6):= systime(7,0,0.0); 11 5835 monitor(44,z,0,ia); 11 5836 end; 10 5837 d.opref.resultat:= 3;<*udført*> 10 5838 end; 9 5839 9 5839 setposition(z_io,0,0); 9 5840 if sluttegn<>'nl' then outchar(z_io,'nl'); 9 5841 skriv_kvittering(z_io,opref,-1,d.opref.resultat); 9 5842 end; 8 5843 8 5843 begin 9 5844 \f 9 5844 message procedure io_komm side 26 - 940522/cl; 9 5845 9 5845 <* 14 betjeningsplads - gruppe *> 9 5846 integer ant_i_gruppe; 9 5847 long field lf; 9 5848 integer array maske(1:op_maske_lgd//2); 9 5849 9 5849 lf:= 4; ant_i_gruppe:= 0; 9 5850 tofrom(maske,ingen_operatører,op_maske_lgd); 9 5851 navn:= ia.lf; 9 5852 operatør:= find_bpl(navn); 9 5853 for i:= 3 step 1 until indeks do 9 5854 if sætbit_ia(maske,ia(i),1)=0 then 9 5855 ant_i_gruppe:= ant_i_gruppe+1; 9 5856 if ant_i_gruppe=0 then 9 5857 begin 10 5858 <* slet gruppe *> 10 5859 if operatør<=64 then 10 5860 d.opref.resultat:= (if operatør=0 then 46<*navn ukendt*> 10 5861 else 62<*navn ulovligt*>) 10 5862 else 10 5863 begin 11 5864 for i:= 1 step 1 until max_antal_operatører do 11 5865 for j:= 1 step 1 until 3 do 11 5866 if operatør_stop(i,j)=operatør then 11 5867 d.opref.resultat:= 48<*i brug*>; 11 5868 end; 10 5869 navn:= long<::>; 10 5870 end 9 5871 else 9 5872 begin 10 5873 if 1<=operatør and operatør<=64 then 10 5874 d.opref.resultat:= 62<*navn ulovligt*> 10 5875 else 10 5876 if operatør=0 then 10 5877 begin 11 5878 i:=65; 11 5879 while i<=127 and operatør=0 do 11 5880 begin 12 5881 if bpl_navn(i)=long<::> then operatør:=i; 12 5882 i:= i+1; 12 5883 end; 11 5884 if operatør=0 then 11 5885 d.opref.resultat:= 32<*ikke plads*> 11 5886 else if operatør>top_bpl_gruppe then 11 5887 top_bpl_gruppe:= operatør; 11 5888 end; 10 5889 end; 9 5890 if d.opref.resultat<=3 then 9 5891 begin 10 5892 bpl_navn(operatør):= navn; 10 5893 iaf:= operatør*op_maske_lgd; 10 5894 tofrom(bpl_def.iaf,maske,op_maske_lgd); 10 5895 bpl_tilst(operatør,1):= bpl_tilst(operatør,2):= 0; 10 5896 for i:= 1 step 1 until max_antal_operatører do 10 5897 begin 11 5898 if læsbit_ia(maske,i) then 11 5899 begin 12 5900 bpl_tilst(operatør,2):= bpl_tilst(operatør,2)+1; 12 5901 if læsbit_ia(operatør_maske,i) then 12 5902 bpl_tilst(operatør,1):= bpl_tilst(operatør,1)+1; 12 5903 end; 11 5904 end; 10 5905 k:=modif_fil(tf_bplnavne,operatør,ll); 10 5906 if k<>0 then 10 5907 fejlreaktion(7,k,<:btj.plads,gruppenavn:>,0); 10 5908 lf:= 4; 10 5909 fil(ll).lf:= navn; 10 5910 setposition(fil(ll),0,0); 10 5911 iaf:= 0; 10 5912 k:= modif_fil(tf_bpl_def,operatør-64,ll); 10 5913 if k<>0 then 10 5914 fejlreaktion(7,k,<:btj.plads,gruppedef:>,0); 10 5915 for i:= 1 step 1 until op_maske_lgd//2 do 10 5916 fil(ll).iaf(i):= maske(i); 10 5917 fil(ll).iaf(4):= bpl_tilst(operatør,2); 10 5918 setposition(fil(ll),0,0); 10 5919 d.opref.resultat:= 3; 10 5920 end; 9 5921 9 5921 setposition(z_io,0,0); 9 5922 if sluttegn<>'nl' then outchar(z_io,'nl'); 9 5923 skriv_kvittering(z_io,opref,-1,d.opref.resultat); 9 5924 end; 8 5925 8 5925 begin 9 5926 \f 9 5926 message procedure io_komm side 27 - 940522/cl; 9 5927 9 5927 <* 15 vis betjeningspladsdefinitioner *> 9 5928 9 5928 setposition(z_io,0,0); 9 5929 if sluttegn<>'nl' then outchar(z_io,'nl'); 9 5930 write(z_io,"nl",1,<:operatørpladser::>,"nl",1); 9 5931 for i:= 1 step 1 until max_antal_operatører do 9 5932 begin 10 5933 write(z_io,<<dd>,i,<:: :>,true,6,string bpl_navn(i), 10 5934 case operatør_auto_include(i) extract 2 + 1 of( 10 5935 <:(--):>,<:(ÅB):>,<:(??):>,<:(ST):>)); 10 5936 if i mod 4 = 0 then write(z_io,"nl",1) 10 5937 else write(z_io,"sp",5); 10 5938 end; 9 5939 if max_antal_operatører mod 4 <> 0 then write(z_io,"nl",1); 9 5940 write(z_io,"nl",1,<:grupper::>,"nl",1); 9 5941 for i:= 65 step 1 until top_bpl_gruppe do 9 5942 begin 10 5943 ll:=0; iaf:= i*op_maske_lgd; 10 5944 if bpl_navn(i)<>long<::> then 10 5945 begin 11 5946 write(z_io,true,6,string bpl_navn(i),":",1); 11 5947 for j:= 1 step 1 until max_antal_operatører do 11 5948 begin 12 5949 if læsbit_ia(bpl_def.iaf,j) then 12 5950 begin 13 5951 if ll mod 8 = 0 and ll<>0 then 13 5952 write(z_io,"nl",1,"sp",7); 13 5953 write(z_io,"sp",2,string bpl_navn(j)); 13 5954 ll:=ll+1; 13 5955 end; 12 5956 end; 11 5957 write(z_io,"nl",1); 11 5958 end; 10 5959 end; 9 5960 write(z_io,"*",1); 9 5961 end; 8 5962 8 5962 begin 9 5963 \f 9 5963 message procedure io_komm side 28 - 940522/cl; 9 5964 9 5964 <* 16 stopniveau,definer *> 9 5965 9 5965 operatør:= ia(1); 9 5966 iaf:= operatør*terminal_beskr_længde; 9 5967 for i:= 1 step 1 until 3 do 9 5968 operatør_stop(operatør,i):= ia(i+1); 9 5969 if -,læsbit_ia(operatørmaske,operatør) then 9 5970 begin 10 5971 tofrom(opkaldsflag,alle_operatører,op_maske_lgd); 10 5972 signal_bin(bs_mobilopkald); 10 5973 end; 9 5974 k:=modif_fil(tf_stoptabel,operatør,ll); 9 5975 if k<>0 then 9 5976 fejlreaktion(7,k,<:stopniveau,definer:>,0); 9 5977 iaf:= 0; 9 5978 for i:= 0 step 1 until 3 do 9 5979 fil(ll).iaf(i+1):= operatør_stop(operatør,i); 9 5980 setposition(fil(ll),0,0); 9 5981 setposition(z_io,0,0); 9 5982 if sluttegn<>'nl' then outchar(z_io,'nl'); 9 5983 skriv_kvittering(z_io,0,-1,3); 9 5984 end; 8 5985 8 5985 begin 9 5986 \f 9 5986 message procedure io_komm side 29 - 940522/cl; 9 5987 9 5987 <* 17 stopniveauer,vis *> 9 5988 9 5988 setposition(z_io,0,0); 9 5989 if sluttegn<>'nl' then outchar(z_io,'nl'); 9 5990 9 5990 for operatør:= 1 step 1 until max_antal_operatører do 9 5991 begin 10 5992 iaf:=operatør*terminal_beskr_længde; 10 5993 ll:=0; 10 5994 ll:=write(z_io,<<dd>,operatør,<:: :>,true,6, 10 5995 string bpl_navn(operatør),<:(:>, 10 5996 case terminal_tab.iaf.terminal_tilstand shift (-21) 10 5997 + 1 of (<:AKTIV:>,<:AKTIV:>,<:AKTIV:>,<:PAUSE:>, 10 5998 <:EKSKL:>,<:EKSKL:>,<:EKSKL:>,<:EKSKL:>), <:) :>); 10 5999 for i:= 1 step 1 until 3 do 10 6000 ll:= ll+write(z_io,if i=1 then "sp" else "/",1, 10 6001 if operatør_stop(operatør,i)=0 then <:ALLE:> 10 6002 else string bpl_navn(operatør_stop(operatør,i))); 10 6003 if operatør mod 2 = 1 then 10 6004 write(z_io,"sp",40-ll) 10 6005 else 10 6006 write(z_io,"nl",1); 10 6007 end; 9 6008 if max_antal_operatører mod 2 <> 0 then write(z_io,"nl",1); 9 6009 write(z_io,"*",1); 9 6010 end; 8 6011 8 6011 begin 9 6012 \f 9 6012 message procedure io_komm side 30 - 941007/cl; 9 6013 9 6013 <* 18 alarmlængder *> 9 6014 9 6014 setposition(z_io,0,0); 9 6015 if sluttegn<>'nl' then outchar(z_io,'nl'); 9 6016 9 6016 for operatør:= 1 step 1 until max_antal_operatører do 9 6017 begin 10 6018 ll:=0; 10 6019 ll:=write(z_io,<<dd>,operatør,<:: :>,true,6, 10 6020 string bpl_navn(operatør)); 10 6021 iaf:=(operatør-1)*opk_alarm_tab_lgd; 10 6022 if opk_alarm.iaf.alarm_lgd < 0 then 10 6023 ll:= ll+write(z_io,<:uendelig:>) 10 6024 else 10 6025 ll:= ll+write(z_io,<<ddddddd>, 10 6026 opk_alarm.iaf.alarm_lgd,<: sek.:>); 10 6027 10 6027 if operatør mod 2 = 1 then 10 6028 write(z_io,"sp",40-ll) 10 6029 else 10 6030 write(z_io,"nl",1); 10 6031 end; 9 6032 if max_antal_operatører mod 2 <> 0 then write(z_io,"nl",1); 9 6033 write(z_io,"*",1); 9 6034 end; 8 6035 8 6035 begin 9 6036 <* 19 CC *> 9 6037 integer i, c; 9 6038 9 6038 i:= 1; 9 6039 while læstegn(ia,i+0,c)<>0 and 9 6040 i<(op_spool_postlgd-op_spool_text)//2*3 9 6041 do skrivtegn(d.opref.data,i,c); 9 6042 repeat skrivtegn(d.opref.data,i,0) until (i mod 6)=1; 9 6043 9 6043 d.opref.retur:= cs_io_komm; 9 6044 signalch(cs_op,opref,io_optype or gen_optype); 9 6045 <*V*> waitch(cs_io_komm,opref,io_optype,-1); 9 6046 9 6046 setposition(z_io,0,0); 9 6047 if sluttegn<>'nl' then outchar(z_io,'nl'); 9 6048 skriv_kvittering(z_io,opref,-1,d.opref.resultat); 9 6049 end; 8 6050 8 6050 begin 9 6051 <* 20: CQF,I CQF,U CQF,V *> 9 6052 integer kode, res, i, j; 9 6053 integer array field iaf, iaf1; 9 6054 long field navn; 9 6055 9 6055 kode:= d.opref.opkode extract 12; 9 6056 navn:= 6; res:= 0; 9 6057 if kode=90 <*CQF,I*> then 9 6058 begin 10 6059 if søg_omr_bus(ia(1),0,0,0,0,0) < 0 then 10 6060 res:= 10 <*busnr ukendt*> 10 6061 else 10 6062 begin 11 6063 j:= -1; 11 6064 for i:= 1 step 1 until max_cqf do 11 6065 begin 12 6066 iaf:= (i-1)*cqf_lgd; 12 6067 if ia(1) = cqf_tabel.iaf.cqf_bus or 12 6068 ia.navn = cqf_tabel.iaf.cqf_id 12 6069 then res:= 48; <*i brug*> 12 6070 if j<0 and cqf_tabel.iaf.cqf_bus=0 then j:= i; 12 6071 end; 11 6072 if res=0 and j<0 then res:= 32; <*ingen fri plads*> 11 6073 if res=0 then 11 6074 begin 12 6075 iaf:= (j-1)*cqf_lgd; 12 6076 cqf_tabel.iaf.cqf_bus:= ia(1); 12 6077 cqf_tabel.iaf.cqf_fejl:= 0; 12 6078 cqf_tabel.iaf.cqf_id:= ia.navn; 12 6079 cqf_tabel.iaf.cqf_ok_tid:= real <::>; 12 6080 cqf_tabel.iaf.cqf_næste_tid:= d.opref.tid + 15*60.0; 12 6081 res:= 3; 12 6082 end; 11 6083 end; 10 6084 setposition(z_io,0,0); 10 6085 if sluttegn<>'nl' then outchar(z_io,'nl'); 10 6086 skriv_kvittering(z_io,opref,-1,res); 10 6087 end 9 6088 else 9 6089 if kode=91 <*CQF,U*> then 9 6090 begin 10 6091 j:= -1; 10 6092 for i:= 1 step 1 until max_cqf do 10 6093 begin 11 6094 iaf:= (i-1)*cqf_lgd; 11 6095 if ia(1) = cqf_tabel.iaf.cqf_bus then j:= i; 11 6096 end; 10 6097 if j>=0 then 10 6098 begin 11 6099 iaf:= (j-1)*cqf_lgd; 11 6100 for i:= 1 step 1 until cqf_lgd//2 do 11 6101 cqf_tabel.iaf(i):= 0; 11 6102 res:= 3; 11 6103 end 10 6104 else res:= 13; <*bus ikke indsat*> 10 6105 setposition(z_io,0,0); 10 6106 if sluttegn<>'nl' then outchar(z_io,'nl'); 10 6107 skriv_kvittering(z_io,opref,-1,res); 10 6108 end 9 6109 else 9 6110 begin 10 6111 setposition(z_io,0,0); 10 6112 skriv_cqf_tabel(z_io,false); 10 6113 outchar(z_io,'*'); 10 6114 setposition(z_io,0,0); 10 6115 end; 9 6116 9 6116 if kode=90 or kode=91 then 9 6117 begin 10 6118 j:= skrivfil(1033,1,i); 10 6119 if j<>0 then 10 6120 fejlreaktion(6,j,<:CQF-test cqf-tabel:>,1); 10 6121 for k:= 1 step 1 until max_cqf do 10 6122 begin 11 6123 iaf1:= (k-1)*cqf_lgd; 11 6124 iaf := (k-1)*cqf_id; 11 6125 tofrom(fil(i).iaf,cqf_tabel.iaf1,cqf_id); 11 6126 end; 10 6127 op_cqf_tab_ændret:= true; 10 6128 end; 9 6129 end;<*CQF*> 8 6130 8 6130 8 6130 begin 9 6131 \f 9 6131 message procedure io_komm side xx - 940522/cl; 9 6132 9 6132 9 6132 9 6132 <*+3*> fejl_reaktion(3<*programfejl*>,j,<:case 'opkode':>,2); 9 6133 <*-3*> 9 6134 end 8 6135 end;<*case j *> 7 6136 end <* j > 0 *> 6 6137 else 6 6138 begin 7 6139 <*V*> setposition(z_io,0,0); 7 6140 if sluttegn<>'nl' then outchar(z_io,'nl'); 7 6141 skriv_kvittering(z_io,op_ref,-1, 7 6142 45 <* ikke implementeret *>); 7 6143 end; 6 6144 end;<* godkendt *> 5 6145 5 6145 <*V*> setposition(z_io,0,0); 5 6146 signal_bin(bs_zio_adgang); 5 6147 d.op_ref.retur:=cs_att_pulje; 5 6148 disable afslut_kommando(op_ref); 5 6149 end; <* indlæs kommando *> 4 6150 4 6150 begin 5 6151 \f 5 6151 message procedure io_komm side xx+1 - 810428/hko; 5 6152 5 6152 <* 2: aktiver efter stop *> 5 6153 terminal_tab.ref.terminal_tilstand:= 0 shift 21 + 5 6154 terminal_tab.ref.terminal_tilstand extract 21; 5 6155 afslut_operation(op_ref,-1); 5 6156 signal_bin(bs_zio_adgang); 5 6157 end; 4 6158 4 6158 <*+3*> fejl_reaktion(3<*programfejl *>,aktion,<:case aktion:>,2) 4 6159 <*-3*> 4 6160 end; <* case aktion+6 *> 3 6161 3 6161 until false; 3 6162 io_komm_trap: 3 6163 if -,(alarmcause shift (-24) extract 24 = (-2) and 3 6164 alarmcause extract 24 = (-13)) then 3 6165 disable skriv_io_komm(zbillede,1); 3 6166 end io_komm; 2 6167 \f 2 6167 message procedure io_spool side 1 - 810507/hko; 2 6168 2 6168 procedure io_spool; 2 6169 begin 3 6170 integer 3 6171 næste_tomme,nr; 3 6172 integer array field 3 6173 op_ref; 3 6174 3 6174 procedure skriv_io_spool(zud,omfang); 3 6175 value omfang; 3 6176 zone zud; 3 6177 integer omfang; 3 6178 begin 4 6179 disable write(zud,"nl",1,<:+++ io_spool :>); 4 6180 if omfang > 0 then 4 6181 disable begin integer x; 5 6182 trap(slut); 5 6183 write(zud,"nl",1, 5 6184 <: opref: :>,op_ref,"nl",1, 5 6185 <: næstetomme::>,næste_tomme,"nl",1, 5 6186 <: nr :>,nr,"nl",1, 5 6187 <::>); 5 6188 skriv_coru(zud,coru_no(102)); 5 6189 slut: 5 6190 end;<*disable*> 4 6191 end skriv_io_spool; 3 6192 3 6192 trap(io_spool_trap); 3 6193 næste_tomme:= 1; 3 6194 stack_claim((if cm_test then 200 else 146)+24 +48); 3 6195 <*+2*> 3 6196 if testbit0 and overvåget or testbit28 then 3 6197 skriv_io_spool(out,0); 3 6198 <*-2*> 3 6199 \f 3 6199 message procedure io_spool side 2 - 810602/hko; 3 6200 3 6200 repeat 3 6201 3 6201 wait_ch(cs_io_spool, 3 6202 op_ref, 3 6203 true, 3 6204 -1<*timeout*>); 3 6205 3 6205 i:= d.op_ref.opkode; 3 6206 if i = 22 or i = 23 or i = 36 or i = 45 or i = 46 then 3 6207 begin 4 6208 wait(ss_io_spool_tomme); 4 6209 disable modif_fil(io_spoolfil,næste_tomme,nr); 4 6210 næste_tomme:= (næste_tomme mod io_spool_postantal) +1; 4 6211 4 6211 i:= d.op_ref.opsize; 4 6212 <*+4*> if i > io_spool_postlængde*2 -io_spool_post then 4 6213 begin 5 6214 <* fejlreaktion(3,i,<:postlængde,io spool:>,1); *> 5 6215 i:= io_spool_postlængde*2 -io_spool_post; 5 6216 end; 4 6217 <*-4*> 4 6218 fil(nr,1):= real(extend d.op_ref.opsize shift 24); 4 6219 tofrom(fil(nr).io_spool_post,d.op_ref,i); 4 6220 signal(ss_io_spool_fulde); 4 6221 d.op_ref.resultat:= 1; 4 6222 end 3 6223 else 3 6224 begin 4 6225 fejlreaktion(2<*operationskode*>,d.op_ref.opkode, 4 6226 <:io_spool_korutine:>,1); 4 6227 end; 3 6228 3 6228 signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype); 3 6229 3 6229 until false; 3 6230 3 6230 io_spool_trap: 3 6231 3 6231 disable skriv_io_spool(zbillede,1); 3 6232 end io_spool; 2 6233 \f 2 6233 message procedure io_spon side 1 - 810507/hko; 2 6234 2 6234 procedure io_spon; 2 6235 begin 3 6236 integer 3 6237 næste_fulde,nr,i,dato,kl; 3 6238 real t; 3 6239 3 6239 procedure skriv_io_spon(zud,omfang); 3 6240 value omfang; 3 6241 zone zud; 3 6242 integer omfang; 3 6243 begin 4 6244 disable write(zud,"nl",1,<:+++ io_spon :>); 4 6245 if omfang > 0 then 4 6246 disable begin integer x; 5 6247 trap(slut); 5 6248 write(zud,"nl",1, 5 6249 <: næste-fulde::>,næste_fulde,"nl",1, 5 6250 <: nr :>,nr,"nl",1, 5 6251 <::>); 5 6252 skriv_coru(zud,coru_no(103)); 5 6253 slut: 5 6254 end;<*disable*> 4 6255 end skriv_io_spon; 3 6256 3 6256 trap(io_spon_trap); 3 6257 næste_fulde:= 1; 3 6258 stack_claim((if cm_test then 200 else 146) +24 +48); 3 6259 <*+2*> 3 6260 if testbit0 and overvåget or testbit28 then 3 6261 skriv_io_spon(out,0); 3 6262 <*-2*> 3 6263 \f 3 6263 message procedure io_spon side 2 - 810602/hko/cl; 3 6264 3 6264 repeat 3 6265 3 6265 <*V*> wait(ss_io_spool_fulde); 3 6266 <*V*> wait(bs_zio_adgang); 3 6267 3 6267 <*V*> setposition(zio,0,0); 3 6268 3 6268 disable modif_fil(io_spool_fil,næste_fulde,nr); 3 6269 næste_fulde:= (næste_fulde mod io_spool_postantal) +1; 3 6270 3 6270 laf:=data; 3 6271 k:= fil(nr).io_spool_post.opkode; 3 6272 if k = 22 or k = 36 then 3 6273 disable begin 4 6274 write(z_io,"nl",1,if k=22 then <:auto:> else <:spring:>); 4 6275 if k=36 then 4 6276 begin 5 6277 i:= fil(nr).io_spool_post.data(4); 5 6278 j:= i extract 5; 5 6279 if j<>0 then j:=j+'A'-1; 5 6280 i:= i shift (-5) extract 10; 5 6281 write(z_io,"sp",(j=0) extract 1 + 1,<<ddd>,i,false add j,1,".",1, 5 6282 true,4,string(extend fil(nr).io_spool_post.data(5) shift 24)); 5 6283 end; 4 6284 skriv_auto_spring_medd(zio,fil(nr).io_spool_post.data, 4 6285 fil(nr).io_spool_post.tid) 4 6286 end 3 6287 else if k = 23 then 3 6288 disable 3 6289 begin 4 6290 write(zio,"nl",1,<:-<'>'>:>,fil(nr).io_spool_post.laf); 4 6291 dato:= systime(4,fil(nr).io_spool_post.tid,t); 4 6292 kl:= round t; 4 6293 i:= replace_char(1<*space in number*>,'.'); 4 6294 write(z_io,"sp",2,<<zd_dd_dd>,dato,<< zd_dd_dd>,kl); 4 6295 replace_char(1,i); 4 6296 end 3 6297 else if k = 45 or k = 46 then 3 6298 disable begin 4 6299 integer vogn,linie,bogst,løb,t; 4 6300 4 6300 t:=fil(nr).io_spool_post.data(2); 4 6301 outchar(z_io,'nl'); 4 6302 if k = 45 then 4 6303 write(zio,<<zd.dd>,t/100.0,"sp",1); 4 6304 4 6304 write(zio,<:nødopkald fra :>); 4 6305 vogn:= fil(nr).io_spool_post.data(1); 4 6306 i:= vogn shift (-22); 4 6307 if i < 2 then 4 6308 skrivid(zio,vogn,9) 4 6309 else 4 6310 begin 5 6311 fejlreaktion(3<*programfejl*>,vogn,<:vogn.id, spon.medd:>,1); 5 6312 write(zio,<:!!!:>,vogn); 5 6313 end; 4 6314 \f 4 6314 message procedure io_spon side 3 - 810507/hko; 4 6315 4 6315 if fil(nr).io_spool_post.data(3)<>0 then 4 6316 write(z_io," ",1,string område_navn(fil(nr).io_spool_post.data(3))); 4 6317 4 6317 if k = 46 then 4 6318 begin 5 6319 write(zio,<: besvaret:>,<< zd.dd>,t/100.0); 5 6320 end; 4 6321 end <*disable*> 3 6322 else 3 6323 fejlreaktion(2<*operationskode*>,k,<:io_spon_medd:>,1); 3 6324 3 6324 fil(nr,1):= fil(nr,1) add 1; 3 6325 3 6325 <*V*> setposition(zio,0,0); 3 6326 3 6326 signal_bin(bs_zio_adgang); 3 6327 3 6327 signal(ss_io_spool_tomme); 3 6328 3 6328 until false; 3 6329 3 6329 io_spon_trap: 3 6330 skriv_io_spon(zbillede,1); 3 6331 3 6331 end io_spon; 2 6332 \f 2 6332 message procedure io_medd side 1; 2 6333 2 6333 procedure io_medd; 2 6334 begin 3 6335 integer array field opref; 3 6336 integer afs, kl, i; 3 6337 real dato, t; 3 6338 3 6338 3 6338 procedure skriv_io_medd(zud,omfang); 3 6339 value omfang; 3 6340 zone zud; 3 6341 integer omfang; 3 6342 begin 4 6343 disable write(zud,"nl",1,<:+++ io_medd :>); 4 6344 if omfang > 0 then 4 6345 disable begin integer x; 5 6346 trap(slut); 5 6347 write(zud,"nl",1, 5 6348 <: opref: :>,opref,"nl",1, 5 6349 <: afs: :>,afs,"nl",1, 5 6350 <: kl: :>,kl,"nl",1, 5 6351 <: i: :>,i,"nl",1, 5 6352 <: dato: :>,<<zddddd>,dato,"nl",1, 5 6353 <: t: :>,t,"nl",1, 5 6354 <::>); 5 6355 skriv_coru(zud,coru_no(104)); 5 6356 slut: 5 6357 end;<*disable*> 4 6358 end skriv_io_medd; 3 6359 3 6359 trap(io_medd_trap); 3 6360 stack_claim((if cm_test then 200 else 146) +24 +48); 3 6361 <*+2*> 3 6362 if testbit0 and overvåget or testbit28 then 3 6363 skriv_io_medd(out,0); 3 6364 <*-2*> 3 6365 \f 3 6365 message procedure io_medd side 2; 3 6366 3 6366 repeat 3 6367 <*V*> waitch(cs_io_medd,opref,gen_optype,-1); 3 6368 <*V*> wait(bs_zio_adgang); 3 6369 3 6369 afs:= d.opref.data.op_spool_kilde; 3 6370 dato:= systime(4,d.opref.data.op_spool_tid,t); 3 6371 kl:= round t; 3 6372 write(z_io,"nl",1,<:! fra op:>,<<d>,afs,"sp",1, 3 6373 if afs=0 then <:SYSOP:> else string bpl_navn(afs)); 3 6374 i:= replacechar(1,'.'); 3 6375 disable write(z_io,"sp",1,<<zd_dd_dd>,kl,"nl",1); 3 6376 replacechar(1,i); 3 6377 write(z_io,d.opref.data.op_spool_text); 3 6378 setposition(z_io,0,0); 3 6379 3 6379 signalbin(bs_zio_adgang); 3 6380 signalch((if afs=0 then d.opref.retur else cs_op),opref,d.opref.optype); 3 6381 until false; 3 6382 3 6382 io_medd_trap: 3 6383 skriv_io_medd(zbillede,1); 3 6384 3 6384 end io_medd; 2 6385 2 6385 procedure io_nulstil_tællere; 2 6386 begin 3 6387 real nu, dato, kl, forr, næste, et_døgn, r; 3 6388 integer array field opref; 3 6389 integer ventetid, omr, typ, sum; 3 6390 integer array ialt(1:5); 3 6391 3 6391 procedure skriv_io_null(zud,omfang); 3 6392 value omfang; 3 6393 zone zud; 3 6394 integer omfang; 3 6395 begin 4 6396 disable write(zud,"nl",1,<:+++ io_nulstil_tællere :>); 4 6397 if omfang > 0 then 4 6398 disable begin real t; real array field raf; 5 6399 raf:=0; 5 6400 trap(slut); 5 6401 write(zud,"nl",1, 5 6402 <: opref: :>,opref,"nl",1, 5 6403 <: ventetid: :>,ventetid,"nl",1, 5 6404 <: omr: :>,omr,"nl",1, 5 6405 <: typ: :>,typ,"nl",1, 5 6406 <: sum: :>,sum,"nl",1, 5 6407 <: nu: :>,<< zddddd>,systime(4,nu,t),t,"nl",1, 5 6408 <: forr: :>,systime(4,forr,t),t,"nl",1, 5 6409 <: næste: :>,systime(4,næste,t),t,"nl",1, 5 6410 <: r: :>,systime(4,r,t),t,"nl",1, 5 6411 <: dato: :>,dato,"nl",1, 5 6412 <: kl: :>,kl,"nl",1, 5 6413 <: et-døgn: :>,<< dddddd>,et_døgn,"nl",1, 5 6414 <::>); 5 6415 write(zud,"nl",1,<:ialt: :>); 5 6416 skriv_hele(zud,ialt.raf,10,2); 5 6417 skriv_coru(zud,coru_no(105)); 5 6418 slut: 5 6419 end;<*disable*> 4 6420 end skriv_io_null; 3 6421 3 6421 trap(io_null_trap); 3 6422 et_døgn:= 24*60*60.0; 3 6423 stack_claim(500); 3 6424 <*+2*> 3 6425 if testbit0 and overvåget or testbit28 then 3 6426 skriv_io_null(out,0); 3 6427 <*-2*> 3 6428 pass; 3 6429 3 6429 systime(1,0.0,nu); 3 6430 dato:= systime(4,nu,kl); 3 6431 if nulstil_systællere >= 0 then 3 6432 begin 4 6433 if kl>nulstil_systællere then næste:= systid(dato,nulstil_systællere) 4 6434 + et_døgn 4 6435 else næste:= systid(dato,nulstil_systællere); 4 6436 forr:= næste - et_døgn; 4 6437 if (forr - systællere_nulstillet) > et_døgn then 4 6438 næste:= nu; 4 6439 end; 3 6440 3 6440 repeat 3 6441 ventetid:= (if nulstil_systællere < 0 then (-1) else (næste - nu)); 3 6442 <*V*> waitch(cs_io_nulstil,opref,io_optype,ventetid); 3 6443 3 6443 if opref <= 0 then 3 6444 begin 4 6445 <* nulstil opkaldstællere *> 4 6446 wait(bs_zio_adgang); 4 6447 setposition(z_io,0,0); 4 6448 4 6448 for typ:= 1 step 1 until 5 do ialt(typ):= 0; 4 6449 4 6449 write(z_io,"nl",1,<:!TÆ,N (automatisk):>,"nl",2, 4 6450 <:område udgående alm. ind nød ind:>, 4 6451 <: ind ialt total ej forb. optaget:>,"nl",1); 4 6452 for omr := 1 step 1 until max_antal_områder do 4 6453 begin 5 6454 sum:= 0; 5 6455 write(z_io,true,6,string område_navn(omr),":",1); 5 6456 for typ:= 1 step 1 until 3 do 5 6457 begin 6 6458 write(z_io,<< ddddddd>,opkalds_tællere((omr-1)*5+typ)); 6 6459 sum:= sum + opkalds_tællere((omr-1)*5+typ); 6 6460 ialt(typ):= ialt(typ)+opkalds_tællere((omr-1)*5+typ); 6 6461 end; 5 6462 write(z_io,<< ddddddd>, 5 6463 sum-opkalds_tællere((omr-1)*5+1),sum,"sp",2); 5 6464 for typ:= 4 step 1 until 5 do 5 6465 begin 6 6466 write(z_io,<< ddddddd>,opkalds_tællere((omr-1)*5+typ)); 6 6467 ialt(typ):= ialt(typ)+opkalds_tællere((omr-1)*5+typ); 6 6468 end; 5 6469 write(z_io,"nl",1); 5 6470 end; 4 6471 sum:= 0; 4 6472 write(z_io,"nl",1,<:ialt ::>); 4 6473 for typ:= 1 step 1 until 3 do 4 6474 begin 5 6475 write(z_io,<< ddddddd>,ialt(typ)); 5 6476 sum:= sum+ialt(typ); 5 6477 end; 4 6478 write(z_io,<< ddddddd>,sum-ialt(1),sum,"sp",2, 4 6479 ialt(4), ialt(5), "nl",3); 4 6480 4 6480 for typ:= 1 step 1 until 5 do ialt(typ):= 0; 4 6481 write(z_io,<:oper. udgående alm. ind nød ind:>, 4 6482 <: ind ialt total ej forb. optaget:>,"nl",1); 4 6483 for omr := 1 step 1 until max_antal_operatører do 4 6484 begin 5 6485 sum:= 0; 5 6486 if bpl_navn(omr)=long<::> then 5 6487 write(z_io,"sp",6-write(z_io,<:op:>,<<d>,omr),":",1) 5 6488 else 5 6489 write(z_io,true,6,string bpl_navn(omr),":",1); 5 6490 for typ:= 1 step 1 until 3 do 5 6491 begin 6 6492 write(z_io,<< ddddddd>,operatør_tællere((omr-1)*4+typ)); 6 6493 sum:= sum + operatør_tællere((omr-1)*5+typ); 6 6494 ialt(typ):= ialt(typ)+operatør_tællere((omr-1)*5+typ); 6 6495 end; 5 6496 write(z_io,<< ddddddd>, 5 6497 sum-operatør_tællere((omr-1)*5+1),sum,"sp",2); 5 6498 for typ:= 4 step 1 until 5 do 5 6499 begin 6 6500 write(z_io,<< ddddddd>,operatør_tællere((omr-1)*5+typ)); 6 6501 ialt(typ):= ialt(typ)+operatør_tællere((omr-1)*5+typ); 6 6502 end; 5 6503 write(z_io,"nl",1); 5 6504 end; 4 6505 sum:= 0; 4 6506 write(z_io,"nl",1,<:ialt ::>); 4 6507 for typ:= 1 step 1 until 3 do 4 6508 begin 5 6509 write(z_io,<< ddddddd>,ialt(typ)); 5 6510 sum:= sum+ialt(typ); 5 6511 end; 4 6512 write(z_io,<< ddddddd>,sum-ialt(1),sum,"sp",2, 4 6513 ialt(4),ialt(5),"nl",2); 4 6514 4 6514 typ:= replacechar(1,':'); 4 6515 write(z_io,<:tællere nulstilles :>); 4 6516 if nulstil_systællere=(-1) then 4 6517 write(z_io,<:ikke automatisk:>,"nl",1) 4 6518 else 4 6519 write(z_io,<:automatisk kl. :>,<<zd dd dd>, 4 6520 nulstil_systællere,"nl",1); 4 6521 replacechar(1,'.'); 4 6522 write(z_io,<:sidst nulstillet d. :>,<<zd dd dd>, 4 6523 systime(4,systællere_nulstillet,r)); 4 6524 replacechar(1,':'); 4 6525 write(z_io,<: kl. :>,<<zd dd dd>,r,"nl",1); 4 6526 replacechar(1,typ); 4 6527 write(z_io,"*",1,"nl",1); 4 6528 setposition(z_io,0,0); 4 6529 signal_bin(bs_zio_adgang); 4 6530 4 6530 for omr:= 1 step 1 until max_antal_områder*5 do 4 6531 opkalds_tællere(omr):= 0; 4 6532 for omr:= 1 step 1 until max_antal_operatører*5 do 4 6533 operatør_tællere(omr):= 0; 4 6534 systællere_nulstillet:= næste; 4 6535 opdater_tf_systællere; 4 6536 end 3 6537 else 3 6538 signalch(d.opref.retur,opref,d.opref.optype); 3 6539 3 6539 systime(1,0.0,nu); 3 6540 dato:= systime(4,nu,kl); 3 6541 if nulstil_systællere >= 0 then 3 6542 begin 4 6543 if kl>nulstil_systællere then næste:= systid(dato,nulstil_systællere) 4 6544 + et_døgn 4 6545 else næste:= systid(dato,nulstil_systællere); 4 6546 forr:= næste - et_døgn; 4 6547 end; 3 6548 until false; 3 6549 3 6549 io_null_trap: 3 6550 skriv_io_null(zbillede,1); 3 6551 end io_nulstil_tællere; 2 6552 2 6552 \f 2 6552 message operatør_erklæringer side 1 - 810602/hko; 2 6553 integer 2 6554 cs_op,cs_op_retur,cs_talevejsswitch,cs_tvswitch_adgang,cs_tv_switch_adm, 2 6555 cs_tvswitch_input, cs_op_iomedd, bs_opk_alarm, cs_opk_alarm, cs_cqf, 2 6556 cs_op_spool, cs_op_medd, ss_op_spool_tomme, ss_op_spool_fulde, 2 6557 cs_opk_alarm_ur, cs_opk_alarm_ur_ret, sidste_tv_brugt; 2 6558 integer array 2 6559 cqf_tabel(1:max_cqf*cqf_lgd//2), 2 6560 operatørmaske(1:op_maske_lgd//2), 2 6561 op_talevej(0:max_antal_operatører), 2 6562 tv_operatør(0:max_antal_taleveje), 2 6563 opk_alarm(1:max_antal_operatører*(opk_alarm_tab_lgd//2)), 2 6564 op_spool_buf(1:op_spool_postantal*(op_spool_postlgd//2)), 2 6565 ant_i_opkø, 2 6566 cs_operatør, 2 6567 cs_op_fil(1:max_antal_operatører); 2 6568 boolean 2 6569 op_cqf_tab_ændret; 2 6570 integer field 2 6571 op_spool_kilde; 2 6572 real field 2 6573 op_spool_tid; 2 6574 long array field 2 6575 op_spool_text; 2 6576 zone z_tv_in, z_tv_out(128,1,tvswitch_fejl); 2 6577 zone array z_op(max_antal_operatører,320,1,op_fejl); 2 6578 \f 2 6578 message procedure op_fejl side 1 - 830310/hko; 2 6579 2 6579 procedure op_fejl(z,s,b); 2 6580 integer s,b; 2 6581 zone z; 2 6582 begin 3 6583 disable begin 4 6584 integer array iz(1:20); 4 6585 integer i,j,k,n; 4 6586 integer array field iaf,iaf1,msk; 4 6587 boolean input; 4 6588 real array field laf,laf1; 4 6589 4 6589 getzone6(z,iz); 4 6590 iaf:=laf:=2; 4 6591 input:= iz(13) = 1; 4 6592 for laf1:= 0 step 8 until (max_antal_operatører-1)*8 do 4 6593 if iz.laf(1)=terminal_navn.laf1(1) and 4 6594 iz.laf(2)=terminal_navn.laf1(2) then j:= laf1//8 + 1; 4 6595 4 6595 <*+2*> if testbit31 then 4 6596 <**> begin 5 6597 <**> write(out,"nl",1,<:blockprocedure: opfejl, operatørnr::>,j,"nl",1, 5 6598 <**> <:s=:>); outintbits(out,s); 5 6599 <**> write(out,"nl",1,<:b=:>,b,"sp",1,if input then <:input:> 5 6600 <**> else <:output:>,"nl",1); 5 6601 <**> setposition(out,0,0); 5 6602 <**> end; 4 6603 <*-2*> 4 6604 iaf:=j*terminal_beskr_længde; 4 6605 k:=1; 4 6606 4 6606 i:= terminal_tab.iaf.terminal_tilstand; 4 6607 if i shift(-21) < 4 and (s <> (1 shift 21 +2) <*or -,input*>) then 4 6608 fejlreaktion(17<*ydre enhed status*>,s,string iz.laf(increase(k)), 4 6609 1 shift 12 <*binært*> +1 <*fortsæt*>); 4 6610 if s <> (1 shift 21 +2) then 4 6611 begin 5 6612 terminal_tab.iaf.terminal_tilstand:= 1 shift 23 5 6613 + terminal_tab.iaf.terminal_tilstand extract 23; 5 6614 tofrom(opkaldsflag,alle_operatører,op_maske_lgd); 5 6615 sæt_bit_ia(opkaldsflag,j,0); 5 6616 if sæt_bit_ia(operatørmaske,j,0)=1 then 5 6617 for k:= j, 65 step 1 until top_bpl_gruppe do 5 6618 begin 6 6619 msk:= k*op_maske_lgd; 6 6620 if læsbit_ia(bpl_def.msk,j) then 6 6621 <**> begin 7 6622 n:= 0; 7 6623 for i:= 1 step 1 until max_antal_operatører do 7 6624 if læsbit_ia(bpl_def.msk,i) then 7 6625 begin 8 6626 iaf1:= i*terminal_beskr_længde; 8 6627 if terminal_tab.iaf1.terminal_tilstand shift (-21) < 3 then 8 6628 n:= n+1; 8 6629 end; 7 6630 bpl_tilst(j,1):= n; 7 6631 end; 6 6632 <**> <* 6 6633 bpl_tilst(j,1):= bpl_tilst(j,1)-1; 6 6634 *> end; 5 6635 signal_bin(bs_mobil_opkald); 5 6636 end; 4 6637 4 6637 if input or -,input then 4 6638 begin 5 6639 z(1):=real <:<'?'><'?'><'em'>:>; 5 6640 b:=2; 5 6641 end; 4 6642 end; <*disable*> 3 6643 end op_fejl; 2 6644 \f 2 6644 message procedure tvswitch_fejl side 1 - 940426/cl; 2 6645 2 6645 procedure tvswitch_fejl(z,s,b); 2 6646 integer s,b; 2 6647 zone z; 2 6648 begin 3 6649 disable begin 4 6650 integer array iz(1:20); 4 6651 integer i,j,k; 4 6652 integer array field iaf; 4 6653 boolean input; 4 6654 real array field raf; 4 6655 4 6655 getzone6(z,iz); 4 6656 iaf:=raf:=2; 4 6657 input:= iz(13) = 1; 4 6658 <*+2*> if testbit31 then 4 6659 <**> begin 5 6660 <**> write(out,"nl",1,<:blockprocedure: tvswitch:>,"nl",1, 5 6661 <**> <:s=:>); outintbits(out,s); 5 6662 <**> write(out,"nl",1,<:b=:>,b,"sp",1,if input then <:input:> 5 6663 <**> else <:output:>,"nl",1); 5 6664 <**> skrivhele(out,z,b,5); 5 6665 <**> setposition(out,0,0); 5 6666 <**> end; 4 6667 <*-2*> 4 6668 k:=1; 4 6669 if s <> (1 shift 21 +2) then 4 6670 fejlreaktion(17<*ydre enhed status*>,s,string iz.raf(increase(k)), 4 6671 1 shift 12 <*binært*> +1 <*fortsæt*>); 4 6672 4 6672 if input or -,input then 4 6673 begin 5 6674 z(1):=real <:<'em'>:>; 5 6675 b:=2; 5 6676 end; 4 6677 end; <*disable*> 3 6678 if testbit22 and (s <> (1 shift 21 +2)) then delay(60); 3 6679 end tvswitch_fejl; 2 6680 2 6680 procedure skriv_talevejs_tab(z); 2 6681 zone z; 2 6682 begin 3 6683 write(z,"nl",2,<:talevejsswitch::>); 3 6684 write(z,"nl",1,<: operatører::>,"nl",1); 3 6685 for i:= 1 step 1 until max_antal_operatører do 3 6686 begin 4 6687 write(z,<< dd>,i,":",1,op_talevej(i)); 4 6688 if i mod 8=0 then outchar(z,'nl'); 4 6689 end; 3 6690 write(z,"nl",1,<: taleveje::>,"nl",1); 3 6691 for i:= 1 step 1 until max_antal_taleveje do 3 6692 begin 4 6693 write(z,<< dd>,i,":",1,tv_operatør(i)); 4 6694 if i mod 8=0 then outchar(z,'nl'); 4 6695 end; 3 6696 write(z,"nl",3); 3 6697 end; 2 6698 \f 2 6698 message procedure skriv_opk_alarm_tab side 1; 2 6699 2 6699 procedure skriv_opk_alarm_tab(z); 2 6700 zone z; 2 6701 begin 3 6702 integer nr; 3 6703 integer array field tab; 3 6704 real t; 3 6705 3 6705 write(z,"nl",2,<:opkaldsalarmtabel::>,"nl",1, 3 6706 <:operatør kmdo tilst gl.tilst længde start:>,"nl",1); 3 6707 for nr:=1 step 1 until max_antal_operatører do 3 6708 begin 4 6709 tab:= (nr-1)*opk_alarm_tab_lgd; 4 6710 write(z,<< dd >,nr,true,6,string bpl_navn(nr),<:: :>, 4 6711 case opk_alarm.tab.alarm_kmdo+1 of ("-","B","C","F"),1,"sp",5, 4 6712 case opk_alarm.tab.alarm_tilst+1 of ("-","B","C","?"),1,"sp",8, 4 6713 case opk_alarm.tab.alarm_gtilst+1 of ("-","B","C","?"),1,"sp",2, 4 6714 <<-dddd>,opk_alarm.tab.alarm_lgd,"sp",1, 4 6715 << zddddd>,systime(4,opk_alarm.tab.alarm_start,t),t, 4 6716 "nl",1); 4 6717 end; 3 6718 end; 2 6719 \f 2 6719 message procedure skriv_op_spool_buf side 1; 2 6720 2 6720 procedure skriv_op_spool_buf(z); 2 6721 zone z; 2 6722 begin 3 6723 integer array field ref; 3 6724 integer nr, kilde; 3 6725 real dato, kl; 3 6726 3 6726 write(z,"nl",2,<:op<'_'>spool<'_'>buffer::>,"nl",1); 3 6727 for nr:= 1 step 1 until op_spool_postantal do 3 6728 begin 4 6729 write(z,"nl",1,<:nr.::>,<< dd>,nr); 4 6730 ref:= (nr-1)*op_spool_postlgd; 4 6731 if op_spool_buf.ref.op_spool_tid <> real<::> then 4 6732 begin 5 6733 kilde:= op_spool_buf.ref.op_spool_kilde; 5 6734 dato:= systime(4,op_spool_buf.ref.op_spool_tid,kl); 5 6735 write(z,<: fra op:>,<<d>,kilde,"sp",1, 5 6736 if kilde=0 then <:SYSOP:> else string bplnavn(kilde), 5 6737 "sp",1,<<zddddd.dddddd>,dato+kl/1000000,"nl",1, 5 6738 op_spool_buf.ref.op_spool_text); 5 6739 end; 4 6740 outchar(z,'nl'); 4 6741 end; 3 6742 end; 2 6743 2 6743 procedure skriv_cqf_tabel(z,lang); 2 6744 value lang; 2 6745 zone z; 2 6746 boolean lang; 2 6747 begin 3 6748 integer array field ref; 3 6749 integer i,ant; 3 6750 real dato, kl; 3 6751 3 6751 ant:= 0; 3 6752 write(z,"nl",1,<:CQF testbus-tabel::>,"nl",2,( 3 6753 if -,lang then 3 6754 <: tnr. navn fejl sidste_ok tnr. navn fejl sidste_ok:> 3 6755 <* 9900 XXxxx 1 yymmdd.ttmmss 9900 XXxxx 1 yymmdd.ttmmss*> 3 6756 else 3 6757 <:nr: tnr. navn fejl sidste_ok næste_test:>),"nl",1); 3 6758 <*01: 9900 XXxxx 1 yymmdd.ttmmss yymmdd.hhttmm*> 3 6759 for i:= 1 step 1 until max_cqf do 3 6760 begin 4 6761 ref:= (i-1)*cqf_lgd; 4 6762 if cqf_tabel.ref.cqf_bus<>0 or lang then 4 6763 begin 5 6764 ant:= ant+1; 5 6765 if lang then 5 6766 write(z,<<dd>,i,":",1); 5 6767 write(z,<< dddd>,cqf_tabel.ref.cqf_bus,"sp",1,true,6, 5 6768 string cqf_tabel.ref.cqf_id,<<dddd>,cqf_tabel.ref.cqf_fejl); 5 6769 if cqf_tabel.ref.cqf_ok_tid<>real<::> then 5 6770 begin 6 6771 dato:= systime(4,cqf_tabel.ref.cqf_ok_tid,kl); 6 6772 write(z,<< zddddd.dddddd>,dato+kl/1000000); 6 6773 end 5 6774 else 5 6775 write(z,"sp",14,"?",1); 5 6776 if lang then 5 6777 begin 6 6778 if cqf_tabel.ref.cqf_næste_tid<>real<::> then 6 6779 begin 7 6780 dato:= systime(4,cqf_tabel.ref.cqf_næste_tid,kl); 7 6781 write(z,<< zddddd.dddddd>,dato+kl/1000000); 7 6782 end 6 6783 else 6 6784 write(z,"sp",14,"?",1); 6 6785 end 5 6786 else 5 6787 write(z,"sp",2); 5 6788 if lang or (ant mod 2)=0 then outchar(z,'nl'); 5 6789 end; 4 6790 end; 3 6791 if -,lang and (ant mod 2)=1 then outchar(z,'nl'); 3 6792 end; 2 6793 2 6793 procedure sorter_cqftab(l,u); 2 6794 value l,u; 2 6795 integer l,u; 2 6796 begin 3 6797 integer array field ii,jj; 3 6798 integer array ww,xx(1:(cqf_lgd+1)//2); 3 6799 3 6799 ii:= ((l+u)//2 - 1)*cqf_lgd; 3 6800 tofrom(xx,cqf_tabel.ii,cqf_lgd); 3 6801 ii:= (l-1)*cqf_lgd; jj:= (u-1)*cqf_lgd; 3 6802 repeat 3 6803 while (cqf_tabel.ii(1) < xx(1)) do ii:= ii+cqf_lgd; 3 6804 while (xx(1) < cqf_tabel.jj(1)) do jj:= jj-cqf_lgd; 3 6805 if ii <= jj then 3 6806 begin 4 6807 tofrom(ww,cqf_tabel.ii,cqf_lgd); 4 6808 tofrom(cqf_tabel.ii,cqf_tabel.jj,cqf_lgd); 4 6809 tofrom(cqf_tabel.jj,ww,cqf_lgd); 4 6810 ii:= ii+cqf_lgd; 4 6811 jj:= jj-cqf_lgd; 4 6812 end; 3 6813 until ii>jj; 3 6814 if l < jj//cqf_lgd+1 then sorter_cqftab(l,jj//cqf_lgd+1); 3 6815 if ii//cqf_lgd+1 < u then sorter_cqftab(ii//cqf_lgd+1,u); 3 6816 end; 2 6817 \f 2 6817 message procedure ht_symbol side 1 - 851001/cl; 2 6818 2 6818 procedure ht_symbol(z); 2 6819 zone z; 2 6820 write(z,"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>,<: 2 6821 2 6821 2 6821 2 6821 2 6821 @@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 2 6821 @@ @@ @@ 2 6821 @@ @@ @@ 2 6821 @@ @@ @@ 2 6821 @@ @@@@@@@@@@@@@ @@@@@@@@@@@@@ 2 6821 @@ @@ 2 6821 @@ @@ 2 6821 @@ @@ 2 6821 @@ @@@@@@@@@@@@@ @@ 2 6821 @@ @@ @@ @@ 2 6821 @@ @@ @@ @@ 2 6821 @@ @@ @@ @@ 2 6821 @@@@@@@@@@@@@ @@@@@@@@@@@@@ 2 6821 :>,"esc" add 128,1,<:Æ24;1H:>); 2 6822 \f 2 6822 message procedure definer_taster side 1 - 891214,cl; 2 6823 2 6823 procedure definer_taster(nr); 2 6824 value nr; 2 6825 integer nr; 2 6826 begin 3 6827 3 6827 setposition(z_op(nr),0,0); 3 6828 write(z_op(nr), 3 6829 "esc" add 128,1, <:P1;2;0ø58/1B4E450D:>, 3 6830 "esc" add 128,1, <:Ø:>, <* f1 = <esc>NE<cr> *> 3 6831 "esc" add 128,1, <:P1;2;0ø59/1B4F500D:>, 3 6832 "esc" add 128,1, <:Ø:>, <* f2 = <esc>OP<cr> *> 3 6833 "esc" add 128,1, <:P1;2;0ø5A/1B4F502C560D:>, 3 6834 "esc" add 128,1, <:Ø:>, <* f3 = <esc>OP,V<cr> *> 3 6835 "esc" add 128,1, <:P1;2;0ø5B/1B4F502C5420:>, 3 6836 "esc" add 128,1, <:Ø:>, <* f4 = <esc>OP,T<sp> *> 3 6837 "esc" add 128,1, <:P1;2;0ø5C/1B4F502C4120:>, 3 6838 "esc" add 128,1, <:Ø:>, <* f5 = <esc>OP,A<sp> *> 3 6839 "esc" add 128,1, <:P1;2;1ø5C/1B4F502C4120:>, 3 6840 "esc" add 128,1, <:Ø:>, <* s-f5 = <esc>OP,A<sp> *> 3 6841 "esc" add 128,1, <:P1;2;0ø5D/1B4D452C4120:>, 3 6842 "esc" add 128,1, <:Ø:>, <* f6 = <esc>ME,A<sp> *> 3 6843 "esc" add 128,1, <:P1;2;1ø5D/1B4D452C4120:>, 3 6844 "esc" add 128,1, <:Ø:>, <* s-f6 = <esc>ME,A<sp> *> 3 6845 "esc" add 128,1, <:P1;2;0ø5E/1B4F5020:>, 3 6846 "esc" add 128,1, <:Ø:>, <* f7 = <esc>OP<sp> *> 3 6847 "esc" add 128,1, <:P1;2;0ø5F/1B56450D:>, 3 6848 "esc" add 128,1, <:Ø:>, <* f8 = <esc>VE<cr> *> 3 6849 "esc" add 128,1, <:P1;2;0ø60/1B4D4F20:>, 3 6850 "esc" add 128,1, <:Ø:>, <* f9 = <esc>MO<sp> *> 3 6851 "esc" add 128,1, <:P1;2;1ø60/1B520D:>, 3 6852 "esc" add 128,1, <:Ø:>, <* s-f9 = <esc>R<cr> *> 3 6853 "esc" add 128,1, <:P1;2;0ø61/1B53540D:>, 3 6854 "esc" add 128,1, <:Ø:>, <* f10 = <esc>ST<cr> *> 3 6855 "esc" add 128,1, <:P1;2;0ø62/1B474520:>, 3 6856 "esc" add 128,1, <:Ø:>, <* f11 = <esc>GE<sp> *> 3 6857 "esc" add 128,1, <:P1;2;1ø62/1B47452C4720:>, 3 6858 "esc" add 128,1, <:Ø:>, <* s-f11 = <esc>GE,G<sp> *> 3 6859 "esc" add 128,1, <:P1;2;0ø63/1B47452C560D:>, 3 6860 "esc" add 128,1, <:Ø:>, <* f12 = <esc>GE,V<cr> *> 3 6861 "esc" add 128,1, <:P1;2;1ø63/1B47452C540D:>, 3 6862 "esc" add 128,1, <:Ø:>, <* s-f12 = <esc>GE,T<sp> *> 3 6863 "esc" add 128,1, <:P1;2;0ø7B/1B564F2C4920:>, 3 6864 "esc" add 128,1, <:Ø:>, <* Ins = <esc>VO,I<sp> *> 3 6865 "esc" add 128,1, <:P1;2;0ø79/1B564F2C5520:>, 3 6866 "esc" add 128,1, <:Ø:>, <* Del = <esc>VO,U<sp> *> 3 6867 "esc" add 128,1, <:P1;2;0ø7F/1B564F2C4620:>, 3 6868 "esc" add 128,1, <:Ø:>, <* Home = <esc>VO,F<sp> *> 3 6869 "esc" add 128,1, <:P1;2;0ø7A/1B564F2C5220:>, 3 6870 "esc" add 128,1, <:Ø:>, <* End = <esc>VO,R<sp> *> 3 6871 "esc" add 128,1, <:P1;2;0ø6F/1B564F2C4C20:>, 3 6872 "esc" add 128,1, <:Ø:>, <* PgUp = <esc>VO,L<sp> *> 3 6873 "esc" add 128,1, <:P1;2;0ø7E/1B564F2C4220:>, 3 6874 "esc" add 128,1, <:Ø:>, <* PgDn = <esc>VO,B<sp> *> 3 6875 "esc" add 128,1, <:P1;2;0ø0E/082008:>, 3 6876 "esc" add 128,1, <:Ø:>, <* Back = <bs><sp><bs> *> 3 6877 <::>); 3 6878 end; 2 6879 \f 2 6879 message procedure skriv_terminal_tab side 1 - 820301/hko; 2 6880 2 6880 procedure skriv_terminal_tab(z); 2 6881 zone z; 2 6882 begin 3 6883 integer array field ref; 3 6884 integer t1,i,j,id,k; 3 6885 3 6885 write(z,"ff",1,<: 3 6886 ******* terminalbeskrivelser ******** 3 6887 3 6887 # a k l p m m n o 3 6888 1 l a y a o o ø p 3 6889 nr tilst - vnt R 0 l t t s n b d t type ident id i kø:>); 3 6890 <* 3 6891 01 15 .... .... X X X X X X X X X X MEDD 9999.abc 888B/77 3 6892 *> 3 6893 for i:=1 step 1 until max_antal_operatører do 3 6894 begin 4 6895 ref:=i*terminal_beskr_længde; 4 6896 t1:=terminal_tab.ref(1); 4 6897 id:=terminal_tab.ref(2); 4 6898 k:=terminal_tab.ref(3); 4 6899 write(z,"nl",1,"sp",4,<<dd>,i,<< dddd>,t1 shift(-21), 4 6900 t1 shift(-16) extract 5,t1 shift(-12) extract 4, 4 6901 "sp",1); 4 6902 for j:=11 step -1 until 2 do 4 6903 write(z,if læs_bit_i(t1,j) then "X" else "sp",1,"sp",1); 4 6904 write(z,case t1 extract 2 +1 of (<:- :>,<:OPK :>,<:MEDD:>,<:GNM :>), 4 6905 "sp",1); 4 6906 skriv_id(z,id,9); 4 6907 skriv_id(z,k,9); 4 6908 end; 3 6909 write(z,"nl",2,<:samtaleflag::>,"nl",1); 3 6910 outintbits_ia(z,samtaleflag,1,op_maske_lgd//2); 3 6911 write(z,"nl",1); 3 6912 end skriv_terminal_tab; 2 6913 \f 2 6913 message procedure h_operatør side 1 - 810520/hko; 2 6914 2 6914 <* hovedmodulkorutine for operatørterminaler *> 2 6915 procedure h_operatør; 2 6916 begin 3 6917 integer array field op_ref; 3 6918 integer k,nr,ant,ref,dest_sem; 3 6919 procedure skriv_hoperatør(zud,omfang); 3 6920 value omfang; 3 6921 zone zud; 3 6922 integer omfang; 3 6923 begin 4 6924 4 6924 write(zud,"nl",1,<:+++ hovedmodul operatør :>); 4 6925 if omfang>0 then 4 6926 disable begin integer x; 5 6927 trap(slut); 5 6928 write(zud,"nl",1, 5 6929 <: op_ref: :>,op_ref,"nl",1, 5 6930 <: nr: :>,nr,"nl",1, 5 6931 <: ant: :>,ant,"nl",1, 5 6932 <: ref: :>,ref,"nl",1, 5 6933 <: k: :>,k,"nl",1, 5 6934 <: dest_sem: :>,dest_sem,"nl",1, 5 6935 <::>); 5 6936 skriv_coru(zud,coru_no(200)); 5 6937 slut: 5 6938 end; 4 6939 end skriv_hoperatør; 3 6940 3 6940 trap(hop_trap); 3 6941 stack_claim(if cm_test then 198 else 146); 3 6942 3 6942 <*+2*> 3 6943 if testbit8 and overvåget or testbit28 then 3 6944 skriv_hoperatør(out,0); 3 6945 <*-2*> 3 6946 \f 3 6946 message procedure h_operatør side 2 - 820304/hko; 3 6947 3 6947 repeat 3 6948 wait_ch(cs_op,op_ref,true,-1); 3 6949 <*+4*> 3 6950 if (d.op_ref.optype and (op_optype or gen_optype)) extract 12 =0 3 6951 then fejlreaktion(12<*operationstype*>,op_ref,<:operatør:>,1); 3 6952 <*-4*> 3 6953 3 6953 k:=d.op_ref.opkode extract 12; 3 6954 dest_sem:= 3 6955 if k=0 and d.opref.kilde=299 then cs_talevejsswitch else 3 6956 if k=0 then cs_operatør(d.op_ref.kilde mod 100) else 3 6957 if k=1 or k=2 or k=43 then cs_operatør(d.op_ref.data(1)) else 3 6958 if k=4 then cs_operatør(d.op_ref.data(2)) else 3 6959 if k=37 then cs_op_spool else 3 6960 if k=40 or k=38 then 0 3 6961 else -1; 3 6962 <*+4*> 3 6963 if dest_sem=-1 then 3 6964 begin 4 6965 fejl_reaktion(2<*operationskode*>,k,<:hovedmodul operatør:>,1); 4 6966 signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype); 4 6967 end 3 6968 else 3 6969 <*-4*> 3 6970 if k=40 then 3 6971 begin 4 6972 dest_sem:= d.op_ref.retur; 4 6973 d.op_ref.retur:= cs_op_retur; 4 6974 for nr:= 1 step 1 until max_antal_operatører do 4 6975 begin 5 6976 inspect_ch(cs_operatør(nr),genoptype,ant); 5 6977 if ant < 0 and (læsbit_ia(opkaldsflag,nr) or læsbit_ia(kanalflag,nr) 5 6978 or læsbit_ia(samtaleflag,nr)) 5 6979 and læsbit_ia(operatørmaske,nr) then 5 6980 begin 6 6981 ref:= op_ref; 6 6982 signal_ch(cs_operatør(nr),opref,d.op_ref.optype); 6 6983 <*V*> wait_ch(cs_op_retur,op_ref,true,-1); 6 6984 <*+4*> if op_ref <> ref then 6 6985 fejlreaktion(11<*fr.post*>,op_ref, 6 6986 <:opdater opkaldskø,retur:>,0); 6 6987 <*-4*> 6 6988 end; 5 6989 end; 4 6990 d.op_ref.retur:= dest_sem; 4 6991 signal_ch(dest_sem,op_ref,d.op_ref.optype); 4 6992 end 3 6993 else 3 6994 if k=38 then 3 6995 begin 4 6996 dest_sem:= d.opref.retur; 4 6997 d.op_ref.retur:= cs_op_retur; 4 6998 for nr:= 1 step 1 until max_antal_operatører do 4 6999 begin 5 7000 if d.opref.data.op_spool_kilde <> nr then 5 7001 begin 6 7002 ref:= op_ref; 6 7003 signal_ch(cs_operatør(nr),opref,d.op_ref.optype); 6 7004 <*V*> wait_ch(cs_op_retur,op_ref,true,-1); 6 7005 <*+4*> if op_ref <> ref then 6 7006 fejlreaktion(11<*fr.post*>,op_ref, 6 7007 <:opdater opkaldskø,retur:>,0); 6 7008 <*-4*> 6 7009 end; 5 7010 end; 4 7011 if d.opref.data.op_spool_kilde<>0 then 4 7012 begin 5 7013 ref:= op_ref; 5 7014 nr:= d.opref.data.op_spool_kilde; 5 7015 signal_ch(cs_operatør(nr),opref,d.op_ref.optype); 5 7016 <*V*> wait_ch(cs_op_retur,op_ref,true,-1); 5 7017 <*+4*> if op_ref <> ref then 5 7018 fejlreaktion(11<*fr.post*>,op_ref, 5 7019 <:operatørmedddelelse, retur:>,0); 5 7020 <*-4*> 5 7021 d.op_ref.retur:= dest_sem; 5 7022 signal_ch(dest_sem,op_ref,d.op_ref.optype); 5 7023 end 4 7024 else 4 7025 begin 5 7026 d.op_ref.retur:= dest_sem; 5 7027 signal_ch(cs_io,op_ref,d.op_ref.optype); 5 7028 end; 4 7029 end 3 7030 else 3 7031 begin 4 7032 \f 4 7032 message procedure h_operatør side 3 - 810601/hko; 4 7033 4 7033 if k=8<*ekskluder*> then <*afbryd kommando v. timeout*> 4 7034 begin 5 7035 iaf:=d.op_ref.data(1)*terminal_beskr_længde; 5 7036 terminal_tab.iaf.terminal_tilstand:= 7 shift 21 5 7037 +terminal_tab.iaf.terminal_tilstand extract 21; 5 7038 end; 4 7039 signal_ch(dest_sem,op_ref,d.op_ref.optype); 4 7040 end; 3 7041 until false; 3 7042 3 7042 hop_trap: 3 7043 disable skriv_hoperatør(zbillede,1); 3 7044 end h_operatør; 2 7045 \f 2 7045 message procedure operatør side 1 - 820304/hko; 2 7046 2 7046 procedure operatør(nr); 2 7047 value nr; 2 7048 integer nr; 2 7049 begin 3 7050 integer array field op_ref,ref,vt_op,iaf,tab; 3 7051 integer i,kode,aktion,status,tilstand,bv,bs,bs_tilst, 3 7052 kanal,opgave,pos,indeks,sep,sluttegn,rkom, par1, par2, 3 7053 vogn,ll,garage,skærmmåde,res,s_kanal,v_kanal; 3 7054 real kommstart,kommslut; 3 7055 \f 3 7055 message procedure operatør side 1a - 820301/hko; 3 7056 3 7056 procedure skriv_operatør(zud,omfang); 3 7057 value omfang; 3 7058 zone zud; 3 7059 integer omfang; 3 7060 begin integer i; 4 7061 4 7061 i:= write(zud,"nl",1,<:+++ operatør nr::>,nr); 4 7062 write(zud,"sp",26-i); 4 7063 if omfang > 0 then 4 7064 disable begin 5 7065 integer x; 5 7066 trap(slut); 5 7067 write(zud,"nl",1, 5 7068 <: op-ref: :>,op_ref,"nl",1, 5 7069 <: kode: :>,kode,"nl",1, 5 7070 <: aktion: :>,aktion,"nl",1, 5 7071 <: ref: :>,ref,"nl",1, 5 7072 <: vt_op: :>,vt_op,"nl",1, 5 7073 <: iaf: :>,iaf,"nl",1, 5 7074 <: status: :>,status,"nl",1, 5 7075 <: tilstand: :>,tilstand,"nl",1, 5 7076 <: bv: :>,bv,"nl",1, 5 7077 <: bs: :>,bs,"nl",1, 5 7078 <: bs-tilst: :>,bs_tilst,"nl",1, 5 7079 <: kanal: :>,kanal,"nl",1, 5 7080 <: opgave: :>,opgave,"nl",1, 5 7081 <: pos: :>,pos,"nl",1, 5 7082 <: indeks: :>,indeks,"nl",1, 5 7083 <: sep: :>,sep,"nl",1, 5 7084 <: sluttegn: :>,sluttegn,"nl",1, 5 7085 <: vogn: :>,vogn,"nl",1, 5 7086 <: ll: :>,ll,"nl",1, 5 7087 <: garage: :>,garage,"nl",1, 5 7088 <: skærmmåde: :>,skærmmåde,"nl",1, 5 7089 <: res: :>,res,"nl",1, 5 7090 <: tab: :>,tab,"nl",1, 5 7091 <: rkom: :>,rkom,"nl",1, 5 7092 <: par1: :>,par1,"nl",1, 5 7093 <: par2: :>,par2,"nl",1, 5 7094 <::>); 5 7095 skriv_coru(zud,coru_no(200+nr)); 5 7096 slut: 5 7097 end; 4 7098 end skriv_operatør; 3 7099 \f 3 7099 message procedure skærmstatus side 1 - 810518/hko; 3 7100 3 7100 integer 3 7101 procedure skærmstatus(tilstand,b_v,b_s,b_s_tilst); 3 7102 integer tilstand,b_v,b_s,b_s_tilst; 3 7103 begin 4 7104 integer i,j; 4 7105 4 7105 i:= terminal_tab.ref(1); 4 7106 b_s:= terminal_tab.ref(2); 4 7107 b_s_tilst:= i extract 12; 4 7108 j:= b_s_tilst extract 3; 4 7109 b_v:= i shift (-12) extract 4; 4 7110 tilstand:= i shift (-21); 4 7111 4 7111 skærmstatus:= if b_v = 0 and b_s = 0 then 0 else 4 7112 if b_v = 0 and j = 1<*opkald*> then 1 else 4 7113 if b_v = 0 and j = 2<*specialopkald*> then 2 else 4 7114 if (bv<>0) and (bs<>0) and (j=3) then 4 else 3; 4 7115 end skærmstatus; 3 7116 \f 3 7116 message procedure skriv_skærm side 1 - 810522/hko; 3 7117 3 7117 procedure skriv_skærm(nr); 3 7118 value nr; 3 7119 integer nr; 3 7120 begin 4 7121 integer i; 4 7122 4 7122 disable definer_taster(nr); 4 7123 4 7123 skriv_skærm_maske(nr); 4 7124 skriv_skærm_opkaldskø(nr); 4 7125 skriv_skærm_b_v_s(nr); 4 7126 for i:= 1 step 1 until max_antal_kanaler do 4 7127 skriv_skærm_kanal(nr,i); 4 7128 cursor(z_op(nr),1,1); 4 7129 <*V*> setposition(z_op(nr),0,0); 4 7130 end skriv_skærm; 3 7131 \f 3 7131 message procedure skriv_skærm_id side 1 - 830310/hko; 3 7132 3 7132 procedure skriv_skærm_id(nr,id,nød); 3 7133 value nr,id,nød; 3 7134 integer nr,id; 3 7135 boolean nød; 3 7136 begin 4 7137 integer linie,løb,bogst,i,p; 4 7138 4 7138 i:= id shift (-22); 4 7139 4 7139 case i+1 of 4 7140 begin 5 7141 begin <* busnr *> 6 7142 p:= write(z_op(nr),if nød then "*" else "sp",1,<<bddd>, 6 7143 (id extract 14) mod 10000); 6 7144 if id shift (-14) extract 8 > 0 then 6 7145 p:= p+write(z_op(nr),".",1, 6 7146 string bpl_navn(id shift (-14) extract 8)); 6 7147 write(z_op(nr),"sp",11-p); 6 7148 end; 5 7149 5 7149 begin <*linie/løb*> 6 7150 linie:= id shift (-12) extract 10; 6 7151 bogst:= id shift (-7) extract 5; 6 7152 if bogst > 0 then bogst:= bogst +'A'-1; 6 7153 løb:= id extract 7; 6 7154 write(z_op(nr),if nød then "*" else "sp",1, 6 7155 "sp",if bogst=0 then 1 else 0,<<ddd>,linie,<<d>, 6 7156 false add bogst,1,"/",1,løb, 6 7157 "sp",if løb > 9 then 3 else 4); 6 7158 end; 5 7159 5 7159 begin <*gruppe*> 6 7160 write(z_op(nr),<:GRP :>); 6 7161 if id shift (-21) extract 1 = 1 then 6 7162 begin <*specialgruppe*> 7 7163 løb:= id extract 7; 7 7164 write(z_op(nr),"sp",if løb > 9 then 1 else 2,<:G:>, 7 7165 <<d>,løb,"sp",2); 7 7166 end 6 7167 else 6 7168 begin 7 7169 linie:= id shift (-5) extract 10; 7 7170 bogst:= id extract 5; 7 7171 if bogst > 0 then bogst:= bogst +'A'-1; 7 7172 write(z_op(nr),"sp",if bogst > 0 then 1 else 0,<<ddd>,linie, 7 7173 false add bogst,1,"sp",2); 7 7174 end; 6 7175 end; 5 7176 5 7176 <* kanal eller område *> 5 7177 begin 6 7178 linie:= (id shift (-20) extract 2) + 1; 6 7179 case linie of 6 7180 begin 7 7181 write(z_op(nr),"sp",11-write(z_op(nr), 7 7182 string kanal_navn(id extract 20))); 7 7183 write(z_op(nr),<:K*:>,"sp",9); 7 7184 write(z_op(nr),"sp",11-write(z_op(nr), 7 7185 <:OMR :>,string område_navn(id extract 20))); 7 7186 write(z_op(nr),<:ALLE:>,"sp",7); 7 7187 end; 6 7188 end; 5 7189 5 7189 end <* case i *> 4 7190 end skriv_skærm_id; 3 7191 \f 3 7191 message procedure skriv_skærm_kanal side 1 - 820301/hko; 3 7192 3 7192 procedure skriv_skærm_kanal(nr,kanal); 3 7193 value nr,kanal; 3 7194 integer nr,kanal; 3 7195 begin 4 7196 integer i,j,k,t,omr; 4 7197 integer array field tref,kref; 4 7198 boolean nød; 4 7199 4 7199 tref:= nr*terminal_beskr_længde; 4 7200 kref:= (kanal-1)*kanal_beskr_længde; 4 7201 t:= kanaltab.kref.kanal_tilstand; 4 7202 j:= terminal_tab.tref(1) shift (-12) extract 4; <* b_v kanalnr *> 4 7203 k:= terminal_tab.tref(2); <* 3 shift 22 +kanal, hvis samtale *> 4 7204 cursor(z_op(nr),kanal+2,28); 4 7205 write(z_op(nr),if læsbit_i(kanaltab.kref.kanal_tilstand,10) then "*" else 4 7206 if læsbit_i(kanaltab.kref.kanal_tilstand,11) then "+" else 4 7207 " ",1," ",1); 4 7208 write(z_op(nr),true,6,string kanal_navn(kanal)); 4 7209 omr:= if kanal_id(kanal) shift (-5) extract 3 = 2 then 4 7210 pabx_id(kanal_id(kanal) extract 5) 4 7211 else 4 7212 radio_id(kanal_id(kanal) extract 5); 4 7213 for i:= -2 step 1 until 0 do 4 7214 begin 5 7215 write(z_op(nr), 5 7216 if område_id(omr,1) shift (8*i) extract 8 = 0 then " " 5 7217 else false add (område_id(omr,1) shift (8*i) extract 8),1); 5 7218 end; 4 7219 write(z_op(nr),<:: :>); 4 7220 i:= tv_operatør(kanaltab.kref.kanal_tilstand shift (-16));<*operatør*> 4 7221 if læsbit_ia(kanaltab.kref.kanal_alarm, nr) then 4 7222 begin 5 7223 sætbit_ia(kanaltab.kref.kanal_alarm, nr, 0); 5 7224 <* write(z_op(nr),<:ALARM !:>,"bel",1); *> 5 7225 end 4 7226 else 4 7227 if kanaltab.kref.kanal_tilstand shift (-12) extract 4 = 15 then 4 7228 write(z_op(nr),<:-:><*UDE AF DRIFT*>) 4 7229 else 4 7230 if i > 0 and 4 7231 ( true <* i <> nr *> <* OPT også ud på egen skærm 960527/CL *> or 4 7232 j = kanal <* kanal = kanalnr for ventepos *> or 4 7233 (terminal_tab.tref.terminal_tilstand shift (-21) = 1 4 7234 <*tilst=samtale*> and k extract 22 = kanal) ) then 4 7235 begin 5 7236 write(z_op(nr),<:OPT :>); 5 7237 if bpl_navn(i)=long<::> then write(z_op(nr),<:op:>,<<d>,i) 5 7238 else write(z_op(nr),string bpl_navn(i)); 5 7239 end 4 7240 else 4 7241 if false then 4 7242 begin 5 7243 i:= kanaltab.kref.kanal_id1; 5 7244 nød:= læsbit_i(kanaltab.kref.kanal_tilstand,3); 5 7245 skriv_skærm_id(nr,i,nød); 5 7246 write(z_op(nr),if t extract 2 = 3 then <:GNM :> else <:OPKALDT:>); 5 7247 i:= kanaltab.kref.kanal_id2; 5 7248 if i<>0 then skriv_skærm_id(nr,i,false); 5 7249 end; 4 7250 write(z_op(nr),"esc" add 128,1,<:ÆK:>); 4 7251 end skriv_skærm_kanal; 3 7252 \f 3 7252 message procedure skriv_skærm_b_v_s side 1 - 810601/hko; 3 7253 3 7253 procedure skriv_skærm_b_v_s(nr); 3 7254 value nr; 3 7255 integer nr; 3 7256 begin 4 7257 integer i,j,k,kv,ks,t; 4 7258 integer array field tref,kref; 4 7259 4 7259 tref:= nr*terminal_beskr_længde; 4 7260 i:= terminal_tab.tref.terminal_tilstand; 4 7261 kv:= i shift (-12) extract 4; 4 7262 ks:= terminaltab.tref(2) extract 20; 4 7263 <*V*> setposition(z_op(nr),0,0); 4 7264 cursor(z_op(nr),18,28); 4 7265 write(z_op(nr),"esc" add 128,1,<:ÆK:>); 4 7266 cursor(z_op(nr),20,28); 4 7267 write(z_op(nr),"esc" add 128,1,<:ÆK:>); 4 7268 cursor(z_op(nr),21,28); 4 7269 write(z_op(nr),"esc" add 128,1,<:ÆK:>); 4 7270 cursor(z_op(nr),20,28); 4 7271 if op_talevej(nr)<>0 then 4 7272 begin 5 7273 cursor(z_op(nr),18,28); 5 7274 write(z_op(nr),<:talevej: :>,<<d>,op_talevej(nr)); 5 7275 end; 4 7276 if kv <> 0 then 4 7277 begin 5 7278 kref:= (kv-1)*kanal_beskr_længde; 5 7279 j:= if kv<>ks then kanaltab.kref.kanal_id1 5 7280 else kanaltab.kref.kanal_id2; 5 7281 k:= if kv<>ks then kanaltab.kref.kanal_alt_id1 5 7282 else kanaltab.kref.kanal_alt_id2; 5 7283 write(z_op(nr),true,6,string kanal_navn(kv)); 5 7284 skriv_skærm_id(nr,j,kanaltab.kref.kanaltilstand shift(-3) extract 1=1); 5 7285 skriv_skærm_id(nr,k,false); 5 7286 write(z_op(nr),if i extract 2 = 3 then <:GNM:> else <:VNT:>); 5 7287 end; 4 7288 4 7288 cursor(z_op(nr),21,28); 4 7289 j:= terminal_tab.tref(2); 4 7290 if i shift (-21) <> 0 <*ikke ledig*> then 4 7291 begin 5 7292 \f 5 7292 message procedure skriv_skærm_b_v_s side 2 - 841210/cl; 5 7293 5 7293 if i shift (-21) = 1 <*samtale*> then 5 7294 begin 6 7295 if j shift (-20) = 12 then 6 7296 begin 7 7297 write(z_op(nr),true,6,string kanal_navn(ks)); 7 7298 end 6 7299 else 6 7300 begin 7 7301 write(z_op(nr),true,6,<:K*:>); 7 7302 k:= 0; 7 7303 while ks shift (-k) extract 1 = 0 and k<max_antal_kanaler do 7 7304 k:= k+1; 7 7305 ks:= k; 7 7306 end; 6 7307 kref:= (ks-1)*kanal_beskr_længde; 6 7308 t:= kanaltab.kref.kanaltilstand; 6 7309 skriv_skærm_id(nr,kanaltab.kref.kanal_id1, 6 7310 t shift (-3) extract 1 = 1); 6 7311 skriv_skærm_id(nr,kanaltab.kref.kanal_alt_id1,false); 6 7312 write(z_op(nr),if i shift (-11) extract 1 = 1 then <:-P-:> else 6 7313 if t shift (-5) extract 1 = 1 then <:MON :> else 6 7314 if t shift (-4) extract 1 = 1 then <:BSV :> else 6 7315 if t shift (-6) extract 1 = 1 then <:PAS :> else 6 7316 if t shift (-7) extract 1 = 1 then <:LYT :> else <:TAL :>); 6 7317 if t shift (-9) extract 1 = 1 then 6 7318 write(z_op(nr),<:ALLE :>); 6 7319 if t shift (-8) extract 1 = 1 then 6 7320 write(z_op(nr),<:KATASTROFE :>); 6 7321 k:= kanaltab.kref.kanal_spec; 6 7322 if t extract 2 <> 3 and t shift (-4) extract 1 = 1 then 6 7323 write(z_op(nr),<<zd.dd>,(k extract 12)/100); 6 7324 end 5 7325 else <* if i shift (-21) = 2 <+optaget+> then *> 5 7326 begin 6 7327 write(z_op(nr),<:K-:>,"sp",3); 6 7328 if j <> 0 then 6 7329 skriv_skærm_id(nr,j,false) 6 7330 else 6 7331 begin 7 7332 j:=terminal_tab.tref(3); 7 7333 skriv_skærm_id(nr,j, 7 7334 false add (if i shift(-4) extract 1 = 1 then 2 <* mobil opk. *> 7 7335 else 0)); 7 7336 end; 6 7337 write(z_op(nr),<:OPT:>); 6 7338 end; 5 7339 end; 4 7340 <*V*> setposition(z_op(nr),0,0); 4 7341 end skriv_skærm_b_v_s; 3 7342 \f 3 7342 message procedure skriv_skærm_maske side 1 - 810511/hko; 3 7343 3 7343 procedure skriv_skærm_maske(nr); 3 7344 value nr; 3 7345 integer nr; 3 7346 begin 4 7347 integer i; 4 7348 <*V*> setposition(z_op(nr),0,0); 4 7349 write(z_op(nr),"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>, 4 7350 "sp",26,"*",5,<: operatør :>,<<d>,nr,"sp",1,string bpl_navn(nr), 4 7351 "sp",1,"*",5,"nl",1,"-",80); 4 7352 4 7352 for i:= 3 step 1 until 21 do 4 7353 begin 5 7354 cursor(z_op(nr),i,26); 5 7355 outchar(z_op(nr),'!'); 5 7356 end; 4 7357 cursor(z_op(nr),22,1); 4 7358 write(z_op(nr),"-",80); 4 7359 cursor(z_op(nr),1,1); 4 7360 <*V*> setposition(z_op(nr),0,0); 4 7361 end skriv_skærm_maske; 3 7362 \f 3 7362 message procedure skal_udskrives side 1 - 940522/cl; 3 7363 3 7363 boolean procedure skal_udskrives(fordelt_til,aktuel_skærm); 3 7364 value fordelt_til,aktuel_skærm; 3 7365 integer fordelt_til,aktuel_skærm; 3 7366 begin 4 7367 boolean skal_ud; 4 7368 integer n; 4 7369 integer array field iaf; 4 7370 4 7370 skal_ud:= true; 4 7371 if fordelt_til > 0 and fordelt_til<>aktuel_skærm then 4 7372 begin 5 7373 for n:= 0 step 1 until 3 do 5 7374 begin 6 7375 if bpl_tilst(operatør_stop(fordelt_til,n),1) > 0 then 6 7376 begin 7 7377 iaf:= operatør_stop(fordelt_til,n)*op_maske_lgd; 7 7378 skal_ud:= læsbit_ia(bpl_def.iaf,aktuel_skærm); 7 7379 goto returner; 7 7380 end; 6 7381 end; 5 7382 end; 4 7383 returner: 4 7384 skal_udskrives:= skal_ud; 4 7385 end; 3 7386 3 7386 message procedure skriv_skærm_opkaldskø side 1 - 820301/hko; 3 7387 3 7387 procedure skriv_skærm_opkaldskø(nr); 3 7388 value nr; 3 7389 integer nr; 3 7390 begin 4 7391 integer i,ant,vogn,type,operatør,ttmm,linie,bogst,løb,kmdo; 4 7392 integer array field ref,iaf,tab; 4 7393 boolean skal_ud; 4 7394 4 7394 <*V*> wait(bs_opkaldskø_adgang); 4 7395 setposition(z_op(nr),0,0); 4 7396 ant:= 0; kmdo:= 0; 4 7397 tab:= (nr-1)*opk_alarm_tab_lgd; 4 7398 ref:= første_nødopkald; 4 7399 if ref=0 then ref:=første_opkald; 4 7400 while ref <> 0 do 4 7401 begin 5 7402 i:= opkaldskø.ref(4); 5 7403 operatør:= i extract 8; 5 7404 type:=i shift (-8) extract 4; 5 7405 5 7405 <* skal_ud:= operatør = nr or -,læsbit_ia(operatørmaske,operatør); 5 7406 *> 5 7407 if operatør > 64 then 5 7408 begin 6 7409 <* fordelt til gruppe af betjeningspladser *> 6 7410 i:= 0; skal_ud:= true; iaf:= operatør*op_maske_lgd; 6 7411 while skal_ud and i<max_antal_operatører do 6 7412 begin 7 7413 i:=i+1; 7 7414 if læsbit_ia(bpl_def.iaf,i) then 7 7415 skal_ud:= skal_ud and skal_udskrives(i,nr); 7 7416 end; 6 7417 end 5 7418 else 5 7419 skal_ud:= skal_udskrives(operatør,nr); 5 7420 if skal_ud then 5 7421 begin 6 7422 ant:= ant +1; 6 7423 if ant < 6 then 6 7424 begin 7 7425 <*V*> cursor(z_op(nr),ant*2+1,3); 7 7426 ttmm:= i shift (-12); 7 7427 vogn:= opkaldskø.ref(3); 7 7428 if vogn = 0 then vogn:= opkaldskø.ref(2) extract 22; 7 7429 skriv_skærm_id(nr,vogn,type=2); 7 7430 write(z_op(nr),true,4, 7 7431 string område_navn(opkaldskø.ref(5) extract 4), 7 7432 <<zd.dd>,ttmm/100.0); 7 7433 if -, læsbit_ia(opkaldskø.ref.opkald_meldt,nr) then 7 7434 begin 8 7435 if opkaldskø.ref(5) extract 4 <= 2 or 8 7436 opk_alarm.tab.alarm_lgd = 0 then 8 7437 begin 9 7438 if type=2 then 9 7439 write(z_op(nr),"bel",1,"del",8,"bel",1,"del",8,"bel",1) 9 7440 else 9 7441 write(z_op(nr),"bel",1); 9 7442 end 8 7443 else if type>kmdo then kmdo:= type; 8 7444 sætbit_ia(opkaldskø.ref.opkald_meldt,nr,1); 8 7445 end; 7 7446 end;<* ant < 6 *> 6 7447 end;<* operatør ok *> 5 7448 5 7448 ref:= opkaldskø.ref(1) extract 12; 5 7449 if ref = 0 and type = 2<*nød*> then ref:= første_opkald; 5 7450 end; 4 7451 \f 4 7451 message procedure skriv_skærm_opkaldskø side 2 - 820301/hko; 4 7452 4 7452 signal_bin(bs_opkaldskø_adgang); 4 7453 if kmdo > opk_alarm.tab.alarm_tilst and 4 7454 kmdo > opk_alarm.tab.alarm_kmdo then 4 7455 begin 5 7456 opk_alarm.tab.alarm_kmdo:= kmdo; 5 7457 signal_bin(bs_opk_alarm); 5 7458 end; 4 7459 if ant > 5 then 4 7460 begin 5 7461 cursor(z_op(nr),13,9); 5 7462 write(z_op(nr),<<+ddd>,ant-5); 5 7463 end 4 7464 else 4 7465 begin 5 7466 for i:= ant +1 step 1 until 6 do 5 7467 begin 6 7468 cursor(z_op(nr),i*2+1,1); 6 7469 write(z_op(nr),"sp",25); 6 7470 end; 5 7471 end; 4 7472 ant_i_opkø(nr):= ant; 4 7473 cursor(z_op(nr),1,1); 4 7474 <*V*> setposition(z_op(nr),0,0); 4 7475 end skriv_skærm_opkaldskø; 3 7476 \f 3 7476 message procedure operatør side 2 - 810522/hko; 3 7477 3 7477 trap(op_trap); 3 7478 stack_claim((if cm_test then 200 else 146)+24+48+80+175); 3 7479 3 7479 ref:= nr*terminal_beskr_længde; 3 7480 tab:= (nr-1)*opk_alarm_tab_lgd; 3 7481 skærmmåde:= 0; <*normal*> 3 7482 3 7482 if operatør_auto_include(nr) then 3 7483 begin 4 7484 waitch(cs_att_pulje,opref,true,-1); 4 7485 i:= operatør_auto_include(nr) extract 2; 4 7486 if i<>3 then i:= 0; 4 7487 start_operation(opref,101,cs_att_pulje,i shift 12 +1); 4 7488 d.opref.data(1):= nr; 4 7489 signalch(cs_rad,opref,gen_optype or io_optype); 4 7490 end; 3 7491 3 7491 <*+2*> 3 7492 if testbit8 and overvåget or testbit28 then 3 7493 skriv_operatør(out,0); 3 7494 <*-2*> 3 7495 \f 3 7495 message procedure operatør side 3 - 810602/hko; 3 7496 3 7496 repeat 3 7497 3 7497 <*V*> wait_ch(cs_operatør(nr), 3 7498 op_ref, 3 7499 true, 3 7500 -1<*timeout*>); 3 7501 <*+2*> 3 7502 if testbit9 and overvåget then 3 7503 disable begin 4 7504 write(out,"nl",1,<:operation fra cs:>,<<d>,cs_operatør(nr), 4 7505 <: til operatør :>,nr); 4 7506 skriv_op(out,op_ref); 4 7507 end; 3 7508 <*-2*> 3 7509 monitor(8)reserve process:(z_op(nr),0,ia); 3 7510 kode:= d.op_ref.op_kode extract 12; 3 7511 i:= terminal_tab.ref.terminal_tilstand; 3 7512 status:= i shift(-21); 3 7513 opgave:= 3 7514 if kode=0 then 1 <* indlæs kommando *> else 3 7515 if kode=1 then 2 <* inkluder *> else 3 7516 if kode=2 then 3 <* ekskluder *> else 3 7517 if kode=40 then 4 <* opdater skærm *> else 3 7518 if kode=43 then 5 <* opkald etableret *> else 3 7519 if kode=4 then 6 <* radiokanal ekskluderet *> else 3 7520 if kode=38 then 7 <* operatør meddelelse *> else 3 7521 0; <* afvises *> 3 7522 3 7522 aktion:= case status +1 of( 3 7523 <* status *> <* opgave: 0 1 2 3 4 5 6 7 *> 3 7524 <* 0 klar *>(case opgave+1 of( 0, 1, -4, 3, 4, -4, 6, 7)), 3 7525 <* 1 samtale *>(case opgave+1 of( 0, 1, -4, -5, 4, -4, 6, 7)), 3 7526 <* 2 optaget *>(case opgave+1 of( 0, 1, -4, -5, 4, 5, 6, 7)), 3 7527 <* 3 stoppet *>(case opgave+1 of( 0, 2, 2, 3, -4, -4, -4, 7)), 3 7528 <* 4 klar (fejl) *>(case opgave+1 of( 0, -4, 2, 3, -4, -4, 6, -4)), 3 7529 <* 5 samt.(fejl) *>(case opgave+1 of( 0, -4, 2, 3, -4, -4, 6, -4)), 3 7530 <* 6 opt. (fejl) *>(case opgave+1 of( 0, -4, 2, 3, -4, 5, -4, -4)), 3 7531 <* 7 ej knyttet *>(case opgave+1 of( 0, -4, 2, -4, -4, -4, -4, -4)), 3 7532 -1); 3 7533 \f 3 7533 message procedure operatør side 4 - 810424/hko; 3 7534 3 7534 case aktion+6 of 3 7535 begin 4 7536 begin 5 7537 <*-5: terminal optaget *> 5 7538 5 7538 d.op_ref.resultat:= 16; 5 7539 afslut_operation(op_ref,-1); 5 7540 end; 4 7541 4 7541 begin 5 7542 <*-4: operation uden virkning *> 5 7543 5 7543 afslut_operation(op_ref,-1); 5 7544 end; 4 7545 4 7545 begin 5 7546 <*-3: ulovlig operationskode *> 5 7547 5 7547 fejl_reaktion(2<*operationskode*>,kode,<:ulovlig:>,1); 5 7548 afslut_operation(op_ref,-1); 5 7549 end; 4 7550 4 7550 begin 5 7551 <*-2: ulovligt operatørterminal_nr *> 5 7552 5 7552 fejl_reaktion(3<*programfejl*>,nr,<: ikke eksisterende operatør:>,1); 5 7553 afslut_operation(op_ref,-1); 5 7554 end; 4 7555 4 7555 begin 5 7556 <*-1: ulovlig operatørtilstand *> 5 7557 5 7557 fejl_reaktion(3<*programfejl*>,status,<: ulovlig operatør-status:>,1); 5 7558 afslut_operation(op_ref,-1); 5 7559 end; 4 7560 4 7560 begin 5 7561 <* 0: ikke implementeret *> 5 7562 5 7562 fejl_reaktion(2<*operationskode*>,kode,<: ikke implementeret:>,1); 5 7563 afslut_operation(op_ref,-1); 5 7564 end; 4 7565 4 7565 begin 5 7566 \f 5 7566 message procedure operatør side 5 - 851001/cl; 5 7567 5 7567 <* 1: indlæs kommando *> 5 7568 5 7568 5 7568 <*V*> læs_kommando(z_op(nr),200+nr,op_ref,pos,indeks,sep,sluttegn); 5 7569 if opk_alarm.tab.alarm_tilst > 0 then 5 7570 begin 6 7571 opk_alarm.tab.alarm_kmdo:= 3; 6 7572 signal_bin(bs_opk_alarm); 6 7573 pass; 6 7574 end; 5 7575 if d.op_ref.resultat > 3 then 5 7576 begin 6 7577 <*V*> setposition(z_op(nr),0,0); 6 7578 cursor(z_op(nr),24,1); 6 7579 skriv_kvittering(z_op(nr),op_ref,pos, 6 7580 d.op_ref.resultat); 6 7581 end 5 7582 else if d.op_ref.resultat = -1 then 5 7583 begin 6 7584 skærmmåde:= 0; 6 7585 skrivskærm(nr); 6 7586 end 5 7587 else if d.op_ref.resultat>0 then 5 7588 begin <*godkendt*> 6 7589 kode:=d.op_ref.opkode; 6 7590 i:= kode extract 12; 6 7591 j:= if kode = 11 or kode = 12 then 1 <*VO,I/VO,U*> else 6 7592 if kode = 19 then 1 <*VO,S *> else 6 7593 if kode = 20 or kode = 24 then 1 <*VO,F/VO,R*> else 6 7594 if kode = 9 or kode = 10 then 2 <*VO,L/VO,B*> else 6 7595 if kode = 6 then 4 <*STop*> else 6 7596 if 45<=kode and kode<=63 then 3 <*radiokom.*> else 6 7597 if kode = 30 then 5 <*SP,D*> else 6 7598 if kode = 31 then 6 <*SP*> else 6 7599 if kode = 32 or kode = 33 then 7 <*SP,V/SP,O*> else 6 7600 if kode = 34 or kode = 35 then 6 <*SP,R/SP,A*> else 6 7601 if kode = 83 then 8 <*SL*> else 6 7602 if kode = 68 then 9 <*ST,D*> else 6 7603 if kode = 69 then 10 <*ST,V*> else 6 7604 if kode = 36 then 11 <*AL*> else 6 7605 if kode = 37 then 12 <*CC*> else 6 7606 if kode = 2 then 13 <*EX*> else 6 7607 if kode = 92 then 14 <*CQF,V*> else 6 7608 if kode = 38 then 15 <*AL,T*> else 6 7609 0; 6 7610 if j > 0 then 6 7611 begin 7 7612 case j of 7 7613 begin 8 7614 begin 9 7615 \f 9 7615 message procedure operatør side 6 - 851001/cl; 9 7616 9 7616 <* 1 indsæt/udtag/flyt bus i vogntabel *> 9 7617 9 7617 vogn:=ia(1); 9 7618 ll:=ia(2); 9 7619 kanal:= if kode=11 or kode=19 then ia(3) else 9 7620 if kode=12 then ia(2) else 0; 9 7621 <*V*> wait_ch(cs_vt_adgang, 9 7622 vt_op, 9 7623 gen_optype, 9 7624 -1<*timeout sek*>); 9 7625 start_operation(vtop,200+nr,cs_operatør(nr), 9 7626 kode); 9 7627 d.vt_op.data(1):=vogn; 9 7628 if kode=11 or kode=19 or kode=20 or kode=24 then 9 7629 d.vt_op.data(2):=ll; 9 7630 if kode=19 then d.vt_op.data(3):= kanal else 9 7631 if kode=11 or kode=12 then d.vt_op.data(4):= kanal; 9 7632 indeks:= vt_op; 9 7633 signal_ch(cs_vt, 9 7634 vt_op, 9 7635 gen_optype or op_optype); 9 7636 9 7636 <*V*> wait_ch(cs_operatør(nr), 9 7637 vt_op, 9 7638 op_optype, 9 7639 -1<*timeout sek*>); 9 7640 <*+2*> if testbit10 and overvåget then 9 7641 disable begin 10 7642 write(out,"nl",1,<:operatør :>,<<d>,nr, 10 7643 <:: operation retur fra vt:>); 10 7644 skriv_op(out,vt_op); 10 7645 end; 9 7646 <*-2*> 9 7647 <*+4*> if vt_op<>indeks then 9 7648 fejl_reaktion(11<*fremmede op*>,op_ref, 9 7649 <:operatør-kommando:>,0); 9 7650 <*-4*> 9 7651 <*V*> setposition(z_op(nr),0,0); 9 7652 cursor(z_op(nr),24,1); 9 7653 <*V*> skriv_kvittering(z_op(nr),if d.vt_op.resultat = 11 or 9 7654 d.vt_op.resultat = 12 then d.vt_op.data(3) 9 7655 else vt_op,-1,d.vt_op.resultat); 9 7656 d.vt_op.optype:= gen_optype or vt_optype; 9 7657 disable afslut_operation(vt_op,cs_vt_adgang); 9 7658 end; 8 7659 begin 9 7660 \f 9 7660 message procedure operatør side 7 - 810921/hko,cl; 9 7661 9 7661 <* 2 vogntabel,linienr/-,busnr *> 9 7662 9 7662 d.op_ref.retur:= cs_operatør(nr); 9 7663 tofrom(d.op_ref.data,ia,10); 9 7664 indeks:= op_ref; 9 7665 signal_ch(cs_vt,op_ref,gen_optype or op_optype); 9 7666 wait_ch(cs_operatør(nr), 9 7667 op_ref, 9 7668 op_optype, 9 7669 -1<*timeout*>); 9 7670 <*+2*> if testbit10 and overvåget then 9 7671 disable begin 10 7672 write(out,"nl",1,<:operatør operation retur fra vt:>); 10 7673 skriv_op(out,op_ref); 10 7674 end; 9 7675 <*-2*> 9 7676 <*+4*> 9 7677 if indeks <> op_ref then 9 7678 fejlreaktion(11<*fremmed post*>,op_ref,<:operatør komm:>,0); 9 7679 <*-4*> 9 7680 i:= d.op_ref.resultat; 9 7681 if i = 0 or i > 3 then 9 7682 begin 10 7683 <*V*> setposition(z_op(nr),0,0); 10 7684 cursor(z_op(nr),24,1); 10 7685 skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat); 10 7686 end 9 7687 else 9 7688 begin 10 7689 integer antal,fil_ref; 10 7690 10 7690 skærm_måde:= 1; 10 7691 antal:= d.op_ref.data(6); 10 7692 fil_ref:= d.op_ref.data(7); 10 7693 <*V*> setposition(z_op(nr),0,0); 10 7694 write(z_op(nr),"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>, 10 7695 "sp",14,"*",10,"sp",6, 10 7696 <:vogntabeludskrift:>,"sp",6,"*",10,"nl",2); 10 7697 <*V*> setposition(z_op(nr),0,0); 10 7698 \f 10 7698 message procedure operatør side 8 - 841213/cl; 10 7699 10 7699 pos:= 1; 10 7700 while pos <= antal do 10 7701 begin 11 7702 integer bogst,løb; 11 7703 11 7703 disable i:= læs_fil(fil_ref,pos,j); 11 7704 if i <> 0 then 11 7705 fejlreaktion(5<*læs_fil*>,i,<:operatør: vo,l/vo,b:>,0) 11 7706 else 11 7707 begin 12 7708 vogn:= fil(j,1) shift (-24) extract 24; 12 7709 løb:= fil(j,1) extract 24; 12 7710 if d.op_ref.opkode=9 then 12 7711 begin i:=vogn; vogn:=løb; løb:=i; end; 12 7712 ll:= løb shift (-12) extract 10; 12 7713 bogst:= løb shift (-7) extract 5; 12 7714 if bogst > 0 then bogst:= bogst +'A'-1; 12 7715 løb:= løb extract 7; 12 7716 vogn:= vogn extract 14; 12 7717 i:= d.op_ref.opkode-8; 12 7718 for i:= i,i+1 do 12 7719 begin 13 7720 j:= (i+1) extract 1; 13 7721 case j +1 of 13 7722 begin 14 7723 write(z_op(nr),"sp",(bogst=0) extract 1,<<ddd>,ll, 14 7724 false add bogst,1,"/",1,<<d__>,løb); 14 7725 write(z_op(nr),<<dddd>,vogn,"sp",1); 14 7726 end; 13 7727 end; 12 7728 if pos mod 5 = 0 then 12 7729 begin 13 7730 outchar(z_op(nr),'nl'); 13 7731 <*V*> setposition(z_op(nr),0,0); 13 7732 end 12 7733 else write(z_op(nr),"sp",3); 12 7734 end; 11 7735 pos:=pos+1; 11 7736 end; 10 7737 write(z_op(nr),"*",1,"nl",1); 10 7738 \f 10 7738 message procedure operatør side 8a- 810507/hko; 10 7739 10 7739 d.opref.opkode:=104; <*slet-fil*> 10 7740 d.op_ref.data(4):=filref; 10 7741 indeks:=op_ref; 10 7742 signal_ch(cs_slet_fil,op_ref,gen_optype or op_optype); 10 7743 <*V*> wait_ch(cs_operatør(nr),op_ref,op_optype,-1); 10 7744 10 7744 <*+2*> if testbit10 and overvåget then 10 7745 disable begin 11 7746 write(out,"nl",1,<:operatør, slet-fil retur:>); 11 7747 skriv_op(out,op_ref); 11 7748 end; 10 7749 <*-2*> 10 7750 10 7750 <*+4*> if op_ref<>indeks then 10 7751 fejlreaktion(11<*fr.post*>,op_ref,<:operatør,slet-fil:>,0); 10 7752 <*-4*> 10 7753 if d.op_ref.data(9)<>0 then 10 7754 fejl_reaktion(3<*prg.fejl*>,d.op_ref.data(9), 10 7755 <:operatør, slet_fil:>,1); 10 7756 end; 9 7757 end; 8 7758 8 7758 begin 9 7759 \f 9 7759 message procedure operatør side 9 - 830310/hko; 9 7760 9 7760 <* 3 radio_kommandoer *> 9 7761 9 7761 kode:= d.op_ref.opkode; 9 7762 rkom:= kode-44; par1:=ia(1); par2:=ia(2); 9 7763 disable if testbit14 then 9 7764 begin 10 7765 integer i; <*lav en trap-bar blok*> 10 7766 10 7766 trap(test14_trap); 10 7767 systime(1,0,kommstart); 10 7768 write(zrl,<<zd dd dd.dd >,now,<:op:>,<<d__>,nr, 10 7769 string bpl_navn(nr),<: start :>,case rkom of ( 10 7770 <:OP:>,<:ME:>,<:OP,G:>,<:ME,G:>,<:OP,A:>,<:ME,A:>, 10 7771 <:KA,C:>,<:KA,P:>,<:OP,L:>,<:MO:>,<:VE:>,<:NE:>, 10 7772 <:OP,V:>,<:OP,T:>,<:R:>,<:GE:>,<:GE,G:>,<:GE,V:>, 10 7773 <:GE,T:>),<: :>); 10 7774 if (rkom<5 or rkom=9 or rkom=13 or rkom=14 or 10 7775 rkom=16 or rkom=17 or rkom=19) 10 7776 then 10 7777 begin 11 7778 if par1<>0 then skriv_id(zrl,par1,0); 11 7779 if par2<>0 and rkom<>13 and rkom<>14 and rkom<>19 then 11 7780 write(zrl,"sp",1,string områdenavn(par2)); 11 7781 end 10 7782 else 10 7783 if rkom=10 and par1<>0 then 10 7784 write(zrl,string kanalnavn(par1 extract 20)) 10 7785 else 10 7786 if rkom=5 or rkom=6 then 10 7787 begin 11 7788 if par1 shift (-20)=15 then write(zrl,<:ALLE:>) else 11 7789 if par1 shift (-20)=14 then 11 7790 write(zrl,string områdenavn(par1 extract 20)); 11 7791 end; 10 7792 test14_trap: outchar(zrl,'nl'); 10 7793 end; 9 7794 d.op_ref.data(4):= nr; <*operatør*> 9 7795 opgave:= 9 7796 if kode = 45 <*OP *> then 1 else 9 7797 if kode = 46 <*ME *> then 2 else 9 7798 if kode = 47 <*OP,G*> then 3 else 9 7799 if kode = 48 <*ME,G*> then 4 else 9 7800 if kode = 49 <*OP,A*> then 5 else 9 7801 if kode = 50 <*ME,A*> then 6 else 9 7802 if kode = 51 <*KA,C*> then 7 else 9 7803 if kode = 52 <*KA,P*> then 8 else 9 7804 if kode = 53 <*OP,L*> then 9 else 9 7805 if kode = 54 <*MO *> then (if ia(1)=0 then 11 else 10) else 9 7806 if kode = 55 <*VE *> then 14 else 9 7807 if kode = 56 <*NE *> then 12 else 9 7808 if kode = 57 <*OP,V*> then 1 else 9 7809 if kode = 58 <*OP,T*> then 1 else 9 7810 if kode = 59 <*R *> then 13 else 9 7811 if kode = 60 <*GE *> then 15 else 9 7812 if kode = 61 <*GE,G*> then 16 else 9 7813 if kode = 62 <*GE,V*> then 15 else 9 7814 if kode = 63 <*GE,T*> then 15 else 9 7815 -1; 9 7816 <*+4*> if opgave < 0 then 9 7817 fejlreaktion(2<*operationskode*>,kode, 9 7818 <:operatør, radio-kommando :>,0); 9 7819 <*-4*> 9 7820 status:= skærm_status(tilstand,b_v,b_s,b_s_tilst); 9 7821 i:= d.op_ref.data(2):= ia(1); <* ident.*> 9 7822 if 5<=opgave and opgave<=8 then 9 7823 d.opref.data(2):= -1; 9 7824 if opgave=13 then d.opref.data(2):= 9 7825 (if læsbit_i(terminaltab.ref.terminaltilstand,11) 9 7826 then 0 else 1); 9 7827 if opgave = 14 then d.opref.data(2):= 1; 9 7828 if opgave=7 or opgave=8 then 9 7829 d.opref.data(3):= -1 9 7830 else 9 7831 if opgave=5 or opgave=6 then 9 7832 begin 10 7833 if ia(1) shift (-20) = 15 then 10 7834 begin 11 7835 d.opref.data(3):= 15 shift 20; 11 7836 for j:= 1 step 1 until max_antal_kanaler do 11 7837 begin 12 7838 iaf:= (j-1)*kanalbeskrlængde; 12 7839 if læsbit_i(kanaltab.iaf.kanal_tilstand,11) and 12 7840 læsbit_i(ia(1),kanal_til_omr(j)) then 12 7841 sætbit_i(d.opref.data(3),kanal_til_omr(j),1); 12 7842 end; 11 7843 end 10 7844 else 10 7845 d.opref.data(3):= if ia(1)=0 then 14 shift 20 + 3 10 7846 else ia(1); 10 7847 end 9 7848 else 9 7849 if kode = 57 then d.opref.data(3):= 2 else 9 7850 if kode = 58 then d.opref.data(3):= 1 else 9 7851 if kode = 62 then d.opref.data(3):= 2 else 9 7852 if kode = 63 then d.opref.data(3):= 1 else 9 7853 d.opref.data(3):= ia(2); 9 7854 9 7854 <* !!! i første if-sætning nedenfor er 'status>1' 9 7855 rettet til 'status>0' for at forhindre 9 7856 at opkald nr. 2 kan udføres med et allerede 9 7857 etableret opkald i skærmens s-felt, 9 7858 jvf. ulykke d. 7/2-1995 9 7859 !!! *> 9 7860 res:= 9 7861 if (opgave=1 or opgave=3) and status>0 9 7862 then 16 <*skærm optaget*> else 9 7863 if (opgave=15 or opgave=16) and 9 7864 status>1 then 16 <*skærm optaget*> else 9 7865 if (opgave=1 or opgave=3) and status=0 then 1 else 9 7866 if (opgave=15 or opgave=16) and status=0 then 21 else 9 7867 if (opgave=1 or opgave=3 or opgave=15 or opgave=16) then 9 7868 (if (d.opref.data(3)=1 or d.opref.data(3)=2) and 9 7869 d.opref.data(3) = kanal_til_omr(bs extract 6) 9 7870 then 52 else 1) else 9 7871 if opgave<11 and status>0 then 16 else 9 7872 if opgave=11 and status<2 then 21 else 9 7873 if opgave=12 and status=0 then 22 else 9 7874 if opgave=13 and status=0 then 49 else 9 7875 if opgave=14 and status<>3 then 21 else 1; 9 7876 if res=1 and (d.opref.data(3)=1 or d.opref.data(3)=2) then 9 7877 begin <* specialbetingelser for TLF og VHF *> 10 7878 if (1<opgave and opgave<9) or opgave=16 then res:= 51; 10 7879 end; 9 7880 if skærmmåde<>0 then 9 7881 begin skærm_måde:= 0; skriv_skærm(nr); end; 9 7882 kode:= opgave; 9 7883 if opgave = 15 then opgave:= 1 else 9 7884 if opgave = 16 then opgave:= 3; 9 7885 \f 9 7885 message procedure operatør side 10 - 810616/hko; 9 7886 9 7886 <* tilknyt talevej (om nødvendigt) *> 9 7887 if res = 1 and op_talevej(nr)=0 then 9 7888 begin 10 7889 i:= sidste_tv_brugt; 10 7890 repeat 10 7891 i:= (i mod max_antal_taleveje)+1; 10 7892 if tv_operatør(i)=0 then 10 7893 begin 11 7894 tv_operatør(i):= nr; 11 7895 op_talevej(nr):= i; 11 7896 end; 10 7897 until op_talevej(nr)<>0 or i=sidste_tv_brugt; 10 7898 if op_talevej(nr)=0 then 10 7899 res:=61 10 7900 else 10 7901 begin 11 7902 sidste_tv_brugt:= 11 7903 (sidste_tv_brugt mod max_antal_taleveje)+1; 11 7904 11 7904 <*V*> waitch(cs_tvswitch_adgang,iaf,op_optype,-1); 11 7905 start_operation(iaf,200+nr,cs_operatør(nr), 11 7906 'A' shift 12 + 44); 11 7907 d.iaf.data(1):= op_talevej(nr); 11 7908 d.iaf.data(2):= nr+16; 11 7909 ll:= 0; 11 7910 repeat 11 7911 signalch(cs_talevejsswitch,iaf,op_optype); 11 7912 <*V*> waitch(cs_operatør(nr),iaf,op_optype,-1); 11 7913 ll:= ll+1; 11 7914 until ll=3 or d.iaf.resultat=3; 11 7915 res:= if d.iaf.resultat=3 then 1 else 61; 11 7916 <* ********* *> 11 7917 delay(1); 11 7918 start_operation(iaf,200+nr,cs_operatør(nr), 11 7919 'R' shift 12 + 44); 11 7920 ll:= 0; 11 7921 repeat 11 7922 signalch(cs_talevejsswitch,iaf,op_optype); 11 7923 waitch(cs_operatør(nr),iaf,op_optype,-1); 11 7924 ll:= ll+1; 11 7925 until ll=3 or d.iaf.resultat=3; 11 7926 <* ********* *> 11 7927 signalch(cs_tvswitch_adgang,iaf,op_optype); 11 7928 if res<>1 then 11 7929 op_talevej(nr):=tv_operatør(op_talevej(nr)):= 0; 11 7930 end; 10 7931 end; 9 7932 if op_talevej(nr)=0 then res:= 61; 9 7933 d.op_ref.data(1):= op_talevej(nr); 9 7934 9 7934 if res <= 1 then 9 7935 begin 10 7936 til_radio: <* send operation til radiomodul *> 10 7937 d.op_ref.opkode:= opgave shift 12 + 41; 10 7938 d.op_ref.data(5):= if b_v<>0 then 12 shift 20 + b_v 10 7939 else 0; 10 7940 d.op_ref.data(6):= b_s; 10 7941 d.op_ref.resultat:=0; 10 7942 d.op_ref.retur:= cs_operatør(nr); 10 7943 indeks:= op_ref; 10 7944 <*+2*> if testbit11 and overvåget then 10 7945 disable begin 11 7946 skriv_operatør(out,0); 11 7947 write(out,<: operation til radio:>); 11 7948 skriv_op(out,op_ref); ud; 11 7949 end; 10 7950 <*-2*> 10 7951 signal_ch(cs_rad,op_ref,gen_optype or op_optype); 10 7952 <*V*> wait_ch(cs_operatør(nr),op_ref,op_optype,-1); 10 7953 10 7953 <*+2*> if testbit12 and overvåget then 10 7954 disable begin 11 7955 skriv_operatør(out,0); 11 7956 write(out,<: operation retur fra radio:>); 11 7957 skriv_op(out,op_ref); ud; 11 7958 end; 10 7959 <*-2*> 10 7960 <*+4*> if op_ref <> indeks then 10 7961 fejlreaktion(11<*fr.post*>,op_ref, 10 7962 <:operatør, retur fra radio:>,0); 10 7963 <*-4*> 10 7964 \f 10 7964 message procedure operatør side 11 - 810529/hko; 10 7965 10 7965 res:= d.op_ref.resultat; 10 7966 if res < 2 or (res > 3 and (res<>49 or opgave<>11)) then 10 7967 begin 11 7968 <*+4*> if res < 2 then 11 7969 fejlreaktion(3<*prg.fejl*>,res, 11 7970 <: operatør,radio_op,resultat:>,1); 11 7971 <*-4*> 11 7972 if res = 1 then res:= 0; 11 7973 end 10 7974 else 10 7975 begin <* res = 2 eller 3 *> 11 7976 s_kanal:= v_kanal:= 0; 11 7977 opgave:= d.opref.opkode shift (-12); 11 7978 bv:= d.op_ref.data(5) extract 4; 11 7979 bs:= d.op_ref.data(6); 11 7980 if opgave < 10 then 11 7981 begin 12 7982 j:= d.op_ref.data(7) <*type*>; 12 7983 i:= terminal_tab.ref(1) shift (-12) shift 12 extract 21; 12 7984 i:= i + (if opgave=2 or opgave>3 then 2 else 1); 12 7985 terminal_tab.ref(1):= i 12 7986 +(if res=2 then 4 <*optaget*> else 0) 12 7987 +(if (opgave=1 or opgave=9) and j = 2 <*nødopkald*> 12 7988 then 8 <*nød*> else 0) 12 7989 +(if opgave=1 and j > 0 and j < 3 <*mobilopkald*> 12 7990 then 16 else 0) 12 7991 + (if opgave mod 2 = 0 then 64 <*pas*> else 0) 12 7992 + (if opgave=9 then 128 else 12 7993 if opgave>=7 then 256 else 12 7994 if opgave>=5 then 512 else 0) 12 7995 + (if res = 2 then 2 shift 21 <*tilstand = optaget *> 12 7996 else if b_s = 0 then 0 <*tilstand = ledig *> 12 7997 else 1 shift 21 <*tilstand = samtale*>); 12 7998 if (res=3 or res=20 or res=52) and 0<=j and j<3 then 12 7999 disable tæl_opkald_pr_operatør(nr, 12 8000 (if res=20 then 4 else if res=52 then 5 else j+1)); 12 8001 end 11 8002 else if opgave=10 <*monitering*> or 11 8003 opgave=14 <*ventepos *> then 11 8004 begin 12 8005 <*+4*> if res = 2 then 12 8006 fejlreaktion(3<*prg.fejl*>,res, 12 8007 <: operatør,moniter,res:>,1); 12 8008 <*-4*> 12 8009 iaf:= (bs extract 4 -1)*kanal_beskr_længde; 12 8010 i:= if bs<0 then 12 8011 kanaltab.iaf.kanal_tilstand extract 12 else 0; 12 8012 terminal_tab.ref(1):= i + 12 8013 (if bs < 0 then (1 shift 21) else 0); 12 8014 if opgave=10 then 12 8015 begin 13 8016 s_kanal:= bs; 13 8017 v_kanal:= d.opref.data(5); 13 8018 end; 12 8019 \f 12 8019 message procedure operatør side 12 - 810603/hko; 12 8020 end 11 8021 else if opgave=11 or opgave=12 then 11 8022 begin 12 8023 <*+4*> if res = 2 then 12 8024 fejlreaktion(3<*prg.fejl*>,res, 12 8025 <: operatør,ge/ne,res:>,1); 12 8026 <*-4*> 12 8027 if opgave=11 <*GE*> and res<>49 then 12 8028 begin 13 8029 s_kanal:= terminal_tab.ref(2); 13 8030 v_kanal:= 12 shift 20 + 13 8031 (terminal_tab.ref(1) shift (-12) extract 4); 13 8032 end; 12 8033 terminal_tab.ref(1):= 0; <* s og v felt nedlagt *> 12 8034 end 11 8035 else 11 8036 if opgave=13 then 11 8037 begin 12 8038 if res=2 then 12 8039 fejlreaktion(3<*prg.fejl*>,res, 12 8040 <:operatør,R,res:>,1); 12 8041 sætbit_i(terminaltab.ref.terminaltilstand,11, 12 8042 d.opref.data(2)); 12 8043 end 11 8044 <*+4*> else fejlreaktion(3,opgave,<:operatør, opgave:>,0) 11 8045 <*-4*> 11 8046 ; 11 8047 <*indsæt kanal_nr for b_v_felt i terminalbeskr.*> 11 8048 11 8048 sæt_hex_ciffer(terminal_tab.ref,3,b_v extract 4); 11 8049 terminal_tab.ref(2):= b_s; 11 8050 terminal_tab.ref(3):= d.op_ref.data(11); 11 8051 if (opgave<10 or opgave=14) and res=3 then 11 8052 <*så henviser b_s til radiokanal*> 11 8053 begin 12 8054 if bs shift (-20) = 12 then 12 8055 begin 13 8056 iaf:= (bs extract 4 -1)*kanal_beskr_længde; 13 8057 kanaltab.iaf.kanal_tilstand:= 13 8058 kanaltab.iaf.kanal_tilstand shift(-10) shift 10 13 8059 +terminal_tab.ref(1) extract 10; 13 8060 end 12 8061 else 12 8062 begin 13 8063 for i:= 1 step 1 until max_antal_kanaler do 13 8064 begin 14 8065 if læsbit_i(bs,i) then 14 8066 begin 15 8067 iaf:= (i-1)*kanal_beskr_længde; 15 8068 kanaltab.iaf.kanaltilstand:= 15 8069 kanaltab.iaf.kanaltilstand shift (-10) shift 10 15 8070 + terminal_tab.ref(1) extract 10; 15 8071 end; 14 8072 end; 13 8073 end; 12 8074 end; 11 8075 if kode=15 or kode=16 then 11 8076 begin 12 8077 if opgave<10 then 12 8078 begin 13 8079 opgave:= 11; 13 8080 kanal:= (12 shift 20) + 13 8081 d.opref.data(6) extract 20; 13 8082 goto til_radio; 13 8083 end 12 8084 else 12 8085 if opgave=11 then 12 8086 begin 13 8087 opgave:= 10; 13 8088 d.opref.data(2):= kanal; 13 8089 goto til_radio; 13 8090 end; 12 8091 end 11 8092 else 11 8093 if (kode=1 or kode=3) then 11 8094 begin 12 8095 if opgave<10 and bv<>0 then 12 8096 begin 13 8097 opgave:= 14; 13 8098 d.opref.data(2):= 2; 13 8099 goto til_radio; 13 8100 end; 12 8101 end; 11 8102 <*V*> skriv_skærm_b_v_s(nr); 11 8103 <*V*> if sætbit_ia(opkaldsflag,nr,0) = 1 then 11 8104 skriv_skærm_opkaldskø(nr); 11 8105 for i:= s_kanal, v_kanal do 11 8106 if i<0 then skriv_skærm_kanal(nr,i extract 4); 11 8107 tofrom(kanalflag,alle_operatører,op_maske_lgd); 11 8108 signalbin(bs_mobilopkald); 11 8109 <*V*> setposition(z_op(nr),0,0); 11 8110 end; <* res = 2 eller 3 *> 10 8111 end; <* res <= 1 *> 9 8112 <* frigiv talevej (om nødvendigt) *> 9 8113 if læs_hex_ciffer(terminal_tab.ref,3,b_v)=0 9 8114 and terminal_tab.ref(2)=0 <*b_s*> 9 8115 and op_talevej(nr)<>0 9 8116 then 9 8117 begin 10 8118 <*V*> waitch(cs_tvswitch_adgang,iaf,op_optype,-1); 10 8119 start_operation(iaf,200+nr,cs_operatør(nr), 10 8120 'D' shift 12 + 44); 10 8121 d.iaf.data(1):= op_talevej(nr); 10 8122 d.iaf.data(2):= nr+16; 10 8123 ll:= 0; 10 8124 repeat 10 8125 signalch(cs_talevejsswitch,iaf,op_optype); 10 8126 <*V*> waitch(cs_operatør(nr),iaf,op_optype,-1); 10 8127 ll:= ll+1; 10 8128 until ll=3 or d.iaf.resultat=3; 10 8129 ll:= d.iaf.resultat; 10 8130 signalch(cs_tvswitch_adgang,iaf,op_optype); 10 8131 if ll<>3 then 10 8132 fejlreaktion(21,op_talevej(nr)*100+nr, 10 8133 <:frigiv operatør fejlet:>,1) 10 8134 else 10 8135 op_talevej(nr):= tv_operatør(op_talevej(nr)):= 0; 10 8136 skriv_skærm_b_v_s(nr); 10 8137 end; 9 8138 disable if testbit14 then 9 8139 begin 10 8140 integer t; <*lav en trap-bar blok*> 10 8141 10 8141 trap(test14_trap); 10 8142 systime(1,0,kommslut); 10 8143 write(zrl,<<zd dd dd.dd >,now,<:op:>,<<d__>,nr, 10 8144 string bpl_navn(nr),<: slut :>,case rkom of ( 10 8145 <:OP:>,<:ME:>,<:OP,G:>,<:ME,G:>,<:OP,A:>,<:ME,A:>, 10 8146 <:KA,C:>,<:KA,P:>,<:OP,L:>,<:MO:>,<:VE:>,<:NE:>, 10 8147 <:OP,V:>,<:OP,T:>,<:R:>,<:GE:>,<:GE,G:>,<:GE,V:>, 10 8148 <:GE,T:>),<: :>); 10 8149 if (rkom<5 or rkom=9 or rkom=13 or rkom=14 or 10 8150 rkom=16 or rkom=17 or rkom=19) 10 8151 then 10 8152 begin 11 8153 if d.opref.data(7)=2 then outchar(zrl,'*'); 11 8154 if d.opref.data(9)<>0 then 11 8155 begin 12 8156 skriv_id(zrl,d.opref.data(9),0); 12 8157 outchar(zrl,' '); 12 8158 end; 11 8159 if d.opref.data(8)<>0 then 11 8160 begin 12 8161 skriv_id(zrl,d.opref.data(8),0); 12 8162 outchar(zrl,' '); 12 8163 end; 11 8164 if d.opref.data(8)=0 and d.opref.data(9)=0 and 11 8165 d.opref.data(2)<>0 then 11 8166 begin 12 8167 skriv_id(zrl,d.opref.data(2),0); 12 8168 outchar(zrl,' '); 12 8169 end; 11 8170 if d.opref.data(12)<>0 then 11 8171 begin 12 8172 if d.opref.data(12) shift (-20) = 15 then 12 8173 write(zrl,<:OMR*:>) 12 8174 else 12 8175 if d.opref.data(12) shift (-20) = 14 then 12 8176 write(zrl, 12 8177 string områdenavn(d.opref.data(12) extract 20)) 12 8178 else 12 8179 skriv_id(zrl,d.opref.data(12),0); 12 8180 outchar(zrl,' '); 12 8181 end; 11 8182 t:= terminal_tab.ref.terminaltilstand extract 10; 11 8183 if res=3 and rkom=1 and 11 8184 (t shift (-4) extract 1 = 1) and 11 8185 (t extract 2 <> 3) 11 8186 then 11 8187 begin 12 8188 iaf:= (terminal_tab.ref(2) extract 20 - 1)* 12 8189 kanal_beskr_længde; 12 8190 write(zrl,<<zd.dd>,(kanal_tab.iaf.kanal_spec 12 8191 extract 12)/100," ",1); 12 8192 end; 11 8193 if d.opref.data(10)<>0 then 11 8194 begin 12 8195 skriv_id(zrl,d.opref.data(10),0); 12 8196 outchar(zrl,' '); 12 8197 end; 11 8198 end 10 8199 else 10 8200 if rkom=10 and par1<>0 then 10 8201 write(zrl,string kanalnavn(par1 extract 20),"sp",1) 10 8202 else 10 8203 if rkom=5 or rkom=6 then 10 8204 begin 11 8205 if par1 shift (-20)=15 then write(zrl,<:ALLE:>) else 11 8206 if par1 shift (-20)=14 then 11 8207 write(zrl,string områdenavn(par1 extract 20)); 11 8208 outchar(zrl,' '); 11 8209 end; 10 8210 if op_talevej(nr) > 0 then 10 8211 write(zrl,<:T:>,<<d>,op_talevej(nr)," ",1); 10 8212 write(zrl,<:res=:>,<<d>,res,<: btid=:>, 10 8213 <<dd.dd>,kommslut-kommstart); 10 8214 test14_trap: outchar(zrl,'nl'); 10 8215 end; 9 8216 9 8216 <*V*> setposition(z_op(nr),0,0); 9 8217 cursor(z_op(nr),24,1); 9 8218 <*V*> skriv_kvittering(z_op(nr),op_ref,-1,res); 9 8219 end; <* radio-kommando *> 8 8220 begin 9 8221 \f 9 8221 message procedure operatør side 13 - 810518/hko; 9 8222 9 8222 <* 4 stop kommando *> 9 8223 9 8223 status:= skærm_status(tilstand,b_v,b_s,b_s_tilst); 9 8224 if tilstand <> 0 then 9 8225 begin 10 8226 d.op_ref.resultat:= 16; <*skærm optaget*> 10 8227 end 9 8228 else 9 8229 begin 10 8230 d.op_ref.retur:= cs_operatør(nr); 10 8231 d.op_ref.resultat:= 0; 10 8232 d.op_ref.data(1):= nr; 10 8233 indeks:= op_ref; 10 8234 <*+2*> if testbit11 and overvåget then 10 8235 disable begin 11 8236 skriv_operatør(out,0); 11 8237 write(out,<: stop_operation til radio:>); 11 8238 skriv_op(out,op_ref); ud; 11 8239 end; 10 8240 <*-2*> 10 8241 if opk_alarm.tab.alarm_tilst > 0 then 10 8242 begin 11 8243 opk_alarm.tab.alarm_kmdo:= 3; 11 8244 signal_bin(bs_opk_alarm); 11 8245 end; 10 8246 10 8246 signal_ch(cs_rad,op_ref,gen_optype or op_optype); 10 8247 <*V*> wait_ch(cs_operatør(nr),op_ref,op_optype,-1); 10 8248 <*+2*> if testbit12 and overvåget then 10 8249 disable begin 11 8250 skriv_operatør(out,0); 11 8251 write(out,<: operation retur fra radio:>); 11 8252 skriv_op(out,op_ref); ud; 11 8253 end; 10 8254 <*-2*> 10 8255 <*+4*> if indeks <> op_ref then 10 8256 fejlreaktion(11<*fr.post*>,op_ref, 10 8257 <: operatør, retur fra radio:>,0); 10 8258 <*-4*> 10 8259 \f 10 8259 message procedure operatør side 14 - 810527/hko; 10 8260 10 8260 if d.op_ref.resultat = 3 then 10 8261 begin 11 8262 integer k,n; 11 8263 integer array field msk,iaf1; 11 8264 11 8264 terminal_tab.ref.terminal_tilstand:= 3 shift 21 11 8265 +terminal_tab.ref.terminal_tilstand extract 21; 11 8266 tofrom(opkaldsflag,alle_operatører,op_maske_lgd); 11 8267 if sæt_bit_ia(operatørmaske,nr,0)=1 then 11 8268 for k:= nr, 65 step 1 until top_bpl_gruppe do 11 8269 begin 12 8270 msk:= k*op_maske_lgd; 12 8271 if læsbit_ia(bpl_def.msk,nr) then 12 8272 <**> begin 13 8273 n:= 0; 13 8274 for i:= 1 step 1 until max_antal_operatører do 13 8275 if læsbit_ia(bpl_def.msk,i) then 13 8276 begin 14 8277 iaf1:= i*terminal_beskr_længde; 14 8278 if terminal_tab.iaf1.terminal_tilstand 14 8279 shift (-21) < 3 then 14 8280 n:= n+1; 14 8281 end; 13 8282 bpl_tilst(k,1):= n; 13 8283 end; 12 8284 <**> <* 12 8285 bpl_tilst(k,1):= bpl_tilst(k,1)-1; 12 8286 *> end; 11 8287 signal_bin(bs_mobil_opkald); 11 8288 <*V*> setposition(z_op(nr),0,0); 11 8289 ht_symbol(z_op(nr)); 11 8290 end; 10 8291 end; 9 8292 <*V*> setposition(z_op(nr),0,0); 9 8293 cursor(z_op(nr),24,1); 9 8294 if d.op_ref.resultat<> 3 then 9 8295 skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat); 9 8296 end; 8 8297 begin 9 8298 boolean l22; 9 8299 \f 9 8299 message procedure operatør side 15 - 810521/cl; 9 8300 9 8300 <* 5 springdefinition *> 9 8301 l22:= false; 9 8302 if sep=',' then 9 8303 disable begin 10 8304 setposition(z_op(nr),0,0); 10 8305 cursor(z_op(nr),22,1); 10 8306 write(z_op(nr),"esc" add 128,1,<:ÆK:>,">",1); 10 8307 l22:= true; pos:= 1; 10 8308 while læstegn(d.op_ref.data,pos,i)<>0 do 10 8309 outchar(z_op(nr),i); 10 8310 end; 9 8311 9 8311 tofrom(d.op_ref.data,ia,indeks*2); 9 8312 <*V*> wait_ch(cs_op_fil(nr),vt_op,true,-1<*timeout*>); 9 8313 start_operation(vt_op,200+nr,cs_operatør(nr), 9 8314 101<*opret fil*>); 9 8315 d.vt_op.data(1):=128;<*postantal*> 9 8316 d.vt_op.data(2):=2; <*postlængde*> 9 8317 d.vt_op.data(3):=1; <*segmentantal*> 9 8318 d.vt_op.data(4):= 9 8319 2 shift 10; <*spool fil*> 9 8320 signal_ch(cs_opret_fil,vt_op,op_optype); 9 8321 pos:=vt_op;<*variabel lånes*> 9 8322 <*V*> wait_ch(cs_operatør(nr),vt_op,op_optype,-1<*timeout*>); 9 8323 <*+4*> if vt_op<>pos then 9 8324 fejlreaktion(11<*fremmed post*>,vt_op,<:springdef:>,0); 9 8325 if d.vt_op.data(9)<>0 then 9 8326 fejlreaktion(13<*opret-fil*>,d.vt_op.data(9), 9 8327 <:op kommando(springdefinition):>,0); 9 8328 <*-4*> 9 8329 iaf:=0; 9 8330 for i:=1 step 1 until indeks-2 do 9 8331 begin 10 8332 disable k:=modif_fil(d.vt_op.data(4),i,j); 10 8333 if k<>0 then 10 8334 fejlreaktion(7<*modif-fil*>,k, 10 8335 <:op kommando(spring-def):>,0); 10 8336 fil(j).iaf(1):=d.op_ref.data(i+2); 10 8337 end; 9 8338 \f 9 8338 message procedure operatør side 15a - 820301/cl; 9 8339 9 8339 while sep = ',' do 9 8340 begin 10 8341 setposition(z_op(nr),0,0); 10 8342 cursor(z_op(nr),23,1); 10 8343 write(z_op(nr),"esc" add 128,1,<:ÆK:>,<:+>:>); 10 8344 setposition(z_op(nr),0,0); 10 8345 wait(bs_fortsæt_adgang); 10 8346 pos:= 1; j:= 0; 10 8347 while læs_store(z_op(nr),i) < 8 do 10 8348 begin 11 8349 skrivtegn(fortsæt,pos,i); 11 8350 if i = '?' or i = 'esc' then j:= 1; <* skip kommando *> 11 8351 end; 10 8352 skrivtegn(fortsæt,pos,'em'); 10 8353 afsluttext(fortsæt,pos); 10 8354 sluttegn:= i; 10 8355 if j<>0 then 10 8356 begin 11 8357 setposition(z_op(nr),0,0); 11 8358 cursor(z_op(nr),24,1); 11 8359 skriv_kvittering(z_op(nr),opref,-1,53);<*annulleret*> 11 8360 cursor(z_op(nr),1,1); 11 8361 goto sp_ann; 11 8362 end; 10 8363 \f 10 8363 message procedure operatør side 16 - 810521/cl; 10 8364 10 8364 disable begin 11 8365 integer array værdi(1:4); 11 8366 integer a_pos,res; 11 8367 pos:= 0; 11 8368 repeat 11 8369 apos:= pos; 11 8370 læs_paramsæt(fortsæt,a_pos,0,værdi,sep,res); 11 8371 if res >= 0 then 11 8372 begin 12 8373 if res=0 and (sep=',' or indeks>2) then <*ok*> 12 8374 else if res=0 then res:= -25 <*parameter mangler*> 12 8375 else if res=10 and (værdi(1)<1 or værdi(1)>99) then 12 8376 res:= -44 <*intervalstørrelse ulovlig*> 12 8377 else if res=10 and (værdi(2)<1 or værdi(2)>99) then 12 8378 res:= -6 <*løbnr ulovligt*> 12 8379 else if res=10 then 12 8380 begin 13 8381 k:=modiffil(d.vt_op.data(4),indeks-1,j); 13 8382 if k<>0 then fejlreaktion(7<*modiffil*>,k, 13 8383 <:op kommando(spring-def):>,0); 13 8384 iaf:= 0; 13 8385 fil(j).iaf(1):= værdi(1) shift 12 + værdi(2); 13 8386 indeks:= indeks+1; 13 8387 if sep = ',' then res:= 0; 13 8388 end 12 8389 else res:= -27; <*parametertype*> 12 8390 end; 11 8391 if res>0 then pos:= a_pos; 11 8392 until sep<>'sp' or res<=0; 11 8393 11 8393 if res<0 then 11 8394 begin 12 8395 d.op_ref.resultat:= -res; 12 8396 i:=1; j:= 1; 12 8397 hægt_tekst(d.op_ref.data,i,fortsæt,j); 12 8398 afsluttext(d.op_ref.data,i); 12 8399 end; 11 8400 end; 10 8401 \f 10 8401 message procedure operatør side 17 - 810521/cl; 10 8402 10 8402 if d.op_ref.resultat > 3 then 10 8403 begin 11 8404 setposition(z_op(nr),0,0); 11 8405 if l22 then 11 8406 begin 12 8407 cursor(z_op(nr),22,1); l22:= false; 12 8408 write(z_op(nr),"-",80); 12 8409 end; 11 8410 cursor(z_op(nr),24,1); 11 8411 skriv_kvittering(z_op(nr),op_ref,pos,d.opref.resultat); 11 8412 goto sp_ann; 11 8413 end; 10 8414 if sep=',' then 10 8415 begin 11 8416 setposition(z_op(nr),0,0); 11 8417 cursor(z_op(nr),22,1); 11 8418 write(z_op(nr),"esc" add 128,1,<:ÆK:>,<:+>:>); 11 8419 pos:= 1; l22:= true; 11 8420 while læstegn(fortsæt,pos,i)<>0 do 11 8421 outchar(z_op(nr),i); 11 8422 end; 10 8423 signalbin(bs_fortsæt_adgang); 10 8424 end while sep = ','; 9 8425 d.vt_op.data(1):= indeks-2; 9 8426 k:= sætfildim(d.vt_op.data); 9 8427 if k<>0 then fejlreaktion(9,k,<:op kommando(spring-def):>,0); 9 8428 d.op_ref.data(3):= d.vt_op.data(4); <*filref*> 9 8429 signalch(cs_op_fil(nr),vt_op,op_optype or gen_optype); 9 8430 d.op_ref.retur:=cs_operatør(nr); 9 8431 pos:=op_ref; 9 8432 signal_ch(cs_vt,op_ref,gen_optype or op_optype); 9 8433 <*V*> wait_ch(cs_operatør(nr),op_ref,op_optype,-1<*timeout*>); 9 8434 <*+4*> if pos<>op_ref then 9 8435 fejlreaktion(11<*fremmed post*>,op_ref, 9 8436 <:op kommando(springdef retur fra vt):>,0); 9 8437 <*-4*> 9 8438 \f 9 8438 message procedure operatør side 18 - 810521/cl; 9 8439 9 8439 <*V*> setposition(z_op(nr),0,0); 9 8440 if l22 then 9 8441 begin 10 8442 cursor(z_op(nr),22,1); 10 8443 write(z_op(nr),"-",80); 10 8444 end; 9 8445 cursor(z_op(nr),24,1); 9 8446 skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat); 9 8447 9 8447 if false then 9 8448 begin 10 8449 sp_ann: signalch(cs_slet_fil,vt_op,op_optype); 10 8450 waitch(cs_operatør(nr),vt_op,op_optype,-1); 10 8451 signalch(cs_op_fil(nr),vt_op,op_optype or vt_optype); 10 8452 signalbin(bs_fortsæt_adgang); 10 8453 end; 9 8454 9 8454 end; 8 8455 8 8455 begin 9 8456 \f 9 8456 message procedure operatør side 19 - 810522/cl; 9 8457 9 8457 <* 6 spring (igangsæt) 9 8458 spring,annuler 9 8459 spring,reserve *> 9 8460 9 8460 tofrom(d.op_ref.data,ia,6); 9 8461 d.op_ref.retur:=cs_operatør(nr); 9 8462 indeks:=op_ref; 9 8463 signal_ch(cs_vt,op_ref,gen_optype or op_optype); 9 8464 <*V*> wait_ch(cs_operatør(nr), 9 8465 op_ref, 9 8466 op_optype, 9 8467 -1<*timeout*>); 9 8468 <*+2*> if testbit10 and overvåget then 9 8469 disable begin 10 8470 skriv_operatør(out,0); 10 8471 write(out,"nl",1,<:op operation retur fra vt:>); 10 8472 skriv_op(out,op_ref); 10 8473 end; 9 8474 <*-2*> 9 8475 <*+4*> if indeks<>op_ref then 9 8476 fejlreaktion(11<*fremmed post*>,op_ref, 9 8477 <:op kommando(spring):>,0); 9 8478 <*-4*> 9 8479 9 8479 <*V*> setposition(z_op(nr),0,0); 9 8480 cursor(z_op(nr),24,1); 9 8481 skriv_kvittering(z_op(nr),if (d.op_ref.resultat=11 or 9 8482 d.op_ref.resultat=12) and kode=34 <*SP,R*> then 9 8483 d.op_ref.data(4) else op_ref,-1,d.op_ref.resultat); 9 8484 end; 8 8485 8 8485 begin 9 8486 \f 9 8486 message procedure operatør side 20 - 810525/cl; 9 8487 9 8487 <* 7 spring(-oversigts-)rapport *> 9 8488 9 8488 d.op_ref.retur:=cs_operatør(nr); 9 8489 tofrom(d.op_ref.data,ia,4); 9 8490 indeks:=op_ref; 9 8491 signal_ch(cs_vt,op_ref,gen_optype or op_optype); 9 8492 <*V*> wait_ch(cs_operatør(nr),op_ref,op_optype,-1<*timeout*>); 9 8493 <*+2*> disable if testbit10 and overvåget then 9 8494 begin 10 8495 write(out,"nl",1,<:operatør operation retur fra vt:>); 10 8496 skriv_op(out,op_ref); 10 8497 end; 9 8498 <*-2*> 9 8499 9 8499 <*+4*> if op_ref<>indeks then 9 8500 fejlreaktion(11<*fremmed post*>,op_ref, 9 8501 <:op kommando(spring-rapport):>,0); 9 8502 <*-4*> 9 8503 9 8503 <*V*> setposition(z_op(nr),0,0); 9 8504 if d.op_ref.resultat<>3 then 9 8505 begin 10 8506 cursor(z_op(nr),24,1); 10 8507 skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat); 10 8508 end 9 8509 else 9 8510 begin 10 8511 boolean p_skrevet; 10 8512 integer bogst,løb; 10 8513 10 8513 skærmmåde:= 1; 10 8514 10 8514 if kode = 32 then <* spring,vis *> 10 8515 begin 11 8516 ll:= d.op_ref.data(1) shift (-5) extract 10; 11 8517 bogst:= d.op_ref.data(1) extract 5; 11 8518 if bogst<>0 then bogst:= bogst + 'A' - 1; 11 8519 <*V*> write(z_op(nr),"esc" add 128,1,<:ÆH:>, 11 8520 "esc" add 128,1,<:ÆJ:>,"sp",10,"*",5,"sp",5, 11 8521 <:spring: :>, 11 8522 <<d>,ll,false add bogst,(bogst<>0) extract 1, 11 8523 <:.:>,string (extend d.op_ref.data(2) shift 24)); 11 8524 raf:= data+8; 11 8525 if d.op_ref.raf(1)<>0.0 then 11 8526 write(z_op(nr),<:, startet :>,<<zddddd>, 11 8527 round systime(4,d.op_ref.raf(1),r),<:.:>,round r) 11 8528 else write(z_op(nr),<:, ikke startet:>); 11 8529 write(z_op(nr),"sp",5,"*",5,"nl",2); 11 8530 \f 11 8530 message procedure operatør side 21 - 810522/cl; 11 8531 11 8531 p_skrevet:= false; 11 8532 for pos:=1 step 1 until d.op_ref.data(3) do 11 8533 begin 12 8534 disable i:=læsfil(d.op_ref.data(4),pos,j); 12 8535 if i<>0 then 12 8536 fejlreaktion(5<*læsfil*>,i, 12 8537 <:op kommando(spring,vis):>,0); 12 8538 iaf:=0; 12 8539 i:= fil(j).iaf(1); 12 8540 if i < 0 and -, p_skrevet then 12 8541 begin 13 8542 outchar(z_op(nr),'('); p_skrevet:= true; 13 8543 end; 12 8544 if i > 0 and p_skrevet then 12 8545 begin 13 8546 outchar(z_op(nr),')'); p_skrevet:= false; 13 8547 end; 12 8548 if pos mod 2 = 0 then 12 8549 write(z_op(nr),<< dd>,abs i,<:.:>) 12 8550 else 12 8551 write(z_op(nr),true,3,<<d>,abs i); 12 8552 if pos mod 21 = 0 then outchar(z_op(nr),'nl'); 12 8553 end; 11 8554 write(z_op(nr),"*",1); 11 8555 \f 11 8555 message procedure operatør side 22 - 810522/cl; 11 8556 11 8556 end 10 8557 else if kode=33 then <* spring,oversigt *> 10 8558 begin 11 8559 write(z_op(nr),"esc" add 128,1,<:ÆH:>, 11 8560 "esc" add 128,1,<:ÆJ:>,"sp",10,"*",5,"sp",5, 11 8561 <:spring oversigt:>,"sp",5,"*",5,"nl",2); 11 8562 11 8562 for pos:=1 step 1 until d.op_ref.data(1) do 11 8563 begin 12 8564 disable i:=læsfil(d.op_ref.data(2),pos,j); 12 8565 if i<>0 then 12 8566 fejlreaktion(5<*læsfil*>,i, 12 8567 <:op kommando(spring-oversigt):>,0); 12 8568 iaf:=0; 12 8569 ll:=fil(j).iaf(1) shift (-5) extract 10; 12 8570 bogst:=fil(j).iaf(1) extract 5; 12 8571 if bogst<>0 then bogst:=bogst + 'A' - 1; 12 8572 write(z_op(nr),"sp",(bogst=0) extract 1 + 1,<<ddd>,ll, 12 8573 false add bogst,(bogst<>0) extract 1,<:.:>,true,4, 12 8574 string (extend fil(j).iaf(2) shift 24)); 12 8575 if fil(j,2)<>0.0 then 12 8576 write(z_op(nr),<:startet :>,<<zddddd>, 12 8577 round systime(4,fil(j,2),r),<:.:>,round r); 12 8578 outchar(z_op(nr),'nl'); 12 8579 end; 11 8580 write(z_op(nr),"*",1); 11 8581 end; 10 8582 <* slet fil *> 10 8583 d.op_ref.opkode:= 104; 10 8584 if kode=33 then d.op_ref.data(4):= d.op_ref.data(2); 10 8585 signalch(cs_slet_fil,op_ref,gen_optype or op_optype); 10 8586 waitch(cs_operatør(nr),op_ref,op_optype or gen_optype,-1); 10 8587 end; <* resultat=3 *> 9 8588 9 8588 end; 8 8589 8 8589 begin 9 8590 \f 9 8590 message procedure operatør side 23 - 940522/cl; 9 8591 9 8591 9 8591 <* 8 SLUT *> 9 8592 trapmode:= 1 shift 13; 9 8593 trap(-2); 9 8594 end; 8 8595 8 8595 begin 9 8596 <* 9 stopniveauer,definer *> 9 8597 integer fno; 9 8598 9 8598 for i:= 1 step 1 until 3 do 9 8599 operatør_stop(nr,i):= ia(i+1); 9 8600 i:= modif_fil(tf_stoptabel,nr,fno); 9 8601 if i<>0 then fejlreaktion(7,i,<:stoptabel:>,0); 9 8602 iaf:=0; 9 8603 for i:= 0,1,2,3 do 9 8604 fil(fno).iaf(i+1):= operatør_stop(nr,i); 9 8605 setposition(fil(fno),0,0); 9 8606 setposition(z_op(nr),0,0); 9 8607 cursor(z_op(nr),24,1); 9 8608 skriv_kvittering(z_op(nr),0,-1,3); 9 8609 end; 8 8610 8 8610 begin 9 8611 \f 9 8611 message procedure operatør side 24 - 940522/cl; 9 8612 9 8612 <* 10 stopniveauer,vis *> 9 8613 integer bpl,j,k; 9 8614 9 8614 skærm_måde:= 1; 9 8615 setposition(z_op(nr),0,0); 9 8616 write(z_op(nr),"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>, 9 8617 <:stopniveauer: :>); 9 8618 for i:= 0 step 1 until 3 do 9 8619 begin 10 8620 bpl:= operatør_stop(nr,i); 10 8621 write(z_op(nr),if i=0 then <: :> else <: -> :>, 10 8622 if bpl=0 then <:ALLE:> else string bpl_navn(bpl)); 10 8623 end; 9 8624 write(z_op(nr),"nl",2,<:operatørpladser: :>); 9 8625 j:=0; 9 8626 for bpl:= 1 step 1 until max_antal_operatører do 9 8627 if bpl_navn(bpl)<>long<::> then 9 8628 begin 10 8629 if j mod 8 = 0 and j > 0 then 10 8630 write(z_op(nr),"nl",1,"sp",18); 10 8631 iaf:= bpl*terminal_beskr_længde; 10 8632 write(z_op(nr),if bpl_tilst(bpl,1) > 0 then "*" else " ",1, 10 8633 true,6,string bpl_navn(bpl)); 10 8634 j:=j+1; 10 8635 end; 9 8636 write(z_op(nr),"nl",2,<:operatørgrupper: :>); 9 8637 j:=0; 9 8638 for bpl:= 65 step 1 until top_bpl_gruppe do 9 8639 if bpl_navn(bpl)<>long<::> then 9 8640 begin 10 8641 if j mod 8 = 0 and j > 0 then 10 8642 write(z_op(nr),"nl",1,"sp",19); 10 8643 write(z_op(nr),true,7,string bpl_navn(bpl)); 10 8644 j:=j+1; 10 8645 end; 9 8646 write(z_op(nr),"nl",1,"*",1); 9 8647 end; 8 8648 8 8648 begin 9 8649 <* 11 alarmlængde *> 9 8650 integer fno; 9 8651 9 8651 if indeks > 0 then 9 8652 begin 10 8653 opk_alarm.tab.alarm_lgd:= ia(1); 10 8654 i:= modiffil(tf_alarmlgd,nr,fno); 10 8655 if i<>0 then fejlreaktion(7,i,<:alarmlgd:>,0); 10 8656 iaf:= 0; 10 8657 fil(fno).iaf(1):= opk_alarm.tab.alarm_lgd; 10 8658 setposition(fil(fno),0,0); 10 8659 end; 9 8660 9 8660 setposition(z_op(nr),0,0); 9 8661 cursor(z_op(nr),24,1); 9 8662 skriv_kvittering(z_op(nr),opk_alarm.tab.alarm_lgd,-1,63); 9 8663 end; 8 8664 8 8664 begin 9 8665 <* 12 CC *> 9 8666 integer i, c; 9 8667 9 8667 i:= 1; 9 8668 while læstegn(ia,i+0,c)<>0 and 9 8669 i<(op_spool_postlgd-op_spool_text)//2*3 9 8670 do skrivtegn(d.opref.data,i,c); 9 8671 repeat skrivtegn(d.opref.data,i,0) until (i mod 6)=1; 9 8672 9 8672 d.opref.retur:= cs_operatør(nr); 9 8673 signalch(cs_op_spool,opref,op_optype); 9 8674 <*V*> waitch(cs_operatør(nr),opref,op_optype,-1); 9 8675 9 8675 setposition(z_op(nr),0,0); 9 8676 cursor(z_op(nr),24,1); 9 8677 skriv_kvittering(z_op(nr),opref,-1,d.opref.resultat); 9 8678 end; 8 8679 8 8679 <* 13 EXkluder skærmen *> 8 8680 begin 9 8681 d.opref.resultat:= 2; 9 8682 setposition(z_op(nr),0,0); 9 8683 cursor(z_op(nr),24,1); 9 8684 skriv_kvittering(z_op(nr),opref,-1,d.opref.resultat); 9 8685 9 8685 waitch(cs_op_fil(nr),vt_op,true,-1); 9 8686 start_operation(vt_op,curr_coruid,cs_op_fil(nr),2); 9 8687 d.vt_op.data(1):= nr; 9 8688 signalch(cs_rad,vt_op,gen_optype); 9 8689 end; 8 8690 8 8690 begin 9 8691 <* 14 CQF-tabel,vis *> 9 8692 9 8692 skærm_måde:= 1; 9 8693 setposition(z_op(nr),0,0); 9 8694 write(z_op(nr),"esc" add 128,1,<:ÆH:>, 9 8695 "esc" add 128,1,<:ÆJ:>); 9 8696 skriv_cqf_tabel(z_op(nr),false); 9 8697 write(z_op(nr),"*",1); 9 8698 end; 8 8699 8 8699 begin 9 8700 <* 15 ALarmlyd,Test *> 9 8701 integer array field tab; 9 8702 integer res; 9 8703 9 8703 tab:= (nr-1)*opk_alarm_tab_lgd; 9 8704 setposition(z_op(nr),0,0); 9 8705 if ia(1)<1 or ia(1)>2 then 9 8706 res:= 64 <* ulovligt tal *> 9 8707 else if opk_alarm.tab.alarm_lgd = 0 then 9 8708 begin 10 8709 if ia(1)=2 then 10 8710 write(z_op(nr),"bel",1,"del",8,"bel",1,"del",8,"bel",1) 10 8711 else 10 8712 write(z_op(nr),"bel",1); 10 8713 res:= 3; 10 8714 end 9 8715 else if ia(1) > opk_alarm.tab.alarm_tilst and 9 8716 ia(1) > opk_alarm.tab.alarm_kmdo then 9 8717 begin 10 8718 opk_alarm.tab.alarm_kmdo:= ia(1); 10 8719 signal_bin(bs_opk_alarm); 10 8720 res:= 3; 10 8721 end 9 8722 else 9 8723 res:= 48; <* i brug *> 9 8724 9 8724 cursor(z_op(nr),24,1); 9 8725 skriv_kvittering(z_op(nr),opref,-1,res); 9 8726 end; 8 8727 8 8727 begin 9 8728 d.op_ref.resultat:= 45; <*ikke implementeret*> 9 8729 setposition(z_op(nr),0,0); 9 8730 cursor(z_op(nr),24,1); 9 8731 skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat); 9 8732 end; 8 8733 \f 8 8733 message procedure operatør side x - 810522/hko; 8 8734 8 8734 <*+4*> fejl_reaktion(3<*programfejl*>,j,<:case 'opkode':>,2) 8 8735 <*-4*> 8 8736 end;<*case j *> 7 8737 end <* j > 0 *> 6 8738 else 6 8739 begin 7 8740 <*V*> setposition(z_op(nr),0,0); 7 8741 if sluttegn<>'nl' then outchar(z_op(nr),'nl'); 7 8742 skriv_kvittering(z_op(nr),op_ref,-1, 7 8743 45 <*ikke implementeret *>); 7 8744 end; 6 8745 end;<* godkendt *> 5 8746 5 8746 <*V*> setposition(z_op(nr),0,0); 5 8747 <*???*> 5 8748 while (læsbit_ia(samtaleflag,nr) or læsbit_ia(opkaldsflag,nr) or 5 8749 læsbit_ia(kanalflag,nr) ) and læsbit_ia(operatørmaske,nr) and 5 8750 skærmmåde = 0 do 5 8751 begin 6 8752 if sætbit_ia(samtaleflag,nr,0)=1 then 6 8753 begin 7 8754 skriv_skærm_bvs(nr); 7 8755 <*940920 if op_talevej(nr)=0 then status:= 0 7 8756 else inspect(bs_talevej_udkoblet(op_talevej(nr)),status); 7 8757 if status>0 then 7 8758 begin 7 8759 for ll:= 1 step 1 until terminalbeskrlængde//2 do 7 8760 terminaltab.ref(ll):= 0; 7 8761 skriv_skærm_bvs(nr); 7 8762 wait(bs_talevej_udkoblet(op_talevej(nr))); 7 8763 end; 7 8764 for i:= 1 step 1 until max_antal_kanaler do 7 8765 begin 7 8766 iaf:= (i-1)*kanalbeskrlængde; 7 8767 inspect(ss_samtale_nedlagt(i),status); 7 8768 if status>0 and 7 8769 tv_operatør(kanaltab.iaf.kanal_tilstand shift (-16))=nr then 7 8770 begin 7 8771 kanaltab.iaf.kanal_tilstand:= 7 8772 kanaltab.iaf(1) shift (-10) extract 6 shift 10; 7 8773 for ll:= 2 step 1 until kanalbeskrlængde//2 do 7 8774 kanaltab.iaf(ll):= 0; 7 8775 skriv_skærm_kanal(nr,i); 7 8776 repeat 7 8777 wait(ss_samtale_nedlagt(i)); 7 8778 inspect(ss_samtale_nedlagt(i),status); 7 8779 until status=0; 7 8780 end; 7 8781 end; 7 8782 940920*> cursor(z_op(nr),1,1); 7 8783 setposition(z_op(nr),0,0); 7 8784 end; 6 8785 if (læsbit_ia(opkaldsflag,nr) or læsbit_ia(kanalflag,nr)) 6 8786 and skærmmåde = 0 6 8787 and læsbit_ia(operatørmaske,nr) then 6 8788 begin 7 8789 if sætbit_ia(opkaldsflag,nr,0) = 1 then 7 8790 skriv_skærm_opkaldskø(nr); 7 8791 if sætbit_ia(kanalflag,nr,0) = 1 then 7 8792 begin 8 8793 for i:= 1 step 1 until max_antal_kanaler do 8 8794 skriv_skærm_kanal(nr,i); 8 8795 end; 7 8796 cursor(z_op(nr),1,1); 7 8797 <*V*> setposition(z_op(nr),0,0); 7 8798 end; 6 8799 end; 5 8800 d.op_ref.retur:=cs_att_pulje; 5 8801 disable afslut_kommando(op_ref); 5 8802 end; <* indlæs kommando *> 4 8803 4 8803 begin 5 8804 \f 5 8804 message procedure operatør side x+1 - 810617/hko; 5 8805 5 8805 <* 2: inkluder *> 5 8806 integer k,n; 5 8807 integer array field msk,iaf1; 5 8808 5 8808 i:=monitor(4) process address:(z_op(nr),0,ia); 5 8809 if i=0 then 5 8810 begin 6 8811 fejlreaktion(3<*programfejl*>,nr, 6 8812 <:operatør(nr) eksisterer ikke:>,1); 6 8813 d.op_ref.resultat:=28; 6 8814 end 5 8815 else 5 8816 begin 6 8817 i:=monitor(8) reserve process:(z_op(nr),0,ia); 6 8818 d.op_ref.resultat:=if i<>0 then 16 <*skærm optaget*> 6 8819 else if d.op_ref.opkode = 0 then 0 6 8820 else 3;<*udført*> 6 8821 if i > 0 then 6 8822 fejlreaktion(4<*monitor res*>,nr*100 +i, 6 8823 <:operatørskærm reservation:>,1) 6 8824 else 6 8825 begin 7 8826 i:=terminal_tab.ref.terminal_tilstand; 7 8827 <*940418/cl inkluderet sættes i stop - start *> 7 8828 kode:= d.opref.opkode extract 12; 7 8829 if kode <> 0 then 7 8830 terminal_tab.ref.terminal_tilstand:= 7 8831 (d.opref.opkode shift (-12) shift 21) + (i extract 21) 7 8832 else 7 8833 <*940418/cl inkluderet sættes i stop - slut *> 7 8834 terminal_tab.ref.terminal_tilstand:= i extract 7 8835 (if i shift(-21) extract 2 = 3 then 21 else 23); 7 8836 for i:= 1 step 1 until max_antal_kanaler do 7 8837 begin 8 8838 iaf:= (i-1)*kanalbeskrlængde; 8 8839 sætbit_ia(kanaltab.iaf.kanal_alarm,nr,0); 8 8840 end; 7 8841 skærm_måde:= 0; 7 8842 sætbit_ia(operatørmaske,nr, 7 8843 (if terminal_tab.ref.terminal_tilstand shift (-21) = 3 7 8844 then 0 else 1)); 7 8845 for k:= nr, 65 step 1 until top_bpl_gruppe do 7 8846 begin 8 8847 msk:= k*op_maske_lgd; 8 8848 if læsbit_ia(bpl_def.msk,nr) then 8 8849 <**> begin 9 8850 n:= 0; 9 8851 for i:= 1 step 1 until max_antal_operatører do 9 8852 if læsbit_ia(bpl_def.msk,i) then 9 8853 begin 10 8854 iaf1:= i*terminal_beskr_længde; 10 8855 if terminal_tab.iaf1.terminal_tilstand 10 8856 shift (-21) < 3 then 10 8857 n:= n+1; 10 8858 end; 9 8859 bpl_tilst(k,1):= n; 9 8860 end; 8 8861 <**> <* 8 8862 bpl_tilst(k,1):= bpl_tilst(k,1) + 8 8863 (if læsbit_ia(operatørmaske,nr) then 1 else 0); 8 8864 *> end; 7 8865 tofrom(opkaldsflag,alle_operatører,op_maske_lgd); 7 8866 sætbit_ia(opkaldsflag,nr,0); 7 8867 signal_bin(bs_mobil_opkald); 7 8868 <*940418/cl inkluderet sættes i stop - start *> 7 8869 if terminal_tab.ref.terminal_tilstand shift (-21) = 3 then 7 8870 <*V*> ht_symbol(z_op(nr)) 7 8871 else 7 8872 <*940418/cl inkluderet sættes i stop - slut *> 7 8873 <*V*> skriv_skærm(nr); 7 8874 cursor(z_op(nr),24,1); 7 8875 <*V*> setposition(z_op(nr),0,0); 7 8876 end; 6 8877 end; 5 8878 if d.op_ref.opkode = 0 then 5 8879 signal_ch(cs_operatør(nr),op_ref,d.op_ref.optype) 5 8880 else 5 8881 signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype); 5 8882 end; 4 8883 4 8883 begin 5 8884 \f 5 8884 message procedure operatør side x+2 - 820304/hko; 5 8885 5 8885 <* 3: ekskluder *> 5 8886 integer k,n; 5 8887 integer array field iaf1,msk; 5 8888 5 8888 write(z_op(nr),"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>); 5 8889 <*V*> setposition(z_op(nr),0,0); 5 8890 monitor(10) release process:(z_op(nr),0,ia); 5 8891 d.op_ref.resultat:=3; 5 8892 signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype); 5 8893 terminal_tab.ref.terminal_tilstand:= 7 shift 21 + 5 8894 terminal_tab.ref.terminal_tilstand extract 21; 5 8895 if sæt_bit_ia(operatørmaske,nr,0)=1 then 5 8896 for k:= nr, 65 step 1 until top_bpl_gruppe do 5 8897 begin 6 8898 msk:= k*op_maske_lgd; 6 8899 if læsbit_ia(bpl_def.msk,nr) then 6 8900 <**> begin 7 8901 n:= 0; 7 8902 for i:= 1 step 1 until max_antal_operatører do 7 8903 if læsbit_ia(bpl_def.msk,i) then 7 8904 begin 8 8905 iaf1:= i*terminal_beskr_længde; 8 8906 if terminal_tab.iaf1.terminal_tilstand 8 8907 shift (-21) < 3 then 8 8908 n:= n+1; 8 8909 end; 7 8910 bpl_tilst(k,1):= n; 7 8911 end; 6 8912 <**> <* 6 8913 bpl_tilst(k,1):= bpl_tilst(k,1)-1; 6 8914 *> end; 5 8915 signal_bin(bs_mobil_opkald); 5 8916 if opk_alarm.tab.alarm_tilst > 0 then 5 8917 begin 6 8918 opk_alarm.tab.alarm_kmdo:= 3; 6 8919 signal_bin(bs_opk_alarm); 6 8920 end; 5 8921 end; 4 8922 begin 5 8923 5 8923 <* 4: opdater skærm *> 5 8924 5 8924 signal_ch(cs_op_retur,op_ref,d.op_ref.optype); 5 8925 while (læsbit_ia(samtaleflag,nr) or læsbit_ia(opkaldsflag,nr) or 5 8926 læsbit_ia(kanalflag,nr) ) and læsbit_ia(operatørmaske,nr) and 5 8927 skærmmåde=0 do 5 8928 begin 6 8929 6 8929 <*+2*> if testbit13 and overvåget then 6 8930 disable begin 7 8931 write(out,"nl",1,<:opdater skærm(:>,<<d>,nr, 7 8932 <:) opkaldsflag::>,"nl",1); 7 8933 outintbits_ia(out,opkaldsflag,1,op_maske_lgd//2); 7 8934 write(out,<: operatørmaske::>,"nl",1); 7 8935 outintbits_ia(out,operatørmaske,1,op_maske_lgd//2); 7 8936 write(out,<: skærmmåde=:>,skærmmåde,"nl",0); 7 8937 ud; 7 8938 end; 6 8939 <*-2*> 6 8940 if sætbit_ia(samtaleflag,nr,0)=1 and op_talevej(nr)<>0 then 6 8941 begin 7 8942 skriv_skærm_bvs(nr); 7 8943 <*940920 inspect(bs_talevej_udkoblet(op_talevej(nr)),status); 7 8944 if status>0 then 7 8945 begin 7 8946 for ll:= 1 step 1 until terminalbeskrlængde//2 do 7 8947 terminaltab.ref(ll):= 0; 7 8948 skriv_skærm_bvs(nr); 7 8949 wait(bs_talevej_udkoblet(op_talevej(nr))); 7 8950 end; 7 8951 for i:= 1 step 1 until max_antal_kanaler do 7 8952 begin 7 8953 iaf:= (i-1)*kanalbeskrlængde; 7 8954 inspect(ss_samtale_nedlagt(i),status); 7 8955 if status>0 and 7 8956 tv_operatør(kanaltab.iaf.kanal_tilstand shift (-16))=nr then 7 8957 begin 7 8958 kanaltab.iaf.kanal_tilstand:= 7 8959 kanaltab.iaf.kanal_tilstand shift (-10) extract 6 shift 10; 7 8960 for ll:= 2 step 1 until kanalbeskrlængde//2 do 7 8961 kanaltab.iaf(ll):= 0; 7 8962 skriv_skærm_kanal(nr,i); 7 8963 repeat 7 8964 wait(ss_samtale_nedlagt(i)); 7 8965 inspect(ss_samtale_nedlagt(i),status); 7 8966 until status=0; 7 8967 end; 7 8968 end; 7 8969 940920*> cursor(z_op(nr),1,1); 7 8970 setposition(z_op(nr),0,0); 7 8971 end; 6 8972 if (læsbit_ia(opkaldsflag,nr) or læsbit_ia(kanalflag,nr)) 6 8973 and læsbit_ia(operatørmaske,nr) and skærmmåde = 0 then 6 8974 begin 7 8975 <*V*> setposition(z_op(nr),0,0); 7 8976 if sætbit_ia(opkaldsflag,nr,0) =1 then 7 8977 skriv_skærm_opkaldskø(nr); 7 8978 if sætbit_ia(kanalflag,nr,0) =1 then 7 8979 begin 8 8980 for i:=1 step 1 until max_antal_kanaler do 8 8981 skriv_skærm_kanal(nr,i); 8 8982 end; 7 8983 cursor(z_op(nr),1,1); 7 8984 <*V*> setposition(z_op(nr),0,0); 7 8985 end; 6 8986 end; 5 8987 end; 4 8988 begin 5 8989 \f 5 8989 message procedure operatør side x+3 - 830310/hko; 5 8990 5 8990 <* 5: samtale etableret *> 5 8991 5 8991 res:= d.op_ref.resultat; 5 8992 b_v:= d.op_ref.data(3) extract 4; 5 8993 b_s:= d.op_ref.data(4); 5 8994 signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype); 5 8995 if res = 3 and terminal_tab.ref(1) shift(-21) = 2 then 5 8996 begin 6 8997 sætbit_i(terminal_tab.ref(1),21,1); 6 8998 sætbit_i(terminal_tab.ref(1),22,0); 6 8999 sætbit_i(terminal_tab.ref(1),2,0); 6 9000 sæt_hex_ciffer(terminal_tab.ref,3,b_v); 6 9001 terminal_tab.ref(2):= b_s; 6 9002 sæt_bit_i(terminal_tab.ref(1),2<* opt. *>,0); 6 9003 iaf:= (b_s extract 4 - 1)*kanal_beskr_længde; 6 9004 kanaltab.iaf.kanal_tilstand:= kanaltab.iaf.kanal_tilstand 6 9005 shift (-10) shift 10 + terminal_tab.ref(1) extract 10; 6 9006 6 9006 if læsbit_ia(operatørmaske,nr) and skærmmåde = 0 then 6 9007 begin 7 9008 <*V*> setposition(z_op(nr),0,0); 7 9009 skriv_skærm_b_v_s(nr); 7 9010 <*V*> setposition(z_op(nr),0,0); 7 9011 end; 6 9012 end 5 9013 else 5 9014 if terminal_tab.ref(1) shift(-21) = 2 then 5 9015 begin 6 9016 sætbit_i(terminal_tab.ref(1),22,0); 6 9017 sætbit_i(terminal_tab.ref(1),2,0); 6 9018 sæt_hex_ciffer(terminal_tab.ref,3,b_v); 6 9019 terminal_tab.ref(2):= 0; 6 9020 if læsbit_ia(operatørmaske,nr) and skærmmåde = 0 then 6 9021 begin 7 9022 <*V*> setposition(z_op(nr),0,0); 7 9023 cursor(z_op(nr),21,17); 7 9024 write(z_op(nr),<:EJ FORB:>); 7 9025 <*V*> setposition(z_op(nr),0,0); 7 9026 end; 6 9027 end 5 9028 else fejlreaktion(3<*prg.fejl*>,terminal_tab.ref(1) shift(-21), 5 9029 <:terminal tilstand:>,1); 5 9030 end; 4 9031 4 9031 begin 5 9032 \f 5 9032 message procedure operatør side x+4 - 810602/hko; 5 9033 5 9033 <* 6: radiokanal ekskluderet *> 5 9034 5 9034 læs_hex_ciffer(terminal_tab.ref,3,b_v); 5 9035 pos:= d.op_ref.data(1); 5 9036 signalch(d.op_ref.retur,op_ref,d.op_ref.optype); 5 9037 indeks:= terminal_tab.ref(2); 5 9038 b_s:= if indeks shift (-22) = 3 and indeks extract 22 = pos 5 9039 then indeks extract 4 else 0; 5 9040 if b_v = pos then 5 9041 sæt_hex_ciffer(terminal_tab.ref,3,0); 5 9042 if b_s = pos then 5 9043 begin 6 9044 terminal_tab.ref(2):= 0; 6 9045 sætbit_i(terminal_tab.ref(1),21,0); 6 9046 sætbit_i(terminal_tab.ref(1),22,0); 6 9047 sætbit_i(terminal_tab.ref(1),2,0); 6 9048 end; 5 9049 if skærmmåde=0 then 5 9050 begin 6 9051 if b_v = pos or b_s = pos then 6 9052 <*V*> skriv_skærm_b_v_s(nr); 6 9053 <*V*> skriv_skærm_kanal(nr,pos); 6 9054 cursor(z_op(nr),1,1); 6 9055 setposition(z_op(nr),0,0); 6 9056 end; 5 9057 end; 4 9058 4 9058 begin 5 9059 \f 5 9059 message procedure operatør side x+5 - 950118/cl; 5 9060 5 9060 <* 7: operatørmeddelelse *> 5 9061 integer afs, kl, i; 5 9062 real dato, t; 5 9063 5 9063 cursor(z_op(nr),24,1); 5 9064 write(z_op(nr),"esc" add 128,1,<:ÆK:>); 5 9065 cursor(z_op(nr),23,1); 5 9066 write(z_op(nr),"esc" add 128,1,<:ÆK:>); 5 9067 5 9067 afs:= d.opref.data.op_spool_kilde; 5 9068 dato:= systime(4,d.opref.data.op_spool_tid,t); 5 9069 kl:= round t; 5 9070 write(z_op(nr),<:! fra op:>,<<d>,afs,"sp",1, 5 9071 if afs=0 then <:SYSOP:> else string bpl_navn(afs)); 5 9072 i:= replacechar(1,'.'); 5 9073 disable write(z_op(nr),"sp",1,<<zd_dd_dd>,kl,"nl",1); 5 9074 replacechar(1,i); 5 9075 write(z_op(nr),d.opref.data.op_spool_text); 5 9076 5 9076 if terminal_tab.ref.terminal_tilstand shift (-21) <> 3 then 5 9077 begin 6 9078 if opk_alarm.tab.alarm_lgd > 0 and 6 9079 opk_alarm.tab.alarm_tilst < 1 and 6 9080 opk_alarm.tab.alarm_kmdo < 1 6 9081 then 6 9082 begin 7 9083 opk_alarm.tab.alarm_kmdo := 1; 7 9084 signalbin(bs_opk_alarm); 7 9085 end 6 9086 else 6 9087 if opk_alarm.tab.alarm_lgd = 0 then 6 9088 write(z_op(nr),"bel",1,"del",8,"bel",1,"del",8,"bel",1); 6 9089 end; 5 9090 5 9090 setposition(z_op(nr),0,0); 5 9091 5 9091 signalch(d.opref.retur,opref,d.opref.optype); 5 9092 end; 4 9093 4 9093 begin 5 9094 5 9094 <*+4*> fejl_reaktion(3<*programfejl *>,aktion,<:case aktion:>,2); 5 9095 <*-4*> 5 9096 end 4 9097 end; <* case aktion+6 *> 3 9098 3 9098 until false; 3 9099 op_trap: 3 9100 skriv_operatør(zbillede,1); 3 9101 end operatør; 2 9102 2 9102 \f 2 9102 message procedure op_cqftest side 1; 2 9103 2 9103 procedure op_cqftest; 2 9104 begin 3 9105 integer array field opref, ref, ref1; 3 9106 integer i, j, tv, cqf, res, pausetid; 3 9107 real nu, næstetid, kommstart, kommslut; 3 9108 3 9108 procedure skriv_op_cqftest(zud,omfang); 3 9109 value omfang; 3 9110 zone zud; 3 9111 integer omfang; 3 9112 begin 4 9113 write(zud,"nl",1,<:+++ op-cqftest:>); 4 9114 if omfang > 0 then 4 9115 disable begin 5 9116 real t; 5 9117 5 9117 trap(slut); 5 9118 write(zud,"nl",1, 5 9119 <: opref: :>,opref,"nl",1, 5 9120 <: ref: :>,ref,"nl",1, 5 9121 <: i: :>,i,"nl",1, 5 9122 <: tv: :>,tv,"nl",1, 5 9123 <: cqf: :>,cqf,"nl",1, 5 9124 <: res: :>,res,"nl",1, 5 9125 <: pausetid: :>,pausetid,"nl",1, 5 9126 <: nu: :>,<<zddddd.dddddd>,systime(4,nu,t)+t/1000000,"nl",1, 5 9127 <: næste-tid: :>,systime(4,næstetid,t)+t/1000000,"nl",1, 5 9128 <::>); 5 9129 skriv_coru(zud,coru_no(292)); 5 9130 slut: 5 9131 end; 4 9132 end skriv_op_cqftest; 3 9133 3 9133 trap(op_cqf_trap); 3 9134 stackclaim(1000); 3 9135 3 9135 3 9135 <*+4*>if (testbit8 and overvåget) or testbit28 then 3 9136 skriv_op_cqftest(out,0); 3 9137 <*-4*> 3 9138 3 9138 <*V*> waitch(cs_cqf,opref,op_optype,-1); 3 9139 repeat 3 9140 i:= sidste_tv_brugt; tv:= 0; 3 9141 repeat 3 9142 i:= (i mod max_antal_taleveje) + 1; 3 9143 if tv_operatør(i) = 0 then tv:= i; 3 9144 until (tv<>0) or (i=sidste_tv_brugt); 3 9145 3 9145 if tv<>0 then 3 9146 begin 4 9147 tv_operatør(tv):= -1; 4 9148 systime(1,0.0,nu); næste_tid:= nu + 60*60.0; 4 9149 for cqf:= 1 step 1 until max_cqf do 4 9150 begin 5 9151 ref:= (cqf-1)*cqf_lgd; 5 9152 if cqf_tabel.ref.cqf_bus > 0 and cqf_tabel.ref.cqf_næste_tid < nu then 5 9153 begin 6 9154 startoperation(opref,292,cs_cqf,1 shift 12 + 41); 6 9155 d.opref.data(1):= tv; 6 9156 d.opref.data(2):= cqf_tabel.ref.cqf_bus; 6 9157 disable if testbit19 then 6 9158 begin 7 9159 integer i; <*lav en trap-bar blok*> 7 9160 7 9160 trap(test19_trap); 7 9161 systime(1,0,kommstart); 7 9162 write(zrl,<<zd dd dd.dd >,now,<:CQF-test start OP :>); 7 9163 skriv_id(zrl,d.opref.data(2),0); 7 9164 test19_trap: outchar(zrl,'nl'); 7 9165 end; 6 9166 signalch(cs_rad,opref,op_optype or gen_optype); 6 9167 <*V*> waitch(cs_cqf,opref,op_optype,-1); 6 9168 res:= d.opref.resultat; 6 9169 <*+2*> 6 9170 disable if testbit19 then 6 9171 begin 7 9172 integer i; <*lav en trap-bar blok*> 7 9173 7 9173 trap(test19_trap); 7 9174 systime(1,0,kommslut); 7 9175 write(zrl,<<zd dd dd.dd >,now,<:CQF-test slut OP :>); 7 9176 if d.opref.data(7)=2 then outchar(zrl,'*'); 7 9177 if d.opref.data(9)<>0 then 7 9178 begin 8 9179 skriv_id(zrl,d.opref.data(9),0); 8 9180 outchar(zrl,' '); 8 9181 end; 7 9182 if d.opref.data(8)<>0 then 7 9183 begin 8 9184 skriv_id(zrl,d.opref.data(8),0); 8 9185 outchar(zrl,' '); 8 9186 end; 7 9187 if d.opref.data(12)<>0 then 7 9188 begin 8 9189 if d.opref.data(12) shift (-20) = 15 then 8 9190 write(zrl,<:OMR*:>) 8 9191 else 8 9192 if d.opref.data(12) shift (-20) = 14 then 8 9193 write(zrl, 8 9194 string områdenavn(d.opref.data(12) extract 20)) 8 9195 else 8 9196 skriv_id(zrl,d.opref.data(12),0); 8 9197 outchar(zrl,' '); 8 9198 end; 7 9199 if d.opref.data(10)<>0 then 7 9200 begin 8 9201 skriv_id(zrl,d.opref.data(10),0); 8 9202 outchar(zrl,' '); 8 9203 end; 7 9204 write(zrl,<:res=:>,<<d>,res,<: btid=:>, 7 9205 <<dd.dd>,kommslut-kommstart); 7 9206 test19_trap: outchar(zrl,'nl'); 7 9207 end; 6 9208 <*-2*> 6 9209 if res=3 and cqf_tabel.ref.cqf_bus > 0 then 6 9210 begin 7 9211 delay(3); 7 9212 d.opref.opkode:= 12 shift 12 + 41; 7 9213 d.opref.resultat:= 0; 7 9214 disable if testbit19 then 7 9215 begin 8 9216 integer i; <*lav en trap-bar blok*> 8 9217 8 9217 trap(test19_trap); 8 9218 systime(1,0,kommstart); 8 9219 write(zrl,<<zd dd dd.dd >,now,<:CQF-test start NE :>); 8 9220 test19_trap: outchar(zrl,'nl'); 8 9221 end; 7 9222 signalch(cs_rad,opref,op_optype or gen_optype); 7 9223 <*V*> waitch(cs_cqf,opref,op_optype,-1); 7 9224 <*+2*> 7 9225 disable if testbit19 then 7 9226 begin 8 9227 integer i; <*lav en trap-bar blok*> 8 9228 8 9228 trap(test19_trap); 8 9229 systime(1,0,kommslut); 8 9230 write(zrl,<<zd dd dd.dd >,now,<:CQF-test slut NE :>); 8 9231 write(zrl,<:res=:>,<<d>,d.opref.resultat,<: btid=:>, 8 9232 <<dd.dd>,kommslut-kommstart); 8 9233 test19_trap: outchar(zrl,'nl'); 8 9234 end; 7 9235 <*-2*> 7 9236 if d.opref.resultat <> 3 then 7 9237 fejlreaktion(19,d.opref.resultat,<:CQF-test nedlæg resultat:>,1); 7 9238 if cqf_tabel.ref.cqf_bus > 0 and cqf_tabel.ref.cqf_fejl > 0 then 7 9239 begin 8 9240 startoperation(opref,292,cs_cqf,23); 8 9241 i:= 1; 8 9242 hægtstring(d.opref.data,i,<:CQF-test bus :>); 8 9243 anbringtal(d.opref.data,i,cqf_tabel.ref.cqf_bus,4); 8 9244 skriv_tegn(d.opref.data,i,' '); 8 9245 hægtstring(d.opref.data,i,string cqf_tabel.ref.cqf_id); 8 9246 hægtstring(d.opref.data,i,<: ok!:>); 8 9247 repeat afsluttext(d.opref.data,i) until (i mod 6) = 1; 8 9248 signalch(cs_io,opref,gen_optype); 8 9249 <*V*> waitch(cs_cqf,opref,gen_optype,-1); 8 9250 end; 7 9251 if cqf_tabel.ref.cqf_bus > 0 then 7 9252 begin 8 9253 cqf_tabel.ref.cqf_fejl:= 0; 8 9254 systime(1,0.0,cqf_tabel.ref.cqf_ok_tid); 8 9255 cqf_tabel.ref.cqf_næste_tid:= nu+60*60.0; 8 9256 end; 7 9257 end <*res=3*> 6 9258 else 6 9259 if (res=20<*ej forb.*> or res=59<*radiofejl*>) and 6 9260 cqf_tabel.ref.cqf_bus > 0 6 9261 then 6 9262 begin 7 9263 cqf_tabel.ref.cqf_næste_tid:= nu + 60*60.0; 7 9264 cqf_tabel.ref.cqf_fejl:= cqf_tabel.ref.cqf_fejl + 1; 7 9265 if cqf_tabel.ref.cqf_fejl >= 2 then 7 9266 begin 8 9267 startoperation(opref,292,cs_cqf,23); 8 9268 i:= 1; 8 9269 hægtstring(d.opref.data,i,<:CQF-test bus :>); 8 9270 anbringtal(d.opref.data,i,cqf_tabel.ref.cqf_bus,4); 8 9271 skriv_tegn(d.opref.data,i,' '); 8 9272 hægtstring(d.opref.data,i,string cqf_tabel.ref.cqf_id); 8 9273 hægtstring(d.opref.data,i,<: ingen forbindelse!:>); 8 9274 repeat afsluttext(d.opref.data,i) until (i mod 6) = 1; 8 9275 signalch(cs_io,opref,gen_optype); 8 9276 <*V*> waitch(cs_cqf,opref,gen_optype,-1); 8 9277 end; 7 9278 end; 6 9279 delay(10); 6 9280 end; 5 9281 if cqf_tabel.ref.cqf_bus > 0 and 5 9282 cqf_tabel.ref.cqf_næste_tid < næste_tid 5 9283 then næste_tid:= cqf_tabel.ref.cqf_næste_tid; 5 9284 end; <*for cqf*> 4 9285 4 9285 tv_operatør(tv):= 0; tv:= 0; 4 9286 if op_cqf_tab_ændret then 4 9287 begin 5 9288 j:= skrivfil(1033,1,i); 5 9289 if j<>0 then 5 9290 fejlreaktion(6,j,<:CQF-test cqf-tabel:>,1); 5 9291 sorter_cqftab(1,max_cqf); 5 9292 for cqf:= 1 step 1 until max_cqf do 5 9293 begin 6 9294 ref:= (cqf-1)*cqf_lgd; 6 9295 ref1:= (cqf-1)*cqf_id; 6 9296 tofrom(fil(i).ref1,cqf_tabel.ref,cqf_id); 6 9297 end; 5 9298 op_cqf_tab_ændret:= false; 5 9299 end; 4 9300 end; <*tv*> 3 9301 3 9301 systime(1,0.0,nu); 3 9302 pausetid:= round(næste_tid - nu); 3 9303 if pausetid < 30 then pausetid:= 30; 3 9304 3 9304 <*V*> delay(pausetid); 3 9305 3 9305 until false; 3 9306 3 9306 op_cqf_trap: 3 9307 disable skriv_op_cqftest(zbillede,1); 3 9308 end op_cqftest; 2 9309 \f 2 9309 message procedure op_spool side 1; 2 9310 2 9310 procedure op_spool; 2 9311 begin 3 9312 integer array field opref, ref; 3 9313 integer næste_tomme, i; 3 9314 3 9314 procedure skriv_op_spool(zud,omfang); 3 9315 value omfang; 3 9316 zone zud; 3 9317 integer omfang; 3 9318 begin 4 9319 write(zud,"nl",1,<:+++ op-spool:>); 4 9320 if omfang > 0 then 4 9321 disable begin 5 9322 real t; 5 9323 5 9323 trap(slut); 5 9324 write(zud,"nl",1, 5 9325 <: opref: :>,opref,"nl",1, 5 9326 <: næste-tomme: :>,næste_tomme,"nl",1, 5 9327 <: ref: :>,ref,"nl",1, 5 9328 <: i: :>,i,"nl",1, 5 9329 <::>); 5 9330 skriv_coru(zud,coru_no(293)); 5 9331 slut: 5 9332 end; 4 9333 end skriv_op_spool; 3 9334 3 9334 trap(op_spool_trap); 3 9335 stackclaim(400); 3 9336 3 9336 næste_tomme:= 0; 3 9337 3 9337 <*+4*>if (testbit8 and overvåget) or testbit28 then 3 9338 skriv_op_spool(out,0); 3 9339 <*-4*> 3 9340 3 9340 repeat 3 9341 <*V*> waitch(cs_op_spool,opref,true,-1); 3 9342 inspect(ss_op_spool_tomme,i); 3 9343 3 9343 if d.opref.opkode extract 12 <> 37 then 3 9344 begin 4 9345 d.opref.resultat:= 31; 4 9346 fejlreaktion(2<*opkode*>,d.opref.opkode extract 12,<:op_spool:>,1); 4 9347 end 3 9348 else 3 9349 if i<=0 then 3 9350 d.opref.resultat:= 32 <*ingen fri plads*> 3 9351 else 3 9352 begin 4 9353 <*V*> wait(ss_op_spool_tomme); 4 9354 ref:= næste_tomme*op_spool_postlgd; 4 9355 næste_tomme:= (næste_tomme+1) mod op_spool_postantal; 4 9356 i:= d.opref.opsize - data; 4 9357 if i > (op_spool_postlgd - op_spool_text) then 4 9358 i:= (op_spool_postlgd - op_spool_text); 4 9359 op_spool_buf.ref.op_spool_kilde:= 4 9360 (if d.opref.kilde//100 = 2 then d.opref.kilde mod 100 else 0); 4 9361 op_spool_buf.ref.op_spool_tid:= d.opref.tid; 4 9362 tofrom(op_spool_buf.ref.op_spool_text,d.opref.data,i); 4 9363 op_spool_buf.ref(op_spool_postlgd//2):= 4 9364 op_spool_buf.ref(op_spool_postlgd//2) shift (-8) shift 8; 4 9365 d.opref.resultat:= 3; 4 9366 4 9366 signal(ss_op_spool_fulde); 4 9367 end; 3 9368 3 9368 signalch(d.opref.retur,opref,d.opref.optype); 3 9369 until false; 3 9370 3 9370 op_spool_trap: 3 9371 disable skriv_op_spool(zbillede,1); 3 9372 end op_spool; 2 9373 \f 2 9373 message procedure op_medd side 1; 2 9374 2 9374 procedure op_medd; 2 9375 begin 3 9376 integer array field opref, ref; 3 9377 integer næste_fulde, i; 3 9378 3 9378 procedure skriv_op_medd(zud,omfang); 3 9379 value omfang; 3 9380 zone zud; 3 9381 integer omfang; 3 9382 begin 4 9383 write(zud,"nl",1,<:+++ op-medd:>); 4 9384 if omfang > 0 then 4 9385 disable begin 5 9386 real t; 5 9387 5 9387 trap(slut); 5 9388 write(zud,"nl",1, 5 9389 <: opref: :>,opref,"nl",1, 5 9390 <: næste-fulde: :>,næste_fulde,"nl",1, 5 9391 <: ref: :>,ref,"nl",1, 5 9392 <: i: :>,i,"nl",1, 5 9393 <::>); 5 9394 skriv_coru(zud,coru_no(294)); 5 9395 slut: 5 9396 end; 4 9397 end skriv_op_medd; 3 9398 3 9398 trap(op_medd_trap); 3 9399 næste_fulde:= 0; 3 9400 stackclaim(400); 3 9401 3 9401 <*+4*>if (testbit8 and overvåget) or testbit28 then 3 9402 skriv_op_medd(out,0); 3 9403 <*-4*> 3 9404 3 9404 repeat 3 9405 <*V*> wait(ss_op_spool_fulde); 3 9406 <*V*> waitch(cs_op_medd,opref,true,-1); 3 9407 3 9407 ref:= næste_fulde*op_spool_postlgd; 3 9408 næste_fulde:= (næste_fulde+1) mod op_spool_postantal; 3 9409 3 9409 startoperation(opref,curr_coruid,cs_op_medd,38); 3 9410 d.opref.resultat:= 0; 3 9411 tofrom(d.opref.data,op_spool_buf.ref,op_spool_postlgd); 3 9412 signalch((if op_spool_buf.ref.op_spool_kilde = 0 then cs_op else cs_io), 3 9413 opref,gen_optype); 3 9414 signal(ss_op_spool_tomme); 3 9415 until false; 3 9416 3 9416 op_medd_trap: 3 9417 disable skriv_op_medd(zbillede,1); 3 9418 end op_medd; 2 9419 \f 2 9419 message procedure alarmur side 1; 2 9420 2 9420 procedure alarmur; 2 9421 begin 3 9422 integer ventetid, nr; 3 9423 integer array field opref, tab; 3 9424 real nu; 3 9425 3 9425 procedure skriv_alarmur(zud,omfang); 3 9426 value omfang; 3 9427 zone zud; 3 9428 integer omfang; 3 9429 begin 4 9430 write(zud,"nl",1,<:+++ alarmur:>); 4 9431 if omfang > 0 then 4 9432 disable begin 5 9433 real t; 5 9434 5 9434 trap(slut); 5 9435 write(zud,"nl",1, 5 9436 <: ventetid: :>,ventetid,"nl",1, 5 9437 <: nr: :>,nr,"nl",1, 5 9438 <: opref: :>,opref,"nl",1, 5 9439 <: tab: :>,tab,"nl",1, 5 9440 <: nu: :>,<< zddddd>,systime(4,nu,t),t,"nl",1, 5 9441 <::>); 5 9442 skriv_coru(zud,coru_no(295)); 5 9443 slut: 5 9444 end; 4 9445 end skriv_alarmur; 3 9446 3 9446 trap(alarmur_trap); 3 9447 stackclaim(400); 3 9448 3 9448 systime(1,0.0,nu); 3 9449 ventetid:= -1; 3 9450 repeat 3 9451 waitch(cs_opk_alarm_ur,opref,op_optype,ventetid); 3 9452 if opref > 0 then 3 9453 signalch(d.opref.retur,opref,op_optype); 3 9454 3 9454 ventetid:= -1; 3 9455 systime(1,0.0,nu); 3 9456 for nr:= 1 step 1 until max_antal_operatører do 3 9457 begin 4 9458 tab:= (nr-1)*opk_alarm_tab_lgd; 4 9459 if opk_alarm.tab.alarm_tilst > 0 and 4 9460 opk_alarm.tab.alarm_lgd >= 0 then 4 9461 begin 5 9462 if (nu - opk_alarm.tab.alarm_start) >= opk_alarm.tab.alarm_lgd then 5 9463 begin 6 9464 opk_alarm.tab.alarm_kmdo:= 3; 6 9465 signalbin(bs_opk_alarm); 6 9466 if ventetid > 2 or ventetid=(-1) then ventetid:= 2; 6 9467 end 5 9468 else 5 9469 if (nu - opk_alarm.tab.alarm_start) < ventetid or ventetid = (-1) then 5 9470 ventetid:= (nu - opk_alarm.tab.alarm_start); 5 9471 end; 4 9472 end; 3 9473 if ventetid=0 then ventetid:= 1; 3 9474 until false; 3 9475 3 9475 alarmur_trap: 3 9476 disable skriv_alarmur(zbillede,1); 3 9477 end alarmur; 2 9478 \f 2 9478 message procedure opkaldsalarmer side 1; 2 9479 2 9479 procedure opkaldsalarmer; 2 9480 begin 3 9481 integer nr, ny_kommando, tilst, aktion, tt; 3 9482 integer array field tab, opref, alarmop; 3 9483 3 9483 procedure skriv_opkaldsalarmer(zud,omfang); 3 9484 value omfang; 3 9485 zone zud; 3 9486 integer omfang; 3 9487 begin 4 9488 write(zud,"nl",1,<:+++ opkaldsalarmer:>); 4 9489 if omfang>0 then 4 9490 disable begin 5 9491 real array field raf; 5 9492 trap(slut); 5 9493 raf:=0; 5 9494 write(zud,"nl",1, 5 9495 <: nr: :>,nr,"nl",1, 5 9496 <: ny-kommando: :>,ny_kommando,"nl",1, 5 9497 <: tilst: :>,tilst,"nl",1, 5 9498 <: aktion: :>,aktion,"nl",1, 5 9499 <: tt: :>,false add tt,1,"nl",1, 5 9500 <: tab: :>,tab,"nl",1, 5 9501 <: opref: :>,opref,"nl",1, 5 9502 <: alarmop: :>,alarmop,"nl",1, 5 9503 <::>); 5 9504 skriv_coru(zud,coru_no(296)); 5 9505 slut: 5 9506 end; 4 9507 end skriv_opkaldsalarmer; 3 9508 3 9508 trap(opk_alarm_trap); 3 9509 stackclaim(400); 3 9510 3 9510 <*+2*>if (testbit8 and overvåget) or testbit28 then 3 9511 skriv_opkaldsalarmer(out,0); 3 9512 <*-2*> 3 9513 3 9513 repeat 3 9514 wait(bs_opk_alarm); 3 9515 alarmop:= 0; 3 9516 for nr:= 1 step 1 until max_antal_operatører do 3 9517 begin 4 9518 tab:= (nr-1)*opk_alarm_tab_lgd; 4 9519 ny_kommando:= opk_alarm.tab.alarm_kmdo; 4 9520 tilst:= opk_alarm.tab.alarm_tilst; 4 9521 aktion:= case ny_kommando+1 of ( 4 9522 <*ingenting*> case tilst+1 of (4,4,4), 4 9523 <*normal *> case tilst+1 of (1,4,4), 4 9524 <*nød *> case tilst+1 of (2,2,4), 4 9525 <*sluk *> case tilst+1 of (4,3,3)); 4 9526 tt:= case aktion of ('B','C','F','-'); 4 9527 if tt<>'-' then 4 9528 begin 5 9529 <*V*> waitch(cs_tvswitch_adgang,opref,op_optype,-1); 5 9530 startoperation(opref,296,cs_opk_alarm,tt shift 12 + 44); 5 9531 d.opref.data(1):= nr+16; 5 9532 signalch(cs_talevejsswitch,opref,op_optype); 5 9533 <*V*> waitch(cs_opk_alarm,opref,op_optype,-1); 5 9534 if d.opref.resultat = 3 then 5 9535 begin 6 9536 opk_alarm.tab.alarm_kmdo:= 0; 6 9537 opk_alarm.tab.alarm_gtilst:= opk_alarm.tab.alarm_tilst; 6 9538 opk_alarm.tab.alarm_tilst:= case aktion of (1,2,0); 6 9539 if aktion < 3 then 6 9540 begin 7 9541 systime(1,0.0,opk_alarm.tab.alarm_start); 7 9542 if alarmop = 0 then 7 9543 waitch(cs_opk_alarm_ur_ret,alarmop,op_optype,-1); 7 9544 end; 6 9545 end; 5 9546 signalch(cs_tvswitch_adgang,opref,op_optype or gen_optype); 5 9547 end; 4 9548 end; 3 9549 if alarmop<>0 then 3 9550 begin 4 9551 startoperation(alarmop,296,cs_opk_alarm_ur_ret,0); 4 9552 signalch(cs_opk_alarm_ur,alarmop,op_optype); 4 9553 end; 3 9554 until false; 3 9555 3 9555 opk_alarm_trap: 3 9556 disable skriv_opkaldsalarmer(zbillede,1); 3 9557 end; 2 9558 2 9558 \f 2 9558 message procedure tvswitch_input side 1 - 940810/cl; 2 9559 2 9559 procedure tv_switch_input; 2 9560 begin 3 9561 integer array field opref; 3 9562 integer tt,ant; 3 9563 boolean ok; 3 9564 integer array ia(1:128); 3 9565 3 9565 procedure skriv_tvswitch_input(zud,omfang); 3 9566 value omfang; 3 9567 zone zud; 3 9568 integer omfang; 3 9569 begin 4 9570 write(zud,"nl",1,<:+++ tvswitch-input:>); 4 9571 if omfang>0 then 4 9572 disable begin 5 9573 real array field raf; 5 9574 trap(slut); 5 9575 raf:=0; 5 9576 write(zud,"nl",1, 5 9577 <: opref: :>,opref,"nl",1, 5 9578 <: ok: :>,(if ok then <:TRUE:> else <:FALSE:>),"nl",1, 5 9579 <: ant: :>,ant,"nl",1, 5 9580 <: tt: :>,tt,"nl",1, 5 9581 <::>); 5 9582 write(zud,"nl",1,<:ia: :>); 5 9583 skrivhele(zud,ia.raf,256,2); 5 9584 skriv_coru(zud,coru_no(297)); 5 9585 slut: 5 9586 end; 4 9587 end skriv_tvswitch_input; 3 9588 \f 3 9588 boolean procedure læs_tlgr; 3 9589 begin 4 9590 integer kl,ch,i,pos,p; 4 9591 long field lf; 4 9592 boolean ok; 4 9593 4 9593 integer procedure readch(z,c); 4 9594 zone z; integer c; 4 9595 begin 5 9596 readch:= readchar(z,c); 5 9597 <*+2*> if testbit15 and overvåget then 5 9598 disable begin 6 9599 if ' ' <= c and c <= 'ü' then outchar(zrl,c) 6 9600 else write(zrl,"<",1,<<d>,c,">",1); 6 9601 if c='em' then write(zrl,<: *timeout*:>); 6 9602 end; 5 9603 <*-2*> 5 9604 end; 4 9605 4 9605 ok:= false; tt:=' '; 4 9606 repeat 4 9607 readchar(z_tv_in,ch); 4 9608 until ch<>'em'; 4 9609 repeatchar(z_tv_in); 4 9610 4 9610 <*+2*>if testbit15 and overvåget then 4 9611 disable write(zrl,<<zd dd dd.dd >,now,<:switch-ind: :>); 4 9612 <*-2*> 4 9613 4 9613 for kl:=readch(z_tv_in,ch) while ch<>'%' and ch<>'nl' and ch<>'em' do ; 4 9614 if ch='%' then 4 9615 begin 5 9616 ant:= 0; pos:= 1; lf:= 4; 5 9617 ok:= true; 5 9618 for i:= 1 step 1 until 128 do ia(i):= 0; 5 9619 5 9619 for kl:=readch(z_tv_in,ch) while kl = 6 do 5 9620 skrivtegn(ia,pos,ch); 5 9621 5 9621 p:=pos; 5 9622 repeat afsluttext(ia,p) until p mod 6 = 1; 5 9623 5 9623 if ia.lf=long<:ACK:> and ch='nl' then tt:= '+' else 5 9624 if ia.lf=long<:NACK:> and ch='nl' then tt:= '-' else 5 9625 if pos=2 and ch=' ' then tt:= ia(1) shift (-16) else ok:= false; 5 9626 5 9626 if ok and ch=' ' then 5 9627 for kl:=readch(z_tv_in,ch) while ch=' ' do ; 5 9628 5 9628 while kl = 2 do 5 9629 begin 6 9630 i:= ch - '0'; 6 9631 for kl:=readch(z_tv_in,ch) while kl = 2 do i:= i*10 + ch-'0'; 6 9632 if ant < 128 then 6 9633 begin 7 9634 ant:= ant+1; 7 9635 ia(ant):= i; 7 9636 end 6 9637 else 6 9638 ok:= false; 6 9639 while ch=' ' do kl:=readch(z_tv_in,ch); 6 9640 end; 5 9641 if ch<>'nl' then ok:= false; 5 9642 while ch<>'nl' and ch<>'em' do kl:=readch(z_tv_in,ch); 5 9643 <* !! setposition(z_tv_in,0,0); !! *> 5 9644 <*+2*> if testbit15 and overvåget then disable outchar(zrl,'nl'); 5 9645 <*-2*> 5 9646 5 9646 if tt='+' or tt='-' or tt='Q' or tt='E' then 5 9647 ok:= ok 5 9648 else if tt='C' or tt='N' or 5 9649 tt='P' or tt='U' or tt='S' or tt='Z' then 5 9650 ok:= ok and ant=1 5 9651 else if tt='X' or tt='Y' then 5 9652 ok:= ok and ant=2 5 9653 else if tt='T' or tt='W' then 5 9654 ok:= ok and ant=64 5 9655 else if tt='R' then 5 9656 ok:= ok and ant extract 1 = 0 5 9657 else 5 9658 begin 6 9659 ok:= false; 6 9660 fejlreaktion(21,tt,<:Ukendt telegramtype:>,2 shift 12 + 1); 6 9661 end; 5 9662 5 9662 end; <* if ch='%' *> 4 9663 læs_tlgr:= ok; 4 9664 end læs_tlgr; 3 9665 \f 3 9665 trap(tvswitch_input_trap); 3 9666 stackclaim(400); 3 9667 for ant:= 1 step 1 until 128 do ia(ant):= 0; 3 9668 3 9668 <*+2*>if (testbit8 and overvåget) or testbit28 then 3 9669 skriv_tvswitch_input(out,0); 3 9670 <*-2*> 3 9671 3 9671 repeat 3 9672 ok:= læs_tlgr; 3 9673 if ok then 3 9674 begin 4 9675 <*V*> waitch(cs_tvswitch_input,opref,op_optype,-1); 4 9676 start_operation(opref,297,cs_tvswitch_input,0); 4 9677 d.opref.resultat:= tt shift 12 + ant; 4 9678 tofrom(d.opref.data,ia,ant*2); 4 9679 signalch(cs_talevejsswitch,opref,op_optype); 4 9680 end; 3 9681 until false; 3 9682 3 9682 tvswitch_input_trap: 3 9683 3 9683 disable skriv_tvswitch_input(zbillede,1); 3 9684 3 9684 end tvswitch_input; 2 9685 \f 2 9685 message procedure tv_switch_adm side 1 - 940502/cl; 2 9686 2 9686 procedure tv_switch_adm; 2 9687 begin 3 9688 integer array field opref; 3 9689 integer rc; 3 9690 3 9690 procedure skriv_tv_switch_adm(zud,omfang); 3 9691 value omfang; 3 9692 zone zud; 3 9693 integer omfang; 3 9694 begin 4 9695 write(zud,"nl",1,<:+++ tv-switch-adm:>); 4 9696 if omfang>0 then 4 9697 disable begin 5 9698 trap(slut); 5 9699 write(zud,"nl",1, 5 9700 <: opref: :>,opref,"nl",1, 5 9701 <: rc: :>,rc,"nl",1, 5 9702 <::>); 5 9703 skriv_coru(zud,coru_no(298)); 5 9704 slut: 5 9705 end; 4 9706 end skriv_tv_switch_adm; 3 9707 3 9707 trap(tv_switch_adm_trap); 3 9708 stackclaim(400); 3 9709 3 9709 <*+2*> if (testbit8 and overvåget) or testbit28 then 3 9710 disable skriv_tv_switch_adm(out,0); 3 9711 <*-2*> 3 9712 3 9712 3 9712 3 9712 <* !!!!!!! PASSIVER KORUTINEN - cs_tvswitch_adm SIGNALERES ALDRIG !!!!!!! 3 9713 waitch(cs_tvswitch_adm,opref,op_optype,-1); 3 9714 *> 3 9715 3 9715 repeat 3 9716 waitch(cs_tvswitch_adgang,opref,op_optype,-1); 3 9717 start_operation(opref,298,cs_tvswitch_adm,'R' shift 12 + 44); 3 9718 rc:= 0; 3 9719 repeat 3 9720 signalch(cs_talevejsswitch,opref,op_optype); 3 9721 <*V*> waitch(cs_tvswitch_adm,opref,op_optype,-1); 3 9722 rc:= rc+1; 3 9723 until rc=3 or d.opref.resultat=3; 3 9724 3 9724 signalch(cs_tvswitch_adgang,opref,op_optype); 3 9725 3 9725 <*V*> delay(15*60); 3 9726 until false; 3 9727 tv_switch_adm_trap: 3 9728 disable skriv_tv_switch_adm(zbillede,1); 3 9729 end; 2 9730 \f 2 9730 message procedure talevejsswitch side 1 -940426/cl; 2 9731 2 9731 procedure talevejsswitch; 2 9732 begin 3 9733 integer tt, ant, ventetid; 3 9734 integer array field opref, gemt_op, tab; 3 9735 boolean ok; 3 9736 integer array ia(1:128); 3 9737 3 9737 procedure skriv_talevejsswitch(zud,omfang); 3 9738 value omfang; 3 9739 zone zud; 3 9740 integer omfang; 3 9741 begin 4 9742 write(zud,"nl",1,<:+++ talevejsswitch:>); 4 9743 if omfang>0 then 4 9744 disable begin 5 9745 real array field raf; 5 9746 trap(slut); 5 9747 raf:= 0; 5 9748 write(zud,"nl",1, 5 9749 <: tt: :>,tt,"nl",1, 5 9750 <: ant: :>,ant,"nl",1, 5 9751 <: ventetid: :>,ventetid,"nl",1, 5 9752 <: opref: :>,opref,"nl",1, 5 9753 <: gemt-op: :>,gemt_op,"nl",1, 5 9754 <: tab: :>,tab,"nl",1, 5 9755 <: ok: :>,(if ok then <:TRUE:> else <:FALSE:>),"nl",1, 5 9756 <::>); 5 9757 write(zud,"nl",1,<:ia: :>); 5 9758 skriv_hele(zud,ia.raf,256,2); 5 9759 skriv_coru(zud,coru_no(299)); 5 9760 slut: 5 9761 end; 4 9762 end skriv_talevejsswitch; 3 9763 \f 3 9763 trap(tvswitch_trap); 3 9764 stackclaim(400); 3 9765 for ant:= 1 step 1 until 128 do ia(ant):= 0; 3 9766 3 9766 <*+2*>if (testbit8 and overvåget) or testbit28 then 3 9767 skriv_talevejsswitch(out,0); 3 9768 <*-2*> 3 9769 3 9769 ventetid:= -1; ant:= 0; tt:= ' '; 3 9770 repeat 3 9771 waitch(cs_talevejsswitch,opref,gen_optype or op_optype,ventetid); 3 9772 if opref > 0 then 3 9773 begin 4 9774 if d.opref.opkode extract 12 = 0 then 4 9775 begin <*input fra talevejsswitchen *> 5 9776 for ant:= 1 step 1 until 128 do ia(ant):= 0; 5 9777 tt:= d.opref.resultat shift (-12) extract 12; 5 9778 ant:= d.opref.resultat extract 12; 5 9779 tofrom(ia,d.opref.data,ant*2); 5 9780 signalch(d.opref.retur,opref,d.opref.optype); 5 9781 5 9781 if tt<>'+' and tt<>'-' then 5 9782 begin 6 9783 write(z_tv_out,"%",1,<:ACK:>,"cr",1); 6 9784 setposition(z_tv_out,0,0); 6 9785 <*+2*> if testbit15 and overvåget then 6 9786 disable begin 7 9787 write(zrl,<<zd dd dd.dd >,now,<:switch-ud: :>,<:%ACK:>); 7 9788 outchar(zrl,'nl'); 7 9789 end; 6 9790 <*-2*> 6 9791 end; 5 9792 if (tt='+' or tt='-') and gemt_op<>0 then 5 9793 begin 6 9794 d.gemt_op.resultat:= (if tt='+' then 3 else 0); 6 9795 signalch(d.gemt_op.retur,gemt_op,d.gemt_op.optype); 6 9796 gemt_op:= 0; 6 9797 ventetid:= -1; 6 9798 end 5 9799 else 5 9800 if tt='R' then 5 9801 begin 6 9802 for i:= 1 step 2 until ant do 6 9803 begin 7 9804 if ia(i) <= max_antal_taleveje and 7 9805 17 <= ia(i+1) and ia(i+1) <= max_antal_operatører+16 7 9806 then 7 9807 begin 8 9808 if op_talevej(ia(i+1)-16)<>ia(i) then 8 9809 tv_operatør(op_talevej(ia(i+1)-16)):= 0; 8 9810 if tv_operatør(ia(i))<>ia(i+1)-16 then 8 9811 op_talevej(tv_operatør(ia(i))):= 0; 8 9812 tv_operatør(ia(i)):= ia(i+1)-16; 8 9813 op_talevej(ia(i+1)-16):= ia(i); 8 9814 sætbit_ia(samtaleflag,ia(i+1)-16,1); 8 9815 end 7 9816 else 7 9817 if ia(i+1) <= max_antal_taleveje and 7 9818 17 <= ia(i) and ia(i) <= max_antal_operatører+16 7 9819 then 7 9820 begin 8 9821 if op_talevej(ia(i))<>ia(i+1)-16 then 8 9822 tv_operatør(op_talevej(ia(i))):= 0; 8 9823 if tv_operatør(ia(i+1)-16)<>ia(i) then 8 9824 op_talevej(tv_operatør(ia(i+1)-16)):= 0; 8 9825 tv_operatør(ia(i+1)):= ia(i)-16; 8 9826 op_talevej(ia(i)-16):= ia(i+1); 8 9827 sætbit_ia(samtaleflag,ia(i)-16,1); 8 9828 end; 7 9829 end; 6 9830 signal_bin(bs_mobil_opkald); 6 9831 <*+2*> if testbit15 and testbit16 and overvåget then 6 9832 disable begin 7 9833 skriv_talevejs_tab(zrl); outchar(zrl,'nl'); 7 9834 end; 6 9835 <*-2*> 6 9836 end <* tt='R' and ant>0 *> 5 9837 else 5 9838 if tt='Y' then 5 9839 begin 6 9840 if ia(1) <= max_antal_taleveje and 6 9841 17 <= ia(2) and ia(2) <= max_antal_operatører+16 6 9842 then 6 9843 begin 7 9844 if tv_operatør(ia(1))=ia(2)-16 and 7 9845 op_talevej(ia(2)-16)=ia(1) 7 9846 then tv_operatør(ia(1)):= op_talevej(ia(2)-16):= 0; 7 9847 end 6 9848 else 6 9849 if ia(2) <= max_antal_taleveje and 6 9850 17 <= ia(1) and ia(1) <= max_antal_operatører+16 6 9851 then 6 9852 begin 7 9853 if tv_operatør(ia(2))=ia(1)-16 and 7 9854 op_talevej(ia(1)-16)=ia(2) 7 9855 then tv_operatør(ia(2)):= op_talevej(ia(1)-16):= 0; 7 9856 end; 6 9857 end 5 9858 else 5 9859 if tt='C' or tt='N' or tt='P' or tt='U' then 5 9860 begin 6 9861 waitch(cs_op_iomedd,opref,gen_optype,-1); 6 9862 startoperation(opref,299,cs_op_iomedd,23); 6 9863 ant:= 1; 6 9864 hægtstring(d.opref.data,ant,<:switch - port :>); 6 9865 anbringtal(d.opref.data,ant,ia(1),2); 6 9866 if 17<=ia(1) and ia(1)<=16+max_antal_operatører then 6 9867 begin 7 9868 hægtstring(d.opref.data,ant,<: (:>); 7 9869 if bpl_navn(ia(1)-16)=long<::> then 7 9870 begin 8 9871 hægtstring(d.opref.data,ant,<:op:>); 8 9872 anbringtal(d.opref.data,ant,ia(1)-16, 8 9873 if ia(1)-16 > 9 then 2 else 1); 8 9874 end 7 9875 else hægtstring(d.opref.data,ant,string bpl_navn(ia(1)-16)); 7 9876 skrivtegn(d.opref.data,ant,')'); 7 9877 end; 6 9878 hægtstring(d.opref.data,ant, 6 9879 if tt='C' then <: Kontakt med kontrolbox etableret:> else 6 9880 if tt='N' then <: Kontakt med kontrolbox tabt:> else 6 9881 if tt='P' then <: Tilgængelig:> else 6 9882 if tt='U' then <: Ikke tilgængelig:> else <::>); 6 9883 repeat afsluttext(d.opref.data,ant) until ant mod 6 = 1; 6 9884 signalch(cs_io,opref,gen_optype); 6 9885 end 5 9886 else 5 9887 if tt='Z' then 5 9888 begin 6 9889 tab:= (ia(1)-16-1)*opk_alarm_tab_lgd; 6 9890 opk_alarm.tab.alarm_tilst:= opk_alarm.tab.alarm_gtilst; 6 9891 end 5 9892 else 5 9893 begin 6 9894 <* ikke implementeret *> 6 9895 end; 5 9896 end 4 9897 else 4 9898 if d.opref.opkode extract 12 = 44 then 4 9899 begin 5 9900 tt:= d.opref.opkode shift (-12); 5 9901 ok:= true; 5 9902 if tt='E' or tt='Q' or tt='R' or tt='W' or tt='S' or tt='I' then 5 9903 begin 6 9904 <*+2*> if testbit15 and overvåget then 6 9905 disable begin 7 9906 write(zrl,<<zd dd dd.dd >,now,<:switch-ud: %:>,false add tt,1); 7 9907 outchar(zrl,'nl'); 7 9908 end; 6 9909 <*-2*> 6 9910 write(z_tv_out,"%",1,false add tt,1,"cr",1); 6 9911 setposition(z_tv_out,0,0); 6 9912 end 5 9913 else 5 9914 if tt='B' or tt='C' or tt='F' then 5 9915 begin 6 9916 <*+2*> if testbit15 and overvåget then 6 9917 disable begin 7 9918 write(zrl,<<zd dd dd.dd >,now,<:switch-ud: %:>,false add tt,1, 7 9919 " ",1,<<d>,d.opref.data(1)); 7 9920 outchar(zrl,'nl'); 7 9921 end; 6 9922 <*-2*> 6 9923 write(z_tv_out,"%",1,false add tt,1," ",1,<<d>, 6 9924 d.opref.data(1),"cr",1); 6 9925 setposition(z_tv_out,0,0); 6 9926 end 5 9927 else 5 9928 if tt='A' or tt='D' or tt='T' then 5 9929 begin 6 9930 <*+2*> if testbit15 and overvåget then 6 9931 disable begin 7 9932 write(zrl,<<zd dd dd.dd >,now,<:switch-ud: %:>,false add tt,1, 7 9933 " ",1,<<d>,d.opref.data(1)," ",1,d.opref.data(2)); 7 9934 outchar(zrl,'nl'); 7 9935 end; 6 9936 <*-2*> 6 9937 write(z_tv_out,"%",1,false add tt,1," ",1,<<d>, 6 9938 d.opref.data(1)," ",1,d.opref.data(2),"cr",1); 6 9939 setposition(z_tv_out,0,0); 6 9940 end 5 9941 else 5 9942 ok:= false; 5 9943 if ok then 5 9944 begin 6 9945 gemt_op:= opref; 6 9946 ventetid:= 2; 6 9947 end 5 9948 else 5 9949 begin 6 9950 d.opref.resultat:= 4; 6 9951 signalch(d.opref.retur,opref,d.opref.optype); 6 9952 end; 5 9953 end; 4 9954 end 3 9955 else 3 9956 if gemt_op<>0 then 3 9957 begin <*timeout*> 4 9958 d.gemt_op.resultat:= 0; 4 9959 signalch(d.gemt_op.retur,gemt_op,d.gemt_op.optype); 4 9960 gemt_op:= 0; 4 9961 ventetid:= -1; 4 9962 <*+2*> if testbit15 and overvåget then 4 9963 disable begin 5 9964 write(zrl,<<zd dd dd.dd >,now,<:switch: *Operation Timeout*:>); 5 9965 outchar(zrl,'nl'); 5 9966 end; 4 9967 <*-2*> 4 9968 end; 3 9969 until false; 3 9970 tvswitch_trap: 3 9971 disable skriv_talevejsswitch(zbillede,1); 3 9972 end talevejsswitch; 2 9973 2 9973 \f 2 9973 message garage_erklæringer side 1 - 810415/hko; 2 9974 2 9974 zone array z_gar(max_antal_garageterminaler,16,1,gar_fejl); 2 9975 2 9975 procedure gar_fejl(z,s,b); 2 9976 integer s,b; 2 9977 zone z; 2 9978 begin 3 9979 disable begin 4 9980 integer array iz(1:20); 4 9981 integer i,j,k; 4 9982 integer array field iaf; 4 9983 real array field raf; 4 9984 4 9984 getzone6(z,iz); 4 9985 iaf:=raf:=2; 4 9986 getnumber(iz.raf,7,j); 4 9987 4 9987 iaf:=(max_antal_operatører+j)*terminal_beskr_længde; 4 9988 k:=1; 4 9989 4 9989 j:= terminal_tab.iaf.terminal_tilstand; 4 9990 if j shift(-21) < 6 and s <> (1 shift 21 +2) then 4 9991 fejlreaktion(17<*ydre enhed status*>,s,string iz.raf(increase(k)), 4 9992 1 shift 12 <*binært*> +1 <*fortsæt*>); 4 9993 if s <> (1 shift 21 +2) then 4 9994 terminal_tab.iaf.terminal_tilstand:= 6 shift 21 4 9995 + terminal_tab.iaf.terminal_tilstand extract 21; 4 9996 if terminal_tab.iaf.terminal_tilstand shift(-21)<>0 then 4 9997 begin 5 9998 z(1):=real <:<'?'><'em'>:>; 5 9999 b:=2; 5 10000 end; 4 10001 end; <*disable*> 3 10002 end gar_fejl; 2 10003 2 10003 integer cs_gar; 2 10004 integer array cs_garage(1:max_antal_garageterminaler); 2 10005 \f 2 10005 message procedure h_garage side 1 - 810520/hko; 2 10006 2 10006 <* hovedmodulkorutine for garageterminaler *> 2 10007 procedure h_garage; 2 10008 begin 3 10009 integer array field op_ref; 3 10010 integer k,dest_sem; 3 10011 procedure skriv_hgarage(zud,omfang); 3 10012 value omfang; 3 10013 zone zud; 3 10014 integer omfang; 3 10015 begin integer i; 4 10016 4 10016 i:=write(zud,"nl",1,<:+++ hovedmodul garage:>); 4 10017 write(zud,"sp",26-i); 4 10018 if omfang>0 then 4 10019 disable begin 5 10020 integer x; 5 10021 trap(slut); 5 10022 write(zud,"nl",1, 5 10023 <: op_ref: :>,op_ref,"nl",1, 5 10024 <: k: :>,k,"nl",1, 5 10025 <: dest_sem: :>,dest_sem,"nl",1, 5 10026 <::>); 5 10027 skriv_coru(zud,coru_no(300)); 5 10028 slut: 5 10029 end; 4 10030 end skriv_hgarage; 3 10031 3 10031 trap(hgar_trap); 3 10032 stack_claim(if cm_test then 198 else 146); 3 10033 3 10033 <*+2*> 3 10034 if testbit16 and overvåget or testbit28 then 3 10035 skriv_hgarage(out,0); 3 10036 <*-2*> 3 10037 \f 3 10037 message procedure h_garage side 2 - 811105/hko; 3 10038 3 10038 repeat 3 10039 wait_ch(cs_gar,op_ref,true,-1); 3 10040 <*+4*> 3 10041 if (d.op_ref.optype and (gar_optype or gen_optype)) extract 12 =0 3 10042 then fejlreaktion(12<*operationstype*>,op_ref,<:garage:>,1); 3 10043 <*-4*> 3 10044 3 10044 k:=d.op_ref.opkode extract 12; 3 10045 dest_sem:= 3 10046 if k=0 then cs_garage(d.op_ref.kilde mod 100) else 3 10047 if k=7 or k=8 then cs_garage(d.op_ref.data(1)) 3 10048 else -1; 3 10049 <*+4*> 3 10050 if dest_sem=-1 then 3 10051 begin 4 10052 fejl_reaktion(2<*operationskode*>,k,<:hovedmodul garage:>,1); 4 10053 signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype); 4 10054 end 3 10055 else 3 10056 <*-4*> 3 10057 if k=7<*inkluder*> then 3 10058 begin 4 10059 iaf:=(max_antal_operatører+ d.op_ref.data(1))*terminal_beskr_længde; 4 10060 if terminal_tab.iaf.terminal_tilstand shift(-21)=0 then 4 10061 begin 5 10062 d.op_ref.resultat:=3; 5 10063 signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype); 5 10064 dest_sem:=-2; 5 10065 end; 4 10066 end 3 10067 else 3 10068 if k=8<*ekskluder*> then <*afbryd kommando v. timeout*> 3 10069 begin 4 10070 iaf:=(max_antal_operatører+d.op_ref.data(1))*terminal_beskr_længde; 4 10071 terminal_tab.iaf.terminal_tilstand:= 7 shift 21 4 10072 +terminal_tab.iaf.terminal_tilstand extract 21; 4 10073 end; 3 10074 if dest_sem>0 then 3 10075 signal_ch(dest_sem,op_ref,d.op_ref.optype); 3 10076 until false; 3 10077 3 10077 hgar_trap: 3 10078 disable skriv_hgarage(zbillede,1); 3 10079 end h_garage; 2 10080 \f 2 10080 message procedure garage side 1 - 830310/cl; 2 10081 2 10081 procedure garage(nr); 2 10082 value nr; 2 10083 integer nr; 2 10084 begin 3 10085 integer array field op_ref,ref; 3 10086 integer i,kode,aktion,status,opgave,retur_sem, 3 10087 pos,indeks,sep,sluttegn,vogn,ll; 3 10088 3 10088 procedure skriv_garage(zud,omfang); 3 10089 value omfang; 3 10090 zone zud; 3 10091 integer omfang; 3 10092 begin integer i; 4 10093 4 10093 i:=write(zud,"nl",1,<:+++ garage nr::>,nr); 4 10094 write(zud,"sp",26-i); 4 10095 if omfang > 0 then 4 10096 disable begin integer x; 5 10097 trap(slut); 5 10098 write(zud,"nl",1, 5 10099 <: op-ref: :>,op_ref,"nl",1, 5 10100 <: kode: :>,kode,"nl",1, 5 10101 <: ref: :>,ref,"nl",1, 5 10102 <: i: :>,i,"nl",1, 5 10103 <: aktion: :>,aktion,"nl",1, 5 10104 <: retur-sem: :>,retur_sem,"nl",1, 5 10105 <: vogn: :>,vogn,"nl",1, 5 10106 <: ll: :>,ll,"nl",1, 5 10107 <: status: :>,status,"nl",1, 5 10108 <: opgave: :>,opgave,"nl",1, 5 10109 <: pos: :>,pos,"nl",1, 5 10110 <: indeks: :>,indeks,"nl",1, 5 10111 <: sep: :>,sep,"nl",1, 5 10112 <: sluttegn: :>,sluttegn,"nl",1, 5 10113 <::>); 5 10114 skriv_coru(zud,coru_no(300+nr)); 5 10115 slut: 5 10116 end; 4 10117 end skriv_garage; 3 10118 \f 3 10118 message procedure garage side 2 - 830310/hko; 3 10119 3 10119 trap(gar_trap); 3 10120 stack_claim((if cm_test then 200 else 146)+24+48+80+75); 3 10121 3 10121 ref:= (max_antal_operatører+nr)*terminal_beskr_længde; 3 10122 3 10122 <*+2*> 3 10123 if testbit16 and overvåget or testbit28 then 3 10124 skriv_garage(out,0); 3 10125 <*-2*> 3 10126 3 10126 <* attention simulering 3 10127 *> 3 10128 if terminal_tab.ref.terminal_tilstand shift (-21) = 0 then 3 10129 begin 4 10130 wait_ch(cs_att_pulje,op_ref,true,-1); 4 10131 start_operation(op_ref,300+nr,cs_garage(nr),0); 4 10132 signal_ch(cs_garage(nr),op_ref,gen_optype); 4 10133 end; 3 10134 <* 3 10135 *> 3 10136 \f 3 10136 message procedure garage side 3 - 830310/hko; 3 10137 3 10137 repeat 3 10138 3 10138 <*V*> wait_ch(cs_garage(nr), 3 10139 op_ref, 3 10140 true, 3 10141 -1<*timeout*>); 3 10142 <*+2*> 3 10143 if testbit17 and overvåget then 3 10144 disable begin 4 10145 write(out,"nl",1,<:operation fra cs:>,<<d>,cs_garage(nr), 4 10146 <: til garage :>,nr); 4 10147 skriv_op(out,op_ref); 4 10148 end; 3 10149 <*-2*> 3 10150 3 10150 kode:= d.op_ref.op_kode; 3 10151 retur_sem:= d.op_ref.retur; 3 10152 i:= terminal_tab.ref.terminal_tilstand; 3 10153 status:= i shift(-21); 3 10154 opgave:= 3 10155 if kode=0 then 1 <* indlæs kommando *> else 3 10156 if kode=7 then 2 <* inkluder *> else 3 10157 if kode=8 then 3 <* ekskluder *> else 3 10158 0; <* afvises *> 3 10159 3 10159 aktion:= case status +1 of( 3 10160 <* status *> <* opgave: 0 1 2 3 *> 3 10161 <* 0 klar *>(case opgave+1 of( 0, 1, -4, 3)), 3 10162 <* 1 - *>(-1),<* ulovlig tilstand *> 3 10163 <* 2 - *>(-1),<* ulovlig tilstand *> 3 10164 <* 3 stoppet *>(case opgave+1 of( 0, 2, 2, 3)), 3 10165 <* 4 noneksist *>(-2),<* ulovligt garageterminalnr *> 3 10166 <* 5 - *>(-1),<* ulovlig tilstand *> 3 10167 <* 6 stop v. fejl *>(case opgave+1 of( 0, -5, 2, 3)), 3 10168 <* 7 ej knyttet *>(case opgave+1 of( 0, -5, 2, 3)), 3 10169 -1); 3 10170 \f 3 10170 message procedure garage side 4 - 810424/hko; 3 10171 3 10171 case aktion+6 of 3 10172 begin 4 10173 begin 5 10174 <*-5: terminal optaget *> 5 10175 5 10175 d.op_ref.resultat:= 16; 5 10176 afslut_operation(op_ref,cs_att_pulje); <*telex*> 5 10177 end; 4 10178 4 10178 begin 5 10179 <*-4: operation uden virkning *> 5 10180 5 10180 afslut_operation(op_ref,-1); 5 10181 end; 4 10182 4 10182 begin 5 10183 <*-3: ulovlig operationskode *> 5 10184 5 10184 fejl_reaktion(2<*operationskode*>,kode,<:ulovlig:>,1); 5 10185 afslut_operation(op_ref,-1); 5 10186 end; 4 10187 4 10187 begin 5 10188 <*-2: ulovligt garageterminal_nr *> 5 10189 5 10189 fejl_reaktion(3<*programfejl*>,nr,<: ikke eksisterende garage:>,1); 5 10190 afslut_operation(op_ref,cs_att_pulje); <*telex*> 5 10191 end; 4 10192 4 10192 begin 5 10193 <*-1: ulovlig operatørtilstand *> 5 10194 5 10194 fejl_reaktion(3<*programfejl*>,status,<: ulovlig garage-status:>,1); 5 10195 afslut_operation(op_ref,-1); 5 10196 end; 4 10197 4 10197 begin 5 10198 <* 0: ikke implementeret *> 5 10199 5 10199 fejl_reaktion(2<*operationskode*>,kode,<: ikke implementeret:>,1); 5 10200 afslut_operation(op_ref,-1); 5 10201 end; 4 10202 4 10202 begin 5 10203 \f 5 10203 message procedure garage side 5 - 851001/cl; 5 10204 5 10204 <* 1: indlæs kommando *> 5 10205 5 10205 5 10205 <*V*> læs_kommando(z_gar(nr),300+nr,op_ref,pos,indeks,sep,sluttegn); 5 10206 5 10206 if d.op_ref.resultat > 3 then 5 10207 begin 6 10208 <*V*> setposition(z_gar(nr),0,0); 6 10209 if sluttegn<>'nl' then outchar(z_gar(nr),'nl'); 6 10210 skriv_kvittering(z_gar(nr),op_ref,pos, 6 10211 d.op_ref.resultat); 6 10212 end 5 10213 else if d.op_ref.resultat>0 then 5 10214 begin <*godkendt*> 6 10215 kode:=d.op_ref.opkode; 6 10216 i:= kode extract 12; 6 10217 j:= if kode=11 or kode=12 or kode=20 or kode=24 then 1 6 10218 else if kode=9 or kode=10 then 2 6 10219 else 0; 6 10220 if j > 0 then 6 10221 begin 7 10222 case j of 7 10223 begin 8 10224 begin 9 10225 \f 9 10225 message procedure garage side 6 - 851001/cl; 9 10226 9 10226 <* 1 indsæt/udtag/flyt bus i vogntabel *> 9 10227 integer vogn,ll; 9 10228 integer array field vtop; 9 10229 9 10229 vogn:=ia(1); 9 10230 ll:=ia(2); 9 10231 <*V*> wait_ch(cs_vt_adgang, 9 10232 vt_op, 9 10233 gen_optype, 9 10234 -1<*timeout sek*>); 9 10235 start_operation(vtop,300+nr,cs_garage(nr), 9 10236 kode); 9 10237 d.vt_op.data(1):=vogn; 9 10238 if kode=11 or kode=20 or kode=24 then d.vt_op.data(2):=ll; 9 10239 indeks:= vt_op; 9 10240 signal_ch(cs_vt, 9 10241 vt_op, 9 10242 gen_optype or gar_optype); 9 10243 9 10243 <*V*> wait_ch(cs_garage(nr), 9 10244 vt_op, 9 10245 gar_optype, 9 10246 -1<*timeout sek*>); 9 10247 <*+2*> if testbit18 and overvåget then 9 10248 disable begin 10 10249 write(out,"nl",1,<:garage :>,<<d>,nr, 10 10250 <:: operation retur fra vt:>); 10 10251 skriv_op(out,vt_op); 10 10252 end; 9 10253 <*-2*> 9 10254 <*+4*> if vt_op<>indeks then 9 10255 fejl_reaktion(11<*fremmede op*>,op_ref, 9 10256 <:garage-kommando:>,0); 9 10257 <*-4*> 9 10258 <*V*> setposition(z_gar(nr),0,0); 9 10259 if sluttegn<>'nl' then outchar(z_gar(nr),'nl'); 9 10260 skriv_kvittering(z_gar(nr),if d.vt_op.resultat = 11 or 9 10261 d.vt_op.resultat = 12 then d.vt_op.data(3) 9 10262 else vt_op,-1,d.vt_op.resultat); 9 10263 d.vt_op.optype:=gen_optype or vtoptype; 9 10264 disable afslut_operation(vt_op,cs_vt_adgang); 9 10265 end; 8 10266 8 10266 begin 9 10267 \f 9 10267 message procedure garage side 6a - 830310/cl; 9 10268 9 10268 <* 2 vogntabel,linienr/-,busnr *> 9 10269 9 10269 d.op_ref.retur:= cs_garage(nr); 9 10270 tofrom(d.op_ref.data,ia,10); 9 10271 indeks:= op_ref; 9 10272 signal_ch(cs_vt,op_ref,gen_optype or gar_optype); 9 10273 wait_ch(cs_garage(nr), 9 10274 op_ref, 9 10275 gar_optype, 9 10276 -1<*timeout*>); 9 10277 <*+2*> if testbit18 and overvåget then 9 10278 disable begin 10 10279 write(out,"nl",1,<:garage operation retur fra vt:>); 10 10280 skriv_op(out,op_ref); 10 10281 end; 9 10282 <*-2*> 9 10283 <*+4*> 9 10284 if indeks <> op_ref then 9 10285 fejlreaktion(11<*fremmed post*>,op_ref,<:garage komm:>,0); 9 10286 <*-4*> 9 10287 i:= d.op_ref.resultat; 9 10288 if i = 0 or i > 3 then 9 10289 begin 10 10290 <*V*> setposition(z_gar(nr),0,0); 10 10291 skriv_kvittering(z_gar(nr),op_ref,-1,d.op_ref.resultat); 10 10292 end 9 10293 else 9 10294 begin 10 10295 integer antal,fil_ref; 10 10296 antal:= d.op_ref.data(6); 10 10297 fil_ref:= d.op_ref.data(7); 10 10298 <*V*> setposition(z_gar(nr),0,0); 10 10299 write(z_gar(nr),"*",24,"sp",6, 10 10300 <:vogntabeludskrift:>,"sp",6,"*",24,"nl",2); 10 10301 <*V*> setposition(z_gar(nr),0,0); 10 10302 \f 10 10302 message procedure garage side 6c - 841213/cl; 10 10303 10 10303 pos:= 1; 10 10304 while pos <= antal do 10 10305 begin 11 10306 integer bogst,løb; 11 10307 11 10307 disable i:= læs_fil(fil_ref,pos,j); 11 10308 if i <> 0 then 11 10309 fejlreaktion(5<*læs_fil*>,i,<:garage: vo,l/vo,b:>,0) 11 10310 else 11 10311 begin 12 10312 vogn:= fil(j,1) shift (-24) extract 24; 12 10313 løb:= fil(j,1) extract 24; 12 10314 if d.op_ref.opkode=9 then 12 10315 begin i:=vogn; vogn:=løb; løb:=i; end; 12 10316 ll:= løb shift (-12) extract 10; 12 10317 bogst:= løb shift (-7) extract 5; 12 10318 if bogst > 0 then bogst:= bogst +'A'-1; 12 10319 løb:= løb extract 7; 12 10320 vogn:= vogn extract 14; 12 10321 i:= d.op_ref.opkode-8; 12 10322 for i:= i,i+1 do 12 10323 begin 13 10324 j:= (i+1) extract 1; 13 10325 case j +1 of 13 10326 begin 14 10327 write(z_gar(nr),"sp",(bogst=0) extract 1,<<ddd>,ll, 14 10328 false add bogst,1,"/",1,<<d__>,løb); 14 10329 write(z_gar(nr),<<dddd>,vogn,"sp",1); 14 10330 end; 13 10331 end; 12 10332 if pos mod 5 = 0 then 12 10333 begin 13 10334 write(z_gar(nr),"nl",1); 13 10335 <*V*> setposition(z_gar(nr),0,0); 13 10336 end 12 10337 else write(z_gar(nr),"sp",3); 12 10338 end; 11 10339 pos:=pos+1; 11 10340 end; 10 10341 write(z_gar(nr),"nl",1,"*",77,"nl",1); 10 10342 \f 10 10342 message procedure garage side 6d- 830310/cl; 10 10343 10 10343 d.opref.opkode:=104; <*slet-fil*> 10 10344 d.op_ref.data(4):=filref; 10 10345 indeks:=op_ref; 10 10346 signal_ch(cs_slet_fil,op_ref,gen_optype or gar_optype); 10 10347 <*V*> wait_ch(cs_garage(nr),op_ref,gar_optype,-1); 10 10348 10 10348 <*+2*> if testbit18 and overvåget then 10 10349 disable begin 11 10350 write(out,"nl",1,<:garage, slet-fil retur:>); 11 10351 skriv_op(out,op_ref); 11 10352 end; 10 10353 <*-2*> 10 10354 10 10354 <*+4*> if op_ref<>indeks then 10 10355 fejlreaktion(11<*fr.post*>,op_ref,<:garage,slet-fil:>,0); 10 10356 <*-4*> 10 10357 if d.op_ref.data(9)<>0 then 10 10358 fejl_reaktion(3<*prg.fejl*>,d.op_ref.data(9), 10 10359 <:garage, slet_fil:>,1); 10 10360 end; 9 10361 \f 9 10361 message procedure garage side 7 -810424/hko; 9 10362 9 10362 end; 8 10363 8 10363 <*+4*> fejl_reaktion(3<*programfejl*>,j,<:case 'opkode':>,2); 8 10364 <*-4*> 8 10365 end;<*case j *> 7 10366 end <* j > 0 *> 6 10367 else 6 10368 begin 7 10369 <*V*> setposition(z_gar(nr),0,0); 7 10370 if sluttegn<>'nl' then outchar(z_gar(nr),'nl'); 7 10371 skriv_kvittering(z_gar(nr),op_ref,pos, 7 10372 4 <*kommando ukendt *>); 7 10373 end; 6 10374 end;<* godkendt *> 5 10375 5 10375 <*V*> setposition(z_gar(nr),0,0); 5 10376 5 10376 d.op_ref.opkode:=0; <*telex*> 5 10377 5 10377 disable afslut_operation(op_ref,cs_gar); 5 10378 end; <* indlæs kommando *> 4 10379 4 10379 begin 5 10380 \f 5 10380 message procedure garage side 8 - 841213/cl; 5 10381 5 10381 <* 2: inkluder *> 5 10382 5 10382 d.op_ref.resultat:=3; 5 10383 afslut_operation(op_ref,-1); 5 10384 monitor(8)reserve:(z_gar(nr),0,ia); 5 10385 terminal_tab.ref.terminal_tilstand:= 5 10386 terminal_tab.ref.terminal_tilstand extract 21; 5 10387 <*V*> wait_ch(cs_att_pulje,op_ref,true,-1); 5 10388 start_operation(op_ref,300+nr,cs_att_pulje,0); 5 10389 signal_ch(cs_garage(nr),op_ref,gen_optype); 5 10390 end; 4 10391 4 10391 begin 5 10392 5 10392 <* 3: ekskluder *> 5 10393 d.op_ref.resultat:= 3; 5 10394 terminal_tab.ref.terminal_tilstand:= 7 shift 21 + 5 10395 terminal_tab.ref.terminal_tilstand extract 21; 5 10396 monitor(10)release:(z_gar(nr),0,ia); 5 10397 afslut_operation(op_ref,-1); 5 10398 5 10398 end; 4 10399 4 10399 <*+4*> fejl_reaktion(3<*programfejl *>,aktion,<:case aktion:>,2); 4 10400 <*-4*> 4 10401 end; <* case aktion+6 *> 3 10402 3 10402 until false; 3 10403 gar_trap: 3 10404 skriv_garage(zbillede,1); 3 10405 end garage; 2 10406 2 10406 \f 2 10406 message procedure radio_erklæringer side 1 - 820304/hko; 2 10407 2 10407 zone z_fr_in(14,1,rad_in_fejl), 2 10408 z_rf_in(14,1,rad_in_fejl), 2 10409 z_fr_out(14,1,rad_out_fejl), 2 10410 z_rf_out(14,1,rad_out_fejl); 2 10411 2 10411 integer array 2 10412 radiofejl, 2 10413 ss_samtale_nedlagt, 2 10414 ss_radio_aktiver(1:max_antal_kanaler), 2 10415 bs_talevej_udkoblet, 2 10416 cs_radio(1:max_antal_taleveje), 2 10417 radio_linietabel(1:max_linienr//3+1), 2 10418 radio_områdetabel(0:max_antal_områder), 2 10419 opkaldskø(opkaldskø_postlængde//2+1: 2 10420 (max_antal_mobilopkald+1)*opkaldskø_postlængde//2), 2 10421 kanal_tab(1:max_antal_kanaler*kanal_beskr_længde//2), 2 10422 hookoff_maske(1:(tv_maske_lgd//2)), 2 10423 samtaleflag, kanalflag, opkaldsflag(1:(op_maske_lgd//2)); 2 10424 2 10424 integer field 2 10425 kanal_tilstand, 2 10426 kanal_id1, 2 10427 kanal_id2, 2 10428 kanal_spec, 2 10429 kanal_alt_id1, 2 10430 kanal_alt_id2; 2 10431 integer array field 2 10432 kanal_mon_maske, 2 10433 kanal_alarm, 2 10434 opkald_meldt; 2 10435 2 10435 integer 2 10436 cs_rad, 2 10437 cs_radio_medd, 2 10438 cs_radio_adm, 2 10439 cs_radio_ind, 2 10440 cs_radio_ud, 2 10441 cs_radio_pulje, 2 10442 cs_radio_kø, 2 10443 bs_mobil_opkald, 2 10444 bs_opkaldskø_adgang, 2 10445 opkaldskø_ledige, 2 10446 nødopkald_brugt, 2 10447 første_frie_opkald, 2 10448 første_opkald, 2 10449 sidste_opkald, 2 10450 første_nødopkald, 2 10451 sidste_nødopkald, 2 10452 optaget_flag; 2 10453 2 10453 boolean 2 10454 mobil_opkald_aktiveret; 2 10455 \f 2 10455 message procedure læs_hex_ciffer side 1 - 810428/hko; 2 10456 2 10456 integer 2 10457 procedure læs_hex_ciffer(tabel,linie,op); 2 10458 value linie; 2 10459 integer array tabel; 2 10460 integer linie,op; 2 10461 begin 3 10462 integer i,j; 3 10463 3 10463 i:=(if linie>=0 then linie+6 else linie)//6; 3 10464 j:=((i-1)*6-linie)*4; 3 10465 læs_hex_ciffer:=op:=tabel(i) shift j extract 4; 3 10466 end læs_hex_ciffer; 2 10467 2 10467 message procedure sæt_hex_ciffer side 1 - 810505/hko; 2 10468 2 10468 integer 2 10469 procedure sæt_hex_ciffer(tabel,linie,op); 2 10470 value linie; 2 10471 integer array tabel; 2 10472 integer linie,op; 2 10473 begin 3 10474 integer i,j; 3 10475 3 10475 i:=(if linie>=0 then linie+6 else linie)//6; 3 10476 j:=(linie-(i-1)*6)*4; 3 10477 sæt_hex_ciffer:= tabel(i) shift (-j) extract 4; 3 10478 tabel(i):=tabel(i) shift (-4-j) shift 4 add (op extract 4) 3 10479 shift j add (tabel(i) extract j); 3 10480 end sæt_hex_ciffer; 2 10481 2 10481 message procedure hex_to_dec side 1 - 900108/cl; 2 10482 2 10482 integer procedure hex_to_dec(hex); 2 10483 value hex; 2 10484 integer hex; 2 10485 begin 3 10486 hex_to_dec:= if 'A'<=hex and hex<='F' then (hex-'A'+10) 3 10487 else (hex-'0'); 3 10488 end; 2 10489 2 10489 message procedure dec_to_hex side 1 - 900108/cl; 2 10490 2 10490 integer procedure dec_to_hex(dec); 2 10491 value dec; 2 10492 integer dec; 2 10493 begin 3 10494 dec_to_hex:= if 0<=dec and dec<=9 then ('0'+dec) 3 10495 else ('A'+dec-10); 3 10496 end; 2 10497 2 10497 message procedure rad_out_fejl side 1 - 820304/hko; 2 10498 2 10498 procedure rad_out_fejl(z,s,b); 2 10499 value s; 2 10500 zone z; 2 10501 integer s,b; 2 10502 begin 3 10503 integer array field iaf; 3 10504 integer pos,tegn,max,i; 3 10505 integer array ia(1:20); 3 10506 long array field laf; 3 10507 3 10507 disable begin 4 10508 laf:= iaf:= 2; 4 10509 tegn:= 1; 4 10510 getzone6(z,ia); 4 10511 max:= ia(16)//2*3; 4 10512 if s = 1 shift 21 + 2 then 4 10513 begin 5 10514 z(1):= real<:<'em'>:>; 5 10515 b:= 2; 5 10516 end 4 10517 else 4 10518 begin 5 10519 pos:= 0; 5 10520 for i:= 1 step 1 until max_antal_kanaler do 5 10521 begin 6 10522 iaf:= (i-1)*kanalbeskr_længde; 6 10523 if sæt_hex_ciffer(kanal_tab.iaf,3,15)<>15 then pos:= pos+1; 6 10524 if pos>0 then 6 10525 begin 7 10526 tofrom(kanalflag,alle_operatører,op_maske_lgd); 7 10527 signalbin(bs_mobilopkald); 7 10528 fejlreaktion(17<*y.e.status*>,s,string ia.laf(increase(tegn)), 7 10529 1 shift 12<*binært*> +1<*fortsæt*>); 7 10530 end; 6 10531 end; 5 10532 end; 4 10533 end; 3 10534 end; 2 10535 \f 2 10535 message procedure rad_in_fejl side 1 - 810601/hko; 2 10536 2 10536 procedure rad_in_fejl(z,s,b); 2 10537 value s; 2 10538 zone z; 2 10539 integer s,b; 2 10540 begin 3 10541 integer array field iaf; 3 10542 integer pos,tegn,max,i; 3 10543 integer array ia(1:20); 3 10544 long array field laf; 3 10545 3 10545 disable begin 4 10546 laf:= iaf:= 2; 4 10547 i:= 1; 4 10548 getzone6(z,ia); 4 10549 max:= ia(16)//2*3; 4 10550 if s shift (-21) extract 1 = 0 4 10551 and s shift(-19) extract 1 = 0 then 4 10552 begin 5 10553 if b = 0 then 5 10554 begin 6 10555 z(1):= real<:!:>; 6 10556 b:= 2; 6 10557 end; 5 10558 end; 4 10559 \f 4 10559 message procedure rad_in_fejl side 2 - 820304/hko; 4 10560 4 10560 if (s <> 1 shift 21 +2 and s shift(-19) extract 1 = 0) then 4 10561 begin 5 10562 fejlreaktion(17<*ydre enhed status*>,s,string ia.laf(increase(i)), 5 10563 1 shift 12<*binær*> +1<*fortsæt*>); 5 10564 end 4 10565 else 4 10566 if s shift (-19) extract 1 = 1 then 4 10567 begin 5 10568 z(1):= real<:!<'nl'>:>; 5 10569 b:= 2; 5 10570 end 4 10571 else 4 10572 if s = 1 shift 21 +2 or s shift(-19) extract 1 =1 then 4 10573 begin 5 10574 <* 5 10575 if b = 0 then 5 10576 begin 5 10577 *> 5 10578 z(1):= real <:<'em'>:>; 5 10579 b:= 2; 5 10580 <* 5 10581 end 5 10582 else 5 10583 begin 5 10584 tegn:= -1; 5 10585 iaf:= 0; 5 10586 pos:= b//2*3-2; 5 10587 while pos < max and tegn <> 0 do læstegn(z.iaf,pos,tegn); 5 10588 skriv_tegn(z.iaf,pos,'?'); 5 10589 if pos<=max then 5 10590 afslut_text(z.iaf,pos); 5 10591 b:= (pos-1)//3*2; 5 10592 end; 5 10593 *> 5 10594 end;<* s=1 shift 21+2 *> 4 10595 end; 3 10596 if testbit22 and 3 10597 (s <> 1 shift 21 +2 and s shift(-19) extract 1 = 0) 3 10598 then 3 10599 delay(60); 3 10600 end rad_in_fejl; 2 10601 \f 2 10601 message procedure afvent_radioinput side 1 - 880901/cl; 2 10602 2 10602 integer procedure afvent_radioinput(z_in,tlgr,rf); 2 10603 value rf; 2 10604 zone z_in; 2 10605 integer array tlgr; 2 10606 boolean rf; 2 10607 begin 3 10608 integer i, p, pos, tegn, ac, sum, csum, lgd; 3 10609 long array field laf; 3 10610 3 10610 laf:= 0; 3 10611 pos:= 1; 3 10612 repeat 3 10613 i:=readchar(z_in,tegn); 3 10614 if i<>8 and pos<80 then skrivtegn(tlgr,pos,tegn); 3 10615 until (i=8 and pos>1) or (tegn='em') or (pos>=80); 3 10616 p:=pos; 3 10617 repeat afsluttext(tlgr,p) until p mod 6 = 1; 3 10618 <*+2*>if overvåget and (testbit36 or ((-,rf) and testbit38) or 3 10619 (rf and testbit39)) then 3 10620 disable begin 4 10621 write(zrl,<<zd dd dd.dd >,now, 4 10622 (if -,rf then <:fr-tlgr: :> else <:rf-answ: :>),tlgr.laf, 4 10623 if tegn='em' then <:*timeout*:> else 4 10624 if pos>=80 then <:*for langt*:> else <::>); 4 10625 outchar(zrl,'nl'); 4 10626 end; 3 10627 <*-2*> 3 10628 ac:= -1; 3 10629 if pos >= 80 then 3 10630 begin <* telegram for langt *> 4 10631 repeat readchar(z_in,tegn) 4 10632 until tegn='nl' or tegn='em'; 4 10633 end 3 10634 else 3 10635 if pos>1 and tegn='nl' then 3 10636 begin 4 10637 lgd:= 1; 4 10638 while læstegn(tlgr,lgd,tegn)<>0 do ; 4 10639 lgd:= lgd-2; 4 10640 if lgd >= 5 then 4 10641 begin 5 10642 lgd:= lgd-2; <* se bort fra checksum *> 5 10643 i:= lgd + 1; 5 10644 csum:= (læstegn(tlgr,i,tegn) - '@')*16; 5 10645 csum:= csum + (læstegn(tlgr,i,tegn) - '@'); 5 10646 i:= lgd + 1; 5 10647 skrivtegn(tlgr,i,0); 5 10648 skrivtegn(tlgr,i,0); 5 10649 i:= 1; sum:= 0; 5 10650 while i <= lgd do 5 10651 sum:= (sum + læstegn(tlgr,i,tegn)) mod 256; 5 10652 if csum >= 0 and csum <> sum then 5 10653 begin 6 10654 <*+2*> if overvåget and (testbit36 or 6 10655 ((-,rf) and testbit38) or (rf and testbit39)) then 6 10656 disable begin 7 10657 write(zrl,<<zd dd dd.dd >,now, 7 10658 (if rf then <:rf:> else <:fr:>), 7 10659 <:-tlgr-checksumfejl: :>,csum,sum); outchar(zrl,'nl'); 7 10660 end; 6 10661 <*-2*> 6 10662 ac:= 6 <* checksumfejl *> 6 10663 end 5 10664 else 5 10665 ac:= 0; 5 10666 end 4 10667 else ac:= 6; <* for kort telegram - retransmitter *> 4 10668 end; 3 10669 afvent_radioinput:= ac; 3 10670 end; 2 10671 \f 2 10671 message procedure skriv_kanal_tab side 1 - 820304/hko; 2 10672 2 10672 procedure skriv_kanal_tab(z); 2 10673 zone z; 2 10674 begin 3 10675 integer array field ref; 3 10676 integer i,j,t,op,id1,id2; 3 10677 3 10677 write(z,"ff",1,"nl",1,<: 3 10678 ******** kanal-beskrivelser ******* 3 10679 3 10679 a k l p m b n 3 10680 l a y a o s ø 3 10681 nr tv tilst + * l t t s n v d - type id1 id2 ttmm/ant -ej.op:>, 3 10682 <* 3 10683 01 ..... ..... x x x x x x x x x x .... ........ ........ .... .... ---- 3 10684 *> 3 10685 "nl",1); 3 10686 for i:=1 step 1 until max_antal_kanaler do 3 10687 begin 4 10688 ref:=(i-1)*kanal_beskr_længde; 4 10689 t:=kanal_tab.ref.kanal_tilstand; 4 10690 id1:=kanal_tab.ref.kanal_id1; 4 10691 id2:=kanal_tab.ref.kanal_id2; 4 10692 write(z,"nl",1,"sp",4, 4 10693 <<dd>,i,<<-ddddd>,t shift(-16),t shift(-12) extract 4,"sp",1); 4 10694 for j:=11 step -1 until 2 do 4 10695 write(z,if læsbit_i(t,j) then "X" else "sp",1,"sp",1); 4 10696 write(z,case t extract 2 +1 of 4 10697 (<:- :>,<:OPK :>,<:MEDD:>,<:GNM :>), 4 10698 "sp",1); 4 10699 skriv_id(z,id1,9); 4 10700 skriv_id(z,id2,9); 4 10701 t:=kanal_tab.ref.kanal_spec; 4 10702 write(z,"sp",1,<<-dddd>,t,t shift(-16),"sp",1,-(t extract 8)); 4 10703 write(z,"nl",1,"sp",14,<:mon: :>); 4 10704 for j:= max_antal_taleveje step -1 until 1 do 4 10705 write(z,(if læs_bit_ia(kanal_tab.ref.kanal_mon_maske,j) then "1" 4 10706 else "."),1); 4 10707 write(z,"sp",25-max_antal_taleveje); 4 10708 skriv_id(z,kanal_tab.ref.kanal_alt_id1,9); 4 10709 skriv_id(z,kanal_tab.ref.kanal_alt_id2,9); 4 10710 end; 3 10711 write(z,"nl",2,<:kanalflag::>,"nl",1); 3 10712 outintbits_ia(z,kanalflag,1,op_maske_lgd//2); 3 10713 write(z,"nl",2); 3 10714 end skriv_kanal_tab; 2 10715 \f 2 10715 message procedure skriv_opkaldskø side 1 - 820301/hko; 2 10716 2 10716 procedure skriv_opkaldskø(z); 2 10717 zone z; 2 10718 begin 3 10719 integer i,bogst,løb,j; 3 10720 integer array field ref; 3 10721 write(z,"nl",2,"*",5,<: opkaldskø :>,"*",5,"nl",2, 3 10722 <: ref næste foreg X bus linie/løb tid - op type :>, 3 10723 <: sig omr :>,"nl",1); 3 10724 for i:= 1 step 1 until max_antal_mobilopkald do 3 10725 begin 4 10726 ref:= i*opkaldskø_postlængde; 4 10727 j:= opkaldskø.ref(1); 4 10728 write(z,<< dddd>,ref,<< ddddd>,j extract 12,j shift (-12)); 4 10729 j:= opkaldskø.ref(2); 4 10730 write(z,"sp",1,if j < 0 then "X" else "sp",1,"sp",1); 4 10731 skriv_id(z,j extract 23,9); 4 10732 j:= opkaldskø.ref(3); 4 10733 skriv_id(z,j,7); 4 10734 j:= opkaldskø.ref(4); 4 10735 write(z,<< zd.dd>,(j shift (-12))/100.0, 4 10736 << zd>,j extract 8); 4 10737 j:= j shift (-8) extract 4; 4 10738 if j = 1 or j = 2 then 4 10739 write(z,if j=1 then <: normal:> else <: nød :>) 4 10740 else write(z,<<dddd>,j,"sp",3); 4 10741 j:= opkaldskø.ref(5); 4 10742 write(z,if j shift (-20) <> 0 then <: B :> else <: S :>, 4 10743 true,4,if 1<=(j extract 8) and (j extract 8)<=max_antal_områder then 4 10744 string område_navn(j extract 8) else <:---:>); 4 10745 outchar(z,'nl'); 4 10746 end; 3 10747 3 10747 write(z,"nl",1,<<z>, 3 10748 <:første_frie_opkald=:>,første_frie_opkald,"nl",1, 3 10749 <:første_opkald=:>,første_opkald,"nl",1, 3 10750 <:sidste_opkald=:>,sidste_opkald,"nl",1, 3 10751 <:første_nødopkald=:>,første_nødopkald,"nl",1, 3 10752 <:sidste_nødopkald=:>,sidste_nødopkald,"nl",1, 3 10753 <:opkaldskø_ledige=:>,opkaldskø_ledige,"nl",1, 3 10754 <:nødopkald_brugt= :>,nødopkald_brugt,"nl",1, 3 10755 "nl",1,<:opkaldsflag::>,"nl",1); 3 10756 outintbits_ia(z,opkaldsflag,1,op_maske_lgd//2); 3 10757 write(z,"nl",2); 3 10758 end skriv_opkaldskø; 2 10759 \f 2 10759 message procedure skriv_radio_linietabel side 1 - 820301/hko; 2 10760 2 10760 procedure skriv_radio_linie_tabel(z); 2 10761 zone z; 2 10762 begin 3 10763 integer i,j,k; 3 10764 3 10764 write(z,"nl",2,"*",5,<: liniefordeling for operatører :>,"*",5,"nl",2); 3 10765 k:= 0; 3 10766 for i:= 1 step 1 until max_linienr do 3 10767 begin 4 10768 læstegn(radio_linietabel,i+1,j); 4 10769 if j > 0 then 4 10770 begin 5 10771 k:= k +1; 5 10772 write(z,<<dddd>,i,":",1,<<zd_>,j,"sp",if k mod 5=0 then 0 else 4, 5 10773 "nl",if k mod 5=0 then 1 else 0); 5 10774 end; 4 10775 end; 3 10776 write(z,"nl",if k mod 5=0 then 1 else 2); 3 10777 end skriv_radio_linietabel; 2 10778 2 10778 procedure skriv_radio_områdetabel(z); 2 10779 zone z; 2 10780 begin 3 10781 integer i; 3 10782 3 10782 write(z,"nl",2,"*",5,<: områdefordeling for operatører :>,"*",5,"nl",2); 3 10783 for i:= 1 step 1 until max_antal_områder do 3 10784 begin 4 10785 laf:= (i-1)*4; 4 10786 if radio_områdetabel(i)<>0 then 4 10787 write(z,<<dd>,i,<:. :>,områdenavn.laf,<:: :>, 4 10788 radio_områdetabel(i),"nl",1); 4 10789 end; 3 10790 end skriv_radio_områdetabel; 2 10791 \f 2 10791 message procedure h_radio side 1 - 810520/hko; 2 10792 2 10792 <* hovedmodulkorutine for radiokanaler *> 2 10793 procedure h_radio; 2 10794 begin 3 10795 integer array field op_ref; 3 10796 integer k,dest_sem; 3 10797 procedure skriv_hradio(z,omfang); 3 10798 value omfang; 3 10799 zone z; 3 10800 integer omfang; 3 10801 begin integer i; 4 10802 disable i:= write(z,"nl",1,<:+++ hovedmodul radio:>); 4 10803 write(z,"sp",26-i); 4 10804 if omfang >0 then 4 10805 disable begin integer x; 5 10806 trap(slut); 5 10807 write(z,"nl",1, 5 10808 <: op_ref: :>,op_ref,"nl",1, 5 10809 <: k: :>,k,"nl",1, 5 10810 <: dest_sem: :>,dest_sem,"nl",1, 5 10811 <::>); 5 10812 skriv_coru(z,coru_no(400)); 5 10813 slut: 5 10814 end; 4 10815 end skriv_hradio; 3 10816 3 10816 trap(hrad_trap); 3 10817 stack_claim(if cm_test then 198 else 146); 3 10818 3 10818 <*+2*> if testbit32 and overvåget or testbit28 then 3 10819 skriv_hradio(out,0); 3 10820 <*-2*> 3 10821 \f 3 10821 message procedure h_radio side 2 - 820304/hko; 3 10822 3 10822 repeat 3 10823 wait_ch(cs_rad,op_ref,true,-1); 3 10824 <*+2*>if testbit33 and overvåget then 3 10825 disable begin 4 10826 skriv_h_radio(out,0); 4 10827 write(out,<: operation modtaget:>); 4 10828 skriv_op(out,op_ref); 4 10829 end; 3 10830 <*-2*> 3 10831 <*+4*> 3 10832 if (d.op_ref.optype and 3 10833 (gen_optype or rad_optype or vt_optype)) extract 12 =0 3 10834 then fejlreaktion(12<*operationstype*>,op_ref,<:h<'_'>radio:>,1); 3 10835 <*-4*> 3 10836 3 10836 k:=d.op_ref.op_kode extract 12; 3 10837 dest_sem:= 3 10838 if k > 0 and k < 7 3 10839 or k=11 or k=12 or k=19 3 10840 or (72<=k and k<=74) or k = 77 3 10841 <*IN,O/EK,O/IN,R/EK,R/FO,L/ST/EK,K/IN,K/RA,I/FO,O*> 3 10842 then cs_radio_adm 3 10843 else if k=41 <* radiokommando fra operatør *> 3 10844 then cs_radio(d.opref.data(1)) else -1; 3 10845 <*+4*> 3 10846 if dest_sem<1 then 3 10847 begin 4 10848 if dest_sem<0 then 4 10849 fejlreaktion(2<*operationskode*>,k,<:hovedmodul radio:>,1); 4 10850 d.op_ref.resultat:= if dest_sem=0 then 45 else 31; 4 10851 signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype); 4 10852 end 3 10853 else 3 10854 <*-4*> 3 10855 begin <* operationskode ok *> 4 10856 signal_ch(dest_sem,op_ref,d.op_ref.optype); 4 10857 end; 3 10858 until false; 3 10859 3 10859 hrad_trap: 3 10860 disable skriv_hradio(zbillede,1); 3 10861 end h_radio; 2 10862 \f 2 10862 message procedure radio side 1 - 820301/hko; 2 10863 2 10863 procedure radio(talevej,op); 2 10864 value talevej,op; 2 10865 integer talevej,op; 2 10866 begin 3 10867 integer array field opref, rad_op, vt_op, opref1, iaf, iaf1; 3 10868 integer nr,i,j,k,res,opgave,tilst,tekn_inf, vtop2, vtop3, 3 10869 sig,omr,type,bus,ll,ttmm,vogn,garage,operatør; 3 10870 integer array felt,værdi(1:8); 3 10871 boolean byt,nød,frigiv_samtale; 3 10872 real kl; 3 10873 real field rf; 3 10874 3 10874 procedure skriv_radio(z,omfang); 3 10875 value omfang; 3 10876 zone z; 3 10877 integer omfang; 3 10878 begin integer i1; 4 10879 disable i1:= write(z,"nl",1,<:+++ radio:>); 4 10880 write(z,"sp",26-i1); 4 10881 if omfang > 0 then 4 10882 disable begin real x; 5 10883 trap(slut); 5 10884 \f 5 10884 message procedure radio side 1a- 820301/hko; 5 10885 5 10885 write(z,"nl",1, 5 10886 <: op_ref: :>,op_ref,"nl",1, 5 10887 <: opref1: :>,opref1,"nl",1, 5 10888 <: iaf: :>,iaf,"nl",1, 5 10889 <: iaf1: :>,iaf1,"nl",1, 5 10890 <: vt-op: :>,vt_op,"nl",1, 5 10891 <: rad-op: :>,rad_op,"nl",1, 5 10892 <: rf: :>,rf,"nl",1, 5 10893 <: nr: :>,nr,"nl",1, 5 10894 <: i: :>,i,"nl",1, 5 10895 <: j: :>,j,"nl",1, 5 10896 <: k: :>,k,"nl",1, 5 10897 <: operatør: :>,operatør,"nl",1, 5 10898 <: tilst: :>,tilst,"nl",1, 5 10899 <: res: :>,res,"nl",1, 5 10900 <: opgave: :>,opgave,"nl",1, 5 10901 <: type: :>,type,"nl",1, 5 10902 <: bus: :>,bus,"nl",1, 5 10903 <: ll: :>,ll,"nl",1, 5 10904 <: ttmm: :>,ttmm,"nl",1, 5 10905 <: vogn: :>,vogn,"nl",1, 5 10906 <: tekn-inf: :>,tekn_inf,"nl",1, 5 10907 <: vtop2: :>,vtop2,"nl",1, 5 10908 <: vtop3: :>,vtop3,"nl",1, 5 10909 <: sig: :>,sig,"nl",1, 5 10910 <: omr: :>,omr,"nl",1, 5 10911 <: garage: :>,garage,"nl",1, 5 10912 <<-dddddd'-dd>, 5 10913 <: kl: :>,kl,systime(4,kl,x),x,"nl",1, 5 10914 <:samtaleflag: :>,"nl",1); 5 10915 out_intbits_ia(z,samtaleflag,1,op_maske_lgd//2); 5 10916 skriv_coru(z,coru_no(410+talevej)); 5 10917 slut: 5 10918 end;<*disable*> 4 10919 end skriv_radio; 3 10920 \f 3 10920 message procedure udtag_opkald side 1 - 820301/hko; 3 10921 3 10921 integer 3 10922 procedure udtag_opkald(vogn,type,operatør,bus,garage,omr,sig,ll,ttmm); 3 10923 value vogn, operatør; 3 10924 integer vogn,type,operatør,bus,garage,omr,sig,ll,ttmm; 3 10925 begin 4 10926 integer res,tilst,nr,i,j,t,o,b,l,tm; 4 10927 integer array field vt_op,ref,næste,forrige; 4 10928 integer array field iaf1; 4 10929 boolean skal_ud; 4 10930 4 10930 boolean procedure skal_udskrives(fordelt,aktuel); 4 10931 value fordelt,aktuel; 4 10932 integer fordelt,aktuel; 4 10933 begin 5 10934 boolean skal; 5 10935 integer n; 5 10936 integer array field iaf; 5 10937 5 10937 skal:= true; 5 10938 if fordelt > 0 and fordelt<>aktuel then 5 10939 begin 6 10940 for n:= 0 step 1 until 3 do 6 10941 begin 7 10942 if bpl_tilst(operatør_stop(fordelt,n),1) > 0 then 7 10943 begin 8 10944 iaf:= operatør_stop(fordelt,n)*op_maske_lgd; 8 10945 skal:= læsbit_ia(bpl_def.iaf,aktuel); 8 10946 goto returner; 8 10947 end; 7 10948 end; 6 10949 end; 5 10950 returner: 5 10951 skal_udskrives:= skal; 5 10952 end; 4 10953 4 10953 l:= b:= tm:= t:= 0; 4 10954 garage:= sig:= 0; 4 10955 res:= -1; 4 10956 <*V*> wait(bs_opkaldskø_adgang); 4 10957 ref:= første_nødopkald; 4 10958 if ref <> 0 then 4 10959 t:= 2 4 10960 else 4 10961 begin 5 10962 ref:= første_opkald; 5 10963 t:= if ref = 0 then 0 else 1; 5 10964 end; 4 10965 if t = 0 then res:= +19 <*kø er tom*> else 4 10966 if vogn=0 and omr=0 then 4 10967 begin 5 10968 while ref <> 0 and res = -1 do 5 10969 begin 6 10970 nr:= opkaldskø.ref(4) extract 8; 6 10971 if nr>64 then 6 10972 begin 7 10973 <*opk. primærfordelt til gruppe af btj.pl.*> 7 10974 i:=0; skal_ud:=true; iaf1:=nr*op_maske_lgd; 7 10975 while skal_ud and i<max_antal_operatører do 7 10976 begin 8 10977 i:=i+1; 8 10978 if læsbit_ia(bpl_def.iaf1,i) then 8 10979 skal_ud:= skal_ud and skal_udskrives(i,operatør); 8 10980 end; 7 10981 end 6 10982 else 6 10983 skal_ud:= skal_udskrives(nr,operatør); 6 10984 6 10984 if skal_ud then 6 10985 <* if nr=0 or -,læsbit_ia(operatørmaske,nr) or nr=operatør then 6 10986 *> 6 10987 res:= 0 6 10988 else 6 10989 begin 7 10990 ref:= opkaldskø.ref(1) extract 12; 7 10991 if ref = 0 and t = 2 then 7 10992 begin 8 10993 ref:= første_opkald; 8 10994 t:= if ref = 0 then 0 else 1; 8 10995 end else if ref = 0 then t:= 0; 7 10996 end; 6 10997 end; <*while*> 5 10998 \f 5 10998 message procedure udtag_opkald side 2 - 820304/hko; 5 10999 5 10999 if ref <> 0 then 5 11000 begin 6 11001 b:= opkaldskø.ref(2); 6 11002 <*+4*> if b < 0 then 6 11003 fejlreaktion(19<*mobilopkald*>,bus extract 14, 6 11004 <:nødopkald(besvaret/ej meldt):>,1); 6 11005 <*-4*> 6 11006 garage:=b shift(-14) extract 8; 6 11007 b:= b extract 14; 6 11008 l:= opkaldskø.ref(3); 6 11009 tm:= opkaldskø.ref(4); 6 11010 o:= tm extract 8; 6 11011 tm:= tm shift(-12); 6 11012 omr:= opkaldskø.ref(5) extract 8; 6 11013 sig:= opkaldskø.ref(5) shift (-20); 6 11014 end 5 11015 else res:=19; <* kø er tom *> 5 11016 end <*vogn=0 and omr=0 *> 4 11017 else 4 11018 begin 5 11019 <* vogn<>0 or omr<>0 *> 5 11020 i:= 0; tilst:= -1; 5 11021 if vogn shift(-22) = 1 then 5 11022 begin 6 11023 i:= find_busnr(vogn,nr,garage,tilst); 6 11024 l:= vogn; 6 11025 end 5 11026 else 5 11027 if vogn<>0 and (omr=0 or omr>2) then 5 11028 begin 6 11029 o:= 0; 6 11030 i:= søg_omr_bus(vogn,l,garage,o,sig,tilst); 6 11031 if i=(-2) then 6 11032 begin 7 11033 o:= omr; 7 11034 i:= søg_omr_bus(vogn,l,garage,o,sig,tilst); 7 11035 end; 6 11036 nr:= vogn extract 14; 6 11037 end 5 11038 else nr:= vogn extract 14; 5 11039 if i<0 then ref:= 0; 5 11040 while ref <> 0 and res = -1 do 5 11041 begin 6 11042 i:= opkaldskø.ref(2) extract 14; 6 11043 j:= opkaldskø.ref(4) extract 8; <*operatør*> 6 11044 if nr = i and 6 11045 (omr=0 or omr=opkaldskø.ref(5) extract 8) then res:= 0 6 11046 else 6 11047 begin 7 11048 ref:= opkaldskø.ref(1) extract 12; 7 11049 if ref = 0 and t = 2 then 7 11050 begin 8 11051 ref:= første_opkald; 8 11052 t:= if ref = 0 then 0 else 1; 8 11053 end else if ref = 0 then t:= 0; 7 11054 end; 6 11055 end; <*while*> 5 11056 \f 5 11056 message procedure udtag_opkald side 3 - 810603/hko; 5 11057 5 11057 if ref <> 0 then 5 11058 begin 6 11059 b:= nr; 6 11060 tm:= opkaldskø.ref(4); 6 11061 o:= tm extract 8; 6 11062 tm:= tm shift(-12); 6 11063 omr:= opkaldskø.ref(5) extract 4; 6 11064 sig:= opkaldskø.ref(5) shift (-20); 6 11065 6 11065 <*+4*> if tilst <> -1 then 6 11066 fejlreaktion(3<*prg.fejl*>,tilst, 6 11067 <:vogntabel_tilstand for vogn i kø:>,1); 6 11068 <*-4*> 6 11069 end; 5 11070 end; 4 11071 4 11071 if ref <> 0 then 4 11072 begin 5 11073 næste:= opkaldskø.ref(1); 5 11074 forrige:= næste shift(-12); 5 11075 næste:= næste extract 12; 5 11076 if forrige <> 0 then 5 11077 opkaldskø.forrige(1):= opkaldskø.forrige(1) shift(-12) shift 12 5 11078 + næste 5 11079 else if t = 1 then første_opkald:= næste 5 11080 else <*if t = 2 then*> første_nødopkald:= næste; 5 11081 5 11081 if næste <> 0 then 5 11082 opkaldskø.næste(1):= opkaldskø.næste(1) extract 12 5 11083 + forrige shift 12 5 11084 else if t = 1 then sidste_opkald:= forrige 5 11085 else <* if t = 2 then*> sidste_nødopkald:= forrige; 5 11086 5 11086 opkaldskø.ref(1):=første_frie_opkald; 5 11087 første_frie_opkald:=ref; 5 11088 5 11088 opkaldskø_ledige:=opkaldskø_ledige + 1; 5 11089 if t=2 then nødopkald_brugt:=nødopkald_brugt - 1; 5 11090 if -,læsbit_ia(operatør_maske,o) or o = 0 then 5 11091 tofrom(opkaldsflag,alle_operatører,op_maske_lgd) 5 11092 else 5 11093 begin 6 11094 sætbit_ia(opkaldsflag,operatør,1); 6 11095 sætbit_ia(opkaldsflag,o,1); 6 11096 end; 5 11097 signal_bin(bs_mobil_opkald); 5 11098 end; 4 11099 \f 4 11099 message procedure udtag_opkald side 4 - 810531/hko; 4 11100 4 11100 signal_bin(bs_opkaldskø_adgang); 4 11101 bus:= b; 4 11102 type:= t; 4 11103 ll:= l; 4 11104 ttmm:= tm; 4 11105 udtag_opkald:= res; 4 11106 end udtag opkald; 3 11107 \f 3 11107 message procedure frigiv_kanal side 1 - 810603/hko; 3 11108 3 11108 procedure frigiv_kanal(nr); 3 11109 value nr; 3 11110 integer nr; 3 11111 begin 4 11112 integer id1, id2, omr, i; 4 11113 integer array field iaf, vt_op; 4 11114 4 11114 iaf:= (nr-1)*kanal_beskrlængde; 4 11115 id1:= kanal_tab.iaf.kanal_id1; 4 11116 id2:= kanal_tab.iaf.kanal_id2; 4 11117 omr:= kanal_til_omr(nr); 4 11118 if id1 <> 0 then 4 11119 wait(ss_samtale_nedlagt(nr)); 4 11120 if id1 shift (-22) < 3 and omr > 2 then 4 11121 begin 5 11122 <*V*> waitch(cs_vt_adgang,vt_op,true,-1); 5 11123 start_operation(vt_op,410+talevej,cs_radio(talevej), 5 11124 if id1 shift (-22) = 2 then 18 else 17); 5 11125 d.vt_op.data(1):= id1; 5 11126 d.vt_op.data(4):= omr; 5 11127 signalch(cs_vt,vt_op,vt_optype or genoptype); 5 11128 <*V*> waitch(cs_radio(talevej),vt_op,vt_optype,-1); 5 11129 signalch(cs_vt_adgang,vt_op,true); 5 11130 end; 4 11131 4 11131 if id2 <> 0 and id2 shift(-20) <> 12 then 4 11132 wait(ss_samtale_nedlagt(nr)); 4 11133 if id2 shift (-22) < 3 and omr > 2 then 4 11134 begin 5 11135 <*V*> waitch(cs_vt_adgang,vt_op,true,-1); 5 11136 start_operation(vt_op,410+talevej,cs_radio(talevej), 5 11137 if id2 shift (-22) = 2 then 18 else 17); 5 11138 d.vt_op.data(1):= id2; 5 11139 d.vt_op.data(4):= omr; 5 11140 signalch(cs_vt,vt_op,vt_optype or genoptype); 5 11141 <*V*> waitch(cs_radio(talevej),vt_op,vt_optype,-1); 5 11142 signalch(cs_vt_adgang,vt_op,true); 5 11143 end; 4 11144 4 11144 kanal_tab.iaf.kanal_id1:= kanal_tab.iaf.kanal_id2:= 4 11145 kanal_tab.iaf.kanal_alt_id1:= kanal_tab.iaf.kanal_alt_id2:= 0; 4 11146 kanal_tab.iaf.kanal_tilstand:= kanal_tab.iaf.kanal_tilstand 4 11147 shift (-10) extract 6 shift 10; 4 11148 <* repeat 4 11149 inspect(ss_samtale_nedlagt(nr),i); 4 11150 if i>0 then wait(ss_samtale_nedlagt(nr)); 4 11151 until i<=0; 4 11152 *> 4 11153 end frigiv_kanal; 3 11154 \f 3 11154 message procedure hookoff side 1 - 880901/cl; 3 11155 3 11155 integer procedure hookoff(talevej,op,retursem,flash); 3 11156 value talevej,op,retursem,flash; 3 11157 integer talevej,op,retursem; 3 11158 boolean flash; 3 11159 begin 4 11160 integer array field opref; 4 11161 4 11161 opref:= op; 4 11162 start_operation(opref,410+talevej,retursem,'A' shift 12 + 60); 4 11163 d.opref.data(1):= talevej; 4 11164 d.opref.data(2):= if flash then 2 else 1; 4 11165 signalch(cs_radio_ud,opref,rad_optype); 4 11166 <*V*> waitch(retursem,opref,rad_optype,-1); 4 11167 hookoff:= d.opref.resultat; 4 11168 end; 3 11169 \f 3 11169 message procedure hookon side 1 - 880901/cl; 3 11170 3 11170 integer procedure hookon(talevej,op,retursem); 3 11171 value talevej,op,retursem; 3 11172 integer talevej,op,retursem; 3 11173 begin 4 11174 integer i,res; 4 11175 integer array field opref; 4 11176 4 11176 if læsbit_ia(hookoff_maske,talevej) then 4 11177 begin 5 11178 inspect(bs_talevej_udkoblet(talevej),i); 5 11179 if i<=0 then 5 11180 begin 6 11181 opref:= op; 6 11182 start_operation(opref,410+talevej,retursem,'D' shift 12 + 60); 6 11183 d.opref.data(1):= talevej; 6 11184 signalch(cs_radio_ud,opref,rad_optype); 6 11185 <*V*> waitch(retursem,opref,rad_optype,-1); 6 11186 res:= d.opref.resultat; 6 11187 end 5 11188 else 5 11189 res:= 0; 5 11190 5 11190 if res=0 then wait(bs_talevej_udkoblet(talevej)); 5 11191 end 4 11192 else 4 11193 res:= 0; 4 11194 4 11194 sætbit_ia(hookoff_maske,talevej,0); 4 11195 hookon:= res; 4 11196 end; 3 11197 \f 3 11197 message procedure radio side 2 - 820304/hko; 3 11198 3 11198 rad_op:= op; 3 11199 3 11199 trap(radio_trap); 3 11200 stack_claim((if cm_test then 200 else 150) +200); 3 11201 3 11201 <*+2*>if testbit32 and overvåget or testbit28 then 3 11202 skriv_radio(out,0); 3 11203 <*-2*> 3 11204 repeat 3 11205 waitch(cs_radio(talevej),opref,true,-1); 3 11206 <*+2*> 3 11207 if testbit33 and overvåget then 3 11208 disable begin 4 11209 skriv_radio(out,0); 4 11210 write(out,<: operation modtaget på cs:>,<<d>,cs_radio(talevej)); 4 11211 skriv_op(out,opref); 4 11212 end; 3 11213 <*-2*> 3 11214 3 11214 k:= d.op_ref.opkode extract 12; 3 11215 opgave:= d.opref.opkode shift (-12); 3 11216 operatør:= d.op_ref.data(4); 3 11217 3 11217 <*+4*> if (d.op_ref.optype and (gen_optype or io_optype or op_optype)) 3 11218 extract 12 = 0 then fejlreaktion(12<*operationstype*>,op_ref, 3 11219 <:radio:>,0); 3 11220 <*-4*> 3 11221 \f 3 11221 message procedure radio side 3 - 880930/cl; 3 11222 if k=41 <*radiokommando fra operatør*> then 3 11223 begin 4 11224 vogn:= d.opref.data(2); 4 11225 res:= -1; 4 11226 for i:= 7 step 1 until 12 do d.opref.data(i):= 0; 4 11227 sig:= 0; omr:= d.opref.data(3) extract 8; 4 11228 bus:= garage:= ll:= 0; 4 11229 4 11229 if opgave=1 or opgave=9 then 4 11230 begin <* opkald til enkelt vogn (CHF) *> 5 11231 res:= udtag_opkald(vogn,type,operatør,bus,garage,omr,sig,ll,ttmm); 5 11232 if res=19 and (vogn<>0 or d.opref.data(3)=2) then res:= -1; 5 11233 <* ok at kø er tom når vogn er angivet eller VHF *> 5 11234 5 11234 d.opref.data(11):= if res=0 then 5 11235 (if ll<>0 then ll else bus) else vogn; 5 11236 5 11236 if type=2 <*nød*> then 5 11237 begin 6 11238 waitch(cs_radio_pulje,opref1,true,-1); 6 11239 start_operation(opref1,410+talevej,cs_radio_pulje,46); 6 11240 d.opref1.data(1):= if ll<>0 then ll else bus; 6 11241 systime(5,0,kl); 6 11242 d.opref1.data(2):= entier(kl/100.0); 6 11243 d.opref1.data(3):= omr; 6 11244 signalch(cs_io,opref1,gen_optype or rad_optype); 6 11245 end 5 11246 end; <* enkeltvogn (CHF) *> 4 11247 4 11247 <* check enkeltvogn for ledig *> 4 11248 if res<=0 and omr=2<*VHF*> and bus=0 and 4 11249 (opgave=1 or opgave=9) then 4 11250 begin 5 11251 for i:= 1 step 1 until max_antal_kanaler do 5 11252 if kanal_til_omr(i)=2 then nr:= i; 5 11253 iaf:= (nr-1)*kanalbeskrlængde; 5 11254 if kanal_tab.iaf.kanal_tilstand extract 2<>0 and 5 11255 kanal_tab.iaf.kanal_id1 extract 20 = 10000 5 11256 then res:= 52; 5 11257 end; 4 11258 if res < 0 and (d.opref.data(3) > 2 <* ej TLF, VHF *> or 4 11259 d.opref.data(3)=0 <*std. omr*>) and 4 11260 (opgave <= 2 <* OP elller ME *> or opgave = 9 <* OP,L *>) 4 11261 then 4 11262 begin 5 11263 type:= ttmm:= 0; omr:= 0; sig:= 0; 5 11264 if vogn shift (-22) = 1 then 5 11265 begin 6 11266 find_busnr(vogn,bus,garage,res); 6 11267 ll:= vogn; 6 11268 end 5 11269 else 5 11270 if vogn shift (-22) = 0 then 5 11271 begin 6 11272 søg_omr_bus(vogn,ll,garage,omr,sig,res); 6 11273 bus:= vogn; 6 11274 end 5 11275 else 5 11276 fejlreaktion(31,vogn,<:vognident i enkeltvognsopk.:>,0); 5 11277 res:= if res=(-1) then 18 <* i kø *> else 5 11278 (if res<>0 then 14 <*opt*> else 0); 5 11279 end 4 11280 else 4 11281 if res<0 and (d.opref.data(3)=1 or d.opref.data(3)=2) and 4 11282 opgave <= 2 then 4 11283 begin 5 11284 bus:= vogn; garage:= type:= ttmm:= 0; 5 11285 res:= 0; omr:= 0; sig:= 0; 5 11286 end 4 11287 else 4 11288 if opgave>1 and opgave<>9 then 4 11289 type:= ttmm:= res:= 0; 4 11290 \f 4 11290 message procedure radio side 4 - 880930/cl; 4 11291 4 11291 if res=0 and (opgave<=4 or opgave=9) and 4 11292 (omr<1 or 2<omr) and 4 11293 (d.opref.data(3)>2 or d.opref.data(3)=0) then 4 11294 begin <* reserver i vogntabel *> 5 11295 waitch(cs_vt_adgang,vt_op,true,-1); 5 11296 start_operation(vt_op,410+talevej,cs_radio(talevej), 5 11297 if opgave <=2 or opgave=9 then 15 else 16); 5 11298 d.vt_op.data(1):= if opgave<=2 or opgave=9 then 5 11299 (if vogn=0 then garage shift 14 + bus else 5 11300 if ll<>0 then ll else garage shift 14 + bus) 5 11301 else vogn <*gruppeid*>; 5 11302 d.vt_op.data(4):= if d.opref.data(3)<>0 then 5 11303 d.opref.data(3) extract 8 5 11304 else omr extract 8; 5 11305 signalch(cs_vt,vt_op,gen_optype or rad_optype); 5 11306 <*V*> waitch(cs_radio(talevej),vt_op,rad_optype,-1); 5 11307 5 11307 res:= d.vt_op.resultat; 5 11308 if res=3 then res:= 0; 5 11309 vtop2:= d.vt_op.data(2); 5 11310 vtop3:= d.vt_op.data(3); 5 11311 tekn_inf:= d.vt_op.data(4); 5 11312 signalch(cs_vt_adgang,vt_op,gen_optype or vt_optype); 5 11313 end; 4 11314 4 11314 if res<>0 then 4 11315 begin 5 11316 d.opref.resultat:= res; 5 11317 signalch(d.opref.retur,opref,d.opref.optype); 5 11318 end 4 11319 else 4 11320 4 11320 if opgave <= 9 then 4 11321 begin <* opkald *> 5 11322 res:= hookoff(talevej,rad_op,cs_radio(talevej), 5 11323 opgave<>9 and d.opref.data(6)<>0); 5 11324 5 11324 if res<>0 then 5 11325 goto returner_op; 5 11326 5 11326 if opgave=7 or opgave=8 then <* KATASTROFEOPKALD *> 5 11327 begin 6 11328 start_operation(rad_op,410+talevej,cs_radio(talevej), 6 11329 'H' shift 12 + 60); 6 11330 d.rad_op.data(1):= talevej; 6 11331 d.rad_op.data(2):= 'D'; 6 11332 d.rad_op.data(3):= 6; <* rear *> 6 11333 d.rad_op.data(4):= 1; <* rear no *> 6 11334 d.rad_op.data(5):= 0; <* disconnect *> 6 11335 signalch(cs_radio_ud,rad_op,rad_optype); 6 11336 <*V*> waitch(cs_radio(talevej),rad_op,rad_optype,-1); 6 11337 if d.rad_op.resultat<>0 then 6 11338 begin 7 11339 res:= d.rad_op.resultat; 7 11340 goto returner_op; 7 11341 end; 6 11342 <* 6 11343 while optaget_flag shift (-1) <> 0 do 6 11344 delay(1); 6 11345 *> 6 11346 end; 5 11347 \f 5 11347 message procedure radio side 5 - 880930/cl; 5 11348 5 11348 start_operation(rad_op,410+talevej,cs_radio(talevej), 5 11349 'B' shift 12 + 60); 5 11350 d.rad_op.data(1):= talevej; 5 11351 d.rad_op.data(2):= 'D'; 5 11352 d.rad_op.data(3):= if opgave=9 then 3 else 5 11353 (2 - (opgave extract 1)); <* højttalerkode *> 5 11354 5 11354 if 5<=opgave and opgave <=8 then <* ALLE KALD *> 5 11355 begin 6 11356 j:= 0; 6 11357 for i:= 2 step 1 until max_antal_områder do 6 11358 begin 7 11359 if opgave > 6 or 7 11360 (d.opref.data(3) shift (-20) = 15 and 7 11361 læsbiti(d.opref.data(3),i)) or 7 11362 (d.opref.data(3) shift (-20) = 14 and 7 11363 d.opref.data(3) extract 20 = i) 7 11364 then 7 11365 begin 8 11366 for k:= 1 step 1 until (if i=3 then 2 else 1) do 8 11367 begin 9 11368 j:= j+1; 9 11369 d.rad_op.data(10+(j-1)*2):= 9 11370 område_id(i,2) shift 12 + <* tkt, tkn *> 9 11371 (if i=2<*VHF*> then 4 else k) 9 11372 shift 8 + <* signal type *> 9 11373 1; <* antal tno *> 9 11374 d.rad_op.data(11+(j-1)*2):= 0; <* tno alle *> 9 11375 end; 8 11376 end; 7 11377 end; 6 11378 d.rad_op.data(4):= j; 6 11379 d.rad_op.data(5):= 0; 6 11380 end 5 11381 else 5 11382 if opgave>2 and opgave <= 4 then <* gruppekald *> 5 11383 begin 6 11384 d.rad_op.data(4):= vtop2; 6 11385 d.rad_op.data(5):= vtop3; 6 11386 end 5 11387 else 5 11388 begin <* enkeltvogn *> 6 11389 if omr=0 then 6 11390 begin 7 11391 sig:= tekn_inf shift (-23); 7 11392 omr:= if d.opref.data(3)<>0 then d.opref.data(3) 7 11393 else tekn_inf extract 8; 7 11394 end 6 11395 else 6 11396 if d.opref.data(3)<>0 then omr:= d.opref.data(3); 6 11397 6 11397 <* lytte-kald til nød i TCT, VHF og TLF *> 6 11398 <* tvinges til alm. opkald *> 6 11399 if (opgave=9) and (type=2) and (omr<=3) then 6 11400 begin 7 11401 d.opref.opkode:= 1 shift 12 + d.opref.opkode extract 12; 7 11402 opgave:= 1; 7 11403 d.radop.data(3):= 1; 7 11404 end; 6 11405 6 11405 if omr=2 <*VHF*> then sig:= 4 else 6 11406 if omr=1 <*TLF*> then sig:= 7 else 6 11407 <*UHF*> sig:= sig+1; 6 11408 d.rad_op.data(4):= 1; 6 11409 d.rad_op.data(5):= 0; 6 11410 d.rad_op.data(10):= 6 11411 (område_id(omr,2) extract 12) shift 12 + 6 11412 sig shift 8 + 6 11413 1; 6 11414 d.rad_op.data(11):= bus; 6 11415 end; 5 11416 \f 5 11416 message procedure radio side 6 - 880930/cl; 5 11417 5 11417 signalch(cs_radio_ud,rad_op,rad_optype); 5 11418 <*V*> waitch(cs_radio(talevej),rad_op,rad_optype,-1); 5 11419 res:= d.rad_op.resultat; 5 11420 5 11420 d.rad_op.data(6):= 0; 5 11421 for i:= 1 step 1 until max_antal_områder do 5 11422 if læsbiti(d.rad_op.data(7),i) then 5 11423 increase(d.rad_op.data(6)); 5 11424 returner_op: 5 11425 if d.rad_op.data(6)=1 then 5 11426 begin 6 11427 for i:= 1 step 1 until max_antal_områder do 6 11428 if d.rad_op.data(7) extract 20 = 1 shift i then 6 11429 d.opref.data(12):= 14 shift 20 + i; 6 11430 end 5 11431 else 5 11432 d.opref.data(12):= 15 shift 20 + d.rad_op.data(7) extract 20; 5 11433 d.opref.data(7):= type; 5 11434 d.opref.data(8):= garage shift 14 + bus; 5 11435 d.opref.data(9):= ll; 5 11436 if res=0 then 5 11437 begin 6 11438 d.opref.resultat:= 3; 6 11439 d.opref.data(5):= d.opref.data(6); 6 11440 j:= 0; 6 11441 for i:= 1 step 1 until max_antal_kanaler do 6 11442 if læsbiti(d.rad_op.data(9),i) then j:= j+1; 6 11443 if j>1 then 6 11444 d.opref.data(6):= 3 shift 22 + 1 shift 20 + d.rad_op.data(9) 6 11445 else 6 11446 begin 7 11447 j:= 0; 7 11448 for i:= 1 step 1 until max_antal_kanaler do 7 11449 if læsbiti(d.rad_op.data(9),i) then j:= i; 7 11450 d.opref.data(6):= 3 shift 22 + j; 7 11451 end; 6 11452 d.opref.data(7):= type; 6 11453 d.opref.data(8):= garage shift 14 + bus; 6 11454 d.opref.data(9):= ll; 6 11455 d.opref.data(10):= d.opref.data(6); 6 11456 for i:= 1 step 1 until max_antal_kanaler do 6 11457 begin 7 11458 if læsbiti(d.rad_op.data(9),i) then 7 11459 begin 8 11460 if kanal_id(i) shift (-5) extract 5 = 2 then 8 11461 j:= pabx_id( kanal_id(i) extract 5 ) 8 11462 else 8 11463 j:= radio_id( kanal_id(i) extract 5 ); 8 11464 if j>0 and type=0 and operatør>0 then tæl_opkald(j,1); 8 11465 8 11465 iaf:= (i-1)*kanalbeskrlængde; 8 11466 skrivtegn(kanal_tab.iaf,1,talevej); 8 11467 kanal_tab.iaf.kanal_id2:= kanal_tab.iaf.kanal_id1; 8 11468 kanal_tab.iaf.kanal_alt_id2:= kanal_tab.iaf.kanal_alt_id1; 8 11469 kanal_tab.iaf.kanal_id1:= 8 11470 if opgave<=2 or opgave=9 then 8 11471 d.opref.data(if d.opref.data(9)<>0 then 9 else 8) 8 11472 else 8 11473 d.opref.data(2); 8 11474 kanal_tab.iaf.kanal_alt_id1:= 8 11475 if opgave<=2 or opgave=9 then 8 11476 d.opref.data(if d.opref.data(9)<>0 then 8 else 9) 8 11477 else 8 11478 0; 8 11479 if kanal_tab.iaf.kanal_id1=0 then 8 11480 kanal_tab.iaf.kanal_id1:= 10000; 8 11481 kanal_tab.iaf.kanal_spec:= 8 11482 if opgave <= 2 or opgave = 9 then ttmm else 0; 8 11483 end; 7 11484 end; 6 11485 if 5<=opgave and opgave<=8 <*alle-/katastrofekald*> then 6 11486 sætbit_ia(kanalflag,operatør,1); 6 11487 \f 6 11487 message procedure radio side 7 - 880930/cl; 6 11488 6 11488 end 5 11489 else 5 11490 begin 6 11491 d.opref.resultat:= res; 6 11492 if res=20 or res=52 then 6 11493 begin <* tæl ej.forb og opt.kanal *> 7 11494 for i:= 1 step 1 until max_antal_områder do 7 11495 if læsbiti(d.rad_op.data(7),i) then 7 11496 tæl_opkald(i,(if res=20 then 4 else 5)); 7 11497 end; 6 11498 if d.opref.data(6)=0 then 6 11499 res:= hookon(talevej,rad_op,cs_radio(talevej)); 6 11500 <* frigiv fra vogntabel hvis reserveret *> 6 11501 if (opgave<=4 or opgave=9) and 6 11502 (d.opref.data(3)=0 or d.opref.data(3)>2) then 6 11503 begin 7 11504 waitch(cs_vt_adgang,vt_op,true,-1); 7 11505 startoperation(vt_op,410+talevej,cs_radio(talevej), 7 11506 if opgave<=2 or opgave=9 then 17 else 18); 7 11507 d.vt_op.data(1):= if opgave<=2 or opgave=9 then 7 11508 (if vogn=0 then garage shift 14 + bus else 7 11509 if ll<>0 then ll else garage shift 14 + bus) 7 11510 else vogn; 7 11511 d.vt_op.data(4):= omr; 7 11512 signalch(cs_vt,vt_op,gen_optype or vt_optype); 7 11513 waitch(cs_radio(talevej),vt_op,vt_optype,-1); 7 11514 signalch(cs_vt_adgang,vt_op,true); 7 11515 end; 6 11516 end; 5 11517 signalch(d.opref.retur,opref,d.opref.optype); 5 11518 \f 5 11518 message procedure radio side 8 - 880930/cl; 5 11519 5 11519 end <* opkald *> 4 11520 else 4 11521 if opgave = 10 <* MONITER *> then 4 11522 begin 5 11523 nr:= d.opref.data(2); 5 11524 if nr shift (-20) <> 12 then 5 11525 fejlreaktion(3,nr,<: moniter, kanalnr:>,0); 5 11526 nr:= nr extract 20; 5 11527 iaf:= (nr-1)*kanalbeskrlængde; 5 11528 inspect(ss_samtale_nedlagt(nr),i); 5 11529 k:= if kanal_tab.iaf.kanal_id2 shift (-20) = 12 then 5 11530 kanal_tab.iaf.kanal_id2 extract 20 5 11531 else 5 11532 if kanal_tab.iaf.kanal_id2<>0 then nr else 0; 5 11533 if k<>0 then inspect(ss_samtale_nedlagt(k),j) else j:=0; 5 11534 if kanal_tab.iaf.kanal_tilstand shift (-16) = talevej and 5 11535 (i<>0 or j<>0) then 5 11536 begin 6 11537 res:= 0; 6 11538 d.opref.data(5):= 12 shift 20 + k; 6 11539 d.opref.data(6):= 12 shift 20 + nr; 6 11540 sætbit_ia(kanalflag,operatør,1); 6 11541 goto radio_nedlæg; 6 11542 end 5 11543 else 5 11544 if i<>0 or j<>0 then 5 11545 res:= 49 5 11546 else 5 11547 if kanal_tab.iaf.kanal_tilstand extract 2 = 0 then 5 11548 res:= 49 <* ingen samtale igang *> 5 11549 else 5 11550 begin 6 11551 res:= hookoff(talevej,rad_op,cs_radio(talevej),false); 6 11552 if res=0 then 6 11553 begin 7 11554 start_operation(rad_op,410+talevej,cs_radio(talevej), 7 11555 'B' shift 12 + 60); 7 11556 d.rad_op.data(1):= talevej; 7 11557 d.rad_op.data(2):= 'V'; 7 11558 d.rad_op.data(3):= 0; 7 11559 d.rad_op.data(4):= 1; 7 11560 d.rad_op.data(5):= 0; 7 11561 d.rad_op.data(10):= 7 11562 (kanal_id(nr) shift (-5) shift 18) + 7 11563 (kanal_id(nr) extract 5 shift 12) + 0; 7 11564 signalch(cs_radio_ud,rad_op,rad_optype); 7 11565 <*V*> waitch(cs_radio(talevej),rad_op,rad_optype,-1); 7 11566 res:= d.rad_op.resultat; 7 11567 if res=0 then 7 11568 begin 8 11569 d.opref.data(5):= 0; 8 11570 d.opref.data(6):= 3 shift 22 + 0 shift 20 + nr; 8 11571 d.opref.data(7):= kanal_tab.iaf.kanal_tilstand extract 10; 8 11572 res:= 3; 8 11573 end; 7 11574 end; 6 11575 end; 5 11576 \f 5 11576 message procedure radio side 9 - 880930/cl; 5 11577 if res=3 then 5 11578 begin 6 11579 if kanal_tab.iaf.kanal_tilstand shift (-16) = talevej then 6 11580 sætbiti(kanal_tab.iaf.kanal_tilstand,5,1) <* monbit *> 6 11581 else 6 11582 sætbit_ia(kanal_tab.iaf.kanal_mon_maske,talevej,1); 6 11583 d.opref.data(6):= 12 shift 20 + nr; 6 11584 i:= kanal_tab.iaf.kanal_id2; 6 11585 if i<>0 then 6 11586 begin 7 11587 if i shift (-20) = 12 then 7 11588 begin <* ident2 henviser til anden kanal *> 8 11589 iaf1:= ((i extract 20)-1)*kanalbeskrlængde; 8 11590 if kanal_tab.iaf1.kanal_tilstand shift (-16) = talevej then 8 11591 sætbiti(kanal_tab.iaf.kanal_tilstand,5,1) 8 11592 else 8 11593 sætbit_ia(kanal_tab.iaf.kanal_mon_maske,talevej,1); 8 11594 d.opref.data(5):= 12 shift 20 + i; 8 11595 end 7 11596 else 7 11597 d.opref.data(5):= 12 shift 20 + nr; 7 11598 end 6 11599 else 6 11600 d.opref.data(5):= 0; 6 11601 end; 5 11602 5 11602 if res<>3 then 5 11603 begin 6 11604 res:= 0; 6 11605 sætbit_ia(kanalflag,operatør,1); 6 11606 goto radio_nedlæg; 6 11607 end; 5 11608 d.opref.resultat:= res; 5 11609 signalch(d.opref.retur,opref,d.opref.optype); 5 11610 \f 5 11610 message procedure radio side 10 - 880930/cl; 5 11611 5 11611 end <* MONITERING *> 4 11612 else 4 11613 if opgave = 11 then <* GENNEMSTILLING *> 4 11614 begin 5 11615 nr:= d.opref.data(6) extract 20; 5 11616 k:= if d.opref.data(5) shift (-20) = 12 then 5 11617 d.opref.data(5) extract 20 5 11618 else 5 11619 0; 5 11620 inspect(ss_samtale_nedlagt(nr),i); 5 11621 if k<>0 then inspect(ss_samtale_nedlagt(k),j) else j:=0; 5 11622 if i<>0 and j<>0 then 5 11623 begin 6 11624 res:= hookon(talevej,rad_op,cs_radio(talevej)); 6 11625 goto radio_nedlæg; 6 11626 end; 5 11627 5 11627 iaf:= (nr-1)*kanal_beskr_længde; 5 11628 if kanal_tab.iaf.kanal_tilstand shift (-16) = talevej then 5 11629 begin 6 11630 if læsbiti(kanal_tab.iaf.kanal_tilstand,5) and 6 11631 kanal_tab.iaf.kanal_tilstand extract 2 = 3 6 11632 then 6 11633 res:= hookoff(talevej,rad_op,cs_radio(talevej),true) 6 11634 else 6 11635 if kanal_tab.iaf.kanal_tilstand extract 2 = 1 and 6 11636 d.opref.data(5)<>0 6 11637 then 6 11638 res:= 0 6 11639 else 6 11640 res:= 21; <* ingen at gennemstille til *> 6 11641 end 5 11642 else 5 11643 res:= 50; <* kanalnr *> 5 11644 5 11644 if res=0 then 5 11645 res:= hookon(talevej,rad_op,cs_radio(talevej)); 5 11646 if res=0 then 5 11647 begin 6 11648 sætbiti(kanal_tab.iaf.kanal_tilstand,5,0); 6 11649 kanal_tab.iaf.kanal_tilstand:= 6 11650 kanal_tab.iaf.kanal_tilstand shift (-2) shift 2 + 3; 6 11651 d.opref.data(6):= 0; 6 11652 if kanal_tab.iaf.kanal_id2=0 then 6 11653 kanal_tab.iaf.kanal_id2:= d.opref.data(5); 6 11654 6 11654 if kanal_tab.iaf.kanal_id2 shift (-22) = 3 then 6 11655 begin <* gennemstillet til anden kanal *> 7 11656 iaf1:= ((kanal_tab.iaf.kanal_id2 extract 20) - 1) 7 11657 *kanalbeskrlængde; 7 11658 sætbiti(kanal_tab.iaf1.kanal_tilstand,5,0); 7 11659 kanal_tab.iaf1.kanal_tilstand:= 7 11660 kanal_tab.iaf1.kanal_tilstand shift (-2) shift 2 + 3; 7 11661 if kanal_tab.iaf1.kanal_id2=0 then 7 11662 kanal_tab.iaf1.kanal_id2:= 12 shift 20 + nr; 7 11663 end; 6 11664 d.opref.data(5):= 0; 6 11665 6 11665 res:= 3; 6 11666 end; 5 11667 5 11667 d.opref.resultat:= res; 5 11668 signalch(d.opref.retur,opref,d.opref.optype); 5 11669 \f 5 11669 message procedure radio side 11 - 880930/cl; 5 11670 5 11670 end 4 11671 else 4 11672 if opgave = 12 then <* NEDLÆG *> 4 11673 begin 5 11674 res:= hookon(talevej,rad_op,cs_radio(talevej)); 5 11675 radio_nedlæg: 5 11676 if res=0 then 5 11677 begin 6 11678 for k:= 5, 6 do 6 11679 begin 7 11680 if d.opref.data(k) shift (-20) = 12 then 7 11681 begin 8 11682 i:= d.opref.data(k) extract 20; 8 11683 iaf:= (i-1)*kanalbeskrlængde; 8 11684 if kanal_tab.iaf.kanal_tilstand shift (-16) = talevej then 8 11685 frigiv_kanal(d.opref.data(k) extract 20) 8 11686 else 8 11687 sætbit_ia(kanal_tab.iaf.kanal_mon_maske,talevej,0); 8 11688 end 7 11689 else 7 11690 if d.opref.data(k) shift (-20) = 13 then 7 11691 begin 8 11692 for i:= 1 step 1 until max_antal_kanaler do 8 11693 if læsbiti(d.opref.data(k),i) then 8 11694 begin 9 11695 iaf:= (i-1)*kanalbeskrlængde; 9 11696 if kanal_tab.iaf.kanal_tilstand shift (-16) = talevej then 9 11697 frigiv_kanal(i) 9 11698 else 9 11699 sætbit_ia(kanal_tab.iaf.kanal_mon_maske,talevej,0); 9 11700 end; 8 11701 sætbit_ia(kanalflag,operatør,1); 8 11702 end; 7 11703 end; 6 11704 d.opref.data(5):= 0; 6 11705 d.opref.data(6):= 0; 6 11706 d.opref.data(9):= 0; 6 11707 res:= if opgave=12 then 3 else 49; 6 11708 end; 5 11709 d.opref.resultat:= res; 5 11710 signalch(d.opref.retur,opref,d.opref.optype); 5 11711 end 4 11712 else 4 11713 if opgave=13 then <* R *> 4 11714 begin 5 11715 startoperation(rad_op,410+talevej,cs_radio(talevej), 5 11716 'H' shift 12 + 60); 5 11717 d.rad_op.data(1):= talevej; 5 11718 d.rad_op.data(2):= 'M'; 5 11719 d.rad_op.data(3):= 0; <*tkt*> 5 11720 d.rad_op.data(4):= 0; <*tkn*> 5 11721 d.rad_op.data(5):= 1 - (d.opref.data(2) extract 1); 5 11722 signalch(cs_radio_ud,rad_op,rad_optype); 5 11723 <*V*> waitch(cs_radio(talevej),rad_op,rad_optype,-1); 5 11724 res:= d.rad_op.resultat; 5 11725 d.opref.resultat:= if res=0 then 3 else res; 5 11726 signalch(d.opref.retur,opref,d.opref.optype); 5 11727 end 4 11728 else 4 11729 if opgave=14 <* VENTEPOS *> then 4 11730 begin 5 11731 res:= 0; 5 11732 while (res<=3 and d.opref.data(2)>0) do 5 11733 begin 6 11734 nr:= d.opref.data(6) extract 20; 6 11735 k:= if d.opref.data(5) shift (-20) = 12 then 6 11736 d.opref.data(5) extract 20 6 11737 else 6 11738 0; 6 11739 inspect(ss_samtale_nedlagt(nr),i); 6 11740 if k<>0 then inspect(ss_samtale_nedlagt(k),j) else j:= 0; 6 11741 if i<>0 or j<>0 then 6 11742 begin 7 11743 res:= hookon(talevej,radop,cs_radio(talevej)); 7 11744 goto radio_nedlæg; 7 11745 end; 6 11746 6 11746 res:= hookoff(talevej,radop,cs_radio(talevej),true); 6 11747 6 11747 if res=0 then 6 11748 begin 7 11749 i:= d.opref.data(5); 7 11750 d.opref.data(5):= d.opref.data(6); 7 11751 d.opref.data(6):= i; 7 11752 res:= 3; 7 11753 end; 6 11754 6 11754 d.opref.data(2):= d.opref.data(2)-1; 6 11755 end; 5 11756 d.opref.resultat:= res; 5 11757 signalch(d.opref.retur,opref,d.opref.optype); 5 11758 end 4 11759 else 4 11760 begin 5 11761 fejlreaktion(2,opgave,<: radioopgave fra operatør:>,1); 5 11762 d.opref.resultat:= 31; 5 11763 signalch(d.opref.retur,opref,d.opref.optype); 5 11764 end; 4 11765 4 11765 end <* radiokommando fra operatør *> 3 11766 else 3 11767 begin 4 11768 4 11768 d.op_ref.resultat:= 45; <* ikke implementeret *> 4 11769 4 11769 signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype); 4 11770 4 11770 end; 3 11771 3 11771 until false; 3 11772 radio_trap: 3 11773 disable skriv_radio(zbillede,1); 3 11774 end radio; 2 11775 \f 2 11775 message procedure radio_ind side 1 - 810521/hko; 2 11776 2 11776 procedure radio_ind(op); 2 11777 value op; 2 11778 integer op; 2 11779 begin 3 11780 integer array field op_ref,ref,io_opref; 3 11781 integer ac, lgd, ttyp, ptyp, pnum, pos, tegn, bs, b_pt, b_pn, 3 11782 antal_sendt, antal_spec, sum, csum, i, j, k, filref, zno; 3 11783 integer array typ, val(1:6), answ, tlgr(1:32); 3 11784 integer array field spec; 3 11785 real field rf; 3 11786 long array field laf; 3 11787 3 11787 procedure skriv_radio_ind(zud,omfang); 3 11788 value omfang; 3 11789 zone zud; 3 11790 integer omfang; 3 11791 begin integer ii; 4 11792 disable ii:=write(zud,"nl",1,<:+++ radio-ind ::>); 4 11793 if omfang > 0 then 4 11794 disable begin integer x; long array field tx; 5 11795 tx:= 0; 5 11796 trap(slut); 5 11797 write(zud,"nl",1, 5 11798 <: op-ref: :>,op_ref,"nl",1, 5 11799 <: ref: :>,ref,"nl",1, 5 11800 <: io-opref: :>,io_opref,"nl",1, 5 11801 <: ac: :>,ac,"nl",1, 5 11802 <: lgd: :>,lgd,"nl",1, 5 11803 <: ttyp: :>,ttyp,"nl",1, 5 11804 <: ptyp: :>,ptyp,"nl",1, 5 11805 <: pnum: :>,pnum,"nl",1, 5 11806 <: pos: :>,pos,"nl",1, 5 11807 <: tegn: :>,tegn,"nl",1, 5 11808 <: bs: :>,bs,"nl",1, 5 11809 <: b-pt: :>,b_pt,"nl",1, 5 11810 <: b-pn: :>,b_pn,"nl",1, 5 11811 <: antal-sendt: :>,antal_sendt,"nl",1, 5 11812 <: antal-spec: :>,antal_spec,"nl",1, 5 11813 <: sum: :>,sum,"nl",1, 5 11814 <: csum: :>,csum,"nl",1, 5 11815 <: i: :>,i,"nl",1, 5 11816 <: j: :>,j,"nl",1, 5 11817 <: k: :>,k,"nl",1, 5 11818 <: filref :>,filref,"nl",1, 5 11819 <: zno: :>,zno,"nl",1, 5 11820 <: answ: :>,answ.tx,"nl",1, 5 11821 <: tlgr: :>,tlgr.tx,"nl",1, 5 11822 <: spec: :>,spec,"nl",1); 5 11823 trap(slut); 5 11824 slut: 5 11825 end; <*disable*> 4 11826 end skriv_radio_ind; 3 11827 \f 3 11827 message procedure indsæt_opkald side 1 - 811105/hko; 3 11828 3 11828 integer procedure indsæt_opkald(bus,type,omr,sig); 3 11829 value bus,type,omr,sig; 3 11830 integer bus,type,omr,sig; 3 11831 begin 4 11832 integer res,tilst,ll,operatør; 4 11833 integer array field vt_op,ref,næste,forrige; 4 11834 real r; 4 11835 4 11835 res:= -1; 4 11836 begin 5 11837 <*V*> waitch(cs_vt_adgang,vt_op,true,if type=2 then -1 else 10); 5 11838 if vt_op <> 0 then 5 11839 begin 6 11840 wait(bs_opkaldskø_adgang); 6 11841 if omr>2 then 6 11842 begin 7 11843 start_operation(vt_op,401,cs_radio_ind,14<*bus i kø*>); 7 11844 d.vt_op.data(1):= bus; 7 11845 d.vt_op.data(4):= omr; 7 11846 tilst:= vt_op; 7 11847 signal_ch(cs_vt,vt_op,gen_optype or vt_optype); 7 11848 <*V*> wait_ch(cs_radio_ind,vt_op,vt_optype,-1); 7 11849 <*+4*> if tilst <> vt_op then 7 11850 fejlreaktion(11<*fremmed post*>,vt_op,<:radio,indsæt opkald:>,0); 7 11851 <*-4*> 7 11852 <*+2*> if testbit34 and overvåget then 7 11853 disable begin 8 11854 write(out,"nl",1,<:radio_ind,indsæt.reservation retur:>); 8 11855 skriv_op(out,vt_op); 8 11856 ud; 8 11857 end; 7 11858 end 6 11859 else 6 11860 begin 7 11861 d.vt_op.data(1):= bus; 7 11862 d.vt_op.data(2):= 0; 7 11863 d.vt_op.data(3):= bus; 7 11864 d.vt_op.data(4):= omr; 7 11865 d.vt_op.resultat:= 0; 7 11866 ref:= første_nødopkald; 7 11867 if ref<>0 then tilst:= 2 7 11868 else 7 11869 begin 8 11870 ref:= første_opkald; 8 11871 tilst:= if ref=0 then 0 else 1; 8 11872 end; 7 11873 if tilst=0 then 7 11874 d.vt_op.resultat:= 3 7 11875 else 7 11876 begin 8 11877 while ref<>0 and d.vt_op.resultat=0 do 8 11878 begin 9 11879 if opkaldskø.ref(2) extract 14 = bus and 9 11880 opkaldskø.ref(5) extract 8 = omr 9 11881 then 9 11882 d.vt_op.resultat:= 18 9 11883 else 9 11884 begin 10 11885 ref:= opkaldskø.ref(1) extract 12; 10 11886 if ref=0 and tilst=2 then 10 11887 begin 11 11888 ref:= første_opkald; 11 11889 tilst:= if ref=0 then 0 else 1; 11 11890 end 10 11891 else 10 11892 if ref=0 then tilst:= 0; 10 11893 end; 9 11894 end; 8 11895 if d.vt_op.resultat=0 then d.vt_op.resultat:= 3; 8 11896 end; 7 11897 end; 6 11898 <*-2*> 6 11899 \f 6 11899 message procedure indsæt_opkald side 1a- 820301/hko; 6 11900 6 11900 if d.vt_op.resultat=18<*bus i kø*> and type=2<*nød*> then 6 11901 begin 7 11902 ref:=første_opkald; 7 11903 tilst:=-1; 7 11904 while ref<>0 and tilst=-1 do 7 11905 begin 8 11906 if opkaldskø.ref(2) extract 14 = bus extract 14 then 8 11907 begin <* udtag normalopkald *> 9 11908 næste:=opkaldskø.ref(1); 9 11909 forrige:=næste shift(-12); 9 11910 næste:=næste extract 12; 9 11911 if forrige<>0 then 9 11912 opkaldskø.forrige(1):= 9 11913 opkaldskø.forrige(1) shift(-12) shift 12 +næste 9 11914 else 9 11915 første_opkald:=næste; 9 11916 if næste<>0 then 9 11917 opkaldskø.næste(1):= 9 11918 opkaldskø.næste(1) extract 12 + forrige shift 12 9 11919 else 9 11920 sidste_opkald:=forrige; 9 11921 opkaldskø.ref(1):=første_frie_opkald; 9 11922 første_frie_opkald:=ref; 9 11923 opkaldskø_ledige:=opkaldskø_ledige +1; 9 11924 tilst:=0; 9 11925 end 8 11926 else 8 11927 ref:=opkaldskø.ref(1) extract 12; 8 11928 end; <*while*> 7 11929 if tilst=0 then 7 11930 d.vt_op.resultat:=3; 7 11931 end; <*nødopkald bus i kø*> 6 11932 \f 6 11932 message procedure indsæt_opkald side 2 - 820304/hko; 6 11933 6 11933 if d.vt_op.resultat = 3 then 6 11934 begin 7 11935 ll:= d.vt_op.data(2); 7 11936 tilst:= d.vt_op.data(3); 7 11937 læstegn(radio_linietabel,(ll shift (-12) extract 10)+1,operatør); 7 11938 if operatør < 0 or max_antal_operatører < operatør then 7 11939 operatør:= 0; 7 11940 if operatør=0 then 7 11941 operatør:= (tilst shift (-14) extract 8); 7 11942 if operatør=0 then 7 11943 operatør:= radio_områdetabel(d.vt_op.data(4) extract 8); 7 11944 if operatør=0 or -,læsbit_ia(operatørmaske,operatør) then 7 11945 tofrom(opkaldsflag,alle_operatører,op_maske_lgd) 7 11946 else sæt_bit_ia(opkaldsflag,operatør,1); 7 11947 ref:= første_frie_opkald; <* forudsættes <> 0 *> 7 11948 første_frie_opkald:=opkaldskø.ref(1) extract 12; <*hægt ud*> 7 11949 forrige:= (if type = 1 then sidste_opkald 7 11950 else sidste_nødopkald); 7 11951 opkaldskø.ref(1):= forrige shift 12; 7 11952 if type = 1 then 7 11953 begin 8 11954 if første_opkald = 0 then første_opkald:= ref; 8 11955 sidste_opkald:= ref; 8 11956 end 7 11957 else 7 11958 begin <*type = 2*> 8 11959 if første_nødopkald = 0 then første_nødopkald:= ref; 8 11960 sidste_nødopkald:= ref; 8 11961 end; 7 11962 if forrige <> 0 then 7 11963 opkaldskø.forrige(1):= opkaldskø.forrige(1) shift (-12) 7 11964 shift 12 +ref; 7 11965 7 11965 opkaldskø.ref(2):= tilst extract 22 add 7 11966 (if type=2 then 1 shift 23 else 0); 7 11967 opkaldskø.ref(3):= ll; 7 11968 systime(5,0.0,r); 7 11969 ll:= round r//100;<*ttmm*> 7 11970 opkaldskø.ref(4):= ll shift 12 +type shift 8 +operatør extract 8; 7 11971 opkaldskø.ref(5):= sig shift 20 + omr; 7 11972 tofrom(opkaldskø.ref.opkald_meldt,ingen_operatører,op_maske_lgd); 7 11973 res:= 0; 7 11974 if type=2 then nød_opkald_brugt:=nødopkald_brugt + 1; 7 11975 opkaldskø_ledige:= opkaldskø_ledige -1; 7 11976 <*meddel opkald til berørte operatører *> 7 11977 signal_bin(bs_mobil_opkald); 7 11978 tæl_opkald(omr,type+1); 7 11979 end <* resultat = 3 *> 6 11980 else 6 11981 begin 7 11982 \f 7 11982 message procedure indsæt_opkald side 3 - 810601/hko; 7 11983 7 11983 <* d.vt_op.resultat <> 3 *> 7 11984 7 11984 res:= d.vt_op.resultat; 7 11985 if res = 10 then 7 11986 fejlreaktion(20<*mobilopkald, bus *>,bus, 7 11987 <:er ikke i bustabel:>,1) 7 11988 else 7 11989 <*+4*> if res <> 14 and res <> 18 then 7 11990 fejlreaktion(19<*radio*>,res,<:busreservationsresultat:>,1); 7 11991 <*-4*> 7 11992 ; 7 11993 end; 6 11994 signalbin(bs_opkaldskø_adgang); 6 11995 signal_ch(cs_vt_adgang,vt_op,gen_optype or vt_optype); 6 11996 end 5 11997 else 5 11998 res:= -2; <*timeout for cs_vt_adgang*> 5 11999 end; 4 12000 indsæt_opkald:= res; 4 12001 end indsæt_opkald; 3 12002 \f 3 12002 message procedure afvent_telegram side 1 - 880901/cl; 3 12003 3 12003 integer procedure afvent_telegram(tlgr,lgd,ttyp,ptyp,pnum); 3 12004 integer array tlgr; 3 12005 integer lgd,ttyp,ptyp,pnum; 3 12006 begin 4 12007 integer i, pos, tegn, ac, sum, csum; 4 12008 4 12008 pos:= 1; 4 12009 lgd:= 0; 4 12010 ttyp:= 'Z'; 4 12011 <*V*> ac:= afvent_radioinput(z_fr_in,tlgr,false); 4 12012 if ac >= 0 then 4 12013 begin 5 12014 lgd:= 1; 5 12015 while læstegn(tlgr,lgd,tegn)<>0 do ; 5 12016 lgd:= lgd-2; 5 12017 if lgd >= 3 then 5 12018 begin 6 12019 i:= 1; 6 12020 ttyp:= læstegn(tlgr,i,tegn); 6 12021 ptyp:= læstegn(tlgr,i,tegn) - '@'; 6 12022 pnum:= læstegn(tlgr,i,tegn) - '@'; 6 12023 end 5 12024 else ac:= 6; <* for kort telegram - retransmitter *> 5 12025 end; 4 12026 4 12026 afvent_telegram:= ac; 4 12027 end; 3 12028 \f 3 12028 message procedure b_answ side 1 - 880901/cl; 3 12029 3 12029 procedure b_answ(answ,ht,spec,more,ac); 3 12030 value ht, more,ac; 3 12031 integer array answ, spec; 3 12032 boolean more; 3 12033 integer ht, ac; 3 12034 begin 4 12035 integer pos, i, sum, tegn; 4 12036 4 12036 pos:= 1; 4 12037 skrivtegn(answ,pos,'B'); 4 12038 skrivtegn(answ,pos,if more then 'B' else ' '); 4 12039 skrivtegn(answ,pos,ac+'@'); 4 12040 skrivtegn(answ,pos,spec(1) shift (-18) extract 6+'@'); 4 12041 skrivtegn(answ,pos,spec(1) shift (-12) extract 6+'@'); 4 12042 skrivtegn(answ,pos,'@'); 4 12043 skrivtegn(answ,pos,spec(1) shift (-8) extract 4+'@'); 4 12044 skrivtegn(answ,pos,spec(1) extract 8+'@'); 4 12045 for i:= 1 step 1 until spec(1) extract 8 do 4 12046 if spec(1+i)=0 then skrivtegn(answ,pos,'@') 4 12047 else 4 12048 begin 5 12049 skrivtegn(answ,pos,'D'); 5 12050 anbringtal(answ,pos,spec(1+i),-4); 5 12051 end; 4 12052 for i:= 1 step 1 until 4 do 4 12053 skrivtegn(answ,pos,'@'); 4 12054 skrivtegn(answ,pos,ht+'@'); 4 12055 skrivtegn(answ,pos,'@'); 4 12056 4 12056 i:= 1; sum:= 0; 4 12057 while i < pos do 4 12058 sum:= (sum + læstegn(answ,i,tegn)) mod 256; 4 12059 skrivtegn(answ,pos,(sum shift (-4)) extract 4 + '@'); 4 12060 skrivtegn(answ,pos,sum extract 4 + '@'); 4 12061 repeat skrivtegn(answ,pos,0) until (pos mod 6)=1; 4 12062 end; 3 12063 \f 3 12063 message procedure ann_opkald side 1 - 881108/cl; 3 12064 3 12064 integer procedure ann_opkald(vogn,omr); 3 12065 value vogn,omr; 3 12066 integer vogn,omr; 3 12067 begin 4 12068 integer array field vt_op,ref,næste,forrige; 4 12069 integer res, t, i, o; 4 12070 4 12070 waitch(cs_vt_adgang,vt_op,true,-1); 4 12071 res:= -1; 4 12072 wait(bs_opkaldskø_adgang); 4 12073 ref:= første_nødopkald; 4 12074 if ref <> 0 then 4 12075 t:= 2 4 12076 else 4 12077 begin 5 12078 ref:= første_opkald; 5 12079 t:= if ref<>0 then 1 else 0; 5 12080 end; 4 12081 4 12081 if t=0 then 4 12082 res:= 19 <* kø tom *> 4 12083 else 4 12084 begin 5 12085 while ref<>0 and res=(-1) do 5 12086 begin 6 12087 if vogn=opkaldskø.ref(2) extract 14 and 6 12088 omr=opkaldskø.ref(5) extract 8 6 12089 then 6 12090 res:= 0 6 12091 else 6 12092 begin 7 12093 ref:= opkaldskø.ref(1) extract 12; 7 12094 if ref=0 and t=2 then 7 12095 begin 8 12096 ref:= første_opkald; 8 12097 t:= if ref=0 then 0 else 1; 8 12098 end; 7 12099 end; 6 12100 end; <*while*> 5 12101 \f 5 12101 message procedure ann_opkald side 2 - 881108/cl; 5 12102 5 12102 if ref<>0 then 5 12103 begin 6 12104 start_operation(vt_op,401,cs_radio_ind,17); 6 12105 d.vt_op.data(1):= vogn; 6 12106 d.vt_op.data(4):= omr; 6 12107 signalch(cs_vt,vt_op,gen_optype or vt_optype); 6 12108 waitch(cs_radio_ind,vt_op,vt_optype,-1); 6 12109 6 12109 o:= opkaldskø.ref(4) extract 8; 6 12110 næste:= opkaldskø.ref(1); 6 12111 forrige:= næste shift (-12); 6 12112 næste:= næste extract 12; 6 12113 if forrige<>0 then 6 12114 opkaldskø.forrige(1):= opkaldskø.forrige(1) shift (-12) shift 12 6 12115 + næste 6 12116 else 6 12117 if t=2 then første_nødopkald:= næste 6 12118 else første_opkald:= næste; 6 12119 6 12119 if næste<>0 then 6 12120 opkaldskø.næste(1):= opkaldskø.næste(1) extract 12 6 12121 + forrige shift 12 6 12122 else 6 12123 if t=2 then sidste_nødopkald:= forrige 6 12124 else sidste_opkald:= forrige; 6 12125 6 12125 opkaldskø.ref(1):= første_frie_opkald; 6 12126 første_frie_opkald:= ref; 6 12127 opkaldskø_ledige:= opkaldskø_ledige + 1; 6 12128 if t=2 then nødopkald_brugt:= nødopkald_brugt - 1; 6 12129 6 12129 if -, læsbit_ia(operatør_maske,o) or o=0 then 6 12130 tofrom(opkaldsflag,alle_operatører,op_maske_lgd) 6 12131 else 6 12132 begin 7 12133 sætbit_ia(opkaldsflag,o,1); 7 12134 end; 6 12135 signalbin(bs_mobilopkald); 6 12136 end; 5 12137 end; 4 12138 4 12138 signalbin(bs_opkaldskø_adgang); 4 12139 signalch(cs_vt_adgang, vt_op, true); 4 12140 ann_opkald:= res; 4 12141 end; 3 12142 \f 3 12142 message procedure frigiv_id side 1 - 881114/cl; 3 12143 3 12143 integer procedure frigiv_id(id,omr); 3 12144 value id,omr; 3 12145 integer id,omr; 3 12146 begin 4 12147 integer array field vt_op; 4 12148 4 12148 if id shift (-22) < 3 and omr > 2 then 4 12149 begin 5 12150 waitch(cs_vt_adgang,vt_op,true,-1); 5 12151 start_operation(vt_op,401,cs_radio_ind, 5 12152 if id shift (-22) = 2 then 18 else 17); 5 12153 d.vt_op.data(1):= id; 5 12154 d.vt_op.data(4):= omr; 5 12155 signalch(cs_vt,vt_op,vt_optype or gen_optype); 5 12156 waitch(cs_radio_ind,vt_op,vt_optype,-1); 5 12157 frigiv_id:= d.vt_op.resultat; 5 12158 signalch(cs_vt_adgang,vt_op,true); 5 12159 end; 4 12160 end; 3 12161 \f 3 12161 message procedure radio_ind side 2 - 810524/hko; 3 12162 trap(radio_ind_trap); 3 12163 laf:= 0; 3 12164 stack_claim((if cm_test then 200 else 150) +135+75); 3 12165 3 12165 <*+2*>if testbit32 and overvåget or testbit28 then 3 12166 skriv_radio_ind(out,0); 3 12167 <*-2*> 3 12168 answ.laf(1):= long<:<'nl'>:>; 3 12169 io_opref:= op; 3 12170 3 12170 repeat 3 12171 ac:= afvent_telegram(tlgr,lgd,ttyp,ptyp,pnum); 3 12172 pos:= 4; 3 12173 if ac = 0 then 3 12174 begin 4 12175 \f 4 12175 message procedure radio_ind side 3 - 881107/cl; 4 12176 if ttyp = 'A' then 4 12177 begin 5 12178 if ptyp<>4 or pnum<1 or pnum>max_antal_taleveje then 5 12179 ac:= 1 5 12180 else 5 12181 begin 6 12182 typ(1):= 1 shift 12 + (opkode - 1); <* eq shortint opgave *> 6 12183 val(1):= ttyp; 6 12184 typ(2):= 2 shift 12 + (data + 2); <* eq integer data(1) *> 6 12185 val(2):= pnum; 6 12186 typ(3):= -1; 6 12187 getch(cs_radio_ind,opref,rad_optype,typ,val); 6 12188 if opref>0 then 6 12189 begin 7 12190 if læstegn(tlgr,pos,tegn)<>'@' <*BST*> or 7 12191 læstegn(tlgr,pos,tegn)<>'A' <*PET*> or 7 12192 læstegn(tlgr,pos,tegn)<>d.opref.data(2)+'@' <*CTYP*> or 7 12193 læstegn(tlgr,pos,tegn)<>'@' <*TNO*> 7 12194 then 7 12195 begin 8 12196 ac:= 1; d.opref.resultat:= 31; <* systemfejl *> 8 12197 end 7 12198 else 7 12199 begin 8 12200 ac:= 0; 8 12201 d.opref.resultat:= 0; 8 12202 sætbit_ia(hookoff_maske,pnum,1); 8 12203 end; 7 12204 signalch(d.opref.retur,opref,d.opref.optype); 7 12205 end 6 12206 else 6 12207 ac:= 2; 6 12208 end; 5 12209 pos:= 1; 5 12210 skrivtegn(answ,pos,'A'); 5 12211 skrivtegn(answ,pos,' '); 5 12212 skrivtegn(answ,pos,ac+'@'); 5 12213 for i:= 1 step 1 until 5 do 5 12214 skrivtegn(answ,pos,'@'); 5 12215 skrivtegn(answ,pos,'0'); 5 12216 i:= 1; sum:= 0; 5 12217 while i < pos do 5 12218 sum:= (sum + læstegn(answ,i,tegn)) mod 256; 5 12219 skrivtegn(answ,pos,sum shift (-4) extract 4 + '@'); 5 12220 skrivtegn(answ,pos,sum extract 4 + '@'); 5 12221 repeat afsluttext(answ,pos) until pos mod 6 = 1; 5 12222 write(z_fr_out,"nl",1,answ.laf,"cr",1); 5 12223 <*+2*> if (testbit36 or testbit38) and overvåget then 5 12224 disable begin 6 12225 write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf); 6 12226 outchar(zrl,'nl'); 6 12227 end; 5 12228 <*-2*> 5 12229 disable setposition(z_fr_out,0,0); 5 12230 ac:= -1; 5 12231 \f 5 12231 message procedure radio_ind side 4 - 881107/cl; 5 12232 end <* ttyp=A *> 4 12233 else 4 12234 if ttyp = 'B' then 4 12235 begin 5 12236 if ptyp<>4 or pnum<1 or pnum>max_antal_taleveje then 5 12237 ac:= 1 5 12238 else 5 12239 begin 6 12240 typ(1):= 1 shift 12 + (opkode-1); val(1):= 'B'; 6 12241 typ(2):= 2 shift 12 + (data+2); val(2):= pnum; 6 12242 typ(3):= -1; 6 12243 getch(cs_radio_ind,opref,rad_optype,typ,val); 6 12244 if opref > 0 then 6 12245 begin 7 12246 <*+2*> if testbit37 and overvåget then 7 12247 disable begin 8 12248 skriv_radio_ind(out,0); 8 12249 write(out,<:radio-ind B-op udtaget fra cs:>,<<d>,cs_radio_ind); 8 12250 skriv_op(out,opref); 8 12251 end; 7 12252 <*-2*> 7 12253 læstegn(tlgr,pos,bs); 7 12254 if bs = 'V' then 7 12255 begin 8 12256 b_pt:= læstegn(tlgr,pos,tegn) - '@'; 8 12257 b_pn:= læstegn(tlgr,pos,tegn) - '@'; 8 12258 end; 7 12259 if bs<>'Z' and bs<>d.opref.data(2) or bs='V' and 7 12260 (b_pt<>d.opref.data(10) shift (-18) extract 6 or 7 12261 b_pn<>d.opref.data(10) shift (-12) extract 6) 7 12262 then 7 12263 begin 8 12264 ac:= 1; 8 12265 d.opref.resultat:= 31; <* systemfejl *> 8 12266 signalch(d.opref.retur,opref,d.opref.optype); 8 12267 end 7 12268 else 7 12269 if bs='V' then 7 12270 begin 8 12271 ac:= 0; 8 12272 d.opref.resultat:= 1; 8 12273 d.opref.data(4):= 0; 8 12274 d.opref.data(7):= 8 12275 1 shift (if b_pt=2 then pabx_id(b_pn) else 8 12276 radio_id(b_pn)); 8 12277 systime(1,0.0,d.opref.tid); 8 12278 signalch(cs_radio_ind,opref,d.opref.optype); 8 12279 spec:= data+18; 8 12280 b_answ(answ,0,d.opref.spec,false,ac); 8 12281 <*+2*> if (testbit36 or testbit38) and overvåget then 8 12282 disable begin 9 12283 write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf); 9 12284 outchar(zrl,'nl'); 9 12285 end; 8 12286 <*-2*> 8 12287 write(z_fr_out,"nl",1,answ.laf,"cr",1); 8 12288 disable setposition(z_fr_out,0,0); 8 12289 ac:= -1; 8 12290 \f 8 12290 message procedure radio_ind side 5 - 881107/cl; 8 12291 end 7 12292 else 7 12293 begin 8 12294 integer sig_type; 8 12295 8 12295 ac:= 0; 8 12296 antal_spec:= d.opref.data(4); 8 12297 filref:= d.opref.data(5); 8 12298 spec:= d.opref.data(6); 8 12299 if antal_spec>0 then 8 12300 begin 9 12301 antal_spec:= antal_spec-1; 9 12302 if filref<>0 then 9 12303 begin 10 12304 læsfil(filref,1,zno); 10 12305 b_pt:= fil(zno).spec(1) shift (-12); 10 12306 sig_type:= fil(zno).spec(1) shift (-8) extract 4; 10 12307 b_answ(answ,d.opref.data(3),fil(zno).spec, 10 12308 antal_spec>0,ac); 10 12309 spec:= spec + (fil(zno).spec(1) extract 8 + 1)*2; 10 12310 end 9 12311 else 9 12312 begin 10 12313 b_pt:= d.opref.spec(1) shift (-12); 10 12314 sig_type:= d.opref.spec(1) shift (-8) extract 4; 10 12315 b_answ(answ,d.opref.data(3),d.opref.spec, 10 12316 antal_spec>0,ac); 10 12317 spec:= spec + d.opref.spec(1) extract 8*2 + 2; 10 12318 end; 9 12319 9 12319 <* send answer *> 9 12320 <*+2*> if (testbit36 or testbit38) and overvåget then 9 12321 disable begin 10 12322 write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf); 10 12323 outchar(zrl,'nl'); 10 12324 end; 9 12325 <*-2*> 9 12326 write(z_fr_out,"nl",1,answ.laf,"cr",1); 9 12327 disable setposition(z_fr_out,0,0); 9 12328 if ac<>0 then 9 12329 begin 10 12330 antal_spec:= 0; 10 12331 ac:= -1; 10 12332 end 9 12333 else 9 12334 begin 10 12335 for i:= 1 step 1 until max_antal_områder do 10 12336 if område_id(i,2)=b_pt then 10 12337 begin 11 12338 j:= (if b_pt=3 and sig_type=2 then 0 else i); 11 12339 if sætbiti(d.opref.data(7),j,1)=0 then 11 12340 d.opref.resultat:= d.opref.resultat + 1; 11 12341 end; 10 12342 end; 9 12343 end; 8 12344 \f 8 12344 message procedure radio_ind side 6 - 881107/cl; 8 12345 8 12345 <* afvent nyt telegram *> 8 12346 d.opref.data(4):= antal_spec; 8 12347 d.opref.data(6):= spec; 8 12348 ac:= -1; 8 12349 systime(1,0.0,d.opref.tid); 8 12350 <*+2*> if testbit37 and overvåget then 8 12351 disable begin 9 12352 skriv_radio_ind(out,0); 9 12353 write(out,<:radio-ind B-op retur på cs:>,<<d>,cs_radio_ind); skriv_op(out,opref); 9 12354 ud; 9 12355 end; 8 12356 <*-2*> 8 12357 signalch(cs_radio_ind,opref,d.opref.optype); 8 12358 end; 7 12359 end 6 12360 else ac:= 2; 6 12361 end; 5 12362 if ac > 0 then 5 12363 begin 6 12364 for i:= 1 step 1 until 6 do val(i):= 0; 6 12365 b_answ(answ,0,val,false,ac); 6 12366 <*+2*> 6 12367 if (testbit36 or testbit38) and overvåget then 6 12368 disable begin 7 12369 write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf); 7 12370 outchar(zrl,'nl'); 7 12371 end; 6 12372 <*-2*> 6 12373 write(z_fr_out,"nl",1,answ.laf,"cr",1); 6 12374 disable setposition(z_fr_out,0,0); 6 12375 ac:= -1; 6 12376 end; 5 12377 \f 5 12377 message procedure radio_ind side 7 - 881107/cl; 5 12378 end <* ttyp = 'B' *> 4 12379 else 4 12380 if ttyp='C' or ttyp='J' then 4 12381 begin 5 12382 if ptyp<>4 or pnum<1 or pnum>max_antal_taleveje then 5 12383 ac:= 1 5 12384 else 5 12385 begin 6 12386 typ(1):= 1 shift 12 + (opkode - 1); val(1):= 'B'; 6 12387 typ(2):= 2 shift 12 + (data + 2); val(2):= pnum; 6 12388 typ(3):= -1; 6 12389 getch(cs_radio_ind,opref,rad_optype,typ,val); 6 12390 if opref > 0 then 6 12391 begin 7 12392 d.opref.resultat:= d.opref.resultat - 1; 7 12393 if ttyp = 'C' then 7 12394 begin 8 12395 b_pt:= læstegn(tlgr,4,tegn)-'@'; <* ????? *> 8 12396 b_pn:= læstegn(tlgr,5,tegn)-'@'; <* ????? *> 8 12397 j:= 0; 8 12398 for i:= 1 step 1 until max_antal_kanaler do 8 12399 if kanal_id(i)=b_pt shift 5 + b_pn then j:= i; 8 12400 if kanal_til_omr(j)=3 and d.opref.resultat>0 then 8 12401 d.opref.resultat:= d.opref.resultat-1; 8 12402 sætbiti(optaget_flag,j,1); 8 12403 sætbiti(d.opref.data(9),j,1); 8 12404 end 7 12405 else 7 12406 begin <* INGEN FORBINDELSE *> 8 12407 sætbiti(d.opref.data(8),læstegn(tlgr,4,tegn)-'@',1); 8 12408 end; 7 12409 ac:= 0; 7 12410 if d.opref.resultat<>0 or d.opref.data(4)<>0 then 7 12411 begin 8 12412 systime(1,0,d.opref.tid); 8 12413 signal_ch(cs_radio_ind,opref,d.opref.op_type); 8 12414 end 7 12415 else 7 12416 begin 8 12417 d.opref.resultat:= if d.opref.data(9)<>0 then 0 else 8 12418 if læsbiti(d.opref.data(8),9) then 52 else 8 12419 if læsbiti(d.opref.data(8),10) then 20 else 8 12420 if læsbiti(d.opref.data(8),2) then 52 else 59; 8 12421 signalch(d.opref.retur, opref, d.opref.optype); 8 12422 end; 7 12423 end 6 12424 else 6 12425 ac:= 2; 6 12426 end; 5 12427 pos:= 1; 5 12428 skrivtegn(answ,pos,ttyp); 5 12429 skrivtegn(answ,pos,' '); 5 12430 skrivtegn(answ,pos,ac+'@'); 5 12431 i:= 1; sum:= 0; 5 12432 while i < pos do 5 12433 sum:= (sum + læstegn(answ,i,tegn)) mod 256; 5 12434 skrivtegn(answ,pos,sum shift (-4) + '@'); 5 12435 skrivtegn(answ,pos,sum extract 4 + '@'); 5 12436 repeat afsluttext(answ,pos) until pos mod 6 = 1; 5 12437 <*+2*> if (testbit36 or testbit38) and overvåget then 5 12438 disable begin 6 12439 write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf); 6 12440 outchar(zrl,'nl'); 6 12441 end; 5 12442 <*-2*> 5 12443 write(z_fr_out,"nl",1,answ.laf,"cr",1); 5 12444 disable setposition(z_fr_out,0,0); 5 12445 ac:= -1; 5 12446 \f 5 12446 message procedure radio_ind side 8 - 881107/cl; 5 12447 end <* ttyp = 'C' or 'J' *> 4 12448 else 4 12449 if ttyp = 'D' then 4 12450 begin 5 12451 if ptyp = 4 <* VDU *> then 5 12452 begin 6 12453 if pnum<1 or pnum>max_antal_taleveje then 6 12454 ac:= 1 6 12455 else 6 12456 begin 7 12457 inspect(bs_talevej_udkoblet(pnum),j); 7 12458 if j>=0 then 7 12459 begin 8 12460 sætbit_ia(samtaleflag,pnum,1); 8 12461 signal_bin(bs_mobil_opkald); 8 12462 end; 7 12463 if læsbit_ia(hookoff_maske,pnum) then 7 12464 signalbin(bs_talevej_udkoblet(pnum)); 7 12465 ac:= 0; 7 12466 end 6 12467 end 5 12468 else 5 12469 if ptyp=3 or ptyp=2 then 5 12470 begin 6 12471 if ptyp=3 and (pnum<1 or max_antal_radiokanaler<pnum) or 6 12472 ptyp=2 and pnum<>2 6 12473 then 6 12474 ac:= 1 6 12475 else 6 12476 begin 7 12477 if læstegn(tlgr,5,tegn)='D' then 7 12478 begin <* teknisk nr i telegram *> 8 12479 b_pn:= 0; 8 12480 for i:= 1 step 1 until 4 do 8 12481 b_pn:= b_pn*10 + læstegn(tlgr,5+i,tegn)-'0'; 8 12482 end 7 12483 else 7 12484 b_pn:= 0; 7 12485 b_pt:= port_til_omr(ptyp shift 6 + pnum); 7 12486 i:= 0; 7 12487 for j:= 1 step 1 until max_antal_kanaler do 7 12488 if kanal_id(j) = ptyp shift 5 + pnum then i:= j; 7 12489 if i<>0 then 7 12490 begin 8 12491 ref:= (i-1)*kanalbeskrlængde; 8 12492 inspect(ss_samtale_nedlagt(i),j); 8 12493 if j>=0 then 8 12494 begin 9 12495 sætbit_ia(samtaleflag, 9 12496 tv_operatør(kanal_tab.ref.kanal_tilstand shift (-16)),1); 9 12497 signalbin(bs_mobil_opkald); 9 12498 end; 8 12499 signal(ss_samtale_nedlagt(i)); 8 12500 if b_pn<>0 then frigiv_id(b_pn,b_pt); 8 12501 begin 9 12502 if kanal_tab.ref.kanal_id1<>0 and 9 12503 (kanal_tab.ref.kanal_id1 shift (-22)<>0 or 9 12504 kanal_tab.ref.kanal_id1 extract 14<>b_pn) then 9 12505 frigiv_id(kanal_tab.ref.kanal_id1,b_pt); 9 12506 if kanal_tab.ref.kanal_id2<>0 and 9 12507 (kanal_tab.ref.kanal_id2 shift (-22)<>0 or 9 12508 kanal_tab.ref.kanal_id2 extract 14<>b_pn) then 9 12509 frigiv_id(kanal_tab.ref.kanal_id2,b_pt); 9 12510 end; 8 12511 sætbiti(optaget_flag,i,0); 8 12512 end; 7 12513 ac:= 0; 7 12514 end; 6 12515 end 5 12516 else ac:= 1; 5 12517 if ac>=0 then 5 12518 begin 6 12519 pos:= i:= 1; sum:= 0; 6 12520 skrivtegn(answ,pos,'D'); 6 12521 skrivtegn(answ,pos,' '); 6 12522 skrivtegn(answ,pos,ac+'@'); 6 12523 skrivtegn(answ,pos,'@'); 6 12524 while i<pos do 6 12525 sum:= (sum + læstegn(answ,i,tegn)) mod 256; 6 12526 skrivtegn(answ,pos, sum shift (-4) extract 4 + '@'); 6 12527 skrivtegn(answ,pos, sum extract 4 + '@'); 6 12528 repeat afsluttext(answ,pos) until pos mod 6 = 1; 6 12529 <*+2*> 6 12530 if (testbit36 or testbit38) and overvåget then 6 12531 disable begin 7 12532 write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf); 7 12533 outchar(zrl,'nl'); 7 12534 end; 6 12535 <*-2*> 6 12536 write(z_fr_out,"nl",1,answ.laf,"cr",1); 6 12537 disable setposition(z_fr_out,0,0); 6 12538 ac:= -1; 6 12539 end; 5 12540 \f 5 12540 message procedure radio_ind side 9 - 881107/cl; 5 12541 end <* ttyp = D *> 4 12542 else 4 12543 if ttyp='H' then 4 12544 begin 5 12545 integer htyp; 5 12546 5 12546 htyp:= læstegn(tlgr,7+læstegn(tlgr,6,tegn)-'@',tegn); 5 12547 5 12547 if htyp='A' then 5 12548 begin <*mobilopkald*> 6 12549 if (ptyp=2 and pnum<>2) or (ptyp=3 and 6 12550 (pnum<1 or pnum>max_antal_radiokanaler)) then 6 12551 ac:= 1 6 12552 else 6 12553 begin 7 12554 b_pt:= læstegn(tlgr,5,tegn)-'@'; 7 12555 if læstegn(tlgr,6,tegn)='D' then 7 12556 begin <*teknisk nr. i telegram*> 8 12557 b_pn:= 0; 8 12558 for i:= 1 step 1 until 4 do 8 12559 b_pn:= b_pn*10 + læstegn(tlgr,6+i,tegn)-'0'; 8 12560 end 7 12561 else b_pn:= 0; 7 12562 bs:= læstegn(tlgr,9+læstegn(tlgr,6,tegn)-'@',tegn)-'@'+1; 7 12563 <* opkaldstype *> 7 12564 j:= (if ptyp=2 then pabx_id(pnum) else radio_id(pnum)); 7 12565 if j>0 then 7 12566 begin 8 12567 if bs=10 then 8 12568 ann_opkald(b_pn,j) 8 12569 else 8 12570 indsæt_opkald(b_pn,bs,j,if b_pt>1 then 1 else 0); 8 12571 ac:= 0; 8 12572 end else ac:= 1; 7 12573 end; 6 12574 \f 6 12574 message procedure radio_ind side 10 - 881107/cl; 6 12575 end 5 12576 else 5 12577 if htyp='E' then 5 12578 begin <* radiokanal status *> 6 12579 long onavn; 6 12580 6 12580 ac:= 0; 6 12581 j:= 0; 6 12582 for i:= 1 step 1 until max_antal_kanaler do 6 12583 if kanal_id(i) = ptyp shift 5 + pnum then j:= i; 6 12584 6 12584 <* Alarmer for K12 = GLX ignoreres *> 6 12585 <* 94.06.14/CL *> 6 12586 <* Alarmer for K15 = HG ignoreres *> 6 12587 <* 95.07.31/CL *> 6 12588 <* Alarmer for K10 = FS ignoreres *> 6 12589 <* 96.05.27/CL *> 6 12590 if j>0 then 6 12591 begin 7 12592 onavn:= områdenavn(port_til_omr(ptyp shift 6 + pnum)); 7 12593 j:= (if (onavn = long<:GLX:>) or (onavn = long<:HG:>) or 7 12594 (onavn = long<:FS:>) then 0 else j); 7 12595 end; 6 12596 6 12596 læstegn(tlgr,9,tegn); 6 12597 if j<>0 and (tegn='A' or tegn='E') then 6 12598 begin 7 12599 ref:= (j-1)*kanalbeskrlængde; 7 12600 bs:= if tegn='E' then 0 else 15; 7 12601 if bs<>sæt_hex_ciffer(kanal_tab.ref,3,bs) then 7 12602 begin 8 12603 tofrom(kanalflag,alle_operatører,op_maske_lgd); 8 12604 signalbin(bs_mobil_opkald); 8 12605 end; 7 12606 end; 6 12607 if tegn<>'A' and tegn<>'E' and j<>0 then 6 12608 begin 7 12609 waitch(cs_radio_pulje,opref,true,-1); 7 12610 startoperation(opref,401,cs_radio_pulje,23); 7 12611 i:= 1; 7 12612 hægtstring(d.opref.data,i,<:radiofejl :>); 7 12613 if læstegn(tlgr,4,k)<>'@' then 7 12614 begin 8 12615 if k-'@' = 17 then 8 12616 hægtstring(d.opref.data,i,<: AMV:>) 8 12617 else 8 12618 if k-'@' = 18 then 8 12619 hægtstring(d.opref.data,i,<: BHV:>) 8 12620 else 8 12621 begin 9 12622 hægtstring(d.opref.data,i,<: BST:>); 9 12623 anbringtal(d.opref.data,i,k-'@',1); 9 12624 end; 8 12625 end; 7 12626 skrivtegn(d.opref.data,i,' '); 7 12627 hægtstring(d.opref.data,i,string kanal_navn(j)); 7 12628 skrivtegn(d.opref.data,i,' '); 7 12629 hægtstring(d.opref.data,i, 7 12630 string område_navn(kanal_til_omr(j))); 7 12631 if '@'<=tegn and tegn<='F' then 7 12632 hægtstring(d.opref.data,i,case (tegn-'@'+1) of ( 7 12633 <*@*> <:: ukendt fejl:>, 7 12634 <*A*> <:: compad-fejl:>, 7 12635 <*B*> <:: ladefejl:>, 7 12636 <*C*> <:: dør åben:>, 7 12637 <*D*> <:: senderfejl:>, 7 12638 <*E*> <:: compad ok:>, 7 12639 <*F*> <:: liniefejl:>, 7 12640 <::>)) 7 12641 else 7 12642 begin 8 12643 hægtstring(d.opref.data,i,<:: fejlkode :>); 8 12644 skrivtegn(d.opref.data,i,tegn); 8 12645 end; 7 12646 repeat afsluttext(d.opref.data,i) until i mod 6 = 1; 7 12647 signalch(cs_io,opref,gen_optype or rad_optype); 7 12648 ref:= (j-1)*kanalbeskrlængde; 7 12649 tofrom(kanal_tab.ref.kanal_alarm,alle_operatører,op_maske_lgd); 7 12650 tofrom(kanalflag,alle_operatører,op_maske_lgd); 7 12651 signalbin(bs_mobilopkald); 7 12652 end; 6 12653 \f 6 12653 message procedure radio_ind side 11 - 881107/cl; 6 12654 end 5 12655 else 5 12656 if htyp='G' then 5 12657 begin <* fjerninkludering/-ekskludering af område *> 6 12658 bs:= læstegn(tlgr,9,tegn)-'@'; 6 12659 j:= 0; 6 12660 for i:= 1 step 1 until max_antal_kanaler do 6 12661 if kanal_id(i) = ptyp shift 5 + pnum then j:= i; 6 12662 if j<>0 then 6 12663 begin 7 12664 ref:= (j-1)*kanalbeskrlængde; 7 12665 sætbiti(kanal_tab.ref.kanal_tilstand,11,bs extract 1); 7 12666 end; 6 12667 tofrom(kanalflag,alle_operatører,op_maske_lgd); 6 12668 signalbin(bs_mobilopkald); 6 12669 ac:= 0; 6 12670 end 5 12671 else 5 12672 if htyp='L' then 5 12673 begin <* vogntabelændringer *> 6 12674 long field ll; 6 12675 6 12675 ll:= 10; 6 12676 ac:= 0; 6 12677 zno:= port_til_omr(ptyp shift 6 + pnum); 6 12678 læstegn(tlgr,9,tegn); 6 12679 if (tegn='N') or (tegn='O') then 6 12680 begin 7 12681 typ(1):= 1 shift 12 + (opkode-1); val(1):= 'H'; 7 12682 typ(2):= -1; 7 12683 getch(cs_radio_ind,opref,rad_optype,typ,val); 7 12684 if opref>0 then 7 12685 begin 8 12686 d.opref.resultat:= if tegn='N' then 3 else 60; 8 12687 signalch(d.opref.retur,opref,d.opref.optype); 8 12688 end; 7 12689 ac:= -1; 7 12690 end 6 12691 else 6 12692 if (tegn='G') and (tlgr.ll=(long<:FFFFF:> add 'F')) then 6 12693 ac:= -1 6 12694 else 6 12695 if tegn='G' then <*indkodning*> 6 12696 begin 7 12697 pos:= 10; i:= 0; 7 12698 while læstegn(tlgr,pos,tegn)>='0' and tegn<='9' and pos<=14 do 7 12699 i:= i*10 + (tegn-'0'); 7 12700 i:= i mod 1000; 7 12701 b_pn:= (1 shift 22) + (i shift 12); 7 12702 if pos=14 and 'A'<=tegn and tegn<='Å' then 7 12703 b_pn:= b_pn + ((tegn-'@') shift 7); 7 12704 pos:= 14; i:= 0; 7 12705 while læstegn(tlgr,pos,tegn)>='0' and tegn<='9' and pos<=16 do 7 12706 i:= i*10 + (tegn-'0'); 7 12707 b_pn:= b_pn + i; 7 12708 pos:= 16; i:= 0; 7 12709 while læstegn(tlgr,pos,tegn)>='0' and tegn<='9' and pos<=20 do 7 12710 i:= i*10 + (tegn-'0'); 7 12711 b_pt:= i; 7 12712 bs:= 11; 7 12713 \f 7 12713 message procedure radio_ind side 12 - 881107/cl; 7 12714 end 6 12715 else 6 12716 if tegn='H' then <*udkodning*> 6 12717 begin 7 12718 pos:= 10; i:= 0; 7 12719 while læstegn(tlgr,pos,tegn)>='0' and tegn<='9' and pos<=14 do 7 12720 i:= i*10 + (tegn-'0'); 7 12721 b_pt:= i; 7 12722 b_pn:= 0; 7 12723 bs:= 12; 7 12724 end 6 12725 else 6 12726 if tegn='I' then <*slet tabel*> 6 12727 begin 7 12728 b_pt:= 1; b_pn:= 999; bs:= 19; 7 12729 pos:= 10; i:= 0; 7 12730 i:= hex_to_dec(læstegn(tlgr,pos,tegn))*16 + 7 12731 hex_to_dec(læstegn(tlgr,pos,tegn)); 7 12732 zno:= i; 7 12733 end 6 12734 else ac:= 2; 6 12735 if ac<0 then 6 12736 ac:= 0 6 12737 else 6 12738 6 12738 if ac=0 then 6 12739 begin 7 12740 waitch(cs_vt_adgang,opref,true,-1); 7 12741 startoperation(opref,401,cs_vt_adgang,bs); 7 12742 d.opref.data(1):= b_pt; 7 12743 d.opref.data(2):= b_pn; 7 12744 d.opref.data(if bs=19 then 3 else 4):= zno; 7 12745 signalch(cs_vt,opref,gen_optype or vt_optype); 7 12746 end; 6 12747 end 5 12748 else 5 12749 ac:= 2; 5 12750 5 12750 pos:= 1; 5 12751 skrivtegn(answ,pos,'H'); 5 12752 skrivtegn(answ,pos,' '); 5 12753 skrivtegn(answ,pos,ac+'@'); 5 12754 i:= 1; sum:= 0; 5 12755 while i < pos do 5 12756 sum:= (sum + læstegn(answ,i,tegn)) mod 256; 5 12757 skriv_tegn(answ,pos, sum shift (-4) extract 4 +'@'); 5 12758 skriv_tegn(answ,pos, sum extract 4 +'@'); 5 12759 repeat afsluttext(answ,pos) until pos mod 6 = 1; 5 12760 <*+2*> if (testbit36 or testbit38) and overvåget then 5 12761 disable begin 6 12762 write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf); 6 12763 outchar(zrl,'nl'); 6 12764 end; 5 12765 <*-2*> 5 12766 write(z_fr_out,"nl",1,answ.laf,"cr",1); 5 12767 disable setposition(z_fr_out,0,0); 5 12768 ac:= -1; 5 12769 \f 5 12769 message procedure radio_ind side 13 - 881107/cl; 5 12770 end 4 12771 else 4 12772 if ttyp = 'I' then 4 12773 begin 5 12774 typ(1):= -1; 5 12775 repeat 5 12776 getch(cs_radio_ind,opref,true,typ,val); 5 12777 if opref<>0 then 5 12778 begin 6 12779 d.opref.resultat:= 31; 6 12780 signalch(d.opref.retur,opref,d.opref.op_type); 6 12781 end; 5 12782 until opref=0; 5 12783 for i:= 1 step 1 until max_antal_taleveje do 5 12784 if læsbit_ia(hookoff_maske,i) then 5 12785 begin 6 12786 signalbin(bs_talevej_udkoblet(i)); 6 12787 sætbit_ia(samtaleflag,tv_operatør(i),1); 6 12788 end; 5 12789 if antal_bits_ia(samtaleflag,1,max_antal_operatører)<>0 then 5 12790 signal_bin(bs_mobil_opkald); 5 12791 for i:= 1 step 1 until max_antal_kanaler do 5 12792 begin 6 12793 ref:= (i-1)*kanalbeskrlængde; 6 12794 if kanal_tab.ref.kanal_tilstand extract 2 <> 0 then 6 12795 begin 7 12796 if kanal_tab.ref.kanal_id2<>0 and 7 12797 kanal_tab.ref.kanal_id2 shift (-22)<>3 7 12798 then 7 12799 begin 8 12800 signal(ss_samtale_nedlagt(i)); 8 12801 frigiv_id(kanal_tab.ref.kanal_id2,kanal_til_omr(i)); 8 12802 end; 7 12803 if kanal_tab.ref.kanal_id1<>0 then 7 12804 begin 8 12805 signal(ss_samtale_nedlagt(i)); 8 12806 frigiv_id(kanal_tab.ref.kanal_id1,kanal_til_omr(i)); 8 12807 end; 7 12808 end; 6 12809 sæt_hex_ciffer(kanal_tab.ref,3,15); 6 12810 end; 5 12811 <*V*> waitch(cs_radio_pulje,opref,true,-1); 5 12812 startoperation(opref,401,cs_radio_pulje,23); 5 12813 i:= 1; 5 12814 hægtstring(d.opref.data,i,<:radio-info: :>); 5 12815 j:= 4; 5 12816 while j<=lgd and i<(d.opref.opsize - data - 2)//2*3 do 5 12817 begin 6 12818 skrivtegn(d.opref.data,i,læstegn(tlgr,j,tegn)); 6 12819 end; 5 12820 repeat afsluttext(d.opref.data,i) until i mod 6 = 1; 5 12821 signalch(cs_io,opref,gen_optype or rad_optype); 5 12822 optaget_flag:= 0; 5 12823 pos:= i:= 1; sum:= 0; 5 12824 skrivtegn(answ,pos,'I'); 5 12825 skrivtegn(answ,pos,' '); 5 12826 skrivtegn(answ,pos,'@'); 5 12827 while i<pos do 5 12828 sum:= (sum+læstegn(answ,i,tegn)) mod 256; 5 12829 skrivtegn(answ,pos,sum shift (-4) extract 4 + '@'); 5 12830 skrivtegn(answ,pos,sum extract 4 + '@'); 5 12831 repeat afsluttext(answ,pos) until pos mod 6 = 1; 5 12832 <*+2*> if (testbit36 or testbit38) and overvåget then 5 12833 disable begin 6 12834 write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf); 6 12835 outchar(zrl,'nl'); 6 12836 end; 5 12837 <*-2*> 5 12838 write(z_fr_out,"nl",1,answ.laf,"cr",1); 5 12839 disable setposition(z_fr_out,0,0); 5 12840 ac:= -1; 5 12841 \f 5 12841 message procedure radio_ind side 14 - 881107/cl; 5 12842 end 4 12843 else 4 12844 if ttyp='L' then 4 12845 begin 5 12846 ac:= 0; 5 12847 <****** RADIO-INFO meddelelser til hovedkonsol afhængig af testbi21 ******> 5 12848 if testbit21 then 5 12849 begin 6 12850 waitch(cs_radio_pulje,opref,true,-1); 6 12851 startoperation(opref,401,cs_radio_pulje,23); 6 12852 i:= 1; 6 12853 hægtstring(d.opref.data,i,<:radio-info: :>); 6 12854 j:= 4; 6 12855 while j<=lgd and i<(d.opref.opsize-data-2)//2*3 do 6 12856 begin 7 12857 skrivtegn(d.opref.data,i,læstegn(tlgr,j,tegn)); 7 12858 end; 6 12859 repeat afsluttext(d.opref.data,i) until i mod 6 = 1; 6 12860 signalch(cs_io,opref,gen_optype or rad_optype); 6 12861 end; <*testbit21*> 5 12862 end 4 12863 else 4 12864 if ttyp='Z' then 4 12865 begin 5 12866 <*+2*> if (testbit36 or testbit38) and overvåget then 5 12867 disable begin 6 12868 write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf); 6 12869 outchar(zrl,'nl'); 6 12870 end; 5 12871 <*-2*> 5 12872 write(z_fr_out,"nl",1,answ.laf,"cr",1); 5 12873 disable setposition(z_fr_out,0,0); 5 12874 ac:= -1; 5 12875 end 4 12876 else 4 12877 ac:= 1; 4 12878 end; <* telegram modtaget ok *> 3 12879 \f 3 12879 message procedure radio_ind side 15 - 881107/cl; 3 12880 if ac>=0 then 3 12881 begin 4 12882 pos:= i:= 1; sum:= 0; 4 12883 skrivtegn(answ,pos,ttyp); 4 12884 skrivtegn(answ,pos,' '); 4 12885 skrivtegn(answ,pos,ac+'@'); 4 12886 while i<pos do 4 12887 sum:= (sum+læstegn(answ,i,tegn)) mod 256; 4 12888 skrivtegn(answ,pos, sum shift (-4) extract 4 + '@'); 4 12889 skrivtegn(answ,pos, sum extract 4 + '@'); 4 12890 repeat afsluttext(answ,pos) until pos mod 6 = 1; 4 12891 <*+2*> if (testbit36 or testbit38) and overvåget then 4 12892 disable begin 5 12893 write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf); 5 12894 outchar(zrl,'nl'); 5 12895 end; 4 12896 <*-2*> 4 12897 write(z_fr_out,"nl",1,answ.laf,"cr",1); 4 12898 disable setposition(z_fr_out,0,0); 4 12899 ac:= -1; 4 12900 end; 3 12901 3 12901 typ(1):= 0; 3 12902 typ(2):= 1 shift 18 + 4 shift 12 + tid; <* lt real tid *> 3 12903 rf:= 4; 3 12904 systime(1,0.0,val.rf); 3 12905 val.rf:= val.rf - 30.0; 3 12906 typ(3):= -1; 3 12907 repeat 3 12908 getch(cs_radio_ind,opref,true,typ,val); 3 12909 if opref>0 then 3 12910 begin 4 12911 d.opref.resultat:= 53; <*annuleret*> 4 12912 signalch(d.opref.retur,opref,d.opref.optype); 4 12913 end; 3 12914 until opref=0; 3 12915 3 12915 until false; 3 12916 3 12916 radio_ind_trap: 3 12917 3 12917 disable skriv_radio_ind(zbillede,1); 3 12918 3 12918 end radio_ind; 2 12919 \f 2 12919 message procedure radio_ud side 1 - 820301/hko; 2 12920 2 12920 procedure radio_ud(op); 2 12921 value op; 2 12922 integer op; 2 12923 begin 3 12924 integer array field opref,io_opref; 3 12925 integer opgave, kode, pos, tegn, i, sum, rc, svar_status; 3 12926 integer array answ, tlgr(1:32); 3 12927 long array field laf; 3 12928 3 12928 procedure skriv_radio_ud(z,omfang); 3 12929 value omfang; 3 12930 zone z; 3 12931 integer omfang; 3 12932 begin integer i1; 4 12933 disable i1:= write(z,"nl",1,<:+++ radio-ud ::>); 4 12934 if omfang > 0 then 4 12935 disable begin real x; long array field tx; 5 12936 tx:= 0; 5 12937 trap(slut); 5 12938 write(z,"nl",1, 5 12939 <: opref: :>,opref,"nl",1, 5 12940 <: io-opref: :>,io_opref,"nl",1, 5 12941 <: opgave: :>,opgave,"nl",1, 5 12942 <: kode: :>,kode,"nl",1, 5 12943 <: pos: :>,pos,"nl",1, 5 12944 <: tegn: :>,tegn,"nl",1, 5 12945 <: i: :>,i,"nl",1, 5 12946 <: sum: :>,sum,"nl",1, 5 12947 <: rc: :>,rc,"nl",1, 5 12948 <: svar-status: :>,svar_status,"nl",1, 5 12949 <: tlgr: ":>,tlgr.tx,<:":>,"nl",1, 5 12950 <: answ: ":>,answ.tx,<:":>,"nl",1, 5 12951 <::>); 5 12952 skriv_coru(z,coru_no(402)); 5 12953 slut: 5 12954 end; <*disable*> 4 12955 end skriv_radio_ud; 3 12956 3 12956 trap(radio_ud_trap); 3 12957 laf:= 0; 3 12958 stack_claim((if cm_test then 200 else 150) +35+100); 3 12959 3 12959 <*+2*>if testbit32 and overvåget or testbit28 then 3 12960 skriv_radio_ud(out,0); 3 12961 <*-2*> 3 12962 3 12962 io_opref:= op; 3 12963 \f 3 12963 message procedure radio_ud side 2 - 810529/hko; 3 12964 3 12964 repeat 3 12965 3 12965 <*V*> wait_ch(cs_radio_ud,op_ref,gen_optype or rad_optype,-1); 3 12966 kode:= d.op_ref.opkode; 3 12967 opgave:= kode shift(-12); 3 12968 kode:= kode extract 12; 3 12969 if opgave < 'A' or opgave > 'I' then 3 12970 begin 4 12971 d.opref.resultat:= 31; 4 12972 end 3 12973 else 3 12974 begin 4 12975 pos:= 1; 4 12976 if opgave='A' or opgave='B' or opgave='D' or opgave='H' then 4 12977 begin 5 12978 skrivtegn(tlgr,pos,opgave); 5 12979 if d.opref.data(1) = 0 then 5 12980 begin 6 12981 skrivtegn(tlgr,pos,'G'); 6 12982 skrivtegn(tlgr,pos,'A'); 6 12983 end 5 12984 else 5 12985 begin 6 12986 skrivtegn(tlgr,pos,'D'); 6 12987 skrivtegn(tlgr,pos,d.opref.data(1)+'@'); <*talevejsnr*> 6 12988 end; 5 12989 if opgave='A' then 5 12990 begin 6 12991 skrivtegn(tlgr,pos,d.opref.data(2)+'@'); <*calltype*> 6 12992 end 5 12993 else 5 12994 if opgave='B' then 5 12995 begin 6 12996 skrivtegn(tlgr,pos,d.opref.data(2)); 6 12997 if d.opref.data(2)='V' then 6 12998 begin 7 12999 skrivtegn(tlgr,pos, 7 13000 d.opref.data(10) shift (-18) extract 6+'@'); <*trunktype*> 7 13001 skrivtegn(tlgr,pos, 7 13002 d.opref.data(10) shift (-12) extract 6+'@'); <*trunknum.*> 7 13003 end; 6 13004 d.opref.data(7):= d.opref.data(8):= d.opref.data(9):= 0; 6 13005 d.opref.data(6):= if d.opref.data(5)<>0 then 2 else data+18; 6 13006 end 5 13007 else 5 13008 if opgave='H' then 5 13009 begin 6 13010 skrivtegn(tlgr,pos,d.opref.data(3)+'@'); <*trunktype*> 6 13011 skrivtegn(tlgr,pos,d.opref.data(4)+'@'); <*trunknum.*> 6 13012 hægtstring(tlgr,pos,<:@@@:>); 6 13013 skrivtegn(tlgr,pos,d.opref.data(2)); <*H_tlgr_type*> 6 13014 skrivtegn(tlgr,pos,'A'); 6 13015 skrivtegn(tlgr,pos,(if d.opref.data(2)='L' and 6 13016 d.opref.data(5)=8 then 7 else d.opref.data(5))+'@'); 6 13017 if d.opref.data(2)='L' then 6 13018 begin 7 13019 if d.opref.data(5)=7 then 7 13020 begin 8 13021 anbringtal(tlgr,pos, 8 13022 d.opref.data(8) shift (-12) extract 10,-4); 8 13023 anbringtal(tlgr,pos, 8 13024 d.opref.data(8) extract 7,-2); 8 13025 end 7 13026 else 7 13027 if d.opref.data(5)=8 then 7 13028 begin 8 13029 hægtstring(tlgr,pos,<:FFFFFF:>); 8 13030 end; 7 13031 if d.opref.data(5)<>9 then 7 13032 anbringtal(tlgr,pos,d.opref.data(7),-4); 7 13033 skrivtegn(tlgr,pos, 7 13034 dec_to_hex(d.opref.data(6) shift (-4) extract 4)); 7 13035 skrivtegn(tlgr,pos, 7 13036 dec_to_hex(d.opref.data(6) extract 4)); 7 13037 skrivtegn(tlgr,10,pos-11+'@'); 7 13038 end; 6 13039 end; 5 13040 end 4 13041 else 4 13042 if opgave='I' then 4 13043 begin 5 13044 hægtstring(tlgr,pos,<:IGA:>); 5 13045 end 4 13046 else d.opref.resultat:= 31; <*systemfejl*> 4 13047 end; 3 13048 \f 3 13048 message procedure radio_ud side 3 - 881107/cl; 3 13049 3 13049 if d.opref.resultat=0 then 3 13050 begin 4 13051 if (opgave <= 'B') 4 13052 <* or (opgave='H' and d.opref.data(2)='L') *> then 4 13053 begin 5 13054 systime(1,0,d.opref.tid); 5 13055 signalch(cs_radio_ind,opref,d.opref.optype); 5 13056 opref:= 0; 5 13057 end; 4 13058 <* beregn checksum og send *> 4 13059 i:= 1; sum:= 0; 4 13060 while i < pos do 4 13061 sum:= (sum + læstegn(tlgr,i,tegn)) mod 256; 4 13062 skrivtegn(tlgr,pos,sum shift (-4) + '@'); 4 13063 skrivtegn(tlgr,pos,sum extract 4 + '@'); 4 13064 repeat skrivtegn(tlgr,pos,0) until pos mod 6 = 1; 4 13065 <**********************************************> 4 13066 <* specialaktion p.g.a. modtagebesvær i COMET *> 4 13067 4 13067 if opgave='B' then delay(1); 4 13068 4 13068 <* 94.04.19/cl *> 4 13069 <**********************************************> 4 13070 4 13070 <*+2*> if (testbit36 or testbit39) and overvåget then 4 13071 disable begin 5 13072 write(zrl,<<zd dd dd.dd >,now,<:rf-tlgr: :>,tlgr.laf); 5 13073 outchar(zrl,'nl'); 5 13074 end; 4 13075 <*-2*> 4 13076 setposition(z_rf_in,0,0); 4 13077 write(z_rf_out,"nl",1,tlgr.laf,"cr",1); 4 13078 disable setposition(z_rf_out,0,0); 4 13079 rc:= 0; 4 13080 4 13080 <* afvent svar*> 4 13081 repeat 4 13082 <*V*> svar_status:= afvent_radioinput(z_rf_in,answ,true); 4 13083 if svar_status=6 then 4 13084 begin 5 13085 svar_status:= -3; 5 13086 goto radio_ud_check; 5 13087 end; 4 13088 pos:= 1; 4 13089 while læstegn(answ,pos,i)<>0 do ; 4 13090 pos:= pos-2; 4 13091 if pos > 0 then 4 13092 begin 5 13093 if pos<3 then 5 13094 svar_status:= -2 <*format error*> 5 13095 else 5 13096 begin 6 13097 if læstegn(answ,3,tegn)<>'@' then 6 13098 svar_status:= tegn - '@' 6 13099 else 6 13100 begin 7 13101 pos:= 1; 7 13102 læstegn(answ,pos,tegn); 7 13103 if tegn<>opgave then 7 13104 svar_status:= -4 <*gal type*> 7 13105 else 7 13106 if læstegn(answ,pos,tegn)<>' ' then 7 13107 svar_status:= -tegn <*fejl*> 7 13108 else 7 13109 svar_status:= læstegn(answ,pos,tegn)-'@'; 7 13110 end; 6 13111 end; 5 13112 end 4 13113 else 4 13114 svar_status:= -1; 4 13115 \f 4 13115 message procedure radio_ud side 5 - 881107/cl; 4 13116 4 13116 radio_ud_check: 4 13117 rc:= rc+1; 4 13118 if -3<=svar_status and svar_status< -1 then 4 13119 disable begin 5 13120 write(z_rf_out,<:<'nl'>Z@@MJ<'cr'>:>); 5 13121 setposition(z_rf_out,0,0); 5 13122 <*+2*> if (testbit36 or testbit39) and overvåget then 5 13123 begin 6 13124 write(zrl,<<zd dd dd.dd >,now,<:rf-tlgr: Z@@MJ:>); 6 13125 outchar(zrl,'nl'); 6 13126 end; 5 13127 <*-2*> 5 13128 end 4 13129 else 4 13130 if svar_status=6 or svar_status=(-4) or svar_status=(-1) then 4 13131 disable begin 5 13132 write(z_rf_out,"nl",1,tlgr.laf,"cr",1); 5 13133 setposition(z_rf_out,0,0); 5 13134 <*+2*> if (testbit36 or testbit39) and overvåget then 5 13135 begin 6 13136 write(zrl,<<zd dd dd.dd >,now,<:rf-tlgr: :>, 6 13137 tlgr.laf,<: (repeat):>); outchar(zrl,'nl'); 6 13138 end; 5 13139 <*-2*> 5 13140 end 4 13141 else 4 13142 if svar_status=0 and opref<>0 then 4 13143 d.opref.resultat:= 0 4 13144 else 4 13145 if opref<>0 then 4 13146 d.opref.resultat:= 31; 4 13147 until svar_status=0 or rc>3; 4 13148 end; 3 13149 if opref<>0 then 3 13150 begin 4 13151 if svar_status<>0 and rc>3 then 4 13152 d.opref.resultat:= 53; <* annulleret *> 4 13153 signalch(d.opref.retur,opref,d.opref.optype); 4 13154 opref:= 0; 4 13155 end; 3 13156 until false; 3 13157 3 13157 radio_ud_trap: 3 13158 3 13158 disable skriv_radio_ud(zbillede,1); 3 13159 3 13159 end radio_ud; 2 13160 \f 2 13160 message procedure radio_medd_opkald side 1 - 810610/hko; 2 13161 2 13161 procedure radio_medd_opkald; 2 13162 begin 3 13163 integer array field ref,op_ref; 3 13164 integer i; 3 13165 3 13165 procedure skriv_radio_medd_opkald(z,omfang); 3 13166 value omfang; 3 13167 zone z; 3 13168 integer omfang; 3 13169 begin integer x; 4 13170 disable x:= write(z,"nl",1,<:+++ radio-medd-opkald:>); 4 13171 write(z,"sp",26-x); 4 13172 if omfang > 0 then 4 13173 disable begin 5 13174 trap(slut); 5 13175 write(z,"nl",1, 5 13176 <: ref: :>,ref,"nl",1, 5 13177 <: opref: :>,op_ref,"nl",1, 5 13178 <: i: :>,i,"nl",1, 5 13179 <::>); 5 13180 skriv_coru(z,abs curr_coruno); 5 13181 slut: 5 13182 end;<*disable*> 4 13183 end skriv_radio_medd_opkald; 3 13184 3 13184 trap(radio_medd_opkald_trap); 3 13185 3 13185 stack_claim((if cm_test then 200 else 150) +1); 3 13186 3 13186 <*+2*>if testbit32 and overvåget or testbit28 then 3 13187 disable skriv_radio_medd_opkald(out,0); 3 13188 <*-2*> 3 13189 \f 3 13189 message procedure radio_medd_opkald side 2 - 820301/hko; 3 13190 3 13190 repeat 3 13191 3 13191 <*V*> wait(bs_mobil_opkald); 3 13192 <*V*> wait_ch(cs_radio_medd,op_ref,genoptype or rad_optype,-1); 3 13193 <*V*> wait(bs_opkaldskø_adgang); 3 13194 3 13194 ref:= første_nød_opkald; 3 13195 while ref <> 0 do <* meld ikke meldt nødopkald til io *> 3 13196 begin 4 13197 i:= opkaldskø.ref(2); 4 13198 if i < 0 then 4 13199 begin 5 13200 <* nødopkald ikke meldt *> 5 13201 5 13201 start_operation(op_ref,403,cs_radio_medd,45<*nødop.modt.*>); 5 13202 d.op_ref.data(1):= <* vogn_id *> 5 13203 if opkaldskø.ref(3)<>0 then opkaldskø.ref(3) else i extract 22; 5 13204 opkaldskø.ref(2):= i extract 22; 5 13205 d.op_ref.data(2):= opkaldskø.ref(4) shift(-12); <* ttmm *> 5 13206 d.op_ref.data(3):= opkaldskø.ref(5) extract 20; 5 13207 i:= op_ref; 5 13208 <*+2*> if testbit35 and overvåget then 5 13209 disable begin 6 13210 write(out,"nl",1,<:radio nød-medd:>); 6 13211 skriv_op(out,op_ref); 6 13212 ud; 6 13213 end; 5 13214 <*-2*> 5 13215 signal_ch(cs_io,op_ref,gen_optype or rad_optype); 5 13216 <*V*> wait_ch(cs_radio_medd,op_ref,rad_optype,-1); 5 13217 <*+4*> if i <> op_ref then 5 13218 fejlreaktion(11<*fremmed post*>,i,<:radio io/medd:>,0); 5 13219 <*-4*> 5 13220 end;<*nødopkald ikke meldt*> 4 13221 4 13221 ref:= opkaldskø.ref(1) extract 12; 4 13222 end; <* melding til io *> 3 13223 \f 3 13223 message procedure radio_medd_opkald side 3 - 820304/hko; 3 13224 3 13224 start_operation(op_ref,403,cs_radio_medd, 3 13225 40<*opdater opkaldskøbill*>); 3 13226 signal_bin(bs_opkaldskø_adgang); 3 13227 <*+2*> if testbit35 and overvåget then 3 13228 disable begin 4 13229 write(out,"nl",1,<:radio opdater opkaldskø-billede:>); 4 13230 skriv_op(out,op_ref); 4 13231 write(out, <:opkaldsflag: :>,"nl",1); 4 13232 outintbits_ia(out,opkaldsflag,1,op_maske_lgd//2); 4 13233 write(out,"nl",1,<:kanalflag: :>,"nl",1); 4 13234 outintbits_ia(out,kanalflag,1,op_maske_lgd//2); 4 13235 write(out,"nl",1,<:samtaleflag: :>,"nl",1); 4 13236 outintbits_ia(out,samtaleflag,1,op_maske_lgd//2); 4 13237 ud; 4 13238 end; 3 13239 <*-2*> 3 13240 signal_ch(cs_op,op_ref,gen_optype or rad_optype); 3 13241 3 13241 until false; 3 13242 3 13242 radio_medd_opkald_trap: 3 13243 3 13243 disable skriv_radio_medd_opkald(zbillede,1); 3 13244 3 13244 end radio_medd_opkald; 2 13245 \f 2 13245 message procedure radio_adm side 1 - 820301/hko; 2 13246 2 13246 procedure radio_adm(op); 2 13247 value op; 2 13248 integer op; 2 13249 begin 3 13250 integer array field opref, rad_op, iaf; 3 13251 integer nr,i,j,k,res,opgave,tilst,operatør; 3 13252 3 13252 procedure skriv_radio_adm(z,omfang); 3 13253 value omfang; 3 13254 zone z; 3 13255 integer omfang; 3 13256 begin integer i1; 4 13257 disable i1:= write(z,"nl",1,<:+++ radio-adm:>); 4 13258 write(z,"sp",26-i1); 4 13259 if omfang > 0 then 4 13260 disable begin real x; 5 13261 trap(slut); 5 13262 \f 5 13262 message procedure radio_adm side 2- 820301/hko; 5 13263 5 13263 write(z,"nl",1, 5 13264 <: op_ref: :>,op_ref,"nl",1, 5 13265 <: iaf: :>,iaf,"nl",1, 5 13266 <: rad-op: :>,rad_op,"nl",1, 5 13267 <: nr: :>,nr,"nl",1, 5 13268 <: i: :>,i,"nl",1, 5 13269 <: j: :>,j,"nl",1, 5 13270 <: k: :>,k,"nl",1, 5 13271 <: tilst: :>,tilst,"nl",1, 5 13272 <: res: :>,res,"nl",1, 5 13273 <: opgave: :>,opgave,"nl",1, 5 13274 <: operatør: :>,operatør,"nl",1); 5 13275 skriv_coru(z,coru_no(404)); 5 13276 slut: 5 13277 end;<*disable*> 4 13278 end skriv_radio_adm; 3 13279 \f 3 13279 message procedure radio_adm side 3 - 820304/hko; 3 13280 3 13280 rad_op:= op; 3 13281 3 13281 trap(radio_adm_trap); 3 13282 stack_claim((if cm_test then 200 else 150) +50); 3 13283 3 13283 <*+2*>if testbit32 and overvåget or testbit28 then 3 13284 skriv_radio_adm(out,0); 3 13285 <*-2*> 3 13286 3 13286 pass; 3 13287 if -,testbit22 then 3 13288 begin 4 13289 startoperation(rad_op,404,cs_radio_adm,'I' shift 12 + 60); 4 13290 signalch(cs_radio_ud,rad_op,rad_optype); 4 13291 waitch(cs_radio_adm,rad_op,rad_optype,-1); 4 13292 end; 3 13293 repeat 3 13294 waitch(cs_radio_adm,opref,true,-1); 3 13295 <*+2*> 3 13296 if testbit33 and overvåget then 3 13297 disable begin 4 13298 skriv_radio_adm(out,0); 4 13299 write(out,<: operation modtaget på cs:>,<<d>,cs_radio_adm); 4 13300 skriv_op(out,opref); 4 13301 end; 3 13302 <*-2*> 3 13303 3 13303 k:= d.op_ref.opkode extract 12; 3 13304 opgave:= d.opref.opkode shift (-12); 3 13305 nr:=operatør:=d.op_ref.data(1); 3 13306 3 13306 <*+4*> if (d.op_ref.optype and 3 13307 (gen_optype or io_optype or op_optype or vt_optype)) 3 13308 extract 12 = 0 then fejlreaktion(12<*operationstype*>,op_ref, 3 13309 <:radio_adm:>,0); 3 13310 <*-4*> 3 13311 if k = 74 <* RA,I *> then 3 13312 begin 4 13313 startoperation(rad_op,404,cs_radio_adm,'I' shift 12 + 60); 4 13314 signalch(cs_radio_ud,rad_op,rad_optype); 4 13315 waitch(cs_radio_adm,rad_op,rad_optype,-1); 4 13316 d.opref.resultat:= if d.rad_op.resultat=0 then 3 4 13317 else d.rad_op.resultat; 4 13318 signalch(d.opref.retur,opref,d.opref.optype); 4 13319 \f 4 13319 message procedure radio_adm side 4 - 820301/hko; 4 13320 end 3 13321 else 3 13322 3 13322 if k = 1<*IN,O*> or k = 2<*EK,O*> or k = 77<*FO,O*> or 3 13323 k = 5<*FO,L*> or k = 6<*ST *> then 3 13324 begin 4 13325 if k = 5 or k=77 then 4 13326 begin 5 13327 5 13327 <*V*> wait(bs_opkaldskø_adgang); 5 13328 if k=5 then 5 13329 begin 6 13330 disable for iaf:= 0 step 512 until (max_linienr//768*512) do 6 13331 begin 7 13332 i:= læs_fil(1035,iaf//512+1,nr); 7 13333 if i <> 0 then 7 13334 fejlreaktion(5<*læs_fil*>,i,<:liniefordelingstabel:>,0); 7 13335 tofrom(radio_linietabel.iaf,fil(nr), 7 13336 if (((max_linienr+1 - (iaf//2*3))+2)//3*2) > 512 then 512 7 13337 else ((max_linienr+1 - (iaf//2*3))+2)//3*2); 7 13338 end; 6 13339 6 13339 for i:= 1 step 1 until max_antal_mobilopkald do 6 13340 begin 7 13341 iaf:= i*opkaldskø_postlængde; 7 13342 nr:= opkaldskø.iaf(3) shift (-12) extract 10; <*linienr*> 7 13343 if nr>0 then 7 13344 begin 8 13345 læs_tegn(radio_linietabel,nr+1,operatør); 8 13346 if operatør>max_antal_operatører then operatør:= 0; 8 13347 opkaldskø.iaf(4):= opkaldskø.iaf(4) shift(-8) shift 8 + 8 13348 operatør; 8 13349 end; 7 13350 end; 6 13351 end 5 13352 else 5 13353 if k=77 then 5 13354 begin 6 13355 disable i:= læsfil(1034,1,nr); 6 13356 if i<>0 then fejlreaktion(5,i,<:områdefordelingstabel:>,0); 6 13357 tofrom(radio_områdetabel,fil(nr),max_antal_områder*2); 6 13358 for i:= 1 step 1 until max_antal_mobilopkald do 6 13359 begin 7 13360 iaf:= i*opkaldskø_postlængde; 7 13361 nr:= opkaldskø.iaf(5) extract 4; 7 13362 operatør:= radio_områdetabel(nr); 7 13363 if operatør < 0 or max_antal_operatører < operatør then 7 13364 operatør:= 0; 7 13365 if opkaldskø.iaf(4) extract 8=0 and 7 13366 opkaldskø.iaf(3) shift (-12) extract 10 = 0 then 7 13367 opkaldskø.iaf(4):= opkaldskø.iaf(4) shift(-8) shift 8 + 7 13368 operatør; 7 13369 end; 6 13370 end; 5 13371 5 13371 tofrom(opkaldsflag,alle_operatører,op_maske_lgd); 5 13372 signal_bin(bs_opkaldskø_adgang); 5 13373 5 13373 signal_bin(bs_mobil_opkald); 5 13374 5 13374 d.op_ref.resultat:= res:= 3; 5 13375 \f 5 13375 message procedure radio_adm side 5 - 820304/hko; 5 13376 5 13376 end <*k = 5 / k = 77*> 4 13377 else 4 13378 begin <*k =1,2 eller 6 (IN,O - EK,O eller ST) *> 5 13379 res:= 3; 5 13380 for nr:= 1 step 1 until max_antal_kanaler do 5 13381 begin 6 13382 iaf:= (nr-1)*kanal_beskr_længde; 6 13383 if kanal_tab.iaf.kanal_tilstand shift (-16) = 6 13384 op_talevej(operatør) then 6 13385 begin 7 13386 tilst:= kanal_tab.iaf.kanal_tilstand extract 2; 7 13387 if tilst <> 0 then 7 13388 res:= 16; <*skærm optaget*> 7 13389 end; <* kanal_tab(operatør) = operatør*> 6 13390 end; 5 13391 tofrom(opkaldsflag,alle_operatører,op_maske_lgd); 5 13392 sæt_bit_ia(opkaldsflag,operatør,k extract 1); 5 13393 signal_bin(bs_mobil_opkald); 5 13394 d.op_ref.resultat:= res; 5 13395 end;<*k=1,2 eller 6 *> 4 13396 4 13396 <*+2*> if testbit35 and overvåget then 4 13397 disable begin 5 13398 skriv_radio_adm(out,0); 5 13399 write(out,<: sender til :>, 5 13400 if k=5 or k=6 or k=77 or res > 3 then d.op_ref.retur 5 13401 else cs_op); 5 13402 skriv_op(out,op_ref); 5 13403 end; 4 13404 <*-2*> 4 13405 4 13405 if k=5 or k=6 or k=77 or res > 3 then 4 13406 signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype) 4 13407 else 4 13408 begin <*k = (1 eller 2) og res = 3 *> 5 13409 d.op_ref.resultat:=0; 5 13410 signal_ch(cs_op,op_ref,d.op_ref.optype); 5 13411 end; 4 13412 \f 4 13412 message procedure radio_adm side 6 - 816610/hko; 4 13413 4 13413 end <*k=1,2,5 eller 6*> 3 13414 else 3 13415 if k=3 <*IN,R*> or k=4 <*EK,R*> then 3 13416 begin 4 13417 nr:= d.op_ref.data(1); 4 13418 res:= 3; 4 13419 4 13419 if nr<=3 then 4 13420 res:= 51 <* afvist *> 4 13421 else 4 13422 begin 5 13423 5 13423 <* gennemstilling af område *> 5 13424 j:= 1; 5 13425 for i:= 1 step 1 until max_antal_kanaler do 5 13426 begin 6 13427 if kanal_id(i) shift (-5) extract 3 = 3 and 6 13428 radio_id(kanal_id(i) extract 5) = nr then j:= i; 6 13429 end; 5 13430 nr:= j; 5 13431 iaf:= (nr-1)*kanalbeskrlængde; 5 13432 if læsbiti(kanal_tab.iaf.kanal_tilstand,11) == (k=4) then 5 13433 begin 6 13434 startoperation(radop,404,cs_radio_adm,'H' shift 12 + 60); 6 13435 d.rad_op.data(1):= 0; 6 13436 d.rad_op.data(2):= 'G'; <* gennemstil område *> 6 13437 d.rad_op.data(3):= kanal_id(nr) shift (-5) extract 3; 6 13438 d.rad_op.data(4):= kanal_id(nr) extract 5; 6 13439 d.rad_op.data(5):= k extract 1; <* set/slet gennemstilling *> 6 13440 signalch(cs_radio_ud,rad_op,rad_optype); 6 13441 waitch(cs_radio_adm,rad_op,rad_optype,-1); 6 13442 res:= d.rad_op.resultat; 6 13443 if res=0 then res:= 3; 6 13444 sætbiti(kanal_tab.iaf.kanal_tilstand,11,k extract 1); 6 13445 sætbiti(kanal_tab.iaf.kanal_tilstand,10,k extract 1); 6 13446 end; 5 13447 end; 4 13448 d.op_ref.resultat:=res; 4 13449 signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype); 4 13450 tofrom(kanalflag,alle_operatører,op_maske_lgd); 4 13451 signal_bin(bs_mobil_opkald); 4 13452 \f 4 13452 message procedure radio_adm side 7 - 880930/cl; 4 13453 4 13453 4 13453 end <* k=3 eller 4 *> 3 13454 else 3 13455 if k=72<*EK,K*> or k=73<*IN,K*> then 3 13456 begin 4 13457 nr:= d.opref.data(1) extract 22; 4 13458 res:= 3; 4 13459 iaf:= (nr-1)*kanalbeskrlængde; 4 13460 start_operation(radop,404,cs_radio_adm,'H' shift 12 + 60); 4 13461 d.rad_op.data(1):= 0; 4 13462 d.rad_op.data(2):= 'C'; <* kanal inkluder/ekskluder *> 4 13463 d.rad_op.data(3):= kanalid(nr) shift (-5) extract 3; 4 13464 d.rad_op.data(4):= kanalid(nr) extract 5; 4 13465 d.rad_op.data(5):= k extract 1; 4 13466 signalch(cs_radio_ud,radop,rad_optype); 4 13467 waitch(cs_radio_adm,radop,rad_optype,-1); 4 13468 res:= d.radop.resultat; 4 13469 if res=0 then res:= 3; 4 13470 j:= if k=72 then 15 else 0; 4 13471 if res=3 and j<>sæt_hex_ciffer(kanal_tab.iaf,3,j) then 4 13472 begin 5 13473 tofrom(kanalflag,alle_operatører,op_maske_lgd); 5 13474 signalbin(bs_mobilopkald); 5 13475 end; 4 13476 d.opref.resultat:= res; 4 13477 signalch(d.opref.retur,opref,d.opref.optype); 4 13478 end 3 13479 else 3 13480 if k=11 or k=12 or k=19 then <*vt_opd*> 3 13481 begin 4 13482 nr:= d.opref.data(1) extract 8; 4 13483 opgave:= if k=19 then 9 else (k-4); 4 13484 if nr<=3 then 4 13485 res:= 51 <*afvist*> 4 13486 else 4 13487 begin 5 13488 startoperation(radop,404,cs_radio_adm,'H' shift 12 + 60); 5 13489 d.radop.data(1):= 0; 5 13490 d.radop.data(2):= 'L'; 5 13491 d.radop.data(3):= omr_til_trunk(nr) shift (-6); 5 13492 d.radop.data(4):= omr_til_trunk(nr) extract 6; 5 13493 d.radop.data(5):= opgave; 5 13494 d.radop.data(6):= d.opref.data(1) shift (-8) extract 8; 5 13495 d.radop.data(7):= d.opref.data(2); 5 13496 d.radop.data(8):= d.opref.data(3); 5 13497 signalch(cs_radio_ud,radop,rad_optype); 5 13498 <*V*> waitch(cs_radio_adm,radop,rad_optype,-1); 5 13499 res:= d.radop.resultat; 5 13500 if res=0 then res:= 3; 5 13501 end; 4 13502 d.opref.resultat:= res; 4 13503 signalch(d.opref.retur,opref,d.opref.optype); 4 13504 end 3 13505 else 3 13506 3 13506 begin 4 13507 4 13507 d.op_ref.resultat:= 45; <* ikke implementeret *> 4 13508 4 13508 signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype); 4 13509 4 13509 end; 3 13510 3 13510 until false; 3 13511 radio_adm_trap: 3 13512 disable skriv_radio_adm(zbillede,1); 3 13513 end radio_adm; 2 13514 2 13514 \f 2 13514 message vogntabel erklæringer side 1 - 820301/cl; 2 13515 2 13515 integer cs_vt, cs_vt_adgang,cs_vt_logpool,cs_vt_opd,cs_vt_rap, 2 13516 cs_vt_tilst,cs_vt_auto,cs_vt_grp,cs_vt_spring,vt_op, 2 13517 cs_vt_log; 2 13518 integer sidste_bus,sidste_linie_løb,tf_vogntabel, 2 13519 max_antal_i_gruppe,tf_gruppedef,tf_gruppeidenter,tf_springdef, 2 13520 vt_log_slicelgd; 2 13521 integer array bustabel,bustabel1(0:max_antal_busser), 2 13522 linie_løb_tabel(0:max_antal_linie_løb), 2 13523 springtabel(1:max_antal_spring,1:3), 2 13524 gruppetabel(1:max_antal_grupper), 2 13525 gruppeopkald(1:max_antal_gruppeopkald,1:2), <* ident , filref *> 2 13526 vt_logop(1:2), 2 13527 vt_logdisc(1:4), 2 13528 vt_log_tail(1:10); 2 13529 boolean array busindeks(-1:max_antal_linie_løb), 2 13530 bustilstand(-1:max_antal_busser), 2 13531 linie_løb_indeks(-1:max_antal_busser); 2 13532 real array springtid,springstart(1:max_antal_spring); 2 13533 real vt_logstart; 2 13534 integer field v_kode,v_bus,v_ll1,v_ll2; 2 13535 integer array field v_tekst; 2 13536 real field v_tid; 2 13537 2 13537 zone zvtlog(128,1,stderror); 2 13538 2 13538 \f 2 13538 message vogntabel erklæringer side 2 - 851001/cl; 2 13539 2 13539 procedure skriv_vt_variable(zud); 2 13540 zone zud; 2 13541 begin integer i; long array field laf; 3 13542 laf:= 0; 3 13543 write(zud,"nl",1,<:+++++ vogntabel variable::>,"nl",1,<<d>, 3 13544 <:vt-op-længde :>,vt_op_længde,"nl",1, 3 13545 <:cs-vt :>,cs_vt,"nl",1, 3 13546 <:cs-vt-adgang :>,cs_vt_adgang,"nl",1, 3 13547 <:cs-vt-logpool :>,cs_vt_logpool,"nl",1, 3 13548 <:cs-vt-opd :>,cs_vt_opd,"nl",1, 3 13549 <:cs-vt-rap :>,cs_vt_rap,"nl",1, 3 13550 <:cs-vt-tilst :>,cs_vt_tilst,"nl",1, 3 13551 <:cs-vt-auto :>,cs_vt_auto,"nl",1, 3 13552 <:cs-vt-grp :>,cs_vt_grp,"nl",1, 3 13553 <:cs-vt-spring :>,cs_vt_spring,"nl",1, 3 13554 <:cs-vt-log :>,cs_vt_log,"nl",1, 3 13555 <:vt-op :>,vt_op,"nl",1, 3 13556 <:vt-logop(1) :>,vt_logop(1),"nl",1, 3 13557 <:vt-logop(2) :>,vt_logop(2),"nl",1, 3 13558 <:sidste-bus :>,sidste_bus,"nl",1, 3 13559 <:sidste-linie-løb :>,sidste_linie_løb,"nl",1, 3 13560 <:max-antal-i-gruppe :>,max_antal_i_gruppe,"nl",1, 3 13561 <:tf-vogntabel :>,tf_vogntabel,"nl",1, 3 13562 <:tf-gruppedef :>,tf_gruppedef,"nl",1, 3 13563 <:tf-gruppeidenter :>,tf_gruppeidenter,"nl",1, 3 13564 <:tf-springdef :>,tf_springdef,"nl",1, 3 13565 <:vt-logskift :>,vt_logskift,"nl",1, 3 13566 <:vt-logdisc :>,vt_logdisc.laf,"nl",1, 3 13567 <:vt-log-slicelgd :>,vt_log_slicelgd,"nl",1, 3 13568 <:vt-log-aktiv :>, 3 13569 if vt_log_aktiv then <:true:> else <:false:>,"nl",1, 3 13570 <:vt-logstart :>,<<zdddddd.dd>,vt_logstart,"nl",1, 3 13571 <::>); 3 13572 write(zud,"nl",1,<:vt-logtail:<'nl'>:>); 3 13573 laf:= 2; 3 13574 write(zud,"sp",2,<<d>,vt_logtail(1),"sp",1,vt_logtail.laf); 3 13575 for i:= 6 step 1 until 10 do 3 13576 write(zud,"sp",1,<<d>,vt_logtail(i)); 3 13577 write(zud,"nl",1); 3 13578 end; 2 13579 \f 2 13579 message procedure p_vogntabel side 1 - 820301/cl; 2 13580 2 13580 procedure p_vogntabel(z); 2 13581 zone z; 2 13582 begin 3 13583 integer i,b,s,o,t,li,lb,lø,g; 3 13584 write(z,<:<10>***** udskrift af vogntabel *****<10>:>, 3 13585 <:<10>max-antal-busser =:>,max_antal_busser,<: sidste-bus =:>, 3 13586 sidste_bus,<:<10>max-antal-linie-løb =:>,max_antal_linie_løb, 3 13587 <: sidste-linie-løb =:>,sidste_linie_løb,"nl",1); 3 13588 3 13588 for i:= 1 step 1 until sidste_bus do 3 13589 begin 4 13590 b:= bustabel(i) extract 14; 4 13591 g:= bustabel(i) shift (-14); 4 13592 s:= bustabel1(i) shift (-23); 4 13593 o:= bustabel1(i) extract 8; 4 13594 t:= intg(bustilstand(i)); 4 13595 li:= linie_løb_tabel(linie_løb_indeks(i) extract 12); 4 13596 lø:= li extract 7; 4 13597 lb:= li shift (-7) extract 5; 4 13598 lb:= if lb=0 then 32 else lb+64; 4 13599 li:= li shift (-12) extract 10; 4 13600 write(z,if i mod 2 = 1 then <:<10>:> else <: :>, 4 13601 <<zddd>,b,if s=1 then <:B:> else <: :>,"sp",1, 4 13602 if g > 0 then string bpl_navn(g) else <: :>, 4 13603 ";",1,true,4,string område_navn(o), 4 13604 <:(:>,<<-dd>,t,<:) :>," ",if lb=' ' then 1 else 0,<<ddd>, 4 13605 li,false add lb,if lb=' ' then 0 else 1,<:/:>,<<zd>,lø); 4 13606 end; 3 13607 end p_vogntabel; 2 13608 \f 2 13608 message procedure p_gruppetabel side 1 - 810531/cl; 2 13609 2 13609 procedure p_gruppetabel(z); 2 13610 zone z; 2 13611 begin 3 13612 integer i,nr,bogst; 3 13613 boolean spc_gr; 3 13614 write(z,"nl",2,<:***** udskrift af gruppetabel *****:>,"nl",1, 3 13615 <:max-antal-grupper =:>,max_antal_grupper, 3 13616 <: max-antal-i-gruppe =:>,max_antal_i_gruppe, 3 13617 <: max-antal-gruppeopkald =:>,max_antal_gruppeopkald,"nl",2, 3 13618 <:gruppetabel::>); 3 13619 for i:= 1 step 1 until max_antal_grupper do 3 13620 write(z,if i mod 10 = 1 then <:<10>:> else <: :>,<<dd>,i,":",1, 3 13621 if gruppetabel(i) <> 0 then "G" else " ",1,true,2,<<b>, 3 13622 gruppetabel(i) extract 7); 3 13623 write(z,"nl",2,<:gruppeopkald::>); 3 13624 for i:= 1 step 1 until max_antal_gruppeopkald do 3 13625 begin 4 13626 write(z,if i mod 4 = 1 then <:<10>:> else <: :>,<<dd>,i,":",1); 4 13627 if gruppeopkald(i,1) = 0 then 4 13628 write(z,"sp",11) 4 13629 else 4 13630 begin 5 13631 spc_gr:= gruppeopkald(i,1) shift (-21) = 5; 5 13632 if spc_gr then nr:= gruppeopkald(i,1) extract 7 5 13633 else 5 13634 begin 6 13635 nr:= gruppeopkald(i,1) shift (-5) extract 10; 6 13636 bogst:= gruppeopkald(i,1) extract 5 +'@'; 6 13637 if bogst = '@' then bogst:= 'sp'; 6 13638 end; 5 13639 if spc_gr then 5 13640 write(z,<:(G:>,<<d>,true,3,nr) 5 13641 else 5 13642 write(z,"(",1,<<ddd>,nr,false add bogst,1); 5 13643 write(z,",",1,<<dddd>,gruppeopkald(i,2),")",1); 5 13644 end; 4 13645 end; 3 13646 end p_gruppetabel; 2 13647 \f 2 13647 message procedure p_springtabel side 1 - 810519/cl; 2 13648 2 13648 procedure p_springtabel(z); 2 13649 zone z; 2 13650 begin 3 13651 integer li,bo,max,st,nr; 3 13652 long indeks; 3 13653 real t; 3 13654 3 13654 write(z,"nl",2,<:***** springtabel *****:>,"nl",1, 3 13655 <:max-antal-spring =:>,max_antal_spring,"nl",2, 3 13656 <:nr spring-id max status næste-tid:>,"nl",1); 3 13657 for nr:= 1 step 1 until max_antal_spring do 3 13658 begin 4 13659 write(z,<<dd>,nr); 4 13660 <* if springtabel(nr,1)<>0 then *> 4 13661 begin 5 13662 li:= springtabel(nr,1) shift (-5) extract 10; 5 13663 bo:= springtabel(nr,1) extract 5; 5 13664 if bo<>0 then bo:= bo + 'A' - 1; 5 13665 indeks:= extend springtabel(nr,2) shift 24; 5 13666 st:= extend springtabel(nr,3) shift (-12) extract 24; 5 13667 max:= springtabel(nr,3) extract 12; 5 13668 write(z,"sp",(bo=0) extract 1 + 2,<<ddd>,li,false add bo,1,<:.:>); 5 13669 write(z,"sp",4-write(z,string indeks),<< dd>,max,<< -dd>,st); 5 13670 if springtid(nr)<>0.0 then 5 13671 write(z,<< zddddd.dddd>,systime(4,springtid(nr),t)+t/1000000) 5 13672 else 5 13673 write(z,<< d.d >,0.0); 5 13674 if springstart(nr)<>0.0 then 5 13675 write(z,<< zddddd.dddd>,systime(4,springstart(nr),t)+t/1000000) 5 13676 else 5 13677 write(z,<< d.d >,0.0); 5 13678 end 4 13679 <* else 4 13680 write(z,<: --------:>)*>; 4 13681 write(z,"nl",1); 4 13682 end; 3 13683 end p_springtabel; 2 13684 \f 2 13684 message procedure find_busnr side 1 - 820301/cl; 2 13685 2 13685 integer procedure findbusnr(ll_id,busnr,garage,tilst); 2 13686 value ll_id; 2 13687 integer ll_id, busnr, garage, tilst; 2 13688 begin 3 13689 integer i,j; 3 13690 3 13690 j:= binærsøg(sidste_linie_løb, 3 13691 (linie_løb_tabel(i) - ll_id), i); 3 13692 if j<>0 then <* linie/løb findes ikke *> 3 13693 begin 4 13694 find_busnr:= -1; 4 13695 busnr:= 0; 4 13696 garage:= 0; 4 13697 tilst:= 0; 4 13698 end 3 13699 else 3 13700 begin 4 13701 busnr:= bustabel(busindeks(i) extract 12); 4 13702 tilst:= intg(bustilstand(intg(busindeks(i)))); 4 13703 garage:= busnr shift (-14); 4 13704 busnr:= busnr extract 14; 4 13705 find_busnr:= busindeks(i) extract 12; 4 13706 end; 3 13707 end find_busnr; 2 13708 \f 2 13708 message procedure søg_omr_bus side 1 - 881027/cl; 2 13709 2 13709 2 13709 integer procedure søg_omr_bus(bus,ll,gar,omr,sig,tilst); 2 13710 value bus; 2 13711 integer bus,ll,gar,omr,sig,tilst; 2 13712 begin 3 13713 integer i,j,nr,bu,bi,bl; 3 13714 3 13714 j:= binærsøg(sidste_bus,((bustabel(bi) extract 14) - (bus extract 14)),bi); 3 13715 nr:= -1; 3 13716 if j=0 then 3 13717 begin 4 13718 bl:= bu:= bi; 4 13719 while bl>1 and bustabel(bl-1) extract 14 = bus extract 14 do bl:=bl-1; 4 13720 while bu<sidste_bus and 4 13721 bustabel(bu+1) extract 14 = bus extract 14 do bu:= bu+1; 4 13722 4 13722 if bl<>bu then 4 13723 begin 5 13724 <* flere busser med samme tekniske nr. omr skal passe *> 5 13725 nr:= -2; 5 13726 for bi:= bl step 1 until bu do 5 13727 if bustabel1(bi) extract 8 = omr extract 8 then nr:= bi; 5 13728 end 4 13729 else 4 13730 nr:= bi; 4 13731 end; 3 13732 3 13732 if nr<0 then 3 13733 begin 4 13734 <* bus findes ikke *> 4 13735 ll:= gar:= tilst:= sig:= 0; 4 13736 end 3 13737 else 3 13738 begin 4 13739 tilst:= intg(bustilstand(nr)); 4 13740 gar:= bustabel(nr) shift (-14); 4 13741 ll:= linie_løb_tabel( linie_løb_indeks(nr) extract 12 ); 4 13742 if omr=0 then omr:= bustabel1(nr) extract 8; 4 13743 sig:= bustabel1(nr) shift (-23); 4 13744 end; 3 13745 søg_omr_bus:= nr; 3 13746 end; 2 13747 \f 2 13747 message procedure find_linie_løb side 1 - 820301/cl; 2 13748 2 13748 integer procedure find_linie_løb(busnr,linie_løb,garage,tilst); 2 13749 value busnr; 2 13750 integer busnr, linie_løb, garage, tilst; 2 13751 begin 3 13752 integer i,j; 3 13753 3 13753 j:= binærsøg(sidste_bus,((bustabel(i) extract 14) - (busnr extract 14)), i); 3 13754 3 13754 if j<>0 then <* bus findes ikke *> 3 13755 begin 4 13756 find_linie_løb:= -1; 4 13757 linie_løb:= 0; 4 13758 garage:= 0; 4 13759 tilst:= 0; 4 13760 end 3 13761 else 3 13762 begin 4 13763 tilst:= intg(bustilstand(i)); 4 13764 garage:= bustabel(i) shift (-14); 4 13765 linie_løb:= linie_løb_tabel(linie_løb_indeks(i) extract 12); 4 13766 find_linie_løb:= linie_løb_indeks(i) extract 12; 4 13767 end; 3 13768 end find_linie_løb; 2 13769 \f 2 13769 message procedure h_vogntabel side 1 - 810413/cl; 2 13770 2 13770 <* hovedmodulcorutine for vogntabelmodul *> 2 13771 2 13771 procedure h_vogntabel; 2 13772 begin 3 13773 integer array field op; 3 13774 integer dest_sem,k; 3 13775 3 13775 procedure skriv_h_vogntabel(zud,omfang); 3 13776 value omfang; 3 13777 zone zud; 3 13778 integer omfang; 3 13779 begin 4 13780 write(zud,"nl",1,<:+++ hovedmodul vogntabel :>); 4 13781 if omfang<>0 then 4 13782 disable 4 13783 begin 5 13784 skriv_coru(zud,abs curr_coruno); 5 13785 write(zud,"nl",1,<<d>, 5 13786 <:cs-vt :>,cs_vt,"nl",1, 5 13787 <:op :>,op,"nl",1, 5 13788 <:dest-sem :>,dest_sem,"nl",1, 5 13789 <:k :>,k,"nl",1, 5 13790 <::>); 5 13791 end; 4 13792 end; 3 13793 \f 3 13793 message procedure h_vogntabel side 2 - 820301/cl; 3 13794 3 13794 stackclaim(if cm_test then 198 else 146); 3 13795 trap(h_vt_trap); 3 13796 3 13796 <*+2*> 3 13797 <**> disable if testbit47 and overvåget or testbit28 then 3 13798 <**> skriv_h_vogntabel(out,0); 3 13799 <*-2*> 3 13800 3 13800 repeat 3 13801 waitch(cs_vt,op,true,-1); 3 13802 <*+4*> 3 13803 if (d.op.optype and gen_optype) extract 12 = 0 and 3 13804 (d.op.optype and vt_optype) extract 12 = 0 then 3 13805 fejlreaktion(12,op,<:vogntabel:>,0); 3 13806 <*-4*> 3 13807 disable 3 13808 begin 4 13809 4 13809 k:= d.op.opkode extract 12; 4 13810 dest_sem:= 4 13811 if k = 9 then cs_vt_rap else 4 13812 if k = 10 then cs_vt_rap else 4 13813 if k = 11 then cs_vt_opd else 4 13814 if k = 12 then cs_vt_opd else 4 13815 if k = 13 then cs_vt_opd else 4 13816 if k = 14 then cs_vt_tilst else 4 13817 if k = 15 then cs_vt_tilst else 4 13818 if k = 16 then cs_vt_tilst else 4 13819 if k = 17 then cs_vt_tilst else 4 13820 if k = 18 then cs_vt_tilst else 4 13821 if k = 19 then cs_vt_opd else 4 13822 if k = 20 then cs_vt_opd else 4 13823 if k = 21 then cs_vt_auto else 4 13824 if k = 24 then cs_vt_opd else 4 13825 if k = 25 then cs_vt_grp else 4 13826 if k = 26 then cs_vt_grp else 4 13827 if k = 27 then cs_vt_grp else 4 13828 if k = 28 then cs_vt_grp else 4 13829 if k = 30 then cs_vt_spring else 4 13830 if k = 31 then cs_vt_spring else 4 13831 if k = 32 then cs_vt_spring else 4 13832 if k = 33 then cs_vt_spring else 4 13833 if k = 34 then cs_vt_spring else 4 13834 if k = 35 then cs_vt_spring else 4 13835 -1; 4 13836 \f 4 13836 message procedure h_vogntabel side 3 - 810422/cl; 4 13837 4 13837 <*+2*> 4 13838 <**> if testbit41 and overvåget then 4 13839 <**> begin 5 13840 <**> skriv_h_vogntabel(out,0); write(out,<: modtaget operation:>); 5 13841 <**> skriv_op(out,op); 5 13842 <**> end; 4 13843 <*-2*> 4 13844 end; 3 13845 3 13845 if dest_sem = -1 then 3 13846 fejlreaktion(2,k,<:vogntabel:>,0); 3 13847 disable signalch(dest_sem,op,d.op.optype); 3 13848 until false; 3 13849 h_vt_trap: 3 13850 disable skriv_h_vogntabel(zbillede,1); 3 13851 end h_vogntabel; 2 13852 \f 2 13852 message procedure vt_opdater side 1 - 810317/cl; 2 13853 2 13853 procedure vt_opdater(op1); 2 13854 value op1; 2 13855 integer op1; 2 13856 begin 3 13857 integer array field op,radop; 3 13858 integer funk,res,busnr,ll_id,ll1,omr,gar,sig,tilst,bi,li,s,zi, 3 13859 format,ll_id1,ll_id2,inf1,inf2,i,bi1,bi2,li1,li2,pm1, 3 13860 flin,slin,finx,sinx; 3 13861 integer field bn,ll; 3 13862 3 13862 procedure skriv_vt_opd(zud,omfang); 3 13863 value omfang; integer omfang; 3 13864 zone zud; 3 13865 begin 4 13866 write(zud,"nl",1,<:+++ vt_opdater :>); 4 13867 if omfang <> 0 then 4 13868 disable 4 13869 begin 5 13870 skriv_coru(zud,abs curr_coruno); 5 13871 write(zud,"nl",1, 5 13872 <: op: :>,op,"nl",1, 5 13873 <: radop::>,radop,"nl",1, 5 13874 <: funk: :>,funk,"nl",1, 5 13875 <: res: :>,res,"nl",1, 5 13876 <::>); 5 13877 end; 4 13878 end skriv_vt_opd; 3 13879 3 13879 integer procedure opd_omr(fnk,omr,bus,ll); 3 13880 value fnk,omr,bus,ll; 3 13881 integer fnk,omr,bus,ll; 3 13882 begin 4 13883 opd_omr:= 3; 4 13884 <*GØR PROCEDUREN TIL DUMMYPROCEDURE - 4 13885 ændringer skal ikke længere meldes til yderområder *> 4 13886 goto dummy_retur; 4 13887 4 13887 if omr extract 8 > 3 then 4 13888 begin 5 13889 startoperation(radop,501,cs_vt_opd,fnk); 5 13890 d.radop.data(1):= omr; 5 13891 d.radop.data(2):= bus; 5 13892 d.radop.data(3):= ll; 5 13893 signalch(cs_rad,radop,vt_optype); 5 13894 <*V*> waitch(cs_vt_opd,radop,vt_optype,-1); 5 13895 opd_omr:= d.radop.resultat; 5 13896 end 4 13897 else 4 13898 opd_omr:= 0; 4 13899 dummy_retur: 4 13900 end; 3 13901 message procedure vt_opdater side 1a - 920517/cl; 3 13902 3 13902 procedure opd_log(kilde,kode,bus,ll1,ll2); 3 13903 value kilde,kode,bus,ll1,ll2; 3 13904 integer kilde,kode,bus,ll1,ll2; 3 13905 begin 4 13906 integer array field op; 4 13907 4 13907 <*V*> waitch(cs_vt_logpool,op,vt_optype,-1); 4 13908 4 13908 startoperation(op,curr_coruid,cs_vt_logpool,0); 4 13909 systime(1,0.0,d.op.data.v_tid); 4 13910 d.op.data.v_kode:= kode + (if kilde=506 <*vt_auto*> then 0 else 4); 4 13911 d.op.data.v_bus:= bus; 4 13912 d.op.data.v_ll1:= ll1; 4 13913 d.op.data.v_ll2:= ll2; 4 13914 signalch(cs_vt_log,op,vt_optype); 4 13915 end; 3 13916 3 13916 stackclaim((if cm_test then 198 else 146)+125); 3 13917 3 13917 bn:= 4; ll:= 2; 3 13918 radop:= op1; 3 13919 trap(vt_opd_trap); 3 13920 3 13920 <*+2*> 3 13921 <**> disable if testbit47 and overvåget or testbit28 then 3 13922 <**> skriv_vt_opd(out,0); 3 13923 <*-2*> 3 13924 \f 3 13924 message procedure vt_opdater side 2 - 851001/cl; 3 13925 3 13925 vent_op: 3 13926 waitch(cs_vt_opd,op,gen_optype or vt_optype,-1); 3 13927 3 13927 <*+2*> 3 13928 <**> disable 3 13929 <**> if testbit41 and overvåget then 3 13930 <**> begin 4 13931 <**> skriv_vt_opd(out,0); 4 13932 <**> write(out,<: modtaget operation:>); 4 13933 <**> skriv_op(out,op); 4 13934 <**> end; 3 13935 <*-2*> 3 13936 3 13936 <*+4*> 3 13937 <**>if op<>vt_op then 3 13938 <**>begin 4 13939 <**> disable begin 5 13940 <**> fejlreaktion(11,op,<:vt-opdater:>,1); 5 13941 <**> d.op.resultat:= 31; <*systemfejl*> 5 13942 <**> signalch(d.op.retur,op,d.op.optype); 5 13943 <**> end; 4 13944 <**> goto vent_op; 4 13945 <**>end; 3 13946 <*-4*> 3 13947 disable 3 13948 begin integer opk; 4 13949 4 13949 opk:= d.op.opkode extract 12; 4 13950 funk:= if opk=11 then 1 else 4 13951 if opk=12 then 2 else 4 13952 if opk=13 then 3 else 4 13953 if opk=19 then 4 else 4 13954 if opk=20 then 5 else 4 13955 if opk=24 then 6 else 4 13956 0; 4 13957 if funk=0 then fejlreaktion( 2,opk,<:vt_opdater:>,0); 4 13958 end; 3 13959 res:= 0; 3 13960 goto case funk of (indsæt,udtag,omkod,slet,flyt,roker); 3 13961 \f 3 13961 message procedure vt_opdater side 3 - 820301/cl; 3 13962 3 13962 indsæt: 3 13963 begin 4 13964 integer busnr,ll_id,ll1,omr,gar,sig,tilst,bi,li,s,zi; 4 13965 <*+4*> 4 13966 <**> if d.op.data(1) shift (-22) <> 0 then 4 13967 <**> begin 5 13968 <**> res:= 31; fejlreaktion(10,d.op.data(1),<:indsæt busnr:>,1); 5 13969 <**> goto slut_indsæt; 5 13970 <**> end; 4 13971 <*-4*> 4 13972 busnr:= d.op.data(1) extract 14; 4 13973 <*+4*> 4 13974 <**> if d.op.data(2) shift (-22) <> 1 then 4 13975 <**> begin 5 13976 <**> res:= 31; fejlreaktion(10,d.op.data(2),<:indsæt linie/løb:>,1); 5 13977 <**> goto slut_indsæt; 5 13978 <**> end; 4 13979 <*-4*> 4 13980 ll_id:= d.op.data(2); 4 13981 s:= omr:= d.op.data(4) extract 8; 4 13982 bi:= søg_omr_bus(busnr,ll1,gar,omr,sig,tilst); 4 13983 if bi<0 then 4 13984 begin 5 13985 if bi=(-1) then res:=10 <*bus ukendt*> else 5 13986 if s<>0 then res:= 58 <*ulovligt omr*> else res:= 57 <*omr nødv.*>; 5 13987 end 4 13988 else 4 13989 if s<>0 and s<>omr then 4 13990 res:= 58 <* ulovligt område for bus *> 4 13991 else 4 13992 if intg(bustilstand(bi)) <> 0 then 4 13993 res:=(if intg(bustilstand(bi))=(-1) then 18 <* i kø *> 4 13994 else 14 <* optaget *>) 4 13995 else 4 13996 begin 5 13997 if linie_løb_indeks(bi) extract 12 <> 0 then 5 13998 begin <* linie/løb allerede indsat *> 6 13999 res:= 11; 6 14000 d.op.data(3):= linie_løb_tabel(linie_løb_indeks(bi) extract 12); 6 14001 end 5 14002 else 5 14003 begin 6 14004 \f 6 14004 message procedure vt_opdater side 3a - 900108/cl; 6 14005 6 14005 if d.op.kilde//100 <> 4 then 6 14006 res:= opd_omr(11,gar shift 8 + 6 14007 bustabel1(bi) extract 8,busnr,ll_id); 6 14008 if res>3 then goto slut_indsæt; 6 14009 s:= binærsøg(sidste_linie_løb,linie_løb_tabel(li) - ll_id,li); 6 14010 if s=0 then <* linie/løb findes allerede *> 6 14011 begin 7 14012 sig:= busindeks(li) extract 12; 7 14013 d.op.data(3):= bustabel(sig); 7 14014 linie_løb_indeks(sig):= false; 7 14015 disable modiffil(tf_vogntabel,sig,zi); 7 14016 fil(zi).ll:= 0; 7 14017 fil(zi).bn:= bustabel(sig) extract 14 add 7 14018 (bustabel1(sig) extract 8 shift 14); 7 14019 opd_log(d.op.kilde,2,bustabel(sig),ll_id,0); 7 14020 7 14020 linie_løb_indeks(bi):= false add li; 7 14021 busindeks(li):= false add bi; 7 14022 disable modiffil(tf_vogntabel,bi,zi); 7 14023 fil(zi).ll:= ll_id; 7 14024 fil(zi).bn:= bustabel(bi) extract 14 add 7 14025 (bustabel1(bi) extract 8 shift 14); 7 14026 opd_log(d.op.kilde,1,busnr,0,ll_id); 7 14027 res:= 3; 7 14028 end 6 14029 else 6 14030 begin 7 14031 \f 7 14031 message procedure vt_opdater side 4 - 810527/cl; 7 14032 7 14032 if s<0 then li:= li +1; 7 14033 if sidste_linie_løb=max_antal_linie_løb then 7 14034 begin 8 14035 fejlreaktion(10,max_antal_linie_løb,<:for mange linie/løb:>,1); 8 14036 res:= 31; 8 14037 end 7 14038 else 7 14039 begin 8 14040 for i:= sidste_linie_løb step -1 until li do 8 14041 begin 9 14042 linie_løb_tabel(i+1):=linie_løb_tabel(i); 9 14043 linie_løb_indeks(bus_indeks(i) extract 12):=false add (i+1); 9 14044 bus_indeks(i+1):=bus_indeks(i); 9 14045 end; 8 14046 sidste_linie_løb:= sidste_linie_løb +1; 8 14047 linie_løb_tabel(li):= ll_id; 8 14048 linie_løb_indeks(bi):= false add li; 8 14049 busindeks(li):= false add bi; 8 14050 disable s:= modiffil(tf_vogntabel,bi,zi); 8 14051 if s<>0 then fejlreaktion(7,s,<:vt_indsæt:>,0); 8 14052 fil(zi).bn:= busnr extract 14 add 8 14053 (bustabel1(bi) extract 8 shift 14); 8 14054 fil(zi).ll:= ll_id; 8 14055 opd_log(d.op.kilde,1,busnr,0,ll_id); 8 14056 res:= 3; <* ok *> 8 14057 end; 7 14058 end; 6 14059 end; 5 14060 end; 4 14061 slut_indsæt: 4 14062 d.op.resultat:= res; 4 14063 end; 3 14064 goto returner; 3 14065 \f 3 14065 message procedure vt_opdater side 5 - 820301/cl; 3 14066 3 14066 udtag: 3 14067 begin 4 14068 integer busnr,ll_id,omr,gar,sig,bi,li,s,format,tilst,zi; 4 14069 4 14069 busnr:= ll_id:= 0; 4 14070 omr:= s:= d.op.data(2) extract 8; 4 14071 format:= d.op.data(1) shift (-22); 4 14072 if format=0 then <*busnr*> 4 14073 begin 5 14074 busnr:= d.op.data(1) extract 14; 5 14075 bi:= søg_omr_bus(busnr,ll_id,gar,omr,sig,tilst); 5 14076 if bi<0 then 5 14077 begin 6 14078 if bi=-1 then res:= 10 else 6 14079 if s<>0 then res:= 58 else res:= 57; 6 14080 goto slut_udtag; 6 14081 end; 5 14082 if bi>0 and s<>0 and s<>omr then 5 14083 begin 6 14084 res:= 58; goto slut_udtag; 6 14085 end; 5 14086 li:= linie_løb_indeks(bi) extract 12; 5 14087 busnr:= bustabel(bi); 5 14088 if li=0 or linie_løb_tabel(li)=0 then 5 14089 begin <* bus ej indsat *> 6 14090 res:= 13; 6 14091 goto slut_udtag; 6 14092 end; 5 14093 ll_id:= linie_løb_tabel(li); 5 14094 end 4 14095 else 4 14096 if format=1 then <* linie_løb *> 4 14097 begin 5 14098 ll_id:= d.op.data(1); 5 14099 s:= binærsøg(sidste_linie_løb,linie_løb_tabel(li)-ll_id,li); 5 14100 if s<>0 then 5 14101 begin <* linie/løb findes ikke *> 6 14102 res:= 9; 6 14103 goto slut_udtag; 6 14104 end; 5 14105 bi:= busindeks(li) extract 12; 5 14106 busnr:= bustabel(bi); 5 14107 end 4 14108 else <* ulovlig identifikation *> 4 14109 begin 5 14110 res:= 31; 5 14111 fejlreaktion(10,d.op.data(1),<:udtag ident:>,1); 5 14112 goto slut_udtag; 5 14113 end; 4 14114 \f 4 14114 message procedure vt_opdater side 6 - 820301/cl; 4 14115 4 14115 tilst:= intg(bustilstand(bi)); 4 14116 if tilst<>0 then 4 14117 begin 5 14118 res:= if tilst = -1 then 18<*i kø*> else 14<*optaget*>; 5 14119 goto slut_udtag; 5 14120 end; 4 14121 if d.op.kilde//100 <> 4 then 4 14122 res:= opd_omr(12, bustabel(bi) shift (-14) extract 8 shift 8 + 4 14123 bustabel1(bi) extract 8,bustabel(bi) extract 14,0); 4 14124 if res>3 then goto slut_udtag; 4 14125 linie_løb_indeks(bi):= false; 4 14126 for i:= li step 1 until sidste_linie_løb -1 do 4 14127 begin 5 14128 linie_løb_tabel(i):= linie_løb_tabel(i+1); 5 14129 linie_løb_indeks(bus_indeks(i+1) extract 12):= false add i; 5 14130 bus_indeks(i):= bus_indeks(i+1); 5 14131 end; 4 14132 linie_løb_tabel(sidste_linie_løb):= 0; 4 14133 bus_indeks(sidste_linie_løb):= false; 4 14134 sidste_linie_løb:= sidste_linie_løb -1; 4 14135 disable s:= modif_fil(tf_vogntabel,bi,zi); 4 14136 if s<>0 then fejlreaktion(7,s,<:vt_udtag:>,0); 4 14137 fil(zi).ll:= 0; 4 14138 fil(zi).bn:= busnr add (bustabel1(bi) extract 8 shift 14); 4 14139 opd_log(d.op.kilde,2,busnr,ll_id,0); 4 14140 res:= 3; <* ok *> 4 14141 slut_udtag: 4 14142 d.op.resultat:= res; 4 14143 d.op.data(2):= ll_id; 4 14144 d.op.data(3):= busnr; 4 14145 end; 3 14146 goto returner; 3 14147 \f 3 14147 message procedure vt_opdater side 7 - 851001/cl; 3 14148 3 14148 omkod: 3 14149 flyt: 3 14150 roker: 3 14151 begin 4 14152 integer ll_id1,ll_id2,inf1,inf2,i,s,bi1,bi2,li1,li2,tilst,zi,pm1; 4 14153 4 14153 inf1:= inf2:= 0; 4 14154 ll_id1:= d.op.data(1); 4 14155 ll_id2:= d.op.data(2); 4 14156 if ll_id1=ll_id2 then 4 14157 begin 5 14158 res:= 24; inf1:= ll_id2; 5 14159 goto slut_flyt; 5 14160 end; 4 14161 <*+4*> 4 14162 <**> for i:= 1,2 do 4 14163 <**> if d.op.data(i) shift (-22) <> 1 then 4 14164 <**> begin 5 14165 <**> res:= 31; 5 14166 <**> fejlreaktion(10,d.op.data(i),case i of ( 5 14167 <**> <:omkod/flyt/roker ident1:>,<:omkod/flyt/roker ident2:>),1); 5 14168 <**> goto slut_flyt; 5 14169 <**> end; 4 14170 <*-4*> 4 14171 4 14171 s:= binærsøg(sidste_linie_løb,linie_løb_tabel(li1) - ll_id1,li1); 4 14172 if s<>0 and funk=6 <* roker *> then 4 14173 begin 5 14174 i:= ll_id1; ll_id1:= ll_id2; ll_id2:= i; 5 14175 s:= binærsøg(sidste_linie_løb,linie_løb_tabel(li1) - ll_id1,li1); 5 14176 end; 4 14177 if s<>0 then 4 14178 begin 5 14179 res:= 9; <* ukendt linie/løb *> 5 14180 goto slut_flyt; 5 14181 end; 4 14182 bi1:= busindeks(li1) extract 12; 4 14183 inf1:= bustabel(bi1); 4 14184 tilst:= intg(bustilstand(bi1)); 4 14185 if tilst<>0 then <* bus ikke fri *> 4 14186 begin 5 14187 res:= if tilst=-1 then 18 <* i kø *> else 14 <*optaget*>; 5 14188 goto slut_flyt; 5 14189 end; 4 14190 \f 4 14190 message procedure vt_opdater side 7a- 851001/cl; 4 14191 if d.op.kilde//100 <> 4 then 4 14192 4 14192 res:= opd_omr(11, bustabel(bi1) shift (-14) extract 8 shift 8 + 4 14193 bustabel1(bi1) extract 8, inf1 extract 14, ll_id2); 4 14194 if res>3 then goto slut_flyt; 4 14195 4 14195 s:= binærsøg(sidste_linie_løb,linie_løb_tabel(li2) - ll_id2,li2); 4 14196 if s=0 then 4 14197 begin <* ll_id2 er indkodet *> 5 14198 bi2:= busindeks(li2) extract 12; 5 14199 inf2:= bustabel(bi2); 5 14200 tilst:= intg(bustilstand(bi2)); 5 14201 if funk=3 then res:= 12 <* ulovlig ved omkod *> else 5 14202 if tilst=-1 then res:= 18 else if tilst<>0 then res:= 14; 5 14203 if res>3 then 5 14204 begin 6 14205 inf1:= inf2; inf2:= 0; 6 14206 goto slut_flyt; 6 14207 end; 5 14208 5 14208 if d.op.kilde//100 <> 4 then 5 14209 res:= opd_omr(11, bustabel(bi2) shift (-14) extract 8 shift 8 + 5 14210 bustabel1(bi2) extract 8, inf2 extract 14, ll_id1); 5 14211 if res>3 then goto slut_flyt; 5 14212 5 14212 <* flyt bus *> 5 14213 if funk=6 then 5 14214 linie_løb_indeks(bi2):= false add li1 5 14215 else 5 14216 linie_løb_indeks(bi2):= false; 5 14217 linie_løb_indeks(bi1):= false add li2; 5 14218 if funk=6 then 5 14219 busindeks(li1):= false add bi2 5 14220 else 5 14221 busindeks(li1):= false; 5 14222 busindeks(li2):= false add bi1; 5 14223 5 14223 if funk<>6 then 5 14224 begin 6 14225 <* fjern ll_id1 *> 6 14226 for i:= li1 step 1 until sidste_linie_løb - 1 do 6 14227 begin 7 14228 linie_løb_tabel(i):= linie_løb_tabel(i+1); 7 14229 linie_løb_indeks(intg(busindeks(i+1))):= false add i; 7 14230 busindeks(i):= busindeks(i+1); 7 14231 end; 6 14232 linie_løb_tabel(sidste_linie_løb):= 0; 6 14233 bus_indeks(sidste_linie_løb):= false; 6 14234 sidste_linie_løb:= sidste_linie_løb-1; 6 14235 end; 5 14236 5 14236 <* opdater vogntabelfil *> 5 14237 disable s:= modiffil(tf_vogntabel,bi2,zi); 5 14238 if s<>0 then fejlreaktion(7,s,<:vt-omkod/flyt:>,0); 5 14239 fil(zi).ll:= if funk=6 then ll_id1 else 0; 5 14240 fil(zi).bn:= inf2 extract 14 add (bustabel1(bi2) extract 8 shift 14); 5 14241 if funk=6 then 5 14242 opd_log(d.op.kilde,3,bustabel(bi2),ll_id2,ll_id1) 5 14243 else 5 14244 opd_log(d.op.kilde,2,bustabel(bi2),ll_id2,0); 5 14245 disable s:= modiffil(tf_vogntabel,bi1,zi); 5 14246 if s<>0 then fejlreaktion(7,s,<:vt-omkod/flyt:>,0); 5 14247 fil(zi).ll:= ll_id2; 5 14248 fil(zi).bn:= inf1 extract 14 add (bustabel1(bi1) extract 8 shift 14); 5 14249 opd_log(d.op.kilde,3,bustabel(bi1),ll_id1,ll_id2); 5 14250 \f 5 14250 message procedure vt_opdater side 8 - 820301/cl; 5 14251 5 14251 end <* ll_id2 indkodet *> 4 14252 else 4 14253 begin 5 14254 if sign(s)=sign(li2-li1) then li2:=li2-sign(s); 5 14255 <* li2 skal være indeks for sidste linie/løb der skal flyttes i vt *> 5 14256 pm1:= sgn(li2-li1); 5 14257 for i:= li1 step pm1 until li2-pm1 do 5 14258 begin 6 14259 linie_løb_tabel(i):= linie_løb_tabel(i+pm1); 6 14260 busindeks(i):= busindeks(i+pm1); 6 14261 linie_løb_indeks(intg(busindeks(i+pm1))):= false add i; 6 14262 end; 5 14263 linie_løb_tabel(li2):= ll_id2; 5 14264 busindeks(li2):= false add bi1; 5 14265 linie_løb_indeks(bi1):= false add li2; 5 14266 disable s:= modiffil(tf_vogntabel,bi1,zi); 5 14267 if s<>0 then fejlreaktion(7,s,<:vt-omkod/flyt:>,0); 5 14268 fil(zi).ll:= ll_id2; 5 14269 fil(zi).bn:= inf1 extract 14 add (bustabel1(bi1) extract 8 shift 14); 5 14270 opd_log(d.op.kilde,3,bustabel(bi1),ll_id1,ll_id2); 5 14271 end; 4 14272 res:= 3; <*udført*> 4 14273 slut_flyt: 4 14274 d.op.resultat:= res; 4 14275 d.op.data(3):= inf1; 4 14276 if funk=5 then d.op.data(4):= inf2; 4 14277 end; 3 14278 goto returner; 3 14279 \f 3 14279 message procedure vt_opdater side 9 - 851001/cl; 3 14280 3 14280 slet: 3 14281 begin 4 14282 integer flin,slin,finx,sinx,s,li,bi,omr,gar; 4 14283 boolean test24; 4 14284 4 14284 if d.op.data(2)=0 then d.op.data(2):= d.op.data(1); 4 14285 omr:= d.op.data(3); 4 14286 4 14286 if d.op.data(1) > d.op.data(2) then 4 14287 begin 5 14288 res:= 44; <* intervalstørrelse ulovlig *> 5 14289 goto slut_slet; 5 14290 end; 4 14291 4 14291 flin:= (1 shift 22) + (d.op.data(1) extract 21 shift 7); 4 14292 slin:= (1 shift 22) + (d.op.data(2) extract 21 shift 7) + 127; 4 14293 4 14293 s:= binærsøg(sidste_linie_løb, (linie_løb_tabel(finx)-flin), finx); 4 14294 if s<0 then finx:= finx+1; 4 14295 s:= binærsøg(sidste_linie_løb, (linie_løb_tabel(sinx)-slin), sinx); 4 14296 if s>0 then sinx:= sinx-1; 4 14297 4 14297 for li:= finx step 1 until sinx do 4 14298 begin 5 14299 bi:= busindeks(li) extract 12; 5 14300 gar:= bustabel(bi) shift (-14) extract 8; 5 14301 if intg(bustilstand(bi))=0 and 5 14302 (omr = 0 or (omr > 0 and omr = gar) or 5 14303 (omr < 0 and omr extract 8 = bustabel1(bi) extract 8)) then 5 14304 begin 6 14305 opd_log(d.op.kilde,2,bustabel(bi),linie_løb_tabel(li),0); 6 14306 linie_løb_indeks(bi):= busindeks(li):= false; 6 14307 linie_løb_tabel(li):= 0; 6 14308 end; 5 14309 end; 4 14310 \f 4 14310 message procedure vt_opdater side 10 - 850820/cl; 4 14311 4 14311 sinx:= finx-1; 4 14312 for li:= finx step 1 until sidste_linie_løb do 4 14313 begin 5 14314 if linie_løb_tabel(li)<>0 then 5 14315 begin 6 14316 sinx:= sinx+1; 6 14317 if sinx<>li then 6 14318 begin 7 14319 linie_løb_tabel(sinx):= linie_løb_tabel(li); 7 14320 busindeks(sinx):= busindeks(li); 7 14321 linie_løb_indeks(busindeks(sinx) extract 12):= false add sinx; 7 14322 linie_løb_tabel(li):= 0; 7 14323 busindeks(li):= false; 7 14324 end; 6 14325 end; 5 14326 end; 4 14327 sidste_linie_løb:= sinx; 4 14328 4 14328 test24:= testbit24; testbit24:= false; 4 14329 for bi:= 1 step 1 until sidste_bus do 4 14330 disable 4 14331 begin 5 14332 s:= modiffil(tf_vogntabel,bi,finx); 5 14333 if s<>0 then fejlreaktion(7,s,<:vt-slet:>,0); 5 14334 fil(finx).bn:= bustabel(bi) extract 14 add 5 14335 (bustabel1(bi) extract 8 shift 14); 5 14336 fil(finx).ll:= linie_løb_tabel(linie_løb_indeks(bi) extract 12); 5 14337 end; 4 14338 testbit24:= test24; 4 14339 res:= 3; 4 14340 4 14340 slut_slet: 4 14341 d.op.resultat:= res; 4 14342 end; 3 14343 goto returner; 3 14344 \f 3 14344 message procedure vt_opdater side 11 - 810409/cl; 3 14345 3 14345 returner: 3 14346 disable 3 14347 begin 4 14348 4 14348 <*+2*> 4 14349 <**> if testbit40 and overvåget then 4 14350 <**> begin 5 14351 <**> skriv_vt_opd(out,0); 5 14352 <**> write(out,<: vogntabel efter ændring:>); 5 14353 <**> p_vogntabel(out); 5 14354 <**> end; 4 14355 <**> if testbit41 and overvåget then 4 14356 <**> begin 5 14357 <**> skriv_vt_opd(out,0); 5 14358 <**> write(out,<: returner operation:>); 5 14359 <**> skriv_op(out,op); 5 14360 <**> end; 4 14361 <*-2*> 4 14362 4 14362 signalch(d.op.retur,op,d.op.optype); 4 14363 end; 3 14364 goto vent_op; 3 14365 3 14365 vt_opd_trap: 3 14366 disable skriv_vt_opd(zbillede,1); 3 14367 3 14367 end vt_opdater; 2 14368 \f 2 14368 message procedure vt_tilstand side 1 - 810424/cl; 2 14369 2 14369 procedure vt_tilstand(cs_fil,fil_opref); 2 14370 value cs_fil,fil_opref; 2 14371 integer cs_fil,fil_opref; 2 14372 begin 3 14373 integer array field op,filop; 3 14374 integer funk,format,busid,res,bi,tilst,opk,opk_indeks, 3 14375 g_type,gr,antal,ej_res,zi,li,filref; 3 14376 integer array identer(1:max_antal_i_gruppe); 3 14377 3 14377 procedure skriv_vt_tilst(zud,omfang); 3 14378 value omfang; 3 14379 zone zud; 3 14380 integer omfang; 3 14381 begin 4 14382 real array field raf; 4 14383 raf:= 0; 4 14384 write(zud,"nl",1,<:+++ vt_tilstand :>); 4 14385 if omfang <> 0 then 4 14386 begin 5 14387 skriv_coru(zud,abs curr_coruno); 5 14388 write(zud,"nl",1,<<d>, 5 14389 <:cs-fil :>,cs_fil,"nl",1, 5 14390 <:filop :>,filop,"nl",1, 5 14391 <:op :>,op,"nl",1, 5 14392 <:funk :>,funk,"nl",1, 5 14393 <:format :>,format,"nl",1, 5 14394 <:busid :>,busid,"nl",1, 5 14395 <:res :>,res,"nl",1, 5 14396 <:bi :>,bi,"nl",1, 5 14397 <:tilst :>,tilst,"nl",1, 5 14398 <:opk :>,opk,"nl",1, 5 14399 <:opk-indeks :>,opk_indeks,"nl",1, 5 14400 <:g-type :>,g_type,"nl",1, 5 14401 <:gr :>,gr,"nl",1, 5 14402 <:antal :>,antal,"nl",1, 5 14403 <:ej-res :>,ej_res,"nl",1, 5 14404 <:zi :>,zi,"nl",1, 5 14405 <:li :>,li,"nl",1, 5 14406 <::>); 5 14407 write(zud,"nl",1,<:identer:>); 5 14408 skriv_hele(zud,identer.raf,max_antal_i_gruppe*2,2); 5 14409 end; 4 14410 end; 3 14411 3 14411 procedure sorter_gruppe(tab,l,u); 3 14412 value l,u; 3 14413 integer array tab; 3 14414 integer l,u; 3 14415 begin 4 14416 integer array field ii,jj; 4 14417 integer array ww, xx(1:2); 4 14418 4 14418 integer procedure sml(a,b); 4 14419 integer array a,b; 4 14420 begin 5 14421 integer res; 5 14422 5 14422 res:= sign((a(1) shift (-8) extract 4) - (b(1) shift (-8) extract 4)); 5 14423 if res = 0 then 5 14424 res:= sign((b(1) shift (-18)) - (a(1) shift (-18))); 5 14425 if res = 0 then 5 14426 res:= 5 14427 sign((a(1) shift (-12) extract 6) - (b(1) shift (-12) extract 6)); 5 14428 if res = 0 then 5 14429 res:= sign((a(2) extract 14) - (b(2) extract 14)); 5 14430 sml:= res; 5 14431 end; 4 14432 4 14432 ii:= ((l+u)//2 - 1)*4; 4 14433 tofrom(xx,tab.ii,4); 4 14434 ii:= (l-1)*4; jj:= (u-1)*4; 4 14435 repeat 4 14436 while sml(tab.ii,xx) < 0 do ii:= ii+4; 4 14437 while sml(xx,tab.jj) < 0 do jj:= jj-4; 4 14438 if ii <= jj then 4 14439 begin 5 14440 tofrom(ww,tab.ii,4); 5 14441 tofrom(tab.ii,tab.jj,4); 5 14442 tofrom(tab.jj,ww,4); 5 14443 ii:= ii+4; 5 14444 jj:= jj-4; 5 14445 end; 4 14446 until ii>jj; 4 14447 if l < jj//4+1 then sorter_gruppe(tab,l,jj//4+1); 4 14448 if ii//4+1 < u then sorter_gruppe(tab,ii//4+1,u); 4 14449 end; 3 14450 \f 3 14450 message procedure vt_tilstand side 2 - 820301/cl; 3 14451 3 14451 filop:= filopref; 3 14452 stackclaim(if cm_test then 550 else 500); 3 14453 trap(vt_tilst_trap); 3 14454 3 14454 <*+2*> 3 14455 <**> disable if testbit47 and overvåget or testbit28 then 3 14456 <**> skriv_vt_tilst(out,0); 3 14457 <*-2*> 3 14458 3 14458 vent_op: 3 14459 waitch(cs_vt_tilst,op,vt_optype or gen_optype,-1); 3 14460 <*+2*>disable 3 14461 <**> if (testbit41 and overvåget) or 3 14462 (testbit46 and overvåget and 3 14463 (d.op.opkode extract 12 = 16 or d.op.opkode extract 12 = 18)) 3 14464 then 3 14465 <**> begin 4 14466 <**> skriv_vt_tilst(out,0); 4 14467 <**> write(out,<: modtaget operation:>); 4 14468 <**> skriv_op(out,op); 4 14469 <**> end; 3 14470 <*-2*> 3 14471 3 14471 <*+4*> 3 14472 <**> if op <> vt_op then 3 14473 <**> begin 4 14474 <**> disable begin 5 14475 <**> d.op.resultat:= 31; 5 14476 <**> fejlreaktion(11,op,<:vt-tilstand:>,1); 5 14477 <**> end; 4 14478 <**> goto returner; 4 14479 <**> end; 3 14480 <*-4*> 3 14481 3 14481 opk:= d.op.opkode extract 12; 3 14482 funk:= if opk = 14 <*bus i kø*> then 1 else 3 14483 if opk = 15 <*bus res *> then 2 else 3 14484 if opk = 16 <*grp res *> then 4 else 3 14485 if opk = 17 <*bus fri *> then 3 else 3 14486 if opk = 18 <*grp fri *> then 5 else 3 14487 0; 3 14488 if funk = 0 then fejlreaktion(2,opk,<:vt_tilstand:>,0); 3 14489 res:= 0; 3 14490 format:= d.op.data(1) shift (-22); 3 14491 3 14491 goto case funk of(enkelt_bus,enkelt_bus,enkelt_bus,grp_res,grp_fri); 3 14492 \f 3 14492 message procedure vt_tilstand side 3 - 820301/cl; 3 14493 3 14493 enkelt_bus: 3 14494 <* sæt enkelt bus i kø, reserver eller frigiv enkelt bus *> 3 14495 disable 3 14496 begin integer busnr,i,s,tilst,ll,gar,omr,sig; 4 14497 <*+4*> 4 14498 <**>if format <> 0 and format <> 1 then 4 14499 <**>begin 5 14500 <**> res:= 31; 5 14501 <**> fejlreaktion(10,d.op.data(1),<:tilstand ident:>,1); 5 14502 <**> goto slut_enkelt_bus; 5 14503 <**>end; 4 14504 <*-4*> 4 14505 <* find busnr og tilstand *> 4 14506 case format+1 of 4 14507 begin 5 14508 <* 0: budident *> 5 14509 begin 6 14510 busnr:= d.op.data(1) extract 14; 6 14511 s:= omr:= d.op.data(4) extract 8; 6 14512 bi:= søg_omr_bus(busnr,ll,gar,omr,sig,tilst); 6 14513 if bi<0 then 6 14514 begin 7 14515 res:= if bi=(-1) then 10 else (if s<>0 then 58 else 57); 7 14516 goto slut_enkelt_bus; 7 14517 end 6 14518 else 6 14519 begin 7 14520 tilst:= intg(bustilstand(bi)); 7 14521 end; 6 14522 end; 5 14523 5 14523 <* 1: linie_løb_ident *> 5 14524 begin 6 14525 bi:= findbusnr(d.op.data(1),busnr,i,tilst); 6 14526 if bi < 0 then <* ukendt linie_løb *> 6 14527 begin 7 14528 res:= 9; 7 14529 goto slut_enkelt_bus; 7 14530 end; 6 14531 end; 5 14532 end case; 4 14533 \f 4 14533 message procedure vt_tilstand side 4 - 830310/cl; 4 14534 4 14534 if funk < 3 then 4 14535 begin 5 14536 d.op.data(2):= if linie_løb_indeks(bi) extract 12 <> 0 then 5 14537 linie_løb_tabel(linie_løb_indeks(bi) extract 12) 5 14538 else 0; 5 14539 d.op.data(3):= bustabel(bi); 5 14540 d.op.data(4):= bustabel1(bi); 5 14541 end; 4 14542 4 14542 <* check tilstand *> 4 14543 if funk = 3 <*frigiv*> and tilst >= 0 <*fri/optaget_i_gruppe*> then 4 14544 res:= 39 <* bus ikke reserveret *> 4 14545 else 4 14546 if tilst <> 0 and tilst <> (-1) and funk < 3 then 4 14547 res:= 14 <* bus optaget *> 4 14548 else 4 14549 if funk = 1 <* i kø *> and tilst = (-1) then 4 14550 res:= 18 <* i kø *> 4 14551 else 4 14552 res:= 3; <*udført*> 4 14553 4 14553 if res = 3 then 4 14554 bustilstand(bi):= false add (case funk of (-1,-2,0)); 4 14555 4 14555 slut_enkelt_bus: 4 14556 d.op.resultat:= res; 4 14557 end <*disable*>; 3 14558 goto returner; 3 14559 \f 3 14559 message procedure vt_tilstand side 5 - 810424/cl; 3 14560 3 14560 grp_res: <* reserver gruppe *> 3 14561 disable 3 14562 begin 4 14563 4 14563 <*+4*> 4 14564 <**> if format <> 2 then 4 14565 <**> begin 5 14566 <**> res:= 31; 5 14567 <**> fejlreaktion(10,d.op.data(1),<:tilstand ident:>,1); 5 14568 <**> goto slut_grp_res_1; 5 14569 <**> end; 4 14570 <*-4*> 4 14571 4 14571 <* find frit indeks i opkaldstabel *> 4 14572 opk_indeks:= 0; 4 14573 for i:= max_antal_gruppeopkald step -1 until 1 do 4 14574 begin 5 14575 if gruppeopkald(i,1)=0 then opk_indeks:= i <*fri plads*> else 5 14576 if gruppeopkald(i,1)=d.op.data(1) then res:= 15 <*optaget*>; 5 14577 end; 4 14578 if opk_indeks = 0 then res:= 32; <* ingen plads *> 4 14579 if res <> 0 then goto slut_grp_res_1; 4 14580 g_type:= d.op.data(1) shift (-21) extract 1; 4 14581 if g_type = 1 <*special gruppe*> then 4 14582 begin <*check eksistens*> 5 14583 gr:= 0; 5 14584 for i:= 1 step 1 until max_antal_grupper do 5 14585 if gruppetabel(i) = d.op.data(1) then gr:= i; 5 14586 if gr = 0 then <*gruppe ukendt*> 5 14587 begin 6 14588 res:= 8; 6 14589 goto slut_grp_res_1; 6 14590 end; 5 14591 end; 4 14592 4 14592 <* reserver i opkaldstabel *> 4 14593 gruppeopkald(opk_indeks,1):= d.op.data(1); 4 14594 \f 4 14594 message procedure vt_tilstand side 6 - 810428/cl; 4 14595 4 14595 <* tilknyt fil *> 4 14596 start_operation(filop,curr_coruid,cs_fil,101); 4 14597 d.filop.data(1):= 0; <*postantal*> 4 14598 d.filop.data(2):= 256; <*postlængde*> 4 14599 d.filop.data(3):= 1; <*segmentantal*> 4 14600 d.filop.data(4):= 2 shift 10; <*spool fil*> 4 14601 signalch(cs_opret_fil,filop,vt_optype); 4 14602 4 14602 slut_grp_res_1: 4 14603 if res <> 0 then d.op.resultat:= res; 4 14604 end; 3 14605 if res <> 0 then goto returner; 3 14606 3 14606 waitch(cs_fil,filop,vt_optype,-1); 3 14607 3 14607 <* check filsys-resultat *> 3 14608 if d.filop.data(9) <> 0 then 3 14609 fejlreaktion(13,d.filop.data(9),<:gruppe,res:>,0); 3 14610 filref:= d.filop.data(4); 3 14611 \f 3 14611 message procedure vt_tilstand side 7 - 820301/cl; 3 14612 disable if g_type = 0 <*linie-gruppe*> then 3 14613 begin 4 14614 integer s,i,ll_id; 4 14615 integer array field iaf1; 4 14616 4 14616 ll_id:= 1 shift 22 + d.op.data(1) shift 7; 4 14617 iaf1:= 2; 4 14618 s:= binærsøg(sidste_linie_løb, 4 14619 linie_løb_tabel(i) - ll_id, i); 4 14620 if s < 0 then i:= i +1; 4 14621 antal:= ej_res:= 0; 4 14622 skrivfil(filref,1,zi); 4 14623 if i <= sidste_linie_løb then 4 14624 begin 5 14625 while linie_løb_tabel(i) shift (-7) shift 7 = ll_id do 5 14626 begin 6 14627 if (intg(bustilstand(intg(busindeks(i))))<>0) or 6 14628 (bustabel1(intg(busindeks(i))) extract 8 <> 3) then 6 14629 ej_res:= ej_res+1 6 14630 else 6 14631 begin 7 14632 antal:= antal+1; 7 14633 bi:= busindeks(i) extract 12; 7 14634 fil(zi).iaf1(1):= 7 14635 område_id( bustabel1(bi) extract 8, 2) extract 12 shift 12 + 7 14636 (bustabel1(bi) shift (-23) + 1) shift 8 + 1; 7 14637 fil(zi).iaf1(2):= bustabel(bi); 7 14638 iaf1:= iaf1+4; 7 14639 bustilstand(bi):= false add opk_indeks; 7 14640 end; 6 14641 i:= i +1; 6 14642 if i > sidste_linie_løb then goto slut_l_grp; 6 14643 end; 5 14644 end; 4 14645 \f 4 14645 message procedure vt_tilstand side 8 - 820301/cl; 4 14646 4 14646 slut_l_grp: 4 14647 end 3 14648 else 3 14649 begin <*special gruppe*> 4 14650 integer i,s,li,omr,gar,tilst; 4 14651 integer array field iaf1; 4 14652 4 14652 iaf1:= 2; 4 14653 antal:= ej_res:= 0; 4 14654 s:= læsfil(tf_gruppedef,gr,zi); 4 14655 if s <> 0 then fejlreaktion(5,s,<:gruppe,res:>,0); 4 14656 tofrom(identer,fil(zi),max_antal_i_gruppe*2); 4 14657 s:= skrivfil(filref,1,zi); 4 14658 if s<>0 then fejlreaktion(6,s,<:gruppe,res:>,0); 4 14659 i:= 1; 4 14660 while identer(i) <> 0 do 4 14661 begin 5 14662 if identer(i) shift (-22) = 0 then 5 14663 begin <*busident*> 6 14664 omr:= 0; 6 14665 bi:= søg_omr_bus(identer(i),li,gar,omr,s,tilst); 6 14666 if bi<0 then goto næste_ident; 6 14667 li:= linie_løb_indeks(bi) extract 12; 6 14668 end 5 14669 else 5 14670 begin <*linie/løb ident*> 6 14671 s:= binærsøg(sidste_linie_løb, 6 14672 linie_løb_tabel(li) - identer(i), li); 6 14673 if s <> 0 then goto næste_ident; 6 14674 bi:= busindeks(li) extract 12; 6 14675 end; 5 14676 if (intg(bustilstand(bi))<>0) or 5 14677 (bustabel1(bi) extract 8 <> 3) then 5 14678 ej_res:= ej_res+1 5 14679 else 5 14680 begin 6 14681 antal:= antal +1; 6 14682 fil(zi).iaf1(1):= 6 14683 område_id( bustabel1(bi) extract 8, 2) extract 12 shift 12 + 6 14684 (bustabel1(bi) shift (-23) + 1) shift 8 + 1; 6 14685 fil(zi).iaf1(2):= bustabel(bi); 6 14686 iaf1:= iaf1+4; 6 14687 bustilstand(bi):= false add opk_indeks; 6 14688 end; 5 14689 næste_ident: 5 14690 i:= i +1; 5 14691 if i > max_antal_i_gruppe then goto slut_s_grp; 5 14692 end; 4 14693 slut_s_grp: 4 14694 end; 3 14695 \f 3 14695 message procedure vt_tilstand side 9 - 820301/cl; 3 14696 3 14696 if antal > 0 then <*ok*> 3 14697 disable begin 4 14698 integer array field spec,akt; 4 14699 integer a; 4 14700 integer field antal_spec; 4 14701 4 14701 antal_spec:= 2; a:= 0; 4 14702 spec:= 2; akt:= 2; 4 14703 sorter_gruppe(fil(zi).spec,1,antal); 4 14704 fil(zi).antal_spec:= 0; 4 14705 while akt//4 < antal do 4 14706 begin 5 14707 fil(zi).spec(1):= fil(zi).akt(1) shift (-8) shift 8; 5 14708 a:= 0; 5 14709 while fil(zi).akt(1) shift (-8) = fil(zi).spec(1) shift (-8) 5 14710 and a<15 do 5 14711 begin 6 14712 a:= a+1; 6 14713 fil(zi).spec(1+a):= fil(zi).akt(2) extract 14; 6 14714 akt:= akt+4; 6 14715 end; 5 14716 fil(zi).spec(1):= fil(zi).spec(1) + a; 5 14717 fil(zi).antal_spec:= fil(zi).antal_spec+1; 5 14718 spec:= spec + 2*a + 2; 5 14719 end; 4 14720 antal:= fil(zi).antal_spec; 4 14721 gruppeopkald(opk_indeks,2):= filref; 4 14722 d.op.resultat:= 3; 4 14723 d.op.data(2):= antal; 4 14724 d.op.data(3):= filref; 4 14725 d.op.data(4):= ej_res; 4 14726 end 3 14727 else 3 14728 begin 4 14729 disable begin 5 14730 d.filop.opkode:= 104; <*slet fil*> 5 14731 signalch(cs_slet_fil,filop,vt_optype); 5 14732 gruppeopkald(opk_indeks,1):= 0; <*fri*> 5 14733 d.op.resultat:= 54; 5 14734 d.op.data(2):= antal; 5 14735 d.op.data(3):= 0; 5 14736 d.op.data(4):= ej_res; 5 14737 end; 4 14738 waitch(cs_fil,filop,vt_optype,-1); 4 14739 if d.filop.data(9) <> 0 then 4 14740 fejlreaktion(16,d.filop.data(9),<:gruppe,res:>,0); 4 14741 end; 3 14742 goto returner; 3 14743 \f 3 14743 message procedure vt_tilstand side 10 - 820301/cl; 3 14744 3 14744 grp_fri: <* frigiv gruppe *> 3 14745 disable 3 14746 begin integer i,j,s,ll,gar,omr,tilst; 4 14747 integer array field spec; 4 14748 4 14748 <*+4*> 4 14749 <**> if format <> 2 then 4 14750 <**> begin 5 14751 <**> res:= 31; 5 14752 <**> fejlreaktion(10,d.op.data(1),<:tilstand ident:>,1); 5 14753 <**> goto slut_grp_fri; 5 14754 <**> end; 4 14755 <*-4*> 4 14756 4 14756 <* find indeks i opkaldstabel *> 4 14757 opk_indeks:= 0; 4 14758 for i:= 1 step 1 until max_antal_gruppeopkald do 4 14759 if gruppeopkald(i,1) = d.op.data(1) then opk_indeks:= i; 4 14760 if opk_indeks = 0 <*ikke fundet*> then 4 14761 begin 5 14762 res:= 40; <*gruppe ej reserveret*> 5 14763 goto slut_grp_fri; 5 14764 end; 4 14765 filref:= gruppeopkald(opk_indeks,2); 4 14766 start_operation(filop,curr_coruid,cs_fil,104); 4 14767 d.filop.data(4):= filref; 4 14768 hentfildim(d.filop.data); 4 14769 læsfil(filref,1,zi); 4 14770 spec:= 0; 4 14771 antal:= fil(zi).spec(1); 4 14772 spec:= spec+2; 4 14773 for i:= 1 step 1 until antal do 4 14774 begin 5 14775 for j:= 1 step 1 until fil(zi).spec(1) extract 8 do 5 14776 begin 6 14777 busid:= fil(zi).spec(1+j) extract 14; 6 14778 omr:= 0; 6 14779 bi:= søg_omr_bus(busid,ll,gar,omr,s,tilst); 6 14780 if bi>=0 then bustilstand(bi):= false; 6 14781 end; 5 14782 spec:= spec + 2*(fil(zi).spec(1) extract 8) + 2; 5 14783 end; 4 14784 4 14784 slut_grp_fri: 4 14785 d.op.resultat:= res; 4 14786 end; 3 14787 if res <> 0 then goto returner; 3 14788 gruppeopkald(opk_indeks,1):= gruppeopkald(opk_indeks,2):= 0; 3 14789 signalch(cs_slet_fil,filop,vt_optype); 3 14790 \f 3 14790 message procedure vt_tilstand side 11 - 810424/cl; 3 14791 3 14791 waitch(cs_fil,filop,vt_optype,-1); 3 14792 3 14792 if d.filop.data(9) <> 0 then 3 14793 fejlreaktion(16,d.filop.data(9),<:gruppe,fri:>,0); 3 14794 d.op.resultat:= 3; 3 14795 3 14795 returner: 3 14796 disable 3 14797 begin 4 14798 <*+2*> 4 14799 <**> if testbit40 and overvåget then 4 14800 <**> begin 5 14801 <**> skriv_vt_tilst(out,0); 5 14802 <**> write(out,<: vogntabel efter ændring:>); 5 14803 <**> p_vogntabel(out); 5 14804 <**> end; 4 14805 <**> if testbit43 and overvåget and (funk=4 or funk=5) then 4 14806 <**> begin 5 14807 <**> skriv_vt_tilst(out,0); write(out,<: gruppetabel efter ændring:>); 5 14808 <**> p_gruppetabel(out); 5 14809 <**> end; 4 14810 <**> if (testbit41 and overvåget) or 4 14811 <**> (testbit46 and overvåget and (funk=4 or funk=5)) then 4 14812 <**> begin 5 14813 <**> skriv_vt_tilst(out,0); 5 14814 <**> write(out,<: returner operation:>); 5 14815 <**> skriv_op(out,op); 5 14816 <**> end; 4 14817 <*-2*> 4 14818 signalch(d.op.retur,op,d.op.optype); 4 14819 end; 3 14820 goto vent_op; 3 14821 3 14821 vt_tilst_trap: 3 14822 disable skriv_vt_tilst(zbillede,1); 3 14823 3 14823 end vt_tilstand; 2 14824 \f 2 14824 message procedure vt_rapport side 1 - 810428/cl; 2 14825 2 14825 procedure vt_rapport(cs_fil,fil_opref); 2 14826 value cs_fil,fil_opref; 2 14827 integer cs_fil,fil_opref; 2 14828 begin 3 14829 integer array field op,filop; 3 14830 integer funk,filref,antal,id_ant,res; 3 14831 integer field i1,i2; 3 14832 3 14832 procedure skriv_vt_rap(z,omfang); 3 14833 value omfang; 3 14834 zone z; 3 14835 integer omfang; 3 14836 begin 4 14837 write(z,"nl",1,<:+++ vt_rapport :>); 4 14838 if omfang <> 0 then 4 14839 begin 5 14840 skriv_coru(z,abs curr_coruno); 5 14841 write(z,"nl",1,<<d>, 5 14842 <: cs_fil :>,cs_fil,"nl",1, 5 14843 <: filop :>,filop,"nl",1, 5 14844 <: op :>,op,"nl",1, 5 14845 <: funk :>,funk,"nl",1, 5 14846 <: filref :>,filref,"nl",1, 5 14847 <: antal :>,antal,"nl",1, 5 14848 <: id-ant :>,id_ant,"nl",1, 5 14849 <: res :>,res,"nl",1, 5 14850 <::>); 5 14851 5 14851 end; 4 14852 end skriv_vt_rap; 3 14853 3 14853 stackclaim(if cm_test then 198 else 146); 3 14854 filop:= fil_opref; 3 14855 i1:= 2; i2:= 4; 3 14856 trap(vt_rap_trap); 3 14857 3 14857 <*+2*> 3 14858 <**> disable if testbit47 and overvåget or testbit28 then 3 14859 <**> skriv_vt_rap(out,0); 3 14860 <*-2*> 3 14861 \f 3 14861 message procedure vt_rapport side 2 - 810505/cl; 3 14862 3 14862 vent_op: 3 14863 waitch(cs_vt_rap,op,gen_optype or vt_optype,-1); 3 14864 3 14864 <*+2*> 3 14865 <**> disable begin 4 14866 <**> if testbit41 and overvåget then 4 14867 <**> begin 5 14868 <**> skriv_vt_rap(out,0); 5 14869 <**> write(out,<: modtaget operation:>); 5 14870 <**> skriv_op(out,op); 5 14871 <**> ud; 5 14872 <**> end; 4 14873 <**> end;<*disable*> 3 14874 <*-2*> 3 14875 3 14875 disable 3 14876 begin 4 14877 integer opk; 4 14878 4 14878 opk:= d.op.opkode extract 12; 4 14879 funk:= if opk = 9 then 1 else 4 14880 if opk =10 then 2 else 4 14881 0; 4 14882 if funk = 0 then fejlreaktion(2,opk,<:vt_gruppe:>,0); 4 14883 4 14883 <* opret og tilknyt fil *> 4 14884 start_operation(filop,curr_coruid,cs_fil,101); 4 14885 d.filop.data(1):= 0; <*postantal(midlertidigt)*> 4 14886 d.filop.data(2):= 2; <*postlængde*> 4 14887 d.filop.data(3):=10; <*segmenter*> 4 14888 d.filop.data(4):= 2 shift 10; <*spool fil*> 4 14889 signalch(cs_opretfil,filop,vt_optype); 4 14890 end; 3 14891 3 14891 waitch(cs_fil,filop,vt_optype,-1); 3 14892 3 14892 <* check resultat *> 3 14893 if d.filop.data(9) <> 0 then 3 14894 fejlreaktion(13,d.filop.data(9),<:vt-rapport:>,0); 3 14895 filref:= d.filop.data(4); 3 14896 antal:= 0; 3 14897 goto case funk of (l_rapport,b_rapport); 3 14898 \f 3 14898 message procedure vt_rapport side 3 - 850820/cl; 3 14899 3 14899 l_rapport: 3 14900 disable 3 14901 begin 4 14902 integer i,j,s,ll,zi; 4 14903 idant:= 0; 4 14904 for id_ant:= id_ant+1 while d.op.data(id_ant)<>0 and id_ant<5 do 4 14905 <*+4*> 4 14906 <**> if d.op.data(id_ant) shift (-22) <> 2 then 4 14907 <**> begin 5 14908 <**> res:= 31; 5 14909 <**> fejlreaktion(10,d.op.data(id_ant),<:l-rapport ident:>,1); 5 14910 <**> goto l_rap_slut; 5 14911 <**> end; 4 14912 <*-4*> 4 14913 ; 4 14914 4 14914 for i:= 1 step 1 until id_ant do 4 14915 begin 5 14916 ll:= (1 shift 22) + d.op.data(i) extract 15 shift 7; 5 14917 s:= binærsøg(sidste_linie_løb, 5 14918 linie_løb_tabel(j) - ll, j); 5 14919 if s < 0 then j:= j +1; 5 14920 5 14920 if j<= sidste_linie_løb then 5 14921 begin <* skriv identer *> 6 14922 while linie_løb_tabel(j) shift (-7) shift 7 = ll do 6 14923 begin 7 14924 antal:= antal +1; 7 14925 s:= skrivfil(filref,antal,zi); 7 14926 if s <> 0 then fejlreaktion(6,s,<:vt_rapport:>,0); 7 14927 fil(zi).i1:= linie_løb_tabel(j); 7 14928 fil(zi).i2:= bustabel(busindeks(j) extract 12); 7 14929 j:= j +1; 7 14930 if j > sidste_bus then goto linie_slut; 7 14931 end; 6 14932 end; 5 14933 linie_slut: 5 14934 end; 4 14935 res:= 3; 4 14936 l_rap_slut: 4 14937 end <*disable*>; 3 14938 goto returner; 3 14939 \f 3 14939 message procedure vt_rapport side 4 - 820301/cl; 3 14940 3 14940 b_rapport: 3 14941 disable 3 14942 begin 4 14943 integer i,j,s,zi,busnr1,busnr2; 4 14944 <*+4*> 4 14945 <**> for i:= 1,2 do 4 14946 <**> if d.op.data(i) shift (-14) <> 0 then 4 14947 <**> begin 5 14948 <**> res:= 31; 5 14949 <**> fejlreaktion(10,d.op.data(i),<:b-rapport ident:>,1); 5 14950 <**> goto bus_slut; 5 14951 <**> end; 4 14952 <*-4*> 4 14953 4 14953 busnr1:= d.op.data(1) extract 14; 4 14954 busnr2:= if d.op.data(2) = 0 then busnr1 else d.op.data(2) extract 14; 4 14955 if busnr1 = 0 or busnr2 < busnr1 then 4 14956 begin 5 14957 res:= 7; <* fejl i busnr *> 5 14958 goto bus_slut; 5 14959 end; 4 14960 4 14960 s:= binærsøg(sidste_bus,bustabel(j) extract 14 4 14961 - busnr1,j); 4 14962 if s < 0 then j:= j +1; 4 14963 while j>1 and bustabel(j-1) extract 14 >= busnr1 do j:= j-1; 4 14964 if j <= sidste_bus then 4 14965 begin <* skriv identer *> 5 14966 while bustabel(j) extract 14 <= busnr2 do 5 14967 begin 6 14968 i:= linie_løb_indeks(j) extract 12; 6 14969 if i<>0 then 6 14970 begin 7 14971 antal:= antal +1; 7 14972 s:= skriv_fil(filref,antal,zi); 7 14973 if s <> 0 then fejlreaktion(6,s,<:vt-rapport:>,0); 7 14974 fil(zi).i1:= bustabel(j); 7 14975 fil(zi).i2:= linie_løb_tabel(i); 7 14976 end; 6 14977 j:= j +1; 6 14978 if j > sidste_bus then goto bus_slut; 6 14979 end; 5 14980 end; 4 14981 bus_slut: 4 14982 end <*disable*>; 3 14983 res:= 3; <*ok*> 3 14984 \f 3 14984 message procedure vt_rapport side 5 - 810409/cl; 3 14985 3 14985 returner: 3 14986 disable 3 14987 begin 4 14988 d.op.resultat:= res; 4 14989 d.op.data(6):= antal; 4 14990 d.op.data(7):= filref; 4 14991 d.filop.data(1):= antal; 4 14992 d.filop.data(3):= (antal*d.filop.data(2) -1)//256 +1; 4 14993 i:= sæt_fil_dim(d.filop.data); 4 14994 if i <> 0 then fejlreaktion(9,i,<:vt-rapport:>,0); 4 14995 <*+2*> 4 14996 <**> if testbit41 and overvåget then 4 14997 <**> begin 5 14998 <**> skriv_vt_rap(out,0); 5 14999 <**> write(out,<: returner operation:>); 5 15000 <**> skriv_op(out,op); 5 15001 <**> end; 4 15002 <*-2*> 4 15003 signalch(d.op.retur,op,d.op.optype); 4 15004 end; 3 15005 goto vent_op; 3 15006 3 15006 vt_rap_trap: 3 15007 disable skriv_vt_rap(zbillede,1); 3 15008 3 15008 end vt_rapport; 2 15009 \f 2 15009 message procedure vt_gruppe side 1 - 810428/cl; 2 15010 2 15010 procedure vt_gruppe(cs_fil,fil_opref); 2 15011 2 15011 value cs_fil,fil_opref; 2 15012 integer cs_fil,fil_opref; 2 15013 begin 3 15014 integer array field op, fil_op, iaf; 3 15015 integer funk, res, filref, gr, i, antal, zi, s; 3 15016 integer array identer(1:(if max_antal_grupper>max_antal_i_gruppe then 3 15017 max_antal_grupper else max_antal_i_gruppe)); 3 15018 3 15018 procedure skriv_vt_gruppe(zud,omfang); 3 15019 value omfang; 3 15020 integer omfang; 3 15021 zone zud; 3 15022 begin 4 15023 integer øg; 4 15024 4 15024 write(zud,"nl",1,<:+++ vt_gruppe :>); 4 15025 if omfang <> 0 then 4 15026 disable 4 15027 begin 5 15028 skriv_coru(zud,abs curr_coruno); 5 15029 write(zud,"nl",1,<<d>, 5 15030 <: cs_fil :>,cs_fil,"nl",1, 5 15031 <: op :>,op,"nl",1, 5 15032 <: filop :>,filop,"nl",1, 5 15033 <: funk :>,funk,"nl",1, 5 15034 <: res :>,res,"nl",1, 5 15035 <: filref :>,filref,"nl",1, 5 15036 <: gr :>,gr,"nl",1, 5 15037 <: i :>,i,"nl",1, 5 15038 <: antal :>,antal,"nl",1, 5 15039 <: zi :>,zi,"nl",1, 5 15040 <: s :>,s,"nl",1, 5 15041 <::>); 5 15042 raf:= 0; 5 15043 system(3,øg,identer); 5 15044 write(zud,"nl",1,<:identer::>); 5 15045 skriv_hele(zud,identer.raf,øg*2,2); 5 15046 end; 4 15047 end; 3 15048 3 15048 stackclaim(if cm_test then 198 else 146); 3 15049 filop:= fil_opref; 3 15050 trap(vt_grp_trap); 3 15051 iaf:= 0; 3 15052 \f 3 15052 message procedure vt_gruppe side 2 - 810409/cl; 3 15053 3 15053 <*+2*> 3 15054 <**> disable if testbit47 and overvåget or testbit28 then 3 15055 <**> skriv_vt_gruppe(out,0); 3 15056 <*-2*> 3 15057 3 15057 vent_op: 3 15058 waitch(cs_vt_grp,op,gen_optype or vt_optype,-1); 3 15059 <*+2*> 3 15060 <**>disable 3 15061 <**>begin 4 15062 <**> if testbit41 and overvåget then 4 15063 <**> begin 5 15064 <**> skriv_vt_gruppe(out,0); 5 15065 <**> write(out,<: modtaget operation:>); 5 15066 <**> skriv_op(out,op); 5 15067 <**> ud; 5 15068 <**> end; 4 15069 <**>end; 3 15070 <*-2*> 3 15071 3 15071 disable 3 15072 begin 4 15073 integer opk; 4 15074 4 15074 opk:= d.op.opkode extract 12; 4 15075 funk:= if opk=25 then 1 else 4 15076 if opk=26 then 2 else 4 15077 if opk=27 then 3 else 4 15078 if opk=28 then 4 else 4 15079 0; 4 15080 if funk=0 then fejlreaktion(2,opk,<:vt_gruppe:>,0); 4 15081 end; 3 15082 <*+4*> 3 15083 <**> if funk<4 and d.op.data(1) shift (-21) <> 5 then 3 15084 <**> begin 4 15085 <**> disable begin 5 15086 <**> d.op.resultat:= 31; 5 15087 <**> fejlreaktion(10,d.op.data(1),<:gruppe ident:>,1); 5 15088 <**> end; 4 15089 <**> goto returner; 4 15090 <**> end; 3 15091 <*-4*> 3 15092 3 15092 goto case funk of(definer,slet,vis,oversigt); 3 15093 \f 3 15093 message procedure vt_gruppe side 3 - 810505/cl; 3 15094 3 15094 definer: 3 15095 disable 3 15096 begin 4 15097 gr:= 0; res:= 0; 4 15098 for i:= max_antal_grupper step -1 until 1 do 4 15099 begin 5 15100 if gruppetabel(i)=0 then gr:= i <*fri plads*> else 5 15101 if gruppetabel(i)=d.op.data(1) then res:= 34; <*allerede defineret*> 5 15102 end; 4 15103 if gr=0 then res:= 32; <*ingen plads*> 4 15104 end; 3 15105 if res<>0 then goto slut_definer; 3 15106 disable 3 15107 begin <*fri plads fundet*> 4 15108 antal:= d.op.data(2); 4 15109 if antal <=0 or max_antal_i_gruppe<antal then 4 15110 res:= 33 <*fejl i gruppestørrelse*> 4 15111 else 4 15112 begin 5 15113 for i:= 1 step 1 until antal do 5 15114 begin 6 15115 s:= læsfil(d.op.data(3),i,zi); 6 15116 if s<>0 then fejlreaktion(5,s,<:gruppe,def:>,0); 6 15117 identer(i):= fil(zi).iaf(1); 6 15118 end; 5 15119 s:= modif_fil(tf_gruppedef,gr,zi); 5 15120 if s<>0 then fejlreaktion(7,s,<:gruppe,def:>,0); 5 15121 tofrom(fil(zi).iaf,identer,antal*2); 5 15122 for i:= antal+1 step 1 until max_antal_i_gruppe do 5 15123 fil(zi).iaf(i):= 0; 5 15124 gruppetabel(gr):= d.op.data(1); 5 15125 s:= modiffil(tf_gruppeidenter,gr,zi); 5 15126 if s<>0 then fejlreaktion(7,s,<:gruppe,def:>,0); 5 15127 fil(zi).iaf(1):= gruppetabel(gr); 5 15128 res:= 3; 5 15129 end; 4 15130 end; 3 15131 slut_definer: 3 15132 <*slet fil*> 3 15133 start_operation(fil_op,curr_coruid,cs_fil,104); 3 15134 d.filop.data(4):= d.op.data(3); 3 15135 signalch(cs_slet_fil,filop,vt_optype); 3 15136 waitch(cs_fil,filop,vt_optype,-1); 3 15137 if d.filop.data(9)<>0 then fejlreaktion(16,d.filop.data(9),<:gruppe,def:>,0); 3 15138 d.op.resultat:= res; 3 15139 goto returner; 3 15140 \f 3 15140 message procedure vt_gruppe side 4 - 810409/cl; 3 15141 3 15141 slet: 3 15142 disable 3 15143 begin 4 15144 gr:= 0; res:= 0; 4 15145 for i:= 1 step 1 until max_antal_grupper do 4 15146 begin 5 15147 if gruppetabel(i)=d.op.data(1) then gr:= i; 5 15148 end; 4 15149 if gr = 0 then res:= 8 <*gruppe ej defineret*> 4 15150 else 4 15151 begin 5 15152 for i:= 1 step 1 until max_antal_gruppeopkald do 5 15153 if gruppeopkald(i,1)=d.op.data(1) then res:=15; <*gruppe optaget*> 5 15154 if res = 0 then 5 15155 begin 6 15156 gruppetabel(gr):= 0; 6 15157 s:= modif_fil(tf_gruppeidenter,gr,zi); 6 15158 if s<>0 then fejlreaktion(7,s,<:gruppe,slet:>,0); 6 15159 fil(zi).iaf(1):= gruppetabel(gr); 6 15160 res:= 3; 6 15161 end; 5 15162 end; 4 15163 d.op.resultat:= res; 4 15164 end; 3 15165 goto returner; 3 15166 \f 3 15166 message procedure vt_gruppe side 5 - 810505/cl; 3 15167 3 15167 vis: 3 15168 disable 3 15169 begin 4 15170 res:= 0; gr:= 0; antal:= 0; filref:= 0; 4 15171 for i:= 1 step 1 until max_antal_grupper do 4 15172 if gruppetabel(i) = d.op.data(1) then gr:= i; 4 15173 if gr = 0 then res:= 8 4 15174 else 4 15175 begin 5 15176 s:= læsfil(tf_gruppedef,gr,zi); 5 15177 if s<>0 then fejlreaktion(5,s,<:gruppe,vis:>,0); 5 15178 for i:= 1 step 1 until max_antal_i_gruppe do 5 15179 begin 6 15180 identer(i):= fil(zi).iaf(i); 6 15181 if identer(i) <> 0 then antal:= antal +1; 6 15182 end; 5 15183 start_operation(filop,curr_coruid,cs_fil,101); 5 15184 d.filop.data(1):= antal; <*postantal*> 5 15185 d.filop.data(2):= 1; <*postlængde*> 5 15186 d.filop.data(3):= (antal-1)//256 + 1; <*segmenter*> 5 15187 d.filop.data(4):= 2 shift 10; <*spool fil*> 5 15188 d.filop.data(5):= d.filop.data(6):= 5 15189 d.filop.data(7):= d.filop.data(8):= 0; <*navn*> 5 15190 signalch(cs_opret_fil,filop,vt_optype); 5 15191 end; 4 15192 end; 3 15193 if res <> 0 then goto slut_vis; 3 15194 waitch(cs_fil,filop,vt_optype,-1); 3 15195 disable 3 15196 begin 4 15197 if d.filop.data(9) <> 0 then 4 15198 fejlreaktion(13,d.filop.data(9),<:gruppe,vis:>,0); 4 15199 filref:= d.filop.data(4); 4 15200 for i:= 1 step 1 until antal do 4 15201 begin 5 15202 s:= skrivfil(filref,i,zi); 5 15203 if s <> 0 then fejlreaktion(6,s,<:gruppe,vis:>,0); 5 15204 fil(zi).iaf(1):= identer(i); 5 15205 end; 4 15206 res:= 3; 4 15207 end; 3 15208 slut_vis: 3 15209 d.op.resultat:= res; d.op.data(2):= antal; d.op.data(3):= filref; 3 15210 goto returner; 3 15211 \f 3 15211 message procedure vt_gruppe side 6 - 810508/cl; 3 15212 3 15212 oversigt: 3 15213 disable 3 15214 begin 4 15215 res:= 0; antal:= 0; filref:= 0; iaf:= 0; 4 15216 for i:= 1 step 1 until max_antal_grupper do 4 15217 begin 5 15218 if gruppetabel(i) <> 0 then 5 15219 begin 6 15220 antal:= antal +1; 6 15221 identer(antal):= gruppetabel(i); 6 15222 end; 5 15223 end; 4 15224 start_operation(filop,curr_coruid,cs_fil,101); 4 15225 d.filop.data(1):= antal; <*postantal*> 4 15226 d.filop.data(2):= 1; <*postlængde*> 4 15227 d.filop.data(3):= if antal = 0 then 1 else 4 15228 (antal-1)//256 +1; <*segm.antal*> 4 15229 d.filop.data(4):= 2 shift 10; <*spool fil*> 4 15230 d.filop.data(5):= d.filop.data(6):= 4 15231 d.filop.data(7):= d.filop.data(8):= 0; <*navn*> 4 15232 signalch(cs_opretfil,filop,vt_optype); 4 15233 end; 3 15234 waitch(cs_fil,filop,vt_optype,-1); 3 15235 disable 3 15236 begin 4 15237 if d.filop.data(9) <> 0 then 4 15238 fejlreaktion(13,d.filop.data(9),<:grupper,over:>,0); 4 15239 filref:= d.filop.data(4); 4 15240 for i:= 1 step 1 until antal do 4 15241 begin 5 15242 s:= skriv_fil(filref,i,zi); 5 15243 if s <> 0 then fejlreaktion(6,s,<:gruppe,over:>,0); 5 15244 fil(zi).iaf(1):= identer(i); 5 15245 end; 4 15246 d.op.resultat:= 3; <*ok*> 4 15247 d.op.data(1):= antal; 4 15248 d.op.data(2):= filref; 4 15249 end; 3 15250 \f 3 15250 message procedure vt_gruppe side 7 - 810505/cl; 3 15251 3 15251 returner: 3 15252 disable 3 15253 begin 4 15254 <*+2*> 4 15255 <**> if testbit43 and overvåget and (funk=1 or funk=2) then 4 15256 <**> begin 5 15257 <**> skriv_vt_gruppe(out,0); 5 15258 <**> write(out,<: gruppetabel efter ændring:>); 5 15259 <**> p_gruppetabel(out); 5 15260 <**> end; 4 15261 <**> if testbit41 and overvåget then 4 15262 <**> begin 5 15263 <**> skriv_vt_gruppe(out,0); 5 15264 <**> write(out,<: returner operation:>); 5 15265 <**> skriv_op(out,op); 5 15266 <**> end; 4 15267 <*-2*> 4 15268 signalch(d.op.retur,op,d.op.optype); 4 15269 end; 3 15270 goto vent_op; 3 15271 3 15271 vt_grp_trap: 3 15272 disable skriv_vt_gruppe(zbillede,1); 3 15273 3 15273 end vt_gruppe; 2 15274 \f 2 15274 message procedure vt_spring side 1 - 810506/cl; 2 15275 2 15275 procedure vt_spring(cs_spring_retur,spr_opref); 2 15276 value cs_spring_retur,spr_opref; 2 15277 integer cs_spring_retur,spr_opref; 2 15278 begin 3 15279 integer array field komm_op,spr_op,iaf; 3 15280 real nu; 3 15281 integer funk,interval,nr,i,s,id1,id2,res,res_inf,medd_kode,zi; 3 15282 3 15282 procedure skriv_vt_spring(zud,omfang); 3 15283 value omfang; 3 15284 zone zud; 3 15285 integer omfang; 3 15286 begin 4 15287 write(zud,"nl",1,<:+++ vt_spring :>); 4 15288 if omfang <> 0 then 4 15289 begin 5 15290 skriv_coru(zud,abs curr_coruno); 5 15291 write(zud,"nl",1,<<d>, 5 15292 <:cs-spring-retur:>,cs_spring_retur,"nl",1, 5 15293 <:spr-op :>,spr_op,"nl",1, 5 15294 <:komm-op :>,komm_op,"nl",1, 5 15295 <:funk :>,funk,"nl",1, 5 15296 <:interval :>,interval,"nl",1, 5 15297 <:nr :>,nr,"nl",1, 5 15298 <:i :>,i,"nl",1, 5 15299 <:s :>,s,"nl",1, 5 15300 <:id1 :>,id1,"nl",1, 5 15301 <:id2 :>,id2,"nl",1, 5 15302 <:res :>,res,"nl",1, 5 15303 <:res-inf :>,res_inf,"nl",1, 5 15304 <:medd-kode :>,medd_kode,"nl",1, 5 15305 <:zi :>,zi,"nl",1, 5 15306 <:nu :>,<<zddddd.dddd>,nu,"nl",1, 5 15307 <::>); 5 15308 end; 4 15309 end; 3 15310 \f 3 15310 message procedure vt_spring side 2 - 810506/cl; 3 15311 3 15311 procedure vt_operation(aktion,id1,id2,res,res_inf); 3 15312 value aktion,id1,id2; 3 15313 integer aktion,id1,id2,res,res_inf; 3 15314 begin <* aktion: 11=indsæt, 12=udtag, 13=omkod *> 4 15315 integer array field akt_op; 4 15316 4 15316 <* vent på adgang til vogntabel *> 4 15317 waitch(cs_vt_adgang,akt_op,true,-1); 4 15318 4 15318 <* start operation *> 4 15319 disable 4 15320 begin 5 15321 start_operation(akt_op,curr_coruid,cs_spring_retur,aktion); 5 15322 d.akt_op.data(1):= id1; 5 15323 d.akt_op.data(2):= id2; 5 15324 signalch(cs_vt_opd,akt_op,vt_optype); 5 15325 end; 4 15326 4 15326 <* afvent svar *> 4 15327 waitch(cs_spring_retur,akt_op,vt_optype,-1); 4 15328 res:= d.akt_op.resultat; 4 15329 res_inf:= d.akt_op.data(3); 4 15330 <*+2*> 4 15331 <**> disable 4 15332 <**> if testbit45 and overvåget then 4 15333 <**> begin 5 15334 <**> real t; 5 15335 <**> skriv_vt_spring(out,0); 5 15336 <**> write(out,"nl",1,<<zddddd>,systime(4,d.akt_op.tid,t),<:.:>,t); 5 15337 <**> skriv_id(out,springtabel(nr,1),0); 5 15338 <**> write(out,<:.:>,string(extend springtabel(nr,2) shift 24),<:(:>, 5 15339 <**> <<d>,extend springtabel(nr,3) shift (-12) extract 24,<:)::>, 5 15340 <**> if aktion=11 then <:indsæt:> else if aktion=12 then <:udtag:> else 5 15341 <**> if aktion=13 then <:omkod:> else <:***:>,<: - res=:>, 5 15342 <**> d.akt_op.resultat,"sp",2); 5 15343 <**> skriv_id(out,d.akt_op.data(1),8); 5 15344 <**> skriv_id(out,d.akt_op.data(2),8); 5 15345 <**> skriv_id(out,d.akt_op.data(3),8); 5 15346 <**> systime(4,springtid(nr),t); 5 15347 <**> write(out,<: springtid: :>,<<zd.dd>,entier(t/100),"nl",1); 5 15348 <**> end; 4 15349 <*-2*> 4 15350 4 15350 <* åbn adgang til vogntabel *> 4 15351 disable signalch(cs_vt_adgang,akt_op,gen_optype or vt_optype); 4 15352 end vt_operation; 3 15353 \f 3 15353 message procedure vt_spring side 2a - 810506/cl; 3 15354 3 15354 procedure io_meddelelse(medd_no,bus,linie,springno); 3 15355 value medd_no,bus,linie,springno; 3 15356 integer medd_no,bus,linie,springno; 3 15357 begin 4 15358 disable start_operation(spr_op,curr_coruid,cs_spring_retur,36); 4 15359 d.spr_op.data(1):= medd_no; 4 15360 d.spr_op.data(2):= bus; 4 15361 d.spr_op.data(3):= linie; 4 15362 d.spr_op.data(4):= springtabel(springno,1); 4 15363 d.spr_op.data(5):= springtabel(springno,2); 4 15364 disable signalch(cs_io,spr_op,io_optype or gen_optype); 4 15365 waitch(cs_spring_retur,spr_op,io_optype or gen_optype,-1); 4 15366 end; 3 15367 3 15367 procedure returner_op(op,res); 3 15368 value res; 3 15369 integer array field op; 3 15370 integer res; 3 15371 begin 4 15372 <*+2*> 4 15373 <**> disable 4 15374 <**> if testbit41 and overvåget then 4 15375 <**> begin 5 15376 <**> skriv_vt_spring(out,0); write(out,<: returner operation::>); 5 15377 <**> skriv_op(out,op); 5 15378 <**> end; 4 15379 <*-2*> 4 15380 d.op.resultat:= res; 4 15381 signalch(d.op.retur,op,d.op.optype); 4 15382 end; 3 15383 \f 3 15383 message procedure vt_spring side 3 - 810603/cl; 3 15384 3 15384 iaf:= 0; 3 15385 spr_op:= spr_opref; 3 15386 stack_claim((if cm_test then 198 else 146) + 24); 3 15387 3 15387 trap(vt_spring_trap); 3 15388 3 15388 for i:= 1 step 1 until max_antal_spring do 3 15389 begin 4 15390 springtabel(i,1):= springtabel(i,2):= springtabel(i,3):= 0; 4 15391 springtid(i):= springstart(i):= 0.0; 4 15392 end; 3 15393 3 15393 <*+2*> 3 15394 <**> disable 3 15395 <**> if testbit44 and overvåget then 3 15396 <**> begin 4 15397 <**> skriv_vt_spring(out,0); 4 15398 <**> write(out,<: springtabel efter initialisering:>); 4 15399 <**> p_springtabel(out); ud; 4 15400 <**> end; 3 15401 <*-2*> 3 15402 3 15402 <*+2*> 3 15403 <**> disable if testbit47 and overvåget or testbit28 then 3 15404 <**> skriv_vt_spring(out,0); 3 15405 <*-2*> 3 15406 \f 3 15406 message procedure vt_spring side 4 - 810609/cl; 3 15407 3 15407 næste_tid: <* find næste tid *> 3 15408 disable 3 15409 begin 4 15410 interval:= -1; <*vent uendeligt*> 4 15411 systime(1,0.0,nu); 4 15412 for i:= 1 step 1 until max_antal_spring do 4 15413 if springtabel(i,3) < 0 then 4 15414 interval:= 5 4 15415 else 4 15416 if springtid(i) <> 0.0 and 4 15417 ( (springtid(i)-nu) < interval or interval < 0 ) then 4 15418 interval:= (if springtid(i) <= nu then 0 else 4 15419 round(springtid(i) -nu)); 4 15420 if interval=0 then interval:= 1; 4 15421 end; 3 15422 \f 3 15422 message procedure vt_spring side 4a - 810525/cl; 3 15423 3 15423 <* afvent operation eller timeout *> 3 15424 waitch(cs_vt_spring,komm_op,vt_optype or gen_optype,interval); 3 15425 if komm_op <> 0 then goto afkod_operation; 3 15426 3 15426 <* timeout *> 3 15427 systime(1,0.0,nu); 3 15428 nr:= 1; 3 15429 næste_sekv: 3 15430 if nr > max_antal_spring then goto næste_tid; 3 15431 if springtid(nr) > nu and springtabel(nr,3) > 0 or springstart(nr)=0.0 then 3 15432 begin 4 15433 nr:= nr +1; 4 15434 goto næste_sekv; 4 15435 end; 3 15436 disable s:= modif_fil(tf_springdef,nr,zi); 3 15437 if s <> 0 then fejlreaktion(7,s,<:spring:>,0); 3 15438 if springtabel(nr,3) < 0 then 3 15439 begin <* hængende spring *> 4 15440 if springtid(nr) <= nu then 4 15441 begin <* spring ikke udført indenfor angivet interval - annuler *> 5 15442 <* find frit løb *> 5 15443 disable 5 15444 begin 6 15445 id2:= 0; 6 15446 for i:= 1 step 1 until springtabel(nr,3) extract 12 do 6 15447 if fil(zi).iaf(2+i) shift (-22) = 1 then 6 15448 id2:= fil(zi).iaf(1) extract 15 shift 7 6 15449 + fil(zi).iaf(2+i) shift (-12) extract 7 +1 shift 22; 6 15450 end; 5 15451 <* send meddelelse til io *> 5 15452 io_meddelelse(5,0,id2,nr); 5 15453 5 15453 <* annuler spring*> 5 15454 for i:= 1,2,3 do springtabel(nr,i):= 0; 5 15455 springtid(nr):= springstart(nr):= 0.0; 5 15456 end 4 15457 else 4 15458 begin <* forsøg igen *> 5 15459 \f 5 15459 message procedure vt_spring side 5 - 810525/cl; 5 15460 5 15460 i:= abs(extend springtabel(nr,3) shift (-12) extract 24); 5 15461 if i = 2 <* første spring ej udført *> then 5 15462 begin 6 15463 id1:= fil(zi).iaf(1) extract 15 shift 7 6 15464 + fil(zi).iaf(3) shift (-12) extract 7 +1 shift 22; 6 15465 id2:= id1; 6 15466 vt_operation(12<*udtag*>,id1,id2,res,res_inf); 6 15467 end 5 15468 else 5 15469 begin 6 15470 id1:= fil(zi).iaf(1) extract 15 shift 7 6 15471 + fil(zi).iaf(2+i-1) shift (-12) extract 7 +1 shift 22; 6 15472 id2:= id1 shift (-7) shift 7 6 15473 + fil(zi).iaf(2+i-2) shift (-12) extract 7; 6 15474 vt_operation(13<*omkod*>,id1,id2,res,res_inf); 6 15475 end; 5 15476 5 15476 <* check resultat *> 5 15477 medd_kode:= if res = 3 and i = 2 then 7 else 5 15478 if res = 3 and i > 2 then 8 else 5 15479 <* if res = 9 then 1 else 5 15480 if res =12 then 2 else 5 15481 if res =14 then 4 else 5 15482 if res =18 then 3 else *> 5 15483 0; 5 15484 if medd_kode > 0 then 5 15485 io_meddelelse(medd_kode,res_inf,if res=3 or res=12 then 5 15486 id2 else id1,nr); 5 15487 if res = 3 then 5 15488 begin <* spring udført *> 6 15489 disable s:= modiffil(tf_springdef,nr,zi); 6 15490 if s<>0 then fejlreaktion(7,s,<:spring:>,0); 6 15491 springtabel(nr,3):= i shift 12 +springtabel(nr,3) extract 12; 6 15492 fil(zi).iaf(2+i-1):= 1 shift 22 +fil(zi).iaf(2+i-1) extract 22; 6 15493 if i > 2 then fil(zi).iaf(2+i-2):= 6 15494 fil(zi).iaf(2+i-2) extract 22 add (1 shift 23); 6 15495 end; 5 15496 end; 4 15497 end <* hængende spring *> 3 15498 else 3 15499 begin 4 15500 i:= spring_tabel(nr,3) shift (-12); 4 15501 id1:= fil(zi).iaf(1) extract 15 shift 7 4 15502 + fil(zi).iaf(2+i) shift (-12) extract 7 +1 shift 22; 4 15503 id2:= fil(zi).iaf(2+i-1) shift (-12) extract 7 4 15504 + id1 shift (-7) shift 7; 4 15505 vt_operation(13<*omkod*>,id1,id2,res,res_inf); 4 15506 \f 4 15506 message procedure vt_spring side 6 - 820304/cl; 4 15507 4 15507 <* check resultat *> 4 15508 medd_kode:= if res = 3 then 8 else 4 15509 if res = 9 then 1 else 4 15510 if res =12 then 2 else 4 15511 if res =14 then 4 else 4 15512 if res =18 then 3 else 4 15513 if res =60 then 9 else 0; 4 15514 if medd_kode > 0 then 4 15515 io_meddelelse(medd_kode,res_inf,if res=3 or res=12 then id2 else id1,nr); 4 15516 4 15516 <* opdater springtabel *> 4 15517 disable s:= modiffil(tf_springdef,nr,zi); 4 15518 if s<>0 then fejlreaktion(7,s,<:spring:>,0); 4 15519 if fil(zi).iaf(2+i) extract 12 = 0 <*sidste løb*> then 4 15520 begin 5 15521 io_meddelelse(if res=3 then 6 else 5,0, 5 15522 if res=3 then id1 else id2,nr); 5 15523 for i:= 1,2,3 do springtabel(nr,i):= 0; <*annuleret*> 5 15524 springtid(nr):= springstart(nr):= 0.0; 5 15525 end 4 15526 else 4 15527 begin 5 15528 springtid(nr):= springtid(nr) +(fil(zi).iaf(2+i) extract 12)*60.0; 5 15529 if res = 3 then 5 15530 begin 6 15531 fil(zi).iaf(2+i-1):= (1 shift 23) add 6 15532 (fil(zi).iaf(2+i-1) extract 22); 6 15533 fil(zi).iaf(2+i) := (1 shift 22) add 6 15534 (fil(zi).iaf(2+i) extract 22); 6 15535 springtabel(nr,3):=(i+1) shift 12 add (springtabel(nr,3) extract 12); 6 15536 end 5 15537 else 5 15538 springtabel(nr,3):= (-i-1) shift 12 add (springtabel(nr,3) extract 12); 5 15539 end; 4 15540 end; 3 15541 <*+2*> 3 15542 <**> disable 3 15543 <**> if testbit44 and overvåget then 3 15544 <**> begin 4 15545 <**> skriv_vt_spring(out,0); write(out,<: springtabel efter ændring:>); 4 15546 <**> p_springtabel(out); ud; 4 15547 <**> end; 3 15548 <*-2*> 3 15549 3 15549 nr:= nr +1; 3 15550 goto næste_sekv; 3 15551 \f 3 15551 message procedure vt_spring side 7 - 810506/cl; 3 15552 3 15552 afkod_operation: 3 15553 <*+2*> 3 15554 <**> disable 3 15555 <**> if testbit41 and overvåget then 3 15556 <**> begin 4 15557 <**> skriv_vt_spring(out,0); write(out,<: modtaget operation:>); 4 15558 <**> skriv_op(out,komm_op); 4 15559 <**> end; 3 15560 <*-2*> 3 15561 3 15561 disable 3 15562 begin integer opk; 4 15563 4 15563 opk:= d.komm_op.opkode extract 12; 4 15564 funk:= if opk = 30 <*sp,d*> then 5 else 4 15565 if opk = 31 <*sp. *> then 1 else 4 15566 if opk = 32 <*sp,v*> then 4 else 4 15567 if opk = 33 <*sp,o*> then 6 else 4 15568 if opk = 34 <*sp,r*> then 2 else 4 15569 if opk = 35 <*sp,a*> then 3 else 4 15570 0; 4 15571 if funk = 0 then fejlreaktion(2,opk,<:vt_spring:>,0); 4 15572 4 15572 if funk <> 6 <*sp,o*> then 4 15573 begin <* find nr i springtabel *> 5 15574 nr:= 0; 5 15575 for i:= 1 step 1 until max_antal_spring do 5 15576 if springtabel(i,1) = d.komm_op.data(1) and 5 15577 springtabel(i,2) = d.komm_op.data(2) then nr:= i; 5 15578 end; 4 15579 end; 3 15580 if funk = 6 then goto oversigt; 3 15581 if funk = 5 then goto definer; 3 15582 3 15582 if nr = 0 then 3 15583 begin 4 15584 returner_op(komm_op,37<*spring ukendt*>); 4 15585 goto næste_tid; 4 15586 end; 3 15587 3 15587 goto case funk of(start,indsæt,annuler,vis); 3 15588 \f 3 15588 message procedure vt_spring side 8 - 810525/cl; 3 15589 3 15589 start: 3 15590 if springtabel(nr,3) shift (-12) <> 0 then 3 15591 begin returner_op(komm_op,38); goto næste_tid; end; 3 15592 disable 3 15593 begin <* find linie_løb_og_udtag *> 4 15594 s:= modif_fil(tf_springdef,nr,zi); 4 15595 if s <> 0 then fejlreaktion(7,s,<:spring,start:>,0); 4 15596 id1:= fil(zi).iaf(1) extract 15 shift 7 4 15597 + fil(zi).iaf(3) shift (-12) extract 7 +1 shift 22; 4 15598 id2:= 0; 4 15599 end; 3 15600 vt_operation(12,id1,id2,res,res_inf); 3 15601 3 15601 disable <* check resultat *> 3 15602 medd_kode:= if res = 3 <*ok*> then 7 else 3 15603 if res = 9 <*linie/løb ukendt*> then 1 else 3 15604 if res =14 <*optaget*> then 4 else 3 15605 if res =18 <*i kø*> then 3 else 0; 3 15606 returner_op(komm_op,3); 3 15607 if medd_kode = 0 then goto næste_tid; 3 15608 3 15608 <* send spring-meddelelse til io *> 3 15609 io_meddelelse(medd_kode,res_inf,id1,nr); 3 15610 3 15610 <* opdater springtabel *> 3 15611 disable 3 15612 begin 4 15613 s:= modif_fil(tf_springdef,nr,zi); 4 15614 if s <> 0 then fejlreaktion(7,s,<:spring,start:>,0); 4 15615 springtabel(nr,3):= (if res = 3 then 2 else (-2)) shift 12 4 15616 add (springtabel(nr,3) extract 12); 4 15617 systime(1,0.0,nu); 4 15618 springstart(nr):= nu; 4 15619 springtid(nr):= nu +fil(zi).iaf(3) extract 12 *60.0; 4 15620 if res = 3 then fil(zi).iaf(3):= fil(zi).iaf(3) add (1 shift 22); 4 15621 end; 3 15622 <*+2*> 3 15623 <**> disable 3 15624 <**> if testbit44 and overvåget then 3 15625 <**> begin 4 15626 <**> skriv_vt_spring(out,0); write(out,<: springtabel efter ændring:>); 4 15627 <**> p_springtabel(out); ud; 4 15628 <**> end; 3 15629 <*-2*> 3 15630 3 15630 goto næste_tid; 3 15631 \f 3 15631 message procedure vt_spring side 9 - 810506/cl; 3 15632 3 15632 indsæt: 3 15633 if springtabel(nr,3) shift (-12) = 0 then 3 15634 begin <* ikke igangsat *> 4 15635 returner_op(komm_op,41); 4 15636 goto næste_tid; 4 15637 end; 3 15638 <* find frie linie/løb *> 3 15639 disable 3 15640 begin 4 15641 s:= læs_fil(tf_springdef,nr,zi); 4 15642 if s <> 0 then fejlreaktion(5,s,<:spring,reserve:>,0); 4 15643 id2:= 0; 4 15644 for i:= 1 step 1 until springtabel(nr,3) extract 12 do 4 15645 if fil(zi).iaf(2+i) shift (-22) = 1 then 4 15646 id2:= 1 shift 22 +fil(zi).iaf(1) extract 15 shift 7 4 15647 +fil(zi).iaf(2+i) shift (-12) extract 7; 4 15648 id1:= d.komm_op.data(3); 4 15649 end; 3 15650 3 15650 if id2<>0 then 3 15651 vt_operation(11,id1,id2,res,res_inf) 3 15652 else 3 15653 res:= 42; 3 15654 3 15654 disable <* check resultat *> 3 15655 medd_kode:= if res = 3 <*ok*> then 8 else 3 15656 if res =10 <*bus ukendt*> then 0 else 3 15657 if res =11 <*bus allerede indsat*> then 0 else 3 15658 if res =12 <*linie/løb allerede besat*> then 2 else 3 15659 if res =42 <*intet frit linie/løb*> then 5 else 0; 3 15660 if res = 11 or res = 12 then d.komm_op.data(4):= res_inf; 3 15661 returner_op(komm_op,res); 3 15662 if medd_kode = 0 then goto næste_tid; 3 15663 3 15663 <* send springmeddelelse til io *> 3 15664 if res<>42 then io_meddelelse(medd_kode,id1,id2,nr); 3 15665 io_meddelelse(5,0,0,nr); 3 15666 \f 3 15666 message procedure vt_spring side 9a - 810525/cl; 3 15667 3 15667 <* annuler springtabel *> 3 15668 for i:= 1,2,3 do springtabel(nr,i):= 0; 3 15669 springtid(nr):= springstart(nr):= 0.0; 3 15670 <*+2*> 3 15671 <**> disable 3 15672 <**> if testbit44 and overvåget then 3 15673 <**> begin 4 15674 <**> skriv_vt_spring(out,0); write(out,<: springtabel efter ændring:>); 4 15675 <**> p_springtabel(out); ud; 4 15676 <**> end; 3 15677 <*-2*> 3 15678 3 15678 goto næste_tid; 3 15679 \f 3 15679 message procedure vt_spring side 10 - 810525/cl; 3 15680 3 15680 annuler: 3 15681 disable 3 15682 begin <* find evt. frit linie/løb *> 4 15683 s:= læs_fil(tf_springdef,nr,zi); 4 15684 if s <> 0 then fejlreaktion(5,s,<:spring,annuler:>,0); 4 15685 id1:= id2:= 0; 4 15686 for i:= 1 step 1 until springtabel(nr,3) extract 12 do 4 15687 if fil(zi).iaf(2+i) shift (-22) = 1 then 4 15688 id2:= fil(zi).iaf(1) extract 15 shift 7 4 15689 + fil(zi).iaf(2+i) shift (-12) extract 7 +1 shift 22; 4 15690 returner_op(komm_op,3); 4 15691 end; 3 15692 3 15692 <* send springmeddelelse til io *> 3 15693 io_meddelelse(5,id1,id2,nr); 3 15694 3 15694 <* annuler springtabel *> 3 15695 for i:= 1,2,3 do springtabel(nr,i):= 0; 3 15696 springtid(nr):= springstart(nr):= 0.0; 3 15697 <*+2*> 3 15698 <**> disable 3 15699 <**> if testbit44 and overvåget then 3 15700 <**> begin 4 15701 <**> skriv_vt_spring(out,0); write(out,<: springtabel efter ændring:>); 4 15702 <**> p_springtabel(out); ud; 4 15703 <**> end; 3 15704 <*-2*> 3 15705 3 15705 goto næste_tid; 3 15706 3 15706 definer: 3 15707 if nr <> 0 then <* allerede defineret *> 3 15708 begin 4 15709 res:= 36; 4 15710 goto slut_definer; 4 15711 end; 3 15712 3 15712 <* find frit nr *> 3 15713 i:= 0; 3 15714 for i:= i+1 while i<= max_antal_spring and nr = 0 do 3 15715 if springtabel(i,1) = 0 then nr:= i; 3 15716 if nr = 0 then 3 15717 begin 4 15718 res:= 32; <* ingen fri plads *> 4 15719 goto slut_definer; 4 15720 end; 3 15721 \f 3 15721 message procedure vt_spring side 11 - 810525/cl; 3 15722 3 15722 disable 3 15723 begin integer array fdim(1:8),ia(1:32); 4 15724 <* læs sekvens *> 4 15725 fdim(4):= d.komm_op.data(3); 4 15726 s:= hent_fil_dim(fdim); 4 15727 if s <> 0 then fejlreaktion(8,s,<:spring,def:>,0); 4 15728 if fdim(1) > 30 then 4 15729 res:= 35 <* springsekvens for stor *> 4 15730 else 4 15731 begin 5 15732 for i:= 1 step 1 until fdim(1) do 5 15733 begin 6 15734 s:= læs_fil(fdim(4),i,zi); 6 15735 if s <> 0 then fejlreaktion(5,s,<:spring,def:>,0); 6 15736 ia(i):= fil(zi).iaf(1) shift 12; 6 15737 if i>1 then ia(i-1):= ia(i-1) + fil(zi).iaf(1) shift (-12); 6 15738 end; 5 15739 s:= modif_fil(tf_springdef,nr,zi); 5 15740 if s <> 0 then fejlreaktion(7,s,<:spring,def:>,0); 5 15741 fil(zi).iaf(1):= springtabel(nr,1):= d.komm_op.data(1); 5 15742 fil(zi).iaf(2):= springtabel(nr,2):= d.komm_op.data(2); 5 15743 iaf:= 4; 5 15744 tofrom(fil(zi).iaf,ia,60); 5 15745 iaf:= 0; 5 15746 springtabel(nr,3):= fdim(1); 5 15747 springtid(nr):= springstart(nr):= 0.0; 5 15748 res:= 3; 5 15749 end; 4 15750 end; 3 15751 \f 3 15751 message procedure vt_spring side 11a - 81-525/cl; 3 15752 3 15752 slut_definer: 3 15753 3 15753 <* slet fil *> 3 15754 start_operation(spr_op,curr_coruid,cs_spring_retur,104); 3 15755 d.spr_op.data(4):= d.komm_op.data(3); <* filref *> 3 15756 signalch(cs_slet_fil,spr_op,vt_optype); 3 15757 waitch(cs_spring_retur,spr_op,vt_optype,-1); 3 15758 if d.spr_op.data(9) <> 0 then 3 15759 fejlreaktion(16,d.spr_op.data(9),<:spring,def:>,0); 3 15760 returner_op(komm_op,res); 3 15761 <*+2*> 3 15762 <**> disable 3 15763 <**> if testbit44 and overvåget then 3 15764 <**> begin 4 15765 <**> skriv_vt_spring(out,0); write(out,<: springtabel efter ændring:>); 4 15766 <**> p_springtabel(out); ud; 4 15767 <**> end; 3 15768 <*-2*> 3 15769 goto næste_tid; 3 15770 \f 3 15770 message procedure vt_spring side 12 - 810525/cl; 3 15771 3 15771 vis: 3 15772 disable 3 15773 begin 4 15774 <* tilknyt fil *> 4 15775 start_operation(spr_op,curr_coruid,cs_spring_retur,101); 4 15776 d.spr_op.data(1):= (springtabel(nr,3) extract 12)*2; 4 15777 d.spr_op.data(2):= 1; 4 15778 d.spr_op.data(3):= (d.spr_op.data(1) -1)//256 +1; 4 15779 d.spr_op.data(4):= 2 shift 10; <* spoolfil *> 4 15780 signalch(cs_opret_fil,spr_op,vt_optype); 4 15781 end; 3 15782 3 15782 <* afvent svar *> 3 15783 waitch(cs_spring_retur,spr_op,vt_optype,-1); 3 15784 if d.spr_op.data(9) <> 0 then 3 15785 fejlreaktion(13,d.spr_op.data(9),<:spring,vis:>,0); 3 15786 disable 3 15787 begin integer array ia(1:30); 4 15788 s:= læs_fil(tf_springdef,nr,zi); 4 15789 if s <> 0 then fejlreaktion(5,s,<:spring,vis:>,0); 4 15790 iaf:= 4; 4 15791 tofrom(ia,fil(zi).iaf,60); 4 15792 iaf:= 0; 4 15793 for i:= 1 step 1 until d.spr_op.data(1) do 4 15794 begin 5 15795 s:= skriv_fil(d.spr_op.data(4),(i-1)*2+1,zi); 5 15796 if s <> 0 then fejlreaktion(6,s,<:spring,vis:>,0); 5 15797 fil(zi).iaf(1):= if ia(i) shift (-22) = 0 then 5 15798 ia(i) shift (-12) extract 7 5 15799 else -(ia(i) shift (-12) extract 7); 5 15800 s:= skriv_fil(d.spr_op.data(4),2*i,zi); 5 15801 if s <> 0 then fejlreaktion(6,s,<:spring,vis:>,0); 5 15802 fil(zi).iaf(1):= if i < d.spr_op.data(1) then 5 15803 (if ia(i+1) shift (-22) <> 0 then -(ia(i) extract 12) 5 15804 else ia(i) extract 12) 5 15805 else 0; 5 15806 end; 4 15807 d.spr_op.data(1):= d.spr_op.data(1) - 1; 4 15808 sæt_fil_dim(d.spr_op.data); 4 15809 d.komm_op.data(3):= d.spr_op.data(1); 4 15810 d.komm_op.data(4):= d.spr_op.data(4); 4 15811 raf:= data+8; 4 15812 d.komm_op.raf(1):= springstart(nr); 4 15813 returner_op(komm_op,3); 4 15814 end; 3 15815 goto næste_tid; 3 15816 \f 3 15816 message procedure vt_spring side 13 - 810525/cl; 3 15817 3 15817 oversigt: 3 15818 disable 3 15819 begin 4 15820 <* opret fil *> 4 15821 start_operation(spr_op,curr_coruid,cs_spring_retur,101); 4 15822 d.spr_op.data(1):= max_antal_spring; 4 15823 d.spr_op.data(2):= 4; 4 15824 d.spr_op.data(3):= (max_antal_spring -1)//64 +1; 4 15825 d.spr_op.data(4):= 2 shift 10; <* spoolfil *> 4 15826 signalch(cs_opret_fil,spr_op,vt_optype); 4 15827 end; 3 15828 3 15828 <* afvent svar *> 3 15829 waitch(cs_spring_retur,spr_op,vt_optype,-1); 3 15830 if d.spr_op.data(9) <> 0 then 3 15831 fejlreaktion(13,d.spr_op.data(9),<:spring,over:>,0); 3 15832 disable 3 15833 begin 4 15834 nr:= 0; 4 15835 for i:= 1 step 1 until max_antal_spring do 4 15836 begin 5 15837 if springtabel(i,1) <> 0 then 5 15838 begin 6 15839 nr:= nr +1; 6 15840 s:= skriv_fil(d.spr_op.data(4),nr,zi); 6 15841 if s <> 0 then fejlreaktion(6,s,<:spring,over:>,0); 6 15842 fil(zi).iaf(1):= springtabel(i,1); 6 15843 fil(zi).iaf(2):= springtabel(i,2); 6 15844 fil(zi,2):= springstart(i); 6 15845 end; 5 15846 end; 4 15847 d.spr_op.data(1):= nr; 4 15848 s:= sæt_fil_dim(d.spr_op.data); 4 15849 if s <> 0 then fejlreaktion(9,s,<:spring,over:>,0); 4 15850 d.komm_op.data(1):= nr; 4 15851 d.komm_op.data(2):= d.spr_op.data(4); 4 15852 returner_op(komm_op,3); 4 15853 end; 3 15854 goto næste_tid; 3 15855 3 15855 vt_spring_trap: 3 15856 disable skriv_vt_spring(zbillede,1); 3 15857 3 15857 end vt_spring; 2 15858 \f 2 15858 message procedure vt_auto side 1 - 810505/cl; 2 15859 2 15859 procedure vt_auto(cs_auto_retur,auto_opref); 2 15860 value cs_auto_retur,auto_opref; 2 15861 integer cs_auto_retur,auto_opref; 2 15862 begin 3 15863 integer array field op,auto_op,iaf; 3 15864 integer filref,id1,id2,aktion,postnr,sidste_post,interval,res, 3 15865 res_inf,i,s,zi,kl,døgnstart; 3 15866 real t,nu,næste_tid; 3 15867 boolean optaget; 3 15868 integer array filnavn,nytnavn(1:4); 3 15869 3 15869 procedure skriv_vt_auto(zud,omfang); 3 15870 value omfang; 3 15871 zone zud; 3 15872 integer omfang; 3 15873 begin 4 15874 long array field laf; 4 15875 4 15875 laf:= 0; 4 15876 write(zud,"nl",1,<:+++ vt_auto :>); 4 15877 if omfang<>0 then 4 15878 begin 5 15879 skriv_coru(zud,abs curr_coruno); 5 15880 write(zud,"nl",1,<<d>, 5 15881 <:cs-auto-retur :>,cs_auto_retur,"nl",1, 5 15882 <:op :>,op,"nl",1, 5 15883 <:auto-op :>,auto_op,"nl",1, 5 15884 <:filref :>,filref,"nl",1, 5 15885 <:id1 :>,id1,"nl",1, 5 15886 <:id2 :>,id2,"nl",1, 5 15887 <:aktion :>,aktion,"nl",1, 5 15888 <:postnr :>,postnr,"nl",1, 5 15889 <:sidste-post :>,sidste_post,"nl",1, 5 15890 <:interval :>,interval,"nl",1, 5 15891 <:res :>,res,"nl",1, 5 15892 <:res-inf :>,res_inf,"nl",1, 5 15893 <:i :>,i,"nl",1, 5 15894 <:s :>,s,"nl",1, 5 15895 <:zi :>,zi,"nl",1, 5 15896 <:kl :>,kl,"nl",1, 5 15897 <:døgnstart :>,døgnstart,"nl",1, 5 15898 <:optaget :>,if optaget then <:true:> else <:false:>,"nl",1, 5 15899 <:t :>,<<zddddd.dddd>,t,"nl",1, 5 15900 <:nu :>,nu,"nl",1, 5 15901 <:næste-tid :>,næste_tid,"nl",1, 5 15902 <:filnavn :>,filnavn.laf,"nl",1, 5 15903 <:nytnavn :>,nytnavn.laf,"nl",1, 5 15904 <::>); 5 15905 end; 4 15906 end skriv_vt_auto; 3 15907 \f 3 15907 message procedure vt_auto side 2 - 810507/cl; 3 15908 3 15908 iaf:= 0; 3 15909 auto_op:= auto_opref; 3 15910 filref:= id1:= id2:= aktion:= postnr:= sidste_post:= 0; 3 15911 optaget:= false; 3 15912 næste_tid:= 0.0; 3 15913 for i:= 1,2,3,4 do filnavn(i):=nytnavn(i):=0; 3 15914 stack_claim(if cm_test then 298 else 246); 3 15915 trap(vt_auto_trap); 3 15916 3 15916 <*+2*> 3 15917 <**> disable if testbit47 and overvåget or testbit28 then 3 15918 <**> skriv_vt_auto(out,0); 3 15919 <*-2*> 3 15920 3 15920 vent: 3 15921 3 15921 systime(1,0.0,nu); 3 15922 interval:= if filref=0 then (-1) <*uendeligt*> else 3 15923 if næste_tid > nu then round(næste_tid-nu) else 3 15924 if optaget then 5 else 0; 3 15925 if interval=0 then interval:= 1; 3 15926 3 15926 <*v*> waitch(cs_vt_auto,op,vt_optype or gen_optype,interval); 3 15927 3 15927 if op<>0 then goto filskift; 3 15928 3 15928 <* vent på adgang til vogntabel *> 3 15929 <*v*> waitch(cs_vt_adgang,op,vt_optype,-1); 3 15930 3 15930 <* afsend relevant operation til opdatering af vogntabel *> 3 15931 start_operation(op,curr_coruid,cs_auto_retur,aktion); 3 15932 d.op.data(1):= id1; 3 15933 d.op.data(2):= id2; 3 15934 signalch(cs_vt_opd,op,vt_optype); 3 15935 <*v*> waitch(cs_auto_retur,op,vt_optype,-1); 3 15936 res:= d.op.resultat; 3 15937 id2:= d.op.data(2); 3 15938 res_inf:= d.op.data(3); 3 15939 3 15939 <* åbn for vogntabel *> 3 15940 signalch(cs_vt_adgang,op,vt_optype or gen_optype); 3 15941 \f 3 15941 message procedure vt_auto side 3 - 810507/cl; 3 15942 3 15942 <* behandl svar fra opdatering *> 3 15943 <*+2*> 3 15944 <**> disable 3 15945 <**> if testbit45 and overvåget then 3 15946 <**> begin 4 15947 <**> integer li,lø,bo; 4 15948 <**> skriv_vt_auto(out,0); 4 15949 <**> write(out,"nl",1,<<zddddd>,systime(4,d.op.tid,t),<:.:>,entier t, 4 15950 <**> <: POSTNR. :>,<<d>,postnr,if aktion=12 then <:: SLET:> else 4 15951 <**> <:: OMKOD:>,<: - RES=:>,res); 4 15952 <**> for i:= 1,2 do 4 15953 <**> begin 5 15954 <**> li:= d.op.data(i); 5 15955 <**> lø:= li extract 7; bo:= li shift (-7) extract 5; 5 15956 <**> if bo<>0 then bo:= bo + 'A' - 1; 5 15957 <**> li:= li shift (-12) extract 10; 5 15958 <**> write(out,<< ddd>,li,false add bo,1,"/",1,<<d>,lø); 5 15959 <**> end; 4 15960 <**> systime(4,næste_tid,t); 4 15961 <**> write(out,<< zddd>,d.op.data(3) extract 14,<: - AUTOTID::>, 4 15962 <**> << zd.dd>,t/10000,"nl",1); 4 15963 <**> end; 3 15964 <*-2*> 3 15965 if res=31 then 3 15966 fejlreaktion(10,aktion,<:AUTO: SYSTEMFEJL:>,1) 3 15967 else 3 15968 if res<>3 then 3 15969 begin 4 15970 if -, optaget then 4 15971 begin 5 15972 disable start_operation(auto_op,curr_coruid,cs_auto_retur,22); 5 15973 d.auto_op.data(1):= if res=9 then 1 else if res=12 then 2 else 5 15974 if res=18 then 3 else if res=60 then 9 else 4; 5 15975 d.auto_op.data(2):= res_inf; 5 15976 d.auto_op.data(3):= if res=12 then id2 else id1; 5 15977 signalch(cs_io,auto_op,io_optype or gen_optype); 5 15978 waitch(cs_auto_retur,auto_op,io_optype or gen_optype,-1); 5 15979 end; 4 15980 if res=14 or res=18 then <* i kø eller optaget *> 4 15981 begin 5 15982 optaget:= true; 5 15983 goto vent; 5 15984 end; 4 15985 end; 3 15986 optaget:= false; 3 15987 \f 3 15987 message procedure vt_auto side 4 - 810507/cl; 3 15988 3 15988 <* find næste post *> 3 15989 disable 3 15990 begin 4 15991 if postnr=sidste_post then 4 15992 begin <* døgnskift *> 5 15993 postnr:= 1; 5 15994 døgnstart:= systime(4,systid(døgnstart+1,120000),t); 5 15995 end 4 15996 else postnr:= postnr+1; 4 15997 s:= læsfil(filref,postnr,zi); 4 15998 if s<>0 then fejlreaktion(5,s,<:auto:>,0); 4 15999 aktion:= fil(zi).iaf(1); 4 16000 næste_tid:= systid(døgnstart,fil(zi).iaf(2)); 4 16001 id1:= fil(zi).iaf(3); 4 16002 id2:= fil(zi).iaf(4); 4 16003 end; 3 16004 goto vent; 3 16005 \f 3 16005 message procedure vt_auto side 5 - 810507/cl; 3 16006 3 16006 filskift: 3 16007 3 16007 <*+2*> 3 16008 <**> disable 3 16009 <**> if testbit41 and overvåget then 3 16010 <**> begin 4 16011 <**> skriv_vt_auto(out,0); 4 16012 <**> write(out,<: modtaget operation::>); 4 16013 <**> skriv_op(out,op); 4 16014 <**> end; 3 16015 <*-2*> 3 16016 for i:= 1 step 1 until 4 do filnavn(i):=nytnavn(i):= 0; 3 16017 res:= 46; 3 16018 if d.op.opkode extract 12 <> 21 then 3 16019 fejlreaktion(2,d.op.opkode extract 12,<:auto,filskift:>,0); 3 16020 if filref = 0 then goto knyt; 3 16021 3 16021 <* gem filnavn til io-meddelelse *> 3 16022 disable begin 4 16023 integer array fdim(1:8); 4 16024 integer array field navn; 4 16025 fdim(4):= filref; 4 16026 hentfildim(fdim); 4 16027 navn:= 8; 4 16028 tofrom(filnavn,fdim.navn,8); 4 16029 end; 3 16030 3 16030 <* frivgiv tilknyttet autofil *> 3 16031 disable start_operation(auto_op,curr_coruid,cs_auto_retur,103); 3 16032 d.auto_op.data(4):= filref; 3 16033 signalch(cs_frigiv_fil,auto_op,vt_optype); 3 16034 <*v*> waitch(cs_auto_retur,auto_op,vt_optype,-1); 3 16035 if d.auto_op.data(9) <> 0 then 3 16036 fejlreaktion(15,d.auto_op.data(9),<:auto,filskift:>,0); 3 16037 filref:= aktion:= id1:= id2:= postnr:= sidste_post:= 0; 3 16038 optaget:= false; 3 16039 næste_tid:= 0.0; 3 16040 res:= 3; 3 16041 \f 3 16041 message procedure vt_auto side 6 - 810507/cl; 3 16042 3 16042 <* tilknyt evt. ny autofil *> 3 16043 knyt: 3 16044 if d.op.data(1)<>0 then 3 16045 begin 4 16046 disable startoperation(auto_op,curr_coruid,cs_auto_retur,102); 4 16047 d.auto_op.data(4):= 30 shift 12; <* contentskey,subno *> 4 16048 for i:= 1,2,3,4 do d.auto_op.data(4+i):= d.op.data(i); 4 16049 disable 4 16050 begin integer pos1,pos2; 5 16051 pos1:= pos2:= 13; 5 16052 while læstegn(d.auto_op.data,pos1,i)<>0 do 5 16053 begin 6 16054 if 'A'<=i and i<='Å' then i:= i - 'A' + 'a'; 6 16055 skrivtegn(d.auto_op.data,pos2,i); 6 16056 end; 5 16057 end; 4 16058 signalch(cs_tilknyt_fil,auto_op,vt_optype); 4 16059 <*v*> waitch(cs_auto_retur,auto_op,vt_optype,-1); 4 16060 s:= d.auto_op.data(9); 4 16061 if s=0 then res:= 3 <* ok *> else 4 16062 if s=1 or s=2 then res:= 46 <* ukendt navn *> else 4 16063 if s=5 or s=7 then res:= 47 <* galt indhold *> else 4 16064 if s=6 then res:= 48 <* i brug *> else 4 16065 fejlreaktion(14,2,<:auto,filskift:>,0); 4 16066 if res<>3 then goto returner; 4 16067 4 16067 tofrom(nytnavn,d.op.data,8); 4 16068 4 16068 <* find første post *> 4 16069 disable 4 16070 begin 5 16071 døgnstart:= systime(5,0.0,t); 5 16072 kl:= round t; 5 16073 filref:= d.auto_op.data(4); 5 16074 sidste_post:= d.auto_op.data(1); 5 16075 postnr:= 0; 5 16076 for postnr:= postnr+1 while postnr <= sidste_post do 5 16077 begin 6 16078 s:= læsfil(filref,postnr,zi); 6 16079 if s<>0 then fejlreaktion(5,s,<:auto,filskift:>,0); 6 16080 if fil(zi).iaf(2) > kl then goto post_fundet; 6 16081 end; 5 16082 postnr:= 1; 5 16083 døgnstart:= systime(4,systid(døgnstart+1,120000),t); 5 16084 \f 5 16084 message procedure vt_auto side 7 - 810507/cl; 5 16085 5 16085 post_fundet: 5 16086 s:= læsfil(filref,postnr,zi); 5 16087 if s<>0 then fejlreaktion(5,s,<:auto,filskift:>,0); 5 16088 aktion:= fil(zi).iaf(1); 5 16089 næste_tid:= systid(døgnstart,fil(zi).iaf(2)); 5 16090 id1:= fil(zi).iaf(3); 5 16091 id2:= fil(zi).iaf(4); 5 16092 res:= 3; 5 16093 end; 4 16094 end ny fil; 3 16095 3 16095 returner: 3 16096 d.op.resultat:= res; 3 16097 <*+2*> 3 16098 <**> disable 3 16099 <**> if testbit41 and overvåget then 3 16100 <**> begin 4 16101 <**> skriv_vt_auto(out,0); 4 16102 <**> write(out,<: returner operation::>); 4 16103 <**> skriv_op(out,op); 4 16104 <**> end; 3 16105 <*-2*> 3 16106 signalch(d.op.retur,op,d.op.optype); 3 16107 3 16107 if vt_log_aktiv then 3 16108 begin 4 16109 waitch(cs_vt_logpool,op,vt_optype,-1); 4 16110 startoperation(op,curr_coruid,cs_vt_logpool,0); 4 16111 if nytnavn(1)=0 then 4 16112 hægtstring(d.op.data.v_tekst,1,<:ophør:>) 4 16113 else 4 16114 skriv_text(d.op.data.v_tekst,1,nytnavn); 4 16115 d.op.data.v_kode:= 4; <*PS (PlanSkift)*> 4 16116 systime(1,0.0,d.op.data.v_tid); 4 16117 signalch(cs_vt_log,op,vt_optype); 4 16118 end; 3 16119 3 16119 if filnavn(1)<>0 then 3 16120 begin <* meddelelse til io om annulering *> 4 16121 disable begin 5 16122 start_operation(auto_op,curr_coruid,cs_auto_retur,23<*io_gen_medd*>); 5 16123 i:= 1; 5 16124 hægtstring(d.auto_op.data,i,<:auto :>); 5 16125 skriv_text(d.auto_op.data,i,filnavn); 5 16126 hægtstring(d.auto_op.data,i,<: annuleret:>); 5 16127 repeat skrivtegn(d.auto_op.data,i,'nul') until (i-1) mod 6 = 0; 5 16128 signalch(cs_io,auto_op,io_optype or gen_optype); 5 16129 end; 4 16130 waitch(cs_auto_retur,auto_op,io_optype or gen_optype,-1); 4 16131 end; 3 16132 goto vent; 3 16133 3 16133 vt_auto_trap: 3 16134 disable skriv_vt_auto(zbillede,1); 3 16135 3 16135 end vt_auto; 2 16136 message procedure vt_log side 1 - 920517/cl; 2 16137 2 16137 procedure vt_log; 2 16138 begin 3 16139 integer i,j,ventetid; 3 16140 real dg,t,nu,skiftetid; 3 16141 boolean fil_åben; 3 16142 integer array ia(1:10),dp,dp1(1:8); 3 16143 integer array field op, iaf; 3 16144 3 16144 procedure skriv_vt_log(zud,omfang); 3 16145 value omfang; 3 16146 zone zud; 3 16147 integer omfang; 3 16148 begin 4 16149 write(zud,"nl",1,<:+++ vt-log :>); 4 16150 if omfang<>0 then 4 16151 begin 5 16152 skriv_coru(zud, abs curr_coruno); 5 16153 write(zud,"nl",1,<<d>, 5 16154 <:i :>,i,"nl",1, 5 16155 <:j :>,j,"nl",1, 5 16156 <:ventetid :>,ventetid,"nl",1, 5 16157 <:dg :>,<<zddddd.dd>,dg,"nl",1, 5 16158 <:t :>,t,"nl",1, 5 16159 <:nu :>,nu,"nl",1, 5 16160 <:skiftetid :>,skiftetid,"nl",1, 5 16161 <:filåben :>,if fil_åben then <:true:> else <:false:>,"nl",1, 5 16162 <:op :>,<<d>,op,"nl",1, 5 16163 <::>); 5 16164 raf:= 0; 5 16165 write(zud,"nl",1,<:ia::>); 5 16166 skrivhele(zud,ia.raf,20,2); 5 16167 write(zud,"nl",2,<:dp::>); 5 16168 skrivhele(zud,dp.raf,16,2); 5 16169 write(zud,"nl",2,<:dp1::>); 5 16170 skrivhele(zud,dp1.raf,16,2); 5 16171 end; 4 16172 end; 3 16173 3 16173 message procedure vt_log side 2 - 920517/cl; 3 16174 3 16174 procedure slet_fil; 3 16175 begin 4 16176 integer segm,res; 4 16177 integer array tail(1:10); 4 16178 4 16178 res:= monitor(42)lookup_entry:(zvtlog,0,tail); 4 16179 if res=0 then 4 16180 begin 5 16181 segm:= tail(10); 5 16182 res:=monitor(48)remove_entry:(zvtlog,0,tail); 5 16183 if res=0 then 5 16184 begin 6 16185 close(zvtlog,true); 6 16186 open(zvtlog,4,<:vtlogpool:>,0); close(zvtlog,true); 6 16187 res:=monitor(42)lookup_entry:(zvtlog,0,tail); 6 16188 if res=0 then 6 16189 begin 7 16190 tail(1):= tail(1)+segm; 7 16191 monitor(44)change_entry:(zvtlog,0,tail); 7 16192 end; 6 16193 end; 5 16194 end; 4 16195 end; 3 16196 3 16196 boolean procedure udvid_fil; 3 16197 begin 4 16198 integer res,spos; 4 16199 integer array tail(1:10); 4 16200 zone z(1,1,stderror); 4 16201 4 16201 udvid_fil:= false; 4 16202 open(z,0,<:vtlogpool:>,0); close(z,true); 4 16203 res:= monitor(42)lookup_entry:(z,0,tail); 4 16204 if (res=0) and (tail(1) >= vt_log_slicelgd) then 4 16205 begin 5 16206 tail(1):=tail(1) - vt_log_slicelgd; 5 16207 res:=monitor(44)change_entry:(z,0,tail); 5 16208 if res=0 then 5 16209 begin 6 16210 spos:= vt_logtail(1); 6 16211 vt_logtail(1):= vt_logtail(1)+vt_log_slicelgd; 6 16212 res:=monitor(44)change_entry:(zvtlog,0,vt_logtail); 6 16213 if res<>0 then 6 16214 begin 7 16215 vt_logtail(1):= vt_logtail(1) - vt_log_slicelgd; 7 16216 tail(1):= tail(1) + vt_log_slicelgd; 7 16217 monitor(44)change_entry:(z,0,tail); 7 16218 end 6 16219 else 6 16220 begin 7 16221 setposition(zvtlog,0,spos); 7 16222 udvid_fil:= true; 7 16223 end; 6 16224 end; 5 16225 end; 4 16226 end; 3 16227 3 16227 message procedure vt_log side 3 - 920517/cl; 3 16228 3 16228 boolean procedure ny_fil; 3 16229 begin 4 16230 integer res,i,j; 4 16231 integer array nyt(1:4), ia,tail(1:10); 4 16232 long array field navn; 4 16233 real t; 4 16234 4 16234 navn:=0; 4 16235 if fil_åben then 4 16236 begin 5 16237 close(zvtlog,true); 5 16238 fil_åben:= false; 5 16239 nyt.navn(1):= long<:vtlo:>; 5 16240 nyt.navn(2):= long<::>; 5 16241 anbringtal(nyt,5,round systime(4,vt_logstart,t),-6); 5 16242 j:= 'a' - 1; 5 16243 repeat 5 16244 res:=monitor(46)rename_entry:(zvtlog,0,nyt); 5 16245 if res=3 then 5 16246 begin 6 16247 j:= j+1; 6 16248 if j <= 'å' then skrivtegn(nyt,11,j); 6 16249 end; 5 16250 until (res<>3) or (j > 'å'); 5 16251 5 16251 if res=0 then 5 16252 begin 6 16253 open(zvtlog,4,<:vtlogklar:>,0); 6 16254 res:=monitor(42)lookup_entry:(zvtlog,0,tail); 6 16255 if res=0 then 6 16256 res:=monitor(52)create_areaproc:(zvtlog,0,ia); 6 16257 if res=0 then 6 16258 begin 7 16259 res:=monitor(8)reserve_process:(zvtlog,0,ia); 7 16260 if res<>0 then monitor(64)remove_areaproc:(zvtlog,0,ia); 7 16261 end; 6 16262 6 16262 if res=0 then 6 16263 begin 7 16264 setposition(zvtlog,0,tail(10)//64); 7 16265 navn:= (tail(10) mod 64)*8; 7 16266 if (tail(1) <= tail(10)//64) then 7 16267 outrec6(zvtlog,512) 7 16268 else 7 16269 swoprec6(zvtlog,512); 7 16270 tofrom(zvtlog.navn,nyt,8); 7 16271 tail(10):= tail(10)+1; 7 16272 setposition(zvtlog,0,tail(10)//64); 7 16273 monitor(44)change_entry:(zvtlog,0,tail); 7 16274 close(zvtlog,true); 7 16275 end 6 16276 else 6 16277 begin 7 16278 navn:= 0; 7 16279 close(zvtlog,true); 7 16280 open(zvtlog,4,<:vtlog:>,0); 7 16281 slet_fil; 7 16282 end; 6 16283 end 5 16284 else 5 16285 slet_fil; 5 16286 end; 4 16287 4 16287 <* logfilen er nu omdøbt og indskrevet i vtlogklar *> 4 16288 <* eller den er blevet slettet. *> 4 16289 4 16289 open(zvtlog,4,<:vtlog:>,0); 4 16290 for i:= 1 step 1 until 10 do vt_logtail(i):= 0; 4 16291 iaf:= 2; tofrom(vt_logtail.iaf,vt_logdisc,8); 4 16292 vt_logtail(6):= systime(7,0,t); 4 16293 4 16293 res:=monitor(40)create_entry:(z_vtlog,0,vt_logtail); 4 16294 if res=0 then 4 16295 begin 5 16296 monitor(50)permanent_entry:(zvtlog,3,ia); 5 16297 if res<>0 then 5 16298 monitor(48)remove_entry:(zvtlog,0,ia); 5 16299 end; 4 16300 4 16300 if res=0 then fil_åben:= true; 4 16301 4 16301 ny_fil:= fil_åben; 4 16302 end ny_fil; 3 16303 3 16303 message procedure vt_log side 4 - 920517/cl; 3 16304 3 16304 procedure skriv_post(logpost); 3 16305 integer array logpost; 3 16306 begin 4 16307 integer array field post; 4 16308 real t; 4 16309 4 16309 if vt_logtail(10)//32 < vt_logtail(1) then 4 16310 begin 5 16311 outrec6(zvtlog,512); 5 16312 post:= (vt_logtail(10) mod 32)*16; 5 16313 tofrom(zvtlog.post,logpost,16); 5 16314 vt_logtail(10):= vt_logtail(10)+1; 5 16315 setposition(zvtlog,0,vt_logtail(10)//32); 5 16316 vt_logtail(6):= systime(7,0,t); 5 16317 monitor(44)change_entry:(zvtlog,0,vt_logtail); 5 16318 end; 4 16319 end; 3 16320 3 16320 procedure sletsendte; 3 16321 begin 4 16322 zone z(128,1,stderror), zpool,zlog(1,1,stderror); 4 16323 integer array pooltail,tail,ia(1:10); 4 16324 integer i,res; 4 16325 4 16325 open(zpool,0,<:vtlogpool:>,0); close(zpool,true); 4 16326 res:=monitor(42,zpool,0,pooltail); 4 16327 4 16327 open(z,4,<:vtlogslet:>,0); 4 16328 if monitor(42,z,0,tail)=0 and tail(10)>0 then 4 16329 begin 5 16330 if monitor(52,z,0,tail)=0 then 5 16331 begin 6 16332 if monitor(8,z,0,tail)=0 then 6 16333 begin 7 16334 for i:=1 step 1 until tail(10) do 7 16335 begin 8 16336 inrec6(z,8); 8 16337 open(zlog,0,z,0); close(zlog,true); 8 16338 if monitor(42,zlog,0,ia)=0 then 8 16339 begin 9 16340 if monitor(48,zlog,0,ia)=0 then 9 16341 begin 10 16342 pooltail(1):=pooltail(1)+ia(1); 10 16343 end; 9 16344 end; 8 16345 end; 7 16346 tail(10):=0; 7 16347 monitor(44,z,0,tail); 7 16348 end 6 16349 else 6 16350 monitor(64,z,0,tail); 6 16351 end; 5 16352 if res=0 then monitor(44,zpool,0,pooltail); 5 16353 end; 4 16354 close(z,true); 4 16355 end; 3 16356 3 16356 message procedure vt_log side 5 - 920517/cl; 3 16357 3 16357 trap(vt_log_trap); 3 16358 stack_claim(200); 3 16359 3 16359 fil_åben:= false; 3 16360 if -, vt_log_aktiv then goto init_slut; 3 16361 open(zvtlog,4,<:vtlog:>,0); 3 16362 i:=monitor(42)lookup_entry:(zvtlog,0,vt_logtail); 3 16363 if i=0 then 3 16364 i:=monitor(52)create_areaproc:(zvtlog,0,ia); 3 16365 if i=0 then 3 16366 begin 4 16367 i:=monitor(8)reserve_process:(zvtlog,0,ia); 4 16368 if i<>0 then monitor(64)remove_areaproc:(zvtlog,0,ia); 4 16369 end; 3 16370 3 16370 if (i=0) and (vt_logtail(1)=0) then 3 16371 begin 4 16372 close(zvtlog,true); 4 16373 monitor(48)remove_entry:(zvtlog,0,ia); 4 16374 i:= 1; 4 16375 end; 3 16376 3 16376 disable 3 16377 if i=0 then 3 16378 begin 4 16379 fil_åben:= true; 4 16380 inrec6(zvtlog,512); 4 16381 vt_logstart:= zvtlog.v_tid; 4 16382 systime(1,0.0,nu); 4 16383 if (nu - vt_logstart) < 24*60*60.0 then 4 16384 begin 5 16385 setposition(zvtlog,0,vt_logtail(10)//32); 5 16386 if (vt_logtail(10)//32) < vt_logtail(1) then 5 16387 begin 6 16388 inrec6(zvtlog,512); 6 16389 setposition(zvtlog,0,vt_logtail(10)//32); 6 16390 end; 5 16391 end 4 16392 else 4 16393 begin 5 16394 if ny_fil then 5 16395 begin 6 16396 if udvid_fil then 6 16397 begin 7 16398 systime(1,0.0,dp.v_tid); 7 16399 vt_logstart:= dp.v_tid; 7 16400 dp.v_kode:=0; 7 16401 skriv_post(dp); 7 16402 end 6 16403 else 6 16404 begin 7 16405 close(zvtlog,true); 7 16406 monitor(48)remove_entry:(zvtlog,0,ia); 7 16407 fil_åben:= false; 7 16408 end; 6 16409 end; 5 16410 end; 4 16411 end 3 16412 else 3 16413 begin 4 16414 close(zvtlog,true); 4 16415 if ny_fil then 4 16416 begin 5 16417 if udvid_fil then 5 16418 begin 6 16419 systime(1,0.0,dp.v_tid); 6 16420 vt_logstart:= dp.v_tid; 6 16421 dp.v_kode:=0; 6 16422 skriv_post(dp); 6 16423 end 5 16424 else 5 16425 begin 6 16426 close(zvtlog,true); 6 16427 monitor(48)remove_entry:(zvtlog,0,ia); 6 16428 fil_åben:= false; 6 16429 end; 5 16430 end; 4 16431 end; 3 16432 3 16432 init_slut: 3 16433 3 16433 dg:= systime(5,0,t); 3 16434 if t < vt_logskift then 3 16435 skiftetid:= systid(dg,vt_logskift) 3 16436 else 3 16437 skiftetid:= systid(dg+1,vt_logskift); 3 16438 3 16438 message procedure vt_log side 6 - 920517/cl; 3 16439 3 16439 vent: 3 16440 3 16440 systime(1,0.0,nu); dg:= systime(5,0.0,t); 3 16441 ventetid:= round(skiftetid - nu); 3 16442 if ventetid < 1 then ventetid:= 1; 3 16443 3 16443 <*V*> waitch(cs_vt_log,op,vt_optype,ventetid); 3 16444 3 16444 systime(1,0.0,nu); dg:=systime(4,nu,t); 3 16445 if op <> 0 then 3 16446 begin 4 16447 tofrom(dp,d.op.data,16); 4 16448 signalch(cs_vt_logpool,op,vt_optype); 4 16449 end; 3 16450 3 16450 if -, vt_log_aktiv then goto vent; 3 16451 3 16451 disable if (op=0) or (nu > skiftetid) then 3 16452 begin 4 16453 if fil_åben then 4 16454 begin 5 16455 dp1.v_tid:= systid(dg,vt_logskift); 5 16456 dp1.v_kode:= 1; 5 16457 if (vt_logtail(10)//32) >= vt_logtail(1) then 5 16458 begin 6 16459 if udvid_fil then 6 16460 skriv_post(dp1); 6 16461 end 5 16462 else 5 16463 skriv_post(dp1); 5 16464 end; 4 16465 4 16465 if (op=0) or (nu > skiftetid) then 4 16466 skiftetid:= skiftetid + 24*60*60.0; 4 16467 4 16467 sletsendte; 4 16468 4 16468 if ny_fil then 4 16469 begin 5 16470 if udvid_fil then 5 16471 begin 6 16472 vt_logstart:=dp1.v_tid:= systid(dg,vt_logskift); 6 16473 dp1.v_kode:= 0; 6 16474 skriv_post(dp1); 6 16475 end 5 16476 else 5 16477 begin 6 16478 close(zvtlog,true); 6 16479 monitor(48)remove_entry:(zvtlog,0,ia); 6 16480 fil_åben:= false; 6 16481 end; 5 16482 end; 4 16483 end; 3 16484 3 16484 disable if op<>0 and fil_åben then 3 16485 begin 4 16486 if (vt_logtail(10)//32) >= vt_logtail(1) then 4 16487 begin 5 16488 if -, udvid_fil then 5 16489 begin 6 16490 if ny_fil then 6 16491 begin 7 16492 if udvid_fil then 7 16493 begin 8 16494 systime(1,0.0,dp1.v_tid); 8 16495 vt_logstart:= dp1.v_tid; 8 16496 dp1.v_kode:= 0; 8 16497 skriv_post(dp1); 8 16498 end 7 16499 else 7 16500 begin 8 16501 close(zvtlog,true); 8 16502 monitor(48)remove_entry:(zvtlog,0,ia); 8 16503 fil_åben:= false; 8 16504 end; 7 16505 end; 6 16506 end; 5 16507 end; 4 16508 4 16508 if fil_åben then skriv_post(dp); 4 16509 end; 3 16510 3 16510 goto vent; 3 16511 3 16511 vt_log_trap: 3 16512 disable skriv_vt_log(zbillede,1); 3 16513 end vt_log; 2 16514 \f 2 16514 2 16514 algol list.off; 2 16515 message coroutinemonitor - 11 ; 2 16516 2 16516 2 16516 <*************** coroutine monitor procedures ***************> 2 16517 2 16517 2 16517 <***** delay ***** 2 16518 2 16518 this procedure links the calling coroutine into the timerqueue and sets 2 16519 the timeout value to 'timeout'. *> 2 16520 2 16520 2 16520 procedure delay (timeout); 2 16521 value timeout; 2 16522 integer timeout; 2 16523 begin 3 16524 link(current, idlequeue); 3 16525 link(current + corutimerchain, timerqueue); 3 16526 d.current.corutimer:= timeout; 3 16527 3 16527 3 16527 passivate; 3 16528 d.current.corutimer:= 0; 3 16529 end; 2 16530 \f 2 16530 2 16530 message coroutinemonitor - 12 ; 2 16531 2 16531 2 16531 <***** pass ***** 2 16532 2 16532 this procedure moves the calling coroutine from the head of the ready 2 16533 queue down below all coroutines of lower or equal priority. *> 2 16534 2 16534 2 16534 procedure pass; 2 16535 begin 3 16536 linkprio(current, readyqueue); 3 16537 3 16537 3 16537 passivate; 3 16538 end; 2 16539 2 16539 2 16539 <***** signal **** 2 16540 2 16540 this procedure increases the value af 'semaphore' by 1. 2 16541 in case some coroutine is already waiting, it is linked into the ready 2 16542 queue for activation. the calling coroutine continues execution. *> 2 16543 2 16543 2 16543 procedure signal (semaphore); 2 16544 value semaphore; 2 16545 integer semaphore; 2 16546 begin 3 16547 integer array field sem; 3 16548 sem:= semaphore; 3 16549 if d.sem.simvalue < 0 then linkprio(d.sem.simcoru, readyqueue); 3 16550 d.sem.simvalue:= d.sem.simvalue + 1; 3 16551 3 16551 3 16551 end; 2 16552 \f 2 16552 2 16552 message coroutinemonitor - 13 ; 2 16553 2 16553 2 16553 <***** wait ***** 2 16554 2 16554 this procedure decreases the value of 'semaphore' by 1. 2 16555 in case the value of the semaphore is negative after the decrease, the 2 16556 calling coroutine is linked into the semaphore queue waiting for a 2 16557 coroutine to signal this semaphore. *> 2 16558 2 16558 2 16558 procedure wait (semaphore); 2 16559 value semaphore; 2 16560 integer semaphore; 2 16561 begin 3 16562 integer array field sem; 3 16563 sem:= semaphore; 3 16564 d.sem.simvalue:= d.sem.simvalue - 1; 3 16565 3 16565 3 16565 linkprio(current, if d.sem.simvalue < 0 then sem+simcoru else readyqueue); 3 16566 passivate; 3 16567 end; 2 16568 \f 2 16568 2 16568 message coroutinemonitor - 14 ; 2 16569 2 16569 2 16569 <***** inspect ***** 2 16570 2 16570 this procedure inspects the value of the semaphore and returns it in 2 16571 'elements'. 2 16572 the semaphore is left unchanged. *> 2 16573 2 16573 2 16573 procedure inspect (semaphore, elements); 2 16574 value semaphore; 2 16575 integer semaphore, elements; 2 16576 begin 3 16577 integer array field sem; 3 16578 sem:= semaphore; 3 16579 elements:= d.sem.simvalue; 3 16580 3 16580 3 16580 end; 2 16581 \f 2 16581 2 16581 message coroutinemonitor - 15 ; 2 16582 2 16582 2 16582 <***** signalch ***** 2 16583 2 16583 this procedure delivers an operation at 'semaphore'. 2 16584 in case another coroutine is already waiting for an operation of the 2 16585 kind 'operationtype' this coroutine will get the operation and it will 2 16586 be put into the ready queue for activation. 2 16587 in case no coroutine is waiting for the actial kind of operation it is 2 16588 linked into the semaphore queue, at the end of the queue 2 16589 if operation is positive and at the beginning if operation is negative. 2 16590 the calling coroutine continues execution. *> 2 16591 2 16591 2 16591 procedure signalch (semaphore, operation, operationtype); 2 16592 value semaphore, operation, operationtype; 2 16593 integer semaphore, operation; 2 16594 boolean operationtype; 2 16595 begin 3 16596 integer array field firstcoru, currcoru, op,currop; 3 16597 op:= abs operation; 3 16598 d.op.optype:= operationtype; 3 16599 firstcoru:= semaphore + semcoru; 3 16600 currcoru:= d.firstcoru.next; 3 16601 while currcoru <> firstcoru do 3 16602 begin 4 16603 if (d.currcoru.corutypeset and operationtype) extract 12 <> 0 then 4 16604 begin 5 16605 link(operation, 0); 5 16606 d.currcoru.coruop:= operation; 5 16607 linkprio(currcoru, readyqueue); 5 16608 link(currcoru + corutimerchain, idlequeue); 5 16609 goto exit; 5 16610 end else currcoru:= d.currcoru.next; 4 16611 end; 3 16612 currop:=semaphore + semop; 3 16613 if operation < 0 then currop:=d.currop.next; 3 16614 link(op, currop); 3 16615 exit: 3 16616 3 16616 3 16616 end; 2 16617 \f 2 16617 2 16617 message coroutinemonitor - 16 ; 2 16618 2 16618 2 16618 <***** waitch ***** 2 16619 2 16619 this procedure fetches an operation from a semaphore. 2 16620 in case an operation matching 'operationtypeset' is already waiting at 2 16621 'semaphore' it is handed over to the calling coroutine. 2 16622 in case no matching operation is waiting, the calling coroutine is 2 16623 linked to the semaphore. 2 16624 in any case the calling coroutine will be stopped and all corouti- 2 16625 nes are rescheduled. *> 2 16626 2 16626 2 16626 procedure waitch (semaphore, operation, operationtypeset, timeout); 2 16627 value semaphore, operationtypeset, timeout; 2 16628 integer semaphore, operation, timeout; 2 16629 boolean operationtypeset; 2 16630 begin 3 16631 integer array field firstop, currop; 3 16632 firstop:= semaphore + semop; 3 16633 currop:= d.firstop.next; 3 16634 3 16634 3 16634 while currop <> firstop do 3 16635 begin 4 16636 if (d.currop.optype and operationtypeset) extract 12 <> 0 then 4 16637 begin 5 16638 link(currop, 0); 5 16639 d.current.coruop:= currop; 5 16640 operation:= currop; 5 16641 \f 5 16641 5 16641 message coroutinemonitor - 17 ; 5 16642 5 16642 linkprio(current, readyqueue); 5 16643 passivate; 5 16644 goto exit; 5 16645 end else currop:= d.currop.next; 4 16646 end; 3 16647 linkprio(current, semaphore + semcoru); 3 16648 if timeout > 0 then 3 16649 begin 4 16650 link(current + corutimerchain, timerqueue); 4 16651 d.current.corutimer:= timeout; 4 16652 end else d.current.corutimer:= 0; 3 16653 d.current.corutypeset:= operationtypeset; 3 16654 passivate; 3 16655 if d.current.corutimer < 0 then operation:= 0 3 16656 else operation:= d.current.coruop; 3 16657 d.current.corutimer:= 0; 3 16658 currop:= operation; 3 16659 d.current.coruop:= currop; 3 16660 link(current+corutimerchain, idlequeue); 3 16661 exit: 3 16662 3 16662 3 16662 end; 2 16663 \f 2 16663 2 16663 message coroutinemonitor - 18 ; 2 16664 2 16664 2 16664 <***** inspectch ***** 2 16665 2 16665 this procedure inspects the queue of operations waiting at 'semaphore'. 2 16666 the number of matching operations are counted and delivered in 'elements'. 2 16667 if no operations are found the number of coroutines waiting 2 16668 for operations of the typeset are counted and delivered as 2 16669 negative value in 'elements'. 2 16670 the semaphore is left unchanged. *> 2 16671 2 16671 2 16671 procedure inspectch (semaphore, operationtypeset, elements); 2 16672 value semaphore, operationtypeset; 2 16673 integer semaphore, elements; 2 16674 boolean operationtypeset; 2 16675 begin 3 16676 integer array field firstop, currop,firstcoru,currcoru; 3 16677 integer counter; 3 16678 counter:= 0; 3 16679 firstop:= semaphore + semop; 3 16680 currop:= d.firstop.next; 3 16681 while currop <> firstop do 3 16682 begin 4 16683 if (operationtypeset and d.currop.optype) extract 12 <> 0 then 4 16684 counter:= counter + 1; 4 16685 currop:= d.currop.next; 4 16686 end; 3 16687 if counter=0 then 3 16688 begin 4 16689 firstcoru:=semaphore + sem_coru; 4 16690 curr_coru:=d.firstcoru.next; 4 16691 while curr_coru<>first_coru do 4 16692 begin 5 16693 if (operationtypeset and d.curr_coru.corutypeset) extract 12 <>0 then 5 16694 counter:=counter - 1; 5 16695 curr_coru:=d.curr_coru.next; 5 16696 end; 4 16697 end; 3 16698 elements:= counter; 3 16699 3 16699 3 16699 end; 2 16700 \f 2 16700 2 16700 message coroutinemonitor - 19 ; 2 16701 2 16701 2 16701 <***** csendmessage ***** 2 16702 2 16702 this procedure sends the message in 'mess' to the process defined by the name 2 16703 in 'receiver', and returns an identification of the message extension used 2 16704 for sending the message (this identification is to be used for calling 'cwait- 2 16705 answer' or 'cregretmessage'. *> 2 16706 2 16706 2 16706 procedure csendmessage (receiver, mess, messextension); 2 16707 real array receiver; 2 16708 integer array mess; 2 16709 integer messextension; 2 16710 begin 3 16711 integer bufref, messext; 3 16712 messref(maxmessext):= 0; 3 16713 messext:= 1; 3 16714 while messref(messext) <> 0 do messext:= messext + 1; 3 16715 if messext = maxmessext then <* no resources *> messext:= 0 else 3 16716 begin 4 16717 messcode(messext):= 1 shift 12 add 2; 4 16718 mon(16) send message :(0, mess, 0, receiver); 4 16719 messref(messext):= monw2; 4 16720 if monw2 > 0 then messextension:= messext else messextension:= 0; 4 16721 end; 3 16722 3 16722 3 16722 end; 2 16723 \f 2 16723 2 16723 message coroutinemonitor - 20 ; 2 16724 2 16724 2 16724 <***** cwaitanswer ***** 2 16725 2 16725 this procedure asks the coroutine monitor to get an answer to the message 2 16726 corresponding to 'messextension'. in case the answer has already arrived 2 16727 it stays in the eventqueue until 'cwaitanswer' is called. 2 16728 in case 'timeout' is positive, the coroutine is linked into the timer 2 16729 queue, and in case the answer does not arrive within 'timout' seconds the 2 16730 coroutine is restarted with result = 0. *> 2 16731 2 16731 2 16731 procedure cwaitanswer (messextension, answer, result, timeout); 2 16732 value messextension, timeout; 2 16733 integer messextension, result, timeout; 2 16734 integer array answer; 2 16735 begin 3 16736 integer messext; 3 16737 messext:= messextension; 3 16738 messcode(messext):= messcode(messext) extract 12; 3 16739 link(current, idlequeue); 3 16740 messop(messext):= current; 3 16741 if timeout > 0 then 3 16742 begin 4 16743 link(current + corutimerchain, timerqueue); 4 16744 d.current.corutimer:= timeout; 4 16745 end else d.current.corutimer:= 0; 3 16746 3 16746 3 16746 passivate; 3 16747 if d.current.corutimer < 0 then result:= 0 else 3 16748 begin 4 16749 mon(18) wait answer :(0, answer, messref(messextension), 0); 4 16750 result:= monw0; 4 16751 baseevent:= 0; 4 16752 messref(messextension):= 0; 4 16753 end; 3 16754 d.current.corutimer:= 0; 3 16755 link(current+corutimerchain, idlequeue); 3 16756 end; 2 16757 \f 2 16757 2 16757 message coroutinemonitor - 21 ; 2 16758 2 16758 2 16758 <***** cwaitmessage ***** 2 16759 2 16759 this procedure asks the coroutine monitor to give it a message, when some- 2 16760 one arrives. in case a message has arrived already it stays at the event queue 2 16761 until 'cwaitmessage' is called. 2 16762 in case 'timeout' is positive, the coroutine is linked into the timer queue, 2 16763 if no message arrives within 'timeout' seconds, the coroutine is restarted 2 16764 with messbufferref = 0. *> 2 16765 2 16765 2 16765 procedure cwaitmessage (processextension, mess, messbufferref, timeout); 2 16766 value timeout, processextension; 2 16767 integer processextension, messbufferref, timeout; 2 16768 integer array mess; 2 16769 begin 3 16770 integer i; 3 16771 integer array field messbuf; 3 16772 proccode(processextension):= 2; 3 16773 procop(processextension):= current; 3 16774 link(current, idlequeue); 3 16775 if timeout > 0 then 3 16776 begin 4 16777 link(current + corutimerchain, timerqueue); 4 16778 d.current.corutimer:= timeout; 4 16779 end else d.current.corutimer:= 0; 3 16780 3 16780 3 16780 passivate; 3 16781 if d.current.corutimer < 0 then messbufferref:= 0 else 3 16782 begin 4 16783 messbuf:= procop(processextension); 4 16784 for i:=1 step 1 until 8 do mess(i):= core.messbuf(4+i); 4 16785 proccode(procext):= 1 shift 12; 4 16786 messbufferref:= messbuf; 4 16787 baseevent:= 0; 4 16788 end; 3 16789 d.current.corutimer:= 0; 3 16790 link(current+corutimerchain, idlequeue); 3 16791 end; 2 16792 \f 2 16792 2 16792 message coroutinemonitor - 22 ; 2 16793 2 16793 2 16793 <***** cregretmessage ***** 2 16794 2 16794 this procedure regrets the message corresponding to messageexten- 2 16795 sion, to release message buffer and message extension. 2 16796 i/o messages are not regretable. *> 2 16797 2 16797 2 16797 2 16797 procedure cregretmessage (messageextension); 2 16798 value messageextension; 2 16799 integer messageextension; 2 16800 begin 3 16801 integer array field messbuf; 3 16802 messbuf:= messref(messageextension); 3 16803 mon(82) regret message :(0, 0, messbuf, 0); 3 16804 messref(messageextension):= 0; 3 16805 3 16805 3 16805 end; 2 16806 \f 2 16806 2 16806 message coroutinemonitor - 23 ; 2 16807 2 16807 2 16807 <***** semsendmessage ***** 2 16808 2 16808 this procedure sends the message 'mess' to 'receiver' and at the same time it 2 16809 defines a 'signalch(semaphore, operation, operationtype)' to be performed 2 16810 by the monitor, when the answer arrives. 2 16811 in case there are too few resources to send the message, the operation is 2 16812 returned immediately with the result field set to zero. *> 2 16813 2 16813 2 16813 procedure semsendmessage (receiver, mess, semaphore, operation, operationtype); 2 16814 value semaphore, operation, operationtype; 2 16815 real array receiver; 2 16816 integer array mess; 2 16817 integer semaphore, operation; 2 16818 boolean operationtype; 2 16819 begin 3 16820 integer array field op; 3 16821 integer messext; 3 16822 op:= operation; 3 16823 messref(maxmessext):= 0; 3 16824 messext:= 1; 3 16825 while messref(messext) <> 0 do messext:= messext + 1; 3 16826 if messext < maxmessext then 3 16827 begin 4 16828 messop(messext):= op; 4 16829 messcode(messext):=1; 4 16830 d.op(1):= semaphore; 4 16831 d.op.optype:= operationtype; 4 16832 mon(16) send message :(0, mess, 0, receiver); 4 16833 messref(messext):= monw2; 4 16834 end; 3 16835 3 16835 3 16835 if messext = maxmessext or messref(messext) = 0 <* no resources *> then 3 16836 begin <* return the operation immediately with result = 0 *> 4 16837 d.op(9):= 0; 4 16838 signalch(semaphore, op, operationtype); 4 16839 end; 3 16840 end; 2 16841 \f 2 16841 2 16841 message coroutinemonitor - 24 ; 2 16842 2 16842 2 16842 <***** semwaitmessage ***** 2 16843 2 16843 this procedure defines a 'signalch(semaphore, operation, operationtype)' to 2 16844 be performed by the coroutine monitor when a message arrives to the process 2 16845 corresponding to 'processextension'. *> 2 16846 2 16846 2 16846 procedure semwaitmessage (processextension, semaphore, operation, operationtype); 2 16847 value processextension, semaphore, operation, operationtype; 2 16848 integer processextension, semaphore, operation; 2 16849 boolean operationtype; 2 16850 begin 3 16851 integer array field op; 3 16852 op:= operation; 3 16853 procop(processextension):= operation; 3 16854 d.op(1):= semaphore; 3 16855 d.op.optype:= operationtype; 3 16856 proccode(processextension):= 1; 3 16857 3 16857 3 16857 end; 2 16858 \f 2 16858 2 16858 message coroutinemonitor - 25 ; 2 16859 2 16859 2 16859 <***** semregretmessage ***** 2 16860 2 16860 this procedure regrets a message sent by semsendmessage. 2 16861 the message is identified by the operation in which the answer should be 2 16862 returned. 2 16863 the procedure sets the result field of the operation to zero, and then 2 16864 returns it by performing a signalch. *> 2 16865 2 16865 2 16865 procedure semregretmessage (operation); 2 16866 value operation; 2 16867 integer operation; 2 16868 begin 3 16869 integer i, j; 3 16870 integer array field op, sem; 3 16871 op:= operation; 3 16872 i:= 1; 3 16873 while i < maxmessext do 3 16874 begin 4 16875 if messref(i) > 0 and (messcode(i) = 1 and messop(i) = op) then 4 16876 begin 5 16877 mon(82) regret message :(0, 0, messref(i), 0); 5 16878 messref(i):= 0; 5 16879 sem:= d.op(1); 5 16880 for j:=1 step 1 until 9 do d.op(j):= 0; 5 16881 signalch(sem, op, d.op.optype); 5 16882 i:= maxmessext; 5 16883 end; 4 16884 i:= i + 1; 4 16885 end; 3 16886 3 16886 3 16886 end; 2 16887 \f 2 16887 2 16887 message coroutinemonitor - 26 ; 2 16888 2 16888 2 16888 <***** link ***** 2 16889 2 16889 this procedure links an object (allocated in the descriptor array 'd') into 2 16890 a queue of alements (allocated in the descriptor array 'd'). the queues 2 16891 are all double chained, and the chainhead is of the same format as the chain 2 16892 fields of the objects. 2 16893 the procedure links the object immediately after the head. *> 2 16894 2 16894 2 16894 procedure link (object, chainhead); 2 16895 value object, chainhead; 2 16896 integer object, chainhead; 2 16897 begin 3 16898 integer array field prevelement, nextelement, chead, obj; 3 16899 obj:= object; 3 16900 chead:= chainhead; 3 16901 prevelement:= d.obj.prev; 3 16902 nextelement:= d.obj.next; 3 16903 d.prevelement.next:= nextelement; 3 16904 d.nextelement.prev:= prevelement; 3 16905 if chead > 0 then <* link into queue *> 3 16906 begin 4 16907 prevelement:= d.chead.prev; 4 16908 d.obj.prev:= prevelement; 4 16909 d.prevelement.next:= obj; 4 16910 d.obj.next:= chead; 4 16911 d.chead.prev:= obj; 4 16912 end else 3 16913 begin <* link onto itself *> 4 16914 d.obj.prev:= obj; 4 16915 d.obj.next:= obj; 4 16916 end; 3 16917 end; 2 16918 \f 2 16918 2 16918 message coroutinemonitor - 27 ; 2 16919 2 16919 2 16919 <***** linkprio ***** 2 16920 2 16920 this procedure is used to link coroutines into queues corresponding to 2 16921 the priorities of the actual coroutine and the queue elements. 2 16922 the object is linked immediately before the first coroutine of lower prio- 2 16923 rity. *> 2 16924 2 16924 2 16924 procedure linkprio (object, chainhead); 2 16925 value object, chainhead; 2 16926 integer object, chainhead; 2 16927 begin 3 16928 integer array field currelement, chead, obj; 3 16929 obj:= object; 3 16930 chead:= chainhead; 3 16931 currelement:= d.chead.next; 3 16932 while currelement <> chead 3 16933 and d.currelement.corupriority <= d.obj.corupriority 3 16934 do currelement:= d.currelement.next; 3 16935 link(obj, currelement); 3 16936 end; 2 16937 \f 2 16937 2 16937 message coroutinemonitor - 28 ; 2 16938 2 16938 \f 2 16938 2 16938 message coroutinemonitor - 30a ; 2 16939 2 16939 2 16939 <*************** extention to coroutine monitor procedures **********> 2 16940 2 16940 <***** signalbin ***** 2 16941 2 16941 this procedure simulates a binary semaphore on a simple semaphore 2 16942 by testing the value of the semaphore before signaling the 2 16943 semaphore. if the value of the semaphore is one (=open) nothing is 2 16944 done, otherwise a normal signal is carried out. *> 2 16945 2 16945 2 16945 procedure signalbin(semaphore); 2 16946 value semaphore; 2 16947 integer semaphore; 2 16948 begin 3 16949 integer array field sem; 3 16950 integer val; 3 16951 sem:= semaphore; 3 16952 inspect(sem,val); 3 16953 if val<1 then signal(sem); 3 16954 end; 2 16955 \f 2 16955 2 16955 message coroutinemonitor - 30b ; 2 16956 2 16956 <***** coruno ***** 2 16957 2 16957 delivers the coroutinenumber for a give coroutine id. 2 16958 if the coroutine does not exists the value 0 is delivered *> 2 16959 2 16959 integer procedure coru_no(coru_id); 2 16960 value coru_id; 2 16961 integer coru_id; 2 16962 begin 3 16963 integer array field cor; 3 16964 3 16964 coru_no:= 0; 3 16965 for cor:= firstcoru step corusize until (coruref-1) do 3 16966 if d.cor.coruident//1000 = coru_id then 3 16967 coru_no:= d.cor.coruident mod 1000; 3 16968 end; 2 16969 \f 2 16969 2 16969 message coroutinemonitor - 30c ; 2 16970 2 16970 <***** coroutine ***** 2 16971 2 16971 delivers the referencebyte for the coroutinedescriptor for 2 16972 a coroutine identified by coroutinenumber *> 2 16973 2 16973 integer procedure coroutine(cor_no); 2 16974 value cor_no; 2 16975 integer cor_no; 2 16976 coroutine:= if cor_no <= 0 or maxcoru < cor_no then -1 else 2 16977 firstcoru + (cor_no-1)*corusize; 2 16978 \f 2 16978 2 16978 message coroutinemonitor - 30d ; 2 16979 2 16979 <***** curr_coruno ***** 2 16980 2 16980 delivers number of calling coroutine 2 16981 curr_coruno: 2 16982 < 0 = -current_coroutine_number in disabled mode 2 16983 = 0 = procedure not called from coroutine 2 16984 > 0 = current_coroutine_number in enabled mode *> 2 16985 2 16985 integer procedure curr_coruno; 2 16986 begin 3 16987 integer i; 3 16988 integer array ia(1:12); 3 16989 3 16989 i:= system(12,0,ia); 3 16990 if i > 0 then 3 16991 begin 4 16992 i:= system(12,1,ia); 4 16993 curr_coruno:= ia(3); 4 16994 end else curr_coruno:= 0; 3 16995 end curr_coruno; 2 16996 \f 2 16996 2 16996 message coroutinemonitor - 30e ; 2 16997 2 16997 <***** curr_coruid ***** 2 16998 2 16998 delivers coruident of calling coroutine : 2 16999 2 16999 curr_coruid: 2 17000 > 0 = coruident of calling coroutine 2 17001 = 0 = procedure not called from coroutine *> 2 17002 2 17002 integer procedure curr_coruid; 2 17003 begin 3 17004 integer cor_no; 3 17005 integer array field cor; 3 17006 3 17006 cor_no:= abs curr_coruno; 3 17007 if cor_no <> 0 then 3 17008 begin 4 17009 cor:= coroutine(cor_no); 4 17010 curr_coruid:= d.cor.coruident // 1000; 4 17011 end 3 17012 else curr_coruid:= 0; 3 17013 end curr_coruid; 2 17014 \f 2 17014 message coroutinemonitor - 30f.1 ; 2 17015 2 17015 <**** getch ***** 2 17016 2 17016 this procedure searches the queue of operations waiting at 'semaphore' 2 17017 to find an operation that matches the operationstypeset and a set of 2 17018 select-values. each select value is specified by type and fieldvalue 2 17019 in integer array 'type' and by the value in integer array 'val'. 2 17020 2 17020 0: eq 0: not used 2 17021 1: lt 1: boolean 2 17022 2: le 2: integer 2 17023 3: gt 3: long 2 17024 4: ge 4: real 2 17025 5: ne 2 17026 *> 2 17027 2 17027 procedure getch(semaphore,operation,operationtypeset,type,val); 2 17028 value semaphore,operationtypeset; 2 17029 integer semaphore,operation; 2 17030 boolean operationtypeset; 2 17031 integer array type,val; 2 17032 begin 3 17033 integer array field firstop,currop; 3 17034 integer ø,n,i,f,t,rel,i1,i2; 3 17035 boolean field bf,bfval; 3 17036 integer field intf; 3 17037 long field lf,lfval; long l1,l2; 3 17038 real field rf,rfval; real r1,r2; 3 17039 3 17039 boolean match; 3 17040 3 17040 operation:= 0; 3 17041 n:= system(3,ø,type); 3 17042 match:= false; 3 17043 firstop:= semaphore + semop; 3 17044 currop:= d.firstop.next; 3 17045 while currop <> firstop and -,match do 3 17046 begin 4 17047 if (operationtypeset and d.currop.optype) extract 12 <> 0 then 4 17048 begin 5 17049 i:= n; 5 17050 match:= true; 5 17051 \f 5 17051 message coroutinemonitor - 30f.2 ; 5 17052 5 17052 while match and (if i <= ø then type(i) >= 0 else false) do 5 17053 begin 6 17054 rel:= type(i) shift(-18); 6 17055 t:= type(i) shift(-12) extract 6; 6 17056 f:= type(i) extract 12; 6 17057 if f > 2047 then f:= f -4096; 6 17058 case t+1 of 6 17059 begin 7 17060 ; <* not used *> 7 17061 7 17061 begin <*boolean or signed short integer*> 8 17062 bf:= f; 8 17063 bfval:= 2*i; 8 17064 i1:= d.currop.bf extract 12; 8 17065 if i1 > 2047 then i1:= i1-4096; 8 17066 i2:= val.bfval extract 12; 8 17067 if i2 > 2047 then i2:= i2-4096; 8 17068 match:= case rel+1 of (i1=i2,i1<i2,i1<=i2,i1>i2,i1>=i2,i1<>i2); 8 17069 end; 7 17070 7 17070 begin <*integer*> 8 17071 intf:= f; 8 17072 i1:= d.currop.intf; 8 17073 i2:= val(i); 8 17074 match:= case rel+1 of (i1=i2,i1<i2,i1<=i2,i1>i2,i1>=i2,i1<>i2); 8 17075 end; 7 17076 7 17076 begin <*long*> 8 17077 lf:= f; 8 17078 lfval:= i*2; 8 17079 l1:= d.currop.lf; 8 17080 l2:= val.lfval; 8 17081 match:= case rel+1 of (l1=l2,l1<l2,l1<=l2,l1>l2,l1>=l2,l1<>l2); 8 17082 end; 7 17083 7 17083 begin <*real*> 8 17084 rf:= f; 8 17085 rfval:= i*2; 8 17086 r1:= d.currop.rf; 8 17087 r2:= val.rfval; 8 17088 match:= case rel+1 of (r1=r2,r1<r2,r1<=r2,r1>r2,r1>=r2,r1<>r2); 8 17089 end; 7 17090 7 17090 end;<*case t+1*> 6 17091 6 17091 i:= i+1; 6 17092 end; <*while match and i<=ø and t>=0 *> 5 17093 \f 5 17093 message coroutinemonitor - 30f.3 ; 5 17094 5 17094 end; <* if operationtypeset and ---*> 4 17095 if -,match then currop:= d.currop.next; 4 17096 end; <*while currop <> firstop and -,match*> 3 17097 3 17097 if match then 3 17098 begin 4 17099 link(currop,0); 4 17100 d.current.coruop:= currop; 4 17101 operation:= currop; 4 17102 end; 3 17103 end getch; 2 17104 \f 2 17104 2 17104 message coroutinemonitor - 31 ; 2 17105 2 17105 activity(maxcoru); 2 17106 2 17106 goto initialization; 2 17107 2 17107 2 17107 2 17107 <*************** event handling ***************> 2 17108 2 17108 2 17108 2 17108 takeexternal: 2 17109 currevent:= baseevent; 2 17110 eventqueueempty:= false; 2 17111 repeat 2 17112 current:= 0; 2 17113 prevevent:= currevent; 2 17114 mon(66) test event :(0, 0, currevent, 0); 2 17115 currevent:= monw2; 2 17116 if monw0 < 0 <* no event *> then goto takeinternal; 2 17117 if monw0 = 1 and monw1 > 0 and monw1 <= maxcoru then 2 17118 cmi:= monw1 2 17119 else 2 17120 cmi:= - monw0; 2 17121 2 17121 if cmi > 0 then 2 17122 begin <* answer to activity zone *> 3 17123 current:= firstcoru + (cmi - 1) * corusize; 3 17124 linkprio(current, readyqueue); 3 17125 baseevent:= 0; 3 17126 end else 2 17127 2 17127 if cmi = 0 then 2 17128 begin <* message arrived *> 3 17129 \f 3 17129 3 17129 message coroutinemonitor - 32 ; 3 17130 3 17130 receiver:= core.currevent(3); 3 17131 if receiver < 0 then receiver:= - receiver; 3 17132 procref(maxprocext):= receiver; 3 17133 procext:= 1; 3 17134 while procref(procext) <> receiver do procext:= procext + 1; 3 17135 if procext = maxprocext then 3 17136 begin <* receiver unknown *> 4 17137 <* leave the message unchanged *> 4 17138 end else 3 17139 if proccode(procext) shift (-12) = 0 then 3 17140 begin <* the receiver is ready for accepting messages *> 4 17141 mon(26) get event :(0, 0, currevent, 0); 4 17142 case proccode(procext) of 4 17143 begin 5 17144 begin <* message received by semwaitmessage *> 6 17145 op:= procop(procext); 6 17146 sem:= d.op(1); 6 17147 for cmj:=1 step 1 until 8 do d.op(cmj):= core.currevent(4+cmj); 6 17148 d.op(9):= currevent; 6 17149 signalch(sem, op, d.op.optype); 6 17150 proccode(procext):= 1 shift 12; 6 17151 end; 5 17152 begin <* message received by cwaitmessage *> 6 17153 current:= procop(procext); 6 17154 procop(procext):= currevent; 6 17155 linkprio(current, readyqueue); 6 17156 link(current + corutimerchain, idlequeue); 6 17157 6 17157 6 17157 end; 5 17158 end; <* case *> 4 17159 currevent:= baseevent; 4 17160 proccode(procext):= 1 shift 12; 4 17161 end; 3 17162 end <* message *> else 2 17163 2 17163 if cmi = -1 then 2 17164 begin <* answer arrived *> 3 17165 \f 3 17165 3 17165 message coroutinemonitor - 33 ; 3 17166 3 17166 if currevent = timermessage then 3 17167 begin 4 17168 mon(26) get event :(0, 0, currevent, 0); 4 17169 coru:= d.timerqueue.next; 4 17170 while coru <> timerqueue do 4 17171 begin 5 17172 current:= coru - corutimerchain; 5 17173 d.current.corutimer:= d.current.corutimer - clockmess(2); 5 17174 coru:= d.coru.next; 5 17175 if d.current.corutimer <= 0 then 5 17176 begin <* timer perion expired *> 6 17177 d.current.corutimer:= -1; 6 17178 linkprio(current, readyqueue); 6 17179 link(current + corutimerchain, idlequeue); 6 17180 end; 5 17181 end; 4 17182 mon(16) send message :(0, clockmess, 0, clock); 4 17183 timermessage:= monw2; 4 17184 currevent:= baseevent; 4 17185 end <* timer answer *> else 3 17186 begin 4 17187 messref(maxmessext):= currevent; 4 17188 messext:= 1; 4 17189 while messref(messext) <> currevent do messext:= messext + 1; 4 17190 if messext = maxmessext then 4 17191 begin <* the answer is unknown *> 5 17192 <* leave the answer unchanged - it may belong to an activity *> 5 17193 end else 4 17194 if messcode(messext) shift (-12) = 0 then 4 17195 begin 5 17196 case messcode(messext) extract 12 of 5 17197 begin 6 17198 \f 6 17198 6 17198 message coroutinemonitor - 34 ; 6 17199 begin <* answer arrived after semsendmessage *> 7 17200 op:= messop(messext); 7 17201 sem:= d.op(1); 7 17202 mon(18) wait answer :(0, d.op, currevent, 0); 7 17203 d.op(9):= monw0; 7 17204 signalch(sem, op, d.op.optype); 7 17205 messref(messext):= 0; 7 17206 baseevent:= 0; 7 17207 end; 6 17208 begin <* answer arrived after csendmessage *> 7 17209 current:= messop(messext); 7 17210 linkprio(current, readyqueue); 7 17211 link(current + corutimerchain, idlequeue); 7 17212 7 17212 7 17212 end; 6 17213 end; 5 17214 end else baseevent:= currevent; 4 17215 end; 3 17216 end; 2 17217 until eventqueueempty; 2 17218 \f 2 17218 2 17218 message coroutinemonitor - 35 ; 2 17219 2 17219 2 17219 2 17219 <*************** coroutine activation ***************> 2 17220 2 17220 takeinternal: 2 17221 2 17221 current:= d.readyqueue.next; 2 17222 if current = readyqueue then 2 17223 begin 3 17224 mon(24) wait event :(0, 0, prevevent, 0); 3 17225 goto takeexternal; 3 17226 end; 2 17227 2 17227 <*+2*> if testbit30 and d.current.corutestmask shift(-11) then 2 17228 <**> begin 3 17229 <**> systime(5,0,r); 3 17230 <**> write(out,"nl",1,<<zd dd dd>,r,<: coroutine: :>,<<dd>, 3 17231 <**> d.current.coruident mod 1000,<: ident: :>,<<ddd>, 3 17232 <**> d.current.coruident//1000,<: aktiveres:>); 3 17233 <**> end; 2 17234 <*-2*> 2 17235 2 17235 corustate:= activate(d.current.coruident mod 1000); 2 17236 cmi:= corustate extract 24; 2 17237 <*+2*> if testbit30 and d.current.corutestmask shift(-11) then 2 17238 <**> begin 3 17239 <**> systime(5,0,r); 3 17240 <**> write(out,"nl",1,<<zd dd dd>,r,<: coroutine: :>,<<dd>, 3 17241 <**> d.current.coruident mod 1000,<: ident: :>,<<ddd>, 3 17242 <**> d.current.coruident//1000,<: afbrudt, årsag=:>,cmi); 3 17243 <**> end; 2 17244 <*-2*> 2 17245 2 17245 if cmi = 1 then 2 17246 begin <* programmed passivate *> 3 17247 goto takeexternal; 3 17248 end; 2 17249 2 17249 if cmi = 2 then 2 17250 begin <* implicit passivate in activity *> 3 17251 3 17251 3 17251 link(current, idlequeue); 3 17252 goto takeexternal; 3 17253 end; 2 17254 \f 2 17254 2 17254 message coroutinemonitor - 36 ; 2 17255 2 17255 <* coroutine termination (normal or abnormal) *> 2 17256 2 17256 <* aktioner ved normal og unormal coroutineterminering insættes her *> 2 17257 coru_term: 2 17258 2 17258 begin 3 17259 if false and alarmcause extract 24 = (-9) <* break *> and 3 17260 alarmcause shift (-24) extract 24 = 0 then 3 17261 begin 4 17262 endaction:= 2; 4 17263 goto program_slut; 4 17264 end; 3 17265 if alarmcause extract 24 = (-9) <* break *> and 3 17266 alarmcause shift (-24) = 8 <* parent *> 3 17267 then sæt_bit_i(trapmode,15<*killed activities*>,0<*normal output*>); 3 17268 if alarmcause shift (-24) extract 24 <> -2 or 3 17269 alarmcause extract 24 <> -13 then 3 17270 begin 4 17271 write(zbillede,"nl",1,<:alarmcause(param,cause)=:>,<<d>, 4 17272 alarmcause shift (-24),<:,:>, 4 17273 alarmcause extract 24); 4 17274 for i:=1 step 1 until max_coru do 4 17275 j:=activate(-i); <* kill *> 4 17276 <* skriv billede *> 4 17277 end 3 17278 else 3 17279 begin 4 17280 errorbits:= 0; <* ok.yes warning.no *> 4 17281 goto finale; 4 17282 end; 3 17283 end; 2 17284 2 17284 goto dump; 2 17285 2 17285 link(current, idlequeue); 2 17286 goto takeexternal; 2 17287 \f 2 17287 2 17287 message coroutinemonitor - 37 ; 2 17288 2 17288 2 17288 2 17288 initialization: 2 17289 2 17289 2 17289 <*************** initialization ***************> 2 17290 2 17290 <* chain head *> 2 17291 2 17291 prev:= -2; <* -2 prev *> 2 17292 next:= 0; <* +0 next *> 2 17293 2 17293 <* corutine descriptor *> 2 17294 2 17294 <* -2 prev *> 2 17295 <* +0 next *> 2 17296 <* +2 (link field) *> 2 17297 corutimerchain:= next + 4; <* +4 corutimerchain *> 2 17298 <* +6 (link field) *> 2 17299 coruop:= corutimerchain + 4; <* +8 coruop *> 2 17300 corutimer:= coruop + 2; <*+10 corutimer *> 2 17301 coruident:= corutimer + 2; <*+12 coruident *> 2 17302 corupriority:= coruident + 2; <*+14 corupriority *> 2 17303 corutypeset:= corupriority + 1; <*+15 corutypeset *> 2 17304 corutestmask:= corutypeset + 1; <*+16 corutestmask *> 2 17305 2 17305 <* simple semaphore *> 2 17306 2 17306 <* -2 (link field) *> 2 17307 simcoru:= next; <* +0 simcoru *> 2 17308 simvalue:= simcoru + 2; <* +2 simvalue *> 2 17309 2 17309 <* chained semaphore *> 2 17310 2 17310 <* -2 (link field) *> 2 17311 semcoru:= next; <* +0 semcoru *> 2 17312 <* +2 (link field) *> 2 17313 semop:= semcoru + 4; <* +4 semop *> 2 17314 \f 2 17314 2 17314 message coroutinemonitor - 38 ; 2 17315 2 17315 <* operation *> 2 17316 2 17316 opsize:= next - 6; <* -6 opsize *> 2 17317 optype:= opsize + 1; <* -5 optype *> 2 17318 <* -2 prev *> 2 17319 <* +0 next *> 2 17320 <* +2 operation(1) *> 2 17321 <* +4 operation(2) *> 2 17322 <* +6 - *> 2 17323 <* . - *> 2 17324 <* . - *> 2 17325 2 17325 \f 2 17325 2 17325 message coroutinemonitor - 39 ; 2 17326 2 17326 trap(dump); 2 17327 systime(1, 0, starttime); 2 17328 for cmi:= 1 step 1 until maxmessext do messref(cmi):= 0; 2 17329 clockmess(1):= 0; 2 17330 clockmess(2):= timeinterval; 2 17331 clock(1):= real <:clock:>; 2 17332 clock(2):= real <::>; 2 17333 mon(16) send message :(0, clockmess, 0, clock); 2 17334 timermessage:= monw2; 2 17335 readyqueue:= 4; 2 17336 initchain(readyqueue); 2 17337 idlequeue:= readyqueue + 4; 2 17338 initchain(idlequeue); 2 17339 timerqueue:= idlequeue + 4; 2 17340 initchain(timerqueue); 2 17341 current:= 0; 2 17342 corucount:= 0; 2 17343 proccount:= 0; 2 17344 baseevent:= 0; 2 17345 coruref:= timerqueue + 4; 2 17346 firstcoru:= coruref; 2 17347 simref:= coruref + maxcoru * corusize; 2 17348 firstsim:= simref; 2 17349 semref:= simref + maxsem * simsize; 2 17350 firstsem:= semref; 2 17351 opref:= semref + maxsemch * semsize + 4; 2 17352 firstop:= opref; 2 17353 optop:= opref + maxop * opheadsize + maxnettoop - 6; 2 17354 for cmi:= coruref step 2 until optop - 2 do d(cmi/2):= 0; 2 17355 reflectcore(core); 2 17356 2 17356 algol list.on; 2 17357 2 17357 \f 2 17357 message sys_initialisering side 1 - 810601/hko; 2 17358 2 17358 trapmode:= 1 shift 15; 2 17359 errorbits:= 1; <* warning.no ok.no *> 2 17360 trap(coru_term); 2 17361 2 17361 open(zbillede,4,<:billede:>,0); 2 17362 write(zbillede,"ff",1,"nl",2,<:********** billede for kørsel startet :>, 2 17363 <<zddddd>,systime(5,0,r),".",1,r,<: **********:>,"nl",1); 2 17364 system(2,0,ia); 2 17365 open(zdummy,4,ia,0); close(zdummy,false); 2 17366 monitor(42,zdummy,0,ia); 2 17367 laf:= 0; 2 17368 write(zbillede,"nl",1,<:prog.vers. :>,<<dddddd.dddd>, 2 17369 systime(6,ia(6),r)+r/1000000,"nl",2, 2 17370 <:konsolnavn: :>,konsol_navn.laf,"nl",1); 2 17371 2 17371 open(zrl,4,<:radiolog:>,0); 2 17372 if monitor(42)lookup_entry:(zrl,0,ia)<>0 or 2 17373 monitor(52)create_areaproc:(zrl,0,ia)<>0 or 2 17374 monitor(8)reserve_process:(zrl,0,ia)<>0 then 2 17375 begin 3 17376 ia(1):=1; ia(2):= 3; 3 17377 for i:= 3 step 1 until 10 do ia(i):= 0; 3 17378 monitor(40)create_area:(zrl,0,ia); 3 17379 end; 2 17380 2 17380 for i:=1 step 1 until max_antal_fejltekster do 2 17381 fejltekst(i):= real (case i of ( 2 17382 <* 1*><:filsystem:>, 2 17383 <* 2*><:operationskode:>, 2 17384 <* 3*><:programfejl:>, 2 17385 <* 4*><:monitor<'_'>resultat=:>, 2 17386 <* 5*><:læs<'_'>fil:>, 2 17387 <* 6*><:skriv<'_'>fil:>, 2 17388 <* 7*><:modif<'_'>fil:>, 2 17389 <* 8*><:hent<'_'>fil<'_'>dim:>, 2 17390 <* 9*><:sæt<'_'>fil<'_'>dim:>, 2 17391 <*10*><:vogntabel:>, 2 17392 <*11*><:fremmed operation:>, 2 17393 <*12*><:operationstype:>, 2 17394 <*13*><:opret<'_'>fil:>, 2 17395 <*14*><:tilknyt<'_'>fil:>, 2 17396 <*15*><:frigiv<'_'>fil:>, 2 17397 <*16*><:slet<'_'>fil:>, 2 17398 <*17*><:ydre enhed, status=:>, 2 17399 <*18*><:tabelfil:>, 2 17400 <*19*><:radio:>, 2 17401 <*20*><:mobilopkald, bus:>, 2 17402 <*21*><:talevejsswitch:>, 2 17403 <*99*><:ftslut:>)); 2 17404 2 17404 for i:= 1 step 1 until max_antal_områder do 2 17405 begin 3 17406 område_navn(i):= long (case i of 3 17407 (<:TLF:>,<:VHF:>,<:KBH:>,<:RO:>,<:FS:>,<:HHL:>,<:GLX:>, 3 17408 <:KJ:>,<:HI:>,<:HG:>,<:BA:>) ); 3 17409 område_id(i,1):= område_navn(i) shift (-24) extract 24; 3 17410 område_id(i,2):= 3 17411 (case i of ( 2, 3, 13, 3, 3, 3, 3, 3, 3, 3, 3)) shift 6 add 3 17412 (case i of ( 2, 5, 2, 9, 10, 11, 12, 13, 14, 15, 16)); 3 17413 end; 2 17414 2 17414 pabx_id(1):= -1; 2 17415 pabx_id(2):= 1; 2 17416 2 17416 for i:= 1 step 1 until max_antal_radiokanaler do 2 17417 begin 3 17418 radio_id(i):= 3 17419 case i of ( 3, 3, 3, 3, 2, -1, -1, -1, 4, 5, 6, 7, 8, 9, 10, 11); 3 17420 end; 2 17421 2 17421 for i:=1 step 1 until max_antal_kanaler do 2 17422 begin 3 17423 kanal_navn(i):= long (case i of ( 3 17424 <:K1:>,<:K2:>,<:K3:>,<:K4:>,<:K5:>,<:K9:>,<:K10:>,<:K11:>,<:K12:>, 3 17425 <:K13:>,<:K14:>,<:K15:>,<:K16:>,<:L4190:>) ); 3 17426 kanal_id(i):= 3 17427 (case i of ( 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2)) shift 5 + 3 17428 (case i of ( 2, 3, 4, 1, 5, 9,10,11,12,13,14,15,16, 2)); 3 17429 end; 2 17430 2 17430 for i:= 1 step 1 until op_maske_lgd//2 do 2 17431 ingen_operatører(i):= alle_operatører(i):= 0; 2 17432 for i:= 1 step 1 until tv_maske_lgd//2 do 2 17433 ingen_taleveje(i):= alle_taleveje(i):= 0; 2 17434 2 17434 begin 3 17435 long array navn(1:2); 3 17436 long array field doc, ref; 3 17437 3 17437 doc:= 2; iaf:= 0; 3 17438 movestring(navn,1,<:terminal0:>); 3 17439 for i:= 1 step 1 until max_antal_operatører do 3 17440 begin 4 17441 ref:=(i-1)*8; k:=9; 4 17442 if i>9 then skrivtegn(navn.iaf, k, '0' + i//10); 4 17443 skrivtegn(navn.iaf,k,'0'+ i mod 10); 4 17444 open(zdummy,8,navn,0); close(zdummy,true); 4 17445 k:= monitor(42,zdummy,0,ia); 4 17446 if k=0 then tofrom(terminal_navn.ref,ia.doc,8) 4 17447 else tofrom(terminal_navn.ref,navn,8); 4 17448 operatør_auto_include(i):= false; 4 17449 sætbit_ia(alle_operatører,i,1); 4 17450 end; 3 17451 3 17451 movestring(navn,1,<:garage0:>); 3 17452 for i:= 1 step 1 until max_antal_garageterminaler do 3 17453 begin 4 17454 ref:=(i-1)*8; k:=7; 4 17455 if i>9 then skrivtegn(navn.iaf, k, '0' + i//10); 4 17456 skrivtegn(navn.iaf,k,'0'+ i mod 10); 4 17457 open(zdummy,8,navn,0); close(zdummy,true); 4 17458 k:= monitor(42,zdummy,0,ia); 4 17459 if k=0 then tofrom(garage_terminal_navn.ref,ia.doc,8) 4 17460 else tofrom(garage_terminal_navn.ref,navn,8); 4 17461 garage_auto_include(i):= false; 4 17462 end; 3 17463 end; 2 17464 2 17464 for i:= 1 step 1 until max_antal_taleveje do 2 17465 sætbit_ia(alle_taleveje,i,1); 2 17466 for i:= 1 step 1 until findfpparam(<:operatør:>,true,ia) do 2 17467 if 1<=ia(i) and ia(i)<=max_antal_operatører then 2 17468 operatør_auto_include(ia(i)):= true; 2 17469 for i:= 1 step 1 until findfpparam(<:garage:>,true,ia) do 2 17470 if 1<=ia(i) and ia(i)<=max_antal_garageterminaler then 2 17471 garage_auto_include(ia(i)):= true; 2 17472 2 17472 2 17472 \f 2 17472 message fil_init side 1 - 801030/jg; 2 17473 2 17473 begin integer i,antz,tz,s; 3 17474 real array field raf; 3 17475 3 17475 filskrevet:=fillæst:=0; <*fil*> 3 17476 dbsegmax:= 2**18-1; 3 17477 3 17477 tz:=dbantez+dbantsz; antz:=tz+dbanttz; 3 17478 for i:=1 step 1 until dbantez do 3 17479 begin open(fil(i),4,<::>,0); close(fil(i),false) end; 3 17480 for i:=dbantez+1 step 1 until tz do 3 17481 open(fil(i),4,dbsnavn,0); 3 17482 for i:=tz+1 step 1 until antz do 3 17483 open(fil(i),4,dbtnavn,0); 3 17484 3 17484 for i:=1 step 1 until dbantez do <*dbkatz*> 3 17485 dbkatz(i,1):=dbkatz(i,2):=0; 3 17486 for i:=dbantez+1 step 1 until tz do 3 17487 begin dbkatz(i,1):=2 shift 10;dbkatz(i,2):=0 end; 3 17488 for i:=tz+1 step 1 until antz do 3 17489 begin dbkatz(i,1):=1 shift 10;dbkatz(i,2):=i+1 end; 3 17490 dbkatz(antz,2):=tz+1; 3 17491 dbsidstetz:=antz; 3 17492 dbsidstesz:=tz; 3 17493 3 17493 for i:=1 step 1 until dbmaxef do <*dbkate*> 3 17494 begin integer j; 4 17495 for j:=1,3 step 1 until 6 do 4 17496 dbkate(i,j):=0; 4 17497 dbkate(i,2):=i+1; 4 17498 end; 3 17499 dbkate(dbmaxef,2):=0; 3 17500 dbkatefri:=1; 3 17501 dbantef:=0; 3 17502 \f 3 17502 message fil_init side 2 - 801030/jg; 3 17503 3 17503 3 17503 for i:= 1 step 1 until dbmaxsf do <*dbkats*> 3 17504 begin 4 17505 dbkats(i,1):=0; 4 17506 dbkats(i,2):=i+1; 4 17507 end; 3 17508 dbkats(dbmaxsf,2):=0; 3 17509 dbkatsfri:=1; 3 17510 dbantsf:=0; 3 17511 3 17511 for i:=1 step 1 until dbmaxb do <*dbkatb*> 3 17512 dbkatb(i):=false add (i+1); 3 17513 dbkatb(dbmaxb):=false; 3 17514 dbkatbfri:=1; 3 17515 dbantb:=0; 3 17516 raf:=4; 3 17517 for i:=1 step 1 until dbmaxtf do 3 17518 begin 4 17519 inrec6(fil(antz),4); 4 17520 dbkatt.raf(i):=fil(antz,1); 4 17521 end; 3 17522 inrec6(fil(antz),4); 3 17523 if fil(antz,1)<>real extend 8388607 shift 24 add 8388607 then 3 17524 fejl_reaktion(1,dbmaxtf,<:tabelfil init:>,0); 3 17525 setposition(fil(antz),0,0); 3 17526 3 17526 end filsystem; 2 17527 \f 2 17527 message fil_init side 3 - 810209/cl; 2 17528 2 17528 bs_kats_fri:= nextsem; 2 17529 <*+3*> skriv_new_sem(out,1,bs_kats_fri,<:bs-kats-fri:>); 2 17530 <*-3*> 2 17531 bs_kate_fri:= nextsem; 2 17532 <*+3*> skriv_new_sem(out,1,bs_kate_fri,<:bs-kate-fri:>); 2 17533 <*-3*> 2 17534 cs_opret_fil:= nextsemch; 2 17535 <*+3*> skriv_new_sem(out,3,cs_opret_fil,<:cs-opret-fil:>); 2 17536 <*-3*> 2 17537 cs_tilknyt_fil:= nextsemch; 2 17538 <*+3*> skriv_new_sem(out,3,cs_tilknyt_fil,<:cs-tilknyt-fil:>); 2 17539 <*-3*> 2 17540 cs_frigiv_fil:= nextsemch; 2 17541 <*+3*> skriv_new_sem(out,3,cs_frigiv_fil,<:cs-frigiv-fil:>); 2 17542 <*-3*> 2 17543 cs_slet_fil:= nextsemch; 2 17544 <*+3*> skriv_new_sem(out,3,cs_slet_fil,<:cs-slet-fil:>); 2 17545 <*-3*> 2 17546 cs_opret_spoolfil:= nextsemch; 2 17547 <*+3*> skriv_new_sem(out,3,cs_opret_spoolfil,<:cs-opret-spoolfil:>); 2 17548 <*-3*> 2 17549 cs_opret_eksternfil:= nextsemch; 2 17550 <*+3*> skriv_new_sem(out,3,cs_opret_eksternfil,<:cs-opret-ekst-fil:>); 2 17551 <*-3*> 2 17552 \f 2 17552 message fil_init side 4 810209/cl; 2 17553 2 17553 2 17553 <* initialisering af filsystemcoroutiner *> 2 17554 2 17554 i:= nextcoru(001,10,true); 2 17555 j:= newactivity(i,0,opretfil); 2 17556 <*+3*> skriv_newactivity(out,i,j); 2 17557 <*-3*> 2 17558 2 17558 i:= nextcoru(002,10,true); 2 17559 j:= newactivity(i,0,tilknytfil); 2 17560 <*+3*> skriv_newactivity(out,i,j); 2 17561 <*-3*> 2 17562 2 17562 i:= nextcoru(003,10,true); 2 17563 j:= newactivity(i,0,frigivfil); 2 17564 <*+3*> skriv_newactivity(out,i,j); 2 17565 <*-3*> 2 17566 2 17566 i:= nextcoru(004,10,true); 2 17567 j:= newactivity(i,0,sletfil); 2 17568 <*+3*> skriv_newactivity(out,i,j); 2 17569 <*-3*> 2 17570 2 17570 i:= nextcoru(005,10,true); 2 17571 j:= newactivity(i,0,opretspoolfil); 2 17572 <*+3*> skriv_newactivity(out,i,j); 2 17573 <*-3*> 2 17574 2 17574 i:= nextcoru(006,10,true); 2 17575 j:= newactivity(i,0,opreteksternfil); 2 17576 <*+3*> skriv_newactivity(out,i,j); 2 17577 <*-3*> 2 17578 \f 2 17578 message attention_initialisering side 1 - 850820/cl; 2 17579 2 17579 tf_kommandotabel:= 1 shift 10 + 1; 2 17580 2 17580 begin 3 17581 integer i, s, zno; 3 17582 zone z(128,1,stderror); 3 17583 integer array fdim(1:8); 3 17584 3 17584 fdim(4):= tf_kommandotabel; 3 17585 hentfildim(fdim); 3 17586 3 17586 open(z,4,<:htkommando:>,0); 3 17587 for i:= 1 step 1 until fdim(3) do 3 17588 begin 4 17589 inrec6(z,512); 4 17590 s:= skrivfil(tf_kommandotabel,i,zno); 4 17591 if s<>0 then fejlreaktion(6,s,<:kommandotabelinit:>,0); 4 17592 tofrom(fil(zno),z,512); 4 17593 end; 3 17594 close(z,true); 3 17595 end; 2 17596 \f 2 17596 message attention_initialisering side 1a - 810428/hko; 2 17597 2 17597 for j:= system(3,i,terminal_tab) step 1 until i do 2 17598 terminal_tab(j):= 0; 2 17599 2 17599 cs_att_pulje:=next_semch; 2 17600 <*+3*> skriv_new_sem(out,3,cs_att_pulje,<:cs-att-pulje:>); 2 17601 <*-3*> 2 17602 2 17602 bs_fortsæt_adgang:= nextsem; 2 17603 <*+3*> skriv_new_sem(out,1,bs_fortsæt_adgang,<:bs-fortsæt-adgang:>); 2 17604 <*-3*> 2 17605 signalbin(bs_fortsæt_adgang); 2 17606 2 17606 for i:= 1, 2 17607 1 step 1 until max_antal_operatører, 2 17608 1 step 1 until max_antal_garageterminaler do 2 17609 2 17609 <* initialisering af pulje med attention_operationer *> 2 17610 2 17610 signalch(cs_att_pulje, <* pulje_semafor *> 2 17611 nextop(data+att_op_længde), <* næste_operation *> 2 17612 gen_optype); 2 17613 2 17613 att_proc_ref:=next_proc_ext(system(6<* own process*>,i,ra)); 2 17614 2 17614 i:=next_coru(010,<*ident*> 2 17615 2,<*prioritet*> 2 17616 true<*test_maske*>); 2 17617 j:=newactivity( i, <*activityno *> 2 17618 0, <*ikke virtual *> 2 17619 attention);<*ingen parametre*> 2 17620 2 17620 <*+3*>skriv_newactivity(out,i,j); 2 17621 <*-3*> 2 17622 \f 2 17622 message io_initialisering side 1 - 810507/hko; 2 17623 2 17623 io_spoolfil:= 1028; 2 17624 begin 3 17625 integer array fdim(1:8); 3 17626 fdim(4):= io_spoolfil; 3 17627 hent_fildim(fdim); 3 17628 io_spool_postantal:= fdim(1); 3 17629 io_spool_postlængde:= fdim(2); 3 17630 end; 2 17631 2 17631 io_spool_post:= 4; 2 17632 2 17632 cs_io:= next_semch; 2 17633 <*+3*> skriv_new_sem(out,3,cs_io,<:cs-io:>); 2 17634 <*-3*> 2 17635 2 17635 i:= next_coru(100,<*ident *> 2 17636 5,<*prioritet *> 2 17637 true<*test_maske*>); 2 17638 2 17638 j:= new_activity( i, 2 17639 0, 2 17640 h_io); 2 17641 2 17641 <*+3*>skriv_newactivity(out,i,j); 2 17642 <*-3*> 2 17643 cs_io_komm:= next_semch; 2 17644 <*+3*> skriv_new_sem(out,3,cs_io_komm,<:cs-io-komm:>); 2 17645 <*-3*> 2 17646 2 17646 i:= next_coru(101,<*ident*> 2 17647 10,<*prioritet*> 2 17648 true <*testmaske*>); 2 17649 j:= new_activity( i, 2 17650 0, 2 17651 io_komm);<*ingen parametre*> 2 17652 2 17652 <*+3*>skriv_newactivity(out,i,j); 2 17653 <*-3*> 2 17654 \f 2 17654 message io_initialisering side 2 - 810520/hko/cl; 2 17655 2 17655 bs_zio_adgang:= next_sem; 2 17656 <*+3*> skriv_new_sem(out,1,bs_zio_adgang,<:bs-zio-adgang:>); 2 17657 <*-3*> 2 17658 signal_bin(bs_zio_adgang); 2 17659 2 17659 cs_io_spool:= next_semch; 2 17660 <*+3*> skriv_new_sem(out,3,cs_io_spool,<:cs-io-spool:>); 2 17661 <*-3*> 2 17662 2 17662 cs_io_fil:=next_semch; 2 17663 <*+3*> skriv_new_sem(out,3,cs_io_fil,<:cs-io-fil:>); 2 17664 <*-3*> 2 17665 signal_ch(cs_io_fil,next_op(data+18),gen_optype); 2 17666 2 17666 ss_io_spool_fulde:= next_sem; 2 17667 <*+3*> skriv_new_sem(out,2,ss_io_spool_fulde,<:ss-io-spool-fulde:>); 2 17668 <*-3*> 2 17669 2 17669 ss_io_spool_tomme:= next_sem; 2 17670 <*+3*> skriv_new_sem(out,2,ss_io_spool_tomme,<:ss-io-spool-tomme:>); 2 17671 <*-3*> 2 17672 for i:= 1 step 1 until io_spool_postantal do 2 17673 signal(ss_io_spool_tomme); 2 17674 \f 2 17674 message io_initialisering side 3 - 880901/cl; 2 17675 2 17675 i:= next_coru(102, 2 17676 5, 2 17677 true); 2 17678 j:= new_activity(i,0,io_spool); 2 17679 2 17679 <*+3*>skriv_newactivity(out,i,j); 2 17680 <*-3*> 2 17681 2 17681 i:= next_coru(103, 2 17682 10, 2 17683 true); 2 17684 j:= new_activity(i,0,io_spon); 2 17685 2 17685 <*+3*>skriv_newactivity(out,i,j); 2 17686 <*-3*> 2 17687 2 17687 cs_io_medd:= next_semch; 2 17688 <*+3*> skriv_new_sem(out,3,cs_io_medd,<:cs-io-medd:>); 2 17689 <*-3*> 2 17690 2 17690 i:= next_coru(104,<*ident *> 2 17691 10,<*prioritet *> 2 17692 true<*test_maske*>); 2 17693 2 17693 j:= new_activity( i, 2 17694 0, 2 17695 io_medd); 2 17696 2 17696 <*+3*>skriv_newactivity(out,i,j); 2 17697 <*-3*> 2 17698 2 17698 cs_io_nulstil:= next_semch; 2 17699 <*+3*> skriv_new_sem(out,3,cs_io_nulstil,<:cs-io-nulstil:>); 2 17700 <*-3*> 2 17701 2 17701 i:= next_coru(105,<*ident *> 2 17702 10,<*prioritet *> 2 17703 true<*test_maske*>); 2 17704 2 17704 j:= new_activity( i, 2 17705 0, 2 17706 io_nulstil_tællere); 2 17707 2 17707 <*+3*>skriv_newactivity(out,i,j); 2 17708 <*-3*> 2 17709 2 17709 open(z_io,8,konsol_navn,1 shift 21 + 1 shift 9); 2 17710 i:= monitor(8)reserve process:(z_io,0,ia); 2 17711 if i <> 0 then 2 17712 begin 3 17713 fejlreaktion(4<*monitor result*>,+i,<:io reservation:>,0); 3 17714 end 2 17715 else 2 17716 begin 3 17717 ref:= 0; 3 17718 terminal_tab.ref.terminal_tilstand:= 0; 3 17719 write(z_io,"nl",3,"sp",10,"*",15,<: busradio startet :>, 3 17720 <<zddddd>,systime(5,0.0,r),".",1,r, 3 17721 "sp",1,"*",15,"nl",1); 3 17722 setposition(z_io,0,0); 3 17723 end; 2 17724 \f 2 17724 message operatør_initialisering side 1 - 810520/hko; 2 17725 2 17725 top_bpl_gruppe:= 64; 2 17726 2 17726 bpl_navn(0):= long<::>; 2 17727 for i:= 1 step 1 until 127 do 2 17728 begin 3 17729 k:= læsfil(tf_bpl_navne,i,j); 3 17730 if k<>0 then fejlreaktion(5,k,<:bplnavne init:>,0); 3 17731 bpl_navn(i):= (long fil(j,1)) shift (-8) shift 8; 3 17732 if i<=max_antal_operatører then 3 17733 operatør_auto_include(i):= false add (fil(j,1) extract 8); 3 17734 if i>64 and fil(j,1)<>real<::> and i>top_bpl_gruppe then 3 17735 top_bpl_gruppe:= i; 3 17736 end; 2 17737 2 17737 for i:= 0 step 1 until 64 do 2 17738 begin 3 17739 iaf:= i*op_maske_lgd; 3 17740 tofrom(bpl_def.iaf,ingen_operatører,op_maske_lgd); 3 17741 bpl_tilst(i,1):= bpl_tilst(i,2):= 0; 3 17742 if 1<=i and i<= max_antal_operatører then 3 17743 begin 4 17744 bpl_tilst(i,2):= 1; 4 17745 sætbit_ia(bpl_def.iaf,i,1); 4 17746 end; 3 17747 end; 2 17748 for i:= 65 step 1 until 127 do 2 17749 begin 3 17750 k:= læsfil(tf_bpl_def,i-64,j); 3 17751 if k<>0 then fejlreaktion(5,k,<:bpldef init:>,0); 3 17752 iaf:= i*op_maske_lgd; 3 17753 tofrom(bpl_def.iaf,fil(j),op_maske_lgd); 3 17754 bpl_tilst(i,1):= 0; 3 17755 bpl_tilst(i,2):= fil(j,2) extract 24; 3 17756 end; 2 17757 2 17757 for k:= 0,1,2,3 do operatør_stop(0,k):= 0; 2 17758 iaf:= 0; 2 17759 for i:= 1 step 1 until max_antal_operatører do 2 17760 begin 3 17761 k:= læsfil(tf_stoptabel,i,j); 3 17762 if k<>0 then fejlreaktion(5,k,<:stoptabel init:>,0); 3 17763 operatør_stop(i,0):= i; 3 17764 for k:= 1,2,3 do 3 17765 operatør_stop(i,k):= fil(j).iaf(k+1); 3 17766 ant_i_opkø(i):= 0; 3 17767 end; 2 17768 2 17768 tofrom(operatørmaske,ingen_operatører,op_maske_lgd); 2 17769 for i:= 0 step 1 until max_antal_operatører do op_talevej(i):= 0; 2 17770 for i:= 0 step 1 until max_antal_taleveje do tv_operatør(i):= 0; 2 17771 sidste_tv_brugt:= max_antal_taleveje; 2 17772 2 17772 for i:= 1 step 1 until max_antal_operatører*(opk_alarm_tab_lgd//2) do 2 17773 opk_alarm(i):= 0; 2 17774 for i:= 1 step 1 until max_antal_operatører do 2 17775 begin 3 17776 integer array field tab; 3 17777 3 17777 k:= læsfil(tf_alarmlgd,i,j); 3 17778 if k<>0 then fejlreaktion(5,k,<:alarmlængde init:>,0); 3 17779 tab:= (i-1)*opk_alarm_tab_lgd; 3 17780 opk_alarm.tab.alarm_lgd:= fil(j).iaf(1); 3 17781 opk_alarm.tab.alarm_start:= 0.0; 3 17782 end; 2 17783 2 17783 op_spool_kilde:= 2; 2 17784 op_spool_tid := 6; 2 17785 op_spool_text := 6; 2 17786 begin 3 17787 long array field laf1, laf2; 3 17788 laf2:= 4; laf1:= 0; 3 17789 op_spool_buf.laf1(1):= long<::>; 3 17790 tofrom(op_spool_buf.laf2,op_spool_buf.laf1, 3 17791 op_spool_postantal*op_spool_postlgd-4); 3 17792 end; 2 17793 2 17793 k:=læsfil(1033,1,j); 2 17794 systime(1,0.0,r); 2 17795 if k<>0 then fejlreaktion(5,k,<:CQF-tabel init:>,0); 2 17796 for i:= 1 step 1 until max_cqf do 2 17797 begin 3 17798 ref:= (i-1)*cqf_lgd; iaf:= (i-1)*8; 3 17799 tofrom(cqf_tabel.ref,fil(j).iaf,8); 3 17800 cqf_tabel.ref.cqf_næste_tid:= 3 17801 (if cqf_tabel.ref.cqf_bus > 0 then (r + 5*60.0) else real<::>); 3 17802 cqf_tabel.ref.cqf_ok_tid:= real<::>; 3 17803 end; 2 17804 op_cqf_tab_ændret:= true; 2 17805 2 17805 laf:= raf:= 0; 2 17806 open(z_tv_in,8,taleswitch_in_navn,1 shift 21 + 1 shift 9); 2 17807 i:= monitor(8)reserve_process:(z_tv_in,0,ia); 2 17808 j:= 1; 2 17809 if i<>0 then 2 17810 fejlreaktion(4,i,string taleswitch_in_navn.raf(increase(j)),1); 2 17811 open(z_tv_out,4 shift 12 + 8,taleswitch_out_navn,1 shift 9); 2 17812 i:= monitor(8)reserve_process:(z_tv_in,0,ia); 2 17813 j:= 1; 2 17814 if i<>0 then 2 17815 fejlreaktion(4,i,string taleswitch_out_navn.raf(increase(j)),1); 2 17816 2 17816 ia(1):= 3; <*canonical*> 2 17817 ia(2):= 0; <*no echo*> 2 17818 ia(3):= 0; <*prompt*> 2 17819 ia(4):= 2; <*timeout*> 2 17820 setcspterm(taleswitch_in_navn.laf,ia); 2 17821 setcspterm(taleswitch_out_navn.laf,ia); 2 17822 2 17822 cs_op:= next_semch; 2 17823 2 17823 <*+3*>skriv_new_sem(out,3,cs_op,<:cs-op(hovedmodul):>); 2 17824 <*-3*> 2 17825 2 17825 cs_op_retur:= next_semch; 2 17826 2 17826 <*+3*>skriv_new_sem(out,3,cs_op_retur,<:cs_op_retur:>); 2 17827 <*-3*> 2 17828 2 17828 i:= nextcoru(200,<*ident*> 2 17829 10,<*prioitet*> 2 17830 true<*test_maske*>); 2 17831 2 17831 j:= new_activity( i, 2 17832 0, 2 17833 h_operatør); 2 17834 2 17834 <*+3*>skriv_newactivity(out,i,j); 2 17835 <*-3*> 2 17836 \f 2 17836 message operatør_initialisering side 2 - 810520/hko; 2 17837 2 17837 for k:= 1 step 1 until max_antal_operatører do 2 17838 begin 3 17839 ref:= (k-1)*8; 3 17840 open(z_op(k),8,terminal_navn.ref,1 shift 21 +1 shift 9); 3 17841 i:= monitor(4) processaddress:(z_op(k),0,ia); 3 17842 ref:=k*terminal_beskr_længde; 3 17843 if i = 0 then 3 17844 begin 4 17845 fejlreaktion(3<*programfejl*>,k,<:skærm eksisterer ikke:>,1); 4 17846 terminal_tab.ref.terminal_tilstand:= 4 shift 21; 4 17847 end 3 17848 else 3 17849 begin 4 17850 terminal_tab.ref.terminal_tilstand:= 7 shift 21;<*ej knyttet*> 4 17851 end; 3 17852 3 17852 cs_operatør(k):= next_semch; 3 17853 <*+3*>skriv_new_sem(out,3,cs_operatør(k),<:cs-operatør( ):>); 3 17854 <*-3*> 3 17855 3 17855 cs_op_fil(k):= nextsemch; 3 17856 <*+3*> skriv_new_sem(out,3,cs_op_fil(k),<:cs-op-fil( ):>); 3 17857 <*-3*> 3 17858 signalch(cs_op_fil(k),nextop(filoplængde),op_optype); 3 17859 3 17859 i:= next_coru(200+k,<*ident*> 3 17860 10,<*prioitet*> 3 17861 true<*testmaske*>); 3 17862 j:= new_activity( i, 3 17863 0, 3 17864 operatør,k); 3 17865 3 17865 <*+3*>skriv_newactivity(out,i,j); 3 17866 <*-3*> 3 17867 end; 2 17868 2 17868 cs_cqf:= next_semch; 2 17869 <*+3*>skriv_new_sem(out,3,cs_cqf,<:cs-cqf:>); 2 17870 <*-3*> 2 17871 2 17871 signalch(cs_cqf,nextop(60),true); 2 17872 2 17872 i:= next_coru(292, <*ident*> 2 17873 10, <*prioritet*> 2 17874 true <*testmaske*>); 2 17875 j:= new_activity( i, 2 17876 0, 2 17877 op_cqftest); 2 17878 <*+3*>skriv_new_activity(out,i,j); 2 17879 <*-3*> 2 17880 2 17880 cs_op_spool:= next_semch; 2 17881 <*+3*>skriv_new_sem(out,3,cs_op_spool,<:cs-op-spool:>); 2 17882 <*-3*> 2 17883 2 17883 cs_op_medd:= next_semch; 2 17884 <*+3*>skriv_new_sem(out,3,cs_op_medd,<:cs-op-medd:>); 2 17885 <*-3*> 2 17886 2 17886 ss_op_spool_tomme:= next_sem; 2 17887 <*+3*>skriv_new_sem(out,2,ss_op_spool_tomme,<:ss-op-spool-tomme:>); 2 17888 <*-3*> 2 17889 for i:= 1 step 1 until op_spool_postantal do signal(ss_op_spool_tomme); 2 17890 2 17890 ss_op_spool_fulde:= next_sem; 2 17891 <*+3*>skriv_new_sem(out,2,ss_op_spool_fulde,<:ss-op-spool-fulde:>); 2 17892 <*-3*> 2 17893 2 17893 signalch(cs_op_medd,nextop(data+op_spool_postlgd),gen_optype); 2 17894 2 17894 i:= next_coru(293, <*ident*> 2 17895 10, <*prioritet*> 2 17896 true <*testmaske*>); 2 17897 j:= new_activity( i, 2 17898 0, 2 17899 op_spool); 2 17900 <*+3*>skriv_new_activity(out,i,j); 2 17901 <*-3*> 2 17902 2 17902 i:= next_coru(294, <*ident*> 2 17903 10, <*prioritet*> 2 17904 true <*testmaske*>); 2 17905 j:= new_activity( i, 2 17906 0, 2 17907 op_medd); 2 17908 <*+3*>skriv_new_activity(out,i,j); 2 17909 <*-3*> 2 17910 2 17910 cs_op_iomedd:= next_semch; 2 17911 <*+3*>skriv_new_sem(out,3,cs_op_iomedd,<:cs-op-iomedd:>); 2 17912 <*-3*> 2 17913 2 17913 bs_opk_alarm:= next_sem; 2 17914 <*+3*>skriv_new_sem(out,1,bs_opk_alarm,<:bs-opk-alarm:>); 2 17915 <*-3*> 2 17916 2 17916 cs_opk_alarm:= next_semch; 2 17917 <*+3*>skriv_new_sem(out,3,cs_opk_alarm,<:cs-opk-alarm:>); 2 17918 <*-3*> 2 17919 2 17919 cs_opk_alarm_ur:= next_semch; 2 17920 <*+3*>skriv_new_sem(out,3,cs_opk_alarm_ur,<:cs-opk-alarm-ur:>); 2 17921 <*-3*> 2 17922 2 17922 cs_opk_alarm_ur_ret:= next_semch; 2 17923 <*+3*>skriv_new_sem(out,3,cs_opk_alarm_ur_ret,<:cs-opk-alarm-ur-ret:>); 2 17924 <*-3*> 2 17925 2 17925 cs_tvswitch_adgang:= next_semch; 2 17926 <*+3*>skriv_new_sem(out,3,cs_tvswitch_adgang,<:cs-tvswitch-adgang:>); 2 17927 <*-3*> 2 17928 2 17928 cs_tv_switch_input:= next_semch; 2 17929 <*+3*>skriv_new_sem(out,3,cs_tv_switch_input,<:cs-tvswitch-input:>); 2 17930 <*-3*> 2 17931 2 17931 cs_tv_switch_adm:= next_semch; 2 17932 <*+3*>skriv_new_sem(out,3,cs_tv_switch_adm,<:cs-tvswitch-adm:>); 2 17933 <*-3*> 2 17934 2 17934 cs_talevejsswitch:= next_semch; 2 17935 <*+3*>skriv_new_sem(out,3,cs_talevejsswitch,<:cs-talevejsswitch:>); 2 17936 <*-3*> 2 17937 2 17937 signalch(cs_op_iomedd,nextop(60),gen_optype); 2 17938 2 17938 iaf:= nextop(data+128); 2 17939 if testbit22 then 2 17940 signal_ch(cs_tv_switch_adgang,iaf,op_optype) 2 17941 else 2 17942 begin 3 17943 startoperation(iaf,298,cs_tv_switch_adgang,'I' shift 12 + 44); 3 17944 signal_ch(cs_talevejsswitch,iaf,op_optype); 3 17945 end; 2 17946 2 17946 i:= next_coru(295, <*ident*> 2 17947 8, <*prioritet*> 2 17948 true <*testmaske*>); 2 17949 j:= new_activity( i, 2 17950 0, 2 17951 alarmur); 2 17952 <*+3*>skriv_new_activity(out,i,j); 2 17953 <*-3*> 2 17954 2 17954 signal_ch(cs_opk_alarm_ur_ret,nextop(data),op_optype); 2 17955 2 17955 i:= next_coru(296, <*ident*> 2 17956 8, <*prioritet*> 2 17957 true <*testmaske*>); 2 17958 j:= new_activity( i, 2 17959 0, 2 17960 opkaldsalarmer); 2 17961 <*+3*>skriv_new_activity(out,i,j); 2 17962 <*-3*> 2 17963 2 17963 i:= next_coru(297, <*ident*> 2 17964 3, <*prioritet*> 2 17965 true <*testmaske*>); 2 17966 j:= new_activity( i, 2 17967 0, 2 17968 tv_switch_input); 2 17969 <*+3*>skriv_new_activity(out,i,j); 2 17970 <*-3*> 2 17971 2 17971 for i:= 1,2 do 2 17972 signalch(cs_tvswitch_input,nextop(data+256),op_optype); 2 17973 2 17973 i:= next_coru(298, <*ident*> 2 17974 20, <*prioritet*> 2 17975 true <*testmaske*>); 2 17976 j:= new_activity( i, 2 17977 0, 2 17978 tv_switch_adm); 2 17979 <*+3*>skriv_new_activity(out,i,j); 2 17980 <*-3*> 2 17981 2 17981 i:= next_coru(299, <*ident*> 2 17982 3, <*prioritet*> 2 17983 true <*testmaske*>); 2 17984 j:= new_activity( i, 2 17985 0, 2 17986 talevejsswitch); 2 17987 <*+3*>skriv_new_activity(out,i,j); 2 17988 <*-3*> 2 17989 \f 2 17989 message garage_initialisering side 1 - 810521/hko; 2 17990 2 17990 cs_gar:= next_semch; 2 17991 <*+3*>skriv_new_sem(out,3,cs_gar,<:cs-gar(hovedmodul):>); 2 17992 <*-3*> 2 17993 2 17993 i:= next_coru(300,<*ident*> 2 17994 10,<*prioritet*> 2 17995 true<*test_maske*>); 2 17996 2 17996 j:= new_activity( i, 2 17997 0, 2 17998 h_garage); 2 17999 2 17999 <*+3*>skriv_newactivity(out,i,j); 2 18000 <*-3*> 2 18001 2 18001 for k:= 1 step 1 until max_antal_garageterminaler do 2 18002 begin 3 18003 ref:= (k-1)*8; 3 18004 open(z_gar(k),8,garage_terminal_navn.raf,1 shift 21 + 1 shift 9); 3 18005 ref:= (max_antal_operatører+k)*terminal_beskr_længde; 3 18006 i:=monitor(4)process address:(z_gar(k),0,ia); 3 18007 if i = 0 then 3 18008 begin 4 18009 fejlreaktion(4<*monitor result*>,k,<:garageterminal eksisterer ikke:>,1); 4 18010 terminal_tab.ref.terminal_tilstand:= 4 shift 21; 4 18011 end 3 18012 else 3 18013 begin 4 18014 terminal_tab.ref.terminal_tilstand:= 4 18015 if garage_auto_include(k) then 0 else 7 shift 21; 4 18016 if garage_auto_include(k) then 4 18017 monitor(8)reserve:(z_gar(k),0,ia); 4 18018 end; 3 18019 cs_garage(k):= next_semch; 3 18020 <*+3*>skriv_new_sem(out,3,cs_garage(k),<:cs-garage( ):>); 3 18021 <*-3*> 3 18022 i:= next_coru(300+k,<*ident*> 3 18023 10,<*prioritet*> 3 18024 true <*testmaske*>); 3 18025 j:= new_activity( i, 3 18026 0, 3 18027 garage,k); 3 18028 3 18028 <*+3*>skriv_newactivity(out,i,j); 3 18029 <*-3*> 3 18030 3 18030 end; 2 18031 \f 2 18031 message radio_initialisering side 1 - 820301/hko; 2 18032 2 18032 cs_rad:= next_semch; 2 18033 <*+3*>skriv_new_sem(out,3,cs_rad,<:cs_rad(h_mod):>); 2 18034 <*-3*> 2 18035 2 18035 i:= next_coru(400,<*ident*> 2 18036 10,<*prioritet*> 2 18037 true<*test_maske*>); 2 18038 j:= new_activity( i, 2 18039 0, 2 18040 h_radio); 2 18041 <*+3*>skriv_newactivity(out,i,j); 2 18042 <*-3*> 2 18043 2 18043 opkalds_kø_ledige:= max_antal_mobilopkald; 2 18044 nødopkald_brugt:= 0; 2 18045 læsfil(1034,1,i); 2 18046 tofrom(radio_områdetabel,fil(i),max_antal_områder*2); 2 18047 2 18047 opkald_meldt:= opkaldskø_postlængde - op_maske_lgd; 2 18048 for i:= system(3,j,opkaldskø) step 1 until j do 2 18049 opkaldskø(i):= 0; 2 18050 første_frie_opkald:=opkaldskø_postlængde; 2 18051 første_opkald:=sidste_opkald:= 2 18052 første_nødopkald:=sidste_nødopkald:=j:=0; 2 18053 2 18053 for i:=1 step 1 until max_antal_mobil_opkald -1 do 2 18054 begin 3 18055 ref:=i*opkaldskø_postlængde; 3 18056 opkaldskø.ref(1):=j:=j shift 12 +ref +opkaldskø_postlængde; 3 18057 end; 2 18058 ref:=ref+opkaldskø_postlængde; 2 18059 opkaldskø.ref(1):=j shift 12; 2 18060 2 18060 for ref:= 0 step 512 until (max_linienr//768*512) do 2 18061 begin 3 18062 i:= læs_fil(1035,ref//512+1,j); 3 18063 if i <> 0 then 3 18064 fejlreaktion(5<*læs_fil*>,i,<:liniefordelingstabel:>,0); 3 18065 tofrom(radio_linietabel.ref,fil(j), 3 18066 if (((max_linienr+1 - (ref//2*3))+2)//3*2) > 512 then 512 3 18067 else ((max_linienr+1 - (ref//2*3))+2)//3*2); 3 18068 end; 2 18069 2 18069 for i:= system(3,j,kanal_tab) step 1 until j do 2 18070 kanal_tab(i):= 0; 2 18071 kanal_tilstand:= 2; 2 18072 kanal_id1:= 4; 2 18073 kanal_id2:= 6; 2 18074 kanal_spec:= 8; 2 18075 kanal_alt_id1:= 10; 2 18076 kanal_alt_id2:= 12; 2 18077 kanal_mon_maske:= 12; 2 18078 kanal_alarm:= kanal_mon_maske+tv_maske_lgd; 2 18079 2 18079 for i:= 1 step 1 until max_antal_kanaler do 2 18080 begin 3 18081 ref:= (i-1)*kanalbeskrlængde; 3 18082 sæthexciffer(kanal_tab.ref,3,15); 3 18083 if kanal_id(i) shift (-5) extract 3 = 2 or 3 18084 kanal_id(i) shift (-5) extract 3 = 3 and 3 18085 radio_id(kanal_id(i) extract 5)<=3 3 18086 then 3 18087 begin 4 18088 sætbiti(kanal_tab.ref.kanal_tilstand,11,1); 4 18089 sætbiti(kanal_tab.ref.kanal_tilstand,10,1); 4 18090 end; 3 18091 end; 2 18092 tofrom(opkaldsflag,alle_operatører,op_maske_lgd); 2 18093 tofrom(samtaleflag,ingen_operatører,op_maske_lgd); 2 18094 tofrom(hookoff_maske,ingen_taleveje,tv_maske_lgd); 2 18095 optaget_flag:= 0; 2 18096 \f 2 18096 message radio_initialisering side 2 - 810524/hko; 2 18097 2 18097 bs_mobil_opkald:= next_sem; 2 18098 2 18098 <*+3*>skriv_new_sem(out,1,bs_mobil_opkald,<:bs_mobil_opkald:>); 2 18099 <*-3*> 2 18100 2 18100 bs_opkaldskø_adgang:= next_sem; 2 18101 signal_bin(bs_opkaldskø_adgang); 2 18102 2 18102 <*+3*>skriv_new_sem(out,1,bs_opkaldskø_adgang,<:bs_opk.kø_adgang:>); 2 18103 <*-3*> 2 18104 2 18104 cs_radio_medd:=next_semch; 2 18105 signal_ch(cs_radio_medd,nextop(data+6),gen_optype or rad_optype); 2 18106 2 18106 <*+3*>skriv_new_sem(out,3,cs_radio_medd,<:cs_radio_medd:>); 2 18107 <*-3*> 2 18108 2 18108 i:= next_coru(403, 2 18109 5,<*prioritet*> 2 18110 true<*testmaske*>); 2 18111 2 18111 j:= new_activity( i, 2 18112 0, 2 18113 radio_medd_opkald); 2 18114 2 18114 <*+3*>skriv_newactivity(out,i,j); 2 18115 <*-3*> 2 18116 2 18116 cs_radio_adm:= nextsemch; 2 18117 <*+3*>skriv_new_sem(out,3,cs_radio_adm,<:cs_radio_adm:>); 2 18118 <*-3*> 2 18119 2 18119 i:= next_coru(404, 2 18120 10, 2 18121 true); 2 18122 j:= new_activity(i, 2 18123 0, 2 18124 radio_adm,next_op(data+radio_op_længde)); 2 18125 <*+3*>skriv_new_activity(out,i,j); 2 18126 <*-3*> 2 18127 \f 2 18127 message radio_initialisering side 3 - 810526/hko; 2 18128 for k:= 1 step 1 until max_antal_taleveje do 2 18129 begin 3 18130 3 18130 cs_radio(k):=next_semch; 3 18131 3 18131 <*+3*>skriv_new_sem(out,3,cs_radio(k),<:cs_radio( ):>); 3 18132 <*-3*> 3 18133 3 18133 bs_talevej_udkoblet(k):= nextsem; 3 18134 <*+3*>skriv_new_sem(out,1,bs_talevej_udkoblet(k),<:bs_talevej_udkoblet( ):>); 3 18135 <*-3*> 3 18136 3 18136 i:=next_coru(410+k, 3 18137 10, 3 18138 true); 3 18139 3 18139 j:=new_activity( i, 3 18140 0, 3 18141 radio,k,next_op(data + radio_op_længde)); 3 18142 3 18142 <*+3*>skriv_newactivity(out,i,j); 3 18143 <*-3*> 3 18144 end; 2 18145 2 18145 cs_radio_pulje:=next_semch; 2 18146 2 18146 <*+3*>skriv_new_sem(out,3,cs_radio_pulje,<:cs-radio-pulje:>); 2 18147 <*-3*> 2 18148 2 18148 for i:= 1 step 1 until radiopulje_størrelse do 2 18149 signal_ch(cs_radio_pulje, 2 18150 next_op(60), 2 18151 gen_optype or rad_optype); 2 18152 2 18152 cs_radio_kø:= next_semch; 2 18153 2 18153 <*+3*>skriv_new_sem(out,3,cs_radio_kø,<:cs_radio_kø:>); 2 18154 <*-3*> 2 18155 2 18155 mobil_opkald_aktiveret:= true; 2 18156 \f 2 18156 message radio_initialisering side 4 - 810522/hko; 2 18157 2 18157 laf:=raf:=0; 2 18158 2 18158 open(z_fr_in,8,radio_fr_navn,radio_giveup); 2 18159 i:= monitor(8)reserve process:(z_fr_in,0,ia); 2 18160 j:=1; 2 18161 if i <> 0 then 2 18162 fejlreaktion(4<*monitor resultat*>,i, 2 18163 string radio_fr_navn.raf(increase(j)),1); 2 18164 open(z_fr_out,4 shift 12 + 8,radio_fr_navn,radio_giveup); 2 18165 i:= monitor(8)reserve process:(z_fr_out,0,ia); 2 18166 j:=1; 2 18167 if i <> 0 then 2 18168 fejlreaktion(4,i,string radio_fr_navn.raf(increase(j)),1); 2 18169 ia(1):= 3 <*canonical*>; 2 18170 ia(2):= 0 <*no echo*>; 2 18171 ia(3):= 0 <*prompt*>; 2 18172 ia(4):= 5 <*timeout*>; 2 18173 setcspterm(radio_fr_navn.laf,ia); 2 18174 2 18174 open(z_rf_in,8,radio_rf_navn,radio_giveup); 2 18175 i:= monitor(8)reserve process:(z_rf_in,0,ia); 2 18176 j:= 1; 2 18177 if i <> 0 then 2 18178 fejlreaktion(4<*monitor resultat*>,i, 2 18179 string radio_rf_navn.raf(increase(j)),1); 2 18180 open(z_rf_out,4 shift 12 + 8,radio_rf_navn,radio_giveup); 2 18181 i:= monitor(8)reserve process:(z_rf_out,0,ia); 2 18182 j:= 1; 2 18183 if i <> 0 then 2 18184 fejlreaktion(4,i,string radio_rf_navn.raf(increase(j)),1); 2 18185 ia(1):= 3 <*canonical*>; 2 18186 ia(2):= 0 <*no echo*>; 2 18187 ia(3):= 0 <*prompt*>; 2 18188 ia(4):= 5 <*timeout*>; 2 18189 setcspterm(radio_rf_navn.laf,ia); 2 18190 \f 2 18190 message radio_initialisering side 5 - 810521/hko; 2 18191 for k:= 1 step 1 until max_antal_kanaler do 2 18192 begin 3 18193 3 18193 ss_radio_aktiver(k):=next_sem; 3 18194 <*+3*>skriv_new_sem(out,2,ss_radio_aktiver(k),<:ss_rad_aktiver( ):>); 3 18195 <*-3*> 3 18196 3 18196 ss_samtale_nedlagt(k):=next_sem; 3 18197 <*+3*>skriv_new_sem(out,2,ss_samtale_nedlagt(k),<:ss_samtale_nedlagt( ):>); 3 18198 <*-3*> 3 18199 end; 2 18200 2 18200 cs_radio_ind:= next_semch; 2 18201 <*+3*>skriv_new_sem(out,3,cs_radio_ind,<:cs_radio_ind:>); 2 18202 <*-3*> 2 18203 2 18203 i:= next_coru(401,<*ident radio_ind*> 2 18204 3, <*prioritet*> 2 18205 true <*testmaske*>); 2 18206 j:= new_activity( i, 2 18207 0, 2 18208 radio_ind,next_op(data + 64)); 2 18209 2 18209 <*+3*>skriv_newactivity(out,i,j); 2 18210 <*-3*> 2 18211 2 18211 cs_radio_ud:=next_semch; 2 18212 <*+3*>skriv_new_sem(out,3,cs_radio_ud,<:cs_radio_ud:>); 2 18213 <*-3*> 2 18214 2 18214 i:= next_coru(402,<*ident radio_out*> 2 18215 10,<*prioritet*> 2 18216 true <*testmaske*>); 2 18217 j:= new_activity( i, 2 18218 0, 2 18219 radio_ud,next_op(data + 64)); 2 18220 2 18220 <*+3*>skriv_newactivity(out,i,j); 2 18221 <*-3*> 2 18222 \f 2 18222 message vogntabel initialisering side 1 - 820301; 2 18223 2 18223 sidste_bus:= sidste_linie_løb:= 0; 2 18224 2 18224 tf_vogntabel:= 1 shift 10 + 2; 2 18225 tf_gruppedef:= ia(4):= 1 shift 10 +3; 2 18226 tf_gruppeidenter:= 1 shift 10 +6; 2 18227 tf_springdef:= 1 shift 10 +7; 2 18228 hent_fil_dim(ia); 2 18229 max_antal_i_gruppe:= ia(2); 2 18230 if ia(1) < max_antal_grupper then 2 18231 max_antal_grupper:= ia(1); 2 18232 2 18232 <* initialisering af interne vogntabeller *> 2 18233 begin 3 18234 long array field laf1,laf2; 3 18235 integer array fdim(1:8); 3 18236 zone z(128,1,stderror); 3 18237 integer busnr,i,j,zi,s,pant,ll_nr,b_nr,res,tegn,g_nr,o_nr; 3 18238 long omr,garageid; 3 18239 integer field ll, bn; 3 18240 boolean binær, test24; 3 18241 3 18241 ll:= 2; bn:= 4; 3 18242 3 18242 <* nulstil tabellerne *> 3 18243 laf1:= -2; 3 18244 laf2:= 2; 3 18245 bustabel1.laf2(0):= 3 18246 bustabel.laf2(0):= bustilstand.laf2(0):= linie_løb_tabel.laf2(0):= 3 18247 bus_indeks.laf2(0):= linie_løb_indeks.laf2(0):= extend 0; 3 18248 tofrom(bustabel.laf2,bustabel.laf1,(max_antal_busser+1)*2-4); 3 18249 tofrom(bustabel1.laf2,bustabel1.laf1,(max_antal_busser+1)*2-4); 3 18250 tofrom(linie_løb_tabel.laf2,linie_løb_tabel.laf1,(max_antal_linie_løb+1)*2-4); 3 18251 tofrom(busindeks.laf2,busindeks.laf1,max_antal_linie_løb-4); 3 18252 tofrom(linie_løb_indeks.laf2,linie_løb_indeks.laf1,max_antal_busser-4); 3 18253 tofrom(bustilstand.laf2,bustilstand.laf1,max_antal_busser-4); 3 18254 \f 3 18254 message vogntabel initialisering side 1a - 810505/cl; 3 18255 3 18255 3 18255 <* initialisering af intern busnummertabel *> 3 18256 open(z,4,<:busnumre:>,0); 3 18257 busnr:= -1; 3 18258 read(z,busnr); 3 18259 while busnr > 0 do 3 18260 begin 4 18261 if busnr < bustabel(sidste_bus) extract 14 or busnr >= 1 shift 14 then 4 18262 fejlreaktion(10,busnr,<:fejl i busnrfil:>,0); 4 18263 sidste_bus:= sidste_bus+1; 4 18264 if sidste_bus > max_antal_busser then 4 18265 fejlreaktion(10,busnr,<:for mange busser i busnrfil:>,0); 4 18266 repeatchar(z); readchar(z,tegn); 4 18267 garageid:= extend 0; binær:= false; omr:= extend 0; 4 18268 g_nr:= o_nr:= 0; 4 18269 if tegn='!' then 4 18270 begin 5 18271 binær:= true; 5 18272 readchar(z,tegn); 5 18273 end; 4 18274 if tegn='/' then <*garageid*> 4 18275 begin 5 18276 readchar(z,tegn); repeatchar(z); 5 18277 if '0'<=tegn and tegn<='9' then 5 18278 begin 6 18279 read(z,g_nr); if g_nr<1 or g_nr>max_antal_operatører then g_nr:= 0; 6 18280 if g_nr<>0 then garageid:=bpl_navn(g_nr); 6 18281 if g_nr<>0 and garageid=long<::> then 6 18282 begin 7 18283 fejlreaktion(10,busnr,<:ukendt garageidentifikation for bus:>,1); 7 18284 g_nr:= 0; 7 18285 end; 6 18286 end 5 18287 else 5 18288 begin 6 18289 while ('A'<= tegn and tegn <='Å') or ('0'<=tegn and tegn<='9') do 6 18290 begin 7 18291 garageid:= garageid shift 8 + tegn; 7 18292 readchar(z,tegn); 7 18293 end; 6 18294 while garageid shift (-40) extract 8 = 0 do 6 18295 garageid:= garageid shift 8; 6 18296 g_nr:= find_bpl(garageid); 6 18297 if g_nr=0 then 6 18298 fejlreaktion(10,busnr,<:ukendt garageidentifikation for bus:>,1); 6 18299 end; 5 18300 repeatchar(z); readchar(z,tegn); 5 18301 end; 4 18302 if tegn=';' then 4 18303 begin 5 18304 readchar(z,tegn); repeatchar(z); 5 18305 if '0'<=tegn and tegn<='9' then 5 18306 begin 6 18307 read(z,o_nr); 6 18308 if o_nr<1 or max_antal_områder<o_nr then o_nr:= 0; 6 18309 if o_nr<>0 then omr:= område_navn(o_nr); 6 18310 if o_nr<>0 and omr=long<::> then 6 18311 begin 7 18312 fejlreaktion(10,busnr,<:ukendt områdeidentifikation for bus:>,1); 7 18313 o_nr:= 0; 7 18314 end; 6 18315 end 5 18316 else 5 18317 begin 6 18318 while ('A'<=tegn and tegn<='Å') or ('0'<=tegn and tegn<='9') do 6 18319 begin 7 18320 omr:= omr shift 8 + tegn; 7 18321 readchar(z,tegn); 7 18322 end; 6 18323 while omr shift (-40) extract 8 = 0 do 6 18324 omr:= omr shift 8; 6 18325 if omr=long<:TCT:> then omr:=long<:KBH:>; 6 18326 i:= 1; 6 18327 while i<=max_antal_områder and o_nr=0 do 6 18328 begin 7 18329 if omr=område_navn(i) then o_nr:= i; 7 18330 i:= i+1; 7 18331 end; 6 18332 if o_nr=0 then 6 18333 fejlreaktion(10,busnr,<:ukendt områdeidentifikation for bus:>,1); 6 18334 end; 5 18335 repeatchar(z); readchar(z,tegn); 5 18336 end; 4 18337 if o_nr=0 then o_nr:= 3; 4 18338 bustabel (sidste_bus):= g_nr shift 14 + busnr; 4 18339 bustabel1(sidste_bus):= (binær extract 1) shift 23 + o_nr; 4 18340 4 18340 busnr:= -1; 4 18341 read(z,busnr); 4 18342 end; 3 18343 close(z,true); 3 18344 \f 3 18344 message vogntabel initialisering side 2 - 820301/cl; 3 18345 3 18345 <* initialisering af intern linie/løbs-tabel og bus-indekstabel *> 3 18346 test24:= testbit24; 3 18347 testbit24:= false; 3 18348 i:= 1; 3 18349 s:= læsfil(tf_vogntabel,i,zi); 3 18350 if s<>0 then fejlreaktion(5,s,<:vogntabelinit:>,0); 3 18351 while fil(zi).bn<>0 do 3 18352 begin 4 18353 if fil(zi).ll <> 0 then 4 18354 begin <* indsæt linie/løb *> 5 18355 res:= binærsøg(sidste_linie_løb,linie_løb_tabel(j) - 5 18356 fil(zi).ll,j); 5 18357 if res < 0 then j:= j+1; 5 18358 if res = 0 then fejlreaktion(10,fil(zi).bn, 5 18359 <:dobbeltregistrering i vogntabel:>,1) 5 18360 else 5 18361 begin 6 18362 o_nr:= fil(zi).bn shift (-14) extract 8; 6 18363 b_nr:= søg_omr_bus(fil(zi).bn extract 14,ll_nr,g_nr,o_nr,s,tegn); 6 18364 if b_nr<0 then fejlreaktion(10,fil(zi).bn extract 14, 6 18365 <:ukendt bus i vogntabel:>,1) 6 18366 else 6 18367 begin 7 18368 if sidste_linie_løb >= max_antal_linie_løb then 7 18369 fejlreaktion(10,fil(zi).bn extract 14, 7 18370 <:for mange linie/løb i vogntabel:>,0); 7 18371 for ll_nr:= sidste_linie_løb step (-1) until j do 7 18372 begin 8 18373 linie_løb_tabel(ll_nr+1):= linie_løb_tabel(ll_nr); 8 18374 bus_indeks(ll_nr+1):= bus_indeks(ll_nr); 8 18375 end; 7 18376 linie_løb_tabel(j):= fil(zi).ll; 7 18377 bus_indeks(j):= false add b_nr; 7 18378 sidste_linie_løb:= sidste_linie_løb + 1; 7 18379 end; 6 18380 end; 5 18381 end; 4 18382 i:= i+1; 4 18383 s:= læsfil(tf_vogntabel,i,zi); 4 18384 if s<>0 then fejlreaktion(5,s,<:vogntabelinit:>,0); 4 18385 end; 3 18386 \f 3 18386 message vogntabel initialisering side 3 - 810428/cl; 3 18387 3 18387 <* initialisering af intern linie/løb-indekstabel *> 3 18388 for ll_nr:= 1 step 1 until sidste_linie_løb do 3 18389 linie_løb_indeks(bus_indeks(ll_nr) extract 12):= false add ll_nr; 3 18390 3 18390 <* gem ny vogntabel i tabelfil *> 3 18391 for i:= 1 step 1 until sidste_bus do 3 18392 begin 4 18393 s:= skriv_fil(tf_vogntabel,i,zi); 4 18394 if s<>0 then fejlreaktion(6,s,<:vogntabelinit:>,0); 4 18395 fil(zi).bn:= bustabel(i) extract 14 add 4 18396 (bustabel1(i) extract 8 shift 14); 4 18397 fil(zi).ll:= linie_løb_tabel(linie_løb_indeks(i) extract 12); 4 18398 end; 3 18399 fdim(4):= tf_vogntabel; 3 18400 hent_fil_dim(fdim); 3 18401 pant:= fdim(3) * (256//fdim(2)); 3 18402 for i:= sidste_bus+1 step 1 until pant do 3 18403 begin 4 18404 s:= skriv_fil(tf_vogntabel,i,zi); 4 18405 if s<>0 then fejlreaktion(6,s,<:vogntabelinit:>,0); 4 18406 fil(zi).ll:= fil(zi).bn:= 0; 4 18407 end; 3 18408 3 18408 <* initialisering/nulstilling af gruppetabeller *> 3 18409 for i:= 1 step 1 until max_antal_grupper do 3 18410 begin 4 18411 s:= læs_fil(tf_gruppeidenter,i,zi); 4 18412 if s <> 0 then fejlreaktion(5,s,<:gruppetabelinit:>,0); 4 18413 gruppetabel(i):= fil(zi).ll; 4 18414 end; 3 18415 for i:= 1 step 1 until max_antal_gruppeopkald do 3 18416 gruppeopkald(i,1):= gruppeopkald(i,2):= 0; 3 18417 testbit24:= test24; 3 18418 end; 2 18419 2 18419 2 18419 <*+2*> 2 18420 <**> if testbit40 then p_vogntabel(out); 2 18421 <**> if testbit43 then p_gruppetabel(out); 2 18422 <*-2*> 2 18423 2 18423 message vogntabel initialisering side 3a -920517/cl; 2 18424 2 18424 <* initialisering for vt_log *> 2 18425 2 18425 v_tid:= 4; 2 18426 v_kode:= 6; 2 18427 v_bus:= 8; 2 18428 v_ll1:= 10; 2 18429 v_ll2:= 12; 2 18430 v_tekst:= 6; 2 18431 for i:= 1 step 1 until 4 do vt_logdisc(i):= 0; 2 18432 for i:= 1 step 1 until 10 do vt_log_tail(i):= 0; 2 18433 if vt_log_aktiv then 2 18434 begin 3 18435 integer i; 3 18436 real t; 3 18437 integer array field iaf; 3 18438 integer array 3 18439 tail(1:10),ia(1:10),chead(1:20); 3 18440 3 18440 open(zvtlog,4,<:vtlogpool:>,0); close(zvtlog,true); 3 18441 i:= monitor(42)lookup_entry:(zvtlog,0,tail); 3 18442 if i=0 then 3 18443 i:=monitor(52)create_areaproc:(zvtlog,0,ia); 3 18444 if i=0 then 3 18445 begin 4 18446 i:=monitor(8)reserve_process:(zvtlog,0,ia); 4 18447 monitor(64)remove_areaproc:(zvtlog,0,ia); 4 18448 end; 3 18449 3 18449 if i=0 then 3 18450 begin 4 18451 iaf:= 2; 4 18452 tofrom(vt_logdisc,tail.iaf,8); 4 18453 i:=slices(vt_logdisc,0,tail,chead); 4 18454 if i > (-2048) then 4 18455 begin 5 18456 vt_log_slicelgd:= chead(15); 5 18457 i:= 0; 5 18458 end; 4 18459 end; 3 18460 3 18460 if i=0 then 3 18461 begin 4 18462 open(zvtlog,4,<:vtlogklar:>,0); close(zvtlog,true); 4 18463 i:=monitor(42)lookup_entry:(zvtlog,0,tail); 4 18464 if i=0 then 4 18465 i:= monitor(52)create_areapproc:(zvtlog,0,ia); 4 18466 if i=0 then 4 18467 begin 5 18468 i:=monitor(8)reserve_process:(zvtlog,0,ia); 5 18469 monitor(64)remove_areaproc:(zvtlog,0,ia); 5 18470 end; 4 18471 4 18471 if i<>0 then 4 18472 begin 5 18473 for i:= 1 step 1 until 10 do tail(i):= 0; 5 18474 tail(1):= 1; 5 18475 iaf:= 2; 5 18476 tofrom(tail.iaf,vt_logdisc,8); 5 18477 tail(6):=systime(7,0,t); 5 18478 i:=monitor(40)create_entry:(zvtlog,0,tail); 5 18479 if i=0 then 5 18480 i:=monitor(50)permanent_entry:(zvtlog,3,ia); 5 18481 end; 4 18482 end; 3 18483 3 18483 if i<>0 then vt_log_aktiv:= false; 3 18484 end; 2 18485 2 18485 2 18485 \f 2 18485 message vogntabel initialisering side 4 - 810520/cl; 2 18486 2 18486 cs_vt:= nextsemch; 2 18487 <*+3*> skriv_new_sem(out,3,cs_vt,<:cs-vt:>); 2 18488 <*-3*> 2 18489 2 18489 cs_vt_adgang:= nextsemch; 2 18490 <*+3*> skriv_new_sem(out,3,cs_vt_adgang,<:cs-vt-adgang:>); 2 18491 <*-3*> 2 18492 2 18492 cs_vt_opd:= nextsemch; 2 18493 <*+3*> skriv_new_sem(out,3,cs_vt_opd,<:cs-vt-opd:>); 2 18494 <*-3*> 2 18495 2 18495 cs_vt_rap:= nextsemch; 2 18496 <*+3*> skriv_new_sem(out,3,cs_vt_rap,<:cs-vt-rap:>); 2 18497 <*-3*> 2 18498 2 18498 cs_vt_tilst:= nextsemch; 2 18499 <*+3*> skriv_new_sem(out,3,cs_vt_tilst,<:cs-vt-tilst:>); 2 18500 <*-3*> 2 18501 2 18501 cs_vt_auto:= nextsemch; 2 18502 <*+3*> skriv_new_sem(out,3,cs_vt_auto,<:cs-vt-auto:>); 2 18503 <*-3*> 2 18504 2 18504 cs_vt_grp:= nextsemch; 2 18505 <*+3*> skriv_new_sem(out,3,cs_vt_grp,<:cs-vt-grp:>); 2 18506 <*-3*> 2 18507 2 18507 cs_vt_spring:= nextsemch; 2 18508 <*+3*> skriv_new_sem(out,3,cs_vt_spring,<:cs-vt-spring:>); 2 18509 <*-3*> 2 18510 2 18510 cs_vt_log:= nextsemch; 2 18511 <*+3*> skriv_new_sem(out,3,cs_vt_log,<:cs-vt-log:>); 2 18512 <*-3*> 2 18513 2 18513 cs_vt_logpool:= nextsemch; 2 18514 <*+3*> skriv_new_sem(out,3,cs_vt_logpool,<:cs-vt-logpool:>); 2 18515 <*-3*> 2 18516 2 18516 vt_op:= nextop(vt_op_længde); 2 18517 signalch(cs_vt_adgang,vt_op,gen_optype or vt_optype); 2 18518 2 18518 vt_logop(1):= nextop(vt_op_længde); 2 18519 signalch(cs_vt_logpool,vt_logop(1),vt_optype); 2 18520 vt_logop(2):= nextop(vt_op_længde); 2 18521 signalch(cs_vt_logpool,vt_logop(2),vt_optype); 2 18522 2 18522 \f 2 18522 message vogntabel initialisering side 5 - 81-520/cl; 2 18523 2 18523 i:= nextcoru(500, <*ident*> 2 18524 10, <*prioitet*> 2 18525 true <*testmaske*>); 2 18526 j:= new_activity( i, 2 18527 0, 2 18528 h_vogntabel); 2 18529 <*+3*> skriv_newactivity(out,i,j); 2 18530 <*-3*> 2 18531 2 18531 i:= nextcoru(501, <*ident*> 2 18532 10, <*prioritet*> 2 18533 true <*testmaske*>); 2 18534 iaf:= nextop(filop_længde); 2 18535 j:= new_activity(i, 2 18536 0, 2 18537 vt_opdater,iaf); 2 18538 <*+3*> skriv_newactivity(out,i,j); 2 18539 <*-3*> 2 18540 2 18540 i:= nextcoru(502, <*ident*> 2 18541 10, <*prioritet*> 2 18542 true <*testmaske*>); 2 18543 k:= nextsemch; 2 18544 <*+3*> skriv_new_sem(out,3,k,<:cs-fil(vt-tilst):>); 2 18545 <*-3*> 2 18546 iaf:= nextop(fil_op_længde); 2 18547 j:= newactivity(i, 2 18548 0, 2 18549 vt_tilstand, 2 18550 k, 2 18551 iaf); 2 18552 <*+3*> skriv_newactivity(out,i,j); 2 18553 <*-3*> 2 18554 \f 2 18554 message vogntabel initialisering side 6 - 810520/cl; 2 18555 2 18555 i:= nextcoru(503, <*ident*> 2 18556 10, <*prioritet*> 2 18557 true <*testmaske*>); 2 18558 k:= nextsemch; 2 18559 <*+3*> skriv_new_sem(out,3,k,<:cs-fil(vt-rapport):>); 2 18560 <*-3*> 2 18561 iaf:= nextop(fil_op_længde); 2 18562 j:= newactivity(i, 2 18563 0, 2 18564 vt_rapport, 2 18565 k, 2 18566 iaf); 2 18567 <*+3*> skriv_newactivity(out,i,j); 2 18568 <*-3*> 2 18569 2 18569 i:= nextcoru(504, <*ident*> 2 18570 10, <*prioritet*> 2 18571 true <*testmaske*>); 2 18572 k:= nextsemch; 2 18573 <*+3*> skriv_new_sem(out,3,k,<:cs-fil(vt-gruppe):>); 2 18574 <*-3*> 2 18575 iaf:= nextop(fil_op_længde); 2 18576 j:= new_activity(i, 2 18577 0, 2 18578 vt_gruppe, 2 18579 k, 2 18580 iaf); 2 18581 <*+3*> skriv_newactivity(out,i,j); 2 18582 <*-3*> 2 18583 \f 2 18583 message vogntabel initialisering side 7 - 810520/cl; 2 18584 2 18584 i:= nextcoru(505, <*ident*> 2 18585 10, <*prioritet*> 2 18586 true <*testmaske*>); 2 18587 k:= nextsemch; 2 18588 <*+3*> skriv_new_sem(out,3,k,<:cs-spring-retur:>); 2 18589 <*-3*> 2 18590 iaf:= nextop(fil_op_længde); 2 18591 j:= newactivity(i, 2 18592 0, 2 18593 vt_spring, 2 18594 k, 2 18595 iaf); 2 18596 <*+3*> skriv_newactivity(out,i,j); 2 18597 <*-3*> 2 18598 2 18598 i:= nextcoru(506, <*ident*> 2 18599 10, 2 18600 true <*testmaske*>); 2 18601 k:= nextsemch; 2 18602 <*+3*> skriv_new_sem(out,3,k,<:cs-auto-retur:>); 2 18603 <*-3*> 2 18604 iaf:= nextop(if fil_op_længde>(data+20) then fil_op_længde else (data+20)); 2 18605 j:= newactivity(i, 2 18606 0, 2 18607 vt_auto, 2 18608 k, 2 18609 iaf); 2 18610 <*+3*> skriv_newactivity(out,i,j); 2 18611 <*-3*> 2 18612 2 18612 i:=nextcoru(507, <*ident*> 2 18613 10, <*prioritet*> 2 18614 true <*testmaske*>); 2 18615 j:=newactivity(i, 2 18616 0, 2 18617 vt_log); 2 18618 <*+3*> skriv_newactivity(out,i,j); 2 18619 <*-3*> 2 18620 2 18620 <*+2*> 2 18621 <**> if testbit42 then skriv_vt_variable(out); 2 18622 <*-2*> 2 18623 \f 2 18623 message sysslut initialisering side 1 - 810406/cl; 2 18624 begin 3 18625 zone z(128,1,stderror); 3 18626 integer i,coruid,j,k; 3 18627 integer array field cor; 3 18628 3 18628 open(z,4,<:overvågede:>,0); 3 18629 for i:= read(z,coruid) while i > 0 do 3 18630 begin 4 18631 if coruid = 0 then 4 18632 begin 5 18633 for coruid:= 1 step 1 until maxcoru do 5 18634 begin 6 18635 cor:= coroutine(coruid); 6 18636 d.cor.corutestmask:= d.cor.corutestmask shift 1 shift (-1); 6 18637 end 5 18638 end 4 18639 else 4 18640 begin 5 18641 cor:= coroutine(coru_no(abs coruid)); 5 18642 if cor > 0 then 5 18643 begin 6 18644 d.cor.corutestmask:= 6 18645 (d.cor.corutestmask shift 1 shift (-1)) add 6 18646 ((coruid > 0) extract 1 shift 11); 6 18647 end; 5 18648 end; 4 18649 end; 3 18650 close(z,true); 3 18651 3 18651 læsfil(tf_systællere,1,k); 3 18652 rf:=iaf:= 4; 3 18653 systællere_nulstillet:= fil(k).rf; 3 18654 nulstil_systællere:= fil(k).iaf(1); 3 18655 if systællere_nulstillet=real<::> then 3 18656 begin 4 18657 systællere_nulstillet:= 0.0; 4 18658 nulstil_systællere:= -1; 4 18659 end; 3 18660 iaf:= 32; 3 18661 tofrom(opkalds_tællere,fil(k).iaf,max_antal_områder*10); 3 18662 iaf:= 192; 3 18663 tofrom(operatør_tællere,fil(k).iaf,max_antal_operatører*10); 3 18664 3 18664 end; 2 18665 \f 2 18665 message sysslut initialisering side 2 - 810603/cl; 2 18666 2 18666 2 18666 if låsning > 0 then 2 18667 <* låsning 1 : *> lock(takeexternal,coru_term,mon,1); <* centrallogik *> 2 18668 2 18668 if låsning > 1 then 2 18669 <* låsning 2 : *> lock(readchar,1,write,2); 2 18670 2 18670 if låsning > 2 then 2 18671 <* låsning 3 : *> lock(activate,1,link,1,setposition,1); 2 18672 2 18672 2 18672 2 18672 2 18672 if låsning > 0 then 2 18673 begin 3 18674 i:= locked(ia); 3 18675 write(z_io,"nl",2,<:låsning::>,låsning,"nl",1,i,<: segmenter er låst:>); 3 18676 end; 2 18677 \f 2 18677 message sysslut initialisering side 3 - 810406/cl; 2 18678 2 18678 write(z_io,"nl",2,<:initialisering slut:>); 2 18679 system(2)free core:(i,ra); 2 18680 write(z_io,"nl",1,<:free core =:>,i,"nl",1); 2 18681 setposition(z_io,0,0); 2 18682 write(zbillede,"ff",0,"nl",1,<:initialisering slut :>,<<zddddd>, 2 18683 systime(5,0,r),".",1,r,"nl",1,<:free core=:>,i, 2 18684 "nl",1); 2 18685 errorbits:= 3; <* ok.no warning.yes *> 2 18686 \f 2 18686 2 18686 algol list.off; 2 18687 message coroutinemonitor - 40 ; 2 18688 2 18688 if simref <> firstsem then initerror(1, false); 2 18689 if semref <> firstop - 4 then initerror(2, false); 2 18690 if coruref <> firstsim then initerror(3, false); 2 18691 if opref <> optop + 6 then initerror(4, false); 2 18692 if proccount <> maxprocext -1 then initerror(5, false); 2 18693 goto takeexternal; 2 18694 2 18694 dump: 2 18695 op:= op; 2 18696 \f 2 18696 message sys trapaktion side 1 - 810521/hko/cl; 2 18697 trap(finale); 2 18698 write(zbillede,"ff",1,"nl",1,<:***** coroutine-monitor køer *****:>); 2 18699 for i:= 4<*readyqueue*>, 8<*idlequeue*>, 12<*timerqueue*> do 2 18700 begin 3 18701 k:= 0; 3 18702 write(zbillede,"nl",2,case i//4 of(<:readyqueue->:>,<:idlequeue ->:>, 3 18703 <:timerqueue->:>)); 3 18704 iaf:= i; 3 18705 for iaf:= d.iaf.next while iaf<>i do 3 18706 begin 4 18707 ref:= firstcoru + (iaf-firstcoru)//corusize*corusize; 4 18708 write(zbillede,<: cr:>,<<zdd>,d.ref.coruident//1000); 4 18709 k:=k+1; if k mod 10 = 0 then write(zbillede,"nl",1,"sp",12); 4 18710 end; 3 18711 end; 2 18712 outchar(zbillede,'nl'); 2 18713 2 18713 skriv_opkaldstællere(zbillede); 2 18714 2 18714 2 18714 pfilsystem(zbillede); 2 18715 2 18715 \f 2 18715 message operatør trapaktion1 side 1 - 810521/hko; 2 18716 write(zbillede,"nl",2,"=",20,<: operatørmodul :>,"=",20,"nl",1); 2 18717 2 18717 write(zbillede,"nl",1,<:betjeningspladsnavne::>,"nl",1); 2 18718 for i:= 1 step 1 until max_antal_operatører do 2 18719 begin 3 18720 laf:= (i-1)*8; 3 18721 write(zbillede,<<dd>,i,<:: :>,true,6,string bpl_navn(i), 3 18722 case operatør_auto_include(i) extract 2 + 1 of ( 3 18723 <:EK :>,<:IN(ÅB):>,<:?? :>,<:IN(ST):>),<: :>, 3 18724 terminal_navn.laf,"nl",1); 3 18725 end; 2 18726 write(zbillede,"nl",1); 2 18727 2 18727 write(zbillede,"nl",1,<:top-bpl-gruppe: :>,<<d>,top_bpl_gruppe,"nl",1, 2 18728 <:betjeningspladsgrupper::>,"nl",1); 2 18729 for i:= 1 step 1 until 127 do 2 18730 if bpl_navn(i)<>long<::> then 2 18731 begin 3 18732 k:= write(zbillede,<<dd >,i,true,6,string bpl_navn(i),<:(:>,<<d>, 3 18733 bpl_tilst(i,1),<:/:>,bpl_tilst(i,2),<:):>); 3 18734 write(zbillede,"sp",16-k,<:= :>); 3 18735 iaf:= i*op_maske_lgd; j:=0; 3 18736 for k:= 1 step 1 until max_antal_operatører do 3 18737 begin 4 18738 if læsbit_ia(bpl_def.iaf,k) then 4 18739 begin 5 18740 if j mod 6 = 0 and j > 0 then write(zbillede,"nl",1,"sp",18); 5 18741 write(zbillede,true,6,string bpl_navn(k)); 5 18742 j:= j+1; 5 18743 end; 4 18744 end; 3 18745 write(zbillede,"nl",1); 3 18746 end; 2 18747 2 18747 write(zbillede,"nl",1,<:stoptabel::>,"nl",1); 2 18748 for i:= 1 step 1 until max_antal_operatører do 2 18749 begin 3 18750 write(zbillede,<<dd >,i); 3 18751 for j:= 0 step 1 until 3 do 3 18752 begin 4 18753 k:= operatør_stop(i,j); 4 18754 write(zbillede,if j=0 then <: :> else <:->:>,if k=0 then <:ALLE:> 4 18755 else string bpl_navn(k)); 4 18756 end; 3 18757 write(zbillede,<: (:>,<<d>,ant_i_opkø(i),<:):>,"nl",1); 3 18758 end; 2 18759 2 18759 skriv_terminal_tab(zbillede); 2 18760 write(zbillede,"nl",1,<:operatør-maske::>,"nl",1); 2 18761 outintbits_ia(zbillede,operatørmaske,1,op_maske_lgd//2); 2 18762 skriv_opk_alarm_tab(zbillede); 2 18763 skriv_talevejs_tab(zbillede); 2 18764 skriv_op_spool_buf(zbillede); 2 18765 skriv_cqf_tabel(zbillede,true); 2 18766 write(zbillede,"nl",2,"=",20,<: garagemodul :>,"=",20,"nl",1); 2 18767 2 18767 write(zbillede,"nl",1,<:garageterminaler::>,"nl",1); 2 18768 for i:= 1 step 1 until max_antal_garageterminaler do 2 18769 begin 3 18770 laf:= (i-1)*8; 3 18771 write(zbillede,<<dd>,i,<:: :>, if garage_auto_include(i) then 3 18772 <:IN,G :> else <:EK,G :>,garage_terminal_navn.laf,"nl",1); 3 18773 end; 2 18774 \f 2 18774 message radio trapaktion side 1 - 820301/hko; 2 18775 write(zbillede,"nl",2,"=",20,<: radiomodul :>,"=",20,"nl",1); 2 18776 skriv_kanal_tab(zbillede); 2 18777 skriv_opkaldskø(zbillede); 2 18778 skriv_radio_linietabel(zbillede); 2 18779 skriv_radio_områdetabel(zbillede); 2 18780 2 18780 \f 2 18780 message vogntabel trapaktion side 1 - 810520/cl; 2 18781 write(zbillede,"nl",2,"=",20,<: vogntabelmodul :>,"=",20,"nl",1); 2 18782 skriv_vt_variable(zbillede); 2 18783 p_vogntabel(zbillede); 2 18784 p_gruppetabel(zbillede); 2 18785 p_springtabel(zbillede); 2 18786 \f 2 18786 message sysslut trapaktion side 1 - 810519/cl; 2 18787 write(zbillede,"nl",2,"=",20,<: corutinemonitor :>,"=",20,"nl",1); 2 18788 corutable(zbillede); 2 18789 write(zbillede,"ff",1,<:***** simple semaphores *****:>,"nl",2, 2 18790 <: ref værdi prev next:>,"nl",1); 2 18791 iaf:= firstsim; 2 18792 repeat 2 18793 write(zbillede,<<dddd>,iaf,<< -dddd>,d.iaf.simvalue,<< dddd>, 2 18794 d.iaf(simcoru//2-1),d.iaf.simcoru,"nl",1); 2 18795 iaf:= iaf + simsize; 2 18796 until iaf>=simref; 2 18797 write(zbillede,"ff",1,<:***** chained semaphores *****:>,"nl",2, 2 18798 <: ref prev.coru next.coru prev.op next.op:>,"nl",1); 2 18799 iaf:= firstsem; 2 18800 repeat 2 18801 write(zbillede,<<dddd>,iaf,<<______dddd>,d.iaf(semcoru//2-1), 2 18802 d.iaf.semcoru,d.iaf(semop//2-1),d.iaf.semop,"nl",1); 2 18803 iaf:= iaf+semsize; 2 18804 until iaf>=semref; 2 18805 write(zbillede,"ff",1,<:***** operations *****:>,"nl",2); 2 18806 iaf:= firstop; 2 18807 repeat 2 18808 skriv_op(zbillede,iaf); 2 18809 iaf:= iaf+opheadsize+d.iaf.opsize; 2 18810 until iaf>=optop; 2 18811 write(zbillede,"ff",1,<:***** message extentions *****:>,"nl",2, 2 18812 <: messref messcode messop:>,"nl",1); 2 18813 for i:= 1 step 1 until maxmessext do 2 18814 write(zbillede,<< dddddddd>,messref(i),messcode(i),messop(i),"nl",1); 2 18815 write(zbillede,"nl",4,<:***** process extentions *****:>,"nl",2, 2 18816 <: procref proccode procop:>,"nl",1); 2 18817 for i:= 1 step 1 until maxprocext do 2 18818 write(zbillede,<< dddddddd>,procref(i),proccode(i),procop(i),"nl",1); 2 18819 2 18819 2 18819 \f 2 18819 message sys_finale side 1 - 810428/hko; 2 18820 2 18820 finale: 2 18821 trap(slut_finale); 2 18822 <* algol_pause:=algol_pause shift 24 shift (-24); *> 2 18823 endaction:=0; 2 18824 \f 2 18824 message filsystem finale side 1 - 810428/cl; 2 18825 2 18825 <* lukning af zoner *> 2 18826 write(out,<:lukker filsystem:>); ud; 2 18827 for i:= 1 step 1 until dbantez+dbantsz+dbanttz do 2 18828 close(fil(i),true); 2 18829 \f 2 18829 message operatør_finale side 1 - 810428/hko; 2 18830 2 18830 goto op_trap2_slut; 2 18831 2 18831 write(out,<:lukker operatører:>); ud; 2 18832 for k:= 1 step 1 until max_antal_operatører do 2 18833 begin 3 18834 close(z_op(k),true); 3 18835 end; 2 18836 op_trap2_slut: 2 18837 k:=k; 2 18838 2 18838 \f 2 18838 message garage_finale side 1 - 810428/hko; 2 18839 2 18839 write(out,<:lukker garager:>); ud; 2 18840 for k:= 1 step 1 until max_antal_garageterminaler do 2 18841 begin 3 18842 close(z_gar(k),true); 3 18843 end; 2 18844 \f 2 18844 message radio_finale side 1 - 810525/hko; 2 18845 write(out,<:lukker radio:>); ud; 2 18846 close(z_fr_in,true); 2 18847 close(z_fr_out,true); 2 18848 close(z_rf_in,true); 2 18849 close(z_rf_out,true); 2 18850 \f 2 18850 message sysslut finale side 1 - 810530/cl; 2 18851 2 18851 slut_finale: 2 18852 2 18852 trap(exit_finale); 2 18853 2 18853 outchar(zrl,'em'); 2 18854 close(zrl,true); 2 18855 2 18855 write(zbillede, 2 18856 "nl",2,<:blocksread=:>,blocksread, 2 18857 "nl",1,<:blocksout= :>,blocksout, 2 18858 "nl",1,<:fillæst= :>,fillæst, 2 18859 "nl",1,<:filskrevet=:>,filskrevet, 2 18860 "nl",3,<:********** billede genereret :>,<<zddddd>, 2 18861 systime(5,0,r),".",1,r,<: **********:>,"nl",1,"em",1); 2 18862 close(zbillede,true); 2 18863 monitor(42,zbillede,0,ia); 2 18864 ia(6):= systime(7,0,0.0); 2 18865 monitor(44,zbillede,0,ia); 2 18866 setposition(z_io,0,0); 2 18867 write(z_io,"nl",3,"sp",10,"*",15,<: busradio afsluttet :>,<<zddddd>, 2 18868 systime(5,0,r),".",1,r,"sp",1,"*",15,"nl",1,"em",1); 2 18869 close(z_io,true); 2 18870 exit_finale: trapmode:= 1 shift 10; 2 18871 2 18871 end; 1 18872 1 18872 1 18872 algol list.on; 1 18873 message programslut; 1 18874 program_slut: 1 18875 end \f 1. 7053191 13236373 610 0 0 2. 13975084 1883462 350 0 0 3. 1659907 8864126 418 368 0 4. 6862480 8909483 428 1653 742 5. 12248314 3624577 582 29903 605 6. 12253497 9665780 583 0 0 7. 12557109 12895971 632 0 0 8. 18865 18859 18846 18828 18815 18807 18797 18789 18778 18767 18760 18747 18733 18724 18716 18702 18690 18681 18671 18657 18629 18604 18586 18562 18542 18521 18508 18493 18477 18462 18441 18415 18401 18384 18364 18355 18333 18308 18283 18265 18252 18248 18220 18205 18189 18178 18165 18150 18134 18121 18105 18089 18067 18049 18033 18015 17998 17975 17956 17937 17925 17911 17891 17877 17858 17845 17826 17815 17802 17792 17775 17762 17751 17733 17720 17707 17687 17669 17656 17633 17613 17597 17584 17567 17555 17540 17525 17506 17485 17471 17461 17456 17446 17438 17419 17398 17378 17370 17363 17353 17308 17263 17235 17222 17189 17162 17139 17099 17074 17045 16989 16934 16881 16852 16819 16777 16745 16710 16654 16616 16576 16528 16495 16470 16447 16427 16399 16380 16361 16338 16327 16316 16296 16279 16264 16248 16221 16202 16186 16168 16159 16152 16127 16119 16109 16089 16078 16059 16048 16031 16016 15998 15973 15960 15949 15932 15914 15900 15893 15885 15876 15848 15831 15814 15801 15793 15784 15765 15754 15740 15728 15701 15686 15668 15646 15626 15613 15594 15571 15545 15524 15513 15491 15471 15449 15431 15403 15382 15364 15351 15343 15336 15321 15302 15295 15278 15258 15238 15224 15199 15184 15163 15137 15125 15116 15087 15065 15045 15035 15024 14999 14978 14958 14928 14909 14890 14870 14849 14841 14815 14802 14785 14766 14740 14721 14704 14677 14657 14635 14618 14598 14567 14536 14501 14474 14453 14440 14429 14408 14400 14391 14372 14352 14329 14302 14285 14267 14254 14244 14233 14209 14185 14166 14136 14123 14090 14055 14040 14019 14007 13981 13960 13940 13916 13905 13875 13856 13833 13803 13787 13764 13737 13702 13675 13668 13654 13633 13621 13607 13599 13584 13570 13563 13556 13549 13541 13508 13493 13473 13460 13442 13428 13400 13373 13355 13334 13316 13299 13282 13270 13260 13236 13230 13215 13195 13179 13162 13137 13124 13089 13072 13055 13032 13016 13004 12986 12959 12948 12940 12917 12898 12889 12872 12857 12839 12830 12818 12809 12791 12775 12760 12749 12730 12702 12681 12660 12644 12630 12623 12611 12594 12562 12544 12528 12511 12495 12464 12440 12430 12417 12402 12386 12368 12350 12326 12315 12299 12282 12266 12249 12225 12218 12200 12173 12155 12130 12105 12061 12050 12039 12011 11978 11948 11921 11879 11852 11831 11818 11810 11802 11792 11763 11746 11725 11710 11690 11667 11645 11621 11593 11571 11554 11529 11512 11496 11473 11458 11439 11420 11396 11361 11335 11317 11298 11277 11249 11232 11210 11196 11173 11145 11132 11119 11090 11052 11021 10978 10944 10913 10906 10898 10890 10879 10850 10827 10812 10802 10782 10764 10751 10742 10730 10721 10706 10698 10686 10657 10635 10617 10563 10528 10494 10461 10402 10386 10369 10350 10337 10324 10303 10291 10273 10260 10247 10220 10201 10184 10147 10131 10112 10104 10094 10063 10044 10027 10016 9986 9963 9938 9925 9916 9902 9878 9871 9861 9844 9825 9811 9792 9780 9764 9753 9742 9717 9700 9678 9660 9642 9622 9609 9589 9578 9552 9533 9514 9500 9490 9462 9444 9436 9412 9400 9388 9364 9346 9330 9319 9291 9274 9270 9253 9244 9237 9226 9212 9196 9179 9167 9155 9136 9126 9118 9091 9075 9068 9055 9041 9024 9016 9000 8991 8972 8935 8926 8901 8889 8875 8851 8831 8811 8789 8749 8731 8716 8704 8686 8677 8670 8658 8643 8632 8621 8607 8598 8577 8572 8561 8550 8534 8526 8516 8495 8483 8471 8451 8442 8428 8418 8404 8383 8368 8351 8341 8325 8312 8305 8288 8266 8247 8226 8212 8195 8177 8161 8144 8133 8119 8104 8058 8039 8002 7979 7956 7942 7921 7905 7876 7862 7840 7821 7790 7775 7763 7744 7731 7715 7696 7685 7670 7654 7642 7624 7594 7573 7552 7529 7506 7489 7473 7450 7433 7415 7378 7355 7348 7323 7311 7288 7274 7265 7246 7234 7217 7205 7184 7172 7154 7136 7114 7092 7084 7076 7069 7043 7016 6998 6978 6960 6944 6932 6912 6903 6886 6869 6858 6847 6836 6826 6821 6809 6799 6780 6767 6740 6729 6713 6705 6687 6671 6660 6624 6608 6594 6562 6535 6523 6513 6500 6487 6478 6463 6449 6430 6415 6409 6403 6383 6373 6360 6349 6328 6316 6303 6290 6281 6265 6249 6228 6209 6188 6179 6146 6124 6106 6079 6055 6042 6028 6014 5997 5981 5968 5946 5934 5923 5912 5898 5867 5841 5831 5816 5788 5766 5752 5744 5732 5716 5706 5693 5681 5663 5642 5625 5600 5577 5559 5548 5532 5512 5490 5473 5456 5442 5422 5405 5388 5378 5368 5355 5339 5329 5315 5300 5284 5274 5262 5244 5231 5211 5198 5185 5165 5145 5126 5112 5097 5082 5062 5043 5015 5002 4986 4969 4951 4933 4910 4886 4865 4854 4834 4815 4796 4782 4763 4745 4717 4696 4677 4642 4620 4612 4604 4595 4564 4543 4530 4508 4493 4463 4430 4391 4372 4347 4335 4319 4300 4291 4261 4244 4230 4203 4184 4163 4157 4116 4100 4053 4025 3989 3963 3920 3882 3830 3788 3755 3717 3659 3602 3559 3521 3477 3446 3409 3354 3312 3273 3263 3242 3228 3211 3190 3166 3151 3131 3084 3065 3034 2988 2970 2930 2906 2877 2842 2812 2798 2669 2630 2609 2572 2549 2503 2468 2446 2428 2412 2389 2369 2358 2348 2324 2307 2277 2267 2243 2221 2204 2180 2150 2128 2117 2095 2077 2065 2038 2023 2015 1987 1971 1953 1923 1902 1890 1881 1857 1838 1817 1801 1784 1765 1758 1745 1733 1719 1703 1690 1683 1668 1639 1621 1589 1555 1516 1490 1461 1433 1410 1384 1369 1338 1314 1291 1266 1256 1243 1237 1226 1199 1192 1187 1163 1154 1145 1139 1117 1086 1066 1034 1013 978 943 911 897 883 861 836 828 817 803 785 755 731 694 644 618 572 390 338 322 308 281 234 209 196 181 168 1 1 1 1 1 12557109 12895971 970 506071 31003 9. 16 120 16 4 960612 223004 buskom1 7 3 1995 306 algftnrts 0 1 0 2 *version 982 400 982 4 flushout 982 44 982 4 911004 101112 sendmessage 983 106 983 12 910308 134214 copyout 984 244 984 12 890821 163833 getzone6 0 410 0 0 out 985 178 985 12 940411 220029 testbit 988 414 988 18 940411 222629 findfpparam 991 46 991 18 890821 163814 system 994 238 994 18 movestring 994 56 994 18 890821 163907 outdate 995 124 995 18 isotable 996 176 995 18 890821 163656 write 1001 310 1001 152 intable 1002 34 1001 152 890821 163503 read 1006 24 1006 340 890821 163714 tofrom 993 420 991 18 stderror 1008 80 1008 340 890821 163740 open 1012 112 1012 340 890821 163754 monitor 1009 344 1008 340 close 1010 22 1008 340 setposition 993 378 991 18 increase 1000 50 995 18 outchar 995 26 995 18 replacechar 1015 98 1015 340 951214 094619 systime 0 1700 0 0 trapmode 1016 302 1016 340 trap 1016 112 1016 340 890821 163915 initzones 1017 268 1017 340 940411 222959 læsbitia 1018 22 1018 340 sign 1018 28 1018 340 890821 163648 ln 1019 432 1019 340 810409 111908 skrivhele 984 320 984 12 setzone6 1027 52 1027 340 inrec6 1027 28 1027 340 890821 163732 changerec6 1028 228 1028 340 940411 222949 sætbitia 1002 36 1001 152 readchar 1029 348 1029 340 940411 222633 læstegn 1699 0 0 0 000003 rs proc 1030 278 1030 340 940411 222636 skrivtegn 1031 384 1031 340 940411 222639 afsluttext 1032 394 1032 340 940411 222952 læsbiti 1033 498 1033 340 960610 222201 systid 1035 28 1035 340 getnumber 1035 18 1035 340 900925 171358 putnumber 1 656 0 0 errorbits 1042 60 1042 342 940411 222943 sætbiti 1043 354 1043 342 940411 222801 openbs 1045 228 1045 342 940411 222742 hægttekst 1027 54 1027 340 outrec6 0 1704 0 0 alarmcause 1046 332 1046 342 940411 222745 hægtstring 1047 254 1047 342 940411 222749 anbringtal 1001 288 1001 152 repeatchar 1048 444 1048 342 940411 223002 intg 1049 350 1049 342 940411 222739 binærsøg 1018 20 1018 340 sgn 1050 380 1050 342 940411 222646 skrivtext 1027 56 1027 340 swoprec6 1054 56 1051 342 passivate 1051 40 1051 342 890821 163947 activity 1056 78 1056 350 260479 150000 mon 1 1043 1056 350 monw2 1 1039 1056 350 monw0 1 1041 1056 350 monw1 1053 56 1051 342 activate 0 1588 0 0 endaction 1056 320 1056 350 reflectcore 1052 50 1051 342 newactivity 1057 372 1057 358 940327 154135 setcspterm 1059 428 1059 358 941030 233200 slices 1063 52 1063 358 890821 163933 lock 1063 258 1063 358 locked 0 1612 0 0 blocksread 0 1642 0 0 blocksout 1064 162 1064 358 940411 222622 fpparam 1 1049 1065 358 nl 1 1047 1065 358 220978 131500 bel 1066 330 1066 446 940411 222722 ud 1067 252 1067 446 940411 222656 taltekst 1 1045 1056 350 monw3 984 296 984 12 getshare6 984 398 984 12 setshare6 70 480 1070 446 0 algol end 1070 *if ok.no *if warning.yes *o c ▶EOF◀