|
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 - download
Length: 994560 (0xf2d00) Types: TextFile Names: »buskom1ud «, »buskomud «
└─⟦110021343⟧ Bits:30007476 RC8000 Backup tape fra HT's bus-radio system └─⟦a957ba283⟧ └─ ⟦this⟧ »buskom1ud « └─ ⟦this⟧ »buskomud «
*mode 8.no 9.no *buskom1=algol buskom1text list.yes blocks.yes xref.no details, * .8.9 message.yes buskom1text d.12477717.1610 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 integer array ialt(1:5); 3 810 real r; 3 811 3 811 for typ:= 1 step 1 until 5 do ialt(typ):= 0; 3 812 write(z,"nl",2,<:+++++ opkaldstællere +++++:>,"nl",2, 3 813 <:omr ud ind-alm ind-nød ej.forb optaget:>,"nl",1); 3 814 for omr:= 1 step 1 until max_antal_områder do 3 815 begin 4 816 write(z,true,6,string område_navn(omr),":",1); 4 817 for typ:= 1 step 1 until 5 do 4 818 begin 5 819 write(z,<< ddddddd>,opkalds_tællere((omr-1)*5+typ)); 5 820 ialt(typ):= ialt(typ)+opkalds_tællere((omr-1)*5+typ); 5 821 end; 4 822 outchar(z,'nl'); 4 823 end; 3 824 write(z,"-",47,"nl",1,<:I ALT ::>); 3 825 for typ:= 1 step 1 until 5 do 3 826 write(z,<< ddddddd>,ialt(typ)); 3 827 outchar(z,'nl'); 3 828 3 828 for typ:= 1 step 1 until 5 do ialt(typ):= 0; 3 829 write(z,"nl",1, 3 830 <:oper. ud ind-alm ind-nød ej.forb optaget:>,"nl",1); 3 831 for omr:= 1 step 1 until max_antal_operatører do 3 832 begin 4 833 if bpl_navn(omr)=long<::> then 4 834 write(z,"sp",6-write(z,<:op:>,<<d>,omr),":",1) 4 835 else 4 836 write(z,true,6,string bpl_navn(omr),":",1); 4 837 for typ:= 1 step 1 until 5 do 4 838 begin 5 839 write(z,<< ddddddd>,operatør_tællere((omr-1)*5+typ)); 5 840 ialt(typ):= ialt(typ)+operatør_tællere((omr-1)*5+typ); 5 841 end; 4 842 outchar(z,'nl'); 4 843 end; 3 844 write(z,"-",47,"nl",1,<:I ALT ::>); 3 845 for typ:= 1 step 1 until 5 do 3 846 write(z,<< ddddddd>,ialt(typ)); 3 847 outchar(z,'nl'); 3 848 3 848 rpc:= replace_char(1,':'); 3 849 write(z,"nl",1,<:nulstilles :>); 3 850 if nulstil_systællere = (-1) then write(z,<:ikke automatisk:>,"nl",1) 3 851 else write(z,<:automatisk kl. :>,<<zd dd dd>,nulstil_systællere,"nl",1); 3 852 replace_char(1,'.'); 3 853 write(z,<:nulstillet d. :>,<<zd dd dd>, 3 854 systime(4,systællere_nulstillet,r)," ",1); 3 855 replace_char(1,':'); 3 856 write(z,<<zd dd dd>,r,"nl",1); 3 857 replace_char(1,rpc); 3 858 end; 2 859 \f 2 859 message procedure start_operation side 1 - 810521/hko; 2 860 2 860 procedure start_operation(op_ref,kor,ret_sem,kode); 2 861 value kor,ret_sem,kode; 2 862 integer array field op_ref; 2 863 integer kor,ret_sem,kode; 2 864 <* 2 865 op_ref: kald, reference til operation 2 866 2 866 kor: kald, kilde= hovedmodulnr*100 +løbenr 2 867 = korutineident. 2 868 ret_sem: kald, retursemafor 2 869 2 869 kode: kald, suppl shift 12 + operationskode 2 870 2 870 proceduren initialiserer en operations hoved med 2 871 parameterværdierne samt tidfeltet med aktueltid. 2 872 resultatfelt og datafelter nulstilles. 2 873 2 873 *> 2 874 begin 3 875 integer i; 3 876 d.op_ref.kilde:= kor; 3 877 systime(1,0,d.op_ref.tid); 3 878 d.op_ref.retur:=ret_sem; 3 879 d.op_ref.op_kode:=kode; 3 880 d.op_ref.resultat:=0; 3 881 for i:=(d.op_ref.opsize-data)//2 step -1 until 1 do 3 882 d.op_ref.data(i):=0; 3 883 end start_operation; 2 884 \f 2 884 message procedure afslut_operation side 1 - 810331/hko; 2 885 2 885 procedure afslut_operation(op_ref,sem); 2 886 value op_ref,sem; 2 887 integer op_ref,sem; 2 888 begin 3 889 integer array field op; 3 890 op:=op_ref; 3 891 if sem>0 then signal_ch(sem,op,d.op.optype) else 3 892 if sem=-1 then signal_ch(d.op.retur,op,d.op.optype) else 3 893 ; 3 894 end afslut_operation; 2 895 \f 2 895 message procedure fejlreaktion - side 1 - 810424/cl,hko; 2 896 2 896 procedure fejlreaktion(nr,værdi,str,måde); 2 897 value nr,værdi,måde; 2 898 integer nr,værdi,måde; 2 899 string str; 2 900 begin 3 901 disable begin 4 902 write(out,<:<10>!!! :>); 4 903 if nr>0 and nr <=max_antal_fejltekster then 4 904 write(out,string fejltekst(nr)) 4 905 else write(out,<:fejl nr.:>,nr); 4 906 outchar(out,'sp'); 4 907 if måde shift (-12) extract 2=1 then 4 908 outintbits(out,værdi) 4 909 else 4 910 if måde shift (-12) extract 2=2 then 4 911 write(out,<:":>,false add værdi,1,<:":>) 4 912 else 4 913 write(out,værdi); 4 914 write(out,"sp",1,str,"nl",1,<< zddddd>,systime(5,0,r),r, 4 915 <: korutine nr=:>,<<d>, abs curr_coruno, 4 916 <: ident=:>,curr_coruid,"nl",0); 4 917 if testbit27 and måde extract 12=1 then 4 918 trace(1); 4 919 ud; 4 920 end;<*disable*> 3 921 if måde extract 12 =2 then trapmode:=1 shift 13; 3 922 if måde extract 12= 0 then trap(-1) 3 923 else if måde extract 12 = 2 then trap(-2); 3 924 end fejlreaktion; 2 925 2 925 procedure trace(n); 2 926 value n; 2 927 integer n; 2 928 begin 3 929 trap(finis); 3 930 trap(n); 3 931 finis: 3 932 end trace; 2 933 \f 2 933 message procedure overvåget side 1 - 810413/cl; 2 934 2 934 boolean procedure overvåget; 2 935 begin 3 936 disable begin 4 937 integer i,måde; 4 938 integer array field cor; 4 939 integer array ia(1:12); 4 940 4 940 i:= system(12,0,ia); 4 941 if i > 0 then 4 942 begin 5 943 i:= system(12,1,ia); 5 944 måde:= ia(3); 5 945 end 4 946 else måde:= 0; 4 947 4 947 if måde<>0 then 4 948 begin 5 949 cor:= coroutine(abs ia(3)); 5 950 overvåget:= d.cor.corutestmask shift (-11); 5 951 end 4 952 else overvåget:= cl_overvåget; 4 953 end; 3 954 end; 2 955 \f 2 955 message procedure antal_bits_ia side 1 - 940424/cl; 2 956 2 956 integer procedure antal_bits_ia(ia,n,ø); 2 957 value n,ø; 2 958 integer array ia; 2 959 integer n,ø; 2 960 begin 3 961 integer i, ant; 3 962 3 962 ant:= 0; 3 963 for i:= n step 1 until ø do 3 964 if læsbit_ia(ia,i) then ant:= ant+1; 3 965 end; 2 966 2 966 message procedure trunk_til_omr side 1 - 881006/cl; 2 967 2 967 integer procedure trunk_til_omr(trunk); 2 968 value trunk; integer trunk; 2 969 begin 3 970 integer i,j; 3 971 3 971 j:=0; 3 972 for i:= 1 step 1 until max_antal_områder do 3 973 if område_id(i,2) extract 12 = trunk extract 12 then j:=i; 3 974 trunk_til_omr:=j; 3 975 end; 2 976 2 976 integer procedure omr_til_trunk(omr); 2 977 value omr; integer omr; 2 978 begin 3 979 omr_til_trunk:= område_id(omr,2) extract 12; 3 980 end; 2 981 2 981 integer procedure port_til_omr(port); 2 982 value port; integer port; 2 983 begin 3 984 if port shift (-6) extract 6 = 2 then 3 985 port_til_omr:= pabx_id(port extract 6) 3 986 else 3 987 if port shift (-6) extract 6 = 3 then 3 988 port_til_omr:= radio_id(port extract 6) 3 989 else 3 990 port_til_omr:= 0; 3 991 end; 2 992 2 992 integer procedure kanal_til_port(kanal); 2 993 value kanal; integer kanal; 2 994 begin 3 995 kanal_til_port:= kanal_id(kanal) shift (-5) extract 3 shift 6 + 3 996 kanal_id(kanal) extract 5; 3 997 end; 2 998 2 998 integer procedure port_til_kanal(port); 2 999 value port; integer port; 2 1000 begin 3 1001 integer i,j; 3 1002 3 1002 j:=0; 3 1003 for i:= 1 step 1 until max_antal_kanaler do 3 1004 if kanal_id(i) = port shift (-6) shift 5 + port extract 5 then j:=i; 3 1005 port_til_kanal:= j; 3 1006 end; 2 1007 2 1007 integer procedure kanal_til_omr(kanal); 2 1008 value kanal; integer kanal; 2 1009 begin 3 1010 kanal_til_omr:= port_til_omr( kanal_til_port(kanal) ); 3 1011 end; 2 1012 2 1012 \f 2 1012 message procedure out_xxx_bits side 1 - 810406/cl; 2 1013 2 1013 procedure outboolbits(zud,b); 2 1014 value b; 2 1015 zone zud; 2 1016 boolean b; 2 1017 begin 3 1018 integer i; 3 1019 3 1019 for i:= -11 step 1 until 0 do 3 1020 outchar(zud,if b shift i then '1' else '.'); 3 1021 end; 2 1022 2 1022 procedure outintbits(zud,j); 2 1023 value j; 2 1024 zone zud; 2 1025 integer j; 2 1026 begin 3 1027 integer i; 3 1028 3 1028 for i:= -23 step 1 until 0 do 3 1029 begin 4 1030 outchar(zud,if j shift i extract 1 = 1 then '1' else '.'); 4 1031 if i<>0 and abs(i) mod 6 = 0 then outchar(zud,'sp'); 4 1032 end; 3 1033 end; 2 1034 2 1034 procedure outintbits_ia(zud,ia,n,ø); 2 1035 value n,ø; 2 1036 zone zud; 2 1037 integer array ia; 2 1038 integer n,ø; 2 1039 begin 3 1040 integer i; 3 1041 3 1041 for i:= n step 1 until ø do 3 1042 begin 4 1043 outintbits(zud,ia(i)); 4 1044 outchar(zud,'nl'); 4 1045 end; 3 1046 end; 2 1047 2 1047 real procedure now; 2 1048 begin 3 1049 real f,r,r1; long l; 3 1050 3 1050 systime(1,0,r); l:=r*100; f:=(l mod 100)/100; 3 1051 systime(4,r,r1); 3 1052 now:= r1+f; 3 1053 end; 2 1054 \f 2 1054 message procedure skriv_id side 1 - 820301/cl; 2 1055 2 1055 procedure skriv_id(z,id,lgd); 2 1056 value id,lgd; 2 1057 integer id,lgd; 2 1058 zone z; 2 1059 begin 3 1060 integer type,p,li,lø,bo; 3 1061 3 1061 type:= id shift (-22); 3 1062 case type+1 of 3 1063 begin 4 1064 <* 1: bus *> 4 1065 begin 5 1066 p:= write(z,<<d>,id extract 14); 5 1067 if id shift (-14) <> 0 then 5 1068 p:= p + write(z,".",1,string bpl_navn(id shift (-14))); 5 1069 end; 4 1070 4 1070 <* 2: linie/løb *> 4 1071 begin 5 1072 li:= id shift (-12) extract 10; 5 1073 bo:= id shift (-7) extract 5; 5 1074 if bo<>0 then bo:= bo + 'A' - 1; 5 1075 lø:= id extract 7; 5 1076 p:= write(z,<<d>,li,false add bo,(bo<>0) extract 1,"/",1,lø); 5 1077 end; 4 1078 4 1078 <* 3: gruppe *> 4 1079 begin 5 1080 if id shift (-21) = 4 <* linie-gruppe *> then 5 1081 begin 6 1082 li:= id shift (-5) extract 10; 6 1083 bo:= id extract 5; 6 1084 if bo<>0 then bo:= bo + 'A' - 1; 6 1085 p:= write(z,<<d>,li,false add bo,(bo<>0) extract 1); 6 1086 end 5 1087 else <* special-gruppe *> 5 1088 p:= write(z,"G",1,<<d>,id extract 7); 5 1089 end; 4 1090 4 1090 <* 4: telefon *> 4 1091 begin 5 1092 bo:= id shift (-20) extract 2; 5 1093 li:= id extract 20; 5 1094 case bo+1 of 5 1095 begin 6 1096 p:= write(z,string kanalnavn(li)); 6 1097 p:= write(z,<:K*:>); 6 1098 p:= write(z,<:OMR :>,string områdenavn(li)); 6 1099 p:= write(z,<:OMR*:>); 6 1100 end; 5 1101 end; 4 1102 end case; 3 1103 write(z,"sp",lgd-p); 3 1104 end skriv_id; 2 1105 <*+3*> 2 1106 \f 2 1106 message skriv_new_sem side 1 - 810520/cl; 2 1107 2 1107 procedure skriv_new_sem(z,type,ref,navn); 2 1108 value type,ref; 2 1109 zone z; 2 1110 integer type,ref; 2 1111 string navn; 2 1112 <* skriver en identifikation af en semafor 'ref' i zonen z. 2 1113 2 1113 type: 1=binær sem 2 1114 2=simpel sem 2 1115 3=kædet sem 2 1116 2 1116 ref: semaforreference 2 1117 2 1117 navn: semafornavn, max 18 tegn 2 1118 *> 2 1119 begin 3 1120 disable if testbit29 then 3 1121 write(z,"nl",1,"sp",26*(type-1),case type of(<:bs:>,<:ss:>,<:cs:>), 3 1122 true,5,<<zddd>,ref,true,19,navn); 3 1123 end; 2 1124 \f 2 1124 message procedure skriv_newactivity side 1 - 810520/hko/cl; 2 1125 2 1125 <**> procedure skriv_newactivity(zud,actno,cause); 2 1126 <**> value actno,cause; 2 1127 <**> zone zud; 2 1128 <**> integer actno,cause; 2 1129 <**> begin 3 1130 <*+2*> 3 1131 <**> if testbit28 then 3 1132 <**> begin integer array field cor; 4 1133 <**> cor:= coroutine(actno); 4 1134 <**> write(zud,<: coroutine::>,<< dd>,actno,<: ident::>, 4 1135 <**> << zdd>,d.cor.coruident//1000); 4 1136 <**> end; 3 1137 <**> if -, testbit23 then goto skriv_newact_slut; 3 1138 <*-2*> 3 1139 <**> write(zud,"nl",1,<:newactivity(:>,<<d>,actno, 3 1140 <**> <:) cause=:>,<<-d>,cause); 3 1141 <**> if cause<1 then write(zud,<: !!!:>); 3 1142 <**> skriv_coru(zud,actno); 3 1143 <**> skriv_newact_slut: 3 1144 <**> end skriv_newactivity; 2 1145 <*-3*> 2 1146 <*+99*> 2 1147 \f 2 1147 message procedure skriv_activity side 1 - 810313/hko; 2 1148 2 1148 <**> procedure skriv_activity(zud,actno); 2 1149 <**> value actno; 2 1150 <**> zone zud; 2 1151 <**> integer actno; 2 1152 <**> begin 3 1153 <**> integer i; 3 1154 <**> integer array iact(1:12); 3 1155 <**> 3 1156 <**> i:=system(12,actno,iact); 3 1157 <**> write(zud,"nl",1,<: activity(:>,<<d>,actno,<:) af :>,i,"sp",1, 3 1158 <**> if i=0 then <:neutral:> else (case sign(iact(3))+2 of 3 1159 <**> (<:disable:>,<:monitor:>,<:activity:>)),<: mode:>); 3 1160 <**> if i>0 and actno>0 and actno<=i then 3 1161 <**> begin 4 1162 <**> write(zud,"nl",1,"sp",4,<:tilstand= :>,case iact(8)+1 of 4 1163 <**> (<:tom:>,<:passivate:>, 4 1164 <**> <:implicit passivate:>,<:activate:>)); 4 1165 <**> if iact(1)<>0 then 4 1166 <**> write(zud,<: ventende på message:>,iact(1)); 4 1167 <**> if iact(7)>0 then 4 1168 <**> write(zud,"nl",1,"sp",4,<:virtuel stak::>,iact(7),"sp",2, 4 1169 <**> <:hovedlager stak benyttes af activity(:>,<<d>, 4 1170 <**> iact(2)); 4 1171 <**> write(zud,"nl",1,"sp",4,<:stak(top,bund,sidst,csr,cza)=:>, 4 1172 <**> iact(4),iact(5),iact(6),iact(10),iact(11)); 4 1173 <**> if iact(9)<> 1 shift 22 then 4 1174 <**> write(zud,"nl",1,"sp",4,<:'head of zonechain'=:>,iact(9)); 4 1175 <**> write(zud,"nl",1,"sp",4,<:'trap chain'=:>,iact(12)); 4 1176 <**> end; 3 1177 <**> end skriv_activity 2 1178 <*-99*> 2 1179 <*+98*> 2 1180 \f 2 1180 message procedure identificer side 1 - 810520/cl; 2 1181 2 1181 procedure identificer(z); 2 1182 zone z; 2 1183 begin 3 1184 disable write(z,<:coroutine::>,<< dd>,curr_coruno, 3 1185 <: ident::>,<< zdd >,curr_coruid); 3 1186 end; 2 1187 \f 2 1187 message procedure skriv_coru side 1 - 810317/cl; 2 1188 2 1188 <**> procedure skriv_coru(zud,cor_no); 2 1189 <**> value cor_no; 2 1190 <**> zone zud; 2 1191 <**> integer cor_no; 2 1192 <**> begin 3 1193 <**> integer i; 3 1194 <**> integer array field cor; 3 1195 <**> 3 1196 <**> 3 1197 <**> write(zud,"nl",1,<: coroutine: :>,<<d>,cor_no); 3 1198 <**> 3 1199 <**> cor:= coroutine(cor_no); 3 1200 <**> if cor = -1 then 3 1201 <**> write(zud,<: eksisterer ikke !!!:>) 3 1202 <**> else 3 1203 <**> begin 4 1204 <**> write(zud,<:; ident = :>,<<zdd>,d.cor.coruident//1000, 4 1205 <**> <: refbyte: :>,<<d>,cor,"nl",1, 4 1206 <**> <: prev: :>,<<dddd>,d.cor.prev,"nl",1, 4 1207 <**> <: next: :>,d.cor.next,"nl",1, 4 1208 <**> <: timerchain.prev: :>,d.cor(corutimerchain//2-1),"nl",1, 4 1209 <**> <: timerchain.next: :>,d.cor.corutimerchain,"nl",1, 4 1210 <**> <: opchain.prev: :>,d.cor(coruop//2-1),"nl",1, 4 1211 <**> <: opchain.next: :>,d.cor.coruop,"nl",1, 4 1212 <**> <: timer: :>,d.cor.corutimer,"nl",1, 4 1213 <**> <: priority: :>,d.cor.corupriority,"nl",1, 4 1214 <**> <: typeset: :>); 4 1215 <**> for i:= -11 step 1 until 0 do 4 1216 <**> write(zud,if d.cor.corutypeset shift i then <:1:> else <:.:>); 4 1217 <**> write(zud,"nl",1,<: testmask: :>); 4 1218 <**> for i:= -11 step 1 until 0 do 4 1219 <**> write(zud,if d.cor.corutestmask shift i then <:1:> else <:.:>); 4 1220 <*+99*> 4 1221 <**> skriv_activity(zud,cor_no); 4 1222 <*-99*> 4 1223 <**> end; 3 1224 <**> end skriv_coru; 2 1225 <*-98*> 2 1226 <*+98*> 2 1227 \f 2 1227 message procedure skriv_op side 1 - 810409/cl; 2 1228 2 1228 <**> procedure skriv_op(zud,opref); 2 1229 <**> value opref; 2 1230 <**> integer opref; 2 1231 <**> zone zud; 2 1232 <**> begin 3 1233 <**> integer array field op; 3 1234 <**> real array field raf; 3 1235 <**> integer lgd,i; 3 1236 <**> real t; 3 1237 <**> 3 1238 <**> raf:= data; 3 1239 <**> op:= opref; 3 1240 <**> write(zud,"nl",1,<:op:>,<<d>,opref,<:::>); 3 1241 <**> if opref<first_op ! optop<=opref then 3 1242 <**> begin 4 1243 <**> write(zud,<: !!! illegal reference !!!:>,"nl",1); 4 1244 <**> goto slut_skriv_op; 4 1245 <**> end; 3 1246 <**> 3 1247 <**> lgd:= d.op.opsize; 3 1248 <**> write(zud,"nl",1,<<d>, 3 1249 <**> <: opsize :>,d.op.opsize,"nl",1, 3 1250 <**> <: optype :>); 3 1251 <**> for i:= -11 step 1 until 0 do 3 1252 <**> write(zud,if d.op.optype shift i then <:1:> else <:.:>); 3 1253 <**> write(zud,"nl",1,<<d>, 3 1254 <**> <: prev :>,d.op.prev,"nl",1, 3 1255 <**> <: next :>,d.op.next); 3 1256 <**> if lgd=0 then goto slut_skriv_op; 3 1257 <**> write(zud,"nl",1,<<d>, 3 1258 <**> <: kilde :>,d.op.kilde extract 10,"nl",1, 3 1259 <**> <: tid :>,<<zddddd>,systime(4,d.op.tid,t),<:.:>,t,"nl",1,<<d>, 3 1260 <**> <: retur-sem :>,if d.op.retur<>0 then <:cs:> else <:--:>,<<b>, 3 1261 d.op.retur,"nl",1, 3 1262 <**> <: opkode :>,<<b>,d.op.opkode shift (-12),"sp",1,<<d>, 3 1263 <**> d.op.opkode extract 12,"nl",1, 3 1264 <**> <: resultat :>,d.op.resultat,"nl",2, 3 1265 <**> <:data::>); 3 1266 <**> skriv_hele(zud,d.op.raf,lgd-data,1278); 3 1267 <**>slut_skriv_op: 3 1268 <**> end skriv_op; 2 1269 <*-98*> 2 1270 \f 2 1270 message procedure corutable side 1 - 810406/cl; 2 1271 2 1271 procedure corutable(zud); 2 1272 zone zud; 2 1273 begin 3 1274 integer i; 3 1275 integer array field cor; 3 1276 3 1276 write(zud,"ff",1,<:***** coroutines *****:>,"nl",2, 3 1277 <:no id ref chain timerch opchain timer pr:>, 3 1278 <: typeset testmask:>,"nl",2); 3 1279 for i:= 1 step 1 until maxcoru do 3 1280 begin 4 1281 cor:= coroutine(i); 4 1282 write(zud,<<zd>,i,<< zdd>,d.cor.coruident//1000,<< dddd>,cor, 4 1283 d.cor.prev,d.cor.next,d.cor(corutimerchain//2-1), 4 1284 d.cor.corutimerchain,d.cor(coruop//2-1),d.cor.coruop,<< ddddd>, 4 1285 d.cor.corutimer,<< dd>,d.cor.corupriority); 4 1286 outchar(zud,'sp'); 4 1287 outboolbits(zud,d.cor.corutypeset); 4 1288 outchar(zud,'sp'); 4 1289 outboolbits(zud,d.cor.corutestmask); 4 1290 outchar(zud,'nl'); 4 1291 end; 3 1292 end; 2 1293 \f 2 1293 message filglobal side 1 - 790302/jg; 2 1294 2 1294 integer 2 1295 dbantsf,dbkatsfri, 2 1296 dbantb,dbkatbfri, 2 1297 dbantef,dbkatefri, 2 1298 dbsidstesz,dbsidstetz, 2 1299 dbsegmax, 2 1300 filskrevet,fillæst; 2 1301 integer 2 1302 bs_kats_fri, bs_kate_fri, 2 1303 cs_opret_fil, cs_tilknyt_fil, 2 1304 cs_frigiv_fil, cs_slet_fil, 2 1305 cs_opret_spoolfil, cs_opret_eksternfil; 2 1306 integer array 2 1307 dbkatt(1:dbmaxtf,1:2), 2 1308 dbkats(1:dbmaxsf,1:2), 2 1309 dbkate(1:dbmaxef,1:6), 2 1310 dbkatz(1:dbantez+dbantsz+dbanttz,1:2); 2 1311 boolean array 2 1312 dbkatb(1:dbmaxb); 2 1313 zone array 2 1314 fil(dbantez+dbantsz+dbanttz,128,1,stderror); 2 1315 \f 2 1315 message hentfildim side 1 - 781120/jg; 2 1316 2 1316 2 1316 integer procedure hentfildim(fdim); 2 1317 integer array fdim; 2 1318 <*inddata filref i fdim(4),uddata fdim(1:8)*> 2 1319 2 1319 begin integer ftype,fno,katf,i,s; 3 1320 ftype:=fdim(4) shift (-10); 3 1321 fno:=fdim(4) extract 10; 3 1322 if ftype>3 or ftype=0 or fno=0 then 3 1323 begin s:=1; goto udgang; end; 3 1324 if fno>(case ftype of(dbmaxtf,dbmaxsf,dbmaxef)) then 3 1325 begin s:=1; goto udgang end; <*paramfejl*> 3 1326 katf:=case ftype of(dbkatt(fno,1),dbkats(fno,1),dbkate(fno,1)); 3 1327 if katf extract 9 = 0 then 3 1328 begin s:=2; goto udgang end; <*tom indgang*> 3 1329 3 1329 fdim(1):=katf shift (-9); <*post antal*> 3 1330 fdim(2):=katf extract 9; <*post længde*> 3 1331 fdim(3):=case ftype of( <*seg antal*> 3 1332 dbkatt(fno,2) extract 18 - (if fno=1 then dbblokt else dbkatt(fno-1,2) 3 1333 extract 18), dbkats(fno,2) shift (-12) extract 6 * dbbidlængde, 3 1334 dbkate(fno,2) extract 18); 3 1335 for i:=5 step 1 until 8 do <*externt filnavn*> 3 1336 fdim(i):=if ftype=3 then dbkate(fno,i-2) else 0; 3 1337 s:=0; 3 1338 udgang: 3 1339 hentfildim:=s; 3 1340 <*+2*> 3 1341 <*tz*> if testbit24 and overvåget then <*zt*> 3 1342 <*tz*> begin <*zt*> 4 1343 <*tz*> write(out,<:<10>hentfildim::>,s,<: :>); <*zt*> 4 1344 <*tz*> pfdim(fdim); <*zt*> 4 1345 <*tz*> ud; <*zt*> 4 1346 <*tz*> end; <*zt*> 3 1347 <*-2*> 3 1348 end hentfildim; 2 1349 \f 2 1349 message sætfildim side 1 - 780916/jg; 2 1350 2 1350 integer procedure sætfildim(fdim); 2 1351 integer array fdim; 2 1352 <*inddata fdim(1:4), segant ingen effekt for tabel- og spoolfil*> 2 1353 2 1353 begin 3 1354 integer ftype,fno,katf,s,pl; 3 1355 integer array gdim(1:8); 3 1356 gdim(4):=fdim(4); 3 1357 s:=hentfildim(gdim); 3 1358 if s>0 then 3 1359 goto udgang; 3 1360 fno:=fdim(4) extract 10; 3 1361 ftype:=fdim(4) shift (-10); 3 1362 pl:= fdim(2) extract 12; 3 1363 if fdim(1)<0 or pl<1 or pl>256 or fdim(3)<0 then 3 1364 begin 4 1365 s:=1; <*parameter fejl*> 4 1366 goto udgang 4 1367 end; 3 1368 if fdim(1)>256//pl*fdim(3) then 3 1369 begin 4 1370 s:=1; 4 1371 goto udgang; 4 1372 end; 3 1373 3 1373 <*segant*> 3 1374 if ftype=3 then 3 1375 begin integer segant; 4 1376 segant:= fdim(3); 4 1377 if segant > dbsegmax then 4 1378 begin 5 1379 s:=4; <*ingen plads*> 5 1380 goto udgang 5 1381 end; 4 1382 \f 4 1382 message sætfildim side 2 - 780916/jg; 4 1383 4 1383 4 1383 if segant<>gdim(3) then 4 1384 begin integer i,z,s; array field enavn; integer array tail(1:10); 5 1385 z:=dbkate(fno,2) shift (-19); if z>0 then begin 6 1386 if dbkatz(z,1) extract 12=fdim(4) then <*zone tilknyttet*> 6 1387 begin integer array zd(1:20); 7 1388 getzone6(fil(z),zd); 7 1389 if zd(13)>5 and zd(9)>=segant then 7 1390 begin <*dødt segment skal ikke udskrives*> 8 1391 zd(13):=5; 8 1392 setzone6(fil(z),zd) 8 1393 end 7 1394 end end; 5 1395 \f 5 1395 message sætfildim side 3 - 801031/jg; 5 1396 5 1396 5 1396 enavn:=8; <*ændr fil størrelse*> 5 1397 i:=1; 5 1398 open(zdummy,0,string gdim.enavn(increase(i)),0); 5 1399 s:=monitor(42,zdummy,0,tail); <*lookup*> 5 1400 if s>0 then 5 1401 fejlreaktion(1,s,<:lookup entry:>,0); 5 1402 tail(1):=segant; 5 1403 s:=monitor(44,zdummy,0,tail); <*change entry*> 5 1404 close(zdummy,false); 5 1405 if s<>0 then 5 1406 begin 6 1407 if s=6 then 6 1408 begin <*ingen plads*> 7 1409 s:=4; goto udgang 7 1410 end 6 1411 else fejlreaktion(1,s,<:change entry:>,0); 6 1412 end; 5 1413 dbkate(fno,2):=dbkate(fno,2) shift (-18) shift (18) 5 1414 add segant; 5 1415 \f 5 1415 message sætfildim side 4 - 801013/jg; 5 1416 5 1416 5 1416 end; 4 1417 fdim(3):=segant 4 1418 end 3 1419 else 3 1420 if fdim(3)>gdim(3) then 3 1421 begin 4 1422 s:=4; <*altid ingen plads*> 4 1423 goto udgang 4 1424 end 3 1425 else fdim(3):=gdim(3); <*samme længde*> 3 1426 <*postantal,postlængde*> 3 1427 katf:=fdim(1) shift 9 add pl; 3 1428 case ftype of begin 4 1429 dbkatt(fno,1):=katf; 4 1430 dbkats(fno,1):=katf; 4 1431 dbkate(fno,1):=katf end; 3 1432 udgang: 3 1433 sætfildim:=s; 3 1434 <*+2*> 3 1435 <*tz*> if testbit24 and overvåget then <*zt*> 3 1436 <*tz*> begin integer i; <*zt*> 4 1437 <*tz*> write(out,<:<10>sætfildim::>,s,<: :>); <*zt*> 4 1438 <*tz*> for i:=1 step 1 until 3 do gdim(i):=fdim(i); <*zt*> 4 1439 <*tz*> pfdim(gdim); <*zt*> 4 1440 <*tz*> ud; <*zt*> 4 1441 <*tz*> end; <*zt*> 3 1442 <*-2*> 3 1443 end sætfildim; 2 1444 \f 2 1444 message findfilenavn side 1 - 780916/jg; 2 1445 2 1445 integer procedure findfilenavn(navn); 2 1446 real array navn; 2 1447 2 1447 begin 3 1448 integer fno; array field enavn; 3 1449 for fno:=1 step 1 until dbmaxef do 3 1450 if dbkate(fno,1) extract 9>0 then <*optaget indgang*> 3 1451 begin 4 1452 enavn:=fno*12+4; 4 1453 if navn(1)=dbkate.enavn(1) and 4 1454 navn(2)=dbkate.enavn(2) then 4 1455 begin 5 1456 findfilenavn:=fno; 5 1457 goto udgang 5 1458 end 4 1459 end; 3 1460 findfilenavn:=0; 3 1461 udgang: 3 1462 end findfilenavn; 2 1463 \f 2 1463 message læsfil side 1 - 781120/jg; 2 1464 2 1464 integer procedure læsfil(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 læsfil:=tilgangfil(filref,postindex,zoneno,5); 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>læsfil::>,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 skrivfil side 1 - 781120/jg; 2 1481 2 1481 integer procedure skrivfil(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 skrivfil:=tilgangfil(filref,postindex,zoneno,6); 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>skrivfil::>,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 modiffil side 1 - 781120/jg; 2 1498 2 1498 integer procedure modiffil(filref,postindex,zoneno); 2 1499 value filref,postindex; 2 1500 integer filref,postindex,zoneno; 2 1501 <*+2*> 2 1502 <*tz*> begin integer i,o,s; <*zt*> 3 1503 <*tz*> i:=fillæst;o:=filskrevet; s:= <*zt*> 3 1504 <*-2*> 3 1505 3 1505 modiffil:=tilgangfil(filref,postindex,zoneno,7); 3 1506 3 1506 <*+2*> 3 1507 <*tz*> if testbit24 and overvåget then <*zt*> 3 1508 <*tz*> begin <*zt*> 4 1509 <*tz*> write(out,<:<10>modiffil::>,s,filref,postindex,zoneno, <*zt*> 4 1510 <*tz*> <: io::>,fillæst-i,filskrevet-o);ud; <*zt*> 4 1511 <*tz*> end; <*zt*> 3 1512 <*tz*> end procedure; <*zt*> 2 1513 <*-2*> 2 1514 \f 2 1514 message tilgangfil side 1 - 781003/jg; 2 1515 2 1515 integer procedure tilgangfil(filref,postindex,zoneno,operation); 2 1516 value filref,postindex,operation; 2 1517 integer filref,postindex,zoneno,operation; 2 1518 <*proceduren kaldes fra læsfil,skrivfil og modiffil*> 2 1519 2 1519 begin 3 1520 integer ftype,fno,f,pl,pr,pps,seg,zno,zstate,katf,st; 3 1521 integer array zd(1:20),fdim(1:8); 3 1522 3 1522 3 1522 3 1522 <*hent katalog*> 3 1523 3 1523 fdim(4):=filref; 3 1524 st:=hentfildim(fdim); 3 1525 if st<>0 then 3 1526 goto udgang; <*parameter fejl eller fil findes ikke*> 3 1527 fno:=filref extract 10; 3 1528 ftype:=filref shift (-10); 3 1529 pl:=fdim(2); 3 1530 katf:=case ftype of(dbkatt(fno,2),dbkats(fno,2),dbkate(fno,2)); 3 1531 \f 3 1531 message tilgangfil side 2 - 781003/jg; 3 1532 3 1532 3 1532 3 1532 <*find segment adr og check postindex*> 3 1533 3 1533 pps:=256//pl; <*poster pr segment*> 3 1534 seg:=(postindex-1)//pps; <*relativt segment*> 3 1535 pr:=(postindex-1) mod pps; <*post relativ til seg*> 3 1536 if postindex <1 then 3 1537 begin <*parameter fejl*> 4 1538 st:=1; 4 1539 goto udgang 4 1540 end; 3 1541 if seg>=fdim(3) then 3 1542 begin <*post findes ikke*> 4 1543 st:=3; 4 1544 goto udgang 4 1545 end; 3 1546 case ftype of 3 1547 begin <*find absolut segment*> 4 1548 4 1548 <*tabelfil*> 4 1549 seg:=seg+(if fno=1 then dbblokt else dbkatt(fno-1,2) extract 18); 4 1550 4 1550 begin <*spoolfil*> 5 1551 integer i,bidno; 5 1552 bidno:=katf extract 12; 5 1553 for i:=seg//dbbidlængde step -1 until 1 do 5 1554 bidno:=dbkatb(bidno) extract 12; 5 1555 seg:=(bidno-1)*dbbidlængde+seg mod dbbidlængde 5 1556 end; 4 1557 4 1557 <*extern fil,seg ok*> 4 1558 4 1558 end case find abs seg; 3 1559 \f 3 1559 message tilgangfil side 3 - 801030/jg; 3 1560 3 1560 <*alloker zone*> 3 1561 3 1561 zno:=katf shift(-19); 3 1562 case ftype of begin 4 1563 4 1563 begin <*tabelfil*> 5 1564 integer førstetz; 5 1565 førstetz:=dbkatz(dbsidstetz,2); 5 1566 if zno=0 then 5 1567 zno:=førstetz 5 1568 else if dbkatz(zno,1)<>filref then 5 1569 zno:=førstetz 5 1570 else if zno <> førstetz and zno <> dbsidstetz then 5 1571 begin integer z; 6 1572 for z:=zno,dbkatz(z,2) while dbkatz(z,2)<>zno do; 6 1573 dbkatz(z,2):=dbkatz(zno,2); 6 1574 dbkatz(zno,2):=førstetz; 6 1575 dbkatz(dbsidstetz,2):=zno; 6 1576 end; 5 1577 dbsidstetz:=zno 5 1578 end; 4 1579 \f 4 1579 message tilgangfil side 4 - 801030/jg; 4 1580 4 1580 4 1580 begin <*spoolfil*> 5 1581 integer p,zslut,z; 5 1582 if zno>0 then begin if dbkatz(zno,1) =filref then 6 1583 goto udgangs end; <*strategi 1*> 5 1584 p:=0; 5 1585 zno:=dbsidstesz; <*strategi 4 hvis bedre ikke findes*> 5 1586 zslut:= <*if dbantez>dbantef then 1 else*> dbantez+1; 5 1587 for z:=dbantez+dbantsz step -1 until zslut do 5 1588 begin integer zfref; 6 1589 zfref:=dbkatz(z,1); 6 1590 if zfref extract 10=0 then <*fri zone*> 6 1591 begin <*strategi 2*> 7 1592 zno:=z; 7 1593 goto udgangs 7 1594 end 6 1595 else 6 1596 if zfref shift (-10)=2 then 6 1597 begin <*zone tilknyttet spoolfil*> 7 1598 integer q; 7 1599 q:=dbkatz(z,2); <*prioritet*> 7 1600 if q>p then 7 1601 begin <*strategi 3*> 8 1602 p:=q; 8 1603 zno:=z 8 1604 end 7 1605 end; 6 1606 end z; 5 1607 udgangs: 5 1608 if zno> dbantez then dbsidstesz:=zno; 5 1609 end; 4 1610 \f 4 1610 message tilgangfil side 5 - 780916/jg; 4 1611 4 1611 begin <*extern fil*> 5 1612 integer z; 5 1613 if zno=0 then 5 1614 zno:=1 5 1615 else if dbkatz(zno,1) = filref then 5 1616 goto udgange; <*strategi 1*> 5 1617 for z:=1 step 1 until dbantez do 5 1618 begin integer zfref; 6 1619 zfref:=dbkatz(z,1); 6 1620 if zfref=0 then <*zone fri*> 6 1621 begin zno:=z; goto udgange end <*strategi 2*> 6 1622 else if zfref shift (-10) =2 then <*spoolfil*> 6 1623 zno:=z; <*strategi 3*> <*else strategi 4-5*> 6 1624 end z; 5 1625 udgange: 5 1626 end 4 1627 end case alloker zone; 3 1628 3 1628 3 1628 3 1628 <*åbn zone*> 3 1629 3 1629 if zno<=dbantez then 3 1630 begin <*extern zone;spool og tabel zoner altid åbne*> 4 1631 integer zfref; 4 1632 zfref:=dbkatz(zno,1); 4 1633 if zfref<>0 and zfref<>filref and ftype=3 then 4 1634 begin <*luk hvis ny extern fil*> 5 1635 getzone6(fil(zno),zd); 5 1636 if zd(13)>5 then filskrevet:=filskrevet+1; 5 1637 zfref:=0; 5 1638 close(fil(zno),false); 5 1639 end; 4 1640 if zfref=0 then 4 1641 begin <*åbn zone*> 5 1642 array field enavn; integer i; 5 1643 enavn:=4*2; i:=1; 5 1644 open(fil(zno),4,case ftype-1 of(string dbsnavn(increase(i)), 5 1645 string fdim.enavn(increase(i))),0) 5 1646 end 4 1647 end; 3 1648 \f 3 1648 message tilgangfil side 6 - 780916/jg; 3 1649 3 1649 3 1649 3 1649 <*hent segment og sæt zone descriptor*> 3 1650 3 1650 getzone6(fil(zno),zd); 3 1651 zstate:=zd(13); 3 1652 if zstate=0 or zd(9)<>seg then 3 1653 begin <*positioner*> 4 1654 if zstate>5 then 4 1655 filskrevet:=filskrevet+1; 4 1656 setposition(fil(zno),0,seg); 4 1657 if -,(operation=6 and pr=0) then 4 1658 begin <*læs seg medmindre op er skriv første post*> 5 1659 inrec6(fil(zno),512); 5 1660 fillæst:=fillæst+1 5 1661 end; 4 1662 zstate:=operation 4 1663 end 3 1664 else <*zstate:=max(operation,zone state)*> 3 1665 if operation>zstate then 3 1666 zstate:=operation; 3 1667 zd(9):=seg; 3 1668 zd(13):=zstate; 3 1669 zd(16):=pl shift 1; 3 1670 zd(14):=zd(19)+pr*zd(16); 3 1671 setzone6(fil(zno),zd); 3 1672 \f 3 1672 message tilgangfil side 7 - 780916/jg; 3 1673 3 1673 3 1673 3 1673 <*opdater kataloger*> 3 1674 3 1674 katf:=zno shift 19 add (katf extract 19); 3 1675 case ftype of 3 1676 begin 4 1677 dbkatt(fno,2):=katf; 4 1678 dbkats(fno,2):=katf; 4 1679 dbkate(fno,2):=katf 4 1680 end; 3 1681 dbkatz(zno,1):= filref; 3 1682 if ftype=3 then dbkatz(zno,2):=0 else 3 1683 <*if ftype=1 then allerede opd under zoneallokering*> 3 1684 if ftype=2 then dbkatz(zno,2):= <*prioritet spoolfil*> 3 1685 if zstate=5 then (if pr=pps-1 then 2 else 1) 3 1686 else if zstate=6 and pr=pps-1 then 3 else 0; 3 1687 3 1687 3 1687 3 1687 <*udgang*> 3 1688 3 1688 udgang: 3 1689 if st=0 then 3 1690 zoneno:=zno 3 1691 else zoneno:=0; <*fejl*> 3 1692 tilgangfil:=st; 3 1693 end tilgangfil; 2 1694 \f 2 1694 2 1694 message pfilsystem side 1 - 781003/jg; 2 1695 2 1695 procedure pfilparm(z); 2 1696 zone z; 2 1697 write(z,<:<10>dbantez=:>,dbantez,<: dbantsz=:>,dbantsz,<: dbanttz=:>, 2 1698 dbanttz,<:<10>dbmaxtf=:>,dbmaxtf,<: dbblokt=:>,dbblokt,<: dbmaxsf=:>,dbmaxsf, 2 1699 <:<10>dbmaxb=:>,dbmaxb,<: dbbidlængde=:>,dbbidlængde,<: dbbidmax=:>, 2 1700 dbbidmax,<:<10>dbmaxef=:>,dbmaxef); 2 1701 2 1701 procedure pfilglobal(z); 2 1702 zone z; 2 1703 write(z,<:<10>dbantsf=:>,dbantsf,<: dbkatsfri=:>,dbkatsfri, 2 1704 <:<10>dbantb=:>,dbantb,<: dbkatbfri=:>,dbkatbfri, 2 1705 <:<10>dbantef=:>,dbantef,<: dbkatefri=:>,dbkatefri, 2 1706 <:<10>dbsidstesz=:>,dbsidstesz,<: dbsidstetz=:>,dbsidstetz, 2 1707 <:<10>filskrevet=:>,filskrevet,<: fillæst=:>,fillæst, 2 1708 <:<10>dbsnavn=:>,dbsnavn,<: dbtnavn=:>,dbtnavn); 2 1709 2 1709 2 1709 procedure pdbkate(z,i); 2 1710 value i; integer i; 2 1711 zone z; 2 1712 begin integer j; array field navn; 3 1713 navn:=i*12+4; j:=1; 3 1714 write(z,<:<10>dbkate(:>,i,<:)=:>, 3 1715 dbkate(i,1) shift (-9), 3 1716 dbkate(i,1) extract 9, 3 1717 dbkate(i,2) shift (-19), 3 1718 dbkate(i,2) shift (-18) extract 1, 3 1719 dbkate(i,2) extract 18, 3 1720 <: :>,string dbkate.navn(increase(j))); 3 1721 end; 2 1722 \f 2 1722 message pfilsystem side 2 - 781003/jg; 2 1723 2 1723 2 1723 2 1723 procedure pdbkats(z,i); 2 1724 value i; integer i; 2 1725 zone z; 2 1726 write(z,<:<10>dbkats(:>,i,<:)=:>, 2 1727 dbkats(i,1) shift (-9), 2 1728 dbkats(i,1) extract 9, 2 1729 dbkats(i,2) shift (-19), 2 1730 dbkats(i,2) shift (-18) extract 1, 2 1731 dbkats(i,2) shift (-12) extract 6, 2 1732 dbkats(i,2) extract 12); 2 1733 2 1733 procedure pdbkatb(z,i); 2 1734 value i;integer i; 2 1735 zone z; 2 1736 write(z,<:<10>dbkatb(:>,i,<:)=:>, 2 1737 dbkatb(i) extract 12); 2 1738 2 1738 procedure pdbkatt(z,i); 2 1739 value i; integer i; 2 1740 zone z; 2 1741 write(z,<:<10>dbkatt(:>,i,<:)=:>, 2 1742 dbkatt(i,1) shift (-9), 2 1743 dbkatt(i,1) extract 9, 2 1744 dbkatt(i,2) shift (-19), 2 1745 dbkatt(i,2) shift (-18) extract 1, 2 1746 dbkatt(i,2) extract 18); 2 1747 2 1747 procedure pdbkatz(z,i); 2 1748 value i; integer i; 2 1749 zone z; 2 1750 write(z,<:<10>dbkatz(:>,i,<:)=:>, 2 1751 dbkatz(i,1),dbkatz(i,2)); 2 1752 \f 2 1752 message pfilsystem side 3 - 781003/jg; 2 1753 2 1753 2 1753 2 1753 procedure pfil(z,i); 2 1754 value i; integer i; 2 1755 zone z; 2 1756 begin integer j,k; array field navn; integer array zd(1:20); 3 1757 navn:=2; k:=1; 3 1758 getzone6(fil(i),zd); 3 1759 write(z,<:<10>fil(:>,i,<:)=:>, 3 1760 zd(1) shift (-12),<:+:>,zd(1) extract 12,<: :>, 3 1761 string zd.navn(increase(k))); 3 1762 for j:=6 step 1 until 10 do write(z,zd(j)); 3 1763 write(z,<:<10>:>); 3 1764 for j:=11 step 1 until 20 do write(z,zd(j)); 3 1765 end; 2 1766 2 1766 procedure pfilsystem(z); 2 1767 zone z; 2 1768 begin integer i; 3 1769 3 1769 write(z,<:<12>udskrift af variable i filsystem:>); 3 1770 write(z,<:<10><10>filparm::>); 3 1771 pfilparm(z); 3 1772 write(z,<:<10><10>filglobal::>); 3 1773 pfilglobal(z); 3 1774 write(z,<:<10><10>fil: zone descriptor:>); 3 1775 for i:=1 step 1 until dbantez+dbantsz+dbanttz do pfil(z,i); 3 1776 write(z,<:<10><10>dbkatz: filref ezdis/szprioritet/tzref:>); 3 1777 for i:=1 step 1 until dbantez+dbantsz+dbanttz do pdbkatz(z,i); 3 1778 write(z,<:<10><10>dbkate: pa pl zref dis stot/kateref enavn:>); 3 1779 for i :=1 step 1 until dbmaxef do pdbkate(z,i); 3 1780 write(z,<:<10><10>dbkats: pa pl zref dis bant bref/katsref:>); 3 1781 for i:=1 step 1 until dbmaxsf do pdbkats(z,i); 3 1782 write(z,<:<10><10>dbkatb: katbref:>); 3 1783 for i:=1 step 1 until dbmaxb do pdbkatb(z,i); 3 1784 write(z,<:<10><10>dbkatt: pa pl zref dis stot:>); 3 1785 for i:=1 step 1 until dbmaxtf do pdbkatt(z,i); 3 1786 end pfilsystem; 2 1787 \f 2 1787 message pfilsystem side 4 - 781003/jg; 2 1788 2 1788 2 1788 2 1788 procedure pfdim(fdim); 2 1789 integer array fdim; 2 1790 begin 3 1791 integer i; 3 1792 array field navn; 3 1793 i:=1;navn:=8; 3 1794 write(out,<:fdim::>,fdim(1),fdim(2),fdim(3),fdim(4),<: :>, 3 1795 string fdim.navn(increase(i))); 3 1796 end pfdim; 2 1797 \f 2 1797 message opretfil side 0 - 810529/cl; 2 1798 2 1798 procedure opretfil; 2 1799 <* checker parametre og vidresender operation 2 1800 til opret_spoolfil eller opret_eksternfil *> 2 1801 2 1801 begin 3 1802 integer array field op; 3 1803 integer status,pant,pl,segant,p_nøgle,fno,ftype; 3 1804 3 1804 procedure skriv_opret_fil(z,omfang); 3 1805 value omfang; 3 1806 zone z; 3 1807 integer omfang; 3 1808 begin 4 1809 write(z,"nl",1,<:+++ opret fil :>); 4 1810 if omfang > 0 then 4 1811 disable 4 1812 begin 5 1813 skriv_coru(z,abs curr_coruno); 5 1814 write(z,"nl",1,<<d>, 5 1815 <:op :>,op,"nl",1, 5 1816 <:status :>,status,"nl",1, 5 1817 <:pant :>,pant,"nl",1, 5 1818 <:pl :>,pl,"nl",1, 5 1819 <:segant :>,segant,"nl",1, 5 1820 <:p-nøgle:>,p_nøgle,"nl",1, 5 1821 <:fno :>,fno,"nl",1, 5 1822 <:ftype :>,ftype,"nl",1, 5 1823 <::>); 5 1824 end; 4 1825 end skriv_opret_fil; 3 1826 \f 3 1826 message opretfil side 1 - 810526/cl; 3 1827 3 1827 trap(opretfil_trap); 3 1828 <*+2*> 3 1829 <**> disable if testbit28 then 3 1830 <**> skriv_opret_fil(out,0); 3 1831 <*-2*> 3 1832 3 1832 stack_claim(if cm_test then 200 else 150); 3 1833 3 1833 <*+2*> 3 1834 <**> if testbit28 then write(out,"nl",1,<:+++ opret fil :>); 3 1835 <*-2*> 3 1836 3 1836 trin1: 3 1837 waitch(cs_opret_fil,op,true,-1); 3 1838 3 1838 trin2: <* check parametre *> 3 1839 disable begin 4 1840 4 1840 ftype:= d.op.data(4) shift (-10); 4 1841 fno:= d.op.data(4) extract 10; 4 1842 if ftype<2 or ftype>3 or fno<>0 then 4 1843 begin 5 1844 status:= 1; <*parameterfejl*> 5 1845 goto returner; 5 1846 end; 4 1847 4 1847 pant:= d.op.data(1); 4 1848 pl:= d.op.data(2); 4 1849 segant:= d.op.data(3); 4 1850 p_nøgle:= d.op.opkode shift (-12); 4 1851 if pant<0 or pl<1 or pl>256 or segant<(case ftype-1 of(1,0)) 4 1852 or p_nøgle<>0 and p_nøgle<>2 and p_nøgle<>3 then 4 1853 status:= 1 <*parameterfejl *> 4 1854 else 4 1855 if pant>256//pl*segant then status:= 1 else 4 1856 if segant>(case ftype-1 of(dbbidmax*dbbidlængde,dbsegmax)) then 4 1857 status:= 4 <*ingen plads*> 4 1858 else 4 1859 status:=0; 4 1860 \f 4 1860 message opretfil side 2 - 810526/cl; 4 1861 4 1861 4 1861 returner: 4 1862 4 1862 d.op.data(9):= status; 4 1863 4 1863 <*+2*> 4 1864 <*tz*> if testbit24 and overvåget and status<>0 then <*zt*> 4 1865 <*tz*> begin <*zt*> 5 1866 <*tz*> write(out,<:<10>opretfil::>,status,<: :>); <*zt*> 5 1867 <*tz*> pfdim(d.op.data); <*zt*> 5 1868 <*tz*> write(out,<: op::>,op,d.op.retur); ud; <*zt*> 5 1869 <*tz*> end; <*zt*> 4 1870 <*-2*> 4 1871 4 1871 <*returner eller vidresend operation*> 4 1872 signalch(if status>0 then d.op.retur else 4 1873 case ftype-1 of(cs_opret_spoolfil,cs_opret_eksternfil), 4 1874 op,d.op.optype); 4 1875 end; 3 1876 goto trin1; 3 1877 opretfil_trap: 3 1878 disable skriv_opret_fil(zbillede,1); 3 1879 3 1879 end opretfil; 2 1880 \f 2 1880 message tilknytfil side 0 - 810526/cl; 2 1881 2 1881 procedure tilknytfil; 2 1882 <* tilknytter ekstern fil og returnerer intern filid *> 2 1883 2 1883 begin 3 1884 integer array field op; 3 1885 integer status,i,fno,segant,pa,pl,sliceant,s; 3 1886 array field enavn; 3 1887 integer array tail(1:10); 3 1888 3 1888 procedure skriv_tilknyt_fil(z,omfang); 3 1889 value omfang; 3 1890 zone z; 3 1891 integer omfang; 3 1892 begin 4 1893 write(z,"nl",1,<:+++ tilknyt fil :>); 4 1894 if omfang > 0 then 4 1895 disable 4 1896 begin real array field raf; 5 1897 skriv_coru(z,abs curr_coruno); 5 1898 write(z,"nl",1,<<d>, 5 1899 <:op :>,op,"nl",1, 5 1900 <:status :>,status,"nl",1, 5 1901 <:i :>,i,"nl",1, 5 1902 <:fno :>,fno,"nl",1, 5 1903 <:segant :>,segant,"nl",1, 5 1904 <:pa :>,pa,"nl",1, 5 1905 <:pl :>,pl,"nl",1, 5 1906 <:sliceant:>,sliceant,"nl",1, 5 1907 <:s :>,s,"nl",1, 5 1908 <::>); 5 1909 raf:= 0; 5 1910 write(z,<:tail::>); skriv_hele(z,tail.raf,20,128); 5 1911 write(z,<:ia::>); skriv_hele(z,ia.raf,20,128); 5 1912 end; 4 1913 end skriv_tilknyt_fil; 3 1914 \f 3 1914 message tilknytfil side 1 - 810529/cl; 3 1915 3 1915 stack_claim(if cm_test then 200 else 150); 3 1916 trap(tilknytfil_trap); 3 1917 3 1917 <*+2*> 3 1918 <**> if testbit28 then 3 1919 <**> skriv_tilknyt_fil(out,0); 3 1920 <*-2*> 3 1921 3 1921 trin1: 3 1922 waitch(cs_tilknyt_fil,op,true,-1); 3 1923 3 1923 trin2: 3 1924 wait(bs_kate_fri); 3 1925 3 1925 trin3: 3 1926 disable begin 4 1927 4 1927 <* find ekstern rapportfil *> 4 1928 enavn:= 8; 4 1929 if find_fil_enavn(d.op.data.enavn)>0 then 4 1930 begin 5 1931 status:= 6; <* fil i brug *> 5 1932 goto returner; 5 1933 end; 4 1934 open(zdummy,0,d.op.data.enavn,0); 4 1935 s:= monitor(42)lookup entry:(zdummy,0,tail); 4 1936 if s<>0 then 4 1937 begin 5 1938 if s=3 then status:= 2 <* fil findes ikke *> 5 1939 else if s=6 then status:= 1 <* parameterfejl, navn *> 5 1940 else fejlreaktion(1,s,<:lookup entry:>,0); 5 1941 goto returner; 5 1942 end; 4 1943 if tail(9)<>d.op.data(4) <* contentskey,subno *> then 4 1944 begin 5 1945 status:= 5; <* forkert indhold *> goto returner; 5 1946 end; 4 1947 segant:= tail(1); 4 1948 if segant>db_seg_max then 4 1949 segant:= db_seg_max; 4 1950 pa:= tail(10); 4 1951 pl:= tail(7) extract 12; 4 1952 if pl < 1 or pl > 256 then 4 1953 begin status:= 7; goto returner; end; 4 1954 \f 4 1954 message tilknytfil side 2 - 810529/cl; 4 1955 if pa>256//pl*segant then 4 1956 begin status:= 7; goto returner; end; 4 1957 4 1957 <* reserver *> 4 1958 s:= monitor(52)create area:(zdummy,0,ia); 4 1959 if s<>0 then 4 1960 begin 5 1961 if s=3 then status:= 2 <* fil findes ikke *> 5 1962 else if s=1 <* areaclaims exeeded *> then 5 1963 begin 6 1964 status:= 4; 6 1965 fejlreaktion(1,s,<:create area:>,1); 6 1966 end 5 1967 else fejlreaktion(1,s,<:create area:>,0); 5 1968 goto returner; 5 1969 end; 4 1970 4 1970 s:= monitor(8)reserve:(zdummy,0,ia); 4 1971 if s<>0 then 4 1972 begin 5 1973 if s<3 then status:= 6 <* i brug *> 5 1974 else fejlreaktion(1,s,<:reserve:>,0); 5 1975 monitor(64)remove area:(zdummy,0,ia); 5 1976 goto returner; 5 1977 end; 4 1978 4 1978 tail(7):= 1 shift 12 +pl; <* tilknyttet *> 4 1979 s:= monitor(44)change entry:(zdummy,0,tail); 4 1980 if s<>0 then fejlreaktion(1,s,<:change entry:>,0); 4 1981 4 1981 <* opdater katalog *> 4 1982 dbantef:= dbantef+1; 4 1983 fno:= dbkatefri; 4 1984 dbkatefri:= dbkate(fno,2); 4 1985 dbkate(fno,1):= pa shift 9 add pl; <* postantal,postlængde *> 4 1986 dbkate(fno,2):= segant; 4 1987 for i:= 5 step 1 until 8 do 4 1988 dbkate(fno,i-2):= d.op.data(i); 4 1989 4 1989 <* returparametre *> 4 1990 d.op.data(1):= pa; 4 1991 d.op.data(2):= pl; 4 1992 d.op.data(3):= segant; 4 1993 d.op.data(4):= 3 shift 10 +fno; 4 1994 status:= 0; 4 1995 \f 4 1995 message tilknytfil side 3 - 810526/cl; 4 1996 4 1996 4 1996 returner: 4 1997 close(zdummy,false); 4 1998 d.op.data(9):= status; 4 1999 4 1999 4 1999 <*+2*> 4 2000 <*tz*> if testbit24 and overvåget then <*zt*> 4 2001 <*tz*> begin <*zt*> 5 2002 <*tz*> write(out,<:<10>tilknytfil::>,status,<: :>); <*zt*> 5 2003 <*tz*> pfdim(d.op.data); <*zt*> 5 2004 <*tz*> write(out,<: op::>,op,d.op.retur); ud; <*zt*> 5 2005 <*tz*> end; <*zt*> 4 2006 <*-2*> 4 2007 4 2007 signalch(d.op.retur,op,d.op.optype); 4 2008 if dbantef < dbmaxef then 4 2009 signalbin(bs_kate_fri); 4 2010 end; 3 2011 goto trin1; 3 2012 tilknytfil_trap: 3 2013 disable skriv_tilknyt_fil(zbillede,1); 3 2014 end tilknyt_fil; 2 2015 \f 2 2015 message frigivfil side 0 - 810529/cl; 2 2016 2 2016 procedure frigivfil; 2 2017 <* frigiver en tilknyttet ekstern fil *> 2 2018 2 2018 begin 3 2019 integer array field op; 3 2020 integer status,fref,ftype,fno,s,i,z; 3 2021 array field enavn; 3 2022 integer array tail(1:10); 3 2023 3 2023 procedure skriv_frigiv_fil(zud,omfang); 3 2024 value omfang; 3 2025 zone zud; 3 2026 integer omfang; 3 2027 begin 4 2028 write(zud,"nl",1,<:+++ frigiv fil :>); 4 2029 if omfang > 0 then 4 2030 disable 4 2031 begin real array field raf; 5 2032 skriv_coru(zud,abs curr_coruno); 5 2033 write(zud,"nl",1,<<d>, 5 2034 <:op :>,op,"nl",1, 5 2035 <:status:>,status,"nl",1, 5 2036 <:fref :>,fref,"nl",1, 5 2037 <:ftype :>,ftype,"nl",1, 5 2038 <:fno :>,fno,"nl",1, 5 2039 <:s :>,s,"nl",1, 5 2040 <:i :>,i,"nl",1, 5 2041 <:z :>,z,"nl",1, 5 2042 <::>); 5 2043 raf:= 0; 5 2044 write(zud,<:tail::>); skriv_hele(zud,tail.raf,20,128); 5 2045 end; 4 2046 end skriv_frigiv_fil; 3 2047 \f 3 2047 message frigivfil side 1 - 810526/cl; 3 2048 3 2048 3 2048 stack_claim(if cm_test then 200 else 150); 3 2049 trap(frigivfil_trap); 3 2050 3 2050 <*+2*> 3 2051 <**> disable if testbit28 then 3 2052 <**> skriv_frigiv_fil(out,0); 3 2053 <*-2*> 3 2054 3 2054 trin1: 3 2055 waitch(cs_frigiv_fil,op,true,-1); 3 2056 3 2056 trin2: 3 2057 disable begin 4 2058 4 2058 <* find fil *> 4 2059 fref:= d.op.data(4); 4 2060 ftype:= fref shift (-10); 4 2061 fno:= fref extract 10; 4 2062 if ftype=0 or ftype>3 or fno=0 then 4 2063 begin status:= 1; goto returner; end; 4 2064 if fno>(case ftype of(dbmaxtf,dbmaxsf,dbmaxef)) then 4 2065 begin status:= 1; goto returner; end; 4 2066 if case ftype of(dbkatt(fno,1),dbkats(fno,1),dbkate(fno,1)) 4 2067 extract 9 = 0 then 4 2068 begin 5 2069 status:= 2; <* fil findes ikke *> 5 2070 goto returner; 5 2071 end; 4 2072 if ftype <> 3 then 4 2073 begin status:= 5; goto returner; end; 4 2074 4 2074 <* frigiv evt. tilknyttet zone og areaprocess *> 4 2075 z:= dbkate(fno,2) shift (-19); 4 2076 if z > 0 then 4 2077 begin 5 2078 if dbkatz(z,1)=fref then 5 2079 begin integer array zd(1:20); 6 2080 getzone6(fil(z),zd); 6 2081 if zd(13)>5 then filskrevet:= filskrevet +1; 6 2082 close(fil(z),true); 6 2083 dbkatz(z,1):= 0; 6 2084 end; 5 2085 end; 4 2086 \f 4 2086 message frigivfil side 2 - 810526/cl; 4 2087 4 2087 <* opdater tail *> 4 2088 enavn:= fno*12+4; 4 2089 open(zdummy,0,dbkate.enavn,0); 4 2090 s:= monitor(42)lookup entry:(zdummy,0,tail); 4 2091 if s<>0 then fejlreaktion(1,s,<:lookup entry:>,0); 4 2092 tail(7):= dbkate(fno,1) extract 9; <* ej tilknyttet,postlængde *> 4 2093 tail(10):=dbkate(fno,1) shift (-9);<* postantal *> 4 2094 s:= monitor(44)change entry:(zdummy,0,tail); 4 2095 if s<>0 then fejlreaktion(1,s,<:change entry:>,0); 4 2096 monitor(64)remove process:(zdummy,0,tail); 4 2097 close(zdummy,true); 4 2098 4 2098 <* frigiv indgang *> 4 2099 for i:= 1, 3 step 1 until 6 do 4 2100 dbkate(fno,1):= 0; 4 2101 dbkate(fno,2):= dbkatefri; 4 2102 dbkatefri:= fno; 4 2103 dbantef:= dbantef -1; 4 2104 signalbin(bs_kate_fri); 4 2105 d.op.data(4):= 0; <* filref null *> 4 2106 status:= 0; 4 2107 4 2107 returner: 4 2108 d.op.data(9):= status; 4 2109 <*+2*> 4 2110 <*tz*> if testbit24 and overvåget then <*zt*> 4 2111 <*tz*> begin <*zt*> 5 2112 <*tz*> write(out,<:<10>frigivfil::>,status,<: :>); <*zt*> 5 2113 <*tz*> pfdim(d.op.data); <*zt*> 5 2114 <*tz*> write(out,<: op::>,op,d.op.retur); ud; <*zt*> 5 2115 <*tz*> end; <*zt*> 4 2116 <*-2*> 4 2117 4 2117 signalch(d.op.retur,op,d.op.optype); 4 2118 end; 3 2119 goto trin1; 3 2120 frigiv_fil_trap: 3 2121 disable skriv_frigiv_fil(zbillede,1); 3 2122 end frigivfil; 2 2123 \f 2 2123 message sletfil side 0 - 810526/cl; 2 2124 2 2124 procedure sletfil; 2 2125 <* sletter en spool- eller ekstern fil *> 2 2126 2 2126 begin 3 2127 integer array field op; 3 2128 integer fref,fno,ftype,status; 3 2129 3 2129 procedure skriv_slet_fil(z,omfang); 3 2130 value omfang; 3 2131 zone z; 3 2132 integer omfang; 3 2133 begin 4 2134 write(z,"nl",1,<:+++ slet fil :>); 4 2135 if omfang > 0 then 4 2136 disable 4 2137 begin 5 2138 skriv_coru(z,abs curr_coruno); 5 2139 write(z,"nl",1,<<d>, 5 2140 <:op :>,op,"nl",1, 5 2141 <:fref :>,fref,"nl",1, 5 2142 <:fno :>,fno,"nl",1, 5 2143 <:ftype :>,ftype,"nl",1, 5 2144 <:status:>,status,"nl",1, 5 2145 <::>); 5 2146 end; 4 2147 end skriv_slet_fil; 3 2148 \f 3 2148 message sletfil side 1 - 810526/cl; 3 2149 3 2149 stack_claim(if cm_test then 200 else 150); 3 2150 3 2150 trap(sletfil_trap); 3 2151 <*+2*> 3 2152 <**> disable if testbit28 then 3 2153 <**> skriv_slet_fil(out,0); 3 2154 <*-2*> 3 2155 3 2155 trin1: 3 2156 waitch(cs_slet_fil,op,true,-1); 3 2157 3 2157 trin2: 3 2158 disable begin 4 2159 4 2159 <* find fil *> 4 2160 fref:= d.op.data(4); 4 2161 ftype:= fref shift (-10); 4 2162 fno:= fref extract 10; 4 2163 if ftype=0 or ftype>3 or fno=0 then 4 2164 begin status:= 1; goto returner; end; 4 2165 if fno>(case ftype of(dbmaxtf,dbmaxsf,dbmaxef)) then 4 2166 begin status:= 1; goto returner; end; 4 2167 if case ftype of(dbkatt(fno,1),dbkats(fno,1),dbkate(fno,1)) 4 2168 extract 9 = 0 then 4 2169 begin 5 2170 status:= 2; <* fil findes ikke *> 5 2171 goto returner; 5 2172 end; 4 2173 4 2173 4 2173 <* slet spool- eller ekstern fil *> 4 2174 case ftype of 4 2175 begin 5 2176 5 2176 <* tabelfil - ingen aktion *> 5 2177 ; 5 2178 \f 5 2178 message sletfil side 2 - 810203/cl; 5 2179 5 2179 <* spoolfil *> 5 2180 begin 6 2181 integer z,bidno,bf,bidant,i; 6 2182 6 2182 <* hvis tilknyttet så frigiv *> 6 2183 z:= dbkats(fno,2) shift (-19); 6 2184 if z>0 then 6 2185 begin 7 2186 if dbkatz(z,1)=fref then 7 2187 begin integer array zd(1:20); 8 2188 dbkatz(z,1):= 2 shift 10; 8 2189 getzone6(fil(z),zd); <*annuler evt. udskrivning*> 8 2190 if zd(13)>5 then 8 2191 begin zd(13):= 0; setzone6(fil(z),zd); end; 8 2192 end; 7 2193 end; 6 2194 6 2194 <* frigiv bidder *> 6 2195 bidno:= bf:= dbkats(fno,2) extract 12; <*bid start*> 6 2196 bidant:= dbkats(fno,2) shift (-12) extract 6; 6 2197 for i:= bidant -1 step -1 until 1 do 6 2198 bidno:= dbkatb(bidno) extract 12; 6 2199 dbkatb(bidno):= false add dbkatbfri; 6 2200 dbkatbfri:= bf; 6 2201 dbantb:= dbantb-bidant; 6 2202 6 2202 <* frigiv indgang *> 6 2203 dbkats(fno,1):= 0; 6 2204 dbkats(fno,2):= dbkatsfri; 6 2205 dbkatsfri:= fno; 6 2206 dbantsf:= dbantsf -1; 6 2207 signalbin(bs_kats_fri); 6 2208 end spoolfil; 5 2209 \f 5 2209 message sletfil side 3 - 810203/cl; 5 2210 5 2210 <* extern fil *> 5 2211 begin 6 2212 integer i,s,z; 6 2213 real array field enavn; 6 2214 integer array tail(1:10); 6 2215 6 2215 <* find head and tail *> 6 2216 enavn:= fno*12+4; 6 2217 open(zdummy,0,dbkate.enavn,0); 6 2218 s:= monitor(42)lookup entry:(zdummy,0,tail); 6 2219 if s<>0 then fejlreaktion(1,s,<:lookup entry:>,0); 6 2220 6 2220 <*frigiv evt. tilknyttet zone og areaprocess*> 6 2221 z:=dbkate(fno,2) shift (-19); 6 2222 if z>0 then 6 2223 begin 7 2224 if dbkatz(z,1)=fref then 7 2225 begin integer array zd(1:20); 8 2226 getzone6(fil(z),zd); 8 2227 if zd(13)>5 then <* udskrivning *> 8 2228 begin <*annuler*> 9 2229 zd(13):= 0; 9 2230 setzone6(fil(z),zd); 9 2231 end; 8 2232 close(fil(z),true); 8 2233 dbkatz(z,1):= 0; 8 2234 end; 7 2235 end; 6 2236 6 2236 <* fjern entry *> 6 2237 s:= monitor(48)remove entry:(zdummy,0,tail); 6 2238 if s<>0 then fejlreaktion(1,s,<:remove entry:>,0); 6 2239 close(zdummy,true); 6 2240 6 2240 <* frigiv indgang *> 6 2241 for i:=1, 3 step 1 until 6 do 6 2242 dbkate(fno,i):= 0; 6 2243 dbkate(fno,2):= dbkatefri; 6 2244 dbkatefri:= fno; 6 2245 dbantef:= dbantef -1; 6 2246 signalbin(bs_kate_fri); 6 2247 end eksternfil; 5 2248 5 2248 end ftype; 4 2249 \f 4 2249 message sletfil side 4 - 810526/cl; 4 2250 4 2250 4 2250 status:= 0; 4 2251 if ftype > 1 then 4 2252 d.op.data(4):= 0; <*filref null*> 4 2253 4 2253 returner: 4 2254 d.op.data(9):= status; 4 2255 4 2255 <*+2*> 4 2256 <*tz*> if testbit24 and overvåget then <*zt*> 4 2257 <*tz*> begin <*zt*> 5 2258 <*tz*> write(out,<:<10>sletfil::>,status,<: :>); <*zt*> 5 2259 <*tz*> pfdim(d.op.data); <*zt*> 5 2260 <*tz*> write(out,<: op::>,op,d.op.retur); ud; <*zt*> 5 2261 <*tz*> end; <*zt*> 4 2262 <*-2*> 4 2263 4 2263 signalch(d.op.retur,op,d.op.optype); 4 2264 end; 3 2265 goto trin1; 3 2266 sletfil_trap: 3 2267 disable skriv_slet_fil(zbillede,1); 3 2268 end sletfil; 2 2269 \f 2 2269 message opretspoolfil side 0 - 810526/cl; 2 2270 2 2270 procedure opretspoolfil; 2 2271 <* opretter en spoolfil og returnerer intern filid *> 2 2272 2 2272 begin 3 2273 integer array field op; 3 2274 integer bidantal,fno,i,bs,bidstart; 3 2275 3 2275 procedure skriv_opret_spoolfil(z,omfang); 3 2276 value omfang; 3 2277 zone z; 3 2278 integer omfang; 3 2279 begin 4 2280 write(z,"nl",1,<:+++ opret spoolfil :>); 4 2281 if omfang > 0 then 4 2282 disable 4 2283 begin 5 2284 skriv_coru(z,abs curr_coruno); 5 2285 write(z,"nl",1,<<d>, 5 2286 <:op :>,op,"nl",1, 5 2287 <:bidantal:>,bidantal,"nl",1, 5 2288 <:fno :>,fno,"nl",1, 5 2289 <:i :>,i,"nl",1, 5 2290 <:bs :>,bs,"nl",1, 5 2291 <:bidstart:>,bidstart,"nl",1, 5 2292 <::>); 5 2293 end; 4 2294 end skriv_opret_spoolfil; 3 2295 \f 3 2295 message opretspoolfil side 1 - 810526/cl; 3 2296 3 2296 stack_claim(if cm_test then 200 else 150); 3 2297 3 2297 signalbin(bs_kats_fri); <*initialiseres til åben*> 3 2298 3 2298 trap(opretspool_trap); 3 2299 <*+2*> 3 2300 <**> disable if testbit28 then 3 2301 <**> skriv_opret_spoolfil(out,0); 3 2302 <*-2*> 3 2303 trin1: 3 2304 waitch(cs_opret_spoolfil,op,true,-1); 3 2305 3 2305 trin2: 3 2306 bidantal:= (d.op.data(3)<*segant*> - 1)//dbbidlængde +1; 3 2307 wait(bs_kats_fri); 3 2308 3 2308 trin3: 3 2309 if bidantal>dbmaxb-dbantb then <*ikke plads,vent*> 3 2310 begin 4 2311 wait(bs_kats_fri); 4 2312 goto trin3; 4 2313 end; 3 2314 disable begin 4 2315 4 2315 <*alloker bidder*> 4 2316 bs:= bidstart:= dbkatbfri; 4 2317 for i:= bidantal-1 step -1 until 1 do 4 2318 bs:= dbkatb(bs) extract 12; 4 2319 dbkatbfri:= dbkatb(bs) extract 12; 4 2320 dbkatb(bs):= false; <*sidste ref null*> 4 2321 dbantb:= dbantb+bidantal; 4 2322 4 2322 <*alloker indgang*> 4 2323 fno:= dbkatsfri; 4 2324 dbkatsfri:= dbkats(fno,2); 4 2325 dbantsf:= dbantsf +1; 4 2326 dbkats(fno,1):= d.op.data(1) shift 9 <*postantal*> add 4 2327 d.op.data(2) extract 9; <*postlængde*> 4 2328 dbkats(fno,2):= bidantal shift 12 add bidstart; <*zone null*> 4 2329 \f 4 2329 message opretspoolfil side 2 - 810526/cl; 4 2330 4 2330 <*returner*> 4 2331 d.op.data(3):= bidantal*dbbidlængde; <*segantal*> 4 2332 d.op.data(4):= 2 shift 10 add fno; <*filref*> 4 2333 for i:= 5 step 1 until 8 do <*filnavn null*> 4 2334 d.op.data(i):= 0; 4 2335 d.op.data(9):= 0; <*status ok*> 4 2336 4 2336 <*+2*> 4 2337 <*tz*> if testbit24 and overvåget then <*zt*> 4 2338 <*tz*> begin <*zt*> 5 2339 <*tz*> write(out,<:<10>opretfil::>,0,<: :>); <*zt*> 5 2340 <*tz*> pfdim(d.op.data); <*zt*> 5 2341 <*tz*> write(out,<: op:>,op,d.op.retur); ud; <*zt*> 5 2342 <*tz*> end; <*zt*> 4 2343 <*-2*> 4 2344 4 2344 signalch(d.op.retur,op,d.op.optype); 4 2345 if dbantsf<dbmaxsf then signalbin(bs_kats_fri); 4 2346 end; 3 2347 goto trin1; 3 2348 3 2348 opretspool_trap: 3 2349 disable skriv_opret_spoolfil(zbillede,1); 3 2350 3 2350 end opretspoolfil; 2 2351 \f 2 2351 message opreteksternfil side 0 - 810526/cl; 2 2352 2 2352 procedure opreteksternfil; 2 2353 <* opretter og knytter en ekstern fil *> 2 2354 2 2354 begin 3 2355 integer array field op; 3 2356 integer status,s,i,fno,p_nøgle; 3 2357 integer array tail(1:10),zd(1:20); 3 2358 real r; 3 2359 real array field enavn; 3 2360 3 2360 procedure skriv_opret_ekstfil(z,omfang); 3 2361 value omfang; 3 2362 zone z; 3 2363 integer omfang; 3 2364 begin 4 2365 write(z,"nl",1,<:+++ opret ekstern fil :>); 4 2366 if omfang > 0 then 4 2367 disable 4 2368 begin real array field raf; 5 2369 skriv_coru(z,abs curr_coruno); 5 2370 write(z,"nl",1,<<d>, 5 2371 <:op :>,op,"nl",1, 5 2372 <:status :>,status,"nl",1, 5 2373 <:s :>,s,"nl",1, 5 2374 <:i :>,i,"nl",1, 5 2375 <:fno :>,fno,"nl",1, 5 2376 <:p-nøgle:>,p_nøgle,"nl",1, 5 2377 <::>); 5 2378 raf:= 0; 5 2379 write(z,<:tail::>); skriv_hele(z,tail.raf,20,128); 5 2380 write(z,<:zd::>); skriv_hele(z,zd.raf,40,28); 5 2381 end; 4 2382 end skriv_opret_ekstfil; 3 2383 \f 3 2383 message opreteksternfil side 1 - 810526/cl; 3 2384 3 2384 stack_claim(if cm_test then 200 else 150); 3 2385 3 2385 signalbin(bs_kate_fri); <*initialiseres til åben*> 3 2386 3 2386 trap(opretekst_trap); 3 2387 <*+2*> 3 2388 <**> disable if testbit28 then 3 2389 <**> skriv_opret_ekstfil(out,0); 3 2390 <*-2*> 3 2391 trin1: 3 2392 waitch(cs_opret_eksternfil,op,true,-1); 3 2393 3 2393 trin2: 3 2394 wait(bs_kate_fri); 3 2395 3 2395 trin3: 3 2396 <*opret temporær fil og tilknyt den*> 3 2397 disable begin 4 2398 4 2398 enavn:= 8; 4 2399 <*opret*> 4 2400 open(zdummy,0,d.op.data.enavn,0); 4 2401 tail(1):= d.op.data(3); <*segant*> 4 2402 tail(2):= 1; 4 2403 tail(6):= systime(7,0,r); <*shortclock*> 4 2404 tail(7):= 1 shift 12 +d.op.data(2) extract 12; <*tilknyttet,postlgd*> 4 2405 tail(8):= 0; 4 2406 tail(9):= 31 shift 12; <*contentskey=ekstern fil,subnr=0*> 4 2407 tail(10):= d.op.data(1); <*postantal*> 4 2408 s:= monitor(40)create entry:(zdummy,0,tail); 4 2409 if s<>0 then 4 2410 begin 5 2411 if s=4 <*claims exeeded*> then 5 2412 begin 6 2413 status:= 4; 6 2414 fejlreaktion(1,s,<:create entry:>,1); 6 2415 goto returner; 6 2416 end; 5 2417 if s=3 <*navn ikke unikt*> then 5 2418 begin status:= 6; goto returner; end; 5 2419 fejlreaktion(1,s,<:create entry:>,0); 5 2420 end; 4 2421 \f 4 2421 message opreteksternfil side 2 - 810203/cl; 4 2422 4 2422 p_nøgle:= d.op.opkode shift (-12); 4 2423 s:= monitor(50)permanent_entry:(zdummy,p_nøgle,tail); 4 2424 if s<>0 then 4 2425 begin 5 2426 if s=6 then 5 2427 begin <*claims exeeded*> 6 2428 status:= 4; 6 2429 fejlreaktion(1,s,<:permanent entry:>,1); 6 2430 monitor(48)remove entry:(zdummy,0,tail); 6 2431 goto returner; 6 2432 end 5 2433 else fejlreaktion(1,s,<:permanent entry:>,0); 5 2434 end; 4 2435 4 2435 <*reserver*> 4 2436 s:= monitor(52)create areaprocess:(zdummy,0,zd); 4 2437 if s<>0 then 4 2438 begin 5 2439 fejlreaktion(1,s,<:create area:>,if s=1 then 1 else 0); 5 2440 status:= 4; 5 2441 monitor(48)remove entry:(zdummy,0,zd); 5 2442 goto returner; 5 2443 end; 4 2444 4 2444 s:= monitor(8)reserve:(zdummy,0,zd); 4 2445 if s<>0 then fejlreaktion(1,s,<:reserve:>,0); 4 2446 4 2446 <*tilknyt*> 4 2447 dbantef:= dbantef +1; 4 2448 fno:= dbkatefri; 4 2449 dbkatefri:= dbkate(fno,2); 4 2450 dbkate(fno,1):= tail(10) shift 9 add (tail(7) extract 12); 4 2451 dbkate(fno,2):= tail(1); 4 2452 getzone6(zdummy,zd); 4 2453 for i:= 2 step 1 until 5 do 4 2454 dbkate(fno,i+1):= d.op.data(3+i):= zd(i); <*navn*> 4 2455 d.op.data(3):= tail(1); 4 2456 d.op.data(4):= 3 shift 10 +fno; 4 2457 status:= 0; 4 2458 \f 4 2458 message opreteksternfil side 3 - 810526/cl; 4 2459 4 2459 returner: 4 2460 4 2460 close(zdummy,false); 4 2461 d.op.data(9):= status; 4 2462 4 2462 <*+2*> 4 2463 <*tz*> if testbit24 and overvåget then <*zt*> 4 2464 <*tz*> begin <*zt*> 5 2465 <*tz*> write(out,<:<10>opretfil::>,status,<: :>); <*zt*> 5 2466 <*tz*> pfdim(d.op.data); <*zt*> 5 2467 <*tz*> write(out,<: op::>,op,d.op.retur); ud; <*zt*> 5 2468 <*tz*> end; <*zt*> 4 2469 <*-2*> 4 2470 4 2470 signalch(d.op.retur,op,d.op.optype); 4 2471 if dbantef<dbmaxef then signalbin(bs_kate_fri); 4 2472 end; 3 2473 goto trin1; 3 2474 3 2474 opretekst_trap: 3 2475 disable skriv_opret_ekstfil(zbillede,1); 3 2476 3 2476 end opreteksternfil; 2 2477 2 2477 \f 2 2477 message attention_erklæringer side 1 - 850820/cl; 2 2478 2 2478 integer 2 2479 tf_kommandotabel, 2 2480 cs_att_pulje, 2 2481 bs_fortsæt_adgang, 2 2482 att_proc_ref; 2 2483 2 2483 integer array 2 2484 att_flag, 2 2485 att_signal(1:att_maske_lgd//2); 2 2486 2 2486 integer array 2 2487 terminal_tab(1:terminal_beskr_længde//2*(1<*io*>+ 2 2488 max_antal_operatører+max_antal_garageterminaler)), 2 2489 fortsæt(1:32); 2 2490 \f 2 2490 message procedure afslut_kommando side 1 - 810507/hko; 2 2491 2 2491 procedure afslut_kommando(op_ref); 2 2492 integer array field op_ref; 2 2493 begin integer nr,i,sem; 3 2494 i:= d.op_ref.kilde; 3 2495 nr:= if i=299 then max_antal_operatører+max_antal_garageterminaler+1 3 2496 else case i//100 of (0,i mod 100,max_antal_operatører+(i mod 100)); 3 2497 sætbit_ia(att_flag,nr,0); 3 2498 d.op_ref.optype:=gen_optype; 3 2499 <* "husket" attention disabled **************** 3 2500 if sætbit_ia(att_signal,nr,0)=1 then 3 2501 begin 3 2502 sem:=if i=299 then cs_talevejsswitch else 3 2503 case i//100 of (cs_io_komm,cs_operatør(i mod 100), 3 2504 cs_garage(i mod 100)); 3 2505 afslut_operation(op_ref,0); 3 2506 start_operation(op_ref,i,cs_att_pulje,0); 3 2507 signal_ch(sem,op_ref,gen_optype); 3 2508 end 3 2509 else 3 2510 ********************* disable "husket" attention *> 3 2511 afslut_operation(op_ref,cs_att_pulje); 3 2512 end; 2 2513 \f 2 2513 message procedure læs_store side 1 - 880919/cl; 2 2514 2 2514 integer procedure læs_store(z,c); 2 2515 zone z; 2 2516 integer c; 2 2517 begin 3 2518 læs_store:= readchar(z,c); 3 2519 if 'a' <= c and c <= 'å' then c:= c - 'a' + 'A'; 3 2520 end; 2 2521 \f 2 2521 message procedure param side 1 - 810226/cl; 2 2522 2 2522 2 2522 2 2522 integer procedure param(txt,pos,spec,tabel_id,type,værdi,sep); 2 2523 value tabel_id; 2 2524 integer pos, tabel_id, type, sep; 2 2525 integer array txt, spec, værdi; 2 2526 2 2526 2 2526 2 2526 <*************************************> 2 2527 <* *> 2 2528 <* CLAUS LARSEN: 15.07.77 *> 2 2529 <* *> 2 2530 <*************************************> 2 2531 2 2531 2 2531 2 2531 2 2531 <* param syntax-analyserer en parameterliste, og *> 2 2532 <* bestemmer næste parameter og den separator der *> 2 2533 <* afslutter parameteren *> 2 2534 2 2534 2 2534 2 2534 begin 3 2535 integer array klasse(0:127), aktuel_param(1:4), fdim(1:8); 3 2536 real array indgang(1:2); 3 2537 integer i, j, tegn, tegn_pos, tal, hashnøgle, 3 2538 zone_nr, top, max_segm, start_segm, lpos; 3 2539 boolean minus, separator; 3 2540 lpos := pos; 3 2541 type:=-1; 3 2542 for i:=1 step 1 until 4 do værdi(i):=0; 3 2543 \f 3 2543 message procedure param side 2 - 810428/cl,hko; 3 2544 3 2544 3 2544 3 2544 <* grænsecheck for pos *> 3 2545 begin 4 2546 integer nedre, øvre; 4 2547 4 2547 nedre := system(3,øvre,txt); 4 2548 nedre := nedre * 3 - 2; 4 2549 øvre := øvre * 3; 4 2550 if lpos < (nedre - 1) or øvre < lpos then 4 2551 begin 5 2552 sep:= -1; 5 2553 param:= 5; 5 2554 goto slut; 5 2555 end; 4 2556 4 2556 <* er parameterlisten slut *> 4 2557 lpos:= lpos+1; 4 2558 læs_tegn(txt,lpos,tegn); 4 2559 if tegn = 'em' or tegn = 'nl' or tegn = 'nul' then 4 2560 begin 5 2561 lpos := lpos - 2; 5 2562 sep := tegn; 5 2563 param := 5; 5 2564 5 2564 goto slut; 5 2565 end else lpos:= lpos-1; 4 2566 end; 3 2567 \f 3 2567 message procedure param side 3 - 810428/cl; 3 2568 3 2568 3 2568 <* initialisering *> 3 2569 for i := 1 step 1 until 4 do 3 2570 aktuel_param(i) := 0; 3 2571 minus := separator := false; 3 2572 3 2572 <* initialiser klassetabel *> 3 2573 for i := 65 step 1 until 93, 3 2574 97 step 1 until 125 do klasse(i) := 1; 3 2575 for i := 48 step 1 until 57 do klasse(i) := 2; 3 2576 for i := 0 step 1 until 47, 58 step 1 until 64, 3 2577 94, 95, 96, 126, 127 do klasse(i) := 4; 3 2578 3 2578 3 2578 <* sæt specialtegn *> 3 2579 i := 1; 3 2580 læs_tegn(spec,i,tegn); 3 2581 while tegn <> 0 do 3 2582 begin 4 2583 if klasse(tegn) = 4 and tegn <> 'sp' and tegn <> 'nl' then 4 2584 klasse(tegn) := 3; 4 2585 læs_tegn(spec,i,tegn); 4 2586 end; 3 2587 \f 3 2587 message procedure param side 4 - 810226/cl; 3 2588 3 2588 3 2588 <* læs første tegn i ny parameter og bestem typen *> 3 2589 læs_tegn(txt,lpos,tegn); 3 2590 3 2590 case klasse(tegn) of 3 2591 begin 4 2592 4 2592 <* case 1 - bogstav *> 4 2593 begin 5 2594 type := 0; 5 2595 param := 0; 5 2596 tegn_pos := 1; 5 2597 hashnøgle := 0; 5 2598 5 2598 <* læs parameter *> 5 2599 while tegn_pos < 12 and klasse(tegn) <> 4 do 5 2600 begin 6 2601 hashnøgle := hashnøgle + tegn; 6 2602 skriv_tegn(aktuel_param,tegn_pos,tegn); 6 2603 læs_tegn(txt,lpos,tegn); 6 2604 end; 5 2605 5 2605 <* find separator *> 5 2606 while klasse(tegn) <> 4 do læs_tegn(txt,lpos,tegn); 5 2607 sep := tegn; 5 2608 \f 5 2608 message procedure param side 5 - 810226/cl; 5 2609 5 2609 <* tabelopslag *> 5 2610 if tabel_id <> 0 then 5 2611 begin 6 2612 <* hent max_segm *> 6 2613 6 2613 fdim(4) := tabel_id; 6 2614 j := hent_fil_dim(fdim); 6 2615 if j > 0 then 6 2616 begin 7 2617 param := 4; 7 2618 for i := 1 step 1 until 4 do 7 2619 værdi(i) := aktuel_param(i); 7 2620 goto slut; 7 2621 end; 6 2622 max_segm := fdim(3); 6 2623 6 2623 <* forbered opslag *> 6 2624 start_segm := (hashnøgle mod max_segm) + 1; 6 2625 indgang(1) := 0.0 shift 48 add aktuel_param(1) 6 2626 shift 24 add aktuel_param(2); 6 2627 indgang(2) := 0.0 shift 48 add aktuel_param(3) 6 2628 shift 24 add aktuel_param(4); 6 2629 hashnøgle := start_segm; 6 2630 \f 6 2630 message procedure param side 6 - 810226/cl; 6 2631 6 2631 <* søg navn *> 6 2632 repeat 6 2633 <* læs segment *> 6 2634 læs_fil(tabel_id,hashnøgle,zone_nr); 6 2635 6 2635 <* beregn sidste element *> 6 2636 top := fil(zone_nr,1) extract 24; 6 2637 top := (top - 1) * 4 + 2; 6 2638 6 2638 <* søg *> 6 2639 for i := 2 step 4 until top do 6 2640 if fil(zone_nr,i) = indgang(1) and 6 2641 fil(zone_nr,i+1) = indgang(2) then 6 2642 begin 7 2643 <* fundet *> 7 2644 værdi(1) := fil(zone_nr,i+2) shift (-24) 7 2645 extract 24; 7 2646 værdi(2) := fil(zone_nr,i+2) extract 24; 7 2647 værdi(3) := fil(zone_nr,i+3) shift (-24) 7 2648 extract 24; 7 2649 værdi(4) := fil(zone_nr,i+3) extract 24; 7 2650 goto fundet; 7 2651 end; 6 2652 6 2652 if top = 122 then <*overløb *> 6 2653 hashnøgle := (hashnøgle mod max_segm) + 1; 6 2654 until top < 122 or hashnøgle = start_segm; 6 2655 6 2655 <* navn findes ikke *> 6 2656 param := 2; 6 2657 for j := 1 step 1 until 4 do 6 2658 værdi(j) := aktuel_param(j); 6 2659 fundet: ; 6 2660 end <*tabel_id <> 0 *> 5 2661 else 5 2662 for i := 1 step 1 until 4 do 5 2663 værdi(i) := aktuel_param(i); 5 2664 end <* case 1 *>; 4 2665 \f 4 2665 message procedure param side 7 - 810310/cl,hko; 4 2666 4 2666 <* case 2 - ciffer *> 4 2667 cif: begin 5 2668 type:=tal := 0; 5 2669 while klasse(tegn) = 2 do 5 2670 begin 6 2671 type:=type+1; 6 2672 tal := tal * 10 + (tegn - 48); 6 2673 læs_tegn(txt,lpos,tegn); 6 2674 end; 5 2675 if minus then tal := -tal; 5 2676 værdi(1) := tal; 5 2677 sep := tegn; 5 2678 param := 0; 5 2679 end <* case 2 *>; 4 2680 \f 4 2680 message procedure param side 8 - 810428/cl; 4 2681 4 2681 <* case 3 - specialtegn *> 4 2682 spc: begin 5 2683 if tegn = '-' then 5 2684 begin 6 2685 læs_tegn(txt,lpos,tegn); 6 2686 if klasse(tegn) = 2 then 6 2687 begin 7 2688 minus := true; 7 2689 goto cif; 7 2690 end 6 2691 else 6 2692 begin 7 2693 tegn := '-'; 7 2694 lpos := lpos - 1; 7 2695 end; 6 2696 end; 5 2697 <* syntaxfejl *> 5 2698 param := if separator then 1 else 3; 5 2699 sep := tegn; 5 2700 end <* case 3 *>; 4 2701 4 2701 <* case 4 - separator *> 4 2702 begin 5 2703 separator := true; 5 2704 goto spc; 5 2705 end <* case 4 *>; 4 2706 4 2706 end <* case *>; 3 2707 3 2707 lpos := lpos - 1; 3 2708 slut: 3 2709 pos := lpos; 3 2710 end; 2 2711 \f 2 2711 message procedure læs_param_sæt side 1 - 830310/cl; 2 2712 2 2712 integer procedure læs_param_sæt(tekst,pos,ant,parm,term,res); 2 2713 integer array tekst, parm; 2 2714 integer pos,ant, term,res; 2 2715 2 2715 <* proceduren læser et sammenhørende sæt parametre 2 2716 afsluttet med (sp),(nl),(;),(,) eller (nul) 2 2717 2 2717 læs_param_sæt returstatus eller 'typen' af det læste parametersæt 2 2718 (retur,int) 2 2719 type ant parm indeholder: 2 2720 <0: x (ingenting) 'læs_param_sæt= nr på fejlkvit.' 2 2721 0: 0 (ingenting) 'rest kommando er tom' 2 2722 1: 1 (tekst) 'indtil 11 tegn' 2 2723 2: 1 (pos.tal) 2 2724 3: 1 (neg.tal) 2 2725 4: 1 (pos.tal<1000)(bogstav) 'linienummer' 2 2726 5: 1 G(pos.tal<100) 'gruppe_ident' 2 2727 6: 2 (linie)/(løb) 'vogn_ident' 2 2728 7: 3 (bus)/(linie)/(løb) 2 2729 8: 3 (linie).(indeks):(løb) 2 2730 9: 2 (linie).(indeks) 2 2731 10: 2 (pos.tal).(pos.tal) 2 2732 11: 2-3 G(pos.tal<100):(vogn) '(vogn)::=(bus)!(linie)/(løb)' 2 2733 12: 3 D.(dato).(tid) 2 2734 2 2734 tekst indeholder teksten hvori parametersættet 2 2735 (kald,int.arr.) skal søges. 2 2736 2 2736 pos 2 2737 (kald/retur,int.) position efter hvilken søgningen starter, og 2 2738 ved retur positionen for afsluttende tegn. 2 2739 (ikke ændret ved fejl) 2 2740 2 2740 ant hvis kaldeværdien er >0 skal parametersættet 2 2741 (kald/retur,int) indeholde det angivne antal enkeltparametre, 2 2742 i modsat fald returneres med fejltype -26 2 2743 (skilletegn) eller -25 (parameter mangler). 2 2744 ellers læses op til 3 enkeltparametre. retur- 2 2745 værdien afhænger af det læste parametersæts 2 2746 type, se ovenfor under læs_param_sæt. 2 2747 \f 2 2747 message procedure læs_param_sæt side 2 - 810428/hko; 2 2748 2 2748 parm skal omfatte elementerne 1 til 4. 2 2749 (retur,int.arr.) ved returstatus<=0 indeholder alle elemen- 2 2750 terne værdien 0. 2 2751 2 2751 type (element,indhold) 2 2752 1: 1-4,teksten 2 2753 2-3: 1, talværdien 2 2754 4: 1, tal shift 5 +tegnværdi (A=1,B=2,--,Å=29) 2 2755 5: 1, talværdi (uden G) 2 2756 6: 1, (som'4') shift 7 + løb 2 2757 7: 1, bus 2 2758 2, linie/løb som '6' 2 2759 8: 1, tal shift 5 eller som '4' 2 2760 2, tekst (1-3 bogstaver) 2 2761 3, løb 2 2762 9: 1 og 2, som '8' 2 2763 10: 1, talværdi 2 2764 2, talværdi 2 2765 11: 1, som '5' 2 2766 2, vogn (bus eller linie/løb) 2 2767 12: 1, dato 2 2768 2, tid 2 2769 2 2769 term iso-tegnværdien for tegnet der afslutter 2 2770 (retur,int) parameter_sættet. 2 2771 2 2771 res som læs_param_sæt. 2 2772 (retur,int) 2 2773 2 2773 *> 2 2774 \f 2 2774 message procedure læs_param_sæt side 3 - 810310/hko; 2 2775 2 2775 begin 3 2776 integer max_ant; 3 2777 3 2777 max_ant:= 3; 3 2778 3 2778 begin 4 2779 integer 4 2780 i,j,k, <* hjælpe variable *> 4 2781 nr, <* nummer på parameter i sættet *> 4 2782 apos, <* aktuel tegnposition *> 4 2783 cifre, <* parametertype (param: 0=tekst, >1=tal) *> 4 2784 sep; <* afsluttende skilletegn ved param *> 4 2785 4 2785 integer array field 4 2786 iaf; <* hjælpe variabel *> 4 2787 4 2787 integer array 4 2788 par(1:4*max_ant), <* 4 elementer for hver aktuel parameter *> 4 2789 s, <* 1 element med separator for hver parameter *> 4 2790 t(1:max_ant), <* 1 element med typen for hver parameter *> 4 2791 værdi(1:4), <* værdi af aktuel parameter jvf. param *> 4 2792 spec(1:1); <* specialtegn i navne jvf. param *> 4 2793 4 2793 <* de interne typer af enkeltparametre er 4 2794 4 2794 type parameter 4 2795 4 2795 1: 1-3 tegn tekst (1 ord) 4 2796 2: 4-6 tegn (2 ord) 4 2797 3: 7-9 tegn (3 ord) 4 2798 4:10-11 tegn (4 ord) 4 2799 5: positivt heltal 4 2800 6: negativt heltal 4 2801 7: positivt heltal<1000 efterfulgt af stort bogstav 4 2802 8: G efterfulgt af positivt heltal<100 4 2803 4 2803 *> 4 2804 \f 4 2804 message procedure læs_param_sæt side 4 - 810408/hko; 4 2805 4 2805 nr:= 0; 4 2806 res:= -1; 4 2807 spec(1):= 0; <* ingen specialtegn *> 4 2808 apos:= pos; 4 2809 for i:= 1 step 1 until 4 do parm(i):= 0; 4 2810 for i:= 1 step 1 until max_ant do 4 2811 begin 5 2812 s(i):= t(i):= 0; 5 2813 for j:= 1 step 1 until 4 do par((i-1)*4+j):= 0; 5 2814 end; 4 2815 repeat 4 2816 <* skip foranstillede sp-tegn *> 4 2817 for i:= param(tekst,apos,spec,0<*intet tabelopslag*>,cifre,værdi,sep) 4 2818 while i=1 and sep='sp' do; 4 2819 <*+2*> 4 2820 begin 5 2821 if testbit25 and testbit26 then 5 2822 disable begin 6 2823 write(out,"nl",1,<:param (apos,cifre,sep):>,<< -dddd>, 6 2824 i,apos,cifre,sep); 6 2825 laf:=0; 6 2826 if cifre<>0 then 6 2827 write(out,<: værdi(1-4)::>, 6 2828 << -dddd>,værdi(1),værdi(2),værdi(3),værdi(4)) 6 2829 else write(out,<: værdi::>,værdi.laf); 6 2830 ud; 6 2831 end; 5 2832 end; 4 2833 <*-2*> 4 2834 ; 4 2835 if i<>0 then <* ikke ok *> 4 2836 begin 5 2837 if i=1 and (sep=',' or sep=';') then <* slut_tegn*> 5 2838 begin 6 2839 apos:= apos -1; 6 2840 res:= 0; 6 2841 end 5 2842 else if i=1 then res:=-26 <* skilletegn *> 5 2843 else <* i=5 *> res:= -25 <* parameter mangler *> 5 2844 end 4 2845 else <* i=0 *> 4 2846 begin 5 2847 if sep=',' or sep=';' then apos:=apos-1; 5 2848 iaf:= nr*8; 5 2849 nr:= nr +1; 5 2850 \f 5 2850 message procedure læs_param_sæt side 5 - 810520/hko/cl; 5 2851 5 2851 if cifre=0 <* navne_parameter *> then 5 2852 begin 6 2853 if værdi(2)=0 6 2854 and læstegn(værdi,1,i)='G' 6 2855 and læstegn(værdi,2,j)>'0' and j<='9' 6 2856 and (læstegn(værdi,3,k)=0 or (k>='0' and k<='9')) 6 2857 then 6 2858 begin <* gruppenavn, repræsenteres som tal *> 7 2859 t(nr):= 8; 7 2860 j:= j -'0'; 7 2861 par.iaf(1):= if k=0 then j else (j*10+(k-'0')); 7 2862 s(nr):= sep; 7 2863 end 6 2864 else 6 2865 begin <* generel tekst *> 7 2866 i:= 0; 7 2867 for i:= i +1 while i<=4 do 7 2868 begin 8 2869 if værdi(i)<>0 then 8 2870 begin 9 2871 t(nr):= i; 9 2872 par.iaf(i):= værdi(i); 9 2873 end 8 2874 else i:= 4; 8 2875 end; 7 2876 s(nr):= sep; 7 2877 end <* generel tekst *> 6 2878 end <* navne_parameter *> 5 2879 else 5 2880 begin <* talparameter *> 6 2881 i:= if værdi(1)<0 then 6 <* neg.tal *> 6 2882 else if værdi(1)>0 and værdi(1)<1000 6 2883 and sep>='A' and sep<='Å' then 7 6 2884 else 5 <* positivt tal *>; 6 2885 t(nr):= i; 6 2886 par.iaf(1):= if i<>7 then værdi(1) 6 2887 else værdi(1) shift 5 +(sep+1-'A'); 6 2888 par.iaf(2):= cifre; 6 2889 apos:= apos+1; 6 2890 s(nr):= if i=7 then læstegn(tekst,apos,sep) else sep; 6 2891 apos:= apos-1; 6 2892 end; 5 2893 end;<* i=0 *> 4 2894 until (ant>0 and nr=ant) 4 2895 or nr=max_ant 4 2896 or res<> -1 4 2897 or sep='sp' or sep=';' or sep='em' 4 2898 or sep=',' or sep='nl' or sep='nul'; 4 2899 \f 4 2899 message procedure læs_param_sæt side 6 - 810508/hko; 4 2900 4 2900 if ant>nr then res:= -25 <*parameter mangler*> 4 2901 else 4 2902 if nr=0 or t(1)=0 then 4 2903 begin <* ingen parameter før skilletegn *> 5 2904 if res=-25 then res:= 0; 5 2905 end 4 2906 else if sep<>'sp' and sep<>'nl' and sep <> 'em' 4 2907 and sep<>';' and sep<>',' then 4 2908 begin <* ulovligt afsluttende skilletegn *> 5 2909 res:= -26; 5 2910 end 4 2911 else 4 2912 begin <* en eller flere lovligt afsluttede parametre *> 5 2913 if t(1)<5 and nr=1 then 5 2914 5 2914 <* 1 navne_parameter *> 5 2915 5 2915 begin 6 2916 res:= 1; 6 2917 tofrom(parm,par,8); 6 2918 end 5 2919 else if <*t(1)<9 and *> nr=1 then 5 2920 5 2920 <* 1 parameter af anden type *> 5 2921 5 2921 begin <*tal,linie eller gruppe *> 6 2922 res:= t(1) -3; 6 2923 parm(1):= par(1); 6 2924 end 5 2925 else if t(1)=5 <* pos.tal *> or t(1)=7 <*linie*> then 5 2926 5 2926 <* mere end 1 parameter, hvoraf 1. er pos.tal eller linienr *> 5 2927 5 2927 begin 6 2928 i:= par(1); <* lovlige parametre er alle repræsenteret i et ord *> 6 2929 j:= par(5); <* internt *> 6 2930 k:= par(9); <* *> 6 2931 if nr=2 then 6 2932 <* 2 parametre i sættet *> 6 2933 begin 7 2934 res:= if (s(1)='/' or s(1)='.') and t(2)=5 <*pos.tal*> then 6 7 2935 else if s(1)='.' and t(2)=1 then 9 7 2936 else if s(1)='-' and t(1)=5 and t(2)=5 then 10 7 2937 else if s(1)<>'/' and s(1)<>'.' 7 2938 and s(1)<>'-' then -26 <* skilletegn *> 7 2939 else -27;<* parametertype*> 7 2940 \f 7 2940 message procedure læs_param_sæt side 7 - 810501/hko; 7 2941 7 2941 <* mere end 1 parameter, hvoraf 1. er pos.tal eller linienr *> 7 2942 7 2942 <* 2 parametre i sættet *> 7 2943 if res=6 then 7 2944 begin 8 2945 if (i<1 or i>999) and t(1)=5 then 8 2946 res:= -5 <* ulovligt linienr *> 8 2947 else if (j<1 or j>99) then 8 2948 res:= -6 <* ulovligt løbsnr *> 8 2949 else 8 2950 begin 9 2951 if t(1)=5 then i:= i shift 5; 9 2952 parm(1):= i shift 7 +j; 9 2953 end; 8 2954 end <* res=6 *> 7 2955 else if res=9 then 7 2956 begin 8 2957 if t(1)=5 and (i<1 or 999<i) then 8 2958 res:= -5 <*ulovligt linienr*> 8 2959 else 8 2960 begin 9 2961 if t(1)=5 then i:=i shift 5; 9 2962 parm(1):= i; 9 2963 parm(2):= j; 9 2964 end; 8 2965 end <* res=9 *> 7 2966 else if res=10 then 7 2967 begin 8 2968 begin 9 2969 parm(1):= i; 9 2970 parm(2):= j; 9 2971 end; 8 2972 end; <* res=10 *> 7 2973 end <* nr=2 *> 6 2974 else 6 2975 if nr=3 then 6 2976 <* 3 paramtre i sættet *> 6 2977 begin 7 2978 res:= if (s(1)='/' or s(1)='.') and 7 2979 (s(2)='/' or s(2)='.') then 7 7 2980 else if s(1)='.' and s(2)=':' then 8 7 2981 else -26; <* skilletegn *> 7 2982 \f 7 2982 message procedure læs_param_sæt side 8 - 810501/hko; 7 2983 7 2983 <* mere end 1 parameter, hvoraf 1. er pos.tal eller linienr *> 7 2984 <* 3 parametre i sættet *> 7 2985 if res=7 then 7 2986 begin 8 2987 if t(1)<>5 or (t(2)<>5 and t(2)<>7) 8 2988 or t(3)<>5 then 8 2989 res:= -27 <* parametertype *> 8 2990 else 8 2991 if i<1 or i>9999 then res:= -7 <* ulovligt busnr *> 8 2992 else if t(2)=5 and (j<1 or j>999) then res:=-5 <* linie *> 8 2993 else if k<1 or k>99 then res:= -6 <* løb *> 8 2994 else 8 2995 begin <* ok *> 9 2996 parm(1):= i; 9 2997 if t(2)=5 then j:= j shift 5; 9 2998 parm(2):= j shift 7 +k; 9 2999 end; 8 3000 end 7 3001 else if res=8 then 7 3002 begin 8 3003 if t(2)<>1 or t(3)<>5 then res:= -27 8 3004 else if t(1)=5 and (i<1 or i>999) then res:= -5 8 3005 else if k<1 or k>99 then res:= -6 8 3006 else 8 3007 begin 9 3008 if t(1)=5 then i:= i shift 5; 9 3009 parm(1):= i; 9 3010 parm(2):= j; 9 3011 parm(3):= k; 9 3012 end; 8 3013 end; 7 3014 end <* nr=3 *> 6 3015 else res:=-24; <* syntaks *> 6 3016 \f 6 3016 message procedure læs_param_sæt side 9 - 810428/hko; 6 3017 6 3017 end <* mere end 1 parameter,hvoraf 1. er pos.tal eller linienr *> 5 3018 else if t(1)=8 <* gruppe_id *> then 5 3019 begin 6 3020 <* mere end 1 parameter , hvoraf den første 6 3021 er en gruppe_identifikation ved navn. 6 3022 lovlige parametre er alle internt repræsenteret i et ord *> 6 3023 6 3023 i:=par(1); 6 3024 j:=par(5); 6 3025 k:=par(9); 6 3026 6 3026 if nr=2 then 6 3027 <* 2 parametre *> 6 3028 begin 7 3029 res:=if s(1)=':' and t(2)=5 then 11 7 3030 else if s(1)<>':' then -26 <* skilletegn *> 7 3031 else -27; <*param.type *> 7 3032 if res=11 then 7 3033 begin 8 3034 if j<1 or j>9999 then res:=-7 <* ulovligt busnr *> 8 3035 else 8 3036 begin 9 3037 parm(1):=i; 9 3038 parm(2):=j; 9 3039 end; 8 3040 end; 7 3041 \f 7 3041 message procedure læs_param_sæt side 10 - 810428/hko; 7 3042 7 3042 <* mere end 1 parameter, hvoraf 1. er en gruppeidentifikation ved navn *> 7 3043 7 3043 end <*nr=2*> 6 3044 else if nr=3 then 6 3045 <* 3 parametre *> 6 3046 begin 7 3047 res:=if s(1)=':' and s(2)='/' then 11 7 3048 else -26; <* skilletegn *> 7 3049 if res=11 then 7 3050 begin 8 3051 if (t(2)<>5 and t(2)<>7) or t(3)<>5 then res:=-27 <*param.type*> 8 3052 else 8 3053 begin 9 3054 if t(2)=5 and (j<1 or j>999) then res:=-5 <* linie *> 9 3055 else 9 3056 begin 10 3057 parm(1):=i; 10 3058 if t(2)=5 then j:=j shift 5; 10 3059 parm(2):= 1 shift 22 +j shift 7 +k; 10 3060 end; 9 3061 end; 8 3062 end; 7 3063 end <* nr=3 *> 6 3064 else res:=-24; <* syntaks *> 6 3065 \f 6 3065 message procedure læs_param_sæt side 11 - 810501/hko; 6 3066 6 3066 end <* t(1)=8 *> 5 3067 else if t(1)=1 and par(1)= 'D' shift 16 then 5 3068 begin 6 3069 <* mere end 1 parameter i sættet og 1. parameter er et 'D'. 6 3070 lovlige parametre er alle internt repræsenteret i et ord. *> 6 3071 i:=par(1); 6 3072 j:=par(5); 6 3073 k:=par(9); 6 3074 6 3074 if nr=3 then 6 3075 begin 7 3076 res:=if s(1)='.' and s(2)='.' then 12 7 3077 else -26; <* skilletegn *> 7 3078 if res=12 then 7 3079 begin 8 3080 if t(2)<>5 or t(3)<>5 then res:=-27 <* param. type *> 8 3081 else 8 3082 begin 9 3083 integer år,md,dg,tt,mm,ss; 9 3084 real dato,tid; 9 3085 år:=j//10000; 9 3086 md:=(j//100) mod 100; 9 3087 dg:=j mod 100; 9 3088 cifre:= par(10); 9 3089 tt:=if cifre>4 then k//10000 else if cifre>2 then k//100 9 3090 else k; 9 3091 mm:=if cifre>4 then (k//100) mod 100 9 3092 else if cifre>2 then k mod 100 else 0; 9 3093 ss:=if cifre>4 then k mod 100 else 0; 9 3094 \f 9 3094 message procedure læs_param_sæt side 12 - 810501/hko; 9 3095 9 3095 dato:=systime(5,0.0,tid); 9 3096 if j=0 then dg:=round dato mod 100; 9 3097 if år=0 and md=0 then md:=(round dato//100) mod 100; 9 3098 if år=0 then år:=round dato//10000; 9 3099 if år>99 or md<1 or md>12 or tt>23 or mm>59 or ss>59 then 9 3100 res:=-24 <* syntaks *> 9 3101 else if dg<1 or dg > (case md of ( 9 3102 31,(if år mod 4=0 then 29 else 28),31, 30,31,30, 9 3103 31,31,30, 31,30,31)) then res:=-24 9 3104 else 9 3105 begin 10 3106 parm(1):=år*10000+md*100+dg; 10 3107 parm(2):=tt*10000+mm*100+ss; 10 3108 end; 9 3109 end; 8 3110 8 3110 end; <* res=12 *> 7 3111 end <* nr=3 *> 6 3112 else res:=-24; <*syntaks*> 6 3113 end <* t(1)=1 and par(1)='D' shift 16 *> 5 3114 5 3114 else res:=-27;<*parametertype*> 5 3115 end; <* en eller flere parametre *> 4 3116 4 3116 læs_param_sæt:= res; 4 3117 term:= sep; 4 3118 if res>= 0 then pos:= apos; 4 3119 end; 3 3120 end læs_param_sæt; 2 3121 \f 2 3121 message procedure læs_kommando side 1 - 810428/hko; 2 3122 2 3122 integer procedure læs_kommando(z,kilde,op_ref,pos,indeks,sep,slut_tegn); 2 3123 value kilde; 2 3124 zone z; 2 3125 integer kilde, pos,indeks,sep,slut_tegn; 2 3126 integer array field op_ref; 2 3127 2 3127 <* proceduren indlæser er kommmando fra en terminal (telex, 2 3128 skærm eller skrivemaskine). ved indlæsning fra skærm eller 2 3129 skrivemaskine inviteres først ved udskrivning af '>'-tegn. 2 3130 for terminalers vedkommendeslettes linie 23 og 24 og 'cursor' positioneres til 2 3131 23'ende linie inden invitation. 2 3132 *> 2 3133 \f 2 3133 message procedure læs_kommando side 2 - 810428/hko; 2 3134 2 3134 begin 3 3135 integer 3 3136 a_pos, 3 3137 a_res,res, 3 3138 i,j,k; 3 3139 boolean 3 3140 skip; 3 3141 3 3141 <*V*>setposition(z,0,0); 3 3142 3 3142 case kilde//100 of 3 3143 begin 4 3144 begin <* io *> 5 3145 write(z,"nl",1,">",1); 5 3146 end; 4 3147 4 3147 begin <* operatør *> 5 3148 cursor(z,24,1); 5 3149 write(z,"esc" add 128,1,<:ÆK:>); 5 3150 cursor(z,23,1); 5 3151 write(z,"esc" add 128,1,<:ÆK:>); 5 3152 outchar(z,'>'); 5 3153 end; 4 3154 4 3154 begin <* garageterminal *> ; 5 3155 outchar(z,'nl'); 5 3156 end 4 3157 end; 3 3158 3 3158 <*V*>setposition(z,0,0); 3 3159 \f 3 3159 message procedure læs_kommando side 3 - 810921/hko,cl; 3 3160 3 3160 res:=0; 3 3161 skip:= false; 3 3162 <*V*> 3 3163 k:=læs_store(z,i); 3 3164 3 3164 apos:= 1; 3 3165 while k<=6 <*klasse=bogstav*> do 3 3166 begin 4 3167 if a_pos<3 then skriv_tegn(d.op_ref.data,apos,i); 4 3168 <*V*> k:= læs_store(z,i); 4 3169 end; 3 3170 3 3170 skip:= skip or i='?' or (a_pos=1 and (i=',' or i=';')); 3 3171 3 3171 if i=',' and a_pos>1 then 3 3172 begin 4 3173 skrivtegn(d.op_ref.data,a_pos,i); 4 3174 repeat 4 3175 <*V*> k:= læs_store(z,i); 4 3176 if a_pos=4 and k=6 then skriv_tegn(d.op_ref.data,a_pos,i); 4 3177 until k>=7; 4 3178 end; 3 3179 3 3179 pos:=a_pos; 3 3180 while k<8 do 3 3181 begin 4 3182 if a_pos< (att_op_længde//2*3-2) then 4 3183 skriv_tegn(d.op_ref.data,a_pos,i); 4 3184 skip:= skip or i='?'; 4 3185 <*V*> k:= læs_store(z,i); 4 3186 pos:=pos+1; 4 3187 end; 3 3188 3 3188 skip:= skip or i='?' or i='esc'; 3 3189 slut_tegn:= i; 3 3190 skrivtegn(d.op_ref.data,apos,'em'); 3 3191 afslut_text(d.op_ref.data,apos); 3 3192 \f 3 3192 message procedure læs_kommando side 4 - 820301/hko/cl; 3 3193 3 3193 disable 3 3194 begin 4 3195 integer 4 3196 i1, 4 3197 nr, 4 3198 partype, 4 3199 cifre; 4 3200 integer array 4 3201 spec(1:1), 4 3202 værdi(1:4); 4 3203 4 3203 <*+2*> 4 3204 if testbit25 and overvåget then 4 3205 disable begin 5 3206 real array field raf; 5 3207 write(out,"nl",1,<:kommando læst::>); 5 3208 laf:=data; 5 3209 write(out,d.op_ref.laf,<:<'<'>sluttegn<'>'>=:>,<<d>,sluttegn, 5 3210 <: skip=:>,if skip then <:true:> else <:false:>); 5 3211 ud; 5 3212 end; 4 3213 <*-2*> 4 3214 4 3214 for i:=1 step 1 until 32 do ia(i):=0; 4 3215 4 3215 if skip then 4 3216 begin 5 3217 res:=53; <*annulleret*> 5 3218 pos:= -1; 5 3219 goto slut_læskommando; 5 3220 end; 4 3221 \f 4 3221 message procedure læs_kommando side 5 - 850820/cl; 4 3222 4 3222 i:= kilde//100; <* hovedmodul *> 4 3223 k:= kilde mod 100; <* løbenr *> 4 3224 <* if pos>79 then linieoverløb; *> 4 3225 pos:=a_pos:=0; 4 3226 spec(1):= ',' shift 16; 4 3227 4 3227 <*+4*> 4 3228 if k<1 or k>(case i of (1,max_antal_operatører, 4 3229 max_antal_garageterminaler)) then 4 3230 begin 5 3231 fejlreaktion(3<*programfejl*>,kilde,<:ukendt kilde til kommando:>,1); 5 3232 res:=31; 5 3233 end 4 3234 else 4 3235 <*-4*> 4 3236 if i>0 and i<4 then <* io, operatør eller garageterminal *> 4 3237 begin 5 3238 <* læs operationskode *> 5 3239 j:=param(d.op_ref.data,apos,spec,tf_kommandotabel,cifre,værdi,sep); 5 3240 5 3240 res:= if j=1 and sep='.' and i=2<*operatør*> then -1 <* skærmopdatering *> 5 3241 else if cifre>0 or j=1 or j=3 or j=5 then 24 <* syntaks *> 5 3242 else if j=2 then 4 <*ukendt kommando*> 5 3243 else if j=4 then 31 <*systemfejl: ukendt tabelfil*> 5 3244 else if sep<>'sp' and sep<>',' 5 3245 and sep<>'nl' and sep<>';' 5 3246 and sep<>'nul' and sep<>'em' then 26 5 3247 <*skilletegn*> 5 3248 else if -, læsbit_i(værdi(4),i-1) then 4 5 3249 <* logand(extend 0 add værdi(4) 5 3250 extend 1 shift (case i of (0,k,8+k)))=0 then 4 5 3251 *> <*ukendt kommando*> 5 3252 else 1; 5 3253 \f 5 3253 message procedure læs_kommando side 5a- 810409/hko; 5 3254 5 3254 <*+2*>if testbit25 and overvåget then 5 3255 begin 6 3256 write(out,"nl",0,<:funk opslag: param,apos,cifre,sep,res::>, 6 3257 << -dddd>,j,apos,cifre,sep,res, 6 3258 <: værdi(1-4)::>,værdi(1),værdi(2),værdi(3),værdi(4), 6 3259 "nl",0); 6 3260 if j<>0 then skriv_op(out,op_ref); 6 3261 ud; 6 3262 end; 5 3263 <*-2*> 5 3264 5 3264 if res=31 then fejlreaktion(18<*tabelfil*>,j, 5 3265 <:=res, filnr 1025, læskommando:>,0); 5 3266 5 3266 if res=1 then <* operationskode ok *> 5 3267 begin 6 3268 if sep<>'sp' then apos:=apos-1; 6 3269 d.op_ref.opkode:=værdi(1); 6 3270 indeks:=værdi(2); 6 3271 partype:= værdi(3); 6 3272 nr:= 0; 6 3273 pos:= apos; 6 3274 \f 6 3274 message procedure læs_kommando side 6 - 810409/hko; 6 3275 6 3275 while res=1 do 6 3276 begin 7 3277 læs_param_sæt(d.op_ref.data,apos,0<*indtil 3 enkeltparametre*>, 7 3278 værdi,sep,a_res); 7 3279 nr:= nr +1; 7 3280 i1:= værdi(1); 7 3281 <*+2*> if testbit25 and overvåget then 7 3282 begin 8 3283 write(out,"nl",1,<:param sæt: apos,sep,ares::>,<< -dddddd>, 8 3284 apos,sep,ares,<: værdi(1-4)::>, 8 3285 værdi(1),værdi(2),værdi(3),værdi(4), 8 3286 "nl",0); 8 3287 ud; 8 3288 end; 7 3289 <*-2*> 7 3290 case par_type of 7 3291 begin 8 3292 8 3292 <*1: (<ingenting>!<busnr> (<omr>)!<linienr>/<løbnr> (<omr>)) *> 8 3293 8 3293 begin 9 3294 if nr=1 then 9 3295 begin 10 3296 if a_res=0 then res:=2 <*godkendt*> 10 3297 else if a_res=2 and (i1<1 or i1>9999) 10 3298 then res:=7 <*busnr ulovligt*> 10 3299 else if a_res=2 or a_res=6 then 10 3300 begin 11 3301 ia(1):= if a_res=2 then i1 11 3302 else 1 shift 22 +i1; 11 3303 end 10 3304 else res:= 27; <*parametertype*> 10 3305 if res<4 then pos:= apos; 10 3306 end <*nr=1*> 9 3307 else 9 3308 if nr=2 then 9 3309 begin 10 3310 if ares=0 then res:= 2 <*godkendt*> 10 3311 else if ares=1 then 10 3312 begin 11 3313 ia(2):= find_område(i1); 11 3314 if ia(2)=0 then res:= 17; <* kanal-nr ukendt *> 11 3315 end 10 3316 else res:= 27; <* syntaks, parametertype *> 10 3317 end 9 3318 else 9 3319 if ares=0 then res:= 2<*godkendt*> else res:= 24 <* syntaks *>; 9 3320 end; 8 3321 \f 8 3321 message procedure læs_kommando side 7 - 810226/hko; 8 3322 8 3322 <*2: (<busnr> (<område>)!<linie>/<løbnr>) *> 8 3323 8 3323 begin 9 3324 if nr=1 then 9 3325 begin 10 3326 if a_res=0 then res:=25 <*parameter mangler*> 10 3327 else if a_res=2 and (i1<1 or i1>9999) 10 3328 then res:=7 <*busnr ulovligt*> 10 3329 else if a_res=2 or a_res=6 then 10 3330 begin 11 3331 ia(1):=if a_res=2 then i1 11 3332 else 1 shift 22 +i1; 11 3333 end 10 3334 else res:= 27; <*parametertype*> 10 3335 if res<4 then pos:=a_pos; 10 3336 end 9 3337 else 9 3338 if nr=2 then 9 3339 begin 10 3340 if ares=0 then res:= 2 <*godkendt*> else 10 3341 if ares=1 and ia(1) shift (-21) = 0 then 10 3342 begin 11 3343 ia(2):= findområde(i1); 11 3344 if ia(2)=0 then res:= 56; <*område ukendt*> 11 3345 end 10 3346 else res:= 27; 10 3347 if res<4 then pos:= apos; 10 3348 end 9 3349 else 9 3350 if ares=0 then res:= 2 else res:= 24<*syntaks*>; 9 3351 end; 8 3352 \f 8 3352 message procedure læs_kommando side 8 - 810223/hko; 8 3353 8 3353 <*3: (<linie>!G<nr>) *> 8 3354 8 3354 begin 9 3355 if nr=1 then 9 3356 begin 10 3357 if a_res=0 then res:=25 <*parameter mangler*> 10 3358 else if a_res=2 and (i1<1 or i1>999) then res:=5 10 3359 <*linienr ulovligt*> 10 3360 else if a_res=2 or a_res=4 or a_res=5 then 10 3361 begin 11 3362 ia(1):= 11 3363 if a_res=2 then 4 shift 21 +i1 shift 5 11 3364 else if a_res=4 then 4 shift 21 +i1 11 3365 else <* a_res=5 *> 5 shift 21 +i1; 11 3366 end 10 3367 else res:=27; <* parametertype *> 10 3368 if res<4 then pos:= a_pos; 10 3369 end 9 3370 else 9 3371 res:= if nr=2 and a_res<>0 then 24<*syntaks*> 9 3372 else 2;<*godkendt*> 9 3373 end; 8 3374 8 3374 <*4: <ingenting> *> 8 3375 8 3375 begin 9 3376 res:= if a_res<>0 then 24<*syntaks*> 9 3377 else 2;<*godkendt*> 9 3378 end; 8 3379 \f 8 3379 message procedure læs_kommando side 9 - 810226/hko; 8 3380 8 3380 <*5: (<kanalnr>) *> 8 3381 8 3381 begin 9 3382 long field lf; 9 3383 9 3383 if nr=1 then 9 3384 begin 10 3385 if a_res=0 then res:= 25 10 3386 else if a_res<>1 then res:=27<*parametertype*> 10 3387 else 10 3388 begin 11 3389 j:= 0; lf:= 4; 11 3390 for i:= 1 step 1 until max_antal_kanaler do 11 3391 if kanal_navn(i)=værdi.lf then j:= i; 11 3392 if j<>0 then 11 3393 begin 12 3394 ia(1):= 3 shift 22 + j; 12 3395 res:= 2; 12 3396 end 11 3397 else 11 3398 res:= 17; <* kanal ukendt *> 11 3399 end; 10 3400 if res<4 then pos:= a_pos; 10 3401 end 9 3402 else 9 3403 res:=if nr=2 and a_res<>0 then 24<*syntaks*> 9 3404 else 2;<*godkendt*> 9 3405 end; 8 3406 \f 8 3406 message procedure læs_kommando side 10 - 810415/hko; 8 3407 8 3407 <*6: <busnr>/<linie>/<løb> (<område>) *> 8 3408 8 3408 begin 9 3409 if nr=1 then 9 3410 begin 10 3411 if a_res=0 then res:=25<*parameter mangler*> 10 3412 else if a_res=7 then 10 3413 begin 11 3414 ia(1):= i1; 11 3415 ia(2):= 1 shift 22 + værdi(2); 11 3416 end 10 3417 else res:=27;<*parametertype*> 10 3418 if res<4 then pos:= apos; 10 3419 end 9 3420 else 9 3421 if nr=2 then 9 3422 begin 10 3423 if ares=0 then res:= 2 <*godkendt*> else 10 3424 if ares=1 then 10 3425 begin 11 3426 ia(3):= findområde(i1); 11 3427 if ia(3)=0 then res:= 56; <* område ukendt *> 11 3428 end 10 3429 else res:= 27; <*parametertype*> 10 3430 if res<4 then pos:= apos; 10 3431 end 9 3432 else 9 3433 if ares=0 then res:= 2 else res:= 24; 9 3434 end; 8 3435 \f 8 3435 message procedure læs_kommando side 11 - 810512/hko/cl; 8 3436 8 3436 8 3436 <* att_op_længde//2-2 *> 8 3437 <*7: <linienr>.<indeks>:<løbnr> (<interval>.<løb>) *> 8 3438 <* 1 *> 8 3439 8 3439 begin 9 3440 if nr=1 then 9 3441 begin 10 3442 if a_res=0 then res:=25 <*parameter mangler*> 10 3443 else if a_res=8 then 10 3444 begin 11 3445 ia(1):= 4 shift 21 + i1; 11 3446 ia(2):= værdi(2); 11 3447 ia(3):= værdi(3); 11 3448 indeks:= 3; 11 3449 end 10 3450 else res:=27;<*parametertype*> 10 3451 end 9 3452 else if nr<=att_op_længde//2-2 then 9 3453 begin 10 3454 if a_res=0 and (sep=',' or nr>2) then res:=2<*godkendt*> 10 3455 else if a_res=0 then res:=25 <* parameter mangler *> 10 3456 else if a_res=10 then 10 3457 begin 11 3458 if i1>0 and i1<100 and værdi(2)>0 and værdi(2)<100 then 11 3459 begin 12 3460 ia(nr+2):= i1 shift 12 + værdi(2); 12 3461 indeks:= nr +2; 12 3462 end 11 3463 else if i1<1 or i1>99 then res:=44 <*intervalstr. ulovlig*> 11 3464 else res:=6; <*løb-nr ulovligt*> 11 3465 end 10 3466 else res:=27;<*parametertype*> 10 3467 end 9 3468 else 9 3469 res:= if a_res=0 then 2 else 24;<* syntaks *> 9 3470 if res<4 then pos:=a_pos; 9 3471 end; 8 3472 \f 8 3472 message procedure læs_kommando side 12 - 810306/hko; 8 3473 8 3473 <*8: (<operatør>!<radiokanal>!<garageterminal>) *> 8 3474 8 3474 begin 9 3475 if nr=1 then 9 3476 begin 10 3477 if a_res=0 then res:=25 <* parameter mangler *> 10 3478 else if a_res=2 then 10 3479 begin 11 3480 j:=d.op_ref.opkode; 11 3481 ia(1):=i1; 11 3482 k:=(j+1)//2; 11 3483 if k<1 or k=3 or k>4 then 11 3484 fejlreaktion(3<*programfejl*>,j,<:opkode, partype=8:>,1) 11 3485 else 11 3486 begin 12 3487 if k=4 then k:=3; 12 3488 if i1<1 or i1> (case k of 12 3489 (max_antal_operatører,max_antal_radiokanaler, 12 3490 max_antal_garageterminaler)) 12 3491 then res:=case k of (28,29,17); 12 3492 end; 11 3493 end 10 3494 else if a_res=1 and (d.op_ref.opkode+1)//2=1 then 10 3495 begin 11 3496 laf:= 0; 11 3497 ia(1):= find_bpl(værdi.laf(1)); 11 3498 if ia(1)<1 or ia(1)>max_antal_operatører then res:=28; 11 3499 end 10 3500 else res:=27; <*parametertype*> 10 3501 end 9 3502 else 9 3503 if nr=2 and d.opref.opkode=1 then 9 3504 begin 10 3505 <* åbningstilstand for operatørplads *> 10 3506 if a_res=0 then res:= 2 <*godkendt*> 10 3507 else if a_res<>1 then res:= 27 <*parametertype*> 10 3508 else begin 11 3509 res:= 2<*godkendt*>; 11 3510 j:= værdi(1) shift (-16); 11 3511 if j='S' then ia(2):= 3 else 11 3512 if j<>'Å' then res:= 24; <*syntaks*> 11 3513 end; 10 3514 end 9 3515 else 9 3516 begin 10 3517 res:=if a_res=0 then 2 <* godkendt *> 10 3518 else 24;<* syntaks *> 10 3519 end; 9 3520 if res<4 then pos:=a_pos; 9 3521 end; <* partype 8 *> 8 3522 \f 8 3522 message procedure læs_kommando side 13 - 810306/hko; 8 3523 8 3523 8 3523 <* att_op_længde//2 *> 8 3524 <*9: <operatør>((+!-)<linienr>) *> 8 3525 <* 1 *> 8 3526 8 3526 begin 9 3527 if nr=1 then 9 3528 begin 10 3529 if a_res=0 then res:=25 <* parameter mangler *> 10 3530 else if a_res=2 then 10 3531 begin 11 3532 ia(1):=i1; 11 3533 if i1<1 or i1>max_antal_operatører then res:=28; 11 3534 end 10 3535 else if a_res=1 then 10 3536 begin 11 3537 laf:= 0; 11 3538 ia(1):= find_bpl(værdi.laf(1)); 11 3539 if ia(1)<1 or ia(1)>max_antal_operatører then res:=28; 11 3540 end 10 3541 else res:=27; <* parametertype *> 10 3542 end 9 3543 else if nr<=att_op_længde//2 then 9 3544 begin <* nr>1 *> 10 3545 if a_res=0 then res:=(if nr>2 then 2 else 25) 10 3546 else if a_res=2 or a_res=3 then 10 3547 begin 11 3548 ia(nr):=i1; indeks:= nr; 11 3549 if i1=0 or abs(i1)>999 then res:=5; 11 3550 end 10 3551 else res:=27; <* parametertype *> 10 3552 if res<4 then pos:=a_pos; 10 3553 end 9 3554 else 9 3555 res:=if a_res<>0 then 24 <* syntaks (for mange parametre) *> 9 3556 else 2; 9 3557 end; <* partype 9 *> 8 3558 \f 8 3558 message procedure læs_kommando side 14 - 810428/hko; 8 3559 8 3559 <* 2 *> 8 3560 <*10: (bus) *> 8 3561 <* 1 *> 8 3562 8 3562 begin 9 3563 if a_res=0 and nr=1 then res:=25 <* parameter mangler *> 9 3564 else if a_res<>0 and nr>2 then res:=24 <* syntaks (for mange) *> 9 3565 else if a_res=0 then res:=2 <* godkendt *> 9 3566 else if a_res<>2 then res:=27 <* parametertype *> 9 3567 else if i1<1 or i1>9999 then res:=7 <*ulovligt busnr *> 9 3568 else 9 3569 ia(nr):=i1; 9 3570 end; 8 3571 8 3571 <* 5 *> 8 3572 <*11: (<linie>) *> 8 3573 <* 1 *> 8 3574 8 3574 begin 9 3575 if a_res=0 and nr=1 then res:=25 9 3576 else if a_res<>0 and nr>5 then res:=24 9 3577 else if a_res=0 then res:=2 9 3578 else if a_res<>2 and a_res<>4 then res:=27 9 3579 else if a_res=2 and (i1<1 or i1>999) then res:=5 <* ulovl.linie *> 9 3580 else 9 3581 ia(nr):= 9 3582 (if a_res=4 then i1 else i1 shift 5) + 4 shift 21; 9 3583 end; 8 3584 \f 8 3584 message procedure læs_kommando side 15 - 810306/hko; 8 3585 8 3585 <*12: (<ingenting>!<navn>) *> 8 3586 8 3586 begin 9 3587 if nr=1 then 9 3588 begin 10 3589 if a_res=0 then res:=2 <*godkendt*> 10 3590 else if a_res=1 then 10 3591 tofrom(ia,værdi,8) 10 3592 else res:=27; <* parametertype *> 10 3593 end 9 3594 else 9 3595 res:=if a_res<>0 then 24 <* syntaks (for mange) *> 9 3596 else 2; 9 3597 end; <* partype 12 *> 8 3598 \f 8 3598 message procedure læs_kommando side 16 - 810512/hko/cl; 8 3599 8 3599 <* 15 *> 8 3600 <*13: G<grp.nr>:(<bus>!<linie>/<løb>) (<bus>!<linie>/<løb>) *> 8 3601 <* 1 *> 8 3602 8 3602 begin 9 3603 if nr=1 then 9 3604 begin 10 3605 if a_res=0 then res:=25 <* parameter mangler *> 10 3606 else 10 3607 if a_res=11 then 10 3608 begin 11 3609 ia(1):= 5 shift 21 + i1; 11 3610 ia(2):=værdi(2); 11 3611 indeks:= 2; 11 3612 end 10 3613 else res:=27; <* parametertype *> 10 3614 end 9 3615 else if nr<= att_op_længde//2-1 then 9 3616 begin 10 3617 if a_res=0 and(sep=',' or nr>2)then res:=2 <* godkendt *> 10 3618 else if a_res=0 then res:=25 <* parameter mangler *> 10 3619 else if ares=2 and (i1<1 or i1>9999) then 10 3620 res:= 7 <*busnr ulovligt*> 10 3621 else if a_res=2 or a_res=6 then 10 3622 begin 11 3623 ia(nr+1):=i1+ (if a_res=6 then 1 shift 22 else 0); 11 3624 indeks:= nr+1; 11 3625 end 10 3626 else res:=27; <* parametertype *> 10 3627 end 9 3628 else 9 3629 res:=if a_res=0 then 2 <*godkendt *> 9 3630 else 24;<* syntaks *> 9 3631 if res<4 then pos:=a_pos; 9 3632 end; <* partype 13 *> 8 3633 \f 8 3633 message procedure læs_kommando side 17 - 810311/hko; 8 3634 8 3634 <*14: <linie>.<indeks> *> 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 <* nr>1 *> 9 3647 res:= if a_res=0 then 2 <* godkendt *> 9 3648 else 24;<* syntaks *> 9 3649 end; <* partype 14 *> 8 3650 \f 8 3650 message procedure læs_kommando side 18 - 810313/hko; 8 3651 8 3651 <*15: <linie>.<indeks> <bus> *> 8 3652 8 3652 begin 9 3653 if nr=1 then 9 3654 begin 10 3655 if a_res=0 then res:= 25 <* parameter mangler *> 10 3656 else if a_res=9 then 10 3657 begin 11 3658 ia(1):= 1 shift 23 +i1; 11 3659 ia(2):= værdi(2); 11 3660 end 10 3661 else res:=27; <* parametertype *> 10 3662 end 9 3663 else if nr=2 then 9 3664 begin 10 3665 if a_res=0 then res:=25 10 3666 else if a_res=2 then 10 3667 begin 11 3668 if i1<1 or i1>9999 then res:=7 <* ulovligt busnr *> 11 3669 else ia(3):= i1; 11 3670 end 10 3671 else res:=27; <*parametertype *> 10 3672 end 9 3673 else 9 3674 res:=if a_res=0 then 2 <* godkendt *> 9 3675 else 24;<* syntaks *> 9 3676 if res<4 then pos:=a_pos; 9 3677 end; <* partype 15 *> 8 3678 \f 8 3678 message procedure læs_kommando side 19 - 810311/hko; 8 3679 8 3679 <*16: (<ingenting>!D.<dato>.<klokkeslet> *> 8 3680 8 3680 begin 9 3681 if nr=1 then 9 3682 begin 10 3683 if a_res=0 then res:=2 <* godkendt *> 10 3684 else if a_res=12 then 10 3685 begin 11 3686 raf:=0; 11 3687 ia.raf(1):= systid(i1,værdi(2)); 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 if res<4 then pos:=a_pos; 9 3695 end; <* partype 16 *> 8 3696 \f 8 3696 message procedure læs_kommando side 20 - 810511/hko; 8 3697 8 3697 <*17: G<grp.nr> *> 8 3698 8 3698 begin 9 3699 if nr=1 then 9 3700 begin 10 3701 if a_res=0 then res:=25 <*parameter mangler *> 10 3702 else if a_res=5 then 10 3703 begin 11 3704 ia(1):= 5 shift 21 +i1; 11 3705 end 10 3706 else res:=27; <* parametertype *> 10 3707 end 9 3708 else 9 3709 res:= if a_res=0 then 2 <* godkendt *> 9 3710 else 24;<* syntaks *> 9 3711 end; <* partype 17 *> 8 3712 8 3712 <* att_op_længde//2 *> 8 3713 <*18: (<heltal>) *> 8 3714 <* 1 *> 8 3715 8 3715 begin 9 3716 if nr=1 and a_res=0 then res:= 25 <*parameter mangler*> 9 3717 else 9 3718 if nr<=att_op_længde//2 then 9 3719 begin 10 3720 if a_res=2 or a_res=3 <* pos/neg heltal *> then 10 3721 begin 11 3722 ia(nr):= i1; indeks:= nr; 11 3723 end 10 3724 else if a_res=0 then res:= 2 10 3725 else res:= 27; <*parametertype*> 10 3726 end 9 3727 else 9 3728 res:= if a_res=0 then 2 else 24;<*syntaks (for mange)*> 9 3729 end; 8 3730 \f 8 3730 message procedure læs_kommando side 21 - 820302/cl; 8 3731 8 3731 <*19: <linie>/<løb> <linie>/<løb> *> 8 3732 8 3732 begin 9 3733 if nr<3 and a_res=0 then res:= 25 <*parameter mangler*> 9 3734 else if nr<3 and a_res<>6 then res:= 27 <*parametertype*> 9 3735 else if nr<3 then 9 3736 begin 10 3737 ia(nr):=i1 + 1 shift 22; 10 3738 end 9 3739 else 9 3740 res:= if a_res=0 then 2 <*godkendt*> 9 3741 else 24;<*syntaks (for mange)*> 9 3742 if res<4 then pos:= a_pos; 9 3743 end; <* partype 19 *> 8 3744 8 3744 <*20: <busnr> <kortnavn> *> 8 3745 begin 9 3746 if nr=1 then 9 3747 begin 10 3748 if ares=0 then res:= 25 else 10 3749 if ares=2 and (i1<1 or 9999<i1) then res:= 24 else 10 3750 if ares<>2 then res:= 27 else ia(1):= i1; 10 3751 end 9 3752 else 9 3753 if nr=2 then 9 3754 begin 10 3755 if ares=1 and værdi(2) extract 8 = 0 then 10 3756 begin 11 3757 ia(2):= værdi(1); ia(3):= værdi(2); 11 3758 end 10 3759 else res:= if ares=0 then 25 else if ares=1 then 62 else 27; 10 3760 end 9 3761 else 9 3762 if ares=0 then res:= 2 else res:= 24; 9 3763 end; <* partype 20 *> 8 3764 \f 8 3764 message procedure læs_kommando side 22 - 851001/cl; 8 3765 8 3765 <* 2 *> 8 3766 <*21: ( <linie> ) (<garage> ! OMR (ALL ! <område>)) *> 8 3767 <* 0 *> 8 3768 8 3768 begin 9 3769 laf:= 0; 9 3770 if nr=1 and a_res=0 then res:= 25 <*parameter mangler*> 9 3771 else if a_res=0 and (ia(3)=-2 or ia(3)=0) then res:= 25 9 3772 else if a_res<>0 and nr>4 then res:= 24 <*syntaks (for mange)*> 9 3773 else if a_res=0 then res:= 2 <*godkendt*> 9 3774 else if a_res=2 and (i1<1 or i1>999) then res:= 5 <*ulovligt*> 9 3775 else if (a_res=2 or a_res=4) and nr<=2 then 9 3776 begin 10 3777 if ia(3)<>0 then res:= 27 else 10 3778 ia(nr):= (4 shift 21) + (if a_res=2 then i1 shift 5 else i1); 10 3779 end 9 3780 else 9 3781 if ares=1 then 9 3782 begin 10 3783 if nr=1 then 10 3784 begin 11 3785 ia(1):= (4 shift 21) + (1 shift 5); 11 3786 ia(2):= (4 shift 21) + (999 shift 5); 11 3787 end; 10 3788 if ia(3)=-2 then 10 3789 begin 11 3790 if i1=long<:ALL:> shift (-24) extract 24 then 11 3791 ia(3):= -1 11 3792 else 11 3793 begin 12 3794 ia(3):= findområde(i1); 12 3795 if ia(3)=0 then res:= 56 else 12 3796 ia(3):= 14 shift 20 + ia(3); 12 3797 end; 11 3798 end 10 3799 else 10 3800 if ia(3) = 0 then 10 3801 begin 11 3802 if i1 = long<:OMR:> shift (-24) extract (24) then 11 3803 ia(3):= -2 11 3804 else 11 3805 ia(3):= find_bpl(værdi.laf(1)); 11 3806 if ia(3)=0 then res:= 55; 11 3807 end 10 3808 else res:= 24; 10 3809 end 9 3810 else res:= 27; <*parametertype*> 9 3811 if res<4 then pos:= apos; 9 3812 end; 8 3813 8 3813 <*22: (<busnr> (<område) ! <linie>/<løb> (<område>) ) *> 8 3814 8 3814 begin 9 3815 if nr=1 then 9 3816 begin 10 3817 if ares=0 then res:= 25 <*parameter mangler*> 10 3818 else if ares=2 and (i1<1 or i1>9999) 10 3819 then res:= 7 <* busnr ulovligt *> 10 3820 else if ares=2 or ares=6 then 10 3821 begin 11 3822 ia(1):= if ares=2 then i1 else 1 shift 22 + i1; 11 3823 end 10 3824 else res:= 27 <* parametertype *> 10 3825 end 9 3826 else 9 3827 if nr=2 then 9 3828 begin 10 3829 if ares=0 then res:= 2 <* godkendt *> 10 3830 else if ares=1 then 10 3831 begin 11 3832 ia(2):= findområde(i1); 11 3833 if ia(2)=0 then res:= 17 <*kanal ukendt*> 11 3834 end 10 3835 else 10 3836 res:= 27; <* parametertype *> 10 3837 end 9 3838 else if ares=0 then res:= 2 <*godkendt*> 9 3839 else res:= 24; <*syntaks*> 9 3840 if res < 4 then pos:= apos; 9 3841 end; 8 3842 8 3842 <*23: ( <linie> (<område>) ! G<nr> (<område>) ) *> 8 3843 8 3843 begin 9 3844 if nr=1 then 9 3845 begin 10 3846 if ares=0 then res:= 25 else 10 3847 if ares=2 and (i1<1 or i1>999) then res:= 5 else 10 3848 if ares=2 or ares=4 or ares=5 then 10 3849 begin 11 3850 ia(1):= 11 3851 if ares=2 then 4 shift 21 + i1 shift 5 else 11 3852 if ares=4 then 4 shift 21 + i1 else 11 3853 5 shift 21 + i1; 11 3854 end 10 3855 else res:= 27; 10 3856 if res < 4 then pos:= apos; 10 3857 end 9 3858 else 9 3859 if nr=2 then 9 3860 begin 10 3861 if ares=0 then res:= 2 else 10 3862 if ares=1 then 10 3863 begin 11 3864 ia(2):= findområde(i1); 11 3865 if ia(2)=0 then res:= 17; 11 3866 end 10 3867 else res:= 27; 10 3868 end 9 3869 else 9 3870 if ares=0 then res:= 2 else res:= 24; 9 3871 end; 8 3872 8 3872 <*24: ( <ingenting> ! <område> ! * ) *> 8 3873 8 3873 begin 9 3874 if nr=1 then 9 3875 begin 10 3876 if ares=0 then res:= 2 else 10 3877 if ares=1 then 10 3878 begin 11 3879 if i1=long<:ALL:> shift (-24) extract 24 then 11 3880 ia(1):= (-1) shift (-3) shift 3 11 3881 else 11 3882 begin 12 3883 k:= findområde(i1); 12 3884 if k=0 then res:= 17 else 12 3885 ia(1):= 14 shift 20 + k; 12 3886 end; 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 <*25: <område> *> 8 3895 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=1 then 10 3900 begin 11 3901 if i1 = '*' shift 16 then ia(1):= -1 else 11 3902 ia(1):= findområde(i1); 11 3903 if ia(1)=0 then res:= 17; 11 3904 end 10 3905 else res:= 27; 10 3906 end 9 3907 else 9 3908 if ares=0 then res:= 2 else res:= 24; 9 3909 if res < 4 then pos:= apos; 9 3910 end; 8 3911 8 3911 <*26: <busnr> *> 8 3912 begin 9 3913 if nr=1 then 9 3914 begin 10 3915 if ares=0 then res:= 25 else 10 3916 if ares=2 and (i1<1 or 9999<i1) then res:= 24 else 10 3917 if ares<>2 then res:= 27 else ia(1):= i1; 10 3918 end 9 3919 else 9 3920 if ares=0 then res:= 2 else res:= 24; 9 3921 end; 8 3922 8 3922 <* 8 *> 8 3923 <*27: <operatørnr> (<område>) *> 8 3924 <* 1 *> 8 3925 begin 9 3926 if nr < 3 and a_res=0 then res:= 25 <*parameter mangler*> 9 3927 else if nr=1 then 9 3928 begin 10 3929 if a_res=2 then 10 3930 begin 11 3931 ia(1):= i1; 11 3932 if i1 < 0 or max_antal_operatører < i1 then res:= 28; 11 3933 end 10 3934 else if a_res=1 then 10 3935 begin 11 3936 laf:= 0; 11 3937 ia(1):= find_bpl(værdi.laf(1)); 11 3938 if ia(1)<1 or ia(1)>max_antal_operatører then res:=28; 11 3939 end 10 3940 else res:= 27; <*parametertype*> 10 3941 end 9 3942 else 9 3943 begin 10 3944 if a_res=0 then res:= (if nr > 2 then 2 else 25) 10 3945 else if nr > 9 then res:= 24 10 3946 else if a_res=1 then 10 3947 begin 11 3948 ia(nr):= find_område(i1); 11 3949 indeks:= nr; 11 3950 if ia(nr)=0 then res:= 56; 11 3951 end 10 3952 else res:= 27; 10 3953 end; 9 3954 if res < 4 then pos:= a_pos; 9 3955 end <* partype 27 *>; 8 3956 8 3956 <*28: (<ingenting>!<kanalnr>) *> 8 3957 begin 9 3958 long field lf; 9 3959 9 3959 if nr=1 then 9 3960 begin 10 3961 if ares=0 then res:= 2 else 10 3962 if ares=1 then 10 3963 begin 11 3964 j:= 0; lf:= 4; 11 3965 for i:= 1 step 1 until max_antal_kanaler do 11 3966 if kanal_navn(i)=værdi.lf then j:= i; 11 3967 if j<>0 then 11 3968 begin 12 3969 ia(1):= 3 shift 22 + j; 12 3970 res:= 2; 12 3971 end 11 3972 else 11 3973 res:= 17; <*kanal ukendt*> 11 3974 end 10 3975 else 10 3976 res:= 27; <*parametertype*> 10 3977 if res < 4 then pos:= apos; 10 3978 end 9 3979 else 9 3980 res:= if nr=2 and ares<>0 then 24 <*syntaks*> else 2 <*ok*>; 9 3981 end; 8 3982 8 3982 <* n *> 8 3983 <*29: <btj.pl.navn> ( <operatørnavn>) *> 8 3984 <* 0 *> 8 3985 begin 9 3986 laf:= 0; 9 3987 if nr=1 then 9 3988 begin 10 3989 if a_res=0 then res:= 25 <*parameter mangler*> 10 3990 else if a_res<>1 or værdi(2) extract 8 <>0 then res:= 27 10 3991 else begin 11 3992 indeks:= 2; 11 3993 ia(1):= værdi(1); ia(2):= værdi(2); 11 3994 j:= find_bpl(værdi.laf(1)); 11 3995 if 0<j and j<=max_antal_operatører then 11 3996 res:= 62; <*ulovligt navn*> 11 3997 end; 10 3998 end 9 3999 else 9 4000 begin 10 4001 if a_res=0 then res:= 2 <*godkendt*> 10 4002 else if a_res<>1 then res:= 27 <*parametertype*> 10 4003 else begin 11 4004 indeks:= indeks+1; 11 4005 ia(indeks):= find_bpl(værdi.laf(1)); 11 4006 if ia(indeks)=0 or ia(indeks)>max_antal_operatører then 11 4007 res:= 28; <*ukendt operatør*> 11 4008 end; 10 4009 end; 9 4010 if res<4 then pos:= a_pos; 9 4011 end; 8 4012 8 4012 <* 3 *> 8 4013 <*30: (<operatørnavn>) ( <btj.pl.navn>) *> 8 4014 <* io 0 *> 8 4015 8 4015 begin 9 4016 boolean io; 9 4017 9 4017 io:= (kilde//100 = 1); 9 4018 laf:= 0; 9 4019 if -,io and nr=1 then 9 4020 begin 10 4021 indeks:= 1; 10 4022 ia(1):= kilde mod 100; <*egen operatørplads*> 10 4023 end; 9 4024 9 4024 if io and nr=1 then 9 4025 begin 10 4026 if a_res=0 then res:= 25 <*parameter mangler*> 10 4027 else if a_res<>1 then res:= 27 <*parametertype*> 10 4028 else begin 11 4029 indeks:= nr; 11 4030 ia(indeks):= find_bpl(værdi.laf(1)); 11 4031 if ia(indeks)=0 or ia(indeks)>max_antal_operatører then 11 4032 res:= 28; <*ukendt operatør*> 11 4033 end; 10 4034 end 9 4035 else 9 4036 begin 10 4037 if a_res=0 then res:= 2<*godkendt*> 10 4038 else if indeks=4 then res:= 24 <*syntaks, for mange*> 10 4039 else if a_res<>1 then res:= 27 <*parametertype*> 10 4040 else begin 11 4041 indeks:= indeks+1; 11 4042 ia(indeks):= find_bpl(værdi.laf(1)); 11 4043 if ia(indeks)=0 then res:= 46 <*navn ukendt*> 11 4044 else if ia(indeks)=ia(1) then res:= 62; <*ulovligt navn*> 11 4045 end; 10 4046 end; 9 4047 if res<4 then pos:= a_pos; 9 4048 end; 8 4049 8 4049 <* *> 8 4050 <*31: <operatørnr> ( <navn> (<ingenting>!Å!S) ) *> 8 4051 <* *> 8 4052 8 4052 begin 9 4053 laf:= 0; 9 4054 if nr<2 and a_res=0 then res:= 25 <*parameter mangler*> 9 4055 else 9 4056 if nr=1 then 9 4057 begin 10 4058 if a_res=2 then 10 4059 begin 11 4060 ia(1):= i1; 11 4061 if i1<=0 or max_antal_operatører<i1 then res:= 28; <*ukendt*> 11 4062 end else res:= 27; <*parametertype*> 10 4063 end 9 4064 else 9 4065 if nr=2 then 9 4066 begin 10 4067 if a_res=1 and værdi(2) extract 8 = 0 then 10 4068 begin 11 4069 ia(2):= værdi(1); ia(3):= værdi(2); 11 4070 j:= find_bpl(værdi.laf(1)); 11 4071 if j>0 and j<>ia(1) then res:= 48 <*i brug*>; 11 4072 end 10 4073 else res:= if a_res=0 then 2 <*godkendt*> 10 4074 else 27 <*parametertype*>; 10 4075 end 9 4076 else 9 4077 if nr=3 then 9 4078 begin 10 4079 if a_res=0 then res:=2 <*godkendt*> 10 4080 else if a_res<>1 then res:= 27 <*parametertype*> 10 4081 else begin 11 4082 j:= værdi(1) shift (-16); 11 4083 if j='Å' then ia(4):= 1 else 11 4084 if j='S' then ia(4):= 3 else res:= 24 <*syntaks*>; 11 4085 end; 10 4086 end 9 4087 else res:= if a_res=0 then 2 <*godkendt*> else 24 <*syntaks*>; 9 4088 if res<4 then pos:= a_pos; 9 4089 end; 8 4090 8 4090 <* 1 *> 8 4091 <*32: (heltal) *> 8 4092 <* 0 *> 8 4093 begin 9 4094 if nr=1 then 9 4095 begin 10 4096 if ares=0 then 10 4097 begin 11 4098 indeks:= 0; res:= 2; 11 4099 end 10 4100 else 10 4101 if ares=2 or ares=3 then 10 4102 begin 11 4103 ia(nr):= i1; indeks:= nr; 11 4104 end 10 4105 else res:=27; <*parametertype*> 10 4106 end 9 4107 else 9 4108 res:= (if ares<>0 then 24 <*syntaks, for mange*> else 2); 9 4109 if res < 4 then pos:= a_pos; 9 4110 end; 8 4111 8 4111 <*33 generel tekst*> 8 4112 begin 9 4113 integer p,p1,ch,lgd; 9 4114 9 4114 if nr=1 and a_res<>0 then 9 4115 begin 10 4116 p:=pos; p1:=1; 10 4117 lgd:= (op_spool_postlgd-op_spool_text)//2*3-1; 10 4118 if 95<lgd then lgd:=95; 10 4119 repeat læstegn(d.opref.data,p,ch) until ch<>' '; 10 4120 while ch<>'nl' and ch<>'em' and ch<>0 and p1<lgd do 10 4121 begin 11 4122 skrivtegn(ia,p1,ch); 11 4123 læstegn(d.opref.data,p,ch); 11 4124 end; 10 4125 if p1=1 then res:= 25 else res:= 2; 10 4126 repeat skrivtegn(ia,p1,0) until (p1 mod 6)=1; 10 4127 end 9 4128 else 9 4129 if a_res=0 then res:= 25 else res:= 24; 9 4130 end; 8 4131 8 4131 <*34: (heltal) *> 8 4132 begin 9 4133 if nr=1 then 9 4134 begin 10 4135 if ares=0 then res:= 25 else 10 4136 if ares=2 or ares=3 then 10 4137 begin 11 4138 ia(nr):= i1; indeks:= nr; 11 4139 end 10 4140 else res:=27; <*parametertype*> 10 4141 end 9 4142 else 9 4143 res:= (if ares<>0 then 24 <*syntaks, for mange*> else 2); 9 4144 if res < 4 then pos:= a_pos; 9 4145 end; 8 4146 8 4146 <*+4*> begin 9 4147 fejlreaktion(4<*systemfejl*>,partype, 9 4148 <:parametertype fejl i kommandofil:>,1); 9 4149 res:=31; 9 4150 end 8 4151 <*-4*> 8 4152 end;<*case partype*> 7 4153 end;<* while læs_param_sæt *> 6 4154 end; <* operationskode ok *> 5 4155 end 4 4156 else 4 4157 begin 5 4158 fejlreaktion(3<*programfejl*>,kilde,<:kilde:>,1); 5 4159 end; 4 4160 4 4160 if a_res<0 then res:= -a_res; 4 4161 slut_læskommando: 4 4162 4 4162 læs_kommando:=d.op_ref.resultat:= res; 4 4163 end;<* disable-blok*> 3 4164 end læs_kommando; 2 4165 \f 2 4165 message procedure skriv_kvittering side 1 - 820301/hko/cl; 2 4166 2 4166 procedure skriv_kvittering(z,ref,pos,res); 2 4167 value ref,pos,res; 2 4168 zone z; 2 4169 integer ref,pos,res; 2 4170 begin 3 4171 integer array field op; 3 4172 integer pos1,tegn; 3 4173 op:=ref; 3 4174 if res<1 or res>3 then write(z,<:*** :>); 3 4175 write(z,case res+1 of ( 3 4176 <* 0*><:ubehandlet:>, 3 4177 <* 1*><:ok:>, 3 4178 <* 2*><:godkendt:>, 3 4179 <* 3*><:udført:>, 3 4180 <* 4*><:kommando ukendt:>, 3 4181 3 4181 <* 5*><:linie-nr ulovligt:>, 3 4182 <* 6*><:løb-nr ulovligt:>, 3 4183 <* 7*><:bus-nr ulovligt:>, 3 4184 <* 8*><:gruppe ukendt:>, 3 4185 <* 9*><:linie/løb ukendt:>, 3 4186 3 4186 <*10*><:bus-nr ukendt:>, 3 4187 <*11*><:bus allerede indsat på :>, 3 4188 <*12*><:linie/løb allerede besat af :>, 3 4189 <*13*><:bus ikke indsat:>, 3 4190 <*14*><:bus optaget:>, 3 4191 3 4191 <*15*><:gruppe optaget:>, 3 4192 <*16*><:skærm optaget:>, 3 4193 <*17*><:kanal ukendt:>, 3 4194 <*18*><:bus i kø:>, 3 4195 <*19*><:kø er tom:>, 3 4196 3 4196 <*20*><:ej forbindelse :>, 3 4197 <*21*><:ingen at gennemstille til:>, 3 4198 <*22*><:ingen samtale at nedlægge:>, 3 4199 <*23*><:ingen samtale at monitere:>, 3 4200 <*24*><:syntaks:>, 3 4201 3 4201 <*25*><:syntaks, parameter mangler:>, 3 4202 <*26*><:syntaks, skilletegn:>, 3 4203 <*27*><:syntaks, parametertype:>, 3 4204 <*28*><:operatør ukendt:>, 3 4205 <*29*><:garageterminal ukendt:>, 3 4206 \f 3 4206 3 4206 <*30*><:rapport kan ikke dannes:>, 3 4207 <*31*><:systemfejl:>, 3 4208 <*32*><:ingen fri plads:>, 3 4209 <*33*><:gruppe for stor:>, 3 4210 <*34*><:gruppe allerede defineret:>, 3 4211 3 4211 <*35*><:springsekvens for stor:>, 3 4212 <*36*><:spring allerede defineret:>, 3 4213 <*37*><:spring ukendt:>, 3 4214 <*38*><:spring allerede igangsat:>, 3 4215 <*39*><:bus ikke reserveret:>, 3 4216 3 4216 <*40*><:gruppe ikke reserveret:>, 3 4217 <*41*><:spring ikke igangsat:>, 3 4218 <*42*><:intet frit linie/løb:>, 3 4219 <*43*><:ændring af dato/tid ikke lovlig:>, 3 4220 <*44*><:interval-størrelse ulovlig:>, 3 4221 3 4221 <*45*><:ikke implementeret:>, 3 4222 <*46*><:navn ukendt:>, 3 4223 <*47*><:forkert indhold:>, 3 4224 <*48*><:i brug:>, 3 4225 <*49*><:ingen samtale igang:>, 3 4226 3 4226 <*50*><:kanal:>, 3 4227 <*51*><:afvist:>, 3 4228 <*52*><:kanal optaget :>, 3 4229 <*53*><:annulleret:>, 3 4230 <*54*><:ingen busser at kalde op:>, 3 4231 3 4231 <*55*><:garagenavn ukendt:>, 3 4232 <*56*><:område ukendt:>, 3 4233 <*57*><:område nødvendigt:>, 3 4234 <*58*><:ulovligt område for bus:>, 3 4235 <*59*><:radiofejl :>, 3 4236 3 4236 <*60*><:område kan ikke opdateres:>, 3 4237 <*61*><:ingen talevej:>, 3 4238 <*62*><:ulovligt navn:>, 3 4239 <*63*><:alarmlængde: :>, 3 4240 <*64*><:ulovligt tal:>, 3 4241 3 4241 <*99*><:- <'?'> -:>)); 3 4242 \f 3 4242 message procedure skriv_kvittering side 3 - 820301/hko; 3 4243 if res=3 and op<>0 then 3 4244 begin 4 4245 if d.op.opkode=20 or d.op.opkode=11 then <*vogntabel,flyt -,indsæt*> 4 4246 begin 5 4247 i:= d.op.data(if d.op.opkode=20 then 4 else 3) extract 14; 5 4248 if i<>0 then write(z,i,<: udtaget:>); 5 4249 end; 4 4250 end; 3 4251 if res = 11 or res = 12 then 3 4252 i:=ref; 3 4253 if res=11 then write(z,i shift(-12) extract 10, 3 4254 if i shift(-7) extract 5 =0 then false 3 4255 else "A" add (i shift(-7) extract 5 -1),1, 3 4256 <:/:>,<<d>,i extract 7) else 3 4257 if res=12 then write(z,i extract 14) else 3 4258 if res = 20 or res = 52 or res = 59 then 3 4259 begin 4 4260 i:= d.op.data(12); 4 4261 if i <> 0 then skriv_id(z,i,8); 4 4262 i:=d.op.data(2); 4 4263 if i=0 then i:=d.op.data(9); 4 4264 if i=0 then i:=d.op.data(8); 4 4265 skriv_id(z,i,8); 4 4266 end; 3 4267 if res=63 then 3 4268 begin 4 4269 i:= ref; 4 4270 if i<0 then write(z,<:uendelig:>) else write(z,<<d>,i,<: sek.:>); 4 4271 end; 3 4272 3 4272 if pos>=0 then 3 4273 begin 4 4274 pos:=pos+1; 4 4275 outchar(z,':'); 4 4276 tegn:=-1; 4 4277 while tegn<>10 and tegn<>0 do 4 4278 outchar(z,læs_tegn(d.op.data,pos,tegn)); 4 4279 end; 3 4280 <*V*>setposition(z,0,0); 3 4281 end skriv_kvittering; 2 4282 \f 2 4282 message procedure cursor, side 1 - 810213/hko; 2 4283 2 4283 procedure cursor(z,linie,pos); 2 4284 value linie,pos; 2 4285 zone z; 2 4286 integer linie,pos; 2 4287 begin 3 4288 if linie>0 and linie<25 3 4289 and pos>0 and pos<81 then 3 4290 begin 4 4291 write(z,"esc" add 128,1,<:Æ:>, 4 4292 <<d>,linie,<:;:>,pos,<:H:>); 4 4293 end; 3 4294 end cursor; 2 4295 \f 2 4295 message procedure attention side 1 - 810529/hko; 2 4296 2 4296 procedure attention; 2 4297 begin 3 4298 integer i, j, k; 3 4299 integer array field op_ref,mess_ref; 3 4300 integer array att_message(1:9); 3 4301 long array field laf1, laf2; 3 4302 boolean optaget; 3 4303 procedure skriv_attention(zud,omfang); 3 4304 integer omfang; 3 4305 zone zud; 3 4306 begin 4 4307 write(zud,"nl",1,<:+++ attention :>); 4 4308 if omfang <> 0 then 4 4309 disable begin integer x; 5 4310 trap(slut); 5 4311 write(zud,"nl",1, 5 4312 <: i: :>,i,"nl",1, 5 4313 <: j: :>,j,"nl",1, 5 4314 <: k: :>,k,"nl",1, 5 4315 <: op-ref: :>,op_ref,"nl",1, 5 4316 <: mess-ref: :>,mess_ref,"nl",1, 5 4317 <: optaget: :>,if optaget then <:true:>else<:false:>,"nl",1, 5 4318 <: laf2 :>,laf2,"nl",1, 5 4319 <: att-message::>,"nl",1, 5 4320 <::>); 5 4321 raf:= 0; 5 4322 skriv_hele(zud,att_message.raf,18,127); 5 4323 skriv_coru(zud,coru_no(010)); 5 4324 slut: 5 4325 end; 4 4326 end skriv_attention; 3 4327 3 4327 integer procedure udtag_tal(tekst,pos); 3 4328 long array tekst; 3 4329 integer pos; 3 4330 begin 4 4331 integer i; 4 4332 4 4332 if getnumber(tekst,pos,i) >= 0 then 4 4333 udtag_tal:= i 4 4334 else 4 4335 udtag_tal:= 0; 4 4336 end; 3 4337 3 4337 for i:= 1 step 1 until att_maske_lgd//2 do 3 4338 att_signal(i):=att_flag(i):=0; 3 4339 trap(att_trap); 3 4340 stack_claim((if cm_test then 198 else 146)+50); 3 4341 <*+2*> 3 4342 if testbit26 and overvåget or testbit28 then 3 4343 skriv_attention(out,0); 3 4344 <*-2*> 3 4345 \f 3 4345 message procedure attention side 2 - 810406/hko; 3 4346 3 4346 repeat 3 4347 3 4347 wait_ch(cs_att_pulje,opref,true,-1<*vent ubegrænset*>); 3 4348 3 4348 repeat 3 4349 <*V*> c_wait_message(att_proc_ref,att_message,mess_ref,-1<*vent ubegrænset*>); 3 4350 raf:= laf1:= 0; 3 4351 laf:=core.mess_ref(4)+2; <* reference til sender-procesnavn *> 3 4352 3 4352 <*+2*>if testbit7 and overvåget then 3 4353 disable begin 4 4354 laf2:= abs(laf); 4 4355 write(out,"nl",1,<:attention - :>); 4 4356 if laf<=0 then write(out,<:Regrettet :>); 4 4357 write(out,<:Message modtaget fra :>); 4 4358 if laf2 > 0 then write(out,core.laf2) else write(out,<:???:>); 4 4359 skriv_hele(out,att_message.raf,16,127); 4 4360 ud; 4 4361 end; 3 4362 <*-2*> 3 4363 \f 3 4363 message procedure attention side 3 - 830310/cl; 3 4364 3 4364 if laf <= 0 then 3 4365 i:= -1 3 4366 else 3 4367 if core.laf(1)=konsol_navn.laf1(1) 3 4368 and core.laf(2)=konsol_navn.laf1(2) then 3 4369 i:= 101 3 4370 else 3 4371 begin 4 4372 i:= -1; j:= 1; 4 4373 while i=(-1) and (j <= max_antal_operatører) do 4 4374 begin 5 4375 laf2:= (j-1)*8; 5 4376 if core.laf(1) = terminal_navn.laf2(1) 5 4377 and core.laf(2) = terminal_navn.laf2(2) then i:= 200+j; 5 4378 j:= j+1; 5 4379 end; 4 4380 j:= 1; 4 4381 while i=(-1) and (j<=max_antal_garageterminaler) do 4 4382 begin 5 4383 laf2:= (j-1)*8; 5 4384 if core.laf(1) = garage_terminal_navn.laf2(1) 5 4385 and core.laf(2) = garage_terminal_navn.laf2(2) then i:= 300+j; 5 4386 j:= j+1; 5 4387 end; 4 4388 end; 3 4389 3 4389 if i=101 or (201<=i and i<=200+max_antal_operatører) 3 4390 <* or (301<=i and i<=300+max_antal_garageterminaler) *> 3 4391 then 3 4392 begin 4 4393 4 4393 j:= if i=101 then 0 4 4394 else max_antal_operatører*(i//100-2)+i mod 100; 4 4395 4 4395 ref:=j*terminal_beskr_længde; 4 4396 att_message(9):= 4 4397 if terminal_tab.ref.terminal_tilstand>=0 then 1 <*normal*> 4 4398 else 4 <*disconnected*>; 4 4399 optaget:=læsbit_ia(att_flag,j); 4 4400 if optaget and att_message(9)=1 then 4 4401 sætbit_ia(att_signal,j,0<*1 for 'husket' attention*>) 4 4402 else optaget:=optaget or att_message(9)<>1; 4 4403 if i//100=2 and terminal_tab.ref.terminal_tilstand < 0 then 4 4404 begin <* att fra ekskluderet operatør - inkluder *> 5 4405 start_operation(op_ref,010,cs_att_pulje,1<*IN,O*>); 5 4406 d.op_ref.data(1):= i mod 100; 5 4407 signalch(cs_rad,op_ref,gen_optype); 5 4408 waitch(cs_att_pulje,op_ref,true,-1); 5 4409 end; 4 4410 end 3 4411 else 3 4412 begin 4 4413 optaget:= true; 4 4414 att_message(9):= 2 <*rejected*>; 4 4415 end; 3 4416 3 4416 monitor(22)send_answer:(zdummy,mess_ref,att_message); 3 4417 3 4417 until -,optaget; 3 4418 \f 3 4418 message procedure attention side 4 - 810424/hko; 3 4419 3 4419 sætbit_ia(att_flag,j,1); 3 4420 3 4420 start_operation(op_ref,i,cs_att_pulje,0); 3 4421 3 4421 signal_ch(case i//100 of (cs_io,cs_op,cs_gar),op_ref,gen_optype); 3 4422 3 4422 until false; 3 4423 3 4423 att_trap: 3 4424 3 4424 skriv_attention(zbillede,1); 3 4425 3 4425 3 4425 end attention; 2 4426 2 4426 \f 2 4426 message io_erklæringer side 1 - 810421/hko; 2 4427 2 4427 integer 2 4428 cs_io, 2 4429 cs_io_komm, 2 4430 cs_io_fil, 2 4431 cs_io_spool, 2 4432 cs_io_medd, 2 4433 cs_io_nulstil, 2 4434 ss_io_spool_tomme, 2 4435 ss_io_spool_fulde, 2 4436 bs_zio_adgang, 2 4437 io_spool_fil, 2 4438 io_spool_postantal, 2 4439 io_spool_postlængde; 2 4440 2 4440 integer array field 2 4441 io_spool_post; 2 4442 2 4442 zone z_io(32,1,io_fejl); 2 4443 2 4443 procedure io_fejl(z,s,b); 2 4444 integer s,b; 2 4445 zone z; 2 4446 begin 3 4447 disable begin 4 4448 integer array iz(1:20); 4 4449 integer i,j,k; 4 4450 integer array field iaf; 4 4451 real array field raf; 4 4452 if s<>(1 shift 21 + 2) then 4 4453 begin 5 4454 getzone6(z,iz); 5 4455 raf:=2; 5 4456 iaf:=0; 5 4457 k:=1; 5 4458 5 4458 j:= terminal_tab.iaf.terminal_tilstand; 5 4459 if j shift(-21)<>6 then 5 4460 fejlreaktion(17<*ydre enhed status*>,s,string iz.raf(increase(k)), 5 4461 1 shift 12 <*binært*> +1 <*fortsæt*>); 5 4462 terminal_tab.iaf.terminal_tilstand:= 6 shift 21 5 4463 + terminal_tab.iaf.terminal_tilstand extract 21; 5 4464 end; 4 4465 z(1):=real <:<'?'><'?'><'em'>:>; 4 4466 b:=2; 4 4467 end; <*disable*> 3 4468 end io_fejl; 2 4469 \f 2 4469 message procedure skriv_auto_spring_medd side 1 - 820301/hko; 2 4470 2 4470 procedure skriv_auto_spring_medd(z,medd,tid); 2 4471 value tid; 2 4472 zone z; 2 4473 real tid; 2 4474 integer array medd; 2 4475 begin 3 4476 disable begin 4 4477 real t; 4 4478 integer kode,bus,linie,bogst,løb,dato,kl; 4 4479 long array indeks(1:1); 4 4480 kode:= medd(1); 4 4481 indeks(1):= extend medd(5) shift 24; 4 4482 if kode > 0 and kode < 10 then 4 4483 begin 5 4484 write(z,"nl",0,<:-<'>'>:>,case kode of( 5 4485 <*1*><:linie/løb ikke indsat :>,<*sletning/omkodning/spring *> 5 4486 <*2*><:linie/løb allerede indsat:>,<*omkodning/spring *> 5 4487 <*3*><:vogn i kø:>, <*påmindelse i forb. omkod./spring*> 5 4488 <*4*><:vogn optaget:>, <* - i - - / - *> 5 4489 <*5*><:spring annulleret:>, <*udløb af ventetid *> 5 4490 <*6*><::>, <* - af springliste *> 5 4491 <*7*><::>, <*start af springsekvens *> 5 4492 <*8*><::>, <*afvikling af springsekvens *> 5 4493 <*9*><:område kan ikke opdateres:>,<*vt-ændring*> 5 4494 <::>)); 5 4495 <* if kode = 5 then 5 4496 begin 5 4497 bogst:= medd(4); 5 4498 linie:= bogst shift(-5) extract 10; 5 4499 bogst:= bogst extract 5; 5 4500 if bogst > 0 then bogst:= bogst +'A'-1; 5 4501 write(z,"sp",1,<<z>,linie,false add bogst,1, 5 4502 ".",1,indeks); 5 4503 end; 5 4504 *> 5 4505 outchar(z,'sp'); 5 4506 bus:= medd(2) extract 14; 5 4507 if bus > 0 then 5 4508 write(z,<<z>,bus,"/",1); 5 4509 løb:= medd(3); 5 4510 <*+4*> if løb shift(-22) <> 1 and løb <> 0 then 5 4511 fejlreaktion(3<*programfejl*>,løb,<:ikke linie id, spon.medd.:>,1); 5 4512 <*-4*> 5 4513 \f 5 4513 message procedure skriv_auto_spring_medd side 2 - 810507/hko; 5 4514 5 4514 linie:= løb shift(-12) extract 10; 5 4515 bogst:= løb shift(-7) extract 5; 5 4516 if bogst > 0 then bogst:= bogst +'A'-1; 5 4517 løb:= løb extract 7; 5 4518 if medd(3) <> 0 or kode <> 5 then 5 4519 begin 6 4520 write(z,<<z>,linie,false add bogst,1,"/",1,løb,"sp",1); 6 4521 if kode = 5 or kode = 6 then write(z,<:er frit :>); 6 4522 end; 5 4523 if kode = 7 or kode = 8 then 5 4524 write(z,<*indeks,"sp",1,*> 5 4525 if kode=7 then <:udtaget :> else <:indsat :>); 5 4526 5 4526 dato:= systime(4,tid,t); 5 4527 kl:= t/100.0; 5 4528 løb:= replace_char(1<*space in number*>,'.'); 5 4529 write(z,<<zd_dd_dd>,dato,<< zd_dd>,kl); 5 4530 replace_char(1,løb); 5 4531 end 4 4532 else <*kode < 1 or kode > 8*> 4 4533 fejlreaktion(3<*programfejl*>,kode,<:spon.medd. kode:>,1); 4 4534 end; <*disable*> 3 4535 end skriv_auto_spring_medd; 2 4536 \f 2 4536 message procedure h_io side 1 - 810507/hko; 2 4537 2 4537 <* hovedmodulkorutine for io *> 2 4538 procedure h_io; 2 4539 begin 3 4540 integer array field op_ref; 3 4541 integer k,dest_sem; 3 4542 procedure skriv_hio(zud,omfang); 3 4543 value omfang; 3 4544 zone zud; 3 4545 integer omfang; 3 4546 begin 4 4547 4 4547 write(zud,"nl",1,<:+++ hovedmodul io :>); 4 4548 if omfang>0 then 4 4549 disable begin integer x; 5 4550 trap(slut); 5 4551 write(zud,"nl",1, 5 4552 <: op_ref: :>,op_ref,"nl",1, 5 4553 <: k: :>,k,"nl",1, 5 4554 <: dest_sem: :>,dest_sem,"nl",1, 5 4555 <::>); 5 4556 skriv_coru(zud,coru_no(100)); 5 4557 slut: 5 4558 end; 4 4559 end skriv_hio; 3 4560 3 4560 trap(hio_trap); 3 4561 stack_claim(if cm_test then 198 else 146); 3 4562 3 4562 <*+2*> 3 4563 if testbit0 and overvåget or testbit28 then 3 4564 skriv_hio(out,0); 3 4565 <*-2*> 3 4566 \f 3 4566 message procedure h_io side 2 - 810507/hko; 3 4567 3 4567 repeat 3 4568 wait_ch(cs_io,op_ref,true,-1); 3 4569 <*+4*> 3 4570 if (d.op_ref.optype and (io_optype or gen_optype)) extract 12 =0 3 4571 then fejlreaktion(12<*operationstype*>,op_ref,<:operation til io:>,1); 3 4572 <*-4*> 3 4573 3 4573 k:=d.op_ref.opkode extract 12; 3 4574 dest_sem:= 3 4575 if k = 0 <*attention*> then cs_io_komm else 3 4576 3 4576 if k = 22 <*auto vt opdatering*> 3 4577 or k = 23 <*generel meddelelse*> 3 4578 or k = 36 <*spring meddelelse*> 3 4579 or k = 44 <*udeladt i gruppeopkald*> 3 4580 or k = 45 <*nødopkald modtaget*> 3 4581 or k = 46 <*nødopkald besvaret*> then cs_io_spool else 3 4582 3 4582 if k = 38 <*meddelelse til alle skærme*> then cs_io_medd else 3 4583 0; 3 4584 <*+4*> 3 4585 if dest_sem = 0 then 3 4586 begin 4 4587 fejl_reaktion(2<*operationskode*>,k,<:hovedmodul io:>,1); 4 4588 signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype); 4 4589 end 3 4590 else 3 4591 <*-4*> 3 4592 begin 4 4593 signal_ch(dest_sem,op_ref,d.op_ref.optype); 4 4594 end; 3 4595 until false; 3 4596 3 4596 hio_trap: 3 4597 disable skriv_hio(zbillede,1); 3 4598 end h_io; 2 4599 \f 2 4599 message procedure io_komm side 1 - 810507/hko; 2 4600 2 4600 procedure io_komm; 2 4601 begin 3 4602 integer array field op_ref,ref,vt_op,iaf; 3 4603 integer kode,aktion,status,opgave,dest_sem,vogn,ll,omr, 3 4604 pos,indeks,sep,sluttegn,operatør,i,j,k; 3 4605 long navn; 3 4606 3 4606 procedure skriv_io_komm(zud,omfang); 3 4607 value omfang; 3 4608 zone zud; 3 4609 integer omfang; 3 4610 begin 4 4611 4 4611 disable 4 4612 4 4612 write(zud,"nl",1,<:+++ io_komm :>); 4 4613 if omfang > 0 then 4 4614 disable begin integer x; 5 4615 trap(slut); 5 4616 write(zud,"nl",1, 5 4617 <: op-ref: :>,op_ref,"nl",1, 5 4618 <: kode: :>,kode,"nl",1, 5 4619 <: aktion: :>,aktion,"nl",1, 5 4620 <: ref: :>,ref,"nl",1, 5 4621 <: vt_op: :>,vt_op,"nl",1, 5 4622 <: status: :>,status,"nl",1, 5 4623 <: opgave: :>,opgave,"nl",1, 5 4624 <: dest-sem: :>,dest_sem,"nl",1, 5 4625 <: iaf: :>,iaf,"nl",1, 5 4626 <: i: :>,i,"nl",1, 5 4627 <: j: :>,j,"nl",1, 5 4628 <: k: :>,k,"nl",1, 5 4629 <: navn: :>,string navn,"nl",1, 5 4630 <: pos: :>,pos,"nl",1, 5 4631 <: indeks: :>,indeks,"nl",1, 5 4632 <: sep: :>,sep,"nl",1, 5 4633 <: sluttegn: :>,sluttegn,"nl",1, 5 4634 <: vogn: :>,vogn,"nl",1, 5 4635 <: ll: :>,ll,"nl",1, 5 4636 <: omr: :>,omr,"nl",1, 5 4637 <: operatør: :>,operatør,"nl",1, 5 4638 <::>); 5 4639 skriv_coru(zud,coru_no(101)); 5 4640 slut: 5 4641 end; 4 4642 end skriv_io_komm; 3 4643 \f 3 4643 message procedure io_komm side 2 - 810424/hko; 3 4644 3 4644 trap(io_komm_trap); 3 4645 stack_claim((if cm_test then 200 else 146)+24+200); 3 4646 3 4646 ref:=0; 3 4647 navn:= long<::>; 3 4648 3 4648 <*+2*> 3 4649 if testbit0 and overvåget or testbit28 then 3 4650 skriv_io_komm(out,0); 3 4651 <*-2*> 3 4652 3 4652 repeat 3 4653 3 4653 <*V*> wait_ch(cs_io_komm, 3 4654 op_ref, 3 4655 true, 3 4656 -1<*timeout*>); 3 4657 <*+2*> 3 4658 if testbit1 and overvåget then 3 4659 disable begin 4 4660 skriv_io_komm(out,0); 4 4661 write(out,"nl",1,<:operation fra cs:>,<<d>,cs_io, 4 4662 <: til io :>); 4 4663 skriv_op(out,op_ref); 4 4664 end; 3 4665 <*-2*> 3 4666 3 4666 kode:= d.op_ref.op_kode; 3 4667 i:= terminal_tab.ref.terminal_tilstand; 3 4668 status:= i shift(-21); 3 4669 opgave:= 3 4670 if kode=0 then 1 <* indlæs kommando *> else 3 4671 0; <* afvises *> 3 4672 3 4672 aktion:= if opgave = 0 then 0 else 3 4673 (case status +1 of( 3 4674 <* status *> 3 4675 <* 0 klar *>(1), 3 4676 <* 1 - *>(-1),<* ulovlig tilstand *> 3 4677 <* 2 - *>(-1),<* ulovlig tilstand *> 3 4678 <* 3 stoppet *>(2), 3 4679 <* 4 noneksist *>(-1),<* ulovlig tilstand *> 3 4680 <* 5 - *>(-1),<* ulovlig tilstand *> 3 4681 <* 6 - *>(-1),<* ulovlig tilstand *> 3 4682 <* 7 ej knyttet *>(-1),<* ulovlig tilstand *> 3 4683 -1)); 3 4684 \f 3 4684 message procedure io_komm side 3 - 810428/hko; 3 4685 3 4685 case aktion+6 of 3 4686 begin 4 4687 begin 5 4688 <*-5: terminal optaget *> 5 4689 5 4689 d.op_ref.resultat:= 16; 5 4690 afslut_operation(op_ref,-1); 5 4691 end; 4 4692 4 4692 begin 5 4693 <*-4: operation uden virkning *> 5 4694 5 4694 afslut_operation(op_ref,-1); 5 4695 end; 4 4696 4 4696 begin 5 4697 <*-3: ulovlig operationskode *> 5 4698 5 4698 fejl_reaktion(2<*operationskode*>,kode,<:ulovlig:>,1); 5 4699 afslut_operation(op_ref,-1); 5 4700 end; 4 4701 4 4701 begin 5 4702 <*-2: ulovlig aktion *> 5 4703 5 4703 fejl_reaktion(3<*programfejl*>,-2,<: ulovlig aktion:>,0); 5 4704 afslut_operation(op_ref,-1); 5 4705 end; 4 4706 4 4706 begin 5 4707 <*-1: ulovlig io_tilstand *> 5 4708 5 4708 fejl_reaktion(3<*programfejl*>,status,<: ulovlig io-status:>,0); 5 4709 afslut_operation(op_ref,-1); 5 4710 end; 4 4711 4 4711 begin 5 4712 <* 0: ikke implementeret *> 5 4713 5 4713 fejl_reaktion(2<*operationskode*>,kode,<: ikke implementeret:>,1); 5 4714 afslut_operation(op_ref,-1); 5 4715 end; 4 4716 4 4716 begin 5 4717 \f 5 4717 message procedure io_komm side 4 - 851001/cl; 5 4718 5 4718 <* 1: indlæs kommando *> 5 4719 <*V*> wait(bs_zio_adgang); 5 4720 5 4720 <*V*> læs_kommando(z_io,101,op_ref,pos,indeks,sep,sluttegn); 5 4721 5 4721 if d.op_ref.resultat > 3 then 5 4722 begin 6 4723 <*V*> setposition(z_io,0,0); 6 4724 if sluttegn<>'nl' then outchar(z_io,'nl'); 6 4725 skriv_kvittering(z_io,op_ref,pos, 6 4726 d.op_ref.resultat); 6 4727 end 5 4728 else if d.op_ref.resultat>0 then 5 4729 begin <*godkendt*> 6 4730 kode:=d.op_ref.opkode; 6 4731 i:= kode extract 12; 6 4732 j:= if kode < 5 or 6 4733 kode=7 or kode=8 or 6 4734 kode=72 or kode=73 or kode=74 then 1 <*IN,x/EK,x*>else 6 4735 if kode=5 or kode=77 then 9 <*FO,L/FO,O*>else 6 4736 if kode = 9 or kode=10 then 3 <*VO,B/VO,L*>else 6 4737 if kode =11 or kode=12 or kode=19 or <*VO,I/VO,U/VO,S*> 6 4738 kode=20 or kode=24 then 4<*VO,F/VO,R*>else 6 4739 if kode =21 then 5 <*AU*> else 6 4740 if kode =25 then 6 <*GR,D*> else 6 4741 if kode =26 then 5 <*GR,S*> else 6 4742 if kode =27 or kode =28 then 7 <*GR,V/GR,O*>else 6 4743 if kode =30 then 10 <*SP,D*> else 6 4744 if kode =31 then 5 <*SP*> else 6 4745 if kode =32 or kode =33 then 8 <*SP,V/SP,O*>else 6 4746 if kode =34 or kode =35 then 5 <*SP,R/SP,A*>else 6 4747 if kode=71 then 11 <*FO,V*> else 6 4748 if kode =75 then 12 <*TÆ,V *>else 6 4749 if kode =76 then 12 <*TÆ,N *>else 6 4750 if kode =65 then 13 <*BE,N *>else 6 4751 if kode =66 then 14 <*BE,G *>else 6 4752 if kode =67 then 15 <*BE,V *>else 6 4753 if kode =68 then 16 <*ST,D *>else 6 4754 if kode =69 then 17 <*ST,V *>else 6 4755 if kode =36 then 18 <*AL *>else 6 4756 if kode =37 then 19 <*CC *>else 6 4757 if kode>=80 and kode <=88 then 2 <*sys-spec.*>else 6 4758 if kode>=90 and kode <=92 then 20 <*CQF,I/U/V*>else 6 4759 0; 6 4760 if j > 0 then 6 4761 begin 7 4762 case j of 7 4763 begin 8 4764 begin 9 4765 \f 9 4765 message procedure io_komm side 5 - 810424/hko; 9 4766 9 4766 <* 1: inkluder/ekskluder ydre enhed *> 9 4767 9 4767 d.op_ref.retur:= cs_io_komm; 9 4768 if kode=1 then d.opref.opkode:= 9 4769 ia(2) shift 12 + d.opref.opkode extract 12; 9 4770 d.op_ref.data(1):= ia(1); 9 4771 signal_ch(if kode < 5 or kode>=72 then cs_rad 9 4772 else cs_gar, 9 4773 op_ref,gen_optype or io_optype); 9 4774 indeks:= op_ref; 9 4775 wait_ch(cs_io_komm, 9 4776 op_ref, 9 4777 true, 9 4778 -1<*timeout*>); 9 4779 <*+4*> if op_ref <> indeks then 9 4780 fejlreaktion(11<*fremmed post*>,op_ref,<:io_kommando:>,0); 9 4781 <*-4*> 9 4782 <*V*> setposition(z_io,0,0); 9 4783 if sluttegn<>'nl' then outchar(z_io,'nl'); 9 4784 skriv_kvittering(z_io,op_ref,-1, 9 4785 d.op_ref.resultat); 9 4786 end; 8 4787 8 4787 begin 9 4788 \f 9 4788 message procedure io_komm side 6 - 810501/hko; 9 4789 9 4789 <* 2: tid/attention,ja/attention,nej 9 4790 slut/slut med billede *> 9 4791 9 4791 case d.op_ref.opkode -79 of 9 4792 begin 10 4793 10 4793 <* 80: TI *> begin 11 4794 setposition(z_io,0,0); 11 4795 if sluttegn<>'nl' then outchar(z_io,'nl'); 11 4796 if ia(1) <> 0 or ia(2) <> 0 then 11 4797 begin real field rf; 12 4798 rf:= 4; 12 4799 trap(forbudt); 12 4800 <*V*> setposition(z_io,0,0); 12 4801 systime(3,ia.rf,0.0); 12 4802 if false then 12 4803 begin 13 4804 forbudt: skriv_kvittering(z_io,0,-1, 13 4805 43<*ændring af dato/tid ikke lovlig*>); 13 4806 end 12 4807 else 12 4808 skriv_kvittering(z_io,0,-1,3); 12 4809 end 11 4810 else 11 4811 begin 12 4812 setposition(z_io,0,0); 12 4813 write(z_io,<<zddddd>,systime(5,0,r),".",1,r); 12 4814 end; 11 4815 end TI; 10 4816 \f 10 4816 message procedure io_komm side 7 - 810424/hko; 10 4817 10 4817 <*81: AT,J*> begin 11 4818 <*V*> setposition(z_io,0,0); 11 4819 if sluttegn <> 'nl' then outchar(zio,'nl'); 11 4820 monitor(10)release process:(z_io,0,ia); 11 4821 skriv_kvittering(z_io,0,-1,3); 11 4822 end; 10 4823 10 4823 <* 82: AT,N*> begin 11 4824 i:= monitor(8)reserve process:(z_io,0,ia); 11 4825 <*V*> setposition(z_io,0,0); 11 4826 if sluttegn <> 'nl' then outchar(zio,'nl'); 11 4827 skriv_kvittering(z_io,0,-1, 11 4828 if i = 0 then 3 else 0); 11 4829 end; 10 4830 10 4830 <* 83: SL *> begin 11 4831 errorbits:=0; <* warning.no ok.yes *> 11 4832 trapmode:= 1 shift 13; 11 4833 trap(-2); 11 4834 end; 10 4835 10 4835 <* 84: SL,B *>begin 11 4836 errorbits:=1; <* warning.no ok.no *> 11 4837 trap(-3); 11 4838 end; 10 4839 <* 85: SL,K *>begin 11 4840 errorbits:=1; <* warning.no ok.no *> 11 4841 disable sæt_bit_i(trapmode,15,0); 11 4842 trap(-3); 11 4843 end; 10 4844 \f 10 4844 message procedure io_komm side 7a - 810511/cl; 10 4845 10 4845 <* 86: TE,J *>begin 11 4846 setposition(z_io,0,0); 11 4847 if sluttegn <> 'nl' then outchar(z_io,'nl'); 11 4848 for i:= 1 step 1 until indeks do 11 4849 if 0<=ia(i) and ia(i)<=47 then 11 4850 begin 12 4851 case (ia(i)+1) of 12 4852 begin 13 4853 testbit0 := true;testbit1 := true;testbit2 := true; 13 4854 testbit3 := true;testbit4 := true;testbit5 := true; 13 4855 testbit6 := true;testbit7 := true;testbit8 := true; 13 4856 testbit9 := true;testbit10:= true;testbit11:= true; 13 4857 testbit12:= true;testbit13:= true;testbit14:= true; 13 4858 testbit15:= true;testbit16:= true;testbit17:= true; 13 4859 testbit18:= true;testbit19:= true;testbit20:= true; 13 4860 testbit21:= true;testbit22:= true;testbit23:= true; 13 4861 testbit24:= true;testbit25:= true;testbit26:= true; 13 4862 testbit27:= true;testbit28:= true;testbit29:= true; 13 4863 testbit30:= true;testbit31:= true;testbit32:= true; 13 4864 testbit33:= true;testbit34:= true;testbit35:= true; 13 4865 testbit36:= true;testbit37:= true;testbit38:= true; 13 4866 testbit39:= true;testbit40:= true;testbit41:= true; 13 4867 testbit42:= true;testbit43:= true;testbit44:= true; 13 4868 testbit45:= true;testbit46:= true;testbit47:= true; 13 4869 end; 12 4870 end; 11 4871 skriv_kvittering(z_io,0,-1,3); 11 4872 end; 10 4873 \f 10 4873 message procedure io_komm side 7b - 810511/cl; 10 4874 10 4874 <* 87: TE,N *>begin 11 4875 setposition(z_io,0,0); 11 4876 if sluttegn <> 'nl' then outchar(z_io,'nl'); 11 4877 for i:= 1 step 1 until indeks do 11 4878 if 0<=ia(i) and ia(i)<=47 then 11 4879 begin 12 4880 case (ia(i)+1) of 12 4881 begin 13 4882 testbit0 := false;testbit1 := false;testbit2 := false; 13 4883 testbit3 := false;testbit4 := false;testbit5 := false; 13 4884 testbit6 := false;testbit7 := false;testbit8 := false; 13 4885 testbit9 := false;testbit10:= false;testbit11:= false; 13 4886 testbit12:= false;testbit13:= false;testbit14:= false; 13 4887 testbit15:= false;testbit16:= false;testbit17:= false; 13 4888 testbit18:= false;testbit19:= false;testbit20:= false; 13 4889 testbit21:= false;testbit22:= false;testbit23:= false; 13 4890 testbit24:= false;testbit25:= false;testbit26:= false; 13 4891 testbit27:= false;testbit28:= false;testbit29:= false; 13 4892 testbit30:= false;testbit31:= false;testbit32:= false; 13 4893 testbit33:= false;testbit34:= false;testbit35:= false; 13 4894 testbit36:= false;testbit37:= false;testbit38:= false; 13 4895 testbit39:= false;testbit40:= false;testbit41:= false; 13 4896 testbit42:= false;testbit43:= false;testbit44:= false; 13 4897 testbit45:= false;testbit46:= false;testbit47:= false; 13 4898 end; 12 4899 end; 11 4900 skriv_kvittering(z_io,0,-1,3); 11 4901 end; 10 4902 10 4902 <* 88: O *> begin 11 4903 integer array odescr,zdescr(1:20); 11 4904 long array field laf; 11 4905 integer res, i, j; 11 4906 11 4906 i:= j:= 1; 11 4907 while læstegn(ia,i,res)<>0 do 11 4908 begin 12 4909 if 'A'<=res and res<='Å' then res:= res - 'A' + 'a'; 12 4910 skrivtegn(ia,j,res); 12 4911 end; 11 4912 11 4912 laf:= 2; 11 4913 getzone6(out,odescr); 11 4914 getzone6(z_io,zdescr); 11 4915 close(out,zdescr.laf(1)<>odescr.laf(1) or 11 4916 zdescr.laf(2)<>odescr.laf(2)); 11 4917 laf:= 0; 11 4918 11 4918 if ia(1)=0 then 11 4919 begin 12 4920 res:= 3; 12 4921 j:= 0; 12 4922 end 11 4923 else 11 4924 begin 12 4925 j:= res:= openbs(out,j,ia,0); 12 4926 if res<>0 then 12 4927 res:= 46; 12 4928 end; 11 4929 if res<>0 then 11 4930 begin 12 4931 open(out,8,konsol_navn,0); 12 4932 if j<>0 then 12 4933 begin 13 4934 i:= 1; 13 4935 fejlreaktion(4,j,string ia.laf(increase(i)),1); 13 4936 end; 12 4937 end 11 4938 else res:= 3; 11 4939 setposition(z_io,0,0); 11 4940 skriv_kvittering(z_io,0,-1,res); 11 4941 end; 10 4942 end;<*case d.op_ref.opkode -79*> 9 4943 end;<*case 2*> 8 4944 begin 9 4945 \f 9 4945 message procedure io_komm side 8 - 810424/hko; 9 4946 9 4946 <* 3: vogntabel,linienr/-,busnr*> 9 4947 9 4947 d.op_ref.retur:= cs_io_komm; 9 4948 tofrom(d.op_ref.data,ia,10); 9 4949 indeks:= op_ref; 9 4950 signal_ch(cs_vt,op_ref,gen_optype or io_optype); 9 4951 wait_ch(cs_io_komm, 9 4952 op_ref, 9 4953 io_optype, 9 4954 -1<*timeout*>); 9 4955 <*+2*> if testbit2 and overvåget then 9 4956 disable begin 10 4957 skriv_io_komm(out,0); 10 4958 write(out,"nl",1,<:io operation retur fra vt:>); 10 4959 skriv_op(out,op_ref); 10 4960 end; 9 4961 <*-2*> 9 4962 <*+4*> if indeks <> op_ref then 9 4963 fejlreaktion(11<*fremmed post*>,op_ref,<:io_kommando:>,0); 9 4964 <*-4*> 9 4965 9 4965 i:=d.op_ref.resultat; 9 4966 if i<1 or i>3 then 9 4967 begin 10 4968 <*V*> setposition(z_io,0,0); 10 4969 if sluttegn<>'nl' then outchar(z_io,'nl'); 10 4970 skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat); 10 4971 end 9 4972 else 9 4973 begin 10 4974 \f 10 4974 message procedure io_komm side 9 - 820301/hko,cl; 10 4975 10 4975 integer antal,filref; 10 4976 10 4976 antal:= d.op_ref.data(6); 10 4977 fil_ref:= d.op_ref.data(7); 10 4978 pos:= 0; 10 4979 <*V*> setposition(zio,0,0); 10 4980 if sluttegn <> 'nl' then outchar(z_io,'nl'); 10 4981 for pos:= pos +1 while pos <= antal do 10 4982 begin 11 4983 integer bogst,løb; 11 4984 11 4984 disable i:= læsfil(fil_ref,pos,j); 11 4985 if i <> 0 then 11 4986 fejlreaktion(5<*læs_fel*>,i,<:io komm., vo,l/vo,b:>,0); 11 4987 vogn:= fil(j,1) shift (-24) extract 24; 11 4988 løb:= fil(j,1) extract 24; 11 4989 if d.op_ref.opkode=9 then 11 4990 begin i:=vogn; vogn:=løb; løb:=i; end; 11 4991 ll:= løb shift(-12) extract 10; 11 4992 bogst:= løb shift(-7) extract 5; 11 4993 if bogst > 0 then bogst:= bogst+'A'-1; 11 4994 løb:= løb extract 7; 11 4995 vogn:= vogn extract 14; 11 4996 i:= d.op_ref.opkode -8; 11 4997 for i:= i,i +1 do 11 4998 begin 12 4999 j:= (i+1) extract 1; 12 5000 case j+1 of 12 5001 begin 13 5002 write(zio,"sp",if bogst=0 then 1 else 0,<<ddd>,ll, 13 5003 false add bogst,1,"/",1,true,3,<<d>,løb); 13 5004 write(zio,<<dddd>,vogn,"sp",1); 13 5005 end; 12 5006 end; 11 5007 if pos mod 5 = 0 then 11 5008 begin 12 5009 outchar(zio,'nl'); 12 5010 <*V*> setposition(zio,0,0); 12 5011 end 11 5012 else write(zio,"sp",3); 11 5013 end; 10 5014 write(zio,"*",1); 10 5015 \f 10 5015 message procedure io_komm side 9a - 810505/hko; 10 5016 10 5016 d.op_ref.opkode:=104;<*slet fil*> 10 5017 d.op_ref.data(4):=filref; 10 5018 indeks:=op_ref; 10 5019 signal_ch(cs_slet_fil,op_ref,genoptype or iooptype); 10 5020 <*V*> wait_ch(cs_io_komm,op_ref,io_optype,-1); 10 5021 10 5021 <*+2*> if testbit2 and overvåget then 10 5022 disable begin 11 5023 skriv_io_komm(out,0); 11 5024 write(out,"nl",1,<:io operation retur fra sletfil:>); 11 5025 skriv_op(out,op_ref); 11 5026 end; 10 5027 <*-2*> 10 5028 10 5028 <*+4*> if op_ref<>indeks then 10 5029 fejlreaktion(11<*fr.post*>,op_ref,<:io-komm, sletfil:>,0); 10 5030 <*-4*> 10 5031 if d.op_ref.data(9)<>0 then 10 5032 fejlreaktion(3<*prg.fejl*>,d.op_ref.data(9), 10 5033 <:io-komm, sletfil:>,1); 10 5034 end; 9 5035 end; 8 5036 8 5036 begin 9 5037 \f 9 5037 message procedure io_komm side 10 - 820301/hko; 9 5038 9 5038 <* 4 indsæt/udtag/flyt bus i vogntabel, slet vogntabel *> 9 5039 9 5039 vogn:=ia(1); 9 5040 ll:=ia(2); 9 5041 omr:= if kode=11 or kode=19 then ia(3) else 9 5042 if kode=12 then ia(2) else 0; 9 5043 if kode=19 and omr<=0 then 9 5044 begin 10 5045 if omr=-1 then omr:= 0 10 5046 else omr:= 14 shift 20 + 3; <*OMR TCT*> 10 5047 end; 9 5048 <*V*> wait_ch(cs_vt_adgang, 9 5049 vt_op, 9 5050 gen_optype, 9 5051 -1<*timeout sek*>); 9 5052 start_operation(vtop,101,cs_io_komm, 9 5053 kode); 9 5054 d.vt_op.data(1):=vogn; 9 5055 d.vt_op.data(2):=ll; 9 5056 d.vt_op.data(if kode=19 then 3 else 4):= omr; 9 5057 indeks:= vt_op; 9 5058 signal_ch(cs_vt, 9 5059 vt_op, 9 5060 gen_optype or io_optype); 9 5061 9 5061 <*V*> wait_ch(cs_io_komm, 9 5062 vt_op, 9 5063 io_optype, 9 5064 -1<*timeout sek*>); 9 5065 <*+2*> if testbit2 and overvåget then 9 5066 disable begin 10 5067 skriv_io_komm(out,0); 10 5068 write(out,"nl",1, 10 5069 <:iooperation retur fra vt:>); 10 5070 skriv_op(out,vt_op); 10 5071 end; 9 5072 <*-2*> 9 5073 <*+4*> if vt_op<>indeks then 9 5074 fejl_reaktion(11<*fremmede op*>,op_ref, 9 5075 <:io-kommando:>,0); 9 5076 <*-4*> 9 5077 <*V*> setposition(z_io,0,0); 9 5078 if sluttegn<>'nl' then outchar(z_io,'nl'); 9 5079 skriv_kvittering(z_io,if d.vt_op.resultat = 11 or 9 5080 d.vt_op.resultat = 12 then d.vt_op.data(3) 9 5081 else vt_op,-1,d.vt_op.resultat); 9 5082 d.vt_op.optype:= genoptype or vt_optype; 9 5083 disable afslut_operation(vt_op,cs_vt_adgang); 9 5084 end; 8 5085 8 5085 begin 9 5086 \f 9 5086 message procedure io_komm side 11 - 810428/hko; 9 5087 9 5087 <* 5 autofil-skift 9 5088 gruppe,slet 9 5089 spring (igangsæt) 9 5090 spring,annuler 9 5091 spring,reserve *> 9 5092 9 5092 tofrom(d.op_ref.data,ia,8); 9 5093 d.op_ref.retur:=cs_io_komm; 9 5094 indeks:=op_ref; 9 5095 signal_ch(cs_vt,op_ref,gen_optype or io_optype); 9 5096 <*V*> wait_ch(cs_io_komm, 9 5097 op_ref, 9 5098 io_optype, 9 5099 -1<*timeout*>); 9 5100 <*+2*> if testbit2 and overvåget then 9 5101 disable begin 10 5102 skriv_io_komm(out,0); 10 5103 write(out,"nl",1,<:io operation retur fra vt:>); 10 5104 skriv_op(out,op_ref); 10 5105 end; 9 5106 <*-2*> 9 5107 <*+4*> if indeks<>op_ref then 9 5108 fejlreaktion(11<*fremmed post*>,op_ref, 9 5109 <:io-kommando(autofil):>,0); 9 5110 <*-4*> 9 5111 9 5111 <*V*> setposition(z_io,0,0); 9 5112 if sluttegn<>'nl' then outchar(z_io,'nl'); 9 5113 skriv_kvittering(z_io,if (d.op_ref.resultat=11 or 9 5114 d.op_ref.resultat=12) and kode=34 <*SP,R*> then 9 5115 d.op_ref.data(4) else op_ref,-1,d.op_ref.resultat); 9 5116 end; 8 5117 8 5117 begin 9 5118 \f 9 5118 message procedure io_komm side 12 - 820301/hko/cl; 9 5119 9 5119 <* 6 gruppedefinition *> 9 5120 9 5120 tofrom(d.op_ref.data,ia,indeks*2); 9 5121 <*V*> wait_ch(cs_io_fil,vt_op,true,-1<*timeout*>); 9 5122 start_operation(vt_op,101,cs_io_komm, 9 5123 101<*opret fil*>); 9 5124 d.vt_op.data(1):=256;<*postantal*> 9 5125 d.vt_op.data(2):=1; <*postlængde*> 9 5126 d.vt_op.data(3):=1; <*segmentantal*> 9 5127 d.vt_op.data(4):= 9 5128 2 shift 10; <*spool fil*> 9 5129 signal_ch(cs_opret_fil,vt_op,io_optype); 9 5130 pos:=vt_op;<*variabel lånes*> 9 5131 <*V*> wait_ch(cs_io_komm,vt_op,io_optype,-1<*timeout*>); 9 5132 <*+4*> if vt_op<>pos then 9 5133 fejlreaktion(11<*fremmed post*>,vt_op,<:gruppedef:>,0); 9 5134 if d.vt_op.data(9)<>0 then 9 5135 fejlreaktion(13<*opret-fil*>,d.vt_op.data(9), 9 5136 <:io-kommando(gruppedefinition):>,0); 9 5137 <*-4*> 9 5138 iaf:=0; 9 5139 for i:=1 step 1 until indeks-1 do 9 5140 begin 10 5141 disable k:=modif_fil(d.vt_op.data(4),i,j); 10 5142 if k<>0 then 10 5143 fejlreaktion(7<*modif-fil*>,k, 10 5144 <:io kommando(gruppe-def):>,0); 10 5145 fil(j).iaf(1):=d.op_ref.data(i+1); 10 5146 end; 9 5147 while sep = ',' do 9 5148 begin 10 5149 wait(bs_fortsæt_adgang); 10 5150 pos:= 1; j:= 0; 10 5151 while læs_store(z_io,i) < 8 do 10 5152 begin 11 5153 skrivtegn(fortsæt,pos,i); 11 5154 if i = '?' or i = 'esc' then j:= 1; <* skip kommando *> 11 5155 end; 10 5156 skrivtegn(fortsæt,pos,'em'); 10 5157 afsluttext(fortsæt,pos); 10 5158 sluttegn:= i; 10 5159 if j<>0 then 10 5160 begin 11 5161 setposition(z_io,0,0); 11 5162 if sluttegn <> 'nl' then outchar(z_io,'nl'); 11 5163 skriv_kvittering(zio,opref,-1,53);<*annulleret*> 11 5164 goto gr_ann; 11 5165 end; 10 5166 \f 10 5166 message procedure io_komm side 13 - 810512/hko/cl; 10 5167 10 5167 disable begin 11 5168 integer array værdi(1:4); 11 5169 integer a_pos,res; 11 5170 pos:= 0; 11 5171 repeat 11 5172 apos:= pos; 11 5173 læs_paramsæt(fortsæt,a_pos,0,værdi,sep,res); 11 5174 if res >= 0 then 11 5175 begin 12 5176 if res=0 and (sep=',' or indeks>2) then <*ok*> 12 5177 else if res=0 then res:= -25 <*parameter mangler*> 12 5178 else if res=2 and (værdi(1)<1 or værdi(1)>9999) then 12 5179 res:= -7 <*busnr ulovligt*> 12 5180 else if res=2 or res=6 then 12 5181 begin 13 5182 k:=modiffil(d.vt_op.data(4),indeks,j); 13 5183 if k<>0 then fejlreaktion(7<*modiffil*>,k, 13 5184 <:io kommando(gruppe-def):>,0); 13 5185 iaf:= 0; 13 5186 fil(j).iaf(1):= værdi(1) + 13 5187 (if res=6 then 1 shift 22 else 0); 13 5188 indeks:= indeks+1; 13 5189 if sep = ',' then res:= 0; 13 5190 end 12 5191 else res:= -27; <*parametertype*> 12 5192 end; 11 5193 if res>0 then pos:= a_pos; 11 5194 until sep<>'sp' or res<=0; 11 5195 11 5195 if res<0 then 11 5196 begin 12 5197 d.op_ref.resultat:= -res; 12 5198 i:=1; 12 5199 hægt_tekst(d.op_ref.data,i,fortsæt,1); 12 5200 afsluttext(d.op_ref.data,i); 12 5201 end; 11 5202 end; 10 5203 \f 10 5203 message procedure io_komm side 13a - 810512/hko/cl; 10 5204 10 5204 if d.op_ref.resultat > 3 then 10 5205 begin 11 5206 setposition(z_io,0,0); 11 5207 if sluttegn <> 'nl' then outchar(z_io,'nl'); 11 5208 skriv_kvittering(z_io,op_ref,pos,d.opref.resultat); 11 5209 goto gr_ann; 11 5210 end; 10 5211 signalbin(bs_fortsæt_adgang); 10 5212 end while sep = ','; 9 5213 d.op_ref.data(2):= d.vt_op.data(1):=indeks-1; 9 5214 k:= sætfildim(d.vt_op.data); 9 5215 if k<>0 then fejlreaktion(9,k,<:io kommando(gruppe-def):>,0); 9 5216 d.op_ref.data(3):= d.vt_op.data(4); <*filref*> 9 5217 signalch(cs_io_fil,vt_op,io_optype or gen_optype); 9 5218 d.op_ref.retur:=cs_io_komm; 9 5219 pos:=op_ref; 9 5220 signal_ch(cs_vt,op_ref,gen_optype or io_optype); 9 5221 <*V*> wait_ch(cs_io_komm,op_ref,io_optype,-1<*timeout*>); 9 5222 <*+4*> if pos<>op_ref then 9 5223 fejlreaktion(11<*fremmed post*>,op_ref, 9 5224 <:io kommando(gruppedef retur fra vt):>,0); 9 5225 <*-4*> 9 5226 9 5226 <*V*> setposition(z_io,0,0); 9 5227 if sluttegn<>'nl' then outchar(z_io,'nl'); 9 5228 skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat); 9 5229 9 5229 if false then 9 5230 begin 10 5231 gr_ann: signalch(cs_slet_fil,vt_op,io_optype); 10 5232 waitch(cs_io_komm,vt_op,io_optype,-1); 10 5233 signalch(cs_io_fil,vt_op,io_optype or vt_optype); 10 5234 end; 9 5235 9 5235 end; 8 5236 8 5236 begin 9 5237 \f 9 5237 message procedure io_komm side 14 - 810525/hko/cl; 9 5238 9 5238 <* 7 gruppe(-oversigts-)rapport *> 9 5239 9 5239 d.op_ref.retur:=cs_io_komm; 9 5240 d.op_ref.data(1):=ia(1); 9 5241 indeks:=op_ref; 9 5242 signal_ch(cs_vt,op_ref,gen_optype or io_optype); 9 5243 <*V*> wait_ch(cs_io_komm,op_ref,io_optype,-1<*timeout*>); 9 5244 9 5244 <*+4*> if op_ref<>indeks then 9 5245 fejlreaktion(11<*fremmed post*>,op_ref, 9 5246 <:io-kommando(gruppe-rapport):>,0); 9 5247 <*-4*> 9 5248 9 5248 <*V*> setposition(z_io,0,0); 9 5249 if sluttegn <> 'nl' then outchar(z_io,'nl'); 9 5250 if d.op_ref.resultat<>3 then 9 5251 begin 10 5252 skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat); 10 5253 end 9 5254 else 9 5255 begin 10 5256 integer bogst,løb; 10 5257 10 5257 if kode = 27 then <* gruppe,vis *> 10 5258 begin 11 5259 <*V*> write(z_io,"nl",1,"-",5,"sp",2,<:gruppe: :>, 11 5260 "G",1,<<z>,d.op_ref.data(1) extract 7, 11 5261 "sp",2,"-",5,"nl",1); 11 5262 \f 11 5262 message procedure io_komm side 15 - 820301/hko; 11 5263 11 5263 for pos:=1 step 1 until d.op_ref.data(2) do 11 5264 begin 12 5265 disable i:=læsfil(d.op_ref.data(3),pos,j); 12 5266 if i<>0 then 12 5267 fejlreaktion(5<*læsfil*>,i, 12 5268 <:io_kommando(gruppe,vis):>,0); 12 5269 iaf:=0; 12 5270 vogn:=fil(j).iaf(1); 12 5271 if vogn shift(-22) =0 then 12 5272 write(z_io,<<ddddddd>,vogn extract 14) 12 5273 else 12 5274 begin 13 5275 løb:=vogn extract 7; 13 5276 bogst:=vogn shift(-7) extract 5; 13 5277 if bogst>0 then bogst:=bogst+'A'-1; 13 5278 ll:=vogn shift(-12) extract 10; 13 5279 write(z_io,"sp",if bogst=0 then 1 else 0,<<ddd>,ll, 13 5280 false add bogst,1,"/",1,true,3,<<d>,løb); 13 5281 end; 12 5282 if pos mod 8 =0 then outchar(z_io,'nl') 12 5283 else write(z_io,"sp",2); 12 5284 end; 11 5285 write(z_io,"*",1); 11 5286 \f 11 5286 message procedure io_komm side 16 - 810512/hko/cl; 11 5287 11 5287 end 10 5288 else if kode=28 then <* gruppe,oversigt *> 10 5289 begin 11 5290 write(z_io,"nl",1,"-",5,"sp",2,<:gruppe oversigt:>, 11 5291 "sp",2,"-",5,"nl",2); 11 5292 for pos:=1 step 1 until d.op_ref.data(1) do 11 5293 begin 12 5294 disable i:=læsfil(d.op_ref.data(2),pos,j); 12 5295 if i<>0 then 12 5296 fejlreaktion(5<*læsfil*>,i, 12 5297 <:io-kommando(gruppe-oversigt):>,0); 12 5298 iaf:=0; 12 5299 ll:=fil(j).iaf(1); 12 5300 write(z_io,"G",1,<<z>,true,3,ll extract 7); 12 5301 if pos mod 10 =0 then outchar(z_io,'nl') 12 5302 else write(z_io,"sp",3); 12 5303 end; 11 5304 write(z_io,"*",1); 11 5305 end; 10 5306 <* slet fil *> 10 5307 d.op_ref.opkode:= 104; 10 5308 d.op_ref.data(4):= d.op_ref.data(if kode=28 then 2 else 3); 10 5309 signalch(cs_slet_fil,op_ref,gen_optype or io_optype); 10 5310 waitch(cs_io_komm,op_ref,io_optype or gen_optype,-1); 10 5311 end; <* resultat=3 *> 9 5312 9 5312 end; 8 5313 8 5313 begin 9 5314 \f 9 5314 message procedure io_komm side 17 - 810525/cl; 9 5315 9 5315 <* 8 spring(-oversigts-)rapport *> 9 5316 9 5316 d.op_ref.retur:=cs_io_komm; 9 5317 tofrom(d.op_ref.data,ia,4); 9 5318 indeks:=op_ref; 9 5319 signal_ch(cs_vt,op_ref,gen_optype or io_optype); 9 5320 <*V*> wait_ch(cs_io_komm,op_ref,io_optype,-1<*timeout*>); 9 5321 9 5321 <*+4*> if op_ref<>indeks then 9 5322 fejlreaktion(11<*fremmed post*>,op_ref, 9 5323 <:io-kommando(spring-rapport):>,0); 9 5324 <*-4*> 9 5325 9 5325 <*V*> setposition(z_io,0,0); 9 5326 if sluttegn <> 'nl' then outchar(z_io,'nl'); 9 5327 if d.op_ref.resultat<>3 then 9 5328 begin 10 5329 skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat); 10 5330 end 9 5331 else 9 5332 begin 10 5333 boolean p_skrevet; 10 5334 integer bogst,løb; 10 5335 10 5335 if kode = 32 then <* spring,vis *> 10 5336 begin 11 5337 ll:= d.op_ref.data(1) shift (-5) extract 10; 11 5338 bogst:= d.op_ref.data(1) extract 5; 11 5339 if bogst<>0 then bogst:= bogst + 'A' - 1; 11 5340 <*V*> write(z_io,"nl",1,"-",5,"sp",2,<:spring: :>, 11 5341 <<d>,ll,false add bogst,(bogst<>0) extract 1, 11 5342 <:.:>,string (extend d.op_ref.data(2) shift 24)); 11 5343 raf:= data+8; 11 5344 if d.op_ref.raf(1)<>0.0 then 11 5345 write(z_io,<:, startet :>,<<zddddd>,round 11 5346 systime(4,d.op_ref.raf(1),r),<:.:>,round r) 11 5347 else 11 5348 write(z_io,<:, ikke startet:>); 11 5349 write(z_io,"sp",2,"-",5,"nl",1); 11 5350 \f 11 5350 message procedure io_komm side 18 - 810518/cl; 11 5351 11 5351 p_skrevet:= false; 11 5352 for pos:=1 step 1 until d.op_ref.data(3) do 11 5353 begin 12 5354 disable i:=læsfil(d.op_ref.data(4),pos,j); 12 5355 if i<>0 then 12 5356 fejlreaktion(5<*læsfil*>,i, 12 5357 <:io_kommando(spring,vis):>,0); 12 5358 iaf:=0; 12 5359 i:= fil(j).iaf(1); 12 5360 if i < 0 and -, p_skrevet then 12 5361 begin 13 5362 outchar(z_io,'('); p_skrevet:= true; 13 5363 end; 12 5364 if i > 0 and p_skrevet then 12 5365 begin 13 5366 outchar(z_io,')'); p_skrevet:= false; 13 5367 end; 12 5368 if pos mod 2 = 0 then 12 5369 write(z_io,<< dd>,abs i,<:.:>) 12 5370 else 12 5371 write(z_io,true,3,<<d>,abs i); 12 5372 if pos mod 21 = 0 then outchar(z_io,'nl'); 12 5373 end; 11 5374 write(z_io,"*",1); 11 5375 \f 11 5375 message procedure io_komm side 19 - 810525/cl; 11 5376 11 5376 end 10 5377 else if kode=33 then <* spring,oversigt *> 10 5378 begin 11 5379 write(z_io,"nl",1,"-",5,"sp",2,<:spring oversigt:>, 11 5380 "sp",2,"-",5,"nl",2); 11 5381 for pos:=1 step 1 until d.op_ref.data(1) do 11 5382 begin 12 5383 disable i:=læsfil(d.op_ref.data(2),pos,j); 12 5384 if i<>0 then 12 5385 fejlreaktion(5<*læsfil*>,i, 12 5386 <:io-kommando(spring-oversigt):>,0); 12 5387 iaf:=0; 12 5388 ll:=fil(j).iaf(1) shift (-5) extract 10; 12 5389 bogst:=fil(j).iaf(1) extract 5; 12 5390 if bogst<>0 then bogst:=bogst + 'A' - 1; 12 5391 write(z_io,"sp",(bogst=0) extract 1 + 1,<<ddd>,ll, 12 5392 false add bogst,(bogst<>0) extract 1,<:.:>,true,4, 12 5393 string (extend fil(j).iaf(2) shift 24)); 12 5394 if fil(j,2)<>0.0 then 12 5395 write(z_io,<:startet :>,<<zddddd>, 12 5396 round systime(4,fil(j,2),r),<:.:>,round r); 12 5397 outchar(z_io,'nl'); 12 5398 end; 11 5399 write(z_io,"*",1); 11 5400 end; 10 5401 <* slet fil *> 10 5402 d.op_ref.opkode:= 104; 10 5403 if kode=33 then d.op_ref.data(4):= d.op_ref.data(2); 10 5404 signalch(cs_slet_fil,op_ref,gen_optype or io_optype); 10 5405 waitch(cs_io_komm,op_ref,io_optype or gen_optype,-1); 10 5406 end; <* resultat=3 *> 9 5407 9 5407 end; 8 5408 8 5408 begin 9 5409 \f 9 5409 message procedure io_komm side 20 - 820302/hko; 9 5410 9 5410 <* 9 fordeling af linier/områder på operatører *> 9 5411 9 5411 d.op_ref.retur:=cs_io_komm; 9 5412 disable 9 5413 if kode=5 then 9 5414 begin 10 5415 integer array io_linietabel(1:max_linienr//3+1); 10 5416 10 5416 for ref:= 0 step 512 until (max_linienr//768*512) do 10 5417 begin 11 5418 i:= læs_fil(1035,ref//512+1,j); 11 5419 if i <> 0 then 11 5420 fejlreaktion(5,i,<:liniefordelingstabel:>,0); 11 5421 tofrom(io_linietabel.ref,fil(j), 11 5422 if (((max_linienr+1 - (ref//2*3))+2)//3*2) > 512 then 512 11 5423 else ((max_linienr+1 - (ref//2*3))+2)//3*2); 11 5424 end; 10 5425 ref:=0; 10 5426 operatør:=ia(1); 10 5427 for j:=2 step 1 until indeks do 10 5428 begin 11 5429 ll:=ia(j); 11 5430 if ll<>0 then 11 5431 skrivtegn(io_linietabel,abs(ll)+1, 11 5432 if ll>0 then operatør else 0); 11 5433 end; 10 5434 for ref:= 0 step 512 until (max_linienr//768*512) do 10 5435 begin 11 5436 i:= skriv_fil(1035,ref//512+1,j); 11 5437 if i <> 0 then 11 5438 fejlreaktion(6,i,<:liniefordelingstabel:>,0); 11 5439 tofrom(fil(j),io_linietabel.ref, 11 5440 if (((max_linienr+1 - (ref//2*3))+2)//3*2) > 512 11 5441 then 512 else ((max_linienr+1 - (ref//2*3))+2)//3*2 11 5442 ); 11 5443 end; 10 5444 ref:=0; 10 5445 end 9 5446 else 9 5447 begin 10 5448 modiffil(1034,1,i); 10 5449 ref:=0; 10 5450 operatør:=ia(1); 10 5451 for j:=2 step 1 until indeks do 10 5452 begin 11 5453 ll:=ia(j); 11 5454 fil(i).ref(ll):= if ll>0 then operatør else 0; 11 5455 end; 10 5456 end; 9 5457 indeks:=op_ref; 9 5458 signal_ch(cs_rad,op_ref,gen_optype or io_optype); 9 5459 <*V*> wait_ch(cs_io_komm,op_ref,io_optype,-1); 9 5460 9 5460 <*+4*> if op_ref<>indeks then 9 5461 fejlreaktion(11<*fr.post*>,op_ref, 9 5462 <:io-komm,liniefordeling retur fra rad:>,0); 9 5463 <*-4*> 9 5464 9 5464 <*V*> setposition(z_io,0,0); 9 5465 if sluttegn<>'nl' then outchar(z_io,'nl'); 9 5466 skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat); 9 5467 9 5467 end; 8 5468 8 5468 begin 9 5469 \f 9 5469 message procedure io_komm side 21 - 820301/cl; 9 5470 9 5470 <* 10 springdefinition *> 9 5471 9 5471 tofrom(d.op_ref.data,ia,indeks*2); 9 5472 <*V*> wait_ch(cs_io_fil,vt_op,true,-1<*timeout*>); 9 5473 start_operation(vt_op,101,cs_io_komm, 9 5474 101<*opret fil*>); 9 5475 d.vt_op.data(1):=128;<*postantal*> 9 5476 d.vt_op.data(2):=2; <*postlængde*> 9 5477 d.vt_op.data(3):=1; <*segmentantal*> 9 5478 d.vt_op.data(4):= 9 5479 2 shift 10; <*spool fil*> 9 5480 signal_ch(cs_opret_fil,vt_op,io_optype); 9 5481 pos:=vt_op;<*variabel lånes*> 9 5482 <*V*> wait_ch(cs_io_komm,vt_op,io_optype,-1<*timeout*>); 9 5483 <*+4*> if vt_op<>pos then 9 5484 fejlreaktion(11<*fremmed post*>,vt_op,<:springdef:>,0); 9 5485 if d.vt_op.data(9)<>0 then 9 5486 fejlreaktion(13<*opret-fil*>,d.vt_op.data(9), 9 5487 <:io-kommando(springdefinition):>,0); 9 5488 <*-4*> 9 5489 iaf:=0; 9 5490 for i:=1 step 1 until indeks-2 do 9 5491 begin 10 5492 disable k:=modif_fil(d.vt_op.data(4),i,j); 10 5493 if k<>0 then 10 5494 fejlreaktion(7<*modif-fil*>,k, 10 5495 <:io kommando(spring-def):>,0); 10 5496 fil(j).iaf(1):=d.op_ref.data(i+2); 10 5497 end; 9 5498 while sep = ',' do 9 5499 begin 10 5500 wait(bs_fortsæt_adgang); 10 5501 pos:= 1; j:= 0; 10 5502 while læs_store(z_io,i) < 8 do 10 5503 begin 11 5504 skrivtegn(fortsæt,pos,i); 11 5505 if i = '?' or i = 'esc' then j:= 1; <* skip kommando *> 11 5506 end; 10 5507 skrivtegn(fortsæt,pos,'em'); 10 5508 afsluttext(fortsæt,pos); 10 5509 sluttegn:= i; 10 5510 if j<>0 then 10 5511 begin 11 5512 setposition(z_io,0,0); 11 5513 if sluttegn <> 'nl' then outchar(z_io,'nl'); 11 5514 skriv_kvittering(z_io,opref,-1,53);<*annulleret*> 11 5515 goto sp_ann; 11 5516 end; 10 5517 \f 10 5517 message procedure io_komm side 22 - 810519/cl; 10 5518 10 5518 disable begin 11 5519 integer array værdi(1:4); 11 5520 integer a_pos,res; 11 5521 pos:= 0; 11 5522 repeat 11 5523 apos:= pos; 11 5524 læs_paramsæt(fortsæt,a_pos,0,værdi,sep,res); 11 5525 if res >= 0 then 11 5526 begin 12 5527 if res=0 and (sep=',' or indeks>2) then <*ok*> 12 5528 else if res=0 then res:= -25 <*parameter mangler*> 12 5529 else if res=10 and (værdi(1)<1 or værdi(1)>99) then 12 5530 res:= -44 <*intervalstørrelse ulovlig*> 12 5531 else if res=10 and (værdi(2)<1 or værdi(2)>99) then 12 5532 res:= -6 <*løbnr ulovligt*> 12 5533 else if res=10 then 12 5534 begin 13 5535 k:=modiffil(d.vt_op.data(4),indeks-1,j); 13 5536 if k<>0 then fejlreaktion(7<*modiffil*>,k, 13 5537 <:io kommando(spring-def):>,0); 13 5538 iaf:= 0; 13 5539 fil(j).iaf(1):= værdi(1) shift 12 + værdi(2); 13 5540 indeks:= indeks+1; 13 5541 if sep = ',' then res:= 0; 13 5542 end 12 5543 else res:= -27; <*parametertype*> 12 5544 end; 11 5545 if res>0 then pos:= a_pos; 11 5546 until sep<>'sp' or res<=0; 11 5547 11 5547 if res<0 then 11 5548 begin 12 5549 d.op_ref.resultat:= -res; 12 5550 i:=1; 12 5551 hægt_tekst(d.op_ref.data,i,fortsæt,1); 12 5552 afsluttext(d.op_ref.data,i); 12 5553 end; 11 5554 end; 10 5555 \f 10 5555 message procedure io_komm side 23 - 810519/cl; 10 5556 10 5556 if d.op_ref.resultat > 3 then 10 5557 begin 11 5558 setposition(z_io,0,0); 11 5559 if sluttegn <> 'nl' then outchar(z_io,'nl'); 11 5560 skriv_kvittering(z_io,op_ref,pos,d.opref.resultat); 11 5561 goto sp_ann; 11 5562 end; 10 5563 signalbin(bs_fortsæt_adgang); 10 5564 end while sep = ','; 9 5565 d.vt_op.data(1):= indeks-2; 9 5566 k:= sætfildim(d.vt_op.data); 9 5567 if k<>0 then fejlreaktion(9,k,<:io kommando(spring-def):>,0); 9 5568 d.op_ref.data(3):= d.vt_op.data(4); <*filref*> 9 5569 signalch(cs_io_fil,vt_op,io_optype or gen_optype); 9 5570 d.op_ref.retur:=cs_io_komm; 9 5571 pos:=op_ref; 9 5572 signal_ch(cs_vt,op_ref,gen_optype or io_optype); 9 5573 <*V*> wait_ch(cs_io_komm,op_ref,io_optype,-1<*timeout*>); 9 5574 <*+4*> if pos<>op_ref then 9 5575 fejlreaktion(11<*fremmed post*>,op_ref, 9 5576 <:io kommando(springdef retur fra vt):>,0); 9 5577 <*-4*> 9 5578 9 5578 <*V*> setposition(z_io,0,0); 9 5579 if sluttegn<>'nl' then outchar(z_io,'nl'); 9 5580 skriv_kvittering(z_io,op_ref,-1,d.op_ref.resultat); 9 5581 9 5581 if false then 9 5582 begin 10 5583 sp_ann: signalch(cs_slet_fil,vt_op,io_optype); 10 5584 waitch(cs_io_komm,vt_op,io_optype,-1); 10 5585 signalch(cs_io_fil,vt_op,io_optype or vt_optype); 10 5586 signalbin(bs_fortsæt_adgang); 10 5587 end; 9 5588 9 5588 end; 8 5589 begin 9 5590 integer i,j,k,opr,lin,max_lin; 9 5591 boolean o_ud, t_ud; 9 5592 \f 9 5592 message procedure io_komm side 23a - 820301/cl; 9 5593 9 5593 <* 11 fordelingsrapport *> 9 5594 9 5594 <*V*> setposition(z_io,0,0); 9 5595 if sluttegn <> 'nl' then outchar(z_io,'nl'); 9 5596 9 5596 max_lin:= max_linienr; 9 5597 for opr:= 1 step 1 until max_antal_operatører, 0 do 9 5598 begin 10 5599 o_ud:= t_ud:= false; 10 5600 k:= 0; 10 5601 10 5601 if opr<>0 then 10 5602 begin 11 5603 j:= k:= 0; 11 5604 for lin:= 1 step 1 until max_lin do 11 5605 begin 12 5606 læs_tegn(radio_linietabel,lin+1,i); 12 5607 if i<>0 then j:= lin; 12 5608 if opr=i and opr<>0 then 12 5609 begin 13 5610 if -, o_ud then 13 5611 begin 14 5612 o_ud:= true; 14 5613 if opr<>0 then 14 5614 write(z_io,"nl",1,<:operatør:>,<< dd>,opr, 14 5615 "sp",2,string bpl_navn(opr)) 14 5616 else 14 5617 write(z_io,"nl",1,<:ikke fordelte:>); 14 5618 end; 13 5619 if -, t_ud then 13 5620 begin 14 5621 write(z_io,<:<'nl'> linier: :>); 14 5622 t_ud:= true; 14 5623 end; 13 5624 k:=k+1; 13 5625 if k>1 and k mod 10 = 1 then 13 5626 write(z_io,"nl",1,"sp",13); 13 5627 write(z_io,<<ddd >,lin); 13 5628 end; 12 5629 if lin=max_lin then max_lin:= j; 12 5630 end; 11 5631 end; 10 5632 10 5632 k:= 0; t_ud:= false; 10 5633 for i:= 1 step 1 until max_antal_områder do 10 5634 begin 11 5635 if radio_områdetabel(i)= opr then 11 5636 begin 12 5637 if -, o_ud then 12 5638 begin 13 5639 o_ud:= true; 13 5640 if opr<>0 then 13 5641 write(z_io,"nl",1,<:operatør:>,<< dd>,opr, 13 5642 "sp",2,string bpl_navn(opr)) 13 5643 else 13 5644 write(z_io,"nl",1,<:ikke fordelte:>); 13 5645 end; 12 5646 if -, t_ud then 12 5647 begin 13 5648 write(z_io,<:<'nl'> områder: :>); 13 5649 t_ud:= true; 13 5650 end; 12 5651 k:= k+1; 12 5652 if k>1 and k mod 10 = 1 then 12 5653 write(z_io,"nl",1,"sp",13); 12 5654 write(z_io,true,4,string område_navn(i)); 12 5655 end; 11 5656 end; 10 5657 if o_ud then write(z_io,"nl",1); 10 5658 end; 9 5659 write(z_io,"*",1); 9 5660 end; 8 5661 8 5661 begin 9 5662 integer omr,typ,sum; 9 5663 integer array ialt(1:5); 9 5664 real r; 9 5665 \f 9 5665 message procedure io_komm side 24 - 810501/hko; 9 5666 9 5666 <* 12 vis/nulstil opkaldstællere *> 9 5667 9 5667 9 5667 if kode=76 and indeks=1 then 9 5668 begin <* TÆ,N <tid> *> 10 5669 if ia(1)<(-1) or 2400<ia(1) then 10 5670 begin 11 5671 setposition(z_io,0,0); 11 5672 if sluttegn<>'nl' then outchar(z_io,'nl'); 11 5673 skriv_kvittering(z_io,opref,-1,64); 11 5674 end 10 5675 else 10 5676 begin 11 5677 if ia(1)=(-1) then nulstil_systællere:= -1 11 5678 else nulstil_systællere:= (ia(1) mod 2400)*100; 11 5679 opdater_tf_systællere; 11 5680 typ:= opref; <* typ lånes til gemmevariabel *> 11 5681 d.opref.retur:= cs_io_komm; 11 5682 signal_ch(cs_io_nulstil,opref,io_optype); 11 5683 <*V*> wait_ch(cs_io_komm,opref,io_optype,-1); 11 5684 <*+4*> if opref <> typ then 11 5685 fejlreaktion(11<*fremmed post*>,opref, 11 5686 <:io_kommando:>,0); 11 5687 <*-4*> 11 5688 setposition(z_io,0,0); 11 5689 if sluttegn<>'nl' then outchar(z_io,'nl'); 11 5690 skriv_kvittering(z_io,opref,-1,3); 11 5691 end; 10 5692 end 9 5693 else 9 5694 begin 10 5695 setposition(z_io,0,0); 10 5696 if sluttegn<>'nl' then outchar(z_io,'nl'); 10 5697 for typ:= 1 step 1 until 5 do ialt(typ):= 0; 10 5698 10 5698 write(z_io, 10 5699 <:område udgående alm.ind nød ind:>, 10 5700 <: ind-ialt total ej forb. optaget:>,"nl",1); 10 5701 for omr := 1 step 1 until max_antal_områder do 10 5702 begin 11 5703 sum:= 0; 11 5704 write(z_io,true,6,string område_navn(omr),":",1); 11 5705 for typ:= 1 step 1 until 3 do 11 5706 begin 12 5707 write(z_io,<< ddddddd>,opkalds_tællere((omr-1)*5+typ)); 12 5708 sum:= sum + opkalds_tællere((omr-1)*5+typ); 12 5709 ialt(typ):= ialt(typ)+opkalds_tællere((omr-1)*5+typ); 12 5710 end; 11 5711 write(z_io,<< ddddddd>, 11 5712 sum-opkalds_tællere((omr-1)*5+1),sum,"sp",2); 11 5713 for typ:= 4 step 1 until 5 do 11 5714 begin 12 5715 write(z_io,<< ddddddd>,opkalds_tællere((omr-1)*5+typ)); 12 5716 ialt(typ):= ialt(typ)+opkalds_tællere((omr-1)*5+typ); 12 5717 end; 11 5718 write(z_io,"nl",1); 11 5719 end; 10 5720 sum:= 0; 10 5721 write(z_io,"nl",1,<:ialt ::>); 10 5722 for typ:= 1 step 1 until 3 do 10 5723 begin 11 5724 write(z_io,<< ddddddd>,ialt(typ)); 11 5725 sum:= sum+ialt(typ); 11 5726 end; 10 5727 write(z_io,<< ddddddd>,sum-ialt(1),sum,"sp",2, 10 5728 ialt(4), ialt(5), "nl",3); 10 5729 10 5729 for typ:= 1 step 1 until 5 do ialt(typ):= 0; 10 5730 write(z_io, 10 5731 <:oper. udgående alm.ind nød ind:>, 10 5732 <: ind-ialt total ej forb. optaget:>,"nl",1); 10 5733 for omr := 1 step 1 until max_antal_operatører do 10 5734 begin 11 5735 sum:= 0; 11 5736 if bpl_navn(omr)=long<::> then 11 5737 write(z_io,"sp",6-write(z_io,<:op:>,<<d>,omr),":",1) 11 5738 else 11 5739 write(z_io,true,6,string bpl_navn(omr),":",1); 11 5740 for typ:= 1 step 1 until 3 do 11 5741 begin 12 5742 write(z_io,<< ddddddd>,operatør_tællere((omr-1)*4+typ)); 12 5743 sum:= sum + operatør_tællere((omr-1)*5+typ); 12 5744 ialt(typ):= ialt(typ)+operatør_tællere((omr-1)*5+typ); 12 5745 end; 11 5746 write(z_io,<< ddddddd>, 11 5747 sum-operatør_tællere((omr-1)*5+1),sum,"sp",2); 11 5748 for typ:= 4 step 1 until 5 do 11 5749 begin 12 5750 write(z_io,<< ddddddd>,operatør_tællere((omr-1)*5+typ)); 12 5751 ialt(typ):= ialt(typ)+operatør_tællere((omr-1)*5+typ); 12 5752 end; 11 5753 write(z_io,"nl",1); 11 5754 end; 10 5755 sum:= 0; 10 5756 write(z_io,"nl",1,<:ialt ::>); 10 5757 for typ:= 1 step 1 until 3 do 10 5758 begin 11 5759 write(z_io,<< ddddddd>,ialt(typ)); 11 5760 sum:= sum+ialt(typ); 11 5761 end; 10 5762 write(z_io,<< ddddddd>,sum-ialt(1),sum,"sp",2, 10 5763 ialt(4),ialt(5),"nl",2); 10 5764 10 5764 typ:= replacechar(1,':'); 10 5765 write(z_io,<:tællere nulstilles :>); 10 5766 if nulstil_systællere=(-1) then 10 5767 write(z_io,<:ikke automatisk:>,"nl",1) 10 5768 else 10 5769 write(z_io,<:automatisk kl. :>,<<zd dd dd>, 10 5770 nulstil_systællere,"nl",1); 10 5771 replacechar(1,'.'); 10 5772 write(z_io,<:sidst nulstillet d. :>,<<zd dd dd>, 10 5773 systime(4,systællere_nulstillet,r)); 10 5774 replacechar(1,':'); 10 5775 write(z_io,<: kl. :>,<<zd dd dd>,r,"nl",1); 10 5776 replacechar(1,typ); 10 5777 write(z_io,"*",1,"nl",1); 10 5778 setposition(z_io,0,0); 10 5779 10 5779 if kode = 76 <* nulstil tællere *> then 10 5780 disable begin 11 5781 for omr:= 1 step 1 until max_antal_områder*5 do 11 5782 opkalds_tællere(omr):= 0; 11 5783 for omr:= 1 step 1 until max_antal_operatører*5 do 11 5784 operatør_tællere(omr):= 0; 11 5785 systime(1,0.0,systællere_nulstillet); 11 5786 opdater_tf_systællere; 11 5787 typ:= replacechar(1,'.'); 11 5788 write(z_io,<:!!! tællere nulstillet d. :>,<<zd dd dd>, 11 5789 systime(4,systællere_nulstillet,r)); 11 5790 replacechar(1,':'); 11 5791 write(z_io,<: kl. :>,<<zd dd dd>,r,"nl",1); 11 5792 replacechar(1,typ); 11 5793 setposition(z_io,0,0); 11 5794 end; 10 5795 end; 9 5796 end; 8 5797 8 5797 begin 9 5798 \f 9 5798 message procedure io_komm side 25 - 940522/cl; 9 5799 9 5799 <* 13 navngiv betjeningsplads *> 9 5800 boolean incl; 9 5801 long field lf; 9 5802 9 5802 lf:=6; 9 5803 operatør:= ia(1); 9 5804 navn:= ia.lf; 9 5805 incl:= false add (ia(4) extract 8); 9 5806 9 5806 if navn=long<::> then 9 5807 begin 10 5808 <* nedlæg navn - check for i brug *> 10 5809 iaf:= operatør*terminal_beskr_længde; 10 5810 if terminal_tab.iaf.terminal_tilstand shift (-21)<>7 then 10 5811 d.opref.resultat:= 48 <*i brug*> 10 5812 else 10 5813 begin 11 5814 for i:= 65 step 1 until top_bpl_gruppe do 11 5815 begin 12 5816 iaf:= i*op_maske_lgd; 12 5817 if læsbit_ia(bpl_def.iaf,operatør) then 12 5818 d.opref.resultat:= 48<*i brug*>; 12 5819 end; 11 5820 end; 10 5821 if d.opref.resultat <= 3 then 10 5822 begin 11 5823 for i:= 1 step 1 until sidste_bus do 11 5824 if bustabel(i) shift (-14) extract 8 = operatør then 11 5825 d.opref.resultat:= 48<*i brug*>; 11 5826 end; 10 5827 end 9 5828 else 9 5829 begin 10 5830 <* opret/omdøb *> 10 5831 i:= find_bpl(navn); 10 5832 if i<>0 and i<>operatør then 10 5833 d.opref.resultat:= 48 <*i brug*>; 10 5834 end; 9 5835 if d.opref.resultat<=3 then 9 5836 begin 10 5837 bpl_navn(operatør):= navn; 10 5838 operatør_auto_include(operatør):= incl; 10 5839 k:= modif_fil(tf_bpl_navne,operatør,ll); 10 5840 if k<>0 then 10 5841 fejlreaktion(7,k,<:betjeningsplads,navngiv:>,0); 10 5842 lf:= 4; 10 5843 fil(ll).lf:= navn add (incl extract 8); 10 5844 setposition(fil(ll),0,0); 10 5845 10 5845 <* skriv bplnavne *> 10 5846 disable begin 11 5847 zone z(128,1,stderror); 11 5848 long array field laf; 11 5849 integer array ia(1:10); 11 5850 11 5850 open(z,4,<:bplnavne:>,0); 11 5851 laf:= 0; 11 5852 outrec6(z,512); 11 5853 for i:= 1 step 1 until 127 do 11 5854 z.laf(i):= bpl_navn(i); 11 5855 close(z,true); 11 5856 monitor(42,z,0,ia); 11 5857 ia(6):= systime(7,0,0.0); 11 5858 monitor(44,z,0,ia); 11 5859 end; 10 5860 d.opref.resultat:= 3;<*udført*> 10 5861 end; 9 5862 9 5862 setposition(z_io,0,0); 9 5863 if sluttegn<>'nl' then outchar(z_io,'nl'); 9 5864 skriv_kvittering(z_io,opref,-1,d.opref.resultat); 9 5865 end; 8 5866 8 5866 begin 9 5867 \f 9 5867 message procedure io_komm side 26 - 940522/cl; 9 5868 9 5868 <* 14 betjeningsplads - gruppe *> 9 5869 integer ant_i_gruppe; 9 5870 long field lf; 9 5871 integer array maske(1:op_maske_lgd//2); 9 5872 9 5872 lf:= 4; ant_i_gruppe:= 0; 9 5873 tofrom(maske,ingen_operatører,op_maske_lgd); 9 5874 navn:= ia.lf; 9 5875 operatør:= find_bpl(navn); 9 5876 for i:= 3 step 1 until indeks do 9 5877 if sætbit_ia(maske,ia(i),1)=0 then 9 5878 ant_i_gruppe:= ant_i_gruppe+1; 9 5879 if ant_i_gruppe=0 then 9 5880 begin 10 5881 <* slet gruppe *> 10 5882 if operatør<=64 then 10 5883 d.opref.resultat:= (if operatør=0 then 46<*navn ukendt*> 10 5884 else 62<*navn ulovligt*>) 10 5885 else 10 5886 begin 11 5887 for i:= 1 step 1 until max_antal_operatører do 11 5888 for j:= 1 step 1 until 3 do 11 5889 if operatør_stop(i,j)=operatør then 11 5890 d.opref.resultat:= 48<*i brug*>; 11 5891 end; 10 5892 navn:= long<::>; 10 5893 end 9 5894 else 9 5895 begin 10 5896 if 1<=operatør and operatør<=64 then 10 5897 d.opref.resultat:= 62<*navn ulovligt*> 10 5898 else 10 5899 if operatør=0 then 10 5900 begin 11 5901 i:=65; 11 5902 while i<=127 and operatør=0 do 11 5903 begin 12 5904 if bpl_navn(i)=long<::> then operatør:=i; 12 5905 i:= i+1; 12 5906 end; 11 5907 if operatør=0 then 11 5908 d.opref.resultat:= 32<*ikke plads*> 11 5909 else if operatør>top_bpl_gruppe then 11 5910 top_bpl_gruppe:= operatør; 11 5911 end; 10 5912 end; 9 5913 if d.opref.resultat<=3 then 9 5914 begin 10 5915 bpl_navn(operatør):= navn; 10 5916 iaf:= operatør*op_maske_lgd; 10 5917 tofrom(bpl_def.iaf,maske,op_maske_lgd); 10 5918 bpl_tilst(operatør,1):= bpl_tilst(operatør,2):= 0; 10 5919 for i:= 1 step 1 until max_antal_operatører do 10 5920 begin 11 5921 if læsbit_ia(maske,i) then 11 5922 begin 12 5923 bpl_tilst(operatør,2):= bpl_tilst(operatør,2)+1; 12 5924 if læsbit_ia(operatør_maske,i) then 12 5925 bpl_tilst(operatør,1):= bpl_tilst(operatør,1)+1; 12 5926 end; 11 5927 end; 10 5928 k:=modif_fil(tf_bplnavne,operatør,ll); 10 5929 if k<>0 then 10 5930 fejlreaktion(7,k,<:btj.plads,gruppenavn:>,0); 10 5931 lf:= 4; 10 5932 fil(ll).lf:= navn; 10 5933 setposition(fil(ll),0,0); 10 5934 iaf:= 0; 10 5935 k:= modif_fil(tf_bpl_def,operatør-64,ll); 10 5936 if k<>0 then 10 5937 fejlreaktion(7,k,<:btj.plads,gruppedef:>,0); 10 5938 for i:= 1 step 1 until op_maske_lgd//2 do 10 5939 fil(ll).iaf(i):= maske(i); 10 5940 fil(ll).iaf(4):= bpl_tilst(operatør,2); 10 5941 setposition(fil(ll),0,0); 10 5942 d.opref.resultat:= 3; 10 5943 end; 9 5944 9 5944 setposition(z_io,0,0); 9 5945 if sluttegn<>'nl' then outchar(z_io,'nl'); 9 5946 skriv_kvittering(z_io,opref,-1,d.opref.resultat); 9 5947 end; 8 5948 8 5948 begin 9 5949 \f 9 5949 message procedure io_komm side 27 - 940522/cl; 9 5950 9 5950 <* 15 vis betjeningspladsdefinitioner *> 9 5951 9 5951 setposition(z_io,0,0); 9 5952 if sluttegn<>'nl' then outchar(z_io,'nl'); 9 5953 write(z_io,"nl",1,<:operatørpladser::>,"nl",1); 9 5954 for i:= 1 step 1 until max_antal_operatører do 9 5955 begin 10 5956 write(z_io,<<dd>,i,<:: :>,true,6,string bpl_navn(i), 10 5957 case operatør_auto_include(i) extract 2 + 1 of( 10 5958 <:(--):>,<:(ÅB):>,<:(??):>,<:(ST):>)); 10 5959 if i mod 4 = 0 then write(z_io,"nl",1) 10 5960 else write(z_io,"sp",5); 10 5961 end; 9 5962 if max_antal_operatører mod 4 <> 0 then write(z_io,"nl",1); 9 5963 write(z_io,"nl",1,<:grupper::>,"nl",1); 9 5964 for i:= 65 step 1 until top_bpl_gruppe do 9 5965 begin 10 5966 ll:=0; iaf:= i*op_maske_lgd; 10 5967 if bpl_navn(i)<>long<::> then 10 5968 begin 11 5969 write(z_io,true,6,string bpl_navn(i),":",1); 11 5970 for j:= 1 step 1 until max_antal_operatører do 11 5971 begin 12 5972 if læsbit_ia(bpl_def.iaf,j) then 12 5973 begin 13 5974 if ll mod 8 = 0 and ll<>0 then 13 5975 write(z_io,"nl",1,"sp",7); 13 5976 write(z_io,"sp",2,string bpl_navn(j)); 13 5977 ll:=ll+1; 13 5978 end; 12 5979 end; 11 5980 write(z_io,"nl",1); 11 5981 end; 10 5982 end; 9 5983 write(z_io,"*",1); 9 5984 end; 8 5985 8 5985 begin 9 5986 \f 9 5986 message procedure io_komm side 28 - 940522/cl; 9 5987 9 5987 <* 16 stopniveau,definer *> 9 5988 9 5988 operatør:= ia(1); 9 5989 iaf:= operatør*terminal_beskr_længde; 9 5990 for i:= 1 step 1 until 3 do 9 5991 operatør_stop(operatør,i):= ia(i+1); 9 5992 if -,læsbit_ia(operatørmaske,operatør) then 9 5993 begin 10 5994 tofrom(opkaldsflag,alle_operatører,op_maske_lgd); 10 5995 signal_bin(bs_mobilopkald); 10 5996 end; 9 5997 k:=modif_fil(tf_stoptabel,operatør,ll); 9 5998 if k<>0 then 9 5999 fejlreaktion(7,k,<:stopniveau,definer:>,0); 9 6000 iaf:= 0; 9 6001 for i:= 0 step 1 until 3 do 9 6002 fil(ll).iaf(i+1):= operatør_stop(operatør,i); 9 6003 setposition(fil(ll),0,0); 9 6004 setposition(z_io,0,0); 9 6005 if sluttegn<>'nl' then outchar(z_io,'nl'); 9 6006 skriv_kvittering(z_io,0,-1,3); 9 6007 end; 8 6008 8 6008 begin 9 6009 \f 9 6009 message procedure io_komm side 29 - 940522/cl; 9 6010 9 6010 <* 17 stopniveauer,vis *> 9 6011 9 6011 setposition(z_io,0,0); 9 6012 if sluttegn<>'nl' then outchar(z_io,'nl'); 9 6013 9 6013 for operatør:= 1 step 1 until max_antal_operatører do 9 6014 begin 10 6015 iaf:=operatør*terminal_beskr_længde; 10 6016 ll:=0; 10 6017 ll:=write(z_io,<<dd>,operatør,<:: :>,true,6, 10 6018 string bpl_navn(operatør),<:(:>, 10 6019 case terminal_tab.iaf.terminal_tilstand shift (-21) 10 6020 + 1 of (<:AKTIV:>,<:AKTIV:>,<:AKTIV:>,<:PAUSE:>, 10 6021 <:EKSKL:>,<:EKSKL:>,<:EKSKL:>,<:EKSKL:>), <:) :>); 10 6022 for i:= 1 step 1 until 3 do 10 6023 ll:= ll+write(z_io,if i=1 then "sp" else "/",1, 10 6024 if operatør_stop(operatør,i)=0 then <:ALLE:> 10 6025 else string bpl_navn(operatør_stop(operatør,i))); 10 6026 if operatør mod 2 = 1 then 10 6027 write(z_io,"sp",40-ll) 10 6028 else 10 6029 write(z_io,"nl",1); 10 6030 end; 9 6031 if max_antal_operatører mod 2 <> 0 then write(z_io,"nl",1); 9 6032 write(z_io,"*",1); 9 6033 end; 8 6034 8 6034 begin 9 6035 \f 9 6035 message procedure io_komm side 30 - 941007/cl; 9 6036 9 6036 <* 18 alarmlængder *> 9 6037 9 6037 setposition(z_io,0,0); 9 6038 if sluttegn<>'nl' then outchar(z_io,'nl'); 9 6039 9 6039 for operatør:= 1 step 1 until max_antal_operatører do 9 6040 begin 10 6041 ll:=0; 10 6042 ll:=write(z_io,<<dd>,operatør,<:: :>,true,6, 10 6043 string bpl_navn(operatør)); 10 6044 iaf:=(operatør-1)*opk_alarm_tab_lgd; 10 6045 if opk_alarm.iaf.alarm_lgd < 0 then 10 6046 ll:= ll+write(z_io,<:uendelig:>) 10 6047 else 10 6048 ll:= ll+write(z_io,<<ddddddd>, 10 6049 opk_alarm.iaf.alarm_lgd,<: sek.:>); 10 6050 10 6050 if operatør mod 2 = 1 then 10 6051 write(z_io,"sp",40-ll) 10 6052 else 10 6053 write(z_io,"nl",1); 10 6054 end; 9 6055 if max_antal_operatører mod 2 <> 0 then write(z_io,"nl",1); 9 6056 write(z_io,"*",1); 9 6057 end; 8 6058 8 6058 begin 9 6059 <* 19 CC *> 9 6060 integer i, c; 9 6061 9 6061 i:= 1; 9 6062 while læstegn(ia,i+0,c)<>0 and 9 6063 i<(op_spool_postlgd-op_spool_text)//2*3 9 6064 do skrivtegn(d.opref.data,i,c); 9 6065 repeat skrivtegn(d.opref.data,i,0) until (i mod 6)=1; 9 6066 9 6066 d.opref.retur:= cs_io_komm; 9 6067 signalch(cs_op,opref,io_optype or gen_optype); 9 6068 <*V*> waitch(cs_io_komm,opref,io_optype,-1); 9 6069 9 6069 setposition(z_io,0,0); 9 6070 if sluttegn<>'nl' then outchar(z_io,'nl'); 9 6071 skriv_kvittering(z_io,opref,-1,d.opref.resultat); 9 6072 end; 8 6073 8 6073 begin 9 6074 <* 20: CQF,I CQF,U CQF,V *> 9 6075 integer kode, res, i, j; 9 6076 integer array field iaf, iaf1; 9 6077 long field navn; 9 6078 9 6078 kode:= d.opref.opkode extract 12; 9 6079 navn:= 6; res:= 0; 9 6080 if kode=90 <*CQF,I*> then 9 6081 begin 10 6082 if søg_omr_bus(ia(1),0,0,0,0,0) < 0 then 10 6083 res:= 10 <*busnr ukendt*> 10 6084 else 10 6085 begin 11 6086 j:= -1; 11 6087 for i:= 1 step 1 until max_cqf do 11 6088 begin 12 6089 iaf:= (i-1)*cqf_lgd; 12 6090 if ia(1) = cqf_tabel.iaf.cqf_bus or 12 6091 ia.navn = cqf_tabel.iaf.cqf_id 12 6092 then res:= 48; <*i brug*> 12 6093 if j<0 and cqf_tabel.iaf.cqf_bus=0 then j:= i; 12 6094 end; 11 6095 if res=0 and j<0 then res:= 32; <*ingen fri plads*> 11 6096 if res=0 then 11 6097 begin 12 6098 iaf:= (j-1)*cqf_lgd; 12 6099 cqf_tabel.iaf.cqf_bus:= ia(1); 12 6100 cqf_tabel.iaf.cqf_fejl:= 0; 12 6101 cqf_tabel.iaf.cqf_id:= ia.navn; 12 6102 cqf_tabel.iaf.cqf_ok_tid:= real <::>; 12 6103 cqf_tabel.iaf.cqf_næste_tid:= d.opref.tid + 15*60.0; 12 6104 res:= 3; 12 6105 end; 11 6106 end; 10 6107 setposition(z_io,0,0); 10 6108 if sluttegn<>'nl' then outchar(z_io,'nl'); 10 6109 skriv_kvittering(z_io,opref,-1,res); 10 6110 end 9 6111 else 9 6112 if kode=91 <*CQF,U*> then 9 6113 begin 10 6114 j:= -1; 10 6115 for i:= 1 step 1 until max_cqf do 10 6116 begin 11 6117 iaf:= (i-1)*cqf_lgd; 11 6118 if ia(1) = cqf_tabel.iaf.cqf_bus then j:= i; 11 6119 end; 10 6120 if j>=0 then 10 6121 begin 11 6122 iaf:= (j-1)*cqf_lgd; 11 6123 for i:= 1 step 1 until cqf_lgd//2 do 11 6124 cqf_tabel.iaf(i):= 0; 11 6125 res:= 3; 11 6126 end 10 6127 else res:= 13; <*bus ikke indsat*> 10 6128 setposition(z_io,0,0); 10 6129 if sluttegn<>'nl' then outchar(z_io,'nl'); 10 6130 skriv_kvittering(z_io,opref,-1,res); 10 6131 end 9 6132 else 9 6133 begin 10 6134 setposition(z_io,0,0); 10 6135 skriv_cqf_tabel(z_io,false); 10 6136 outchar(z_io,'*'); 10 6137 setposition(z_io,0,0); 10 6138 end; 9 6139 9 6139 if kode=90 or kode=91 then 9 6140 begin 10 6141 j:= skrivfil(1033,1,i); 10 6142 if j<>0 then 10 6143 fejlreaktion(6,j,<:CQF-test cqf-tabel:>,1); 10 6144 for k:= 1 step 1 until max_cqf do 10 6145 begin 11 6146 iaf1:= (k-1)*cqf_lgd; 11 6147 iaf := (k-1)*cqf_id; 11 6148 tofrom(fil(i).iaf,cqf_tabel.iaf1,cqf_id); 11 6149 end; 10 6150 op_cqf_tab_ændret:= true; 10 6151 end; 9 6152 end;<*CQF*> 8 6153 8 6153 8 6153 begin 9 6154 \f 9 6154 message procedure io_komm side xx - 940522/cl; 9 6155 9 6155 9 6155 9 6155 <*+3*> fejl_reaktion(3<*programfejl*>,j,<:case 'opkode':>,2); 9 6156 <*-3*> 9 6157 end 8 6158 end;<*case j *> 7 6159 end <* j > 0 *> 6 6160 else 6 6161 begin 7 6162 <*V*> setposition(z_io,0,0); 7 6163 if sluttegn<>'nl' then outchar(z_io,'nl'); 7 6164 skriv_kvittering(z_io,op_ref,-1, 7 6165 45 <* ikke implementeret *>); 7 6166 end; 6 6167 end;<* godkendt *> 5 6168 5 6168 <*V*> setposition(z_io,0,0); 5 6169 signal_bin(bs_zio_adgang); 5 6170 d.op_ref.retur:=cs_att_pulje; 5 6171 disable afslut_kommando(op_ref); 5 6172 end; <* indlæs kommando *> 4 6173 4 6173 begin 5 6174 \f 5 6174 message procedure io_komm side xx+1 - 810428/hko; 5 6175 5 6175 <* 2: aktiver efter stop *> 5 6176 terminal_tab.ref.terminal_tilstand:= 0 shift 21 + 5 6177 terminal_tab.ref.terminal_tilstand extract 21; 5 6178 afslut_operation(op_ref,-1); 5 6179 signal_bin(bs_zio_adgang); 5 6180 end; 4 6181 4 6181 <*+3*> fejl_reaktion(3<*programfejl *>,aktion,<:case aktion:>,2) 4 6182 <*-3*> 4 6183 end; <* case aktion+6 *> 3 6184 3 6184 until false; 3 6185 io_komm_trap: 3 6186 if -,(alarmcause shift (-24) extract 24 = (-2) and 3 6187 alarmcause extract 24 = (-13)) then 3 6188 disable skriv_io_komm(zbillede,1); 3 6189 end io_komm; 2 6190 \f 2 6190 message procedure io_spool side 1 - 810507/hko; 2 6191 2 6191 procedure io_spool; 2 6192 begin 3 6193 integer 3 6194 næste_tomme,nr; 3 6195 integer array field 3 6196 op_ref; 3 6197 3 6197 procedure skriv_io_spool(zud,omfang); 3 6198 value omfang; 3 6199 zone zud; 3 6200 integer omfang; 3 6201 begin 4 6202 disable write(zud,"nl",1,<:+++ io_spool :>); 4 6203 if omfang > 0 then 4 6204 disable begin integer x; 5 6205 trap(slut); 5 6206 write(zud,"nl",1, 5 6207 <: opref: :>,op_ref,"nl",1, 5 6208 <: næstetomme::>,næste_tomme,"nl",1, 5 6209 <: nr :>,nr,"nl",1, 5 6210 <::>); 5 6211 skriv_coru(zud,coru_no(102)); 5 6212 slut: 5 6213 end;<*disable*> 4 6214 end skriv_io_spool; 3 6215 3 6215 trap(io_spool_trap); 3 6216 næste_tomme:= 1; 3 6217 stack_claim((if cm_test then 200 else 146)+24 +48); 3 6218 <*+2*> 3 6219 if testbit0 and overvåget or testbit28 then 3 6220 skriv_io_spool(out,0); 3 6221 <*-2*> 3 6222 \f 3 6222 message procedure io_spool side 2 - 810602/hko; 3 6223 3 6223 repeat 3 6224 3 6224 wait_ch(cs_io_spool, 3 6225 op_ref, 3 6226 true, 3 6227 -1<*timeout*>); 3 6228 3 6228 i:= d.op_ref.opkode; 3 6229 if i = 22 or i = 23 or i = 36 or i = 45 or i = 46 then 3 6230 begin 4 6231 wait(ss_io_spool_tomme); 4 6232 disable modif_fil(io_spoolfil,næste_tomme,nr); 4 6233 næste_tomme:= (næste_tomme mod io_spool_postantal) +1; 4 6234 4 6234 i:= d.op_ref.opsize; 4 6235 <*+4*> if i > io_spool_postlængde*2 -io_spool_post then 4 6236 begin 5 6237 <* fejlreaktion(3,i,<:postlængde,io spool:>,1); *> 5 6238 i:= io_spool_postlængde*2 -io_spool_post; 5 6239 end; 4 6240 <*-4*> 4 6241 fil(nr,1):= real(extend d.op_ref.opsize shift 24); 4 6242 tofrom(fil(nr).io_spool_post,d.op_ref,i); 4 6243 signal(ss_io_spool_fulde); 4 6244 d.op_ref.resultat:= 1; 4 6245 end 3 6246 else 3 6247 begin 4 6248 fejlreaktion(2<*operationskode*>,d.op_ref.opkode, 4 6249 <:io_spool_korutine:>,1); 4 6250 end; 3 6251 3 6251 signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype); 3 6252 3 6252 until false; 3 6253 3 6253 io_spool_trap: 3 6254 3 6254 disable skriv_io_spool(zbillede,1); 3 6255 end io_spool; 2 6256 \f 2 6256 message procedure io_spon side 1 - 810507/hko; 2 6257 2 6257 procedure io_spon; 2 6258 begin 3 6259 integer 3 6260 næste_fulde,nr,i,dato,kl; 3 6261 real t; 3 6262 3 6262 procedure skriv_io_spon(zud,omfang); 3 6263 value omfang; 3 6264 zone zud; 3 6265 integer omfang; 3 6266 begin 4 6267 disable write(zud,"nl",1,<:+++ io_spon :>); 4 6268 if omfang > 0 then 4 6269 disable begin integer x; 5 6270 trap(slut); 5 6271 write(zud,"nl",1, 5 6272 <: næste-fulde::>,næste_fulde,"nl",1, 5 6273 <: nr :>,nr,"nl",1, 5 6274 <::>); 5 6275 skriv_coru(zud,coru_no(103)); 5 6276 slut: 5 6277 end;<*disable*> 4 6278 end skriv_io_spon; 3 6279 3 6279 trap(io_spon_trap); 3 6280 næste_fulde:= 1; 3 6281 stack_claim((if cm_test then 200 else 146) +24 +48); 3 6282 <*+2*> 3 6283 if testbit0 and overvåget or testbit28 then 3 6284 skriv_io_spon(out,0); 3 6285 <*-2*> 3 6286 \f 3 6286 message procedure io_spon side 2 - 810602/hko/cl; 3 6287 3 6287 repeat 3 6288 3 6288 <*V*> wait(ss_io_spool_fulde); 3 6289 <*V*> wait(bs_zio_adgang); 3 6290 3 6290 <*V*> setposition(zio,0,0); 3 6291 3 6291 disable modif_fil(io_spool_fil,næste_fulde,nr); 3 6292 næste_fulde:= (næste_fulde mod io_spool_postantal) +1; 3 6293 3 6293 laf:=data; 3 6294 k:= fil(nr).io_spool_post.opkode; 3 6295 if k = 22 or k = 36 then 3 6296 disable begin 4 6297 write(z_io,"nl",1,if k=22 then <:auto:> else <:spring:>); 4 6298 if k=36 then 4 6299 begin 5 6300 i:= fil(nr).io_spool_post.data(4); 5 6301 j:= i extract 5; 5 6302 if j<>0 then j:=j+'A'-1; 5 6303 i:= i shift (-5) extract 10; 5 6304 write(z_io,"sp",(j=0) extract 1 + 1,<<ddd>,i,false add j,1,".",1, 5 6305 true,4,string(extend fil(nr).io_spool_post.data(5) shift 24)); 5 6306 end; 4 6307 skriv_auto_spring_medd(zio,fil(nr).io_spool_post.data, 4 6308 fil(nr).io_spool_post.tid) 4 6309 end 3 6310 else if k = 23 then 3 6311 disable 3 6312 begin 4 6313 write(zio,"nl",1,<:-<'>'>:>,fil(nr).io_spool_post.laf); 4 6314 dato:= systime(4,fil(nr).io_spool_post.tid,t); 4 6315 kl:= round t; 4 6316 i:= replace_char(1<*space in number*>,'.'); 4 6317 write(z_io,"sp",2,<<zd_dd_dd>,dato,<< zd_dd_dd>,kl); 4 6318 replace_char(1,i); 4 6319 end 3 6320 else if k = 45 or k = 46 then 3 6321 disable begin 4 6322 integer vogn,linie,bogst,løb,t; 4 6323 4 6323 t:=fil(nr).io_spool_post.data(2); 4 6324 outchar(z_io,'nl'); 4 6325 if k = 45 then 4 6326 write(zio,<<zd.dd>,t/100.0,"sp",1); 4 6327 4 6327 write(zio,<:nødopkald fra :>); 4 6328 vogn:= fil(nr).io_spool_post.data(1); 4 6329 i:= vogn shift (-22); 4 6330 if i < 2 then 4 6331 skrivid(zio,vogn,9) 4 6332 else 4 6333 begin 5 6334 fejlreaktion(3<*programfejl*>,vogn,<:vogn.id, spon.medd:>,1); 5 6335 write(zio,<:!!!:>,vogn); 5 6336 end; 4 6337 \f 4 6337 message procedure io_spon side 3 - 810507/hko; 4 6338 4 6338 if fil(nr).io_spool_post.data(3)<>0 then 4 6339 write(z_io," ",1,string område_navn(fil(nr).io_spool_post.data(3))); 4 6340 4 6340 if k = 46 then 4 6341 begin 5 6342 write(zio,<: besvaret:>,<< zd.dd>,t/100.0); 5 6343 end; 4 6344 end <*disable*> 3 6345 else 3 6346 fejlreaktion(2<*operationskode*>,k,<:io_spon_medd:>,1); 3 6347 3 6347 fil(nr,1):= fil(nr,1) add 1; 3 6348 3 6348 <*V*> setposition(zio,0,0); 3 6349 3 6349 signal_bin(bs_zio_adgang); 3 6350 3 6350 signal(ss_io_spool_tomme); 3 6351 3 6351 until false; 3 6352 3 6352 io_spon_trap: 3 6353 skriv_io_spon(zbillede,1); 3 6354 3 6354 end io_spon; 2 6355 \f 2 6355 message procedure io_medd side 1; 2 6356 2 6356 procedure io_medd; 2 6357 begin 3 6358 integer array field opref; 3 6359 integer afs, kl, i; 3 6360 real dato, t; 3 6361 3 6361 3 6361 procedure skriv_io_medd(zud,omfang); 3 6362 value omfang; 3 6363 zone zud; 3 6364 integer omfang; 3 6365 begin 4 6366 disable write(zud,"nl",1,<:+++ io_medd :>); 4 6367 if omfang > 0 then 4 6368 disable begin integer x; 5 6369 trap(slut); 5 6370 write(zud,"nl",1, 5 6371 <: opref: :>,opref,"nl",1, 5 6372 <: afs: :>,afs,"nl",1, 5 6373 <: kl: :>,kl,"nl",1, 5 6374 <: i: :>,i,"nl",1, 5 6375 <: dato: :>,<<zddddd>,dato,"nl",1, 5 6376 <: t: :>,t,"nl",1, 5 6377 <::>); 5 6378 skriv_coru(zud,coru_no(104)); 5 6379 slut: 5 6380 end;<*disable*> 4 6381 end skriv_io_medd; 3 6382 3 6382 trap(io_medd_trap); 3 6383 stack_claim((if cm_test then 200 else 146) +24 +48); 3 6384 <*+2*> 3 6385 if testbit0 and overvåget or testbit28 then 3 6386 skriv_io_medd(out,0); 3 6387 <*-2*> 3 6388 \f 3 6388 message procedure io_medd side 2; 3 6389 3 6389 repeat 3 6390 <*V*> waitch(cs_io_medd,opref,gen_optype,-1); 3 6391 <*V*> wait(bs_zio_adgang); 3 6392 3 6392 afs:= d.opref.data.op_spool_kilde; 3 6393 dato:= systime(4,d.opref.data.op_spool_tid,t); 3 6394 kl:= round t; 3 6395 write(z_io,"nl",1,<:! fra op:>,<<d>,afs,"sp",1, 3 6396 if afs=0 then <:SYSOP:> else string bpl_navn(afs)); 3 6397 i:= replacechar(1,'.'); 3 6398 disable write(z_io,"sp",1,<<zd_dd_dd>,kl,"nl",1); 3 6399 replacechar(1,i); 3 6400 write(z_io,d.opref.data.op_spool_text); 3 6401 setposition(z_io,0,0); 3 6402 3 6402 signalbin(bs_zio_adgang); 3 6403 signalch((if afs=0 then d.opref.retur else cs_op),opref,d.opref.optype); 3 6404 until false; 3 6405 3 6405 io_medd_trap: 3 6406 skriv_io_medd(zbillede,1); 3 6407 3 6407 end io_medd; 2 6408 2 6408 procedure io_nulstil_tællere; 2 6409 begin 3 6410 real nu, dato, kl, forr, næste, et_døgn, r; 3 6411 integer array field opref; 3 6412 integer ventetid, omr, typ, sum; 3 6413 integer array ialt(1:5); 3 6414 3 6414 procedure skriv_io_null(zud,omfang); 3 6415 value omfang; 3 6416 zone zud; 3 6417 integer omfang; 3 6418 begin 4 6419 disable write(zud,"nl",1,<:+++ io_nulstil_tællere :>); 4 6420 if omfang > 0 then 4 6421 disable begin real t; real array field raf; 5 6422 raf:=0; 5 6423 trap(slut); 5 6424 write(zud,"nl",1, 5 6425 <: opref: :>,opref,"nl",1, 5 6426 <: ventetid: :>,ventetid,"nl",1, 5 6427 <: omr: :>,omr,"nl",1, 5 6428 <: typ: :>,typ,"nl",1, 5 6429 <: sum: :>,sum,"nl",1); 5 6430 write(zud, 5 6431 <: nu: :>,<< zddddd>,systime(4,nu,t),t,"nl",1); 5 6432 write(zud, 5 6433 <: forr: :>,<< zddddd>,systime(4,forr,t),t,"nl",1); 5 6434 write(zud, 5 6435 <: næste: :>,<< zddddd>,systime(4,næste,t),t,"nl",1); 5 6436 write(zud, 5 6437 <: r: :>,<< zddddd>,systime(4,r,t),t,"nl",1, 5 6438 <: dato: :>,dato,"nl",1, 5 6439 <: kl: :>,kl,"nl",1, 5 6440 <: et-døgn: :>,<< dddddd>,et_døgn,"nl",1, 5 6441 <::>); 5 6442 write(zud,"nl",1,<:ialt: :>); 5 6443 skriv_hele(zud,ialt.raf,10,2); 5 6444 skriv_coru(zud,coru_no(105)); 5 6445 slut: 5 6446 end;<*disable*> 4 6447 end skriv_io_null; 3 6448 3 6448 trap(io_null_trap); 3 6449 et_døgn:= 24*60*60.0; 3 6450 stack_claim(500); 3 6451 <*+2*> 3 6452 if testbit0 and overvåget or testbit28 then 3 6453 skriv_io_null(out,0); 3 6454 <*-2*> 3 6455 pass; 3 6456 3 6456 systime(1,0.0,nu); 3 6457 dato:= systime(4,nu,kl); 3 6458 if nulstil_systællere >= 0 then 3 6459 begin 4 6460 if kl>nulstil_systællere then næste:= systid(dato,nulstil_systællere) 4 6461 + et_døgn 4 6462 else næste:= systid(dato,nulstil_systællere); 4 6463 forr:= næste - et_døgn; 4 6464 if (forr - systællere_nulstillet) > et_døgn then 4 6465 næste:= nu; 4 6466 end; 3 6467 3 6467 repeat 3 6468 ventetid:= (if nulstil_systællere < 0 then (-1) else (næste - nu)); 3 6469 <*V*> waitch(cs_io_nulstil,opref,io_optype,ventetid); 3 6470 3 6470 if opref <= 0 then 3 6471 begin 4 6472 <* nulstil opkaldstællere *> 4 6473 wait(bs_zio_adgang); 4 6474 setposition(z_io,0,0); 4 6475 4 6475 for typ:= 1 step 1 until 5 do ialt(typ):= 0; 4 6476 4 6476 write(z_io,"nl",1,<:!TÆ,N (automatisk):>,"nl",2, 4 6477 <:område udgående alm.ind nød ind:>, 4 6478 <: ind-ialt total ej forb. optaget:>,"nl",1); 4 6479 for omr := 1 step 1 until max_antal_områder do 4 6480 begin 5 6481 sum:= 0; 5 6482 write(z_io,true,6,string område_navn(omr),":",1); 5 6483 for typ:= 1 step 1 until 3 do 5 6484 begin 6 6485 write(z_io,<< ddddddd>,opkalds_tællere((omr-1)*5+typ)); 6 6486 sum:= sum + opkalds_tællere((omr-1)*5+typ); 6 6487 ialt(typ):= ialt(typ)+opkalds_tællere((omr-1)*5+typ); 6 6488 end; 5 6489 write(z_io,<< ddddddd>, 5 6490 sum-opkalds_tællere((omr-1)*5+1),sum,"sp",2); 5 6491 for typ:= 4 step 1 until 5 do 5 6492 begin 6 6493 write(z_io,<< ddddddd>,opkalds_tællere((omr-1)*5+typ)); 6 6494 ialt(typ):= ialt(typ)+opkalds_tællere((omr-1)*5+typ); 6 6495 end; 5 6496 write(z_io,"nl",1); 5 6497 end; 4 6498 sum:= 0; 4 6499 write(z_io,"nl",1,<:ialt ::>); 4 6500 for typ:= 1 step 1 until 3 do 4 6501 begin 5 6502 write(z_io,<< ddddddd>,ialt(typ)); 5 6503 sum:= sum+ialt(typ); 5 6504 end; 4 6505 write(z_io,<< ddddddd>,sum-ialt(1),sum,"sp",2, 4 6506 ialt(4), ialt(5), "nl",3); 4 6507 4 6507 for typ:= 1 step 1 until 5 do ialt(typ):= 0; 4 6508 write(z_io,<:oper. udgående alm.ind nød ind:>, 4 6509 <: ind-ialt total ej forb. optaget:>,"nl",1); 4 6510 for omr := 1 step 1 until max_antal_operatører do 4 6511 begin 5 6512 sum:= 0; 5 6513 if bpl_navn(omr)=long<::> then 5 6514 write(z_io,"sp",6-write(z_io,<:op:>,<<d>,omr),":",1) 5 6515 else 5 6516 write(z_io,true,6,string bpl_navn(omr),":",1); 5 6517 for typ:= 1 step 1 until 3 do 5 6518 begin 6 6519 write(z_io,<< ddddddd>,operatør_tællere((omr-1)*5+typ)); 6 6520 sum:= sum + operatør_tællere((omr-1)*5+typ); 6 6521 ialt(typ):= ialt(typ)+operatør_tællere((omr-1)*5+typ); 6 6522 end; 5 6523 write(z_io,<< ddddddd>, 5 6524 sum-operatør_tællere((omr-1)*5+1),sum,"sp",2); 5 6525 for typ:= 4 step 1 until 5 do 5 6526 begin 6 6527 write(z_io,<< ddddddd>,operatør_tællere((omr-1)*5+typ)); 6 6528 ialt(typ):= ialt(typ)+operatør_tællere((omr-1)*5+typ); 6 6529 end; 5 6530 write(z_io,"nl",1); 5 6531 end; 4 6532 sum:= 0; 4 6533 write(z_io,"nl",1,<:ialt ::>); 4 6534 for typ:= 1 step 1 until 3 do 4 6535 begin 5 6536 write(z_io,<< ddddddd>,ialt(typ)); 5 6537 sum:= sum+ialt(typ); 5 6538 end; 4 6539 write(z_io,<< ddddddd>,sum-ialt(1),sum,"sp",2, 4 6540 ialt(4),ialt(5),"nl",2); 4 6541 4 6541 typ:= replacechar(1,':'); 4 6542 write(z_io,<:tællere nulstilles :>); 4 6543 if nulstil_systællere=(-1) then 4 6544 write(z_io,<:ikke automatisk:>,"nl",1) 4 6545 else 4 6546 write(z_io,<:automatisk kl. :>,<<zd dd dd>, 4 6547 nulstil_systællere,"nl",1); 4 6548 replacechar(1,'.'); 4 6549 write(z_io,<:sidst nulstillet d. :>,<<zd dd dd>, 4 6550 systime(4,systællere_nulstillet,r)); 4 6551 replacechar(1,':'); 4 6552 write(z_io,<: kl. :>,<<zd dd dd>,r,"nl",1); 4 6553 replacechar(1,typ); 4 6554 write(z_io,"*",1,"nl",1); 4 6555 setposition(z_io,0,0); 4 6556 signal_bin(bs_zio_adgang); 4 6557 4 6557 for omr:= 1 step 1 until max_antal_områder*5 do 4 6558 opkalds_tællere(omr):= 0; 4 6559 for omr:= 1 step 1 until max_antal_operatører*5 do 4 6560 operatør_tællere(omr):= 0; 4 6561 systællere_nulstillet:= næste; 4 6562 opdater_tf_systællere; 4 6563 end 3 6564 else 3 6565 signalch(d.opref.retur,opref,d.opref.optype); 3 6566 3 6566 systime(1,0.0,nu); 3 6567 dato:= systime(4,nu,kl); 3 6568 if nulstil_systællere >= 0 then 3 6569 begin 4 6570 if kl>nulstil_systællere then næste:= systid(dato,nulstil_systællere) 4 6571 + et_døgn 4 6572 else næste:= systid(dato,nulstil_systællere); 4 6573 forr:= næste - et_døgn; 4 6574 end; 3 6575 until false; 3 6576 3 6576 io_null_trap: 3 6577 skriv_io_null(zbillede,1); 3 6578 end io_nulstil_tællere; 2 6579 2 6579 \f 2 6579 message operatør_erklæringer side 1 - 810602/hko; 2 6580 integer 2 6581 cs_op,cs_op_retur,cs_talevejsswitch,cs_tvswitch_adgang,cs_tv_switch_adm, 2 6582 cs_tvswitch_input, cs_op_iomedd, bs_opk_alarm, cs_opk_alarm, cs_cqf, 2 6583 cs_op_spool, cs_op_medd, ss_op_spool_tomme, ss_op_spool_fulde, 2 6584 cs_opk_alarm_ur, cs_opk_alarm_ur_ret, sidste_tv_brugt; 2 6585 integer array 2 6586 cqf_tabel(1:max_cqf*cqf_lgd//2), 2 6587 operatørmaske(1:op_maske_lgd//2), 2 6588 op_talevej(0:max_antal_operatører), 2 6589 tv_operatør(0:max_antal_taleveje), 2 6590 opk_alarm(1:max_antal_operatører*(opk_alarm_tab_lgd//2)), 2 6591 op_spool_buf(1:op_spool_postantal*(op_spool_postlgd//2)), 2 6592 ant_i_opkø, 2 6593 cs_operatør, 2 6594 cs_op_fil(1:max_antal_operatører); 2 6595 boolean 2 6596 op_cqf_tab_ændret; 2 6597 integer field 2 6598 op_spool_kilde; 2 6599 real field 2 6600 op_spool_tid; 2 6601 long array field 2 6602 op_spool_text; 2 6603 zone z_tv_in, z_tv_out(128,1,tvswitch_fejl); 2 6604 zone array z_op(max_antal_operatører,320,1,op_fejl); 2 6605 \f 2 6605 message procedure op_fejl side 1 - 830310/hko; 2 6606 2 6606 procedure op_fejl(z,s,b); 2 6607 integer s,b; 2 6608 zone z; 2 6609 begin 3 6610 disable begin 4 6611 integer array iz(1:20); 4 6612 integer i,j,k,n; 4 6613 integer array field iaf,iaf1,msk; 4 6614 boolean input; 4 6615 real array field laf,laf1; 4 6616 4 6616 getzone6(z,iz); 4 6617 iaf:=laf:=2; 4 6618 input:= iz(13) = 1; 4 6619 for laf1:= 0 step 8 until (max_antal_operatører-1)*8 do 4 6620 if iz.laf(1)=terminal_navn.laf1(1) and 4 6621 iz.laf(2)=terminal_navn.laf1(2) then j:= laf1//8 + 1; 4 6622 4 6622 <*+2*> if testbit31 then 4 6623 <**> begin 5 6624 <**> write(out,"nl",1,<:blockprocedure: opfejl, operatørnr::>,j,"nl",1, 5 6625 <**> <:s=:>); outintbits(out,s); 5 6626 <**> write(out,"nl",1,<:b=:>,b,"sp",1,if input then <:input:> 5 6627 <**> else <:output:>,"nl",1); 5 6628 <**> setposition(out,0,0); 5 6629 <**> end; 4 6630 <*-2*> 4 6631 iaf:=j*terminal_beskr_længde; 4 6632 k:=1; 4 6633 4 6633 i:= terminal_tab.iaf.terminal_tilstand; 4 6634 if i shift(-21) < 4 and (s <> (1 shift 21 +2) <*or -,input*>) then 4 6635 fejlreaktion(17<*ydre enhed status*>,s,string iz.laf(increase(k)), 4 6636 1 shift 12 <*binært*> +1 <*fortsæt*>); 4 6637 if s <> (1 shift 21 +2) then 4 6638 begin 5 6639 terminal_tab.iaf.terminal_tilstand:= 1 shift 23 5 6640 + terminal_tab.iaf.terminal_tilstand extract 23; 5 6641 tofrom(opkaldsflag,alle_operatører,op_maske_lgd); 5 6642 sæt_bit_ia(opkaldsflag,j,0); 5 6643 if sæt_bit_ia(operatørmaske,j,0)=1 then 5 6644 for k:= j, 65 step 1 until top_bpl_gruppe do 5 6645 begin 6 6646 msk:= k*op_maske_lgd; 6 6647 if læsbit_ia(bpl_def.msk,j) then 6 6648 <**> begin 7 6649 n:= 0; 7 6650 for i:= 1 step 1 until max_antal_operatører do 7 6651 if læsbit_ia(bpl_def.msk,i) then 7 6652 begin 8 6653 iaf1:= i*terminal_beskr_længde; 8 6654 if terminal_tab.iaf1.terminal_tilstand shift (-21) < 3 then 8 6655 n:= n+1; 8 6656 end; 7 6657 bpl_tilst(j,1):= n; 7 6658 end; 6 6659 <**> <* 6 6660 bpl_tilst(j,1):= bpl_tilst(j,1)-1; 6 6661 *> end; 5 6662 signal_bin(bs_mobil_opkald); 5 6663 end; 4 6664 4 6664 if input or -,input then 4 6665 begin 5 6666 z(1):=real <:<'?'><'?'><'em'>:>; 5 6667 b:=2; 5 6668 end; 4 6669 end; <*disable*> 3 6670 end op_fejl; 2 6671 \f 2 6671 message procedure tvswitch_fejl side 1 - 940426/cl; 2 6672 2 6672 procedure tvswitch_fejl(z,s,b); 2 6673 integer s,b; 2 6674 zone z; 2 6675 begin 3 6676 disable begin 4 6677 integer array iz(1:20); 4 6678 integer i,j,k; 4 6679 integer array field iaf; 4 6680 boolean input; 4 6681 real array field raf; 4 6682 4 6682 getzone6(z,iz); 4 6683 iaf:=raf:=2; 4 6684 input:= iz(13) = 1; 4 6685 <*+2*> if testbit31 then 4 6686 <**> begin 5 6687 <**> write(out,"nl",1,<:blockprocedure: tvswitch:>,"nl",1, 5 6688 <**> <:s=:>); outintbits(out,s); 5 6689 <**> write(out,"nl",1,<:b=:>,b,"sp",1,if input then <:input:> 5 6690 <**> else <:output:>,"nl",1); 5 6691 <**> skrivhele(out,z,b,5); 5 6692 <**> setposition(out,0,0); 5 6693 <**> end; 4 6694 <*-2*> 4 6695 k:=1; 4 6696 if s <> (1 shift 21 +2) then 4 6697 fejlreaktion(17<*ydre enhed status*>,s,string iz.raf(increase(k)), 4 6698 1 shift 12 <*binært*> +1 <*fortsæt*>); 4 6699 4 6699 if input or -,input then 4 6700 begin 5 6701 z(1):=real <:<'em'>:>; 5 6702 b:=2; 5 6703 end; 4 6704 end; <*disable*> 3 6705 if testbit22 and (s <> (1 shift 21 +2)) then delay(60); 3 6706 end tvswitch_fejl; 2 6707 2 6707 procedure skriv_talevejs_tab(z); 2 6708 zone z; 2 6709 begin 3 6710 write(z,"nl",2,<:talevejsswitch::>); 3 6711 write(z,"nl",1,<: operatører::>,"nl",1); 3 6712 for i:= 1 step 1 until max_antal_operatører do 3 6713 begin 4 6714 write(z,<< dd>,i,":",1,op_talevej(i)); 4 6715 if i mod 8=0 then outchar(z,'nl'); 4 6716 end; 3 6717 write(z,"nl",1,<: taleveje::>,"nl",1); 3 6718 for i:= 1 step 1 until max_antal_taleveje do 3 6719 begin 4 6720 write(z,<< dd>,i,":",1,tv_operatør(i)); 4 6721 if i mod 8=0 then outchar(z,'nl'); 4 6722 end; 3 6723 write(z,"nl",3); 3 6724 end; 2 6725 \f 2 6725 message procedure skriv_opk_alarm_tab side 1; 2 6726 2 6726 procedure skriv_opk_alarm_tab(z); 2 6727 zone z; 2 6728 begin 3 6729 integer nr; 3 6730 integer array field tab; 3 6731 real t; 3 6732 3 6732 write(z,"nl",2,<:opkaldsalarmtabel::>,"nl",1, 3 6733 <:operatør kmdo tilst gl.tilst længde start:>,"nl",1); 3 6734 for nr:=1 step 1 until max_antal_operatører do 3 6735 begin 4 6736 tab:= (nr-1)*opk_alarm_tab_lgd; 4 6737 write(z,<< dd >,nr,true,6,string bpl_navn(nr),<:: :>, 4 6738 case opk_alarm.tab.alarm_kmdo+1 of ("-","B","C","F"),1,"sp",5, 4 6739 case opk_alarm.tab.alarm_tilst+1 of ("-","B","C","?"),1,"sp",8, 4 6740 case opk_alarm.tab.alarm_gtilst+1 of ("-","B","C","?"),1,"sp",2, 4 6741 <<-dddd>,opk_alarm.tab.alarm_lgd,"sp",1, 4 6742 << zddddd>,systime(4,opk_alarm.tab.alarm_start,t),t, 4 6743 "nl",1); 4 6744 end; 3 6745 end; 2 6746 \f 2 6746 message procedure skriv_op_spool_buf side 1; 2 6747 2 6747 procedure skriv_op_spool_buf(z); 2 6748 zone z; 2 6749 begin 3 6750 integer array field ref; 3 6751 integer nr, kilde; 3 6752 real dato, kl; 3 6753 3 6753 write(z,"nl",2,<:op<'_'>spool<'_'>buffer::>,"nl",1); 3 6754 for nr:= 1 step 1 until op_spool_postantal do 3 6755 begin 4 6756 write(z,"nl",1,<:nr.::>,<< dd>,nr); 4 6757 ref:= (nr-1)*op_spool_postlgd; 4 6758 if op_spool_buf.ref.op_spool_tid <> real<::> then 4 6759 begin 5 6760 kilde:= op_spool_buf.ref.op_spool_kilde; 5 6761 dato:= systime(4,op_spool_buf.ref.op_spool_tid,kl); 5 6762 write(z,<: fra op:>,<<d>,kilde,"sp",1, 5 6763 if kilde=0 then <:SYSOP:> else string bplnavn(kilde), 5 6764 "sp",1,<<zddddd.dddddd>,dato+kl/1000000,"nl",1, 5 6765 op_spool_buf.ref.op_spool_text); 5 6766 end; 4 6767 outchar(z,'nl'); 4 6768 end; 3 6769 end; 2 6770 2 6770 procedure skriv_cqf_tabel(z,lang); 2 6771 value lang; 2 6772 zone z; 2 6773 boolean lang; 2 6774 begin 3 6775 integer array field ref; 3 6776 integer i,ant; 3 6777 real dato, kl; 3 6778 3 6778 ant:= 0; 3 6779 write(z,"nl",1,<:CQF testbus-tabel::>,"nl",2,( 3 6780 if -,lang then 3 6781 <: tnr. navn fejl sidste_ok tnr. navn fejl sidste_ok:> 3 6782 <* 9900 XXxxx 1 yymmdd.ttmmss 9900 XXxxx 1 yymmdd.ttmmss*> 3 6783 else 3 6784 <:nr: tnr. navn fejl sidste_ok næste_test:>),"nl",1); 3 6785 <*01: 9900 XXxxx 1 yymmdd.ttmmss yymmdd.hhttmm*> 3 6786 for i:= 1 step 1 until max_cqf do 3 6787 begin 4 6788 ref:= (i-1)*cqf_lgd; 4 6789 if cqf_tabel.ref.cqf_bus<>0 or lang then 4 6790 begin 5 6791 ant:= ant+1; 5 6792 if lang then 5 6793 write(z,<<dd>,i,":",1); 5 6794 write(z,<< dddd>,cqf_tabel.ref.cqf_bus,"sp",1,true,6, 5 6795 string cqf_tabel.ref.cqf_id,<<dddd>,cqf_tabel.ref.cqf_fejl); 5 6796 if cqf_tabel.ref.cqf_ok_tid<>real<::> then 5 6797 begin 6 6798 dato:= systime(4,cqf_tabel.ref.cqf_ok_tid,kl); 6 6799 write(z,<< zddddd.dddddd>,dato+kl/1000000); 6 6800 end 5 6801 else 5 6802 write(z,"sp",14,"?",1); 5 6803 if lang then 5 6804 begin 6 6805 if cqf_tabel.ref.cqf_næste_tid<>real<::> then 6 6806 begin 7 6807 dato:= systime(4,cqf_tabel.ref.cqf_næste_tid,kl); 7 6808 write(z,<< zddddd.dddddd>,dato+kl/1000000); 7 6809 end 6 6810 else 6 6811 write(z,"sp",14,"?",1); 6 6812 end 5 6813 else 5 6814 write(z,"sp",2); 5 6815 if lang or (ant mod 2)=0 then outchar(z,'nl'); 5 6816 end; 4 6817 end; 3 6818 if -,lang and (ant mod 2)=1 then outchar(z,'nl'); 3 6819 end; 2 6820 2 6820 procedure sorter_cqftab(l,u); 2 6821 value l,u; 2 6822 integer l,u; 2 6823 begin 3 6824 integer array field ii,jj; 3 6825 integer array ww,xx(1:(cqf_lgd+1)//2); 3 6826 3 6826 ii:= ((l+u)//2 - 1)*cqf_lgd; 3 6827 tofrom(xx,cqf_tabel.ii,cqf_lgd); 3 6828 ii:= (l-1)*cqf_lgd; jj:= (u-1)*cqf_lgd; 3 6829 repeat 3 6830 while (cqf_tabel.ii(1) < xx(1)) do ii:= ii+cqf_lgd; 3 6831 while (xx(1) < cqf_tabel.jj(1)) do jj:= jj-cqf_lgd; 3 6832 if ii <= jj then 3 6833 begin 4 6834 tofrom(ww,cqf_tabel.ii,cqf_lgd); 4 6835 tofrom(cqf_tabel.ii,cqf_tabel.jj,cqf_lgd); 4 6836 tofrom(cqf_tabel.jj,ww,cqf_lgd); 4 6837 ii:= ii+cqf_lgd; 4 6838 jj:= jj-cqf_lgd; 4 6839 end; 3 6840 until ii>jj; 3 6841 if l < jj//cqf_lgd+1 then sorter_cqftab(l,jj//cqf_lgd+1); 3 6842 if ii//cqf_lgd+1 < u then sorter_cqftab(ii//cqf_lgd+1,u); 3 6843 end; 2 6844 \f 2 6844 message procedure ht_symbol side 1 - 851001/cl; 2 6845 2 6845 procedure ht_symbol(z); 2 6846 zone z; 2 6847 write(z,"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>,<: 2 6848 2 6848 2 6848 2 6848 2 6848 @@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 2 6848 @@ @@ @@ 2 6848 @@ @@ @@ 2 6848 @@ @@ @@ 2 6848 @@ @@@@@@@@@@@@@ @@@@@@@@@@@@@ 2 6848 @@ @@ 2 6848 @@ @@ 2 6848 @@ @@ 2 6848 @@ @@@@@@@@@@@@@ @@ 2 6848 @@ @@ @@ @@ 2 6848 @@ @@ @@ @@ 2 6848 @@ @@ @@ @@ 2 6848 @@@@@@@@@@@@@ @@@@@@@@@@@@@ 2 6848 :>,"esc" add 128,1,<:Æ24;1H:>); 2 6849 \f 2 6849 message procedure definer_taster side 1 - 891214,cl; 2 6850 2 6850 procedure definer_taster(nr); 2 6851 value nr; 2 6852 integer nr; 2 6853 begin 3 6854 3 6854 setposition(z_op(nr),0,0); 3 6855 write(z_op(nr), 3 6856 "esc" add 128,1, <:P1;2;0ø58/1B4E450D:>, 3 6857 "esc" add 128,1, <:Ø:>, <* f1 = <esc>NE<cr> *> 3 6858 "esc" add 128,1, <:P1;2;0ø59/1B4F500D:>, 3 6859 "esc" add 128,1, <:Ø:>, <* f2 = <esc>OP<cr> *> 3 6860 "esc" add 128,1, <:P1;2;0ø5A/1B4F502C560D:>, 3 6861 "esc" add 128,1, <:Ø:>, <* f3 = <esc>OP,V<cr> *> 3 6862 "esc" add 128,1, <:P1;2;0ø5B/1B4F502C5420:>, 3 6863 "esc" add 128,1, <:Ø:>, <* f4 = <esc>OP,T<sp> *> 3 6864 "esc" add 128,1, <:P1;2;0ø5C/1B4F502C4120:>, 3 6865 "esc" add 128,1, <:Ø:>, <* f5 = <esc>OP,A<sp> *> 3 6866 "esc" add 128,1, <:P1;2;1ø5C/1B4F502C4120:>, 3 6867 "esc" add 128,1, <:Ø:>, <* s-f5 = <esc>OP,A<sp> *> 3 6868 "esc" add 128,1, <:P1;2;0ø5D/1B4D452C4120:>, 3 6869 "esc" add 128,1, <:Ø:>, <* f6 = <esc>ME,A<sp> *> 3 6870 "esc" add 128,1, <:P1;2;1ø5D/1B4D452C4120:>, 3 6871 "esc" add 128,1, <:Ø:>, <* s-f6 = <esc>ME,A<sp> *> 3 6872 "esc" add 128,1, <:P1;2;0ø5E/1B4F5020:>, 3 6873 "esc" add 128,1, <:Ø:>, <* f7 = <esc>OP<sp> *> 3 6874 "esc" add 128,1, <:P1;2;0ø5F/1B56450D:>, 3 6875 "esc" add 128,1, <:Ø:>, <* f8 = <esc>VE<cr> *> 3 6876 "esc" add 128,1, <:P1;2;0ø60/1B4D4F20:>, 3 6877 "esc" add 128,1, <:Ø:>, <* f9 = <esc>MO<sp> *> 3 6878 "esc" add 128,1, <:P1;2;1ø60/1B520D:>, 3 6879 "esc" add 128,1, <:Ø:>, <* s-f9 = <esc>R<cr> *> 3 6880 "esc" add 128,1, <:P1;2;0ø61/1B53540D:>, 3 6881 "esc" add 128,1, <:Ø:>, <* f10 = <esc>ST<cr> *> 3 6882 "esc" add 128,1, <:P1;2;0ø62/1B474520:>, 3 6883 "esc" add 128,1, <:Ø:>, <* f11 = <esc>GE<sp> *> 3 6884 "esc" add 128,1, <:P1;2;1ø62/1B47452C4720:>, 3 6885 "esc" add 128,1, <:Ø:>, <* s-f11 = <esc>GE,G<sp> *> 3 6886 "esc" add 128,1, <:P1;2;0ø63/1B47452C560D:>, 3 6887 "esc" add 128,1, <:Ø:>, <* f12 = <esc>GE,V<cr> *> 3 6888 "esc" add 128,1, <:P1;2;1ø63/1B47452C540D:>, 3 6889 "esc" add 128,1, <:Ø:>, <* s-f12 = <esc>GE,T<sp> *> 3 6890 "esc" add 128,1, <:P1;2;0ø7B/1B564F2C4920:>, 3 6891 "esc" add 128,1, <:Ø:>, <* Ins = <esc>VO,I<sp> *> 3 6892 "esc" add 128,1, <:P1;2;0ø79/1B564F2C5520:>, 3 6893 "esc" add 128,1, <:Ø:>, <* Del = <esc>VO,U<sp> *> 3 6894 "esc" add 128,1, <:P1;2;0ø7F/1B564F2C4620:>, 3 6895 "esc" add 128,1, <:Ø:>, <* Home = <esc>VO,F<sp> *> 3 6896 "esc" add 128,1, <:P1;2;0ø7A/1B564F2C5220:>, 3 6897 "esc" add 128,1, <:Ø:>, <* End = <esc>VO,R<sp> *> 3 6898 "esc" add 128,1, <:P1;2;0ø6F/1B564F2C4C20:>, 3 6899 "esc" add 128,1, <:Ø:>, <* PgUp = <esc>VO,L<sp> *> 3 6900 "esc" add 128,1, <:P1;2;0ø7E/1B564F2C4220:>, 3 6901 "esc" add 128,1, <:Ø:>, <* PgDn = <esc>VO,B<sp> *> 3 6902 "esc" add 128,1, <:P1;2;0ø0E/082008:>, 3 6903 "esc" add 128,1, <:Ø:>, <* Back = <bs><sp><bs> *> 3 6904 <::>); 3 6905 end; 2 6906 \f 2 6906 message procedure skriv_terminal_tab side 1 - 820301/hko; 2 6907 2 6907 procedure skriv_terminal_tab(z); 2 6908 zone z; 2 6909 begin 3 6910 integer array field ref; 3 6911 integer t1,i,j,id,k; 3 6912 3 6912 write(z,"ff",1,<: 3 6913 ******* terminalbeskrivelser ******** 3 6914 3 6914 # a k l p m m n o 3 6915 1 l a y a o o ø p 3 6916 nr tilst - vnt R 0 l t t s n b d t type ident id i kø:>); 3 6917 <* 3 6918 01 15 .... .... X X X X X X X X X X MEDD 9999.abc 888B/77 3 6919 *> 3 6920 for i:=1 step 1 until max_antal_operatører do 3 6921 begin 4 6922 ref:=i*terminal_beskr_længde; 4 6923 t1:=terminal_tab.ref(1); 4 6924 id:=terminal_tab.ref(2); 4 6925 k:=terminal_tab.ref(3); 4 6926 write(z,"nl",1,"sp",4,<<dd>,i,<< dddd>,t1 shift(-21), 4 6927 t1 shift(-16) extract 5,t1 shift(-12) extract 4, 4 6928 "sp",1); 4 6929 for j:=11 step -1 until 2 do 4 6930 write(z,if læs_bit_i(t1,j) then "X" else "sp",1,"sp",1); 4 6931 write(z,case t1 extract 2 +1 of (<:- :>,<:OPK :>,<:MEDD:>,<:GNM :>), 4 6932 "sp",1); 4 6933 skriv_id(z,id,9); 4 6934 skriv_id(z,k,9); 4 6935 end; 3 6936 write(z,"nl",2,<:samtaleflag::>,"nl",1); 3 6937 outintbits_ia(z,samtaleflag,1,op_maske_lgd//2); 3 6938 write(z,"nl",1); 3 6939 end skriv_terminal_tab; 2 6940 \f 2 6940 message procedure h_operatør side 1 - 810520/hko; 2 6941 2 6941 <* hovedmodulkorutine for operatørterminaler *> 2 6942 procedure h_operatør; 2 6943 begin 3 6944 integer array field op_ref; 3 6945 integer k,nr,ant,ref,dest_sem; 3 6946 procedure skriv_hoperatør(zud,omfang); 3 6947 value omfang; 3 6948 zone zud; 3 6949 integer omfang; 3 6950 begin 4 6951 4 6951 write(zud,"nl",1,<:+++ hovedmodul operatør :>); 4 6952 if omfang>0 then 4 6953 disable begin integer x; 5 6954 trap(slut); 5 6955 write(zud,"nl",1, 5 6956 <: op_ref: :>,op_ref,"nl",1, 5 6957 <: nr: :>,nr,"nl",1, 5 6958 <: ant: :>,ant,"nl",1, 5 6959 <: ref: :>,ref,"nl",1, 5 6960 <: k: :>,k,"nl",1, 5 6961 <: dest_sem: :>,dest_sem,"nl",1, 5 6962 <::>); 5 6963 skriv_coru(zud,coru_no(200)); 5 6964 slut: 5 6965 end; 4 6966 end skriv_hoperatør; 3 6967 3 6967 trap(hop_trap); 3 6968 stack_claim(if cm_test then 198 else 146); 3 6969 3 6969 <*+2*> 3 6970 if testbit8 and overvåget or testbit28 then 3 6971 skriv_hoperatør(out,0); 3 6972 <*-2*> 3 6973 \f 3 6973 message procedure h_operatør side 2 - 820304/hko; 3 6974 3 6974 repeat 3 6975 wait_ch(cs_op,op_ref,true,-1); 3 6976 <*+4*> 3 6977 if (d.op_ref.optype and (op_optype or gen_optype)) extract 12 =0 3 6978 then fejlreaktion(12<*operationstype*>,op_ref,<:operatør:>,1); 3 6979 <*-4*> 3 6980 3 6980 k:=d.op_ref.opkode extract 12; 3 6981 dest_sem:= 3 6982 if k=0 and d.opref.kilde=299 then cs_talevejsswitch else 3 6983 if k=0 then cs_operatør(d.op_ref.kilde mod 100) else 3 6984 if k=1 or k=2 or k=43 then cs_operatør(d.op_ref.data(1)) else 3 6985 if k=4 then cs_operatør(d.op_ref.data(2)) else 3 6986 if k=37 then cs_op_spool else 3 6987 if k=40 or k=38 then 0 3 6988 else -1; 3 6989 <*+4*> 3 6990 if dest_sem=-1 then 3 6991 begin 4 6992 fejl_reaktion(2<*operationskode*>,k,<:hovedmodul operatør:>,1); 4 6993 signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype); 4 6994 end 3 6995 else 3 6996 <*-4*> 3 6997 if k=40 then 3 6998 begin 4 6999 dest_sem:= d.op_ref.retur; 4 7000 d.op_ref.retur:= cs_op_retur; 4 7001 for nr:= 1 step 1 until max_antal_operatører do 4 7002 begin 5 7003 inspect_ch(cs_operatør(nr),genoptype,ant); 5 7004 if ant < 0 and (læsbit_ia(opkaldsflag,nr) or læsbit_ia(kanalflag,nr) 5 7005 or læsbit_ia(samtaleflag,nr)) 5 7006 and læsbit_ia(operatørmaske,nr) then 5 7007 begin 6 7008 ref:= op_ref; 6 7009 signal_ch(cs_operatør(nr),opref,d.op_ref.optype); 6 7010 <*V*> wait_ch(cs_op_retur,op_ref,true,-1); 6 7011 <*+4*> if op_ref <> ref then 6 7012 fejlreaktion(11<*fr.post*>,op_ref, 6 7013 <:opdater opkaldskø,retur:>,0); 6 7014 <*-4*> 6 7015 end; 5 7016 end; 4 7017 d.op_ref.retur:= dest_sem; 4 7018 signal_ch(dest_sem,op_ref,d.op_ref.optype); 4 7019 end 3 7020 else 3 7021 if k=38 then 3 7022 begin 4 7023 dest_sem:= d.opref.retur; 4 7024 d.op_ref.retur:= cs_op_retur; 4 7025 for nr:= 1 step 1 until max_antal_operatører do 4 7026 begin 5 7027 if d.opref.data.op_spool_kilde <> nr then 5 7028 begin 6 7029 ref:= op_ref; 6 7030 signal_ch(cs_operatør(nr),opref,d.op_ref.optype); 6 7031 <*V*> wait_ch(cs_op_retur,op_ref,true,-1); 6 7032 <*+4*> if op_ref <> ref then 6 7033 fejlreaktion(11<*fr.post*>,op_ref, 6 7034 <:opdater opkaldskø,retur:>,0); 6 7035 <*-4*> 6 7036 end; 5 7037 end; 4 7038 if d.opref.data.op_spool_kilde<>0 then 4 7039 begin 5 7040 ref:= op_ref; 5 7041 nr:= d.opref.data.op_spool_kilde; 5 7042 signal_ch(cs_operatør(nr),opref,d.op_ref.optype); 5 7043 <*V*> wait_ch(cs_op_retur,op_ref,true,-1); 5 7044 <*+4*> if op_ref <> ref then 5 7045 fejlreaktion(11<*fr.post*>,op_ref, 5 7046 <:operatørmedddelelse, retur:>,0); 5 7047 <*-4*> 5 7048 d.op_ref.retur:= dest_sem; 5 7049 signal_ch(dest_sem,op_ref,d.op_ref.optype); 5 7050 end 4 7051 else 4 7052 begin 5 7053 d.op_ref.retur:= dest_sem; 5 7054 signal_ch(cs_io,op_ref,d.op_ref.optype); 5 7055 end; 4 7056 end 3 7057 else 3 7058 begin 4 7059 \f 4 7059 message procedure h_operatør side 3 - 810601/hko; 4 7060 4 7060 if k=8<*ekskluder*> then <*afbryd kommando v. timeout*> 4 7061 begin 5 7062 iaf:=d.op_ref.data(1)*terminal_beskr_længde; 5 7063 terminal_tab.iaf.terminal_tilstand:= 7 shift 21 5 7064 +terminal_tab.iaf.terminal_tilstand extract 21; 5 7065 end; 4 7066 signal_ch(dest_sem,op_ref,d.op_ref.optype); 4 7067 end; 3 7068 until false; 3 7069 3 7069 hop_trap: 3 7070 disable skriv_hoperatør(zbillede,1); 3 7071 end h_operatør; 2 7072 \f 2 7072 message procedure operatør side 1 - 820304/hko; 2 7073 2 7073 procedure operatør(nr); 2 7074 value nr; 2 7075 integer nr; 2 7076 begin 3 7077 integer array field op_ref,ref,vt_op,iaf,tab; 3 7078 integer i,kode,aktion,status,tilstand,bv,bs,bs_tilst, 3 7079 kanal,opgave,pos,indeks,sep,sluttegn,rkom, par1, par2, 3 7080 vogn,ll,garage,skærmmåde,res,s_kanal,v_kanal; 3 7081 real kommstart,kommslut; 3 7082 \f 3 7082 message procedure operatør side 1a - 820301/hko; 3 7083 3 7083 procedure skriv_operatør(zud,omfang); 3 7084 value omfang; 3 7085 zone zud; 3 7086 integer omfang; 3 7087 begin integer i; 4 7088 4 7088 i:= write(zud,"nl",1,<:+++ operatør nr::>,nr); 4 7089 write(zud,"sp",26-i); 4 7090 if omfang > 0 then 4 7091 disable begin 5 7092 integer x; 5 7093 trap(slut); 5 7094 write(zud,"nl",1, 5 7095 <: op-ref: :>,op_ref,"nl",1, 5 7096 <: kode: :>,kode,"nl",1, 5 7097 <: aktion: :>,aktion,"nl",1, 5 7098 <: ref: :>,ref,"nl",1, 5 7099 <: vt_op: :>,vt_op,"nl",1, 5 7100 <: iaf: :>,iaf,"nl",1, 5 7101 <: status: :>,status,"nl",1, 5 7102 <: tilstand: :>,tilstand,"nl",1, 5 7103 <: bv: :>,bv,"nl",1, 5 7104 <: bs: :>,bs,"nl",1, 5 7105 <: bs-tilst: :>,bs_tilst,"nl",1, 5 7106 <: kanal: :>,kanal,"nl",1, 5 7107 <: opgave: :>,opgave,"nl",1, 5 7108 <: pos: :>,pos,"nl",1, 5 7109 <: indeks: :>,indeks,"nl",1, 5 7110 <: sep: :>,sep,"nl",1, 5 7111 <: sluttegn: :>,sluttegn,"nl",1, 5 7112 <: vogn: :>,vogn,"nl",1, 5 7113 <: ll: :>,ll,"nl",1, 5 7114 <: garage: :>,garage,"nl",1, 5 7115 <: skærmmåde: :>,skærmmåde,"nl",1, 5 7116 <: res: :>,res,"nl",1, 5 7117 <: tab: :>,tab,"nl",1, 5 7118 <: rkom: :>,rkom,"nl",1, 5 7119 <: par1: :>,par1,"nl",1, 5 7120 <: par2: :>,par2,"nl",1, 5 7121 <::>); 5 7122 skriv_coru(zud,coru_no(200+nr)); 5 7123 slut: 5 7124 end; 4 7125 end skriv_operatør; 3 7126 \f 3 7126 message procedure skærmstatus side 1 - 810518/hko; 3 7127 3 7127 integer 3 7128 procedure skærmstatus(tilstand,b_v,b_s,b_s_tilst); 3 7129 integer tilstand,b_v,b_s,b_s_tilst; 3 7130 begin 4 7131 integer i,j; 4 7132 4 7132 i:= terminal_tab.ref(1); 4 7133 b_s:= terminal_tab.ref(2); 4 7134 b_s_tilst:= i extract 12; 4 7135 j:= b_s_tilst extract 3; 4 7136 b_v:= i shift (-12) extract 4; 4 7137 tilstand:= i shift (-21); 4 7138 4 7138 skærmstatus:= if b_v = 0 and b_s = 0 then 0 else 4 7139 if b_v = 0 and j = 1<*opkald*> then 1 else 4 7140 if b_v = 0 and j = 2<*specialopkald*> then 2 else 4 7141 if (bv<>0) and (bs<>0) and (j=3) then 4 else 3; 4 7142 end skærmstatus; 3 7143 \f 3 7143 message procedure skriv_skærm side 1 - 810522/hko; 3 7144 3 7144 procedure skriv_skærm(nr); 3 7145 value nr; 3 7146 integer nr; 3 7147 begin 4 7148 integer i; 4 7149 4 7149 disable definer_taster(nr); 4 7150 4 7150 skriv_skærm_maske(nr); 4 7151 skriv_skærm_opkaldskø(nr); 4 7152 skriv_skærm_b_v_s(nr); 4 7153 for i:= 1 step 1 until max_antal_kanaler do 4 7154 skriv_skærm_kanal(nr,i); 4 7155 cursor(z_op(nr),1,1); 4 7156 <*V*> setposition(z_op(nr),0,0); 4 7157 end skriv_skærm; 3 7158 \f 3 7158 message procedure skriv_skærm_id side 1 - 830310/hko; 3 7159 3 7159 procedure skriv_skærm_id(nr,id,nød); 3 7160 value nr,id,nød; 3 7161 integer nr,id; 3 7162 boolean nød; 3 7163 begin 4 7164 integer linie,løb,bogst,i,p; 4 7165 4 7165 i:= id shift (-22); 4 7166 4 7166 case i+1 of 4 7167 begin 5 7168 begin <* busnr *> 6 7169 p:= write(z_op(nr),if nød then "*" else "sp",1,<<bddd>, 6 7170 (id extract 14) mod 10000); 6 7171 if id shift (-14) extract 8 > 0 then 6 7172 p:= p+write(z_op(nr),".",1, 6 7173 string bpl_navn(id shift (-14) extract 8)); 6 7174 write(z_op(nr),"sp",11-p); 6 7175 end; 5 7176 5 7176 begin <*linie/løb*> 6 7177 linie:= id shift (-12) extract 10; 6 7178 bogst:= id shift (-7) extract 5; 6 7179 if bogst > 0 then bogst:= bogst +'A'-1; 6 7180 løb:= id extract 7; 6 7181 write(z_op(nr),if nød then "*" else "sp",1, 6 7182 "sp",if bogst=0 then 1 else 0,<<ddd>,linie,<<d>, 6 7183 false add bogst,1,"/",1,løb, 6 7184 "sp",if løb > 9 then 3 else 4); 6 7185 end; 5 7186 5 7186 begin <*gruppe*> 6 7187 write(z_op(nr),<:GRP :>); 6 7188 if id shift (-21) extract 1 = 1 then 6 7189 begin <*specialgruppe*> 7 7190 løb:= id extract 7; 7 7191 write(z_op(nr),"sp",if løb > 9 then 1 else 2,<:G:>, 7 7192 <<d>,løb,"sp",2); 7 7193 end 6 7194 else 6 7195 begin 7 7196 linie:= id shift (-5) extract 10; 7 7197 bogst:= id extract 5; 7 7198 if bogst > 0 then bogst:= bogst +'A'-1; 7 7199 write(z_op(nr),"sp",if bogst > 0 then 1 else 0,<<ddd>,linie, 7 7200 false add bogst,1,"sp",2); 7 7201 end; 6 7202 end; 5 7203 5 7203 <* kanal eller område *> 5 7204 begin 6 7205 linie:= (id shift (-20) extract 2) + 1; 6 7206 case linie of 6 7207 begin 7 7208 write(z_op(nr),"sp",11-write(z_op(nr), 7 7209 string kanal_navn(id extract 20))); 7 7210 write(z_op(nr),<:K*:>,"sp",9); 7 7211 write(z_op(nr),"sp",11-write(z_op(nr), 7 7212 <:OMR :>,string område_navn(id extract 20))); 7 7213 write(z_op(nr),<:ALLE:>,"sp",7); 7 7214 end; 6 7215 end; 5 7216 5 7216 end <* case i *> 4 7217 end skriv_skærm_id; 3 7218 \f 3 7218 message procedure skriv_skærm_kanal side 1 - 820301/hko; 3 7219 3 7219 procedure skriv_skærm_kanal(nr,kanal); 3 7220 value nr,kanal; 3 7221 integer nr,kanal; 3 7222 begin 4 7223 integer i,j,k,t,omr; 4 7224 integer array field tref,kref; 4 7225 boolean nød; 4 7226 4 7226 tref:= nr*terminal_beskr_længde; 4 7227 kref:= (kanal-1)*kanal_beskr_længde; 4 7228 t:= kanaltab.kref.kanal_tilstand; 4 7229 j:= terminal_tab.tref(1) shift (-12) extract 4; <* b_v kanalnr *> 4 7230 k:= terminal_tab.tref(2); <* 3 shift 22 +kanal, hvis samtale *> 4 7231 cursor(z_op(nr),kanal+2,28); 4 7232 write(z_op(nr),if læsbit_i(kanaltab.kref.kanal_tilstand,10) then "*" else 4 7233 if læsbit_i(kanaltab.kref.kanal_tilstand,11) then "+" else 4 7234 " ",1," ",1); 4 7235 write(z_op(nr),true,6,string kanal_navn(kanal)); 4 7236 omr:= if kanal_id(kanal) shift (-5) extract 3 = 2 then 4 7237 pabx_id(kanal_id(kanal) extract 5) 4 7238 else 4 7239 radio_id(kanal_id(kanal) extract 5); 4 7240 for i:= -2 step 1 until 0 do 4 7241 begin 5 7242 write(z_op(nr), 5 7243 if område_id(omr,1) shift (8*i) extract 8 = 0 then " " 5 7244 else false add (område_id(omr,1) shift (8*i) extract 8),1); 5 7245 end; 4 7246 write(z_op(nr),<:: :>); 4 7247 i:= tv_operatør(kanaltab.kref.kanal_tilstand shift (-16));<*operatør*> 4 7248 if læsbit_ia(kanaltab.kref.kanal_alarm, nr) then 4 7249 begin 5 7250 sætbit_ia(kanaltab.kref.kanal_alarm, nr, 0); 5 7251 <* write(z_op(nr),<:ALARM !:>,"bel",1); *> 5 7252 end 4 7253 else 4 7254 if kanaltab.kref.kanal_tilstand shift (-12) extract 4 = 15 then 4 7255 write(z_op(nr),<:-:><*UDE AF DRIFT*>) 4 7256 else 4 7257 if i > 0 and 4 7258 ( true <* i <> nr *> <* OPT også ud på egen skærm 960527/CL *> or 4 7259 j = kanal <* kanal = kanalnr for ventepos *> or 4 7260 (terminal_tab.tref.terminal_tilstand shift (-21) = 1 4 7261 <*tilst=samtale*> and k extract 22 = kanal) ) then 4 7262 begin 5 7263 write(z_op(nr),<:OPT :>); 5 7264 if bpl_navn(i)=long<::> then write(z_op(nr),<:op:>,<<d>,i) 5 7265 else write(z_op(nr),string bpl_navn(i)); 5 7266 end 4 7267 else 4 7268 if false then 4 7269 begin 5 7270 i:= kanaltab.kref.kanal_id1; 5 7271 nød:= læsbit_i(kanaltab.kref.kanal_tilstand,3); 5 7272 skriv_skærm_id(nr,i,nød); 5 7273 write(z_op(nr),if t extract 2 = 3 then <:GNM :> else <:OPKALDT:>); 5 7274 i:= kanaltab.kref.kanal_id2; 5 7275 if i<>0 then skriv_skærm_id(nr,i,false); 5 7276 end; 4 7277 write(z_op(nr),"esc" add 128,1,<:ÆK:>); 4 7278 end skriv_skærm_kanal; 3 7279 \f 3 7279 message procedure skriv_skærm_b_v_s side 1 - 810601/hko; 3 7280 3 7280 procedure skriv_skærm_b_v_s(nr); 3 7281 value nr; 3 7282 integer nr; 3 7283 begin 4 7284 integer i,j,k,kv,ks,t; 4 7285 integer array field tref,kref; 4 7286 4 7286 tref:= nr*terminal_beskr_længde; 4 7287 i:= terminal_tab.tref.terminal_tilstand; 4 7288 kv:= i shift (-12) extract 4; 4 7289 ks:= terminaltab.tref(2) extract 20; 4 7290 <*V*> setposition(z_op(nr),0,0); 4 7291 cursor(z_op(nr),18,28); 4 7292 write(z_op(nr),"esc" add 128,1,<:ÆK:>); 4 7293 cursor(z_op(nr),20,28); 4 7294 write(z_op(nr),"esc" add 128,1,<:ÆK:>); 4 7295 cursor(z_op(nr),21,28); 4 7296 write(z_op(nr),"esc" add 128,1,<:ÆK:>); 4 7297 cursor(z_op(nr),20,28); 4 7298 if op_talevej(nr)<>0 then 4 7299 begin 5 7300 cursor(z_op(nr),18,28); 5 7301 write(z_op(nr),<:talevej: :>,<<d>,op_talevej(nr)); 5 7302 end; 4 7303 if kv <> 0 then 4 7304 begin 5 7305 kref:= (kv-1)*kanal_beskr_længde; 5 7306 j:= if kv<>ks then kanaltab.kref.kanal_id1 5 7307 else kanaltab.kref.kanal_id2; 5 7308 k:= if kv<>ks then kanaltab.kref.kanal_alt_id1 5 7309 else kanaltab.kref.kanal_alt_id2; 5 7310 write(z_op(nr),true,6,string kanal_navn(kv)); 5 7311 skriv_skærm_id(nr,j,kanaltab.kref.kanaltilstand shift(-3) extract 1=1); 5 7312 skriv_skærm_id(nr,k,false); 5 7313 write(z_op(nr),if i extract 2 = 3 then <:GNM:> else <:VNT:>); 5 7314 end; 4 7315 4 7315 cursor(z_op(nr),21,28); 4 7316 j:= terminal_tab.tref(2); 4 7317 if i shift (-21) <> 0 <*ikke ledig*> then 4 7318 begin 5 7319 \f 5 7319 message procedure skriv_skærm_b_v_s side 2 - 841210/cl; 5 7320 5 7320 if i shift (-21) = 1 <*samtale*> then 5 7321 begin 6 7322 if j shift (-20) = 12 then 6 7323 begin 7 7324 write(z_op(nr),true,6,string kanal_navn(ks)); 7 7325 end 6 7326 else 6 7327 begin 7 7328 write(z_op(nr),true,6,<:K*:>); 7 7329 k:= 0; 7 7330 while ks shift (-k) extract 1 = 0 and k<max_antal_kanaler do 7 7331 k:= k+1; 7 7332 ks:= k; 7 7333 end; 6 7334 kref:= (ks-1)*kanal_beskr_længde; 6 7335 t:= kanaltab.kref.kanaltilstand; 6 7336 skriv_skærm_id(nr,kanaltab.kref.kanal_id1, 6 7337 t shift (-3) extract 1 = 1); 6 7338 skriv_skærm_id(nr,kanaltab.kref.kanal_alt_id1,false); 6 7339 write(z_op(nr),if i shift (-11) extract 1 = 1 then <:-P-:> else 6 7340 if t shift (-5) extract 1 = 1 then <:MON :> else 6 7341 if t shift (-4) extract 1 = 1 then <:BSV :> else 6 7342 if t shift (-6) extract 1 = 1 then <:PAS :> else 6 7343 if t shift (-7) extract 1 = 1 then <:LYT :> else <:TAL :>); 6 7344 if t shift (-9) extract 1 = 1 then 6 7345 write(z_op(nr),<:ALLE :>); 6 7346 if t shift (-8) extract 1 = 1 then 6 7347 write(z_op(nr),<:KATASTROFE :>); 6 7348 k:= kanaltab.kref.kanal_spec; 6 7349 if t extract 2 <> 3 and t shift (-4) extract 1 = 1 then 6 7350 write(z_op(nr),<<zd.dd>,(k extract 12)/100); 6 7351 end 5 7352 else <* if i shift (-21) = 2 <+optaget+> then *> 5 7353 begin 6 7354 write(z_op(nr),<:K-:>,"sp",3); 6 7355 if j <> 0 then 6 7356 skriv_skærm_id(nr,j,false) 6 7357 else 6 7358 begin 7 7359 j:=terminal_tab.tref(3); 7 7360 skriv_skærm_id(nr,j, 7 7361 false add (if i shift(-4) extract 1 = 1 then 2 <* mobil opk. *> 7 7362 else 0)); 7 7363 end; 6 7364 write(z_op(nr),<:OPT:>); 6 7365 end; 5 7366 end; 4 7367 <*V*> setposition(z_op(nr),0,0); 4 7368 end skriv_skærm_b_v_s; 3 7369 \f 3 7369 message procedure skriv_skærm_maske side 1 - 810511/hko; 3 7370 3 7370 procedure skriv_skærm_maske(nr); 3 7371 value nr; 3 7372 integer nr; 3 7373 begin 4 7374 integer i; 4 7375 <*V*> setposition(z_op(nr),0,0); 4 7376 write(z_op(nr),"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>, 4 7377 "sp",26,"*",5,<: operatør :>,<<d>,nr,"sp",1,string bpl_navn(nr), 4 7378 "sp",1,"*",5,"nl",1,"-",80); 4 7379 4 7379 for i:= 3 step 1 until 21 do 4 7380 begin 5 7381 cursor(z_op(nr),i,26); 5 7382 outchar(z_op(nr),'!'); 5 7383 end; 4 7384 cursor(z_op(nr),22,1); 4 7385 write(z_op(nr),"-",80); 4 7386 cursor(z_op(nr),1,1); 4 7387 <*V*> setposition(z_op(nr),0,0); 4 7388 end skriv_skærm_maske; 3 7389 \f 3 7389 message procedure skal_udskrives side 1 - 940522/cl; 3 7390 3 7390 boolean procedure skal_udskrives(fordelt_til,aktuel_skærm); 3 7391 value fordelt_til,aktuel_skærm; 3 7392 integer fordelt_til,aktuel_skærm; 3 7393 begin 4 7394 boolean skal_ud; 4 7395 integer n; 4 7396 integer array field iaf; 4 7397 4 7397 skal_ud:= true; 4 7398 if fordelt_til > 0 and fordelt_til<>aktuel_skærm then 4 7399 begin 5 7400 for n:= 0 step 1 until 3 do 5 7401 begin 6 7402 if bpl_tilst(operatør_stop(fordelt_til,n),1) > 0 then 6 7403 begin 7 7404 iaf:= operatør_stop(fordelt_til,n)*op_maske_lgd; 7 7405 skal_ud:= læsbit_ia(bpl_def.iaf,aktuel_skærm); 7 7406 goto returner; 7 7407 end; 6 7408 end; 5 7409 end; 4 7410 returner: 4 7411 skal_udskrives:= skal_ud; 4 7412 end; 3 7413 3 7413 message procedure skriv_skærm_opkaldskø side 1 - 820301/hko; 3 7414 3 7414 procedure skriv_skærm_opkaldskø(nr); 3 7415 value nr; 3 7416 integer nr; 3 7417 begin 4 7418 integer i,ant,vogn,type,operatør,ttmm,linie,bogst,løb,kmdo; 4 7419 integer array field ref,iaf,tab; 4 7420 boolean skal_ud; 4 7421 4 7421 <*V*> wait(bs_opkaldskø_adgang); 4 7422 setposition(z_op(nr),0,0); 4 7423 ant:= 0; kmdo:= 0; 4 7424 tab:= (nr-1)*opk_alarm_tab_lgd; 4 7425 ref:= første_nødopkald; 4 7426 if ref=0 then ref:=første_opkald; 4 7427 while ref <> 0 do 4 7428 begin 5 7429 i:= opkaldskø.ref(4); 5 7430 operatør:= i extract 8; 5 7431 type:=i shift (-8) extract 4; 5 7432 5 7432 <* skal_ud:= operatør = nr or -,læsbit_ia(operatørmaske,operatør); 5 7433 *> 5 7434 if operatør > 64 then 5 7435 begin 6 7436 <* fordelt til gruppe af betjeningspladser *> 6 7437 i:= 0; skal_ud:= true; iaf:= operatør*op_maske_lgd; 6 7438 while skal_ud and i<max_antal_operatører do 6 7439 begin 7 7440 i:=i+1; 7 7441 if læsbit_ia(bpl_def.iaf,i) then 7 7442 skal_ud:= skal_ud and skal_udskrives(i,nr); 7 7443 end; 6 7444 end 5 7445 else 5 7446 skal_ud:= skal_udskrives(operatør,nr); 5 7447 if skal_ud then 5 7448 begin 6 7449 ant:= ant +1; 6 7450 if ant < 6 then 6 7451 begin 7 7452 <*V*> cursor(z_op(nr),ant*2+1,3); 7 7453 ttmm:= i shift (-12); 7 7454 vogn:= opkaldskø.ref(3); 7 7455 if vogn = 0 then vogn:= opkaldskø.ref(2) extract 22; 7 7456 skriv_skærm_id(nr,vogn,type=2); 7 7457 write(z_op(nr),true,4, 7 7458 string område_navn(opkaldskø.ref(5) extract 4), 7 7459 <<zd.dd>,ttmm/100.0); 7 7460 if -, læsbit_ia(opkaldskø.ref.opkald_meldt,nr) then 7 7461 begin 8 7462 if opkaldskø.ref(5) extract 4 <= 1 or 8 7463 opk_alarm.tab.alarm_lgd = 0 then 8 7464 begin 9 7465 if type=2 then 9 7466 write(z_op(nr),"bel",1,"del",8,"bel",1,"del",8,"bel",1) 9 7467 else 9 7468 write(z_op(nr),"bel",1); 9 7469 end 8 7470 else if type>kmdo then kmdo:= type; 8 7471 sætbit_ia(opkaldskø.ref.opkald_meldt,nr,1); 8 7472 end; 7 7473 end;<* ant < 6 *> 6 7474 end;<* operatør ok *> 5 7475 5 7475 ref:= opkaldskø.ref(1) extract 12; 5 7476 if ref = 0 and type = 2<*nød*> then ref:= første_opkald; 5 7477 end; 4 7478 \f 4 7478 message procedure skriv_skærm_opkaldskø side 2 - 820301/hko; 4 7479 4 7479 signal_bin(bs_opkaldskø_adgang); 4 7480 if kmdo > opk_alarm.tab.alarm_tilst and 4 7481 kmdo > opk_alarm.tab.alarm_kmdo then 4 7482 begin 5 7483 opk_alarm.tab.alarm_kmdo:= kmdo; 5 7484 signal_bin(bs_opk_alarm); 5 7485 end; 4 7486 if ant > 5 then 4 7487 begin 5 7488 cursor(z_op(nr),13,9); 5 7489 write(z_op(nr),<<+ddd>,ant-5); 5 7490 end 4 7491 else 4 7492 begin 5 7493 for i:= ant +1 step 1 until 6 do 5 7494 begin 6 7495 cursor(z_op(nr),i*2+1,1); 6 7496 write(z_op(nr),"sp",25); 6 7497 end; 5 7498 end; 4 7499 ant_i_opkø(nr):= ant; 4 7500 cursor(z_op(nr),1,1); 4 7501 <*V*> setposition(z_op(nr),0,0); 4 7502 end skriv_skærm_opkaldskø; 3 7503 \f 3 7503 message procedure operatør side 2 - 810522/hko; 3 7504 3 7504 trap(op_trap); 3 7505 stack_claim((if cm_test then 200 else 146)+24+48+80+175); 3 7506 3 7506 ref:= nr*terminal_beskr_længde; 3 7507 tab:= (nr-1)*opk_alarm_tab_lgd; 3 7508 skærmmåde:= 0; <*normal*> 3 7509 3 7509 if operatør_auto_include(nr) then 3 7510 begin 4 7511 waitch(cs_att_pulje,opref,true,-1); 4 7512 i:= operatør_auto_include(nr) extract 2; 4 7513 if i<>3 then i:= 0; 4 7514 start_operation(opref,101,cs_att_pulje,i shift 12 +1); 4 7515 d.opref.data(1):= nr; 4 7516 signalch(cs_rad,opref,gen_optype or io_optype); 4 7517 end; 3 7518 3 7518 <*+2*> 3 7519 if testbit8 and overvåget or testbit28 then 3 7520 skriv_operatør(out,0); 3 7521 <*-2*> 3 7522 \f 3 7522 message procedure operatør side 3 - 810602/hko; 3 7523 3 7523 repeat 3 7524 3 7524 <*V*> wait_ch(cs_operatør(nr), 3 7525 op_ref, 3 7526 true, 3 7527 -1<*timeout*>); 3 7528 <*+2*> 3 7529 if testbit9 and overvåget then 3 7530 disable begin 4 7531 write(out,"nl",1,<:operation fra cs:>,<<d>,cs_operatør(nr), 4 7532 <: til operatør :>,nr); 4 7533 skriv_op(out,op_ref); 4 7534 end; 3 7535 <*-2*> 3 7536 monitor(8)reserve process:(z_op(nr),0,ia); 3 7537 kode:= d.op_ref.op_kode extract 12; 3 7538 i:= terminal_tab.ref.terminal_tilstand; 3 7539 status:= i shift(-21); 3 7540 opgave:= 3 7541 if kode=0 then 1 <* indlæs kommando *> else 3 7542 if kode=1 then 2 <* inkluder *> else 3 7543 if kode=2 then 3 <* ekskluder *> else 3 7544 if kode=40 then 4 <* opdater skærm *> else 3 7545 if kode=43 then 5 <* opkald etableret *> else 3 7546 if kode=4 then 6 <* radiokanal ekskluderet *> else 3 7547 if kode=38 then 7 <* operatør meddelelse *> else 3 7548 0; <* afvises *> 3 7549 3 7549 aktion:= case status +1 of( 3 7550 <* status *> <* opgave: 0 1 2 3 4 5 6 7 *> 3 7551 <* 0 klar *>(case opgave+1 of( 0, 1, -4, 3, 4, -4, 6, 7)), 3 7552 <* 1 samtale *>(case opgave+1 of( 0, 1, -4, -5, 4, -4, 6, 7)), 3 7553 <* 2 optaget *>(case opgave+1 of( 0, 1, -4, -5, 4, 5, 6, 7)), 3 7554 <* 3 stoppet *>(case opgave+1 of( 0, 2, 2, 3, -4, -4, -4, 7)), 3 7555 <* 4 klar (fejl) *>(case opgave+1 of( 0, -4, 2, 3, -4, -4, 6, -4)), 3 7556 <* 5 samt.(fejl) *>(case opgave+1 of( 0, -4, 2, 3, -4, -4, 6, -4)), 3 7557 <* 6 opt. (fejl) *>(case opgave+1 of( 0, -4, 2, 3, -4, 5, -4, -4)), 3 7558 <* 7 ej knyttet *>(case opgave+1 of( 0, -4, 2, -4, -4, -4, -4, -4)), 3 7559 -1); 3 7560 \f 3 7560 message procedure operatør side 4 - 810424/hko; 3 7561 3 7561 case aktion+6 of 3 7562 begin 4 7563 begin 5 7564 <*-5: terminal optaget *> 5 7565 5 7565 d.op_ref.resultat:= 16; 5 7566 afslut_operation(op_ref,-1); 5 7567 end; 4 7568 4 7568 begin 5 7569 <*-4: operation uden virkning *> 5 7570 5 7570 afslut_operation(op_ref,-1); 5 7571 end; 4 7572 4 7572 begin 5 7573 <*-3: ulovlig operationskode *> 5 7574 5 7574 fejl_reaktion(2<*operationskode*>,kode,<:ulovlig:>,1); 5 7575 afslut_operation(op_ref,-1); 5 7576 end; 4 7577 4 7577 begin 5 7578 <*-2: ulovligt operatørterminal_nr *> 5 7579 5 7579 fejl_reaktion(3<*programfejl*>,nr,<: ikke eksisterende operatør:>,1); 5 7580 afslut_operation(op_ref,-1); 5 7581 end; 4 7582 4 7582 begin 5 7583 <*-1: ulovlig operatørtilstand *> 5 7584 5 7584 fejl_reaktion(3<*programfejl*>,status,<: ulovlig operatør-status:>,1); 5 7585 afslut_operation(op_ref,-1); 5 7586 end; 4 7587 4 7587 begin 5 7588 <* 0: ikke implementeret *> 5 7589 5 7589 fejl_reaktion(2<*operationskode*>,kode,<: ikke implementeret:>,1); 5 7590 afslut_operation(op_ref,-1); 5 7591 end; 4 7592 4 7592 begin 5 7593 \f 5 7593 message procedure operatør side 5 - 851001/cl; 5 7594 5 7594 <* 1: indlæs kommando *> 5 7595 5 7595 5 7595 <*V*> læs_kommando(z_op(nr),200+nr,op_ref,pos,indeks,sep,sluttegn); 5 7596 if opk_alarm.tab.alarm_tilst > 0 then 5 7597 begin 6 7598 opk_alarm.tab.alarm_kmdo:= 3; 6 7599 signal_bin(bs_opk_alarm); 6 7600 pass; 6 7601 end; 5 7602 if d.op_ref.resultat > 3 then 5 7603 begin 6 7604 <*V*> setposition(z_op(nr),0,0); 6 7605 cursor(z_op(nr),24,1); 6 7606 skriv_kvittering(z_op(nr),op_ref,pos, 6 7607 d.op_ref.resultat); 6 7608 end 5 7609 else if d.op_ref.resultat = -1 then 5 7610 begin 6 7611 skærmmåde:= 0; 6 7612 skrivskærm(nr); 6 7613 end 5 7614 else if d.op_ref.resultat>0 then 5 7615 begin <*godkendt*> 6 7616 kode:=d.op_ref.opkode; 6 7617 i:= kode extract 12; 6 7618 j:= if kode = 11 or kode = 12 then 1 <*VO,I/VO,U*> else 6 7619 if kode = 19 then 1 <*VO,S *> else 6 7620 if kode = 20 or kode = 24 then 1 <*VO,F/VO,R*> else 6 7621 if kode = 9 or kode = 10 then 2 <*VO,L/VO,B*> else 6 7622 if kode = 6 then 4 <*STop*> else 6 7623 if 45<=kode and kode<=63 then 3 <*radiokom.*> else 6 7624 if kode = 30 then 5 <*SP,D*> else 6 7625 if kode = 31 then 6 <*SP*> else 6 7626 if kode = 32 or kode = 33 then 7 <*SP,V/SP,O*> else 6 7627 if kode = 34 or kode = 35 then 6 <*SP,R/SP,A*> else 6 7628 if kode = 83 then 8 <*SL*> else 6 7629 if kode = 68 then 9 <*ST,D*> else 6 7630 if kode = 69 then 10 <*ST,V*> else 6 7631 if kode = 36 then 11 <*AL*> else 6 7632 if kode = 37 then 12 <*CC*> else 6 7633 if kode = 2 then 13 <*EX*> else 6 7634 if kode = 92 then 14 <*CQF,V*> else 6 7635 if kode = 38 then 15 <*AL,T*> else 6 7636 0; 6 7637 if j > 0 then 6 7638 begin 7 7639 case j of 7 7640 begin 8 7641 begin 9 7642 \f 9 7642 message procedure operatør side 6 - 851001/cl; 9 7643 9 7643 <* 1 indsæt/udtag/flyt bus i vogntabel *> 9 7644 9 7644 vogn:=ia(1); 9 7645 ll:=ia(2); 9 7646 kanal:= if kode=11 or kode=19 then ia(3) else 9 7647 if kode=12 then ia(2) else 0; 9 7648 <*V*> wait_ch(cs_vt_adgang, 9 7649 vt_op, 9 7650 gen_optype, 9 7651 -1<*timeout sek*>); 9 7652 start_operation(vtop,200+nr,cs_operatør(nr), 9 7653 kode); 9 7654 d.vt_op.data(1):=vogn; 9 7655 if kode=11 or kode=19 or kode=20 or kode=24 then 9 7656 d.vt_op.data(2):=ll; 9 7657 if kode=19 then d.vt_op.data(3):= kanal else 9 7658 if kode=11 or kode=12 then d.vt_op.data(4):= kanal; 9 7659 indeks:= vt_op; 9 7660 signal_ch(cs_vt, 9 7661 vt_op, 9 7662 gen_optype or op_optype); 9 7663 9 7663 <*V*> wait_ch(cs_operatør(nr), 9 7664 vt_op, 9 7665 op_optype, 9 7666 -1<*timeout sek*>); 9 7667 <*+2*> if testbit10 and overvåget then 9 7668 disable begin 10 7669 write(out,"nl",1,<:operatør :>,<<d>,nr, 10 7670 <:: operation retur fra vt:>); 10 7671 skriv_op(out,vt_op); 10 7672 end; 9 7673 <*-2*> 9 7674 <*+4*> if vt_op<>indeks then 9 7675 fejl_reaktion(11<*fremmede op*>,op_ref, 9 7676 <:operatør-kommando:>,0); 9 7677 <*-4*> 9 7678 <*V*> setposition(z_op(nr),0,0); 9 7679 cursor(z_op(nr),24,1); 9 7680 <*V*> skriv_kvittering(z_op(nr),if d.vt_op.resultat = 11 or 9 7681 d.vt_op.resultat = 12 then d.vt_op.data(3) 9 7682 else vt_op,-1,d.vt_op.resultat); 9 7683 d.vt_op.optype:= gen_optype or vt_optype; 9 7684 disable afslut_operation(vt_op,cs_vt_adgang); 9 7685 end; 8 7686 begin 9 7687 \f 9 7687 message procedure operatør side 7 - 810921/hko,cl; 9 7688 9 7688 <* 2 vogntabel,linienr/-,busnr *> 9 7689 9 7689 d.op_ref.retur:= cs_operatør(nr); 9 7690 tofrom(d.op_ref.data,ia,10); 9 7691 indeks:= op_ref; 9 7692 signal_ch(cs_vt,op_ref,gen_optype or op_optype); 9 7693 wait_ch(cs_operatør(nr), 9 7694 op_ref, 9 7695 op_optype, 9 7696 -1<*timeout*>); 9 7697 <*+2*> if testbit10 and overvåget then 9 7698 disable begin 10 7699 write(out,"nl",1,<:operatør operation retur fra vt:>); 10 7700 skriv_op(out,op_ref); 10 7701 end; 9 7702 <*-2*> 9 7703 <*+4*> 9 7704 if indeks <> op_ref then 9 7705 fejlreaktion(11<*fremmed post*>,op_ref,<:operatør komm:>,0); 9 7706 <*-4*> 9 7707 i:= d.op_ref.resultat; 9 7708 if i = 0 or i > 3 then 9 7709 begin 10 7710 <*V*> setposition(z_op(nr),0,0); 10 7711 cursor(z_op(nr),24,1); 10 7712 skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat); 10 7713 end 9 7714 else 9 7715 begin 10 7716 integer antal,fil_ref; 10 7717 10 7717 skærm_måde:= 1; 10 7718 antal:= d.op_ref.data(6); 10 7719 fil_ref:= d.op_ref.data(7); 10 7720 <*V*> setposition(z_op(nr),0,0); 10 7721 write(z_op(nr),"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>, 10 7722 "sp",14,"*",10,"sp",6, 10 7723 <:vogntabeludskrift:>,"sp",6,"*",10,"nl",2); 10 7724 <*V*> setposition(z_op(nr),0,0); 10 7725 \f 10 7725 message procedure operatør side 8 - 841213/cl; 10 7726 10 7726 pos:= 1; 10 7727 while pos <= antal do 10 7728 begin 11 7729 integer bogst,løb; 11 7730 11 7730 disable i:= læs_fil(fil_ref,pos,j); 11 7731 if i <> 0 then 11 7732 fejlreaktion(5<*læs_fil*>,i,<:operatør: vo,l/vo,b:>,0) 11 7733 else 11 7734 begin 12 7735 vogn:= fil(j,1) shift (-24) extract 24; 12 7736 løb:= fil(j,1) extract 24; 12 7737 if d.op_ref.opkode=9 then 12 7738 begin i:=vogn; vogn:=løb; løb:=i; end; 12 7739 ll:= løb shift (-12) extract 10; 12 7740 bogst:= løb shift (-7) extract 5; 12 7741 if bogst > 0 then bogst:= bogst +'A'-1; 12 7742 løb:= løb extract 7; 12 7743 vogn:= vogn extract 14; 12 7744 i:= d.op_ref.opkode-8; 12 7745 for i:= i,i+1 do 12 7746 begin 13 7747 j:= (i+1) extract 1; 13 7748 case j +1 of 13 7749 begin 14 7750 write(z_op(nr),"sp",(bogst=0) extract 1,<<ddd>,ll, 14 7751 false add bogst,1,"/",1,<<d__>,løb); 14 7752 write(z_op(nr),<<dddd>,vogn,"sp",1); 14 7753 end; 13 7754 end; 12 7755 if pos mod 5 = 0 then 12 7756 begin 13 7757 outchar(z_op(nr),'nl'); 13 7758 <*V*> setposition(z_op(nr),0,0); 13 7759 end 12 7760 else write(z_op(nr),"sp",3); 12 7761 end; 11 7762 pos:=pos+1; 11 7763 end; 10 7764 write(z_op(nr),"*",1,"nl",1); 10 7765 \f 10 7765 message procedure operatør side 8a- 810507/hko; 10 7766 10 7766 d.opref.opkode:=104; <*slet-fil*> 10 7767 d.op_ref.data(4):=filref; 10 7768 indeks:=op_ref; 10 7769 signal_ch(cs_slet_fil,op_ref,gen_optype or op_optype); 10 7770 <*V*> wait_ch(cs_operatør(nr),op_ref,op_optype,-1); 10 7771 10 7771 <*+2*> if testbit10 and overvåget then 10 7772 disable begin 11 7773 write(out,"nl",1,<:operatør, slet-fil retur:>); 11 7774 skriv_op(out,op_ref); 11 7775 end; 10 7776 <*-2*> 10 7777 10 7777 <*+4*> if op_ref<>indeks then 10 7778 fejlreaktion(11<*fr.post*>,op_ref,<:operatør,slet-fil:>,0); 10 7779 <*-4*> 10 7780 if d.op_ref.data(9)<>0 then 10 7781 fejl_reaktion(3<*prg.fejl*>,d.op_ref.data(9), 10 7782 <:operatør, slet_fil:>,1); 10 7783 end; 9 7784 end; 8 7785 8 7785 begin 9 7786 \f 9 7786 message procedure operatør side 9 - 830310/hko; 9 7787 9 7787 <* 3 radio_kommandoer *> 9 7788 9 7788 kode:= d.op_ref.opkode; 9 7789 rkom:= kode-44; par1:=ia(1); par2:=ia(2); 9 7790 disable if testbit14 then 9 7791 begin 10 7792 integer i; <*lav en trap-bar blok*> 10 7793 10 7793 trap(test14_trap); 10 7794 systime(1,0,kommstart); 10 7795 write(zrl,<<zd dd dd.dd >,now,<:op:>,<<d__>,nr, 10 7796 string bpl_navn(nr),<: start :>,case rkom of ( 10 7797 <:OP:>,<:ME:>,<:OP,G:>,<:ME,G:>,<:OP,A:>,<:ME,A:>, 10 7798 <:KA,C:>,<:KA,P:>,<:OP,L:>,<:MO:>,<:VE:>,<:NE:>, 10 7799 <:OP,V:>,<:OP,T:>,<:R:>,<:GE:>,<:GE,G:>,<:GE,V:>, 10 7800 <:GE,T:>),<: :>); 10 7801 if (rkom<5 or rkom=9 or rkom=13 or rkom=14 or 10 7802 rkom=16 or rkom=17 or rkom=19) 10 7803 then 10 7804 begin 11 7805 if par1<>0 then skriv_id(zrl,par1,0); 11 7806 if par2<>0 and rkom<>13 and rkom<>14 and rkom<>19 then 11 7807 write(zrl,"sp",1,string områdenavn(par2)); 11 7808 end 10 7809 else 10 7810 if rkom=10 and par1<>0 then 10 7811 write(zrl,string kanalnavn(par1 extract 20)) 10 7812 else 10 7813 if rkom=5 or rkom=6 then 10 7814 begin 11 7815 if par1 shift (-20)=15 then write(zrl,<:ALLE:>) else 11 7816 if par1 shift (-20)=14 then 11 7817 write(zrl,string områdenavn(par1 extract 20)); 11 7818 end; 10 7819 test14_trap: outchar(zrl,'nl'); 10 7820 end; 9 7821 d.op_ref.data(4):= nr; <*operatør*> 9 7822 opgave:= 9 7823 if kode = 45 <*OP *> then 1 else 9 7824 if kode = 46 <*ME *> then 2 else 9 7825 if kode = 47 <*OP,G*> then 3 else 9 7826 if kode = 48 <*ME,G*> then 4 else 9 7827 if kode = 49 <*OP,A*> then 5 else 9 7828 if kode = 50 <*ME,A*> then 6 else 9 7829 if kode = 51 <*KA,C*> then 7 else 9 7830 if kode = 52 <*KA,P*> then 8 else 9 7831 if kode = 53 <*OP,L*> then 9 else 9 7832 if kode = 54 <*MO *> then (if ia(1)=0 then 11 else 10) else 9 7833 if kode = 55 <*VE *> then 14 else 9 7834 if kode = 56 <*NE *> then 12 else 9 7835 if kode = 57 <*OP,V*> then 1 else 9 7836 if kode = 58 <*OP,T*> then 1 else 9 7837 if kode = 59 <*R *> then 13 else 9 7838 if kode = 60 <*GE *> then 15 else 9 7839 if kode = 61 <*GE,G*> then 16 else 9 7840 if kode = 62 <*GE,V*> then 15 else 9 7841 if kode = 63 <*GE,T*> then 15 else 9 7842 -1; 9 7843 <*+4*> if opgave < 0 then 9 7844 fejlreaktion(2<*operationskode*>,kode, 9 7845 <:operatør, radio-kommando :>,0); 9 7846 <*-4*> 9 7847 status:= skærm_status(tilstand,b_v,b_s,b_s_tilst); 9 7848 i:= d.op_ref.data(2):= ia(1); <* ident.*> 9 7849 if 5<=opgave and opgave<=8 then 9 7850 d.opref.data(2):= -1; 9 7851 if opgave=13 then d.opref.data(2):= 9 7852 (if læsbit_i(terminaltab.ref.terminaltilstand,11) 9 7853 then 0 else 1); 9 7854 if opgave = 14 then d.opref.data(2):= 1; 9 7855 if opgave=7 or opgave=8 then 9 7856 d.opref.data(3):= -1 9 7857 else 9 7858 if opgave=5 or opgave=6 then 9 7859 begin 10 7860 if ia(1) shift (-20) = 15 then 10 7861 begin 11 7862 d.opref.data(3):= 15 shift 20; 11 7863 for j:= 1 step 1 until max_antal_kanaler do 11 7864 begin 12 7865 iaf:= (j-1)*kanalbeskrlængde; 12 7866 if læsbit_i(kanaltab.iaf.kanal_tilstand,11) and 12 7867 læsbit_i(ia(1),kanal_til_omr(j)) then 12 7868 sætbit_i(d.opref.data(3),kanal_til_omr(j),1); 12 7869 end; 11 7870 end 10 7871 else 10 7872 d.opref.data(3):= if ia(1)=0 then 14 shift 20 + 3 10 7873 else ia(1); 10 7874 end 9 7875 else 9 7876 if kode = 57 then d.opref.data(3):= 2 else 9 7877 if kode = 58 then d.opref.data(3):= 1 else 9 7878 if kode = 62 then d.opref.data(3):= 2 else 9 7879 if kode = 63 then d.opref.data(3):= 1 else 9 7880 d.opref.data(3):= ia(2); 9 7881 9 7881 <* !!! i første if-sætning nedenfor er 'status>1' 9 7882 rettet til 'status>0' for at forhindre 9 7883 at opkald nr. 2 kan udføres med et allerede 9 7884 etableret opkald i skærmens s-felt, 9 7885 jvf. ulykke d. 7/2-1995 9 7886 !!! *> 9 7887 res:= 9 7888 if (opgave=1 or opgave=3) and status>0 9 7889 then 16 <*skærm optaget*> else 9 7890 if (opgave=15 or opgave=16) and 9 7891 status>1 then 16 <*skærm optaget*> else 9 7892 if (opgave=1 or opgave=3) and status=0 then 1 else 9 7893 if (opgave=15 or opgave=16) and status=0 then 21 else 9 7894 if (opgave=1 or opgave=3 or opgave=15 or opgave=16) then 9 7895 (if (d.opref.data(3)=1 or d.opref.data(3)=2) and 9 7896 d.opref.data(3) = kanal_til_omr(bs extract 6) 9 7897 then 52 else 1) else 9 7898 if opgave<11 and status>0 then 16 else 9 7899 if opgave=11 and status<2 then 21 else 9 7900 if opgave=12 and status=0 then 22 else 9 7901 if opgave=13 and status=0 then 49 else 9 7902 if opgave=14 and status<>3 then 21 else 1; 9 7903 if res=1 and (d.opref.data(3)=1 or d.opref.data(3)=2) then 9 7904 begin <* specialbetingelser for TLF og VHF *> 10 7905 if (1<opgave and opgave<9) or opgave=16 then res:= 51; 10 7906 end; 9 7907 if skærmmåde<>0 then 9 7908 begin skærm_måde:= 0; skriv_skærm(nr); end; 9 7909 kode:= opgave; 9 7910 if opgave = 15 then opgave:= 1 else 9 7911 if opgave = 16 then opgave:= 3; 9 7912 \f 9 7912 message procedure operatør side 10 - 810616/hko; 9 7913 9 7913 <* tilknyt talevej (om nødvendigt) *> 9 7914 if res = 1 and op_talevej(nr)=0 then 9 7915 begin 10 7916 i:= sidste_tv_brugt; 10 7917 repeat 10 7918 i:= (i mod max_antal_taleveje)+1; 10 7919 if tv_operatør(i)=0 then 10 7920 begin 11 7921 tv_operatør(i):= nr; 11 7922 op_talevej(nr):= i; 11 7923 end; 10 7924 until op_talevej(nr)<>0 or i=sidste_tv_brugt; 10 7925 if op_talevej(nr)=0 then 10 7926 res:=61 10 7927 else 10 7928 begin 11 7929 sidste_tv_brugt:= 11 7930 (sidste_tv_brugt mod max_antal_taleveje)+1; 11 7931 11 7931 <*V*> waitch(cs_tvswitch_adgang,iaf,op_optype,-1); 11 7932 start_operation(iaf,200+nr,cs_operatør(nr), 11 7933 'A' shift 12 + 44); 11 7934 d.iaf.data(1):= op_talevej(nr); 11 7935 d.iaf.data(2):= nr+16; 11 7936 ll:= 0; 11 7937 repeat 11 7938 signalch(cs_talevejsswitch,iaf,op_optype); 11 7939 <*V*> waitch(cs_operatør(nr),iaf,op_optype,-1); 11 7940 ll:= ll+1; 11 7941 until ll=3 or d.iaf.resultat=3; 11 7942 res:= if d.iaf.resultat=3 then 1 else 61; 11 7943 <* ********* *> 11 7944 delay(1); 11 7945 start_operation(iaf,200+nr,cs_operatør(nr), 11 7946 'R' shift 12 + 44); 11 7947 ll:= 0; 11 7948 repeat 11 7949 signalch(cs_talevejsswitch,iaf,op_optype); 11 7950 waitch(cs_operatør(nr),iaf,op_optype,-1); 11 7951 ll:= ll+1; 11 7952 until ll=3 or d.iaf.resultat=3; 11 7953 <* ********* *> 11 7954 signalch(cs_tvswitch_adgang,iaf,op_optype); 11 7955 if res<>1 then 11 7956 op_talevej(nr):=tv_operatør(op_talevej(nr)):= 0; 11 7957 end; 10 7958 end; 9 7959 if op_talevej(nr)=0 then res:= 61; 9 7960 d.op_ref.data(1):= op_talevej(nr); 9 7961 9 7961 if res <= 1 then 9 7962 begin 10 7963 til_radio: <* send operation til radiomodul *> 10 7964 d.op_ref.opkode:= opgave shift 12 + 41; 10 7965 d.op_ref.data(5):= if b_v<>0 then 12 shift 20 + b_v 10 7966 else 0; 10 7967 d.op_ref.data(6):= b_s; 10 7968 d.op_ref.resultat:=0; 10 7969 d.op_ref.retur:= cs_operatør(nr); 10 7970 indeks:= op_ref; 10 7971 <*+2*> if testbit11 and overvåget then 10 7972 disable begin 11 7973 skriv_operatør(out,0); 11 7974 write(out,<: operation til radio:>); 11 7975 skriv_op(out,op_ref); ud; 11 7976 end; 10 7977 <*-2*> 10 7978 signal_ch(cs_rad,op_ref,gen_optype or op_optype); 10 7979 <*V*> wait_ch(cs_operatør(nr),op_ref,op_optype,-1); 10 7980 10 7980 <*+2*> if testbit12 and overvåget then 10 7981 disable begin 11 7982 skriv_operatør(out,0); 11 7983 write(out,<: operation retur fra radio:>); 11 7984 skriv_op(out,op_ref); ud; 11 7985 end; 10 7986 <*-2*> 10 7987 <*+4*> if op_ref <> indeks then 10 7988 fejlreaktion(11<*fr.post*>,op_ref, 10 7989 <:operatør, retur fra radio:>,0); 10 7990 <*-4*> 10 7991 \f 10 7991 message procedure operatør side 11 - 810529/hko; 10 7992 10 7992 res:= d.op_ref.resultat; 10 7993 if res < 2 or (res > 3 and (res<>49 or opgave<>11)) then 10 7994 begin 11 7995 <*+4*> if res < 2 then 11 7996 fejlreaktion(3<*prg.fejl*>,res, 11 7997 <: operatør,radio_op,resultat:>,1); 11 7998 <*-4*> 11 7999 if res = 1 then res:= 0; 11 8000 if (opgave < 10) and (res=20 or res=52) then 11 8001 disable tæl_opkald_pr_operatør(nr, 11 8002 (if res=20 then 4 else 5)); 11 8003 end 10 8004 else 10 8005 begin <* res = 2 eller 3 *> 11 8006 s_kanal:= v_kanal:= 0; 11 8007 opgave:= d.opref.opkode shift (-12); 11 8008 bv:= d.op_ref.data(5) extract 4; 11 8009 bs:= d.op_ref.data(6); 11 8010 if opgave < 10 then 11 8011 begin 12 8012 j:= d.op_ref.data(7) <*type*>; 12 8013 i:= terminal_tab.ref(1) shift (-12) shift 12 extract 21; 12 8014 i:= i + (if opgave=2 or opgave>3 then 2 else 1); 12 8015 terminal_tab.ref(1):= i 12 8016 +(if res=2 then 4 <*optaget*> else 0) 12 8017 +(if (opgave=1 or opgave=9) and j = 2 <*nødopkald*> 12 8018 then 8 <*nød*> else 0) 12 8019 +(if opgave=1 and j > 0 and j < 3 <*mobilopkald*> 12 8020 then 16 else 0) 12 8021 + (if opgave mod 2 = 0 then 64 <*pas*> else 0) 12 8022 + (if opgave=9 then 128 else 12 8023 if opgave>=7 then 256 else 12 8024 if opgave>=5 then 512 else 0) 12 8025 + (if res = 2 then 2 shift 21 <*tilstand = optaget *> 12 8026 else if b_s = 0 then 0 <*tilstand = ledig *> 12 8027 else 1 shift 21 <*tilstand = samtale*>); 12 8028 if (res=3 and 0<=j and j<3) then 12 8029 disable tæl_opkald_pr_operatør(nr,j+1); 12 8030 end 11 8031 else if opgave=10 <*monitering*> or 11 8032 opgave=14 <*ventepos *> then 11 8033 begin 12 8034 <*+4*> if res = 2 then 12 8035 fejlreaktion(3<*prg.fejl*>,res, 12 8036 <: operatør,moniter,res:>,1); 12 8037 <*-4*> 12 8038 iaf:= (bs extract 4 -1)*kanal_beskr_længde; 12 8039 i:= if bs<0 then 12 8040 kanaltab.iaf.kanal_tilstand extract 12 else 0; 12 8041 terminal_tab.ref(1):= i + 12 8042 (if bs < 0 then (1 shift 21) else 0); 12 8043 if opgave=10 then 12 8044 begin 13 8045 s_kanal:= bs; 13 8046 v_kanal:= d.opref.data(5); 13 8047 end; 12 8048 \f 12 8048 message procedure operatør side 12 - 810603/hko; 12 8049 end 11 8050 else if opgave=11 or opgave=12 then 11 8051 begin 12 8052 <*+4*> if res = 2 then 12 8053 fejlreaktion(3<*prg.fejl*>,res, 12 8054 <: operatør,ge/ne,res:>,1); 12 8055 <*-4*> 12 8056 if opgave=11 <*GE*> and res<>49 then 12 8057 begin 13 8058 s_kanal:= terminal_tab.ref(2); 13 8059 v_kanal:= 12 shift 20 + 13 8060 (terminal_tab.ref(1) shift (-12) extract 4); 13 8061 end; 12 8062 terminal_tab.ref(1):= 0; <* s og v felt nedlagt *> 12 8063 end 11 8064 else 11 8065 if opgave=13 then 11 8066 begin 12 8067 if res=2 then 12 8068 fejlreaktion(3<*prg.fejl*>,res, 12 8069 <:operatør,R,res:>,1); 12 8070 sætbit_i(terminaltab.ref.terminaltilstand,11, 12 8071 d.opref.data(2)); 12 8072 end 11 8073 <*+4*> else fejlreaktion(3,opgave,<:operatør, opgave:>,0) 11 8074 <*-4*> 11 8075 ; 11 8076 <*indsæt kanal_nr for b_v_felt i terminalbeskr.*> 11 8077 11 8077 sæt_hex_ciffer(terminal_tab.ref,3,b_v extract 4); 11 8078 terminal_tab.ref(2):= b_s; 11 8079 terminal_tab.ref(3):= d.op_ref.data(11); 11 8080 if (opgave<10 or opgave=14) and res=3 then 11 8081 <*så henviser b_s til radiokanal*> 11 8082 begin 12 8083 if bs shift (-20) = 12 then 12 8084 begin 13 8085 iaf:= (bs extract 4 -1)*kanal_beskr_længde; 13 8086 kanaltab.iaf.kanal_tilstand:= 13 8087 kanaltab.iaf.kanal_tilstand shift(-10) shift 10 13 8088 +terminal_tab.ref(1) extract 10; 13 8089 end 12 8090 else 12 8091 begin 13 8092 for i:= 1 step 1 until max_antal_kanaler do 13 8093 begin 14 8094 if læsbit_i(bs,i) then 14 8095 begin 15 8096 iaf:= (i-1)*kanal_beskr_længde; 15 8097 kanaltab.iaf.kanaltilstand:= 15 8098 kanaltab.iaf.kanaltilstand shift (-10) shift 10 15 8099 + terminal_tab.ref(1) extract 10; 15 8100 end; 14 8101 end; 13 8102 end; 12 8103 end; 11 8104 if kode=15 or kode=16 then 11 8105 begin 12 8106 if opgave<10 then 12 8107 begin 13 8108 opgave:= 11; 13 8109 kanal:= (12 shift 20) + 13 8110 d.opref.data(6) extract 20; 13 8111 goto til_radio; 13 8112 end 12 8113 else 12 8114 if opgave=11 then 12 8115 begin 13 8116 opgave:= 10; 13 8117 d.opref.data(2):= kanal; 13 8118 goto til_radio; 13 8119 end; 12 8120 end 11 8121 else 11 8122 if (kode=1 or kode=3) then 11 8123 begin 12 8124 if opgave<10 and bv<>0 then 12 8125 begin 13 8126 opgave:= 14; 13 8127 d.opref.data(2):= 2; 13 8128 goto til_radio; 13 8129 end; 12 8130 end; 11 8131 <*V*> skriv_skærm_b_v_s(nr); 11 8132 <*V*> if sætbit_ia(opkaldsflag,nr,0) = 1 then 11 8133 skriv_skærm_opkaldskø(nr); 11 8134 for i:= s_kanal, v_kanal do 11 8135 if i<0 then skriv_skærm_kanal(nr,i extract 4); 11 8136 tofrom(kanalflag,alle_operatører,op_maske_lgd); 11 8137 signalbin(bs_mobilopkald); 11 8138 <*V*> setposition(z_op(nr),0,0); 11 8139 end; <* res = 2 eller 3 *> 10 8140 end; <* res <= 1 *> 9 8141 <* frigiv talevej (om nødvendigt) *> 9 8142 if læs_hex_ciffer(terminal_tab.ref,3,b_v)=0 9 8143 and terminal_tab.ref(2)=0 <*b_s*> 9 8144 and op_talevej(nr)<>0 9 8145 then 9 8146 begin 10 8147 <*V*> waitch(cs_tvswitch_adgang,iaf,op_optype,-1); 10 8148 start_operation(iaf,200+nr,cs_operatør(nr), 10 8149 'D' shift 12 + 44); 10 8150 d.iaf.data(1):= op_talevej(nr); 10 8151 d.iaf.data(2):= nr+16; 10 8152 ll:= 0; 10 8153 repeat 10 8154 signalch(cs_talevejsswitch,iaf,op_optype); 10 8155 <*V*> waitch(cs_operatør(nr),iaf,op_optype,-1); 10 8156 ll:= ll+1; 10 8157 until ll=3 or d.iaf.resultat=3; 10 8158 ll:= d.iaf.resultat; 10 8159 signalch(cs_tvswitch_adgang,iaf,op_optype); 10 8160 if ll<>3 then 10 8161 fejlreaktion(21,op_talevej(nr)*100+nr, 10 8162 <:frigiv operatør fejlet:>,1) 10 8163 else 10 8164 op_talevej(nr):= tv_operatør(op_talevej(nr)):= 0; 10 8165 skriv_skærm_b_v_s(nr); 10 8166 end; 9 8167 disable if testbit14 then 9 8168 begin 10 8169 integer t; <*lav en trap-bar blok*> 10 8170 10 8170 trap(test14_trap); 10 8171 systime(1,0,kommslut); 10 8172 write(zrl,<<zd dd dd.dd >,now,<:op:>,<<d__>,nr, 10 8173 string bpl_navn(nr),<: slut :>,case rkom of ( 10 8174 <:OP:>,<:ME:>,<:OP,G:>,<:ME,G:>,<:OP,A:>,<:ME,A:>, 10 8175 <:KA,C:>,<:KA,P:>,<:OP,L:>,<:MO:>,<:VE:>,<:NE:>, 10 8176 <:OP,V:>,<:OP,T:>,<:R:>,<:GE:>,<:GE,G:>,<:GE,V:>, 10 8177 <:GE,T:>),<: :>); 10 8178 if (rkom<5 or rkom=9 or rkom=13 or rkom=14 or 10 8179 rkom=16 or rkom=17 or rkom=19) 10 8180 then 10 8181 begin 11 8182 if d.opref.data(7)=2 then outchar(zrl,'*'); 11 8183 if d.opref.data(9)<>0 then 11 8184 begin 12 8185 skriv_id(zrl,d.opref.data(9),0); 12 8186 outchar(zrl,' '); 12 8187 end; 11 8188 if d.opref.data(8)<>0 then 11 8189 begin 12 8190 skriv_id(zrl,d.opref.data(8),0); 12 8191 outchar(zrl,' '); 12 8192 end; 11 8193 if d.opref.data(8)=0 and d.opref.data(9)=0 and 11 8194 d.opref.data(2)<>0 then 11 8195 begin 12 8196 skriv_id(zrl,d.opref.data(2),0); 12 8197 outchar(zrl,' '); 12 8198 end; 11 8199 if d.opref.data(12)<>0 then 11 8200 begin 12 8201 if d.opref.data(12) shift (-20) = 15 then 12 8202 write(zrl,<:OMR*:>) 12 8203 else 12 8204 if d.opref.data(12) shift (-20) = 14 then 12 8205 write(zrl, 12 8206 string områdenavn(d.opref.data(12) extract 20)) 12 8207 else 12 8208 skriv_id(zrl,d.opref.data(12),0); 12 8209 outchar(zrl,' '); 12 8210 end; 11 8211 t:= terminal_tab.ref.terminaltilstand extract 10; 11 8212 if res=3 and rkom=1 and 11 8213 (t shift (-4) extract 1 = 1) and 11 8214 (t extract 2 <> 3) 11 8215 then 11 8216 begin 12 8217 iaf:= (terminal_tab.ref(2) extract 20 - 1)* 12 8218 kanal_beskr_længde; 12 8219 write(zrl,<<zd.dd>,(kanal_tab.iaf.kanal_spec 12 8220 extract 12)/100," ",1); 12 8221 end; 11 8222 if d.opref.data(10)<>0 then 11 8223 begin 12 8224 skriv_id(zrl,d.opref.data(10),0); 12 8225 outchar(zrl,' '); 12 8226 end; 11 8227 end 10 8228 else 10 8229 if rkom=10 and par1<>0 then 10 8230 write(zrl,string kanalnavn(par1 extract 20),"sp",1) 10 8231 else 10 8232 if rkom=5 or rkom=6 then 10 8233 begin 11 8234 if par1 shift (-20)=15 then write(zrl,<:ALLE:>) else 11 8235 if par1 shift (-20)=14 then 11 8236 write(zrl,string områdenavn(par1 extract 20)); 11 8237 outchar(zrl,' '); 11 8238 end; 10 8239 if op_talevej(nr) > 0 then 10 8240 write(zrl,<:T:>,<<d>,op_talevej(nr)," ",1); 10 8241 write(zrl,<:res=:>,<<d>,res,<: btid=:>, 10 8242 <<dd.dd>,kommslut-kommstart); 10 8243 test14_trap: outchar(zrl,'nl'); 10 8244 end; 9 8245 9 8245 <*V*> setposition(z_op(nr),0,0); 9 8246 cursor(z_op(nr),24,1); 9 8247 <*V*> skriv_kvittering(z_op(nr),op_ref,-1,res); 9 8248 end; <* radio-kommando *> 8 8249 begin 9 8250 \f 9 8250 message procedure operatør side 13 - 810518/hko; 9 8251 9 8251 <* 4 stop kommando *> 9 8252 9 8252 status:= skærm_status(tilstand,b_v,b_s,b_s_tilst); 9 8253 if tilstand <> 0 then 9 8254 begin 10 8255 d.op_ref.resultat:= 16; <*skærm optaget*> 10 8256 end 9 8257 else 9 8258 begin 10 8259 d.op_ref.retur:= cs_operatør(nr); 10 8260 d.op_ref.resultat:= 0; 10 8261 d.op_ref.data(1):= nr; 10 8262 indeks:= op_ref; 10 8263 <*+2*> if testbit11 and overvåget then 10 8264 disable begin 11 8265 skriv_operatør(out,0); 11 8266 write(out,<: stop_operation til radio:>); 11 8267 skriv_op(out,op_ref); ud; 11 8268 end; 10 8269 <*-2*> 10 8270 if opk_alarm.tab.alarm_tilst > 0 then 10 8271 begin 11 8272 opk_alarm.tab.alarm_kmdo:= 3; 11 8273 signal_bin(bs_opk_alarm); 11 8274 end; 10 8275 10 8275 signal_ch(cs_rad,op_ref,gen_optype or op_optype); 10 8276 <*V*> wait_ch(cs_operatør(nr),op_ref,op_optype,-1); 10 8277 <*+2*> if testbit12 and overvåget then 10 8278 disable begin 11 8279 skriv_operatør(out,0); 11 8280 write(out,<: operation retur fra radio:>); 11 8281 skriv_op(out,op_ref); ud; 11 8282 end; 10 8283 <*-2*> 10 8284 <*+4*> if indeks <> op_ref then 10 8285 fejlreaktion(11<*fr.post*>,op_ref, 10 8286 <: operatør, retur fra radio:>,0); 10 8287 <*-4*> 10 8288 \f 10 8288 message procedure operatør side 14 - 810527/hko; 10 8289 10 8289 if d.op_ref.resultat = 3 then 10 8290 begin 11 8291 integer k,n; 11 8292 integer array field msk,iaf1; 11 8293 11 8293 terminal_tab.ref.terminal_tilstand:= 3 shift 21 11 8294 +terminal_tab.ref.terminal_tilstand extract 21; 11 8295 tofrom(opkaldsflag,alle_operatører,op_maske_lgd); 11 8296 if sæt_bit_ia(operatørmaske,nr,0)=1 then 11 8297 for k:= nr, 65 step 1 until top_bpl_gruppe do 11 8298 begin 12 8299 msk:= k*op_maske_lgd; 12 8300 if læsbit_ia(bpl_def.msk,nr) then 12 8301 <**> begin 13 8302 n:= 0; 13 8303 for i:= 1 step 1 until max_antal_operatører do 13 8304 if læsbit_ia(bpl_def.msk,i) then 13 8305 begin 14 8306 iaf1:= i*terminal_beskr_længde; 14 8307 if terminal_tab.iaf1.terminal_tilstand 14 8308 shift (-21) < 3 then 14 8309 n:= n+1; 14 8310 end; 13 8311 bpl_tilst(k,1):= n; 13 8312 end; 12 8313 <**> <* 12 8314 bpl_tilst(k,1):= bpl_tilst(k,1)-1; 12 8315 *> end; 11 8316 signal_bin(bs_mobil_opkald); 11 8317 <*V*> setposition(z_op(nr),0,0); 11 8318 ht_symbol(z_op(nr)); 11 8319 end; 10 8320 end; 9 8321 <*V*> setposition(z_op(nr),0,0); 9 8322 cursor(z_op(nr),24,1); 9 8323 if d.op_ref.resultat<> 3 then 9 8324 skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat); 9 8325 end; 8 8326 begin 9 8327 boolean l22; 9 8328 \f 9 8328 message procedure operatør side 15 - 810521/cl; 9 8329 9 8329 <* 5 springdefinition *> 9 8330 l22:= false; 9 8331 if sep=',' then 9 8332 disable begin 10 8333 setposition(z_op(nr),0,0); 10 8334 cursor(z_op(nr),22,1); 10 8335 write(z_op(nr),"esc" add 128,1,<:ÆK:>,">",1); 10 8336 l22:= true; pos:= 1; 10 8337 while læstegn(d.op_ref.data,pos,i)<>0 do 10 8338 outchar(z_op(nr),i); 10 8339 end; 9 8340 9 8340 tofrom(d.op_ref.data,ia,indeks*2); 9 8341 <*V*> wait_ch(cs_op_fil(nr),vt_op,true,-1<*timeout*>); 9 8342 start_operation(vt_op,200+nr,cs_operatør(nr), 9 8343 101<*opret fil*>); 9 8344 d.vt_op.data(1):=128;<*postantal*> 9 8345 d.vt_op.data(2):=2; <*postlængde*> 9 8346 d.vt_op.data(3):=1; <*segmentantal*> 9 8347 d.vt_op.data(4):= 9 8348 2 shift 10; <*spool fil*> 9 8349 signal_ch(cs_opret_fil,vt_op,op_optype); 9 8350 pos:=vt_op;<*variabel lånes*> 9 8351 <*V*> wait_ch(cs_operatør(nr),vt_op,op_optype,-1<*timeout*>); 9 8352 <*+4*> if vt_op<>pos then 9 8353 fejlreaktion(11<*fremmed post*>,vt_op,<:springdef:>,0); 9 8354 if d.vt_op.data(9)<>0 then 9 8355 fejlreaktion(13<*opret-fil*>,d.vt_op.data(9), 9 8356 <:op kommando(springdefinition):>,0); 9 8357 <*-4*> 9 8358 iaf:=0; 9 8359 for i:=1 step 1 until indeks-2 do 9 8360 begin 10 8361 disable k:=modif_fil(d.vt_op.data(4),i,j); 10 8362 if k<>0 then 10 8363 fejlreaktion(7<*modif-fil*>,k, 10 8364 <:op kommando(spring-def):>,0); 10 8365 fil(j).iaf(1):=d.op_ref.data(i+2); 10 8366 end; 9 8367 \f 9 8367 message procedure operatør side 15a - 820301/cl; 9 8368 9 8368 while sep = ',' do 9 8369 begin 10 8370 setposition(z_op(nr),0,0); 10 8371 cursor(z_op(nr),23,1); 10 8372 write(z_op(nr),"esc" add 128,1,<:ÆK:>,<:+>:>); 10 8373 setposition(z_op(nr),0,0); 10 8374 wait(bs_fortsæt_adgang); 10 8375 pos:= 1; j:= 0; 10 8376 while læs_store(z_op(nr),i) < 8 do 10 8377 begin 11 8378 skrivtegn(fortsæt,pos,i); 11 8379 if i = '?' or i = 'esc' then j:= 1; <* skip kommando *> 11 8380 end; 10 8381 skrivtegn(fortsæt,pos,'em'); 10 8382 afsluttext(fortsæt,pos); 10 8383 sluttegn:= i; 10 8384 if j<>0 then 10 8385 begin 11 8386 setposition(z_op(nr),0,0); 11 8387 cursor(z_op(nr),24,1); 11 8388 skriv_kvittering(z_op(nr),opref,-1,53);<*annulleret*> 11 8389 cursor(z_op(nr),1,1); 11 8390 goto sp_ann; 11 8391 end; 10 8392 \f 10 8392 message procedure operatør side 16 - 810521/cl; 10 8393 10 8393 disable begin 11 8394 integer array værdi(1:4); 11 8395 integer a_pos,res; 11 8396 pos:= 0; 11 8397 repeat 11 8398 apos:= pos; 11 8399 læs_paramsæt(fortsæt,a_pos,0,værdi,sep,res); 11 8400 if res >= 0 then 11 8401 begin 12 8402 if res=0 and (sep=',' or indeks>2) then <*ok*> 12 8403 else if res=0 then res:= -25 <*parameter mangler*> 12 8404 else if res=10 and (værdi(1)<1 or værdi(1)>99) then 12 8405 res:= -44 <*intervalstørrelse ulovlig*> 12 8406 else if res=10 and (værdi(2)<1 or værdi(2)>99) then 12 8407 res:= -6 <*løbnr ulovligt*> 12 8408 else if res=10 then 12 8409 begin 13 8410 k:=modiffil(d.vt_op.data(4),indeks-1,j); 13 8411 if k<>0 then fejlreaktion(7<*modiffil*>,k, 13 8412 <:op kommando(spring-def):>,0); 13 8413 iaf:= 0; 13 8414 fil(j).iaf(1):= værdi(1) shift 12 + værdi(2); 13 8415 indeks:= indeks+1; 13 8416 if sep = ',' then res:= 0; 13 8417 end 12 8418 else res:= -27; <*parametertype*> 12 8419 end; 11 8420 if res>0 then pos:= a_pos; 11 8421 until sep<>'sp' or res<=0; 11 8422 11 8422 if res<0 then 11 8423 begin 12 8424 d.op_ref.resultat:= -res; 12 8425 i:=1; j:= 1; 12 8426 hægt_tekst(d.op_ref.data,i,fortsæt,j); 12 8427 afsluttext(d.op_ref.data,i); 12 8428 end; 11 8429 end; 10 8430 \f 10 8430 message procedure operatør side 17 - 810521/cl; 10 8431 10 8431 if d.op_ref.resultat > 3 then 10 8432 begin 11 8433 setposition(z_op(nr),0,0); 11 8434 if l22 then 11 8435 begin 12 8436 cursor(z_op(nr),22,1); l22:= false; 12 8437 write(z_op(nr),"-",80); 12 8438 end; 11 8439 cursor(z_op(nr),24,1); 11 8440 skriv_kvittering(z_op(nr),op_ref,pos,d.opref.resultat); 11 8441 goto sp_ann; 11 8442 end; 10 8443 if sep=',' then 10 8444 begin 11 8445 setposition(z_op(nr),0,0); 11 8446 cursor(z_op(nr),22,1); 11 8447 write(z_op(nr),"esc" add 128,1,<:ÆK:>,<:+>:>); 11 8448 pos:= 1; l22:= true; 11 8449 while læstegn(fortsæt,pos,i)<>0 do 11 8450 outchar(z_op(nr),i); 11 8451 end; 10 8452 signalbin(bs_fortsæt_adgang); 10 8453 end while sep = ','; 9 8454 d.vt_op.data(1):= indeks-2; 9 8455 k:= sætfildim(d.vt_op.data); 9 8456 if k<>0 then fejlreaktion(9,k,<:op kommando(spring-def):>,0); 9 8457 d.op_ref.data(3):= d.vt_op.data(4); <*filref*> 9 8458 signalch(cs_op_fil(nr),vt_op,op_optype or gen_optype); 9 8459 d.op_ref.retur:=cs_operatør(nr); 9 8460 pos:=op_ref; 9 8461 signal_ch(cs_vt,op_ref,gen_optype or op_optype); 9 8462 <*V*> wait_ch(cs_operatør(nr),op_ref,op_optype,-1<*timeout*>); 9 8463 <*+4*> if pos<>op_ref then 9 8464 fejlreaktion(11<*fremmed post*>,op_ref, 9 8465 <:op kommando(springdef retur fra vt):>,0); 9 8466 <*-4*> 9 8467 \f 9 8467 message procedure operatør side 18 - 810521/cl; 9 8468 9 8468 <*V*> setposition(z_op(nr),0,0); 9 8469 if l22 then 9 8470 begin 10 8471 cursor(z_op(nr),22,1); 10 8472 write(z_op(nr),"-",80); 10 8473 end; 9 8474 cursor(z_op(nr),24,1); 9 8475 skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat); 9 8476 9 8476 if false then 9 8477 begin 10 8478 sp_ann: signalch(cs_slet_fil,vt_op,op_optype); 10 8479 waitch(cs_operatør(nr),vt_op,op_optype,-1); 10 8480 signalch(cs_op_fil(nr),vt_op,op_optype or vt_optype); 10 8481 signalbin(bs_fortsæt_adgang); 10 8482 end; 9 8483 9 8483 end; 8 8484 8 8484 begin 9 8485 \f 9 8485 message procedure operatør side 19 - 810522/cl; 9 8486 9 8486 <* 6 spring (igangsæt) 9 8487 spring,annuler 9 8488 spring,reserve *> 9 8489 9 8489 tofrom(d.op_ref.data,ia,6); 9 8490 d.op_ref.retur:=cs_operatør(nr); 9 8491 indeks:=op_ref; 9 8492 signal_ch(cs_vt,op_ref,gen_optype or op_optype); 9 8493 <*V*> wait_ch(cs_operatør(nr), 9 8494 op_ref, 9 8495 op_optype, 9 8496 -1<*timeout*>); 9 8497 <*+2*> if testbit10 and overvåget then 9 8498 disable begin 10 8499 skriv_operatør(out,0); 10 8500 write(out,"nl",1,<:op operation retur fra vt:>); 10 8501 skriv_op(out,op_ref); 10 8502 end; 9 8503 <*-2*> 9 8504 <*+4*> if indeks<>op_ref then 9 8505 fejlreaktion(11<*fremmed post*>,op_ref, 9 8506 <:op kommando(spring):>,0); 9 8507 <*-4*> 9 8508 9 8508 <*V*> setposition(z_op(nr),0,0); 9 8509 cursor(z_op(nr),24,1); 9 8510 skriv_kvittering(z_op(nr),if (d.op_ref.resultat=11 or 9 8511 d.op_ref.resultat=12) and kode=34 <*SP,R*> then 9 8512 d.op_ref.data(4) else op_ref,-1,d.op_ref.resultat); 9 8513 end; 8 8514 8 8514 begin 9 8515 \f 9 8515 message procedure operatør side 20 - 810525/cl; 9 8516 9 8516 <* 7 spring(-oversigts-)rapport *> 9 8517 9 8517 d.op_ref.retur:=cs_operatør(nr); 9 8518 tofrom(d.op_ref.data,ia,4); 9 8519 indeks:=op_ref; 9 8520 signal_ch(cs_vt,op_ref,gen_optype or op_optype); 9 8521 <*V*> wait_ch(cs_operatør(nr),op_ref,op_optype,-1<*timeout*>); 9 8522 <*+2*> disable if testbit10 and overvåget then 9 8523 begin 10 8524 write(out,"nl",1,<:operatør operation retur fra vt:>); 10 8525 skriv_op(out,op_ref); 10 8526 end; 9 8527 <*-2*> 9 8528 9 8528 <*+4*> if op_ref<>indeks then 9 8529 fejlreaktion(11<*fremmed post*>,op_ref, 9 8530 <:op kommando(spring-rapport):>,0); 9 8531 <*-4*> 9 8532 9 8532 <*V*> setposition(z_op(nr),0,0); 9 8533 if d.op_ref.resultat<>3 then 9 8534 begin 10 8535 cursor(z_op(nr),24,1); 10 8536 skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat); 10 8537 end 9 8538 else 9 8539 begin 10 8540 boolean p_skrevet; 10 8541 integer bogst,løb; 10 8542 10 8542 skærmmåde:= 1; 10 8543 10 8543 if kode = 32 then <* spring,vis *> 10 8544 begin 11 8545 ll:= d.op_ref.data(1) shift (-5) extract 10; 11 8546 bogst:= d.op_ref.data(1) extract 5; 11 8547 if bogst<>0 then bogst:= bogst + 'A' - 1; 11 8548 <*V*> write(z_op(nr),"esc" add 128,1,<:ÆH:>, 11 8549 "esc" add 128,1,<:ÆJ:>,"sp",10,"*",5,"sp",5, 11 8550 <:spring: :>, 11 8551 <<d>,ll,false add bogst,(bogst<>0) extract 1, 11 8552 <:.:>,string (extend d.op_ref.data(2) shift 24)); 11 8553 raf:= data+8; 11 8554 if d.op_ref.raf(1)<>0.0 then 11 8555 write(z_op(nr),<:, startet :>,<<zddddd>, 11 8556 round systime(4,d.op_ref.raf(1),r),<:.:>,round r) 11 8557 else write(z_op(nr),<:, ikke startet:>); 11 8558 write(z_op(nr),"sp",5,"*",5,"nl",2); 11 8559 \f 11 8559 message procedure operatør side 21 - 810522/cl; 11 8560 11 8560 p_skrevet:= false; 11 8561 for pos:=1 step 1 until d.op_ref.data(3) do 11 8562 begin 12 8563 disable i:=læsfil(d.op_ref.data(4),pos,j); 12 8564 if i<>0 then 12 8565 fejlreaktion(5<*læsfil*>,i, 12 8566 <:op kommando(spring,vis):>,0); 12 8567 iaf:=0; 12 8568 i:= fil(j).iaf(1); 12 8569 if i < 0 and -, p_skrevet then 12 8570 begin 13 8571 outchar(z_op(nr),'('); p_skrevet:= true; 13 8572 end; 12 8573 if i > 0 and p_skrevet then 12 8574 begin 13 8575 outchar(z_op(nr),')'); p_skrevet:= false; 13 8576 end; 12 8577 if pos mod 2 = 0 then 12 8578 write(z_op(nr),<< dd>,abs i,<:.:>) 12 8579 else 12 8580 write(z_op(nr),true,3,<<d>,abs i); 12 8581 if pos mod 21 = 0 then outchar(z_op(nr),'nl'); 12 8582 end; 11 8583 write(z_op(nr),"*",1); 11 8584 \f 11 8584 message procedure operatør side 22 - 810522/cl; 11 8585 11 8585 end 10 8586 else if kode=33 then <* spring,oversigt *> 10 8587 begin 11 8588 write(z_op(nr),"esc" add 128,1,<:ÆH:>, 11 8589 "esc" add 128,1,<:ÆJ:>,"sp",10,"*",5,"sp",5, 11 8590 <:spring oversigt:>,"sp",5,"*",5,"nl",2); 11 8591 11 8591 for pos:=1 step 1 until d.op_ref.data(1) do 11 8592 begin 12 8593 disable i:=læsfil(d.op_ref.data(2),pos,j); 12 8594 if i<>0 then 12 8595 fejlreaktion(5<*læsfil*>,i, 12 8596 <:op kommando(spring-oversigt):>,0); 12 8597 iaf:=0; 12 8598 ll:=fil(j).iaf(1) shift (-5) extract 10; 12 8599 bogst:=fil(j).iaf(1) extract 5; 12 8600 if bogst<>0 then bogst:=bogst + 'A' - 1; 12 8601 write(z_op(nr),"sp",(bogst=0) extract 1 + 1,<<ddd>,ll, 12 8602 false add bogst,(bogst<>0) extract 1,<:.:>,true,4, 12 8603 string (extend fil(j).iaf(2) shift 24)); 12 8604 if fil(j,2)<>0.0 then 12 8605 write(z_op(nr),<:startet :>,<<zddddd>, 12 8606 round systime(4,fil(j,2),r),<:.:>,round r); 12 8607 outchar(z_op(nr),'nl'); 12 8608 end; 11 8609 write(z_op(nr),"*",1); 11 8610 end; 10 8611 <* slet fil *> 10 8612 d.op_ref.opkode:= 104; 10 8613 if kode=33 then d.op_ref.data(4):= d.op_ref.data(2); 10 8614 signalch(cs_slet_fil,op_ref,gen_optype or op_optype); 10 8615 waitch(cs_operatør(nr),op_ref,op_optype or gen_optype,-1); 10 8616 end; <* resultat=3 *> 9 8617 9 8617 end; 8 8618 8 8618 begin 9 8619 \f 9 8619 message procedure operatør side 23 - 940522/cl; 9 8620 9 8620 9 8620 <* 8 SLUT *> 9 8621 trapmode:= 1 shift 13; 9 8622 trap(-2); 9 8623 end; 8 8624 8 8624 begin 9 8625 <* 9 stopniveauer,definer *> 9 8626 integer fno; 9 8627 9 8627 for i:= 1 step 1 until 3 do 9 8628 operatør_stop(nr,i):= ia(i+1); 9 8629 i:= modif_fil(tf_stoptabel,nr,fno); 9 8630 if i<>0 then fejlreaktion(7,i,<:stoptabel:>,0); 9 8631 iaf:=0; 9 8632 for i:= 0,1,2,3 do 9 8633 fil(fno).iaf(i+1):= operatør_stop(nr,i); 9 8634 setposition(fil(fno),0,0); 9 8635 setposition(z_op(nr),0,0); 9 8636 cursor(z_op(nr),24,1); 9 8637 skriv_kvittering(z_op(nr),0,-1,3); 9 8638 end; 8 8639 8 8639 begin 9 8640 \f 9 8640 message procedure operatør side 24 - 940522/cl; 9 8641 9 8641 <* 10 stopniveauer,vis *> 9 8642 integer bpl,j,k; 9 8643 9 8643 skærm_måde:= 1; 9 8644 setposition(z_op(nr),0,0); 9 8645 write(z_op(nr),"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>, 9 8646 <:stopniveauer: :>); 9 8647 for i:= 0 step 1 until 3 do 9 8648 begin 10 8649 bpl:= operatør_stop(nr,i); 10 8650 write(z_op(nr),if i=0 then <: :> else <: -> :>, 10 8651 if bpl=0 then <:ALLE:> else string bpl_navn(bpl)); 10 8652 end; 9 8653 write(z_op(nr),"nl",2,<:operatørpladser: :>); 9 8654 j:=0; 9 8655 for bpl:= 1 step 1 until max_antal_operatører do 9 8656 if bpl_navn(bpl)<>long<::> then 9 8657 begin 10 8658 if j mod 8 = 0 and j > 0 then 10 8659 write(z_op(nr),"nl",1,"sp",18); 10 8660 iaf:= bpl*terminal_beskr_længde; 10 8661 write(z_op(nr),if bpl_tilst(bpl,1) > 0 then "*" else " ",1, 10 8662 true,6,string bpl_navn(bpl)); 10 8663 j:=j+1; 10 8664 end; 9 8665 write(z_op(nr),"nl",2,<:operatørgrupper: :>); 9 8666 j:=0; 9 8667 for bpl:= 65 step 1 until top_bpl_gruppe do 9 8668 if bpl_navn(bpl)<>long<::> then 9 8669 begin 10 8670 if j mod 8 = 0 and j > 0 then 10 8671 write(z_op(nr),"nl",1,"sp",19); 10 8672 write(z_op(nr),true,7,string bpl_navn(bpl)); 10 8673 j:=j+1; 10 8674 end; 9 8675 write(z_op(nr),"nl",1,"*",1); 9 8676 end; 8 8677 8 8677 begin 9 8678 <* 11 alarmlængde *> 9 8679 integer fno; 9 8680 9 8680 if indeks > 0 then 9 8681 begin 10 8682 opk_alarm.tab.alarm_lgd:= ia(1); 10 8683 i:= modiffil(tf_alarmlgd,nr,fno); 10 8684 if i<>0 then fejlreaktion(7,i,<:alarmlgd:>,0); 10 8685 iaf:= 0; 10 8686 fil(fno).iaf(1):= opk_alarm.tab.alarm_lgd; 10 8687 setposition(fil(fno),0,0); 10 8688 end; 9 8689 9 8689 setposition(z_op(nr),0,0); 9 8690 cursor(z_op(nr),24,1); 9 8691 skriv_kvittering(z_op(nr),opk_alarm.tab.alarm_lgd,-1,63); 9 8692 end; 8 8693 8 8693 begin 9 8694 <* 12 CC *> 9 8695 integer i, c; 9 8696 9 8696 i:= 1; 9 8697 while læstegn(ia,i+0,c)<>0 and 9 8698 i<(op_spool_postlgd-op_spool_text)//2*3 9 8699 do skrivtegn(d.opref.data,i,c); 9 8700 repeat skrivtegn(d.opref.data,i,0) until (i mod 6)=1; 9 8701 9 8701 d.opref.retur:= cs_operatør(nr); 9 8702 signalch(cs_op_spool,opref,op_optype); 9 8703 <*V*> waitch(cs_operatør(nr),opref,op_optype,-1); 9 8704 9 8704 setposition(z_op(nr),0,0); 9 8705 cursor(z_op(nr),24,1); 9 8706 skriv_kvittering(z_op(nr),opref,-1,d.opref.resultat); 9 8707 end; 8 8708 8 8708 <* 13 EXkluder skærmen *> 8 8709 begin 9 8710 d.opref.resultat:= 2; 9 8711 setposition(z_op(nr),0,0); 9 8712 cursor(z_op(nr),24,1); 9 8713 skriv_kvittering(z_op(nr),opref,-1,d.opref.resultat); 9 8714 9 8714 waitch(cs_op_fil(nr),vt_op,true,-1); 9 8715 start_operation(vt_op,curr_coruid,cs_op_fil(nr),2); 9 8716 d.vt_op.data(1):= nr; 9 8717 signalch(cs_rad,vt_op,gen_optype); 9 8718 end; 8 8719 8 8719 begin 9 8720 <* 14 CQF-tabel,vis *> 9 8721 9 8721 skærm_måde:= 1; 9 8722 setposition(z_op(nr),0,0); 9 8723 write(z_op(nr),"esc" add 128,1,<:ÆH:>, 9 8724 "esc" add 128,1,<:ÆJ:>); 9 8725 skriv_cqf_tabel(z_op(nr),false); 9 8726 write(z_op(nr),"*",1); 9 8727 end; 8 8728 8 8728 begin 9 8729 <* 15 ALarmlyd,Test *> 9 8730 integer array field tab; 9 8731 integer res; 9 8732 9 8732 tab:= (nr-1)*opk_alarm_tab_lgd; 9 8733 setposition(z_op(nr),0,0); 9 8734 if ia(1)<1 or ia(1)>2 then 9 8735 res:= 64 <* ulovligt tal *> 9 8736 else if opk_alarm.tab.alarm_lgd = 0 then 9 8737 begin 10 8738 if ia(1)=2 then 10 8739 write(z_op(nr),"bel",1,"del",8,"bel",1,"del",8,"bel",1) 10 8740 else 10 8741 write(z_op(nr),"bel",1); 10 8742 res:= 3; 10 8743 end 9 8744 else if ia(1) > opk_alarm.tab.alarm_tilst and 9 8745 ia(1) > opk_alarm.tab.alarm_kmdo then 9 8746 begin 10 8747 opk_alarm.tab.alarm_kmdo:= ia(1); 10 8748 signal_bin(bs_opk_alarm); 10 8749 res:= 3; 10 8750 end 9 8751 else 9 8752 res:= 48; <* i brug *> 9 8753 9 8753 cursor(z_op(nr),24,1); 9 8754 skriv_kvittering(z_op(nr),opref,-1,res); 9 8755 end; 8 8756 8 8756 begin 9 8757 d.op_ref.resultat:= 45; <*ikke implementeret*> 9 8758 setposition(z_op(nr),0,0); 9 8759 cursor(z_op(nr),24,1); 9 8760 skriv_kvittering(z_op(nr),op_ref,-1,d.op_ref.resultat); 9 8761 end; 8 8762 \f 8 8762 message procedure operatør side x - 810522/hko; 8 8763 8 8763 <*+4*> fejl_reaktion(3<*programfejl*>,j,<:case 'opkode':>,2) 8 8764 <*-4*> 8 8765 end;<*case j *> 7 8766 end <* j > 0 *> 6 8767 else 6 8768 begin 7 8769 <*V*> setposition(z_op(nr),0,0); 7 8770 if sluttegn<>'nl' then outchar(z_op(nr),'nl'); 7 8771 skriv_kvittering(z_op(nr),op_ref,-1, 7 8772 45 <*ikke implementeret *>); 7 8773 end; 6 8774 end;<* godkendt *> 5 8775 5 8775 <*V*> setposition(z_op(nr),0,0); 5 8776 <*???*> 5 8777 while (læsbit_ia(samtaleflag,nr) or læsbit_ia(opkaldsflag,nr) or 5 8778 læsbit_ia(kanalflag,nr) ) and læsbit_ia(operatørmaske,nr) and 5 8779 skærmmåde = 0 do 5 8780 begin 6 8781 if sætbit_ia(samtaleflag,nr,0)=1 then 6 8782 begin 7 8783 skriv_skærm_bvs(nr); 7 8784 <*940920 if op_talevej(nr)=0 then status:= 0 7 8785 else inspect(bs_talevej_udkoblet(op_talevej(nr)),status); 7 8786 if status>0 then 7 8787 begin 7 8788 for ll:= 1 step 1 until terminalbeskrlængde//2 do 7 8789 terminaltab.ref(ll):= 0; 7 8790 skriv_skærm_bvs(nr); 7 8791 wait(bs_talevej_udkoblet(op_talevej(nr))); 7 8792 end; 7 8793 for i:= 1 step 1 until max_antal_kanaler do 7 8794 begin 7 8795 iaf:= (i-1)*kanalbeskrlængde; 7 8796 inspect(ss_samtale_nedlagt(i),status); 7 8797 if status>0 and 7 8798 tv_operatør(kanaltab.iaf.kanal_tilstand shift (-16))=nr then 7 8799 begin 7 8800 kanaltab.iaf.kanal_tilstand:= 7 8801 kanaltab.iaf(1) shift (-10) extract 6 shift 10; 7 8802 for ll:= 2 step 1 until kanalbeskrlængde//2 do 7 8803 kanaltab.iaf(ll):= 0; 7 8804 skriv_skærm_kanal(nr,i); 7 8805 repeat 7 8806 wait(ss_samtale_nedlagt(i)); 7 8807 inspect(ss_samtale_nedlagt(i),status); 7 8808 until status=0; 7 8809 end; 7 8810 end; 7 8811 940920*> cursor(z_op(nr),1,1); 7 8812 setposition(z_op(nr),0,0); 7 8813 end; 6 8814 if (læsbit_ia(opkaldsflag,nr) or læsbit_ia(kanalflag,nr)) 6 8815 and skærmmåde = 0 6 8816 and læsbit_ia(operatørmaske,nr) then 6 8817 begin 7 8818 if sætbit_ia(opkaldsflag,nr,0) = 1 then 7 8819 skriv_skærm_opkaldskø(nr); 7 8820 if sætbit_ia(kanalflag,nr,0) = 1 then 7 8821 begin 8 8822 for i:= 1 step 1 until max_antal_kanaler do 8 8823 skriv_skærm_kanal(nr,i); 8 8824 end; 7 8825 cursor(z_op(nr),1,1); 7 8826 <*V*> setposition(z_op(nr),0,0); 7 8827 end; 6 8828 end; 5 8829 d.op_ref.retur:=cs_att_pulje; 5 8830 disable afslut_kommando(op_ref); 5 8831 end; <* indlæs kommando *> 4 8832 4 8832 begin 5 8833 \f 5 8833 message procedure operatør side x+1 - 810617/hko; 5 8834 5 8834 <* 2: inkluder *> 5 8835 integer k,n; 5 8836 integer array field msk,iaf1; 5 8837 5 8837 i:=monitor(4) process address:(z_op(nr),0,ia); 5 8838 if i=0 then 5 8839 begin 6 8840 fejlreaktion(3<*programfejl*>,nr, 6 8841 <:operatør(nr) eksisterer ikke:>,1); 6 8842 d.op_ref.resultat:=28; 6 8843 end 5 8844 else 5 8845 begin 6 8846 i:=monitor(8) reserve process:(z_op(nr),0,ia); 6 8847 d.op_ref.resultat:=if i<>0 then 16 <*skærm optaget*> 6 8848 else if d.op_ref.opkode = 0 then 0 6 8849 else 3;<*udført*> 6 8850 if i > 0 then 6 8851 fejlreaktion(4<*monitor res*>,nr*100 +i, 6 8852 <:operatørskærm reservation:>,1) 6 8853 else 6 8854 begin 7 8855 i:=terminal_tab.ref.terminal_tilstand; 7 8856 <*940418/cl inkluderet sættes i stop - start *> 7 8857 kode:= d.opref.opkode extract 12; 7 8858 if kode <> 0 then 7 8859 terminal_tab.ref.terminal_tilstand:= 7 8860 (d.opref.opkode shift (-12) shift 21) + (i extract 21) 7 8861 else 7 8862 <*940418/cl inkluderet sættes i stop - slut *> 7 8863 terminal_tab.ref.terminal_tilstand:= i extract 7 8864 (if i shift(-21) extract 2 = 3 then 21 else 23); 7 8865 for i:= 1 step 1 until max_antal_kanaler do 7 8866 begin 8 8867 iaf:= (i-1)*kanalbeskrlængde; 8 8868 sætbit_ia(kanaltab.iaf.kanal_alarm,nr,0); 8 8869 end; 7 8870 skærm_måde:= 0; 7 8871 sætbit_ia(operatørmaske,nr, 7 8872 (if terminal_tab.ref.terminal_tilstand shift (-21) = 3 7 8873 then 0 else 1)); 7 8874 for k:= nr, 65 step 1 until top_bpl_gruppe do 7 8875 begin 8 8876 msk:= k*op_maske_lgd; 8 8877 if læsbit_ia(bpl_def.msk,nr) then 8 8878 <**> begin 9 8879 n:= 0; 9 8880 for i:= 1 step 1 until max_antal_operatører do 9 8881 if læsbit_ia(bpl_def.msk,i) then 9 8882 begin 10 8883 iaf1:= i*terminal_beskr_længde; 10 8884 if terminal_tab.iaf1.terminal_tilstand 10 8885 shift (-21) < 3 then 10 8886 n:= n+1; 10 8887 end; 9 8888 bpl_tilst(k,1):= n; 9 8889 end; 8 8890 <**> <* 8 8891 bpl_tilst(k,1):= bpl_tilst(k,1) + 8 8892 (if læsbit_ia(operatørmaske,nr) then 1 else 0); 8 8893 *> end; 7 8894 tofrom(opkaldsflag,alle_operatører,op_maske_lgd); 7 8895 sætbit_ia(opkaldsflag,nr,0); 7 8896 signal_bin(bs_mobil_opkald); 7 8897 <*940418/cl inkluderet sættes i stop - start *> 7 8898 if terminal_tab.ref.terminal_tilstand shift (-21) = 3 then 7 8899 <*V*> ht_symbol(z_op(nr)) 7 8900 else 7 8901 <*940418/cl inkluderet sættes i stop - slut *> 7 8902 <*V*> skriv_skærm(nr); 7 8903 cursor(z_op(nr),24,1); 7 8904 <*V*> setposition(z_op(nr),0,0); 7 8905 end; 6 8906 end; 5 8907 if d.op_ref.opkode = 0 then 5 8908 signal_ch(cs_operatør(nr),op_ref,d.op_ref.optype) 5 8909 else 5 8910 signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype); 5 8911 end; 4 8912 4 8912 begin 5 8913 \f 5 8913 message procedure operatør side x+2 - 820304/hko; 5 8914 5 8914 <* 3: ekskluder *> 5 8915 integer k,n; 5 8916 integer array field iaf1,msk; 5 8917 5 8917 write(z_op(nr),"esc" add 128,1,<:ÆH:>,"esc" add 128,1,<:ÆJ:>); 5 8918 <*V*> setposition(z_op(nr),0,0); 5 8919 monitor(10) release process:(z_op(nr),0,ia); 5 8920 d.op_ref.resultat:=3; 5 8921 signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype); 5 8922 terminal_tab.ref.terminal_tilstand:= 7 shift 21 + 5 8923 terminal_tab.ref.terminal_tilstand extract 21; 5 8924 if sæt_bit_ia(operatørmaske,nr,0)=1 then 5 8925 for k:= nr, 65 step 1 until top_bpl_gruppe do 5 8926 begin 6 8927 msk:= k*op_maske_lgd; 6 8928 if læsbit_ia(bpl_def.msk,nr) then 6 8929 <**> begin 7 8930 n:= 0; 7 8931 for i:= 1 step 1 until max_antal_operatører do 7 8932 if læsbit_ia(bpl_def.msk,i) then 7 8933 begin 8 8934 iaf1:= i*terminal_beskr_længde; 8 8935 if terminal_tab.iaf1.terminal_tilstand 8 8936 shift (-21) < 3 then 8 8937 n:= n+1; 8 8938 end; 7 8939 bpl_tilst(k,1):= n; 7 8940 end; 6 8941 <**> <* 6 8942 bpl_tilst(k,1):= bpl_tilst(k,1)-1; 6 8943 *> end; 5 8944 signal_bin(bs_mobil_opkald); 5 8945 if opk_alarm.tab.alarm_tilst > 0 then 5 8946 begin 6 8947 opk_alarm.tab.alarm_kmdo:= 3; 6 8948 signal_bin(bs_opk_alarm); 6 8949 end; 5 8950 end; 4 8951 begin 5 8952 5 8952 <* 4: opdater skærm *> 5 8953 5 8953 signal_ch(cs_op_retur,op_ref,d.op_ref.optype); 5 8954 while (læsbit_ia(samtaleflag,nr) or læsbit_ia(opkaldsflag,nr) or 5 8955 læsbit_ia(kanalflag,nr) ) and læsbit_ia(operatørmaske,nr) and 5 8956 skærmmåde=0 do 5 8957 begin 6 8958 6 8958 <*+2*> if testbit13 and overvåget then 6 8959 disable begin 7 8960 write(out,"nl",1,<:opdater skærm(:>,<<d>,nr, 7 8961 <:) opkaldsflag::>,"nl",1); 7 8962 outintbits_ia(out,opkaldsflag,1,op_maske_lgd//2); 7 8963 write(out,<: operatørmaske::>,"nl",1); 7 8964 outintbits_ia(out,operatørmaske,1,op_maske_lgd//2); 7 8965 write(out,<: skærmmåde=:>,skærmmåde,"nl",0); 7 8966 ud; 7 8967 end; 6 8968 <*-2*> 6 8969 if sætbit_ia(samtaleflag,nr,0)=1 and op_talevej(nr)<>0 then 6 8970 begin 7 8971 skriv_skærm_bvs(nr); 7 8972 <*940920 inspect(bs_talevej_udkoblet(op_talevej(nr)),status); 7 8973 if status>0 then 7 8974 begin 7 8975 for ll:= 1 step 1 until terminalbeskrlængde//2 do 7 8976 terminaltab.ref(ll):= 0; 7 8977 skriv_skærm_bvs(nr); 7 8978 wait(bs_talevej_udkoblet(op_talevej(nr))); 7 8979 end; 7 8980 for i:= 1 step 1 until max_antal_kanaler do 7 8981 begin 7 8982 iaf:= (i-1)*kanalbeskrlængde; 7 8983 inspect(ss_samtale_nedlagt(i),status); 7 8984 if status>0 and 7 8985 tv_operatør(kanaltab.iaf.kanal_tilstand shift (-16))=nr then 7 8986 begin 7 8987 kanaltab.iaf.kanal_tilstand:= 7 8988 kanaltab.iaf.kanal_tilstand shift (-10) extract 6 shift 10; 7 8989 for ll:= 2 step 1 until kanalbeskrlængde//2 do 7 8990 kanaltab.iaf(ll):= 0; 7 8991 skriv_skærm_kanal(nr,i); 7 8992 repeat 7 8993 wait(ss_samtale_nedlagt(i)); 7 8994 inspect(ss_samtale_nedlagt(i),status); 7 8995 until status=0; 7 8996 end; 7 8997 end; 7 8998 940920*> cursor(z_op(nr),1,1); 7 8999 setposition(z_op(nr),0,0); 7 9000 end; 6 9001 if (læsbit_ia(opkaldsflag,nr) or læsbit_ia(kanalflag,nr)) 6 9002 and læsbit_ia(operatørmaske,nr) and skærmmåde = 0 then 6 9003 begin 7 9004 <*V*> setposition(z_op(nr),0,0); 7 9005 if sætbit_ia(opkaldsflag,nr,0) =1 then 7 9006 skriv_skærm_opkaldskø(nr); 7 9007 if sætbit_ia(kanalflag,nr,0) =1 then 7 9008 begin 8 9009 for i:=1 step 1 until max_antal_kanaler do 8 9010 skriv_skærm_kanal(nr,i); 8 9011 end; 7 9012 cursor(z_op(nr),1,1); 7 9013 <*V*> setposition(z_op(nr),0,0); 7 9014 end; 6 9015 end; 5 9016 end; 4 9017 begin 5 9018 \f 5 9018 message procedure operatør side x+3 - 830310/hko; 5 9019 5 9019 <* 5: samtale etableret *> 5 9020 5 9020 res:= d.op_ref.resultat; 5 9021 b_v:= d.op_ref.data(3) extract 4; 5 9022 b_s:= d.op_ref.data(4); 5 9023 signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype); 5 9024 if res = 3 and terminal_tab.ref(1) shift(-21) = 2 then 5 9025 begin 6 9026 sætbit_i(terminal_tab.ref(1),21,1); 6 9027 sætbit_i(terminal_tab.ref(1),22,0); 6 9028 sætbit_i(terminal_tab.ref(1),2,0); 6 9029 sæt_hex_ciffer(terminal_tab.ref,3,b_v); 6 9030 terminal_tab.ref(2):= b_s; 6 9031 sæt_bit_i(terminal_tab.ref(1),2<* opt. *>,0); 6 9032 iaf:= (b_s extract 4 - 1)*kanal_beskr_længde; 6 9033 kanaltab.iaf.kanal_tilstand:= kanaltab.iaf.kanal_tilstand 6 9034 shift (-10) shift 10 + terminal_tab.ref(1) extract 10; 6 9035 6 9035 if læsbit_ia(operatørmaske,nr) and skærmmåde = 0 then 6 9036 begin 7 9037 <*V*> setposition(z_op(nr),0,0); 7 9038 skriv_skærm_b_v_s(nr); 7 9039 <*V*> setposition(z_op(nr),0,0); 7 9040 end; 6 9041 end 5 9042 else 5 9043 if terminal_tab.ref(1) shift(-21) = 2 then 5 9044 begin 6 9045 sætbit_i(terminal_tab.ref(1),22,0); 6 9046 sætbit_i(terminal_tab.ref(1),2,0); 6 9047 sæt_hex_ciffer(terminal_tab.ref,3,b_v); 6 9048 terminal_tab.ref(2):= 0; 6 9049 if læsbit_ia(operatørmaske,nr) and skærmmåde = 0 then 6 9050 begin 7 9051 <*V*> setposition(z_op(nr),0,0); 7 9052 cursor(z_op(nr),21,17); 7 9053 write(z_op(nr),<:EJ FORB:>); 7 9054 <*V*> setposition(z_op(nr),0,0); 7 9055 end; 6 9056 end 5 9057 else fejlreaktion(3<*prg.fejl*>,terminal_tab.ref(1) shift(-21), 5 9058 <:terminal tilstand:>,1); 5 9059 end; 4 9060 4 9060 begin 5 9061 \f 5 9061 message procedure operatør side x+4 - 810602/hko; 5 9062 5 9062 <* 6: radiokanal ekskluderet *> 5 9063 5 9063 læs_hex_ciffer(terminal_tab.ref,3,b_v); 5 9064 pos:= d.op_ref.data(1); 5 9065 signalch(d.op_ref.retur,op_ref,d.op_ref.optype); 5 9066 indeks:= terminal_tab.ref(2); 5 9067 b_s:= if indeks shift (-22) = 3 and indeks extract 22 = pos 5 9068 then indeks extract 4 else 0; 5 9069 if b_v = pos then 5 9070 sæt_hex_ciffer(terminal_tab.ref,3,0); 5 9071 if b_s = pos then 5 9072 begin 6 9073 terminal_tab.ref(2):= 0; 6 9074 sætbit_i(terminal_tab.ref(1),21,0); 6 9075 sætbit_i(terminal_tab.ref(1),22,0); 6 9076 sætbit_i(terminal_tab.ref(1),2,0); 6 9077 end; 5 9078 if skærmmåde=0 then 5 9079 begin 6 9080 if b_v = pos or b_s = pos then 6 9081 <*V*> skriv_skærm_b_v_s(nr); 6 9082 <*V*> skriv_skærm_kanal(nr,pos); 6 9083 cursor(z_op(nr),1,1); 6 9084 setposition(z_op(nr),0,0); 6 9085 end; 5 9086 end; 4 9087 4 9087 begin 5 9088 \f 5 9088 message procedure operatør side x+5 - 950118/cl; 5 9089 5 9089 <* 7: operatørmeddelelse *> 5 9090 integer afs, kl, i; 5 9091 real dato, t; 5 9092 5 9092 cursor(z_op(nr),24,1); 5 9093 write(z_op(nr),"esc" add 128,1,<:ÆK:>); 5 9094 cursor(z_op(nr),23,1); 5 9095 write(z_op(nr),"esc" add 128,1,<:ÆK:>); 5 9096 5 9096 afs:= d.opref.data.op_spool_kilde; 5 9097 dato:= systime(4,d.opref.data.op_spool_tid,t); 5 9098 kl:= round t; 5 9099 write(z_op(nr),<:! fra op:>,<<d>,afs,"sp",1, 5 9100 if afs=0 then <:SYSOP:> else string bpl_navn(afs)); 5 9101 i:= replacechar(1,'.'); 5 9102 disable write(z_op(nr),"sp",1,<<zd_dd_dd>,kl,"nl",1); 5 9103 replacechar(1,i); 5 9104 write(z_op(nr),d.opref.data.op_spool_text); 5 9105 5 9105 if terminal_tab.ref.terminal_tilstand shift (-21) <> 3 then 5 9106 begin 6 9107 if opk_alarm.tab.alarm_lgd > 0 and 6 9108 opk_alarm.tab.alarm_tilst < 1 and 6 9109 opk_alarm.tab.alarm_kmdo < 1 6 9110 then 6 9111 begin 7 9112 opk_alarm.tab.alarm_kmdo := 1; 7 9113 signalbin(bs_opk_alarm); 7 9114 end 6 9115 else 6 9116 if opk_alarm.tab.alarm_lgd = 0 then 6 9117 write(z_op(nr),"bel",1,"del",8,"bel",1,"del",8,"bel",1); 6 9118 end; 5 9119 5 9119 setposition(z_op(nr),0,0); 5 9120 5 9120 signalch(d.opref.retur,opref,d.opref.optype); 5 9121 end; 4 9122 4 9122 begin 5 9123 5 9123 <*+4*> fejl_reaktion(3<*programfejl *>,aktion,<:case aktion:>,2); 5 9124 <*-4*> 5 9125 end 4 9126 end; <* case aktion+6 *> 3 9127 3 9127 until false; 3 9128 op_trap: 3 9129 skriv_operatør(zbillede,1); 3 9130 end operatør; 2 9131 2 9131 \f 2 9131 message procedure op_cqftest side 1; 2 9132 2 9132 procedure op_cqftest; 2 9133 begin 3 9134 integer array field opref, ref, ref1; 3 9135 integer i, j, tv, cqf, res, interval, pausetid; 3 9136 real nu, næstetid, kommstart, kommslut; 3 9137 3 9137 procedure skriv_op_cqftest(zud,omfang); 3 9138 value omfang; 3 9139 zone zud; 3 9140 integer omfang; 3 9141 begin 4 9142 write(zud,"nl",1,<:+++ op-cqftest:>); 4 9143 if omfang > 0 then 4 9144 disable begin 5 9145 real t; 5 9146 5 9146 trap(slut); 5 9147 write(zud,"nl",1, 5 9148 <: opref: :>,opref,"nl",1, 5 9149 <: ref: :>,ref,"nl",1, 5 9150 <: i: :>,i,"nl",1, 5 9151 <: tv: :>,tv,"nl",1, 5 9152 <: cqf: :>,cqf,"nl",1, 5 9153 <: res: :>,res,"nl",1, 5 9154 <: interval :>,interval,"nl",1, 5 9155 <: pausetid: :>,pausetid,"nl",1, 5 9156 <: nu: :>,<<zddddd.dddddd>,systime(4,nu,t)+t/1000000,"nl",1, 5 9157 <: næste-tid: :>,systime(4,næstetid,t)+t/1000000,"nl",1, 5 9158 <::>); 5 9159 skriv_coru(zud,coru_no(292)); 5 9160 slut: 5 9161 end; 4 9162 end skriv_op_cqftest; 3 9163 3 9163 trap(op_cqf_trap); 3 9164 interval:= 6*60*60; <* 6 timer mellem test *> 3 9165 stackclaim(1000); 3 9166 3 9166 3 9166 <*+4*>if (testbit8 and overvåget) or testbit28 then 3 9167 skriv_op_cqftest(out,0); 3 9168 <*-4*> 3 9169 3 9169 <*V*> waitch(cs_cqf,opref,op_optype,-1); 3 9170 repeat 3 9171 i:= sidste_tv_brugt; tv:= 0; 3 9172 repeat 3 9173 i:= (i mod max_antal_taleveje) + 1; 3 9174 if tv_operatør(i) = 0 then tv:= i; 3 9175 until (tv<>0) or (i=sidste_tv_brugt); 3 9176 3 9176 if tv<>0 then 3 9177 begin 4 9178 tv_operatør(tv):= -1; 4 9179 systime(1,0.0,nu); næste_tid:= nu + interval; 4 9180 for cqf:= 1 step 1 until max_cqf do 4 9181 begin 5 9182 ref:= (cqf-1)*cqf_lgd; 5 9183 if cqf_tabel.ref.cqf_bus > 0 and cqf_tabel.ref.cqf_næste_tid < nu then 5 9184 begin 6 9185 startoperation(opref,292,cs_cqf,1 shift 12 + 41); 6 9186 d.opref.data(1):= tv; 6 9187 d.opref.data(2):= cqf_tabel.ref.cqf_bus; 6 9188 disable if testbit19 then 6 9189 begin 7 9190 integer i; <*lav en trap-bar blok*> 7 9191 7 9191 trap(test19_trap); 7 9192 systime(1,0,kommstart); 7 9193 write(zrl,<<zd dd dd.dd >,now,<:CQF-test start OP :>); 7 9194 skriv_id(zrl,d.opref.data(2),0); 7 9195 test19_trap: outchar(zrl,'nl'); 7 9196 end; 6 9197 signalch(cs_rad,opref,op_optype or gen_optype); 6 9198 <*V*> waitch(cs_cqf,opref,op_optype,-1); 6 9199 res:= d.opref.resultat; 6 9200 <*+2*> 6 9201 disable if testbit19 then 6 9202 begin 7 9203 integer i; <*lav en trap-bar blok*> 7 9204 7 9204 trap(test19_trap); 7 9205 systime(1,0,kommslut); 7 9206 write(zrl,<<zd dd dd.dd >,now,<:CQF-test slut OP :>); 7 9207 if d.opref.data(7)=2 then outchar(zrl,'*'); 7 9208 if d.opref.data(9)<>0 then 7 9209 begin 8 9210 skriv_id(zrl,d.opref.data(9),0); 8 9211 outchar(zrl,' '); 8 9212 end; 7 9213 if d.opref.data(8)<>0 then 7 9214 begin 8 9215 skriv_id(zrl,d.opref.data(8),0); 8 9216 outchar(zrl,' '); 8 9217 end; 7 9218 if d.opref.data(12)<>0 then 7 9219 begin 8 9220 if d.opref.data(12) shift (-20) = 15 then 8 9221 write(zrl,<:OMR*:>) 8 9222 else 8 9223 if d.opref.data(12) shift (-20) = 14 then 8 9224 write(zrl, 8 9225 string områdenavn(d.opref.data(12) extract 20)) 8 9226 else 8 9227 skriv_id(zrl,d.opref.data(12),0); 8 9228 outchar(zrl,' '); 8 9229 end; 7 9230 if d.opref.data(10)<>0 then 7 9231 begin 8 9232 skriv_id(zrl,d.opref.data(10),0); 8 9233 outchar(zrl,' '); 8 9234 end; 7 9235 write(zrl,<:res=:>,<<d>,res,<: btid=:>, 7 9236 <<dd.dd>,kommslut-kommstart); 7 9237 test19_trap: outchar(zrl,'nl'); 7 9238 end; 6 9239 <*-2*> 6 9240 if res=3 and cqf_tabel.ref.cqf_bus > 0 then 6 9241 begin 7 9242 delay(3); 7 9243 d.opref.opkode:= 12 shift 12 + 41; 7 9244 d.opref.resultat:= 0; 7 9245 disable if testbit19 then 7 9246 begin 8 9247 integer i; <*lav en trap-bar blok*> 8 9248 8 9248 trap(test19_trap); 8 9249 systime(1,0,kommstart); 8 9250 write(zrl,<<zd dd dd.dd >,now,<:CQF-test start NE :>); 8 9251 test19_trap: outchar(zrl,'nl'); 8 9252 end; 7 9253 signalch(cs_rad,opref,op_optype or gen_optype); 7 9254 <*V*> waitch(cs_cqf,opref,op_optype,-1); 7 9255 <*+2*> 7 9256 disable if testbit19 then 7 9257 begin 8 9258 integer i; <*lav en trap-bar blok*> 8 9259 8 9259 trap(test19_trap); 8 9260 systime(1,0,kommslut); 8 9261 write(zrl,<<zd dd dd.dd >,now,<:CQF-test slut NE :>); 8 9262 write(zrl,<:res=:>,<<d>,d.opref.resultat,<: btid=:>, 8 9263 <<dd.dd>,kommslut-kommstart); 8 9264 test19_trap: outchar(zrl,'nl'); 8 9265 end; 7 9266 <*-2*> 7 9267 if d.opref.resultat <> 3 then 7 9268 fejlreaktion(19,d.opref.resultat,<:CQF-test nedlæg resultat:>,1); 7 9269 if cqf_tabel.ref.cqf_bus > 0 and cqf_tabel.ref.cqf_fejl > 0 then 7 9270 begin 8 9271 startoperation(opref,292,cs_cqf,23); 8 9272 i:= 1; 8 9273 hægtstring(d.opref.data,i,<:CQF-test bus :>); 8 9274 anbringtal(d.opref.data,i,cqf_tabel.ref.cqf_bus,4); 8 9275 skriv_tegn(d.opref.data,i,' '); 8 9276 hægtstring(d.opref.data,i,string cqf_tabel.ref.cqf_id); 8 9277 hægtstring(d.opref.data,i,<: ok!:>); 8 9278 repeat afsluttext(d.opref.data,i) until (i mod 6) = 1; 8 9279 signalch(cs_io,opref,gen_optype); 8 9280 <*V*> waitch(cs_cqf,opref,gen_optype,-1); 8 9281 end; 7 9282 if cqf_tabel.ref.cqf_bus > 0 then 7 9283 begin 8 9284 cqf_tabel.ref.cqf_fejl:= 0; 8 9285 systime(1,0.0,cqf_tabel.ref.cqf_ok_tid); 8 9286 cqf_tabel.ref.cqf_næste_tid:= nu+interval; 8 9287 end; 7 9288 end <*res=3*> 6 9289 else 6 9290 if (res=20<*ej forb.*> or res=59<*radiofejl*>) and 6 9291 cqf_tabel.ref.cqf_bus > 0 6 9292 then 6 9293 begin 7 9294 cqf_tabel.ref.cqf_næste_tid:= nu + interval; 7 9295 cqf_tabel.ref.cqf_fejl:= cqf_tabel.ref.cqf_fejl + 1; 7 9296 if cqf_tabel.ref.cqf_fejl >= 2 then 7 9297 begin 8 9298 startoperation(opref,292,cs_cqf,23); 8 9299 i:= 1; 8 9300 hægtstring(d.opref.data,i,<:CQF-test bus :>); 8 9301 anbringtal(d.opref.data,i,cqf_tabel.ref.cqf_bus,4); 8 9302 skriv_tegn(d.opref.data,i,' '); 8 9303 hægtstring(d.opref.data,i,string cqf_tabel.ref.cqf_id); 8 9304 hægtstring(d.opref.data,i,<: ingen forbindelse!:>); 8 9305 repeat afsluttext(d.opref.data,i) until (i mod 6) = 1; 8 9306 signalch(cs_io,opref,gen_optype); 8 9307 <*V*> waitch(cs_cqf,opref,gen_optype,-1); 8 9308 end; 7 9309 end; 6 9310 delay(10); 6 9311 end; 5 9312 if cqf_tabel.ref.cqf_bus > 0 and 5 9313 cqf_tabel.ref.cqf_næste_tid < næste_tid 5 9314 then næste_tid:= cqf_tabel.ref.cqf_næste_tid; 5 9315 end; <*for cqf*> 4 9316 4 9316 tv_operatør(tv):= 0; tv:= 0; 4 9317 if op_cqf_tab_ændret then 4 9318 begin 5 9319 j:= skrivfil(1033,1,i); 5 9320 if j<>0 then 5 9321 fejlreaktion(6,j,<:CQF-test cqf-tabel:>,1); 5 9322 sorter_cqftab(1,max_cqf); 5 9323 for cqf:= 1 step 1 until max_cqf do 5 9324 begin 6 9325 ref:= (cqf-1)*cqf_lgd; 6 9326 ref1:= (cqf-1)*cqf_id; 6 9327 tofrom(fil(i).ref1,cqf_tabel.ref,cqf_id); 6 9328 end; 5 9329 op_cqf_tab_ændret:= false; 5 9330 end; 4 9331 end; <*tv*> 3 9332 3 9332 systime(1,0.0,nu); 3 9333 pausetid:= round(næste_tid - nu); 3 9334 if pausetid < 30 then pausetid:= 30; 3 9335 3 9335 <*V*> delay(pausetid); 3 9336 3 9336 until false; 3 9337 3 9337 op_cqf_trap: 3 9338 disable skriv_op_cqftest(zbillede,1); 3 9339 end op_cqftest; 2 9340 \f 2 9340 message procedure op_spool side 1; 2 9341 2 9341 procedure op_spool; 2 9342 begin 3 9343 integer array field opref, ref; 3 9344 integer næste_tomme, i; 3 9345 3 9345 procedure skriv_op_spool(zud,omfang); 3 9346 value omfang; 3 9347 zone zud; 3 9348 integer omfang; 3 9349 begin 4 9350 write(zud,"nl",1,<:+++ op-spool:>); 4 9351 if omfang > 0 then 4 9352 disable begin 5 9353 real t; 5 9354 5 9354 trap(slut); 5 9355 write(zud,"nl",1, 5 9356 <: opref: :>,opref,"nl",1, 5 9357 <: næste-tomme: :>,næste_tomme,"nl",1, 5 9358 <: ref: :>,ref,"nl",1, 5 9359 <: i: :>,i,"nl",1, 5 9360 <::>); 5 9361 skriv_coru(zud,coru_no(293)); 5 9362 slut: 5 9363 end; 4 9364 end skriv_op_spool; 3 9365 3 9365 trap(op_spool_trap); 3 9366 stackclaim(400); 3 9367 3 9367 næste_tomme:= 0; 3 9368 3 9368 <*+4*>if (testbit8 and overvåget) or testbit28 then 3 9369 skriv_op_spool(out,0); 3 9370 <*-4*> 3 9371 3 9371 repeat 3 9372 <*V*> waitch(cs_op_spool,opref,true,-1); 3 9373 inspect(ss_op_spool_tomme,i); 3 9374 3 9374 if d.opref.opkode extract 12 <> 37 then 3 9375 begin 4 9376 d.opref.resultat:= 31; 4 9377 fejlreaktion(2<*opkode*>,d.opref.opkode extract 12,<:op_spool:>,1); 4 9378 end 3 9379 else 3 9380 if i<=0 then 3 9381 d.opref.resultat:= 32 <*ingen fri plads*> 3 9382 else 3 9383 begin 4 9384 <*V*> wait(ss_op_spool_tomme); 4 9385 ref:= næste_tomme*op_spool_postlgd; 4 9386 næste_tomme:= (næste_tomme+1) mod op_spool_postantal; 4 9387 i:= d.opref.opsize - data; 4 9388 if i > (op_spool_postlgd - op_spool_text) then 4 9389 i:= (op_spool_postlgd - op_spool_text); 4 9390 op_spool_buf.ref.op_spool_kilde:= 4 9391 (if d.opref.kilde//100 = 2 then d.opref.kilde mod 100 else 0); 4 9392 op_spool_buf.ref.op_spool_tid:= d.opref.tid; 4 9393 tofrom(op_spool_buf.ref.op_spool_text,d.opref.data,i); 4 9394 op_spool_buf.ref(op_spool_postlgd//2):= 4 9395 op_spool_buf.ref(op_spool_postlgd//2) shift (-8) shift 8; 4 9396 d.opref.resultat:= 3; 4 9397 4 9397 signal(ss_op_spool_fulde); 4 9398 end; 3 9399 3 9399 signalch(d.opref.retur,opref,d.opref.optype); 3 9400 until false; 3 9401 3 9401 op_spool_trap: 3 9402 disable skriv_op_spool(zbillede,1); 3 9403 end op_spool; 2 9404 \f 2 9404 message procedure op_medd side 1; 2 9405 2 9405 procedure op_medd; 2 9406 begin 3 9407 integer array field opref, ref; 3 9408 integer næste_fulde, i; 3 9409 3 9409 procedure skriv_op_medd(zud,omfang); 3 9410 value omfang; 3 9411 zone zud; 3 9412 integer omfang; 3 9413 begin 4 9414 write(zud,"nl",1,<:+++ op-medd:>); 4 9415 if omfang > 0 then 4 9416 disable begin 5 9417 real t; 5 9418 5 9418 trap(slut); 5 9419 write(zud,"nl",1, 5 9420 <: opref: :>,opref,"nl",1, 5 9421 <: næste-fulde: :>,næste_fulde,"nl",1, 5 9422 <: ref: :>,ref,"nl",1, 5 9423 <: i: :>,i,"nl",1, 5 9424 <::>); 5 9425 skriv_coru(zud,coru_no(294)); 5 9426 slut: 5 9427 end; 4 9428 end skriv_op_medd; 3 9429 3 9429 trap(op_medd_trap); 3 9430 næste_fulde:= 0; 3 9431 stackclaim(400); 3 9432 3 9432 <*+4*>if (testbit8 and overvåget) or testbit28 then 3 9433 skriv_op_medd(out,0); 3 9434 <*-4*> 3 9435 3 9435 repeat 3 9436 <*V*> wait(ss_op_spool_fulde); 3 9437 <*V*> waitch(cs_op_medd,opref,true,-1); 3 9438 3 9438 ref:= næste_fulde*op_spool_postlgd; 3 9439 næste_fulde:= (næste_fulde+1) mod op_spool_postantal; 3 9440 3 9440 startoperation(opref,curr_coruid,cs_op_medd,38); 3 9441 d.opref.resultat:= 0; 3 9442 tofrom(d.opref.data,op_spool_buf.ref,op_spool_postlgd); 3 9443 signalch((if op_spool_buf.ref.op_spool_kilde = 0 then cs_op else cs_io), 3 9444 opref,gen_optype); 3 9445 signal(ss_op_spool_tomme); 3 9446 until false; 3 9447 3 9447 op_medd_trap: 3 9448 disable skriv_op_medd(zbillede,1); 3 9449 end op_medd; 2 9450 \f 2 9450 message procedure alarmur side 1; 2 9451 2 9451 procedure alarmur; 2 9452 begin 3 9453 integer ventetid, nr; 3 9454 integer array field opref, tab; 3 9455 real nu; 3 9456 3 9456 procedure skriv_alarmur(zud,omfang); 3 9457 value omfang; 3 9458 zone zud; 3 9459 integer omfang; 3 9460 begin 4 9461 write(zud,"nl",1,<:+++ alarmur:>); 4 9462 if omfang > 0 then 4 9463 disable begin 5 9464 real t; 5 9465 5 9465 trap(slut); 5 9466 write(zud,"nl",1, 5 9467 <: ventetid: :>,ventetid,"nl",1, 5 9468 <: nr: :>,nr,"nl",1, 5 9469 <: opref: :>,opref,"nl",1, 5 9470 <: tab: :>,tab,"nl",1, 5 9471 <: nu: :>,<< zddddd>,systime(4,nu,t),t,"nl",1, 5 9472 <::>); 5 9473 skriv_coru(zud,coru_no(295)); 5 9474 slut: 5 9475 end; 4 9476 end skriv_alarmur; 3 9477 3 9477 trap(alarmur_trap); 3 9478 stackclaim(400); 3 9479 3 9479 systime(1,0.0,nu); 3 9480 ventetid:= -1; 3 9481 repeat 3 9482 waitch(cs_opk_alarm_ur,opref,op_optype,ventetid); 3 9483 if opref > 0 then 3 9484 signalch(d.opref.retur,opref,op_optype); 3 9485 3 9485 ventetid:= -1; 3 9486 systime(1,0.0,nu); 3 9487 for nr:= 1 step 1 until max_antal_operatører do 3 9488 begin 4 9489 tab:= (nr-1)*opk_alarm_tab_lgd; 4 9490 if opk_alarm.tab.alarm_tilst > 0 and 4 9491 opk_alarm.tab.alarm_lgd >= 0 then 4 9492 begin 5 9493 if (nu - opk_alarm.tab.alarm_start) >= opk_alarm.tab.alarm_lgd then 5 9494 begin 6 9495 opk_alarm.tab.alarm_kmdo:= 3; 6 9496 signalbin(bs_opk_alarm); 6 9497 if ventetid > 2 or ventetid=(-1) then ventetid:= 2; 6 9498 end 5 9499 else 5 9500 if (nu - opk_alarm.tab.alarm_start) < ventetid or ventetid = (-1) then 5 9501 ventetid:= (nu - opk_alarm.tab.alarm_start); 5 9502 end; 4 9503 end; 3 9504 if ventetid=0 then ventetid:= 1; 3 9505 until false; 3 9506 3 9506 alarmur_trap: 3 9507 disable skriv_alarmur(zbillede,1); 3 9508 end alarmur; 2 9509 \f 2 9509 message procedure opkaldsalarmer side 1; 2 9510 2 9510 procedure opkaldsalarmer; 2 9511 begin 3 9512 integer nr, ny_kommando, tilst, aktion, tt; 3 9513 integer array field tab, opref, alarmop; 3 9514 3 9514 procedure skriv_opkaldsalarmer(zud,omfang); 3 9515 value omfang; 3 9516 zone zud; 3 9517 integer omfang; 3 9518 begin 4 9519 write(zud,"nl",1,<:+++ opkaldsalarmer:>); 4 9520 if omfang>0 then 4 9521 disable begin 5 9522 real array field raf; 5 9523 trap(slut); 5 9524 raf:=0; 5 9525 write(zud,"nl",1, 5 9526 <: nr: :>,nr,"nl",1, 5 9527 <: ny-kommando: :>,ny_kommando,"nl",1, 5 9528 <: tilst: :>,tilst,"nl",1, 5 9529 <: aktion: :>,aktion,"nl",1, 5 9530 <: tt: :>,false add tt,1,"nl",1, 5 9531 <: tab: :>,tab,"nl",1, 5 9532 <: opref: :>,opref,"nl",1, 5 9533 <: alarmop: :>,alarmop,"nl",1, 5 9534 <::>); 5 9535 skriv_coru(zud,coru_no(296)); 5 9536 slut: 5 9537 end; 4 9538 end skriv_opkaldsalarmer; 3 9539 3 9539 trap(opk_alarm_trap); 3 9540 stackclaim(400); 3 9541 3 9541 <*+2*>if (testbit8 and overvåget) or testbit28 then 3 9542 skriv_opkaldsalarmer(out,0); 3 9543 <*-2*> 3 9544 3 9544 repeat 3 9545 wait(bs_opk_alarm); 3 9546 alarmop:= 0; 3 9547 for nr:= 1 step 1 until max_antal_operatører do 3 9548 begin 4 9549 tab:= (nr-1)*opk_alarm_tab_lgd; 4 9550 ny_kommando:= opk_alarm.tab.alarm_kmdo; 4 9551 tilst:= opk_alarm.tab.alarm_tilst; 4 9552 aktion:= case ny_kommando+1 of ( 4 9553 <*ingenting*> case tilst+1 of (4,4,4), 4 9554 <*normal *> case tilst+1 of (1,4,4), 4 9555 <*nød *> case tilst+1 of (2,2,4), 4 9556 <*sluk *> case tilst+1 of (4,3,3)); 4 9557 tt:= case aktion of ('B','C','F','-'); 4 9558 if tt<>'-' then 4 9559 begin 5 9560 <*V*> waitch(cs_tvswitch_adgang,opref,op_optype,-1); 5 9561 startoperation(opref,296,cs_opk_alarm,tt shift 12 + 44); 5 9562 d.opref.data(1):= nr+16; 5 9563 signalch(cs_talevejsswitch,opref,op_optype); 5 9564 <*V*> waitch(cs_opk_alarm,opref,op_optype,-1); 5 9565 if d.opref.resultat = 3 then 5 9566 begin 6 9567 opk_alarm.tab.alarm_kmdo:= 0; 6 9568 opk_alarm.tab.alarm_gtilst:= opk_alarm.tab.alarm_tilst; 6 9569 opk_alarm.tab.alarm_tilst:= case aktion of (1,2,0); 6 9570 if aktion < 3 then 6 9571 begin 7 9572 systime(1,0.0,opk_alarm.tab.alarm_start); 7 9573 if alarmop = 0 then 7 9574 waitch(cs_opk_alarm_ur_ret,alarmop,op_optype,-1); 7 9575 end; 6 9576 end; 5 9577 signalch(cs_tvswitch_adgang,opref,op_optype or gen_optype); 5 9578 end; 4 9579 end; 3 9580 if alarmop<>0 then 3 9581 begin 4 9582 startoperation(alarmop,296,cs_opk_alarm_ur_ret,0); 4 9583 signalch(cs_opk_alarm_ur,alarmop,op_optype); 4 9584 end; 3 9585 until false; 3 9586 3 9586 opk_alarm_trap: 3 9587 disable skriv_opkaldsalarmer(zbillede,1); 3 9588 end; 2 9589 2 9589 \f 2 9589 message procedure tvswitch_input side 1 - 940810/cl; 2 9590 2 9590 procedure tv_switch_input; 2 9591 begin 3 9592 integer array field opref; 3 9593 integer tt,ant; 3 9594 boolean ok; 3 9595 integer array ia(1:128); 3 9596 3 9596 procedure skriv_tvswitch_input(zud,omfang); 3 9597 value omfang; 3 9598 zone zud; 3 9599 integer omfang; 3 9600 begin 4 9601 write(zud,"nl",1,<:+++ tvswitch-input:>); 4 9602 if omfang>0 then 4 9603 disable begin 5 9604 real array field raf; 5 9605 trap(slut); 5 9606 raf:=0; 5 9607 write(zud,"nl",1, 5 9608 <: opref: :>,opref,"nl",1, 5 9609 <: ok: :>,(if ok then <:TRUE:> else <:FALSE:>),"nl",1, 5 9610 <: ant: :>,ant,"nl",1, 5 9611 <: tt: :>,tt,"nl",1, 5 9612 <::>); 5 9613 write(zud,"nl",1,<:ia: :>); 5 9614 skrivhele(zud,ia.raf,256,2); 5 9615 skriv_coru(zud,coru_no(297)); 5 9616 slut: 5 9617 end; 4 9618 end skriv_tvswitch_input; 3 9619 \f 3 9619 boolean procedure læs_tlgr; 3 9620 begin 4 9621 integer kl,ch,i,pos,p; 4 9622 long field lf; 4 9623 boolean ok; 4 9624 4 9624 integer procedure readch(z,c); 4 9625 zone z; integer c; 4 9626 begin 5 9627 readch:= readchar(z,c); 5 9628 <*+2*> if testbit15 and overvåget then 5 9629 disable begin 6 9630 if ' ' <= c and c <= 'ü' then outchar(zrl,c) 6 9631 else write(zrl,"<",1,<<d>,c,">",1); 6 9632 if c='em' then write(zrl,<: *timeout*:>); 6 9633 end; 5 9634 <*-2*> 5 9635 end; 4 9636 4 9636 ok:= false; tt:=' '; 4 9637 repeat 4 9638 readchar(z_tv_in,ch); 4 9639 until ch<>'em'; 4 9640 repeatchar(z_tv_in); 4 9641 4 9641 <*+2*>if testbit15 and overvåget then 4 9642 disable write(zrl,<<zd dd dd.dd >,now,<:switch-ind: :>); 4 9643 <*-2*> 4 9644 4 9644 for kl:=readch(z_tv_in,ch) while ch<>'%' and ch<>'nl' and ch<>'em' do ; 4 9645 if ch='%' then 4 9646 begin 5 9647 ant:= 0; pos:= 1; lf:= 4; 5 9648 ok:= true; 5 9649 for i:= 1 step 1 until 128 do ia(i):= 0; 5 9650 5 9650 for kl:=readch(z_tv_in,ch) while kl = 6 do 5 9651 skrivtegn(ia,pos,ch); 5 9652 5 9652 p:=pos; 5 9653 repeat afsluttext(ia,p) until p mod 6 = 1; 5 9654 5 9654 if ia.lf=long<:ACK:> and ch='nl' then tt:= '+' else 5 9655 if ia.lf=long<:NACK:> and ch='nl' then tt:= '-' else 5 9656 if pos=2 and ch=' ' then tt:= ia(1) shift (-16) else ok:= false; 5 9657 5 9657 if ok and ch=' ' then 5 9658 for kl:=readch(z_tv_in,ch) while ch=' ' do ; 5 9659 5 9659 while kl = 2 do 5 9660 begin 6 9661 i:= ch - '0'; 6 9662 for kl:=readch(z_tv_in,ch) while kl = 2 do i:= i*10 + ch-'0'; 6 9663 if ant < 128 then 6 9664 begin 7 9665 ant:= ant+1; 7 9666 ia(ant):= i; 7 9667 end 6 9668 else 6 9669 ok:= false; 6 9670 while ch=' ' do kl:=readch(z_tv_in,ch); 6 9671 end; 5 9672 if ch<>'nl' then ok:= false; 5 9673 while ch<>'nl' and ch<>'em' do kl:=readch(z_tv_in,ch); 5 9674 <* !! setposition(z_tv_in,0,0); !! *> 5 9675 <*+2*> if testbit15 and overvåget then disable outchar(zrl,'nl'); 5 9676 <*-2*> 5 9677 5 9677 if tt='+' or tt='-' or tt='Q' or tt='E' then 5 9678 ok:= ok 5 9679 else if tt='C' or tt='N' or 5 9680 tt='P' or tt='U' or tt='S' or tt='Z' then 5 9681 ok:= ok and ant=1 5 9682 else if tt='X' or tt='Y' then 5 9683 ok:= ok and ant=2 5 9684 else if tt='T' or tt='W' then 5 9685 ok:= ok and ant=64 5 9686 else if tt='R' then 5 9687 ok:= ok and ant extract 1 = 0 5 9688 else 5 9689 begin 6 9690 ok:= false; 6 9691 fejlreaktion(21,tt,<:Ukendt telegramtype:>,2 shift 12 + 1); 6 9692 end; 5 9693 5 9693 end; <* if ch='%' *> 4 9694 læs_tlgr:= ok; 4 9695 end læs_tlgr; 3 9696 \f 3 9696 trap(tvswitch_input_trap); 3 9697 stackclaim(400); 3 9698 for ant:= 1 step 1 until 128 do ia(ant):= 0; 3 9699 3 9699 <*+2*>if (testbit8 and overvåget) or testbit28 then 3 9700 skriv_tvswitch_input(out,0); 3 9701 <*-2*> 3 9702 3 9702 repeat 3 9703 ok:= læs_tlgr; 3 9704 if ok then 3 9705 begin 4 9706 <*V*> waitch(cs_tvswitch_input,opref,op_optype,-1); 4 9707 start_operation(opref,297,cs_tvswitch_input,0); 4 9708 d.opref.resultat:= tt shift 12 + ant; 4 9709 tofrom(d.opref.data,ia,ant*2); 4 9710 signalch(cs_talevejsswitch,opref,op_optype); 4 9711 end; 3 9712 until false; 3 9713 3 9713 tvswitch_input_trap: 3 9714 3 9714 disable skriv_tvswitch_input(zbillede,1); 3 9715 3 9715 end tvswitch_input; 2 9716 \f 2 9716 message procedure tv_switch_adm side 1 - 940502/cl; 2 9717 2 9717 procedure tv_switch_adm; 2 9718 begin 3 9719 integer array field opref; 3 9720 integer rc; 3 9721 3 9721 procedure skriv_tv_switch_adm(zud,omfang); 3 9722 value omfang; 3 9723 zone zud; 3 9724 integer omfang; 3 9725 begin 4 9726 write(zud,"nl",1,<:+++ tv-switch-adm:>); 4 9727 if omfang>0 then 4 9728 disable begin 5 9729 trap(slut); 5 9730 write(zud,"nl",1, 5 9731 <: opref: :>,opref,"nl",1, 5 9732 <: rc: :>,rc,"nl",1, 5 9733 <::>); 5 9734 skriv_coru(zud,coru_no(298)); 5 9735 slut: 5 9736 end; 4 9737 end skriv_tv_switch_adm; 3 9738 3 9738 trap(tv_switch_adm_trap); 3 9739 stackclaim(400); 3 9740 3 9740 <*+2*> if (testbit8 and overvåget) or testbit28 then 3 9741 disable skriv_tv_switch_adm(out,0); 3 9742 <*-2*> 3 9743 3 9743 3 9743 3 9743 <* !!!!!!! PASSIVER KORUTINEN - cs_tvswitch_adm SIGNALERES ALDRIG !!!!!!! 3 9744 waitch(cs_tvswitch_adm,opref,op_optype,-1); 3 9745 *> 3 9746 3 9746 repeat 3 9747 waitch(cs_tvswitch_adgang,opref,op_optype,-1); 3 9748 start_operation(opref,298,cs_tvswitch_adm,'R' shift 12 + 44); 3 9749 rc:= 0; 3 9750 repeat 3 9751 signalch(cs_talevejsswitch,opref,op_optype); 3 9752 <*V*> waitch(cs_tvswitch_adm,opref,op_optype,-1); 3 9753 rc:= rc+1; 3 9754 until rc=3 or d.opref.resultat=3; 3 9755 3 9755 signalch(cs_tvswitch_adgang,opref,op_optype); 3 9756 3 9756 <*V*> delay(15*60); 3 9757 until false; 3 9758 tv_switch_adm_trap: 3 9759 disable skriv_tv_switch_adm(zbillede,1); 3 9760 end; 2 9761 \f 2 9761 message procedure talevejsswitch side 1 -940426/cl; 2 9762 2 9762 procedure talevejsswitch; 2 9763 begin 3 9764 integer tt, ant, ventetid; 3 9765 integer array field opref, gemt_op, tab; 3 9766 boolean ok; 3 9767 integer array ia(1:128); 3 9768 3 9768 procedure skriv_talevejsswitch(zud,omfang); 3 9769 value omfang; 3 9770 zone zud; 3 9771 integer omfang; 3 9772 begin 4 9773 write(zud,"nl",1,<:+++ talevejsswitch:>); 4 9774 if omfang>0 then 4 9775 disable begin 5 9776 real array field raf; 5 9777 trap(slut); 5 9778 raf:= 0; 5 9779 write(zud,"nl",1, 5 9780 <: tt: :>,tt,"nl",1, 5 9781 <: ant: :>,ant,"nl",1, 5 9782 <: ventetid: :>,ventetid,"nl",1, 5 9783 <: opref: :>,opref,"nl",1, 5 9784 <: gemt-op: :>,gemt_op,"nl",1, 5 9785 <: tab: :>,tab,"nl",1, 5 9786 <: ok: :>,(if ok then <:TRUE:> else <:FALSE:>),"nl",1, 5 9787 <::>); 5 9788 write(zud,"nl",1,<:ia: :>); 5 9789 skriv_hele(zud,ia.raf,256,2); 5 9790 skriv_coru(zud,coru_no(299)); 5 9791 slut: 5 9792 end; 4 9793 end skriv_talevejsswitch; 3 9794 \f 3 9794 trap(tvswitch_trap); 3 9795 stackclaim(400); 3 9796 for ant:= 1 step 1 until 128 do ia(ant):= 0; 3 9797 3 9797 <*+2*>if (testbit8 and overvåget) or testbit28 then 3 9798 skriv_talevejsswitch(out,0); 3 9799 <*-2*> 3 9800 3 9800 ventetid:= -1; ant:= 0; tt:= ' '; 3 9801 repeat 3 9802 waitch(cs_talevejsswitch,opref,gen_optype or op_optype,ventetid); 3 9803 if opref > 0 then 3 9804 begin 4 9805 if d.opref.opkode extract 12 = 0 then 4 9806 begin <*input fra talevejsswitchen *> 5 9807 for ant:= 1 step 1 until 128 do ia(ant):= 0; 5 9808 tt:= d.opref.resultat shift (-12) extract 12; 5 9809 ant:= d.opref.resultat extract 12; 5 9810 tofrom(ia,d.opref.data,ant*2); 5 9811 signalch(d.opref.retur,opref,d.opref.optype); 5 9812 5 9812 if tt<>'+' and tt<>'-' then 5 9813 begin 6 9814 write(z_tv_out,"%",1,<:ACK:>,"cr",1); 6 9815 setposition(z_tv_out,0,0); 6 9816 <*+2*> if testbit15 and overvåget then 6 9817 disable begin 7 9818 write(zrl,<<zd dd dd.dd >,now,<:switch-ud: :>,<:%ACK:>); 7 9819 outchar(zrl,'nl'); 7 9820 end; 6 9821 <*-2*> 6 9822 end; 5 9823 if (tt='+' or tt='-') and gemt_op<>0 then 5 9824 begin 6 9825 d.gemt_op.resultat:= (if tt='+' then 3 else 0); 6 9826 signalch(d.gemt_op.retur,gemt_op,d.gemt_op.optype); 6 9827 gemt_op:= 0; 6 9828 ventetid:= -1; 6 9829 end 5 9830 else 5 9831 if tt='R' then 5 9832 begin 6 9833 for i:= 1 step 2 until ant do 6 9834 begin 7 9835 if ia(i) <= max_antal_taleveje and 7 9836 17 <= ia(i+1) and ia(i+1) <= max_antal_operatører+16 7 9837 then 7 9838 begin 8 9839 if op_talevej(ia(i+1)-16)<>ia(i) then 8 9840 tv_operatør(op_talevej(ia(i+1)-16)):= 0; 8 9841 if tv_operatør(ia(i))<>ia(i+1)-16 then 8 9842 op_talevej(tv_operatør(ia(i))):= 0; 8 9843 tv_operatør(ia(i)):= ia(i+1)-16; 8 9844 op_talevej(ia(i+1)-16):= ia(i); 8 9845 sætbit_ia(samtaleflag,ia(i+1)-16,1); 8 9846 end 7 9847 else 7 9848 if ia(i+1) <= max_antal_taleveje and 7 9849 17 <= ia(i) and ia(i) <= max_antal_operatører+16 7 9850 then 7 9851 begin 8 9852 if op_talevej(ia(i))<>ia(i+1)-16 then 8 9853 tv_operatør(op_talevej(ia(i))):= 0; 8 9854 if tv_operatør(ia(i+1)-16)<>ia(i) then 8 9855 op_talevej(tv_operatør(ia(i+1)-16)):= 0; 8 9856 tv_operatør(ia(i+1)):= ia(i)-16; 8 9857 op_talevej(ia(i)-16):= ia(i+1); 8 9858 sætbit_ia(samtaleflag,ia(i)-16,1); 8 9859 end; 7 9860 end; 6 9861 signal_bin(bs_mobil_opkald); 6 9862 <*+2*> if testbit15 and testbit16 and overvåget then 6 9863 disable begin 7 9864 skriv_talevejs_tab(zrl); outchar(zrl,'nl'); 7 9865 end; 6 9866 <*-2*> 6 9867 end <* tt='R' and ant>0 *> 5 9868 else 5 9869 if tt='Y' then 5 9870 begin 6 9871 if ia(1) <= max_antal_taleveje and 6 9872 17 <= ia(2) and ia(2) <= max_antal_operatører+16 6 9873 then 6 9874 begin 7 9875 if tv_operatør(ia(1))=ia(2)-16 and 7 9876 op_talevej(ia(2)-16)=ia(1) 7 9877 then tv_operatør(ia(1)):= op_talevej(ia(2)-16):= 0; 7 9878 end 6 9879 else 6 9880 if ia(2) <= max_antal_taleveje and 6 9881 17 <= ia(1) and ia(1) <= max_antal_operatører+16 6 9882 then 6 9883 begin 7 9884 if tv_operatør(ia(2))=ia(1)-16 and 7 9885 op_talevej(ia(1)-16)=ia(2) 7 9886 then tv_operatør(ia(2)):= op_talevej(ia(1)-16):= 0; 7 9887 end; 6 9888 end 5 9889 else 5 9890 if tt='C' or tt='N' or tt='P' or tt='U' then 5 9891 begin 6 9892 waitch(cs_op_iomedd,opref,gen_optype,-1); 6 9893 startoperation(opref,299,cs_op_iomedd,23); 6 9894 ant:= 1; 6 9895 hægtstring(d.opref.data,ant,<:switch - port :>); 6 9896 anbringtal(d.opref.data,ant,ia(1),2); 6 9897 if 17<=ia(1) and ia(1)<=16+max_antal_operatører then 6 9898 begin 7 9899 hægtstring(d.opref.data,ant,<: (:>); 7 9900 if bpl_navn(ia(1)-16)=long<::> then 7 9901 begin 8 9902 hægtstring(d.opref.data,ant,<:op:>); 8 9903 anbringtal(d.opref.data,ant,ia(1)-16, 8 9904 if ia(1)-16 > 9 then 2 else 1); 8 9905 end 7 9906 else hægtstring(d.opref.data,ant,string bpl_navn(ia(1)-16)); 7 9907 skrivtegn(d.opref.data,ant,')'); 7 9908 end; 6 9909 hægtstring(d.opref.data,ant, 6 9910 if tt='C' then <: Kontakt med kontrolbox etableret:> else 6 9911 if tt='N' then <: Kontakt med kontrolbox tabt:> else 6 9912 if tt='P' then <: Tilgængelig:> else 6 9913 if tt='U' then <: Ikke tilgængelig:> else <::>); 6 9914 repeat afsluttext(d.opref.data,ant) until ant mod 6 = 1; 6 9915 signalch(cs_io,opref,gen_optype); 6 9916 end 5 9917 else 5 9918 if tt='Z' then 5 9919 begin 6 9920 tab:= (ia(1)-16-1)*opk_alarm_tab_lgd; 6 9921 opk_alarm.tab.alarm_tilst:= opk_alarm.tab.alarm_gtilst; 6 9922 end 5 9923 else 5 9924 begin 6 9925 <* ikke implementeret *> 6 9926 end; 5 9927 end 4 9928 else 4 9929 if d.opref.opkode extract 12 = 44 then 4 9930 begin 5 9931 tt:= d.opref.opkode shift (-12); 5 9932 ok:= true; 5 9933 if tt='E' or tt='Q' or tt='R' or tt='W' or tt='S' or tt='I' then 5 9934 begin 6 9935 <*+2*> if testbit15 and overvåget then 6 9936 disable begin 7 9937 write(zrl,<<zd dd dd.dd >,now,<:switch-ud: %:>,false add tt,1); 7 9938 outchar(zrl,'nl'); 7 9939 end; 6 9940 <*-2*> 6 9941 write(z_tv_out,"%",1,false add tt,1,"cr",1); 6 9942 setposition(z_tv_out,0,0); 6 9943 end 5 9944 else 5 9945 if tt='B' or tt='C' or tt='F' then 5 9946 begin 6 9947 <*+2*> if testbit15 and overvåget then 6 9948 disable begin 7 9949 write(zrl,<<zd dd dd.dd >,now,<:switch-ud: %:>,false add tt,1, 7 9950 " ",1,<<d>,d.opref.data(1)); 7 9951 outchar(zrl,'nl'); 7 9952 end; 6 9953 <*-2*> 6 9954 write(z_tv_out,"%",1,false add tt,1," ",1,<<d>, 6 9955 d.opref.data(1),"cr",1); 6 9956 setposition(z_tv_out,0,0); 6 9957 end 5 9958 else 5 9959 if tt='A' or tt='D' or tt='T' then 5 9960 begin 6 9961 <*+2*> if testbit15 and overvåget then 6 9962 disable begin 7 9963 write(zrl,<<zd dd dd.dd >,now,<:switch-ud: %:>,false add tt,1, 7 9964 " ",1,<<d>,d.opref.data(1)," ",1,d.opref.data(2)); 7 9965 outchar(zrl,'nl'); 7 9966 end; 6 9967 <*-2*> 6 9968 write(z_tv_out,"%",1,false add tt,1," ",1,<<d>, 6 9969 d.opref.data(1)," ",1,d.opref.data(2),"cr",1); 6 9970 setposition(z_tv_out,0,0); 6 9971 end 5 9972 else 5 9973 ok:= false; 5 9974 if ok then 5 9975 begin 6 9976 gemt_op:= opref; 6 9977 ventetid:= 2; 6 9978 end 5 9979 else 5 9980 begin 6 9981 d.opref.resultat:= 4; 6 9982 signalch(d.opref.retur,opref,d.opref.optype); 6 9983 end; 5 9984 end; 4 9985 end 3 9986 else 3 9987 if gemt_op<>0 then 3 9988 begin <*timeout*> 4 9989 d.gemt_op.resultat:= 0; 4 9990 signalch(d.gemt_op.retur,gemt_op,d.gemt_op.optype); 4 9991 gemt_op:= 0; 4 9992 ventetid:= -1; 4 9993 <*+2*> if testbit15 and overvåget then 4 9994 disable begin 5 9995 write(zrl,<<zd dd dd.dd >,now,<:switch: *Operation Timeout*:>); 5 9996 outchar(zrl,'nl'); 5 9997 end; 4 9998 <*-2*> 4 9999 end; 3 10000 until false; 3 10001 tvswitch_trap: 3 10002 disable skriv_talevejsswitch(zbillede,1); 3 10003 end talevejsswitch; 2 10004 2 10004 \f 2 10004 message garage_erklæringer side 1 - 810415/hko; 2 10005 2 10005 zone array z_gar(max_antal_garageterminaler,16,1,gar_fejl); 2 10006 2 10006 procedure gar_fejl(z,s,b); 2 10007 integer s,b; 2 10008 zone z; 2 10009 begin 3 10010 disable begin 4 10011 integer array iz(1:20); 4 10012 integer i,j,k; 4 10013 integer array field iaf; 4 10014 real array field raf; 4 10015 4 10015 getzone6(z,iz); 4 10016 iaf:=raf:=2; 4 10017 getnumber(iz.raf,7,j); 4 10018 4 10018 iaf:=(max_antal_operatører+j)*terminal_beskr_længde; 4 10019 k:=1; 4 10020 4 10020 j:= terminal_tab.iaf.terminal_tilstand; 4 10021 if j shift(-21) < 6 and s <> (1 shift 21 +2) then 4 10022 fejlreaktion(17<*ydre enhed status*>,s,string iz.raf(increase(k)), 4 10023 1 shift 12 <*binært*> +1 <*fortsæt*>); 4 10024 if s <> (1 shift 21 +2) then 4 10025 terminal_tab.iaf.terminal_tilstand:= 6 shift 21 4 10026 + terminal_tab.iaf.terminal_tilstand extract 21; 4 10027 if terminal_tab.iaf.terminal_tilstand shift(-21)<>0 then 4 10028 begin 5 10029 z(1):=real <:<'?'><'em'>:>; 5 10030 b:=2; 5 10031 end; 4 10032 end; <*disable*> 3 10033 end gar_fejl; 2 10034 2 10034 integer cs_gar; 2 10035 integer array cs_garage(1:max_antal_garageterminaler); 2 10036 \f 2 10036 message procedure h_garage side 1 - 810520/hko; 2 10037 2 10037 <* hovedmodulkorutine for garageterminaler *> 2 10038 procedure h_garage; 2 10039 begin 3 10040 integer array field op_ref; 3 10041 integer k,dest_sem; 3 10042 procedure skriv_hgarage(zud,omfang); 3 10043 value omfang; 3 10044 zone zud; 3 10045 integer omfang; 3 10046 begin integer i; 4 10047 4 10047 i:=write(zud,"nl",1,<:+++ hovedmodul garage:>); 4 10048 write(zud,"sp",26-i); 4 10049 if omfang>0 then 4 10050 disable begin 5 10051 integer x; 5 10052 trap(slut); 5 10053 write(zud,"nl",1, 5 10054 <: op_ref: :>,op_ref,"nl",1, 5 10055 <: k: :>,k,"nl",1, 5 10056 <: dest_sem: :>,dest_sem,"nl",1, 5 10057 <::>); 5 10058 skriv_coru(zud,coru_no(300)); 5 10059 slut: 5 10060 end; 4 10061 end skriv_hgarage; 3 10062 3 10062 trap(hgar_trap); 3 10063 stack_claim(if cm_test then 198 else 146); 3 10064 3 10064 <*+2*> 3 10065 if testbit16 and overvåget or testbit28 then 3 10066 skriv_hgarage(out,0); 3 10067 <*-2*> 3 10068 \f 3 10068 message procedure h_garage side 2 - 811105/hko; 3 10069 3 10069 repeat 3 10070 wait_ch(cs_gar,op_ref,true,-1); 3 10071 <*+4*> 3 10072 if (d.op_ref.optype and (gar_optype or gen_optype)) extract 12 =0 3 10073 then fejlreaktion(12<*operationstype*>,op_ref,<:garage:>,1); 3 10074 <*-4*> 3 10075 3 10075 k:=d.op_ref.opkode extract 12; 3 10076 dest_sem:= 3 10077 if k=0 then cs_garage(d.op_ref.kilde mod 100) else 3 10078 if k=7 or k=8 then cs_garage(d.op_ref.data(1)) 3 10079 else -1; 3 10080 <*+4*> 3 10081 if dest_sem=-1 then 3 10082 begin 4 10083 fejl_reaktion(2<*operationskode*>,k,<:hovedmodul garage:>,1); 4 10084 signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype); 4 10085 end 3 10086 else 3 10087 <*-4*> 3 10088 if k=7<*inkluder*> then 3 10089 begin 4 10090 iaf:=(max_antal_operatører+ d.op_ref.data(1))*terminal_beskr_længde; 4 10091 if terminal_tab.iaf.terminal_tilstand shift(-21)=0 then 4 10092 begin 5 10093 d.op_ref.resultat:=3; 5 10094 signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype); 5 10095 dest_sem:=-2; 5 10096 end; 4 10097 end 3 10098 else 3 10099 if k=8<*ekskluder*> then <*afbryd kommando v. timeout*> 3 10100 begin 4 10101 iaf:=(max_antal_operatører+d.op_ref.data(1))*terminal_beskr_længde; 4 10102 terminal_tab.iaf.terminal_tilstand:= 7 shift 21 4 10103 +terminal_tab.iaf.terminal_tilstand extract 21; 4 10104 end; 3 10105 if dest_sem>0 then 3 10106 signal_ch(dest_sem,op_ref,d.op_ref.optype); 3 10107 until false; 3 10108 3 10108 hgar_trap: 3 10109 disable skriv_hgarage(zbillede,1); 3 10110 end h_garage; 2 10111 \f 2 10111 message procedure garage side 1 - 830310/cl; 2 10112 2 10112 procedure garage(nr); 2 10113 value nr; 2 10114 integer nr; 2 10115 begin 3 10116 integer array field op_ref,ref; 3 10117 integer i,kode,aktion,status,opgave,retur_sem, 3 10118 pos,indeks,sep,sluttegn,vogn,ll; 3 10119 3 10119 procedure skriv_garage(zud,omfang); 3 10120 value omfang; 3 10121 zone zud; 3 10122 integer omfang; 3 10123 begin integer i; 4 10124 4 10124 i:=write(zud,"nl",1,<:+++ garage nr::>,nr); 4 10125 write(zud,"sp",26-i); 4 10126 if omfang > 0 then 4 10127 disable begin integer x; 5 10128 trap(slut); 5 10129 write(zud,"nl",1, 5 10130 <: op-ref: :>,op_ref,"nl",1, 5 10131 <: kode: :>,kode,"nl",1, 5 10132 <: ref: :>,ref,"nl",1, 5 10133 <: i: :>,i,"nl",1, 5 10134 <: aktion: :>,aktion,"nl",1, 5 10135 <: retur-sem: :>,retur_sem,"nl",1, 5 10136 <: vogn: :>,vogn,"nl",1, 5 10137 <: ll: :>,ll,"nl",1, 5 10138 <: status: :>,status,"nl",1, 5 10139 <: opgave: :>,opgave,"nl",1, 5 10140 <: pos: :>,pos,"nl",1, 5 10141 <: indeks: :>,indeks,"nl",1, 5 10142 <: sep: :>,sep,"nl",1, 5 10143 <: sluttegn: :>,sluttegn,"nl",1, 5 10144 <::>); 5 10145 skriv_coru(zud,coru_no(300+nr)); 5 10146 slut: 5 10147 end; 4 10148 end skriv_garage; 3 10149 \f 3 10149 message procedure garage side 2 - 830310/hko; 3 10150 3 10150 trap(gar_trap); 3 10151 stack_claim((if cm_test then 200 else 146)+24+48+80+75); 3 10152 3 10152 ref:= (max_antal_operatører+nr)*terminal_beskr_længde; 3 10153 3 10153 <*+2*> 3 10154 if testbit16 and overvåget or testbit28 then 3 10155 skriv_garage(out,0); 3 10156 <*-2*> 3 10157 3 10157 <* attention simulering 3 10158 *> 3 10159 if terminal_tab.ref.terminal_tilstand shift (-21) = 0 then 3 10160 begin 4 10161 wait_ch(cs_att_pulje,op_ref,true,-1); 4 10162 start_operation(op_ref,300+nr,cs_garage(nr),0); 4 10163 signal_ch(cs_garage(nr),op_ref,gen_optype); 4 10164 end; 3 10165 <* 3 10166 *> 3 10167 \f 3 10167 message procedure garage side 3 - 830310/hko; 3 10168 3 10168 repeat 3 10169 3 10169 <*V*> wait_ch(cs_garage(nr), 3 10170 op_ref, 3 10171 true, 3 10172 -1<*timeout*>); 3 10173 <*+2*> 3 10174 if testbit17 and overvåget then 3 10175 disable begin 4 10176 write(out,"nl",1,<:operation fra cs:>,<<d>,cs_garage(nr), 4 10177 <: til garage :>,nr); 4 10178 skriv_op(out,op_ref); 4 10179 end; 3 10180 <*-2*> 3 10181 3 10181 kode:= d.op_ref.op_kode; 3 10182 retur_sem:= d.op_ref.retur; 3 10183 i:= terminal_tab.ref.terminal_tilstand; 3 10184 status:= i shift(-21); 3 10185 opgave:= 3 10186 if kode=0 then 1 <* indlæs kommando *> else 3 10187 if kode=7 then 2 <* inkluder *> else 3 10188 if kode=8 then 3 <* ekskluder *> else 3 10189 0; <* afvises *> 3 10190 3 10190 aktion:= case status +1 of( 3 10191 <* status *> <* opgave: 0 1 2 3 *> 3 10192 <* 0 klar *>(case opgave+1 of( 0, 1, -4, 3)), 3 10193 <* 1 - *>(-1),<* ulovlig tilstand *> 3 10194 <* 2 - *>(-1),<* ulovlig tilstand *> 3 10195 <* 3 stoppet *>(case opgave+1 of( 0, 2, 2, 3)), 3 10196 <* 4 noneksist *>(-2),<* ulovligt garageterminalnr *> 3 10197 <* 5 - *>(-1),<* ulovlig tilstand *> 3 10198 <* 6 stop v. fejl *>(case opgave+1 of( 0, -5, 2, 3)), 3 10199 <* 7 ej knyttet *>(case opgave+1 of( 0, -5, 2, 3)), 3 10200 -1); 3 10201 \f 3 10201 message procedure garage side 4 - 810424/hko; 3 10202 3 10202 case aktion+6 of 3 10203 begin 4 10204 begin 5 10205 <*-5: terminal optaget *> 5 10206 5 10206 d.op_ref.resultat:= 16; 5 10207 afslut_operation(op_ref,cs_att_pulje); <*telex*> 5 10208 end; 4 10209 4 10209 begin 5 10210 <*-4: operation uden virkning *> 5 10211 5 10211 afslut_operation(op_ref,-1); 5 10212 end; 4 10213 4 10213 begin 5 10214 <*-3: ulovlig operationskode *> 5 10215 5 10215 fejl_reaktion(2<*operationskode*>,kode,<:ulovlig:>,1); 5 10216 afslut_operation(op_ref,-1); 5 10217 end; 4 10218 4 10218 begin 5 10219 <*-2: ulovligt garageterminal_nr *> 5 10220 5 10220 fejl_reaktion(3<*programfejl*>,nr,<: ikke eksisterende garage:>,1); 5 10221 afslut_operation(op_ref,cs_att_pulje); <*telex*> 5 10222 end; 4 10223 4 10223 begin 5 10224 <*-1: ulovlig operatørtilstand *> 5 10225 5 10225 fejl_reaktion(3<*programfejl*>,status,<: ulovlig garage-status:>,1); 5 10226 afslut_operation(op_ref,-1); 5 10227 end; 4 10228 4 10228 begin 5 10229 <* 0: ikke implementeret *> 5 10230 5 10230 fejl_reaktion(2<*operationskode*>,kode,<: ikke implementeret:>,1); 5 10231 afslut_operation(op_ref,-1); 5 10232 end; 4 10233 4 10233 begin 5 10234 \f 5 10234 message procedure garage side 5 - 851001/cl; 5 10235 5 10235 <* 1: indlæs kommando *> 5 10236 5 10236 5 10236 <*V*> læs_kommando(z_gar(nr),300+nr,op_ref,pos,indeks,sep,sluttegn); 5 10237 5 10237 if d.op_ref.resultat > 3 then 5 10238 begin 6 10239 <*V*> setposition(z_gar(nr),0,0); 6 10240 if sluttegn<>'nl' then outchar(z_gar(nr),'nl'); 6 10241 skriv_kvittering(z_gar(nr),op_ref,pos, 6 10242 d.op_ref.resultat); 6 10243 end 5 10244 else if d.op_ref.resultat>0 then 5 10245 begin <*godkendt*> 6 10246 kode:=d.op_ref.opkode; 6 10247 i:= kode extract 12; 6 10248 j:= if kode=11 or kode=12 or kode=20 or kode=24 then 1 6 10249 else if kode=9 or kode=10 then 2 6 10250 else 0; 6 10251 if j > 0 then 6 10252 begin 7 10253 case j of 7 10254 begin 8 10255 begin 9 10256 \f 9 10256 message procedure garage side 6 - 851001/cl; 9 10257 9 10257 <* 1 indsæt/udtag/flyt bus i vogntabel *> 9 10258 integer vogn,ll; 9 10259 integer array field vtop; 9 10260 9 10260 vogn:=ia(1); 9 10261 ll:=ia(2); 9 10262 <*V*> wait_ch(cs_vt_adgang, 9 10263 vt_op, 9 10264 gen_optype, 9 10265 -1<*timeout sek*>); 9 10266 start_operation(vtop,300+nr,cs_garage(nr), 9 10267 kode); 9 10268 d.vt_op.data(1):=vogn; 9 10269 if kode=11 or kode=20 or kode=24 then d.vt_op.data(2):=ll; 9 10270 indeks:= vt_op; 9 10271 signal_ch(cs_vt, 9 10272 vt_op, 9 10273 gen_optype or gar_optype); 9 10274 9 10274 <*V*> wait_ch(cs_garage(nr), 9 10275 vt_op, 9 10276 gar_optype, 9 10277 -1<*timeout sek*>); 9 10278 <*+2*> if testbit18 and overvåget then 9 10279 disable begin 10 10280 write(out,"nl",1,<:garage :>,<<d>,nr, 10 10281 <:: operation retur fra vt:>); 10 10282 skriv_op(out,vt_op); 10 10283 end; 9 10284 <*-2*> 9 10285 <*+4*> if vt_op<>indeks then 9 10286 fejl_reaktion(11<*fremmede op*>,op_ref, 9 10287 <:garage-kommando:>,0); 9 10288 <*-4*> 9 10289 <*V*> setposition(z_gar(nr),0,0); 9 10290 if sluttegn<>'nl' then outchar(z_gar(nr),'nl'); 9 10291 skriv_kvittering(z_gar(nr),if d.vt_op.resultat = 11 or 9 10292 d.vt_op.resultat = 12 then d.vt_op.data(3) 9 10293 else vt_op,-1,d.vt_op.resultat); 9 10294 d.vt_op.optype:=gen_optype or vtoptype; 9 10295 disable afslut_operation(vt_op,cs_vt_adgang); 9 10296 end; 8 10297 8 10297 begin 9 10298 \f 9 10298 message procedure garage side 6a - 830310/cl; 9 10299 9 10299 <* 2 vogntabel,linienr/-,busnr *> 9 10300 9 10300 d.op_ref.retur:= cs_garage(nr); 9 10301 tofrom(d.op_ref.data,ia,10); 9 10302 indeks:= op_ref; 9 10303 signal_ch(cs_vt,op_ref,gen_optype or gar_optype); 9 10304 wait_ch(cs_garage(nr), 9 10305 op_ref, 9 10306 gar_optype, 9 10307 -1<*timeout*>); 9 10308 <*+2*> if testbit18 and overvåget then 9 10309 disable begin 10 10310 write(out,"nl",1,<:garage operation retur fra vt:>); 10 10311 skriv_op(out,op_ref); 10 10312 end; 9 10313 <*-2*> 9 10314 <*+4*> 9 10315 if indeks <> op_ref then 9 10316 fejlreaktion(11<*fremmed post*>,op_ref,<:garage komm:>,0); 9 10317 <*-4*> 9 10318 i:= d.op_ref.resultat; 9 10319 if i = 0 or i > 3 then 9 10320 begin 10 10321 <*V*> setposition(z_gar(nr),0,0); 10 10322 skriv_kvittering(z_gar(nr),op_ref,-1,d.op_ref.resultat); 10 10323 end 9 10324 else 9 10325 begin 10 10326 integer antal,fil_ref; 10 10327 antal:= d.op_ref.data(6); 10 10328 fil_ref:= d.op_ref.data(7); 10 10329 <*V*> setposition(z_gar(nr),0,0); 10 10330 write(z_gar(nr),"*",24,"sp",6, 10 10331 <:vogntabeludskrift:>,"sp",6,"*",24,"nl",2); 10 10332 <*V*> setposition(z_gar(nr),0,0); 10 10333 \f 10 10333 message procedure garage side 6c - 841213/cl; 10 10334 10 10334 pos:= 1; 10 10335 while pos <= antal do 10 10336 begin 11 10337 integer bogst,løb; 11 10338 11 10338 disable i:= læs_fil(fil_ref,pos,j); 11 10339 if i <> 0 then 11 10340 fejlreaktion(5<*læs_fil*>,i,<:garage: vo,l/vo,b:>,0) 11 10341 else 11 10342 begin 12 10343 vogn:= fil(j,1) shift (-24) extract 24; 12 10344 løb:= fil(j,1) extract 24; 12 10345 if d.op_ref.opkode=9 then 12 10346 begin i:=vogn; vogn:=løb; løb:=i; end; 12 10347 ll:= løb shift (-12) extract 10; 12 10348 bogst:= løb shift (-7) extract 5; 12 10349 if bogst > 0 then bogst:= bogst +'A'-1; 12 10350 løb:= løb extract 7; 12 10351 vogn:= vogn extract 14; 12 10352 i:= d.op_ref.opkode-8; 12 10353 for i:= i,i+1 do 12 10354 begin 13 10355 j:= (i+1) extract 1; 13 10356 case j +1 of 13 10357 begin 14 10358 write(z_gar(nr),"sp",(bogst=0) extract 1,<<ddd>,ll, 14 10359 false add bogst,1,"/",1,<<d__>,løb); 14 10360 write(z_gar(nr),<<dddd>,vogn,"sp",1); 14 10361 end; 13 10362 end; 12 10363 if pos mod 5 = 0 then 12 10364 begin 13 10365 write(z_gar(nr),"nl",1); 13 10366 <*V*> setposition(z_gar(nr),0,0); 13 10367 end 12 10368 else write(z_gar(nr),"sp",3); 12 10369 end; 11 10370 pos:=pos+1; 11 10371 end; 10 10372 write(z_gar(nr),"nl",1,"*",77,"nl",1); 10 10373 \f 10 10373 message procedure garage side 6d- 830310/cl; 10 10374 10 10374 d.opref.opkode:=104; <*slet-fil*> 10 10375 d.op_ref.data(4):=filref; 10 10376 indeks:=op_ref; 10 10377 signal_ch(cs_slet_fil,op_ref,gen_optype or gar_optype); 10 10378 <*V*> wait_ch(cs_garage(nr),op_ref,gar_optype,-1); 10 10379 10 10379 <*+2*> if testbit18 and overvåget then 10 10380 disable begin 11 10381 write(out,"nl",1,<:garage, slet-fil retur:>); 11 10382 skriv_op(out,op_ref); 11 10383 end; 10 10384 <*-2*> 10 10385 10 10385 <*+4*> if op_ref<>indeks then 10 10386 fejlreaktion(11<*fr.post*>,op_ref,<:garage,slet-fil:>,0); 10 10387 <*-4*> 10 10388 if d.op_ref.data(9)<>0 then 10 10389 fejl_reaktion(3<*prg.fejl*>,d.op_ref.data(9), 10 10390 <:garage, slet_fil:>,1); 10 10391 end; 9 10392 \f 9 10392 message procedure garage side 7 -810424/hko; 9 10393 9 10393 end; 8 10394 8 10394 <*+4*> fejl_reaktion(3<*programfejl*>,j,<:case 'opkode':>,2); 8 10395 <*-4*> 8 10396 end;<*case j *> 7 10397 end <* j > 0 *> 6 10398 else 6 10399 begin 7 10400 <*V*> setposition(z_gar(nr),0,0); 7 10401 if sluttegn<>'nl' then outchar(z_gar(nr),'nl'); 7 10402 skriv_kvittering(z_gar(nr),op_ref,pos, 7 10403 4 <*kommando ukendt *>); 7 10404 end; 6 10405 end;<* godkendt *> 5 10406 5 10406 <*V*> setposition(z_gar(nr),0,0); 5 10407 5 10407 d.op_ref.opkode:=0; <*telex*> 5 10408 5 10408 disable afslut_operation(op_ref,cs_gar); 5 10409 end; <* indlæs kommando *> 4 10410 4 10410 begin 5 10411 \f 5 10411 message procedure garage side 8 - 841213/cl; 5 10412 5 10412 <* 2: inkluder *> 5 10413 5 10413 d.op_ref.resultat:=3; 5 10414 afslut_operation(op_ref,-1); 5 10415 monitor(8)reserve:(z_gar(nr),0,ia); 5 10416 terminal_tab.ref.terminal_tilstand:= 5 10417 terminal_tab.ref.terminal_tilstand extract 21; 5 10418 <*V*> wait_ch(cs_att_pulje,op_ref,true,-1); 5 10419 start_operation(op_ref,300+nr,cs_att_pulje,0); 5 10420 signal_ch(cs_garage(nr),op_ref,gen_optype); 5 10421 end; 4 10422 4 10422 begin 5 10423 5 10423 <* 3: ekskluder *> 5 10424 d.op_ref.resultat:= 3; 5 10425 terminal_tab.ref.terminal_tilstand:= 7 shift 21 + 5 10426 terminal_tab.ref.terminal_tilstand extract 21; 5 10427 monitor(10)release:(z_gar(nr),0,ia); 5 10428 afslut_operation(op_ref,-1); 5 10429 5 10429 end; 4 10430 4 10430 <*+4*> fejl_reaktion(3<*programfejl *>,aktion,<:case aktion:>,2); 4 10431 <*-4*> 4 10432 end; <* case aktion+6 *> 3 10433 3 10433 until false; 3 10434 gar_trap: 3 10435 skriv_garage(zbillede,1); 3 10436 end garage; 2 10437 2 10437 \f 2 10437 message procedure radio_erklæringer side 1 - 820304/hko; 2 10438 2 10438 zone z_fr_in(14,1,rad_in_fejl), 2 10439 z_rf_in(14,1,rad_in_fejl), 2 10440 z_fr_out(14,1,rad_out_fejl), 2 10441 z_rf_out(14,1,rad_out_fejl); 2 10442 2 10442 integer array 2 10443 radiofejl, 2 10444 ss_samtale_nedlagt, 2 10445 ss_radio_aktiver(1:max_antal_kanaler), 2 10446 bs_talevej_udkoblet, 2 10447 cs_radio(1:max_antal_taleveje), 2 10448 radio_linietabel(1:max_linienr//3+1), 2 10449 radio_områdetabel(0:max_antal_områder), 2 10450 opkaldskø(opkaldskø_postlængde//2+1: 2 10451 (max_antal_mobilopkald+1)*opkaldskø_postlængde//2), 2 10452 kanal_tab(1:max_antal_kanaler*kanal_beskr_længde//2), 2 10453 hookoff_maske(1:(tv_maske_lgd//2)), 2 10454 samtaleflag, kanalflag, opkaldsflag(1:(op_maske_lgd//2)); 2 10455 2 10455 integer field 2 10456 kanal_tilstand, 2 10457 kanal_id1, 2 10458 kanal_id2, 2 10459 kanal_spec, 2 10460 kanal_alt_id1, 2 10461 kanal_alt_id2; 2 10462 integer array field 2 10463 kanal_mon_maske, 2 10464 kanal_alarm, 2 10465 opkald_meldt; 2 10466 2 10466 integer 2 10467 cs_rad, 2 10468 cs_radio_medd, 2 10469 cs_radio_adm, 2 10470 cs_radio_ind, 2 10471 cs_radio_ud, 2 10472 cs_radio_pulje, 2 10473 cs_radio_kø, 2 10474 bs_mobil_opkald, 2 10475 bs_opkaldskø_adgang, 2 10476 opkaldskø_ledige, 2 10477 nødopkald_brugt, 2 10478 første_frie_opkald, 2 10479 første_opkald, 2 10480 sidste_opkald, 2 10481 første_nødopkald, 2 10482 sidste_nødopkald, 2 10483 optaget_flag; 2 10484 2 10484 boolean 2 10485 mobil_opkald_aktiveret; 2 10486 \f 2 10486 message procedure læs_hex_ciffer side 1 - 810428/hko; 2 10487 2 10487 integer 2 10488 procedure læs_hex_ciffer(tabel,linie,op); 2 10489 value linie; 2 10490 integer array tabel; 2 10491 integer linie,op; 2 10492 begin 3 10493 integer i,j; 3 10494 3 10494 i:=(if linie>=0 then linie+6 else linie)//6; 3 10495 j:=((i-1)*6-linie)*4; 3 10496 læs_hex_ciffer:=op:=tabel(i) shift j extract 4; 3 10497 end læs_hex_ciffer; 2 10498 2 10498 message procedure sæt_hex_ciffer side 1 - 810505/hko; 2 10499 2 10499 integer 2 10500 procedure sæt_hex_ciffer(tabel,linie,op); 2 10501 value linie; 2 10502 integer array tabel; 2 10503 integer linie,op; 2 10504 begin 3 10505 integer i,j; 3 10506 3 10506 i:=(if linie>=0 then linie+6 else linie)//6; 3 10507 j:=(linie-(i-1)*6)*4; 3 10508 sæt_hex_ciffer:= tabel(i) shift (-j) extract 4; 3 10509 tabel(i):=tabel(i) shift (-4-j) shift 4 add (op extract 4) 3 10510 shift j add (tabel(i) extract j); 3 10511 end sæt_hex_ciffer; 2 10512 2 10512 message procedure hex_to_dec side 1 - 900108/cl; 2 10513 2 10513 integer procedure hex_to_dec(hex); 2 10514 value hex; 2 10515 integer hex; 2 10516 begin 3 10517 hex_to_dec:= if 'A'<=hex and hex<='F' then (hex-'A'+10) 3 10518 else (hex-'0'); 3 10519 end; 2 10520 2 10520 message procedure dec_to_hex side 1 - 900108/cl; 2 10521 2 10521 integer procedure dec_to_hex(dec); 2 10522 value dec; 2 10523 integer dec; 2 10524 begin 3 10525 dec_to_hex:= if 0<=dec and dec<=9 then ('0'+dec) 3 10526 else ('A'+dec-10); 3 10527 end; 2 10528 2 10528 message procedure rad_out_fejl side 1 - 820304/hko; 2 10529 2 10529 procedure rad_out_fejl(z,s,b); 2 10530 value s; 2 10531 zone z; 2 10532 integer s,b; 2 10533 begin 3 10534 integer array field iaf; 3 10535 integer pos,tegn,max,i; 3 10536 integer array ia(1:20); 3 10537 long array field laf; 3 10538 3 10538 disable begin 4 10539 laf:= iaf:= 2; 4 10540 tegn:= 1; 4 10541 getzone6(z,ia); 4 10542 max:= ia(16)//2*3; 4 10543 if s = 1 shift 21 + 2 then 4 10544 begin 5 10545 z(1):= real<:<'em'>:>; 5 10546 b:= 2; 5 10547 end 4 10548 else 4 10549 begin 5 10550 pos:= 0; 5 10551 for i:= 1 step 1 until max_antal_kanaler do 5 10552 begin 6 10553 iaf:= (i-1)*kanalbeskr_længde; 6 10554 if sæt_hex_ciffer(kanal_tab.iaf,3,15)<>15 then pos:= pos+1; 6 10555 if pos>0 then 6 10556 begin 7 10557 tofrom(kanalflag,alle_operatører,op_maske_lgd); 7 10558 signalbin(bs_mobilopkald); 7 10559 fejlreaktion(17<*y.e.status*>,s,string ia.laf(increase(tegn)), 7 10560 1 shift 12<*binært*> +1<*fortsæt*>); 7 10561 end; 6 10562 end; 5 10563 end; 4 10564 end; 3 10565 end; 2 10566 \f 2 10566 message procedure rad_in_fejl side 1 - 810601/hko; 2 10567 2 10567 procedure rad_in_fejl(z,s,b); 2 10568 value s; 2 10569 zone z; 2 10570 integer s,b; 2 10571 begin 3 10572 integer array field iaf; 3 10573 integer pos,tegn,max,i; 3 10574 integer array ia(1:20); 3 10575 long array field laf; 3 10576 3 10576 disable begin 4 10577 laf:= iaf:= 2; 4 10578 i:= 1; 4 10579 getzone6(z,ia); 4 10580 max:= ia(16)//2*3; 4 10581 if s shift (-21) extract 1 = 0 4 10582 and s shift(-19) extract 1 = 0 then 4 10583 begin 5 10584 if b = 0 then 5 10585 begin 6 10586 z(1):= real<:!:>; 6 10587 b:= 2; 6 10588 end; 5 10589 end; 4 10590 \f 4 10590 message procedure rad_in_fejl side 2 - 820304/hko; 4 10591 4 10591 if (s <> 1 shift 21 +2 and s shift(-19) extract 1 = 0) then 4 10592 begin 5 10593 fejlreaktion(17<*ydre enhed status*>,s,string ia.laf(increase(i)), 5 10594 1 shift 12<*binær*> +1<*fortsæt*>); 5 10595 end 4 10596 else 4 10597 if s shift (-19) extract 1 = 1 then 4 10598 begin 5 10599 z(1):= real<:!<'nl'>:>; 5 10600 b:= 2; 5 10601 end 4 10602 else 4 10603 if s = 1 shift 21 +2 or s shift(-19) extract 1 =1 then 4 10604 begin 5 10605 <* 5 10606 if b = 0 then 5 10607 begin 5 10608 *> 5 10609 z(1):= real <:<'em'>:>; 5 10610 b:= 2; 5 10611 <* 5 10612 end 5 10613 else 5 10614 begin 5 10615 tegn:= -1; 5 10616 iaf:= 0; 5 10617 pos:= b//2*3-2; 5 10618 while pos < max and tegn <> 0 do læstegn(z.iaf,pos,tegn); 5 10619 skriv_tegn(z.iaf,pos,'?'); 5 10620 if pos<=max then 5 10621 afslut_text(z.iaf,pos); 5 10622 b:= (pos-1)//3*2; 5 10623 end; 5 10624 *> 5 10625 end;<* s=1 shift 21+2 *> 4 10626 end; 3 10627 if testbit22 and 3 10628 (s <> 1 shift 21 +2 and s shift(-19) extract 1 = 0) 3 10629 then 3 10630 delay(60); 3 10631 end rad_in_fejl; 2 10632 \f 2 10632 message procedure afvent_radioinput side 1 - 880901/cl; 2 10633 2 10633 integer procedure afvent_radioinput(z_in,tlgr,rf); 2 10634 value rf; 2 10635 zone z_in; 2 10636 integer array tlgr; 2 10637 boolean rf; 2 10638 begin 3 10639 integer i, p, pos, tegn, ac, sum, csum, lgd; 3 10640 long array field laf; 3 10641 3 10641 laf:= 0; 3 10642 pos:= 1; 3 10643 repeat 3 10644 i:=readchar(z_in,tegn); 3 10645 if i<>8 and pos<80 then skrivtegn(tlgr,pos,tegn); 3 10646 until (i=8 and pos>1) or (tegn='em') or (pos>=80); 3 10647 p:=pos; 3 10648 repeat afsluttext(tlgr,p) until p mod 6 = 1; 3 10649 <*+2*>if overvåget and (testbit36 or ((-,rf) and testbit38) or 3 10650 (rf and testbit39)) then 3 10651 disable begin 4 10652 write(zrl,<<zd dd dd.dd >,now, 4 10653 (if -,rf then <:fr-tlgr: :> else <:rf-answ: :>),tlgr.laf, 4 10654 if tegn='em' then <:*timeout*:> else 4 10655 if pos>=80 then <:*for langt*:> else <::>); 4 10656 outchar(zrl,'nl'); 4 10657 end; 3 10658 <*-2*> 3 10659 ac:= -1; 3 10660 if pos >= 80 then 3 10661 begin <* telegram for langt *> 4 10662 repeat readchar(z_in,tegn) 4 10663 until tegn='nl' or tegn='em'; 4 10664 end 3 10665 else 3 10666 if pos>1 and tegn='nl' then 3 10667 begin 4 10668 lgd:= 1; 4 10669 while læstegn(tlgr,lgd,tegn)<>0 do ; 4 10670 lgd:= lgd-2; 4 10671 if lgd >= 5 then 4 10672 begin 5 10673 lgd:= lgd-2; <* se bort fra checksum *> 5 10674 i:= lgd + 1; 5 10675 csum:= (læstegn(tlgr,i,tegn) - '@')*16; 5 10676 csum:= csum + (læstegn(tlgr,i,tegn) - '@'); 5 10677 i:= lgd + 1; 5 10678 skrivtegn(tlgr,i,0); 5 10679 skrivtegn(tlgr,i,0); 5 10680 i:= 1; sum:= 0; 5 10681 while i <= lgd do 5 10682 sum:= (sum + læstegn(tlgr,i,tegn)) mod 256; 5 10683 if csum >= 0 and csum <> sum then 5 10684 begin 6 10685 <*+2*> if overvåget and (testbit36 or 6 10686 ((-,rf) and testbit38) or (rf and testbit39)) then 6 10687 disable begin 7 10688 write(zrl,<<zd dd dd.dd >,now, 7 10689 (if rf then <:rf:> else <:fr:>), 7 10690 <:-tlgr-checksumfejl: :>,csum,sum); outchar(zrl,'nl'); 7 10691 end; 6 10692 <*-2*> 6 10693 ac:= 6 <* checksumfejl *> 6 10694 end 5 10695 else 5 10696 ac:= 0; 5 10697 end 4 10698 else ac:= 6; <* for kort telegram - retransmitter *> 4 10699 end; 3 10700 afvent_radioinput:= ac; 3 10701 end; 2 10702 \f 2 10702 message procedure skriv_kanal_tab side 1 - 820304/hko; 2 10703 2 10703 procedure skriv_kanal_tab(z); 2 10704 zone z; 2 10705 begin 3 10706 integer array field ref; 3 10707 integer i,j,t,op,id1,id2; 3 10708 3 10708 write(z,"ff",1,"nl",1,<: 3 10709 ******** kanal-beskrivelser ******* 3 10710 3 10710 a k l p m b n 3 10711 l a y a o s ø 3 10712 nr tv tilst + * l t t s n v d - type id1 id2 ttmm/ant -ej.op:>, 3 10713 <* 3 10714 01 ..... ..... x x x x x x x x x x .... ........ ........ .... .... ---- 3 10715 *> 3 10716 "nl",1); 3 10717 for i:=1 step 1 until max_antal_kanaler do 3 10718 begin 4 10719 ref:=(i-1)*kanal_beskr_længde; 4 10720 t:=kanal_tab.ref.kanal_tilstand; 4 10721 id1:=kanal_tab.ref.kanal_id1; 4 10722 id2:=kanal_tab.ref.kanal_id2; 4 10723 write(z,"nl",1,"sp",4, 4 10724 <<dd>,i,<<-ddddd>,t shift(-16),t shift(-12) extract 4,"sp",1); 4 10725 for j:=11 step -1 until 2 do 4 10726 write(z,if læsbit_i(t,j) then "X" else "sp",1,"sp",1); 4 10727 write(z,case t extract 2 +1 of 4 10728 (<:- :>,<:OPK :>,<:MEDD:>,<:GNM :>), 4 10729 "sp",1); 4 10730 skriv_id(z,id1,9); 4 10731 skriv_id(z,id2,9); 4 10732 t:=kanal_tab.ref.kanal_spec; 4 10733 write(z,"sp",1,<<-dddd>,t,t shift(-16),"sp",1,-(t extract 8)); 4 10734 write(z,"nl",1,"sp",14,<:mon: :>); 4 10735 for j:= max_antal_taleveje step -1 until 1 do 4 10736 write(z,(if læs_bit_ia(kanal_tab.ref.kanal_mon_maske,j) then "1" 4 10737 else "."),1); 4 10738 write(z,"sp",25-max_antal_taleveje); 4 10739 skriv_id(z,kanal_tab.ref.kanal_alt_id1,9); 4 10740 skriv_id(z,kanal_tab.ref.kanal_alt_id2,9); 4 10741 end; 3 10742 write(z,"nl",2,<:kanalflag::>,"nl",1); 3 10743 outintbits_ia(z,kanalflag,1,op_maske_lgd//2); 3 10744 write(z,"nl",2); 3 10745 end skriv_kanal_tab; 2 10746 \f 2 10746 message procedure skriv_opkaldskø side 1 - 820301/hko; 2 10747 2 10747 procedure skriv_opkaldskø(z); 2 10748 zone z; 2 10749 begin 3 10750 integer i,bogst,løb,j; 3 10751 integer array field ref; 3 10752 write(z,"nl",2,"*",5,<: opkaldskø :>,"*",5,"nl",2, 3 10753 <: ref næste foreg X bus linie/løb tid - op type :>, 3 10754 <: sig omr :>,"nl",1); 3 10755 for i:= 1 step 1 until max_antal_mobilopkald do 3 10756 begin 4 10757 ref:= i*opkaldskø_postlængde; 4 10758 j:= opkaldskø.ref(1); 4 10759 write(z,<< dddd>,ref,<< ddddd>,j extract 12,j shift (-12)); 4 10760 j:= opkaldskø.ref(2); 4 10761 write(z,"sp",1,if j < 0 then "X" else "sp",1,"sp",1); 4 10762 skriv_id(z,j extract 23,9); 4 10763 j:= opkaldskø.ref(3); 4 10764 skriv_id(z,j,7); 4 10765 j:= opkaldskø.ref(4); 4 10766 write(z,<< zd.dd>,(j shift (-12))/100.0, 4 10767 << zd>,j extract 8); 4 10768 j:= j shift (-8) extract 4; 4 10769 if j = 1 or j = 2 then 4 10770 write(z,if j=1 then <: normal:> else <: nød :>) 4 10771 else write(z,<<dddd>,j,"sp",3); 4 10772 j:= opkaldskø.ref(5); 4 10773 write(z,if j shift (-20) <> 0 then <: B :> else <: S :>, 4 10774 true,4,if 1<=(j extract 8) and (j extract 8)<=max_antal_områder then 4 10775 string område_navn(j extract 8) else <:---:>); 4 10776 outchar(z,'nl'); 4 10777 end; 3 10778 3 10778 write(z,"nl",1,<<z>, 3 10779 <:første_frie_opkald=:>,første_frie_opkald,"nl",1, 3 10780 <:første_opkald=:>,første_opkald,"nl",1, 3 10781 <:sidste_opkald=:>,sidste_opkald,"nl",1, 3 10782 <:første_nødopkald=:>,første_nødopkald,"nl",1, 3 10783 <:sidste_nødopkald=:>,sidste_nødopkald,"nl",1, 3 10784 <:opkaldskø_ledige=:>,opkaldskø_ledige,"nl",1, 3 10785 <:nødopkald_brugt= :>,nødopkald_brugt,"nl",1, 3 10786 "nl",1,<:opkaldsflag::>,"nl",1); 3 10787 outintbits_ia(z,opkaldsflag,1,op_maske_lgd//2); 3 10788 write(z,"nl",2); 3 10789 end skriv_opkaldskø; 2 10790 \f 2 10790 message procedure skriv_radio_linietabel side 1 - 820301/hko; 2 10791 2 10791 procedure skriv_radio_linie_tabel(z); 2 10792 zone z; 2 10793 begin 3 10794 integer i,j,k; 3 10795 3 10795 write(z,"nl",2,"*",5,<: liniefordeling for operatører :>,"*",5,"nl",2); 3 10796 k:= 0; 3 10797 for i:= 1 step 1 until max_linienr do 3 10798 begin 4 10799 læstegn(radio_linietabel,i+1,j); 4 10800 if j > 0 then 4 10801 begin 5 10802 k:= k +1; 5 10803 write(z,<<dddd>,i,":",1,<<zd_>,j,"sp",if k mod 5=0 then 0 else 4, 5 10804 "nl",if k mod 5=0 then 1 else 0); 5 10805 end; 4 10806 end; 3 10807 write(z,"nl",if k mod 5=0 then 1 else 2); 3 10808 end skriv_radio_linietabel; 2 10809 2 10809 procedure skriv_radio_områdetabel(z); 2 10810 zone z; 2 10811 begin 3 10812 integer i; 3 10813 3 10813 write(z,"nl",2,"*",5,<: områdefordeling for operatører :>,"*",5,"nl",2); 3 10814 for i:= 1 step 1 until max_antal_områder do 3 10815 begin 4 10816 laf:= (i-1)*4; 4 10817 if radio_områdetabel(i)<>0 then 4 10818 write(z,<<dd>,i,<:. :>,områdenavn.laf,<:: :>, 4 10819 radio_områdetabel(i),"nl",1); 4 10820 end; 3 10821 end skriv_radio_områdetabel; 2 10822 \f 2 10822 message procedure h_radio side 1 - 810520/hko; 2 10823 2 10823 <* hovedmodulkorutine for radiokanaler *> 2 10824 procedure h_radio; 2 10825 begin 3 10826 integer array field op_ref; 3 10827 integer k,dest_sem; 3 10828 procedure skriv_hradio(z,omfang); 3 10829 value omfang; 3 10830 zone z; 3 10831 integer omfang; 3 10832 begin integer i; 4 10833 disable i:= write(z,"nl",1,<:+++ hovedmodul radio:>); 4 10834 write(z,"sp",26-i); 4 10835 if omfang >0 then 4 10836 disable begin integer x; 5 10837 trap(slut); 5 10838 write(z,"nl",1, 5 10839 <: op_ref: :>,op_ref,"nl",1, 5 10840 <: k: :>,k,"nl",1, 5 10841 <: dest_sem: :>,dest_sem,"nl",1, 5 10842 <::>); 5 10843 skriv_coru(z,coru_no(400)); 5 10844 slut: 5 10845 end; 4 10846 end skriv_hradio; 3 10847 3 10847 trap(hrad_trap); 3 10848 stack_claim(if cm_test then 198 else 146); 3 10849 3 10849 <*+2*> if testbit32 and overvåget or testbit28 then 3 10850 skriv_hradio(out,0); 3 10851 <*-2*> 3 10852 \f 3 10852 message procedure h_radio side 2 - 820304/hko; 3 10853 3 10853 repeat 3 10854 wait_ch(cs_rad,op_ref,true,-1); 3 10855 <*+2*>if testbit33 and overvåget then 3 10856 disable begin 4 10857 skriv_h_radio(out,0); 4 10858 write(out,<: operation modtaget:>); 4 10859 skriv_op(out,op_ref); 4 10860 end; 3 10861 <*-2*> 3 10862 <*+4*> 3 10863 if (d.op_ref.optype and 3 10864 (gen_optype or rad_optype or vt_optype)) extract 12 =0 3 10865 then fejlreaktion(12<*operationstype*>,op_ref,<:h<'_'>radio:>,1); 3 10866 <*-4*> 3 10867 3 10867 k:=d.op_ref.op_kode extract 12; 3 10868 dest_sem:= 3 10869 if k > 0 and k < 7 3 10870 or k=11 or k=12 or k=19 3 10871 or (72<=k and k<=74) or k = 77 3 10872 <*IN,O/EK,O/IN,R/EK,R/FO,L/ST/EK,K/IN,K/RA,I/FO,O*> 3 10873 then cs_radio_adm 3 10874 else if k=41 <* radiokommando fra operatør *> 3 10875 then cs_radio(d.opref.data(1)) else -1; 3 10876 <*+4*> 3 10877 if dest_sem<1 then 3 10878 begin 4 10879 if dest_sem<0 then 4 10880 fejlreaktion(2<*operationskode*>,k,<:hovedmodul radio:>,1); 4 10881 d.op_ref.resultat:= if dest_sem=0 then 45 else 31; 4 10882 signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype); 4 10883 end 3 10884 else 3 10885 <*-4*> 3 10886 begin <* operationskode ok *> 4 10887 signal_ch(dest_sem,op_ref,d.op_ref.optype); 4 10888 end; 3 10889 until false; 3 10890 3 10890 hrad_trap: 3 10891 disable skriv_hradio(zbillede,1); 3 10892 end h_radio; 2 10893 \f 2 10893 message procedure radio side 1 - 820301/hko; 2 10894 2 10894 procedure radio(talevej,op); 2 10895 value talevej,op; 2 10896 integer talevej,op; 2 10897 begin 3 10898 integer array field opref, rad_op, vt_op, opref1, iaf, iaf1; 3 10899 integer nr,i,j,k,res,opgave,tilst,tekn_inf, vtop2, vtop3, 3 10900 sig,omr,type,bus,ll,ttmm,vogn,garage,operatør; 3 10901 integer array felt,værdi(1:8); 3 10902 boolean byt,nød,frigiv_samtale; 3 10903 real kl; 3 10904 real field rf; 3 10905 3 10905 procedure skriv_radio(z,omfang); 3 10906 value omfang; 3 10907 zone z; 3 10908 integer omfang; 3 10909 begin integer i1; 4 10910 disable i1:= write(z,"nl",1,<:+++ radio:>); 4 10911 write(z,"sp",26-i1); 4 10912 if omfang > 0 then 4 10913 disable begin real x; 5 10914 trap(slut); 5 10915 \f 5 10915 message procedure radio side 1a- 820301/hko; 5 10916 5 10916 write(z,"nl",1, 5 10917 <: op_ref: :>,op_ref,"nl",1, 5 10918 <: opref1: :>,opref1,"nl",1, 5 10919 <: iaf: :>,iaf,"nl",1, 5 10920 <: iaf1: :>,iaf1,"nl",1, 5 10921 <: vt-op: :>,vt_op,"nl",1, 5 10922 <: rad-op: :>,rad_op,"nl",1, 5 10923 <: rf: :>,rf,"nl",1, 5 10924 <: nr: :>,nr,"nl",1, 5 10925 <: i: :>,i,"nl",1, 5 10926 <: j: :>,j,"nl",1, 5 10927 <: k: :>,k,"nl",1, 5 10928 <: operatør: :>,operatør,"nl",1, 5 10929 <: tilst: :>,tilst,"nl",1, 5 10930 <: res: :>,res,"nl",1, 5 10931 <: opgave: :>,opgave,"nl",1, 5 10932 <: type: :>,type,"nl",1, 5 10933 <: bus: :>,bus,"nl",1, 5 10934 <: ll: :>,ll,"nl",1, 5 10935 <: ttmm: :>,ttmm,"nl",1, 5 10936 <: vogn: :>,vogn,"nl",1, 5 10937 <: tekn-inf: :>,tekn_inf,"nl",1, 5 10938 <: vtop2: :>,vtop2,"nl",1, 5 10939 <: vtop3: :>,vtop3,"nl",1, 5 10940 <: sig: :>,sig,"nl",1, 5 10941 <: omr: :>,omr,"nl",1, 5 10942 <: garage: :>,garage,"nl",1, 5 10943 <<-dddddd'-dd>, 5 10944 <: kl: :>,kl,systime(4,kl,x),x,"nl",1, 5 10945 <:samtaleflag: :>,"nl",1); 5 10946 out_intbits_ia(z,samtaleflag,1,op_maske_lgd//2); 5 10947 skriv_coru(z,coru_no(410+talevej)); 5 10948 slut: 5 10949 end;<*disable*> 4 10950 end skriv_radio; 3 10951 \f 3 10951 message procedure udtag_opkald side 1 - 820301/hko; 3 10952 3 10952 integer 3 10953 procedure udtag_opkald(vogn,type,operatør,bus,garage,omr,sig,ll,ttmm); 3 10954 value vogn, operatør; 3 10955 integer vogn,type,operatør,bus,garage,omr,sig,ll,ttmm; 3 10956 begin 4 10957 integer res,tilst,nr,i,j,t,o,b,l,tm; 4 10958 integer array field vt_op,ref,næste,forrige; 4 10959 integer array field iaf1; 4 10960 boolean skal_ud; 4 10961 4 10961 boolean procedure skal_udskrives(fordelt,aktuel); 4 10962 value fordelt,aktuel; 4 10963 integer fordelt,aktuel; 4 10964 begin 5 10965 boolean skal; 5 10966 integer n; 5 10967 integer array field iaf; 5 10968 5 10968 skal:= true; 5 10969 if fordelt > 0 and fordelt<>aktuel then 5 10970 begin 6 10971 for n:= 0 step 1 until 3 do 6 10972 begin 7 10973 if bpl_tilst(operatør_stop(fordelt,n),1) > 0 then 7 10974 begin 8 10975 iaf:= operatør_stop(fordelt,n)*op_maske_lgd; 8 10976 skal:= læsbit_ia(bpl_def.iaf,aktuel); 8 10977 goto returner; 8 10978 end; 7 10979 end; 6 10980 end; 5 10981 returner: 5 10982 skal_udskrives:= skal; 5 10983 end; 4 10984 4 10984 l:= b:= tm:= t:= 0; 4 10985 garage:= sig:= 0; 4 10986 res:= -1; 4 10987 <*V*> wait(bs_opkaldskø_adgang); 4 10988 ref:= første_nødopkald; 4 10989 if ref <> 0 then 4 10990 t:= 2 4 10991 else 4 10992 begin 5 10993 ref:= første_opkald; 5 10994 t:= if ref = 0 then 0 else 1; 5 10995 end; 4 10996 if t = 0 then res:= +19 <*kø er tom*> else 4 10997 if vogn=0 and omr=0 then 4 10998 begin 5 10999 while ref <> 0 and res = -1 do 5 11000 begin 6 11001 nr:= opkaldskø.ref(4) extract 8; 6 11002 if nr>64 then 6 11003 begin 7 11004 <*opk. primærfordelt til gruppe af btj.pl.*> 7 11005 i:=0; skal_ud:=true; iaf1:=nr*op_maske_lgd; 7 11006 while skal_ud and i<max_antal_operatører do 7 11007 begin 8 11008 i:=i+1; 8 11009 if læsbit_ia(bpl_def.iaf1,i) then 8 11010 skal_ud:= skal_ud and skal_udskrives(i,operatør); 8 11011 end; 7 11012 end 6 11013 else 6 11014 skal_ud:= skal_udskrives(nr,operatør); 6 11015 6 11015 if skal_ud then 6 11016 <* if nr=0 or -,læsbit_ia(operatørmaske,nr) or nr=operatør then 6 11017 *> 6 11018 res:= 0 6 11019 else 6 11020 begin 7 11021 ref:= opkaldskø.ref(1) extract 12; 7 11022 if ref = 0 and t = 2 then 7 11023 begin 8 11024 ref:= første_opkald; 8 11025 t:= if ref = 0 then 0 else 1; 8 11026 end else if ref = 0 then t:= 0; 7 11027 end; 6 11028 end; <*while*> 5 11029 \f 5 11029 message procedure udtag_opkald side 2 - 820304/hko; 5 11030 5 11030 if ref <> 0 then 5 11031 begin 6 11032 b:= opkaldskø.ref(2); 6 11033 <*+4*> if b < 0 then 6 11034 fejlreaktion(19<*mobilopkald*>,bus extract 14, 6 11035 <:nødopkald(besvaret/ej meldt):>,1); 6 11036 <*-4*> 6 11037 garage:=b shift(-14) extract 8; 6 11038 b:= b extract 14; 6 11039 l:= opkaldskø.ref(3); 6 11040 tm:= opkaldskø.ref(4); 6 11041 o:= tm extract 8; 6 11042 tm:= tm shift(-12); 6 11043 omr:= opkaldskø.ref(5) extract 8; 6 11044 sig:= opkaldskø.ref(5) shift (-20); 6 11045 end 5 11046 else res:=19; <* kø er tom *> 5 11047 end <*vogn=0 and omr=0 *> 4 11048 else 4 11049 begin 5 11050 <* vogn<>0 or omr<>0 *> 5 11051 i:= 0; tilst:= -1; 5 11052 if vogn shift(-22) = 1 then 5 11053 begin 6 11054 i:= find_busnr(vogn,nr,garage,tilst); 6 11055 l:= vogn; 6 11056 end 5 11057 else 5 11058 if vogn<>0 and (omr=0 or omr>2) then 5 11059 begin 6 11060 o:= 0; 6 11061 i:= søg_omr_bus(vogn,l,garage,o,sig,tilst); 6 11062 if i=(-2) then 6 11063 begin 7 11064 o:= omr; 7 11065 i:= søg_omr_bus(vogn,l,garage,o,sig,tilst); 7 11066 end; 6 11067 nr:= vogn extract 14; 6 11068 end 5 11069 else nr:= vogn extract 14; 5 11070 if i<0 then ref:= 0; 5 11071 while ref <> 0 and res = -1 do 5 11072 begin 6 11073 i:= opkaldskø.ref(2) extract 14; 6 11074 j:= opkaldskø.ref(4) extract 8; <*operatør*> 6 11075 if nr = i and 6 11076 (omr=0 or omr=opkaldskø.ref(5) extract 8) then res:= 0 6 11077 else 6 11078 begin 7 11079 ref:= opkaldskø.ref(1) extract 12; 7 11080 if ref = 0 and t = 2 then 7 11081 begin 8 11082 ref:= første_opkald; 8 11083 t:= if ref = 0 then 0 else 1; 8 11084 end else if ref = 0 then t:= 0; 7 11085 end; 6 11086 end; <*while*> 5 11087 \f 5 11087 message procedure udtag_opkald side 3 - 810603/hko; 5 11088 5 11088 if ref <> 0 then 5 11089 begin 6 11090 b:= nr; 6 11091 tm:= opkaldskø.ref(4); 6 11092 o:= tm extract 8; 6 11093 tm:= tm shift(-12); 6 11094 omr:= opkaldskø.ref(5) extract 4; 6 11095 sig:= opkaldskø.ref(5) shift (-20); 6 11096 6 11096 <*+4*> if tilst <> -1 then 6 11097 fejlreaktion(3<*prg.fejl*>,tilst, 6 11098 <:vogntabel_tilstand for vogn i kø:>,1); 6 11099 <*-4*> 6 11100 end; 5 11101 end; 4 11102 4 11102 if ref <> 0 then 4 11103 begin 5 11104 næste:= opkaldskø.ref(1); 5 11105 forrige:= næste shift(-12); 5 11106 næste:= næste extract 12; 5 11107 if forrige <> 0 then 5 11108 opkaldskø.forrige(1):= opkaldskø.forrige(1) shift(-12) shift 12 5 11109 + næste 5 11110 else if t = 1 then første_opkald:= næste 5 11111 else <*if t = 2 then*> første_nødopkald:= næste; 5 11112 5 11112 if næste <> 0 then 5 11113 opkaldskø.næste(1):= opkaldskø.næste(1) extract 12 5 11114 + forrige shift 12 5 11115 else if t = 1 then sidste_opkald:= forrige 5 11116 else <* if t = 2 then*> sidste_nødopkald:= forrige; 5 11117 5 11117 opkaldskø.ref(1):=første_frie_opkald; 5 11118 første_frie_opkald:=ref; 5 11119 5 11119 opkaldskø_ledige:=opkaldskø_ledige + 1; 5 11120 if t=2 then nødopkald_brugt:=nødopkald_brugt - 1; 5 11121 if -,læsbit_ia(operatør_maske,o) or o = 0 then 5 11122 tofrom(opkaldsflag,alle_operatører,op_maske_lgd) 5 11123 else 5 11124 begin 6 11125 sætbit_ia(opkaldsflag,operatør,1); 6 11126 sætbit_ia(opkaldsflag,o,1); 6 11127 end; 5 11128 signal_bin(bs_mobil_opkald); 5 11129 end; 4 11130 \f 4 11130 message procedure udtag_opkald side 4 - 810531/hko; 4 11131 4 11131 signal_bin(bs_opkaldskø_adgang); 4 11132 bus:= b; 4 11133 type:= t; 4 11134 ll:= l; 4 11135 ttmm:= tm; 4 11136 udtag_opkald:= res; 4 11137 end udtag opkald; 3 11138 \f 3 11138 message procedure frigiv_kanal side 1 - 810603/hko; 3 11139 3 11139 procedure frigiv_kanal(nr); 3 11140 value nr; 3 11141 integer nr; 3 11142 begin 4 11143 integer id1, id2, omr, i; 4 11144 integer array field iaf, vt_op; 4 11145 4 11145 iaf:= (nr-1)*kanal_beskrlængde; 4 11146 id1:= kanal_tab.iaf.kanal_id1; 4 11147 id2:= kanal_tab.iaf.kanal_id2; 4 11148 omr:= kanal_til_omr(nr); 4 11149 if id1 <> 0 then 4 11150 wait(ss_samtale_nedlagt(nr)); 4 11151 if id1 shift (-22) < 3 and omr > 2 then 4 11152 begin 5 11153 <*V*> waitch(cs_vt_adgang,vt_op,true,-1); 5 11154 start_operation(vt_op,410+talevej,cs_radio(talevej), 5 11155 if id1 shift (-22) = 2 then 18 else 17); 5 11156 d.vt_op.data(1):= id1; 5 11157 d.vt_op.data(4):= omr; 5 11158 signalch(cs_vt,vt_op,vt_optype or genoptype); 5 11159 <*V*> waitch(cs_radio(talevej),vt_op,vt_optype,-1); 5 11160 signalch(cs_vt_adgang,vt_op,true); 5 11161 end; 4 11162 4 11162 if id2 <> 0 and id2 shift(-20) <> 12 then 4 11163 wait(ss_samtale_nedlagt(nr)); 4 11164 if id2 shift (-22) < 3 and omr > 2 then 4 11165 begin 5 11166 <*V*> waitch(cs_vt_adgang,vt_op,true,-1); 5 11167 start_operation(vt_op,410+talevej,cs_radio(talevej), 5 11168 if id2 shift (-22) = 2 then 18 else 17); 5 11169 d.vt_op.data(1):= id2; 5 11170 d.vt_op.data(4):= omr; 5 11171 signalch(cs_vt,vt_op,vt_optype or genoptype); 5 11172 <*V*> waitch(cs_radio(talevej),vt_op,vt_optype,-1); 5 11173 signalch(cs_vt_adgang,vt_op,true); 5 11174 end; 4 11175 4 11175 kanal_tab.iaf.kanal_id1:= kanal_tab.iaf.kanal_id2:= 4 11176 kanal_tab.iaf.kanal_alt_id1:= kanal_tab.iaf.kanal_alt_id2:= 0; 4 11177 kanal_tab.iaf.kanal_tilstand:= kanal_tab.iaf.kanal_tilstand 4 11178 shift (-10) extract 6 shift 10; 4 11179 <* repeat 4 11180 inspect(ss_samtale_nedlagt(nr),i); 4 11181 if i>0 then wait(ss_samtale_nedlagt(nr)); 4 11182 until i<=0; 4 11183 *> 4 11184 end frigiv_kanal; 3 11185 \f 3 11185 message procedure hookoff side 1 - 880901/cl; 3 11186 3 11186 integer procedure hookoff(talevej,op,retursem,flash); 3 11187 value talevej,op,retursem,flash; 3 11188 integer talevej,op,retursem; 3 11189 boolean flash; 3 11190 begin 4 11191 integer array field opref; 4 11192 4 11192 opref:= op; 4 11193 start_operation(opref,410+talevej,retursem,'A' shift 12 + 60); 4 11194 d.opref.data(1):= talevej; 4 11195 d.opref.data(2):= if flash then 2 else 1; 4 11196 signalch(cs_radio_ud,opref,rad_optype); 4 11197 <*V*> waitch(retursem,opref,rad_optype,-1); 4 11198 hookoff:= d.opref.resultat; 4 11199 end; 3 11200 \f 3 11200 message procedure hookon side 1 - 880901/cl; 3 11201 3 11201 integer procedure hookon(talevej,op,retursem); 3 11202 value talevej,op,retursem; 3 11203 integer talevej,op,retursem; 3 11204 begin 4 11205 integer i,res; 4 11206 integer array field opref; 4 11207 4 11207 if læsbit_ia(hookoff_maske,talevej) then 4 11208 begin 5 11209 inspect(bs_talevej_udkoblet(talevej),i); 5 11210 if i<=0 then 5 11211 begin 6 11212 opref:= op; 6 11213 start_operation(opref,410+talevej,retursem,'D' shift 12 + 60); 6 11214 d.opref.data(1):= talevej; 6 11215 signalch(cs_radio_ud,opref,rad_optype); 6 11216 <*V*> waitch(retursem,opref,rad_optype,-1); 6 11217 res:= d.opref.resultat; 6 11218 end 5 11219 else 5 11220 res:= 0; 5 11221 5 11221 if res=0 then wait(bs_talevej_udkoblet(talevej)); 5 11222 end 4 11223 else 4 11224 res:= 0; 4 11225 4 11225 sætbit_ia(hookoff_maske,talevej,0); 4 11226 hookon:= res; 4 11227 end; 3 11228 \f 3 11228 message procedure radio side 2 - 820304/hko; 3 11229 3 11229 rad_op:= op; 3 11230 3 11230 trap(radio_trap); 3 11231 stack_claim((if cm_test then 200 else 150) +200); 3 11232 3 11232 <*+2*>if testbit32 and overvåget or testbit28 then 3 11233 skriv_radio(out,0); 3 11234 <*-2*> 3 11235 repeat 3 11236 waitch(cs_radio(talevej),opref,true,-1); 3 11237 <*+2*> 3 11238 if testbit33 and overvåget then 3 11239 disable begin 4 11240 skriv_radio(out,0); 4 11241 write(out,<: operation modtaget på cs:>,<<d>,cs_radio(talevej)); 4 11242 skriv_op(out,opref); 4 11243 end; 3 11244 <*-2*> 3 11245 3 11245 k:= d.op_ref.opkode extract 12; 3 11246 opgave:= d.opref.opkode shift (-12); 3 11247 operatør:= d.op_ref.data(4); 3 11248 3 11248 <*+4*> if (d.op_ref.optype and (gen_optype or io_optype or op_optype)) 3 11249 extract 12 = 0 then fejlreaktion(12<*operationstype*>,op_ref, 3 11250 <:radio:>,0); 3 11251 <*-4*> 3 11252 \f 3 11252 message procedure radio side 3 - 880930/cl; 3 11253 if k=41 <*radiokommando fra operatør*> then 3 11254 begin 4 11255 vogn:= d.opref.data(2); 4 11256 res:= -1; 4 11257 for i:= 7 step 1 until 12 do d.opref.data(i):= 0; 4 11258 sig:= 0; omr:= d.opref.data(3) extract 8; 4 11259 bus:= garage:= ll:= 0; 4 11260 4 11260 if opgave=1 or opgave=9 then 4 11261 begin <* opkald til enkelt vogn (CHF) *> 5 11262 res:= udtag_opkald(vogn,type,operatør,bus,garage,omr,sig,ll,ttmm); 5 11263 if res=19 and (vogn<>0 or d.opref.data(3)=2) then res:= -1; 5 11264 <* ok at kø er tom når vogn er angivet eller VHF *> 5 11265 5 11265 d.opref.data(11):= if res=0 then 5 11266 (if ll<>0 then ll else bus) else vogn; 5 11267 5 11267 if type=2 <*nød*> then 5 11268 begin 6 11269 waitch(cs_radio_pulje,opref1,true,-1); 6 11270 start_operation(opref1,410+talevej,cs_radio_pulje,46); 6 11271 d.opref1.data(1):= if ll<>0 then ll else bus; 6 11272 systime(5,0,kl); 6 11273 d.opref1.data(2):= entier(kl/100.0); 6 11274 d.opref1.data(3):= omr; 6 11275 signalch(cs_io,opref1,gen_optype or rad_optype); 6 11276 end 5 11277 end; <* enkeltvogn (CHF) *> 4 11278 4 11278 <* check enkeltvogn for ledig *> 4 11279 if res<=0 and omr=2<*VHF*> and bus=0 and 4 11280 (opgave=1 or opgave=9) then 4 11281 begin 5 11282 for i:= 1 step 1 until max_antal_kanaler do 5 11283 if kanal_til_omr(i)=2 then nr:= i; 5 11284 iaf:= (nr-1)*kanalbeskrlængde; 5 11285 if kanal_tab.iaf.kanal_tilstand extract 2<>0 and 5 11286 kanal_tab.iaf.kanal_id1 extract 20 = 10000 5 11287 then res:= 52; 5 11288 end; 4 11289 if res < 0 and (d.opref.data(3) > 2 <* ej TLF, VHF *> or 4 11290 d.opref.data(3)=0 <*std. omr*>) and 4 11291 (opgave <= 2 <* OP elller ME *> or opgave = 9 <* OP,L *>) 4 11292 then 4 11293 begin 5 11294 type:= ttmm:= 0; omr:= 0; sig:= 0; 5 11295 if vogn shift (-22) = 1 then 5 11296 begin 6 11297 find_busnr(vogn,bus,garage,res); 6 11298 ll:= vogn; 6 11299 end 5 11300 else 5 11301 if vogn shift (-22) = 0 then 5 11302 begin 6 11303 søg_omr_bus(vogn,ll,garage,omr,sig,res); 6 11304 bus:= vogn; 6 11305 end 5 11306 else 5 11307 fejlreaktion(31,vogn,<:vognident i enkeltvognsopk.:>,0); 5 11308 res:= if res=(-1) then 18 <* i kø *> else 5 11309 (if res<>0 then 14 <*opt*> else 0); 5 11310 end 4 11311 else 4 11312 if res<0 and (d.opref.data(3)=1 or d.opref.data(3)=2) and 4 11313 opgave <= 2 then 4 11314 begin 5 11315 bus:= vogn; garage:= type:= ttmm:= 0; 5 11316 res:= 0; omr:= 0; sig:= 0; 5 11317 end 4 11318 else 4 11319 if opgave>1 and opgave<>9 then 4 11320 type:= ttmm:= res:= 0; 4 11321 \f 4 11321 message procedure radio side 4 - 880930/cl; 4 11322 4 11322 if res=0 and (opgave<=4 or opgave=9) and 4 11323 (omr<1 or 2<omr) and 4 11324 (d.opref.data(3)>2 or d.opref.data(3)=0) then 4 11325 begin <* reserver i vogntabel *> 5 11326 waitch(cs_vt_adgang,vt_op,true,-1); 5 11327 start_operation(vt_op,410+talevej,cs_radio(talevej), 5 11328 if opgave <=2 or opgave=9 then 15 else 16); 5 11329 d.vt_op.data(1):= if opgave<=2 or opgave=9 then 5 11330 (if vogn=0 then garage shift 14 + bus else 5 11331 if ll<>0 then ll else garage shift 14 + bus) 5 11332 else vogn <*gruppeid*>; 5 11333 d.vt_op.data(4):= if d.opref.data(3)<>0 then 5 11334 d.opref.data(3) extract 8 5 11335 else omr extract 8; 5 11336 signalch(cs_vt,vt_op,gen_optype or rad_optype); 5 11337 <*V*> waitch(cs_radio(talevej),vt_op,rad_optype,-1); 5 11338 5 11338 res:= d.vt_op.resultat; 5 11339 if res=3 then res:= 0; 5 11340 vtop2:= d.vt_op.data(2); 5 11341 vtop3:= d.vt_op.data(3); 5 11342 tekn_inf:= d.vt_op.data(4); 5 11343 signalch(cs_vt_adgang,vt_op,gen_optype or vt_optype); 5 11344 end; 4 11345 4 11345 if res<>0 then 4 11346 begin 5 11347 d.opref.resultat:= res; 5 11348 signalch(d.opref.retur,opref,d.opref.optype); 5 11349 end 4 11350 else 4 11351 4 11351 if opgave <= 9 then 4 11352 begin <* opkald *> 5 11353 res:= hookoff(talevej,rad_op,cs_radio(talevej), 5 11354 opgave<>9 and d.opref.data(6)<>0); 5 11355 5 11355 if res<>0 then 5 11356 goto returner_op; 5 11357 5 11357 if opgave=7 or opgave=8 then <* KATASTROFEOPKALD *> 5 11358 begin 6 11359 start_operation(rad_op,410+talevej,cs_radio(talevej), 6 11360 'H' shift 12 + 60); 6 11361 d.rad_op.data(1):= talevej; 6 11362 d.rad_op.data(2):= 'D'; 6 11363 d.rad_op.data(3):= 6; <* rear *> 6 11364 d.rad_op.data(4):= 1; <* rear no *> 6 11365 d.rad_op.data(5):= 0; <* disconnect *> 6 11366 signalch(cs_radio_ud,rad_op,rad_optype); 6 11367 <*V*> waitch(cs_radio(talevej),rad_op,rad_optype,-1); 6 11368 if d.rad_op.resultat<>0 then 6 11369 begin 7 11370 res:= d.rad_op.resultat; 7 11371 goto returner_op; 7 11372 end; 6 11373 <* 6 11374 while optaget_flag shift (-1) <> 0 do 6 11375 delay(1); 6 11376 *> 6 11377 end; 5 11378 \f 5 11378 message procedure radio side 5 - 880930/cl; 5 11379 5 11379 start_operation(rad_op,410+talevej,cs_radio(talevej), 5 11380 'B' shift 12 + 60); 5 11381 d.rad_op.data(1):= talevej; 5 11382 d.rad_op.data(2):= 'D'; 5 11383 d.rad_op.data(3):= if opgave=9 then 3 else 5 11384 (2 - (opgave extract 1)); <* højttalerkode *> 5 11385 5 11385 if 5<=opgave and opgave <=8 then <* ALLE KALD *> 5 11386 begin 6 11387 j:= 0; 6 11388 for i:= 2 step 1 until max_antal_områder do 6 11389 begin 7 11390 if opgave > 6 or 7 11391 (d.opref.data(3) shift (-20) = 15 and 7 11392 læsbiti(d.opref.data(3),i)) or 7 11393 (d.opref.data(3) shift (-20) = 14 and 7 11394 d.opref.data(3) extract 20 = i) 7 11395 then 7 11396 begin 8 11397 for k:= 1 step 1 until (if i=3 then 2 else 1) do 8 11398 begin 9 11399 j:= j+1; 9 11400 d.rad_op.data(10+(j-1)*2):= 9 11401 område_id(i,2) shift 12 + <* tkt, tkn *> 9 11402 (if i=2<*VHF*> then 4 else k) 9 11403 shift 8 + <* signal type *> 9 11404 1; <* antal tno *> 9 11405 d.rad_op.data(11+(j-1)*2):= 0; <* tno alle *> 9 11406 end; 8 11407 end; 7 11408 end; 6 11409 d.rad_op.data(4):= j; 6 11410 d.rad_op.data(5):= 0; 6 11411 end 5 11412 else 5 11413 if opgave>2 and opgave <= 4 then <* gruppekald *> 5 11414 begin 6 11415 d.rad_op.data(4):= vtop2; 6 11416 d.rad_op.data(5):= vtop3; 6 11417 end 5 11418 else 5 11419 begin <* enkeltvogn *> 6 11420 if omr=0 then 6 11421 begin 7 11422 sig:= tekn_inf shift (-23); 7 11423 omr:= if d.opref.data(3)<>0 then d.opref.data(3) 7 11424 else tekn_inf extract 8; 7 11425 end 6 11426 else 6 11427 if d.opref.data(3)<>0 then omr:= d.opref.data(3); 6 11428 6 11428 <* lytte-kald til nød i TCT, VHF og TLF *> 6 11429 <* tvinges til alm. opkald *> 6 11430 if (opgave=9) and (type=2) and (omr<=3) then 6 11431 begin 7 11432 d.opref.opkode:= 1 shift 12 + d.opref.opkode extract 12; 7 11433 opgave:= 1; 7 11434 d.radop.data(3):= 1; 7 11435 end; 6 11436 6 11436 if omr=2 <*VHF*> then sig:= 4 else 6 11437 if omr=1 <*TLF*> then sig:= 7 else 6 11438 <*UHF*> sig:= sig+1; 6 11439 d.rad_op.data(4):= 1; 6 11440 d.rad_op.data(5):= 0; 6 11441 d.rad_op.data(10):= 6 11442 (område_id(omr,2) extract 12) shift 12 + 6 11443 sig shift 8 + 6 11444 1; 6 11445 d.rad_op.data(11):= bus; 6 11446 end; 5 11447 \f 5 11447 message procedure radio side 6 - 880930/cl; 5 11448 5 11448 signalch(cs_radio_ud,rad_op,rad_optype); 5 11449 <*V*> waitch(cs_radio(talevej),rad_op,rad_optype,-1); 5 11450 res:= d.rad_op.resultat; 5 11451 5 11451 d.rad_op.data(6):= 0; 5 11452 for i:= 1 step 1 until max_antal_områder do 5 11453 if læsbiti(d.rad_op.data(7),i) then 5 11454 increase(d.rad_op.data(6)); 5 11455 returner_op: 5 11456 if d.rad_op.data(6)=1 then 5 11457 begin 6 11458 for i:= 1 step 1 until max_antal_områder do 6 11459 if d.rad_op.data(7) extract 20 = 1 shift i then 6 11460 d.opref.data(12):= 14 shift 20 + i; 6 11461 end 5 11462 else 5 11463 d.opref.data(12):= 15 shift 20 + d.rad_op.data(7) extract 20; 5 11464 d.opref.data(7):= type; 5 11465 d.opref.data(8):= garage shift 14 + bus; 5 11466 d.opref.data(9):= ll; 5 11467 if res=0 then 5 11468 begin 6 11469 d.opref.resultat:= 3; 6 11470 d.opref.data(5):= d.opref.data(6); 6 11471 j:= 0; 6 11472 for i:= 1 step 1 until max_antal_kanaler do 6 11473 if læsbiti(d.rad_op.data(9),i) then j:= j+1; 6 11474 if j>1 then 6 11475 d.opref.data(6):= 3 shift 22 + 1 shift 20 + d.rad_op.data(9) 6 11476 else 6 11477 begin 7 11478 j:= 0; 7 11479 for i:= 1 step 1 until max_antal_kanaler do 7 11480 if læsbiti(d.rad_op.data(9),i) then j:= i; 7 11481 d.opref.data(6):= 3 shift 22 + j; 7 11482 end; 6 11483 d.opref.data(7):= type; 6 11484 d.opref.data(8):= garage shift 14 + bus; 6 11485 d.opref.data(9):= ll; 6 11486 d.opref.data(10):= d.opref.data(6); 6 11487 for i:= 1 step 1 until max_antal_kanaler do 6 11488 begin 7 11489 if læsbiti(d.rad_op.data(9),i) then 7 11490 begin 8 11491 if kanal_id(i) shift (-5) extract 5 = 2 then 8 11492 j:= pabx_id( kanal_id(i) extract 5 ) 8 11493 else 8 11494 j:= radio_id( kanal_id(i) extract 5 ); 8 11495 if j>0 and type=0 and operatør>0 then tæl_opkald(j,1); 8 11496 8 11496 iaf:= (i-1)*kanalbeskrlængde; 8 11497 skrivtegn(kanal_tab.iaf,1,talevej); 8 11498 kanal_tab.iaf.kanal_id2:= kanal_tab.iaf.kanal_id1; 8 11499 kanal_tab.iaf.kanal_alt_id2:= kanal_tab.iaf.kanal_alt_id1; 8 11500 kanal_tab.iaf.kanal_id1:= 8 11501 if opgave<=2 or opgave=9 then 8 11502 d.opref.data(if d.opref.data(9)<>0 then 9 else 8) 8 11503 else 8 11504 d.opref.data(2); 8 11505 kanal_tab.iaf.kanal_alt_id1:= 8 11506 if opgave<=2 or opgave=9 then 8 11507 d.opref.data(if d.opref.data(9)<>0 then 8 else 9) 8 11508 else 8 11509 0; 8 11510 if kanal_tab.iaf.kanal_id1=0 then 8 11511 kanal_tab.iaf.kanal_id1:= 10000; 8 11512 kanal_tab.iaf.kanal_spec:= 8 11513 if opgave <= 2 or opgave = 9 then ttmm else 0; 8 11514 end; 7 11515 end; 6 11516 if 5<=opgave and opgave<=8 <*alle-/katastrofekald*> then 6 11517 sætbit_ia(kanalflag,operatør,1); 6 11518 \f 6 11518 message procedure radio side 7 - 880930/cl; 6 11519 6 11519 end 5 11520 else 5 11521 begin 6 11522 d.opref.resultat:= res; 6 11523 if res=20 or res=52 then 6 11524 begin <* tæl ej.forb og opt.kanal *> 7 11525 for i:= 1 step 1 until max_antal_områder do 7 11526 if læsbiti(d.rad_op.data(7),i) then 7 11527 tæl_opkald(i,(if res=20 then 4 else 5)); 7 11528 end; 6 11529 if d.opref.data(6)=0 then 6 11530 res:= hookon(talevej,rad_op,cs_radio(talevej)); 6 11531 <* frigiv fra vogntabel hvis reserveret *> 6 11532 if (opgave<=4 or opgave=9) and 6 11533 (d.opref.data(3)=0 or d.opref.data(3)>2) then 6 11534 begin 7 11535 waitch(cs_vt_adgang,vt_op,true,-1); 7 11536 startoperation(vt_op,410+talevej,cs_radio(talevej), 7 11537 if opgave<=2 or opgave=9 then 17 else 18); 7 11538 d.vt_op.data(1):= if opgave<=2 or opgave=9 then 7 11539 (if vogn=0 then garage shift 14 + bus else 7 11540 if ll<>0 then ll else garage shift 14 + bus) 7 11541 else vogn; 7 11542 d.vt_op.data(4):= omr; 7 11543 signalch(cs_vt,vt_op,gen_optype or vt_optype); 7 11544 waitch(cs_radio(talevej),vt_op,vt_optype,-1); 7 11545 signalch(cs_vt_adgang,vt_op,true); 7 11546 end; 6 11547 end; 5 11548 signalch(d.opref.retur,opref,d.opref.optype); 5 11549 \f 5 11549 message procedure radio side 8 - 880930/cl; 5 11550 5 11550 end <* opkald *> 4 11551 else 4 11552 if opgave = 10 <* MONITER *> then 4 11553 begin 5 11554 nr:= d.opref.data(2); 5 11555 if nr shift (-20) <> 12 then 5 11556 fejlreaktion(3,nr,<: moniter, kanalnr:>,0); 5 11557 nr:= nr extract 20; 5 11558 iaf:= (nr-1)*kanalbeskrlængde; 5 11559 inspect(ss_samtale_nedlagt(nr),i); 5 11560 k:= if kanal_tab.iaf.kanal_id2 shift (-20) = 12 then 5 11561 kanal_tab.iaf.kanal_id2 extract 20 5 11562 else 5 11563 if kanal_tab.iaf.kanal_id2<>0 then nr else 0; 5 11564 if k<>0 then inspect(ss_samtale_nedlagt(k),j) else j:=0; 5 11565 if kanal_tab.iaf.kanal_tilstand shift (-16) = talevej and 5 11566 (i<>0 or j<>0) then 5 11567 begin 6 11568 res:= 0; 6 11569 d.opref.data(5):= 12 shift 20 + k; 6 11570 d.opref.data(6):= 12 shift 20 + nr; 6 11571 sætbit_ia(kanalflag,operatør,1); 6 11572 goto radio_nedlæg; 6 11573 end 5 11574 else 5 11575 if i<>0 or j<>0 then 5 11576 res:= 49 5 11577 else 5 11578 if kanal_tab.iaf.kanal_tilstand extract 2 = 0 then 5 11579 res:= 49 <* ingen samtale igang *> 5 11580 else 5 11581 begin 6 11582 res:= hookoff(talevej,rad_op,cs_radio(talevej),false); 6 11583 if res=0 then 6 11584 begin 7 11585 start_operation(rad_op,410+talevej,cs_radio(talevej), 7 11586 'B' shift 12 + 60); 7 11587 d.rad_op.data(1):= talevej; 7 11588 d.rad_op.data(2):= 'V'; 7 11589 d.rad_op.data(3):= 0; 7 11590 d.rad_op.data(4):= 1; 7 11591 d.rad_op.data(5):= 0; 7 11592 d.rad_op.data(10):= 7 11593 (kanal_id(nr) shift (-5) shift 18) + 7 11594 (kanal_id(nr) extract 5 shift 12) + 0; 7 11595 signalch(cs_radio_ud,rad_op,rad_optype); 7 11596 <*V*> waitch(cs_radio(talevej),rad_op,rad_optype,-1); 7 11597 res:= d.rad_op.resultat; 7 11598 if res=0 then 7 11599 begin 8 11600 d.opref.data(5):= 0; 8 11601 d.opref.data(6):= 3 shift 22 + 0 shift 20 + nr; 8 11602 d.opref.data(7):= kanal_tab.iaf.kanal_tilstand extract 10; 8 11603 res:= 3; 8 11604 end; 7 11605 end; 6 11606 end; 5 11607 \f 5 11607 message procedure radio side 9 - 880930/cl; 5 11608 if res=3 then 5 11609 begin 6 11610 if kanal_tab.iaf.kanal_tilstand shift (-16) = talevej then 6 11611 sætbiti(kanal_tab.iaf.kanal_tilstand,5,1) <* monbit *> 6 11612 else 6 11613 sætbit_ia(kanal_tab.iaf.kanal_mon_maske,talevej,1); 6 11614 d.opref.data(6):= 12 shift 20 + nr; 6 11615 i:= kanal_tab.iaf.kanal_id2; 6 11616 if i<>0 then 6 11617 begin 7 11618 if i shift (-20) = 12 then 7 11619 begin <* ident2 henviser til anden kanal *> 8 11620 iaf1:= ((i extract 20)-1)*kanalbeskrlængde; 8 11621 if kanal_tab.iaf1.kanal_tilstand shift (-16) = talevej then 8 11622 sætbiti(kanal_tab.iaf.kanal_tilstand,5,1) 8 11623 else 8 11624 sætbit_ia(kanal_tab.iaf.kanal_mon_maske,talevej,1); 8 11625 d.opref.data(5):= 12 shift 20 + i; 8 11626 end 7 11627 else 7 11628 d.opref.data(5):= 12 shift 20 + nr; 7 11629 end 6 11630 else 6 11631 d.opref.data(5):= 0; 6 11632 end; 5 11633 5 11633 if res<>3 then 5 11634 begin 6 11635 res:= 0; 6 11636 sætbit_ia(kanalflag,operatør,1); 6 11637 goto radio_nedlæg; 6 11638 end; 5 11639 d.opref.resultat:= res; 5 11640 signalch(d.opref.retur,opref,d.opref.optype); 5 11641 \f 5 11641 message procedure radio side 10 - 880930/cl; 5 11642 5 11642 end <* MONITERING *> 4 11643 else 4 11644 if opgave = 11 then <* GENNEMSTILLING *> 4 11645 begin 5 11646 nr:= d.opref.data(6) extract 20; 5 11647 k:= if d.opref.data(5) shift (-20) = 12 then 5 11648 d.opref.data(5) extract 20 5 11649 else 5 11650 0; 5 11651 inspect(ss_samtale_nedlagt(nr),i); 5 11652 if k<>0 then inspect(ss_samtale_nedlagt(k),j) else j:=0; 5 11653 if i<>0 and j<>0 then 5 11654 begin 6 11655 res:= hookon(talevej,rad_op,cs_radio(talevej)); 6 11656 goto radio_nedlæg; 6 11657 end; 5 11658 5 11658 iaf:= (nr-1)*kanal_beskr_længde; 5 11659 if kanal_tab.iaf.kanal_tilstand shift (-16) = talevej then 5 11660 begin 6 11661 if læsbiti(kanal_tab.iaf.kanal_tilstand,5) and 6 11662 kanal_tab.iaf.kanal_tilstand extract 2 = 3 6 11663 then 6 11664 res:= hookoff(talevej,rad_op,cs_radio(talevej),true) 6 11665 else 6 11666 if kanal_tab.iaf.kanal_tilstand extract 2 = 1 and 6 11667 d.opref.data(5)<>0 6 11668 then 6 11669 res:= 0 6 11670 else 6 11671 res:= 21; <* ingen at gennemstille til *> 6 11672 end 5 11673 else 5 11674 res:= 50; <* kanalnr *> 5 11675 5 11675 if res=0 then 5 11676 res:= hookon(talevej,rad_op,cs_radio(talevej)); 5 11677 if res=0 then 5 11678 begin 6 11679 sætbiti(kanal_tab.iaf.kanal_tilstand,5,0); 6 11680 kanal_tab.iaf.kanal_tilstand:= 6 11681 kanal_tab.iaf.kanal_tilstand shift (-2) shift 2 + 3; 6 11682 d.opref.data(6):= 0; 6 11683 if kanal_tab.iaf.kanal_id2=0 then 6 11684 kanal_tab.iaf.kanal_id2:= d.opref.data(5); 6 11685 6 11685 if kanal_tab.iaf.kanal_id2 shift (-22) = 3 then 6 11686 begin <* gennemstillet til anden kanal *> 7 11687 iaf1:= ((kanal_tab.iaf.kanal_id2 extract 20) - 1) 7 11688 *kanalbeskrlængde; 7 11689 sætbiti(kanal_tab.iaf1.kanal_tilstand,5,0); 7 11690 kanal_tab.iaf1.kanal_tilstand:= 7 11691 kanal_tab.iaf1.kanal_tilstand shift (-2) shift 2 + 3; 7 11692 if kanal_tab.iaf1.kanal_id2=0 then 7 11693 kanal_tab.iaf1.kanal_id2:= 12 shift 20 + nr; 7 11694 end; 6 11695 d.opref.data(5):= 0; 6 11696 6 11696 res:= 3; 6 11697 end; 5 11698 5 11698 d.opref.resultat:= res; 5 11699 signalch(d.opref.retur,opref,d.opref.optype); 5 11700 \f 5 11700 message procedure radio side 11 - 880930/cl; 5 11701 5 11701 end 4 11702 else 4 11703 if opgave = 12 then <* NEDLÆG *> 4 11704 begin 5 11705 res:= hookon(talevej,rad_op,cs_radio(talevej)); 5 11706 radio_nedlæg: 5 11707 if res=0 then 5 11708 begin 6 11709 for k:= 5, 6 do 6 11710 begin 7 11711 if d.opref.data(k) shift (-20) = 12 then 7 11712 begin 8 11713 i:= d.opref.data(k) extract 20; 8 11714 iaf:= (i-1)*kanalbeskrlængde; 8 11715 if kanal_tab.iaf.kanal_tilstand shift (-16) = talevej then 8 11716 frigiv_kanal(d.opref.data(k) extract 20) 8 11717 else 8 11718 sætbit_ia(kanal_tab.iaf.kanal_mon_maske,talevej,0); 8 11719 end 7 11720 else 7 11721 if d.opref.data(k) shift (-20) = 13 then 7 11722 begin 8 11723 for i:= 1 step 1 until max_antal_kanaler do 8 11724 if læsbiti(d.opref.data(k),i) then 8 11725 begin 9 11726 iaf:= (i-1)*kanalbeskrlængde; 9 11727 if kanal_tab.iaf.kanal_tilstand shift (-16) = talevej then 9 11728 frigiv_kanal(i) 9 11729 else 9 11730 sætbit_ia(kanal_tab.iaf.kanal_mon_maske,talevej,0); 9 11731 end; 8 11732 sætbit_ia(kanalflag,operatør,1); 8 11733 end; 7 11734 end; 6 11735 d.opref.data(5):= 0; 6 11736 d.opref.data(6):= 0; 6 11737 d.opref.data(9):= 0; 6 11738 res:= if opgave=12 then 3 else 49; 6 11739 end; 5 11740 d.opref.resultat:= res; 5 11741 signalch(d.opref.retur,opref,d.opref.optype); 5 11742 end 4 11743 else 4 11744 if opgave=13 then <* R *> 4 11745 begin 5 11746 startoperation(rad_op,410+talevej,cs_radio(talevej), 5 11747 'H' shift 12 + 60); 5 11748 d.rad_op.data(1):= talevej; 5 11749 d.rad_op.data(2):= 'M'; 5 11750 d.rad_op.data(3):= 0; <*tkt*> 5 11751 d.rad_op.data(4):= 0; <*tkn*> 5 11752 d.rad_op.data(5):= 1 - (d.opref.data(2) extract 1); 5 11753 signalch(cs_radio_ud,rad_op,rad_optype); 5 11754 <*V*> waitch(cs_radio(talevej),rad_op,rad_optype,-1); 5 11755 res:= d.rad_op.resultat; 5 11756 d.opref.resultat:= if res=0 then 3 else res; 5 11757 signalch(d.opref.retur,opref,d.opref.optype); 5 11758 end 4 11759 else 4 11760 if opgave=14 <* VENTEPOS *> then 4 11761 begin 5 11762 res:= 0; 5 11763 while (res<=3 and d.opref.data(2)>0) do 5 11764 begin 6 11765 nr:= d.opref.data(6) extract 20; 6 11766 k:= if d.opref.data(5) shift (-20) = 12 then 6 11767 d.opref.data(5) extract 20 6 11768 else 6 11769 0; 6 11770 inspect(ss_samtale_nedlagt(nr),i); 6 11771 if k<>0 then inspect(ss_samtale_nedlagt(k),j) else j:= 0; 6 11772 if i<>0 or j<>0 then 6 11773 begin 7 11774 res:= hookon(talevej,radop,cs_radio(talevej)); 7 11775 goto radio_nedlæg; 7 11776 end; 6 11777 6 11777 res:= hookoff(talevej,radop,cs_radio(talevej),true); 6 11778 6 11778 if res=0 then 6 11779 begin 7 11780 i:= d.opref.data(5); 7 11781 d.opref.data(5):= d.opref.data(6); 7 11782 d.opref.data(6):= i; 7 11783 res:= 3; 7 11784 end; 6 11785 6 11785 d.opref.data(2):= d.opref.data(2)-1; 6 11786 end; 5 11787 d.opref.resultat:= res; 5 11788 signalch(d.opref.retur,opref,d.opref.optype); 5 11789 end 4 11790 else 4 11791 begin 5 11792 fejlreaktion(2,opgave,<: radioopgave fra operatør:>,1); 5 11793 d.opref.resultat:= 31; 5 11794 signalch(d.opref.retur,opref,d.opref.optype); 5 11795 end; 4 11796 4 11796 end <* radiokommando fra operatør *> 3 11797 else 3 11798 begin 4 11799 4 11799 d.op_ref.resultat:= 45; <* ikke implementeret *> 4 11800 4 11800 signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype); 4 11801 4 11801 end; 3 11802 3 11802 until false; 3 11803 radio_trap: 3 11804 disable skriv_radio(zbillede,1); 3 11805 end radio; 2 11806 \f 2 11806 message procedure radio_ind side 1 - 810521/hko; 2 11807 2 11807 procedure radio_ind(op); 2 11808 value op; 2 11809 integer op; 2 11810 begin 3 11811 integer array field op_ref,ref,io_opref; 3 11812 integer ac, lgd, ttyp, ptyp, pnum, pos, tegn, bs, b_pt, b_pn, 3 11813 antal_sendt, antal_spec, sum, csum, i, j, k, filref, zno; 3 11814 integer array typ, val(1:6), answ, tlgr(1:32); 3 11815 integer array field spec; 3 11816 real field rf; 3 11817 long array field laf; 3 11818 3 11818 procedure skriv_radio_ind(zud,omfang); 3 11819 value omfang; 3 11820 zone zud; 3 11821 integer omfang; 3 11822 begin integer ii; 4 11823 disable ii:=write(zud,"nl",1,<:+++ radio-ind ::>); 4 11824 if omfang > 0 then 4 11825 disable begin integer x; long array field tx; 5 11826 tx:= 0; 5 11827 trap(slut); 5 11828 write(zud,"nl",1, 5 11829 <: op-ref: :>,op_ref,"nl",1, 5 11830 <: ref: :>,ref,"nl",1, 5 11831 <: io-opref: :>,io_opref,"nl",1, 5 11832 <: ac: :>,ac,"nl",1, 5 11833 <: lgd: :>,lgd,"nl",1, 5 11834 <: ttyp: :>,ttyp,"nl",1, 5 11835 <: ptyp: :>,ptyp,"nl",1, 5 11836 <: pnum: :>,pnum,"nl",1, 5 11837 <: pos: :>,pos,"nl",1, 5 11838 <: tegn: :>,tegn,"nl",1, 5 11839 <: bs: :>,bs,"nl",1, 5 11840 <: b-pt: :>,b_pt,"nl",1, 5 11841 <: b-pn: :>,b_pn,"nl",1, 5 11842 <: antal-sendt: :>,antal_sendt,"nl",1, 5 11843 <: antal-spec: :>,antal_spec,"nl",1, 5 11844 <: sum: :>,sum,"nl",1, 5 11845 <: csum: :>,csum,"nl",1, 5 11846 <: i: :>,i,"nl",1, 5 11847 <: j: :>,j,"nl",1, 5 11848 <: k: :>,k,"nl",1, 5 11849 <: filref :>,filref,"nl",1, 5 11850 <: zno: :>,zno,"nl",1, 5 11851 <: answ: :>,answ.tx,"nl",1, 5 11852 <: tlgr: :>,tlgr.tx,"nl",1, 5 11853 <: spec: :>,spec,"nl",1); 5 11854 trap(slut); 5 11855 slut: 5 11856 end; <*disable*> 4 11857 end skriv_radio_ind; 3 11858 \f 3 11858 message procedure indsæt_opkald side 1 - 811105/hko; 3 11859 3 11859 integer procedure indsæt_opkald(bus,type,omr,sig); 3 11860 value bus,type,omr,sig; 3 11861 integer bus,type,omr,sig; 3 11862 begin 4 11863 integer res,tilst,ll,operatør; 4 11864 integer array field vt_op,ref,næste,forrige; 4 11865 real r; 4 11866 4 11866 res:= -1; 4 11867 begin 5 11868 <*V*> waitch(cs_vt_adgang,vt_op,true,if type=2 then -1 else 10); 5 11869 if vt_op <> 0 then 5 11870 begin 6 11871 wait(bs_opkaldskø_adgang); 6 11872 if omr>2 then 6 11873 begin 7 11874 start_operation(vt_op,401,cs_radio_ind,14<*bus i kø*>); 7 11875 d.vt_op.data(1):= bus; 7 11876 d.vt_op.data(4):= omr; 7 11877 tilst:= vt_op; 7 11878 signal_ch(cs_vt,vt_op,gen_optype or vt_optype); 7 11879 <*V*> wait_ch(cs_radio_ind,vt_op,vt_optype,-1); 7 11880 <*+4*> if tilst <> vt_op then 7 11881 fejlreaktion(11<*fremmed post*>,vt_op,<:radio,indsæt opkald:>,0); 7 11882 <*-4*> 7 11883 <*+2*> if testbit34 and overvåget then 7 11884 disable begin 8 11885 write(out,"nl",1,<:radio_ind,indsæt.reservation retur:>); 8 11886 skriv_op(out,vt_op); 8 11887 ud; 8 11888 end; 7 11889 end 6 11890 else 6 11891 begin 7 11892 d.vt_op.data(1):= bus; 7 11893 d.vt_op.data(2):= 0; 7 11894 d.vt_op.data(3):= bus; 7 11895 d.vt_op.data(4):= omr; 7 11896 d.vt_op.resultat:= 0; 7 11897 ref:= første_nødopkald; 7 11898 if ref<>0 then tilst:= 2 7 11899 else 7 11900 begin 8 11901 ref:= første_opkald; 8 11902 tilst:= if ref=0 then 0 else 1; 8 11903 end; 7 11904 if tilst=0 then 7 11905 d.vt_op.resultat:= 3 7 11906 else 7 11907 begin 8 11908 while ref<>0 and d.vt_op.resultat=0 do 8 11909 begin 9 11910 if opkaldskø.ref(2) extract 14 = bus and 9 11911 opkaldskø.ref(5) extract 8 = omr 9 11912 then 9 11913 d.vt_op.resultat:= 18 9 11914 else 9 11915 begin 10 11916 ref:= opkaldskø.ref(1) extract 12; 10 11917 if ref=0 and tilst=2 then 10 11918 begin 11 11919 ref:= første_opkald; 11 11920 tilst:= if ref=0 then 0 else 1; 11 11921 end 10 11922 else 10 11923 if ref=0 then tilst:= 0; 10 11924 end; 9 11925 end; 8 11926 if d.vt_op.resultat=0 then d.vt_op.resultat:= 3; 8 11927 end; 7 11928 end; 6 11929 <*-2*> 6 11930 \f 6 11930 message procedure indsæt_opkald side 1a- 820301/hko; 6 11931 6 11931 if d.vt_op.resultat=18<*bus i kø*> and type=2<*nød*> then 6 11932 begin 7 11933 ref:=første_opkald; 7 11934 tilst:=-1; 7 11935 while ref<>0 and tilst=-1 do 7 11936 begin 8 11937 if opkaldskø.ref(2) extract 14 = bus extract 14 then 8 11938 begin <* udtag normalopkald *> 9 11939 næste:=opkaldskø.ref(1); 9 11940 forrige:=næste shift(-12); 9 11941 næste:=næste extract 12; 9 11942 if forrige<>0 then 9 11943 opkaldskø.forrige(1):= 9 11944 opkaldskø.forrige(1) shift(-12) shift 12 +næste 9 11945 else 9 11946 første_opkald:=næste; 9 11947 if næste<>0 then 9 11948 opkaldskø.næste(1):= 9 11949 opkaldskø.næste(1) extract 12 + forrige shift 12 9 11950 else 9 11951 sidste_opkald:=forrige; 9 11952 opkaldskø.ref(1):=første_frie_opkald; 9 11953 første_frie_opkald:=ref; 9 11954 opkaldskø_ledige:=opkaldskø_ledige +1; 9 11955 tilst:=0; 9 11956 end 8 11957 else 8 11958 ref:=opkaldskø.ref(1) extract 12; 8 11959 end; <*while*> 7 11960 if tilst=0 then 7 11961 d.vt_op.resultat:=3; 7 11962 end; <*nødopkald bus i kø*> 6 11963 \f 6 11963 message procedure indsæt_opkald side 2 - 820304/hko; 6 11964 6 11964 if d.vt_op.resultat = 3 then 6 11965 begin 7 11966 ll:= d.vt_op.data(2); 7 11967 tilst:= d.vt_op.data(3); 7 11968 læstegn(radio_linietabel,(ll shift (-12) extract 10)+1,operatør); 7 11969 if operatør < 0 or max_antal_operatører < operatør then 7 11970 operatør:= 0; 7 11971 if operatør=0 then 7 11972 operatør:= (tilst shift (-14) extract 8); 7 11973 if operatør=0 then 7 11974 operatør:= radio_områdetabel(d.vt_op.data(4) extract 8); 7 11975 if operatør=0 or -,læsbit_ia(operatørmaske,operatør) then 7 11976 tofrom(opkaldsflag,alle_operatører,op_maske_lgd) 7 11977 else sæt_bit_ia(opkaldsflag,operatør,1); 7 11978 ref:= første_frie_opkald; <* forudsættes <> 0 *> 7 11979 første_frie_opkald:=opkaldskø.ref(1) extract 12; <*hægt ud*> 7 11980 forrige:= (if type = 1 then sidste_opkald 7 11981 else sidste_nødopkald); 7 11982 opkaldskø.ref(1):= forrige shift 12; 7 11983 if type = 1 then 7 11984 begin 8 11985 if første_opkald = 0 then første_opkald:= ref; 8 11986 sidste_opkald:= ref; 8 11987 end 7 11988 else 7 11989 begin <*type = 2*> 8 11990 if første_nødopkald = 0 then første_nødopkald:= ref; 8 11991 sidste_nødopkald:= ref; 8 11992 end; 7 11993 if forrige <> 0 then 7 11994 opkaldskø.forrige(1):= opkaldskø.forrige(1) shift (-12) 7 11995 shift 12 +ref; 7 11996 7 11996 opkaldskø.ref(2):= tilst extract 22 add 7 11997 (if type=2 then 1 shift 23 else 0); 7 11998 opkaldskø.ref(3):= ll; 7 11999 systime(5,0.0,r); 7 12000 ll:= round r//100;<*ttmm*> 7 12001 opkaldskø.ref(4):= ll shift 12 +type shift 8 +operatør extract 8; 7 12002 opkaldskø.ref(5):= sig shift 20 + omr; 7 12003 tofrom(opkaldskø.ref.opkald_meldt,ingen_operatører,op_maske_lgd); 7 12004 res:= 0; 7 12005 if type=2 then nød_opkald_brugt:=nødopkald_brugt + 1; 7 12006 opkaldskø_ledige:= opkaldskø_ledige -1; 7 12007 <*meddel opkald til berørte operatører *> 7 12008 signal_bin(bs_mobil_opkald); 7 12009 tæl_opkald(omr,type+1); 7 12010 end <* resultat = 3 *> 6 12011 else 6 12012 begin 7 12013 \f 7 12013 message procedure indsæt_opkald side 3 - 810601/hko; 7 12014 7 12014 <* d.vt_op.resultat <> 3 *> 7 12015 7 12015 res:= d.vt_op.resultat; 7 12016 if res = 10 then 7 12017 fejlreaktion(20<*mobilopkald, bus *>,bus, 7 12018 <:er ikke i bustabel:>,1) 7 12019 else 7 12020 <*+4*> if res <> 14 and res <> 18 then 7 12021 fejlreaktion(19<*radio*>,res,<:busreservationsresultat:>,1); 7 12022 <*-4*> 7 12023 ; 7 12024 end; 6 12025 signalbin(bs_opkaldskø_adgang); 6 12026 signal_ch(cs_vt_adgang,vt_op,gen_optype or vt_optype); 6 12027 end 5 12028 else 5 12029 res:= -2; <*timeout for cs_vt_adgang*> 5 12030 end; 4 12031 indsæt_opkald:= res; 4 12032 end indsæt_opkald; 3 12033 \f 3 12033 message procedure afvent_telegram side 1 - 880901/cl; 3 12034 3 12034 integer procedure afvent_telegram(tlgr,lgd,ttyp,ptyp,pnum); 3 12035 integer array tlgr; 3 12036 integer lgd,ttyp,ptyp,pnum; 3 12037 begin 4 12038 integer i, pos, tegn, ac, sum, csum; 4 12039 4 12039 pos:= 1; 4 12040 lgd:= 0; 4 12041 ttyp:= 'Z'; 4 12042 <*V*> ac:= afvent_radioinput(z_fr_in,tlgr,false); 4 12043 if ac >= 0 then 4 12044 begin 5 12045 lgd:= 1; 5 12046 while læstegn(tlgr,lgd,tegn)<>0 do ; 5 12047 lgd:= lgd-2; 5 12048 if lgd >= 3 then 5 12049 begin 6 12050 i:= 1; 6 12051 ttyp:= læstegn(tlgr,i,tegn); 6 12052 ptyp:= læstegn(tlgr,i,tegn) - '@'; 6 12053 pnum:= læstegn(tlgr,i,tegn) - '@'; 6 12054 end 5 12055 else ac:= 6; <* for kort telegram - retransmitter *> 5 12056 end; 4 12057 4 12057 afvent_telegram:= ac; 4 12058 end; 3 12059 \f 3 12059 message procedure b_answ side 1 - 880901/cl; 3 12060 3 12060 procedure b_answ(answ,ht,spec,more,ac); 3 12061 value ht, more,ac; 3 12062 integer array answ, spec; 3 12063 boolean more; 3 12064 integer ht, ac; 3 12065 begin 4 12066 integer pos, i, sum, tegn; 4 12067 4 12067 pos:= 1; 4 12068 skrivtegn(answ,pos,'B'); 4 12069 skrivtegn(answ,pos,if more then 'B' else ' '); 4 12070 skrivtegn(answ,pos,ac+'@'); 4 12071 skrivtegn(answ,pos,spec(1) shift (-18) extract 6+'@'); 4 12072 skrivtegn(answ,pos,spec(1) shift (-12) extract 6+'@'); 4 12073 skrivtegn(answ,pos,'@'); 4 12074 skrivtegn(answ,pos,spec(1) shift (-8) extract 4+'@'); 4 12075 skrivtegn(answ,pos,spec(1) extract 8+'@'); 4 12076 for i:= 1 step 1 until spec(1) extract 8 do 4 12077 if spec(1+i)=0 then skrivtegn(answ,pos,'@') 4 12078 else 4 12079 begin 5 12080 skrivtegn(answ,pos,'D'); 5 12081 anbringtal(answ,pos,spec(1+i),-4); 5 12082 end; 4 12083 for i:= 1 step 1 until 4 do 4 12084 skrivtegn(answ,pos,'@'); 4 12085 skrivtegn(answ,pos,ht+'@'); 4 12086 skrivtegn(answ,pos,'@'); 4 12087 4 12087 i:= 1; sum:= 0; 4 12088 while i < pos do 4 12089 sum:= (sum + læstegn(answ,i,tegn)) mod 256; 4 12090 skrivtegn(answ,pos,(sum shift (-4)) extract 4 + '@'); 4 12091 skrivtegn(answ,pos,sum extract 4 + '@'); 4 12092 repeat skrivtegn(answ,pos,0) until (pos mod 6)=1; 4 12093 end; 3 12094 \f 3 12094 message procedure ann_opkald side 1 - 881108/cl; 3 12095 3 12095 integer procedure ann_opkald(vogn,omr); 3 12096 value vogn,omr; 3 12097 integer vogn,omr; 3 12098 begin 4 12099 integer array field vt_op,ref,næste,forrige; 4 12100 integer res, t, i, o; 4 12101 4 12101 waitch(cs_vt_adgang,vt_op,true,-1); 4 12102 res:= -1; 4 12103 wait(bs_opkaldskø_adgang); 4 12104 ref:= første_nødopkald; 4 12105 if ref <> 0 then 4 12106 t:= 2 4 12107 else 4 12108 begin 5 12109 ref:= første_opkald; 5 12110 t:= if ref<>0 then 1 else 0; 5 12111 end; 4 12112 4 12112 if t=0 then 4 12113 res:= 19 <* kø tom *> 4 12114 else 4 12115 begin 5 12116 while ref<>0 and res=(-1) do 5 12117 begin 6 12118 if vogn=opkaldskø.ref(2) extract 14 and 6 12119 omr=opkaldskø.ref(5) extract 8 6 12120 then 6 12121 res:= 0 6 12122 else 6 12123 begin 7 12124 ref:= opkaldskø.ref(1) extract 12; 7 12125 if ref=0 and t=2 then 7 12126 begin 8 12127 ref:= første_opkald; 8 12128 t:= if ref=0 then 0 else 1; 8 12129 end; 7 12130 end; 6 12131 end; <*while*> 5 12132 \f 5 12132 message procedure ann_opkald side 2 - 881108/cl; 5 12133 5 12133 if ref<>0 then 5 12134 begin 6 12135 start_operation(vt_op,401,cs_radio_ind,17); 6 12136 d.vt_op.data(1):= vogn; 6 12137 d.vt_op.data(4):= omr; 6 12138 signalch(cs_vt,vt_op,gen_optype or vt_optype); 6 12139 waitch(cs_radio_ind,vt_op,vt_optype,-1); 6 12140 6 12140 o:= opkaldskø.ref(4) extract 8; 6 12141 næste:= opkaldskø.ref(1); 6 12142 forrige:= næste shift (-12); 6 12143 næste:= næste extract 12; 6 12144 if forrige<>0 then 6 12145 opkaldskø.forrige(1):= opkaldskø.forrige(1) shift (-12) shift 12 6 12146 + næste 6 12147 else 6 12148 if t=2 then første_nødopkald:= næste 6 12149 else første_opkald:= næste; 6 12150 6 12150 if næste<>0 then 6 12151 opkaldskø.næste(1):= opkaldskø.næste(1) extract 12 6 12152 + forrige shift 12 6 12153 else 6 12154 if t=2 then sidste_nødopkald:= forrige 6 12155 else sidste_opkald:= forrige; 6 12156 6 12156 opkaldskø.ref(1):= første_frie_opkald; 6 12157 første_frie_opkald:= ref; 6 12158 opkaldskø_ledige:= opkaldskø_ledige + 1; 6 12159 if t=2 then nødopkald_brugt:= nødopkald_brugt - 1; 6 12160 6 12160 if -, læsbit_ia(operatør_maske,o) or o=0 then 6 12161 tofrom(opkaldsflag,alle_operatører,op_maske_lgd) 6 12162 else 6 12163 begin 7 12164 sætbit_ia(opkaldsflag,o,1); 7 12165 end; 6 12166 signalbin(bs_mobilopkald); 6 12167 end; 5 12168 end; 4 12169 4 12169 signalbin(bs_opkaldskø_adgang); 4 12170 signalch(cs_vt_adgang, vt_op, true); 4 12171 ann_opkald:= res; 4 12172 end; 3 12173 \f 3 12173 message procedure frigiv_id side 1 - 881114/cl; 3 12174 3 12174 integer procedure frigiv_id(id,omr); 3 12175 value id,omr; 3 12176 integer id,omr; 3 12177 begin 4 12178 integer array field vt_op; 4 12179 4 12179 if id shift (-22) < 3 and omr > 2 then 4 12180 begin 5 12181 waitch(cs_vt_adgang,vt_op,true,-1); 5 12182 start_operation(vt_op,401,cs_radio_ind, 5 12183 if id shift (-22) = 2 then 18 else 17); 5 12184 d.vt_op.data(1):= id; 5 12185 d.vt_op.data(4):= omr; 5 12186 signalch(cs_vt,vt_op,vt_optype or gen_optype); 5 12187 waitch(cs_radio_ind,vt_op,vt_optype,-1); 5 12188 frigiv_id:= d.vt_op.resultat; 5 12189 signalch(cs_vt_adgang,vt_op,true); 5 12190 end; 4 12191 end; 3 12192 \f 3 12192 message procedure radio_ind side 2 - 810524/hko; 3 12193 trap(radio_ind_trap); 3 12194 laf:= 0; 3 12195 stack_claim((if cm_test then 200 else 150) +135+75); 3 12196 3 12196 <*+2*>if testbit32 and overvåget or testbit28 then 3 12197 skriv_radio_ind(out,0); 3 12198 <*-2*> 3 12199 answ.laf(1):= long<:<'nl'>:>; 3 12200 io_opref:= op; 3 12201 3 12201 repeat 3 12202 ac:= afvent_telegram(tlgr,lgd,ttyp,ptyp,pnum); 3 12203 pos:= 4; 3 12204 if ac = 0 then 3 12205 begin 4 12206 \f 4 12206 message procedure radio_ind side 3 - 881107/cl; 4 12207 if ttyp = 'A' then 4 12208 begin 5 12209 if ptyp<>4 or pnum<1 or pnum>max_antal_taleveje then 5 12210 ac:= 1 5 12211 else 5 12212 begin 6 12213 typ(1):= 1 shift 12 + (opkode - 1); <* eq shortint opgave *> 6 12214 val(1):= ttyp; 6 12215 typ(2):= 2 shift 12 + (data + 2); <* eq integer data(1) *> 6 12216 val(2):= pnum; 6 12217 typ(3):= -1; 6 12218 getch(cs_radio_ind,opref,rad_optype,typ,val); 6 12219 if opref>0 then 6 12220 begin 7 12221 if læstegn(tlgr,pos,tegn)<>'@' <*BST*> or 7 12222 læstegn(tlgr,pos,tegn)<>'A' <*PET*> or 7 12223 læstegn(tlgr,pos,tegn)<>d.opref.data(2)+'@' <*CTYP*> or 7 12224 læstegn(tlgr,pos,tegn)<>'@' <*TNO*> 7 12225 then 7 12226 begin 8 12227 ac:= 1; d.opref.resultat:= 31; <* systemfejl *> 8 12228 end 7 12229 else 7 12230 begin 8 12231 ac:= 0; 8 12232 d.opref.resultat:= 0; 8 12233 sætbit_ia(hookoff_maske,pnum,1); 8 12234 end; 7 12235 signalch(d.opref.retur,opref,d.opref.optype); 7 12236 end 6 12237 else 6 12238 ac:= 2; 6 12239 end; 5 12240 pos:= 1; 5 12241 skrivtegn(answ,pos,'A'); 5 12242 skrivtegn(answ,pos,' '); 5 12243 skrivtegn(answ,pos,ac+'@'); 5 12244 for i:= 1 step 1 until 5 do 5 12245 skrivtegn(answ,pos,'@'); 5 12246 skrivtegn(answ,pos,'0'); 5 12247 i:= 1; sum:= 0; 5 12248 while i < pos do 5 12249 sum:= (sum + læstegn(answ,i,tegn)) mod 256; 5 12250 skrivtegn(answ,pos,sum shift (-4) extract 4 + '@'); 5 12251 skrivtegn(answ,pos,sum extract 4 + '@'); 5 12252 repeat afsluttext(answ,pos) until pos mod 6 = 1; 5 12253 write(z_fr_out,"nl",1,answ.laf,"cr",1); 5 12254 <*+2*> if (testbit36 or testbit38) and overvåget then 5 12255 disable begin 6 12256 write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf); 6 12257 outchar(zrl,'nl'); 6 12258 end; 5 12259 <*-2*> 5 12260 disable setposition(z_fr_out,0,0); 5 12261 ac:= -1; 5 12262 \f 5 12262 message procedure radio_ind side 4 - 881107/cl; 5 12263 end <* ttyp=A *> 4 12264 else 4 12265 if ttyp = 'B' then 4 12266 begin 5 12267 if ptyp<>4 or pnum<1 or pnum>max_antal_taleveje then 5 12268 ac:= 1 5 12269 else 5 12270 begin 6 12271 typ(1):= 1 shift 12 + (opkode-1); val(1):= 'B'; 6 12272 typ(2):= 2 shift 12 + (data+2); val(2):= pnum; 6 12273 typ(3):= -1; 6 12274 getch(cs_radio_ind,opref,rad_optype,typ,val); 6 12275 if opref > 0 then 6 12276 begin 7 12277 <*+2*> if testbit37 and overvåget then 7 12278 disable begin 8 12279 skriv_radio_ind(out,0); 8 12280 write(out,<:radio-ind B-op udtaget fra cs:>,<<d>,cs_radio_ind); 8 12281 skriv_op(out,opref); 8 12282 end; 7 12283 <*-2*> 7 12284 læstegn(tlgr,pos,bs); 7 12285 if bs = 'V' then 7 12286 begin 8 12287 b_pt:= læstegn(tlgr,pos,tegn) - '@'; 8 12288 b_pn:= læstegn(tlgr,pos,tegn) - '@'; 8 12289 end; 7 12290 if bs<>'Z' and bs<>d.opref.data(2) or bs='V' and 7 12291 (b_pt<>d.opref.data(10) shift (-18) extract 6 or 7 12292 b_pn<>d.opref.data(10) shift (-12) extract 6) 7 12293 then 7 12294 begin 8 12295 ac:= 1; 8 12296 d.opref.resultat:= 31; <* systemfejl *> 8 12297 signalch(d.opref.retur,opref,d.opref.optype); 8 12298 end 7 12299 else 7 12300 if bs='V' then 7 12301 begin 8 12302 ac:= 0; 8 12303 d.opref.resultat:= 1; 8 12304 d.opref.data(4):= 0; 8 12305 d.opref.data(7):= 8 12306 1 shift (if b_pt=2 then pabx_id(b_pn) else 8 12307 radio_id(b_pn)); 8 12308 systime(1,0.0,d.opref.tid); 8 12309 signalch(cs_radio_ind,opref,d.opref.optype); 8 12310 spec:= data+18; 8 12311 b_answ(answ,0,d.opref.spec,false,ac); 8 12312 <*+2*> if (testbit36 or testbit38) and overvåget then 8 12313 disable begin 9 12314 write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf); 9 12315 outchar(zrl,'nl'); 9 12316 end; 8 12317 <*-2*> 8 12318 write(z_fr_out,"nl",1,answ.laf,"cr",1); 8 12319 disable setposition(z_fr_out,0,0); 8 12320 ac:= -1; 8 12321 \f 8 12321 message procedure radio_ind side 5 - 881107/cl; 8 12322 end 7 12323 else 7 12324 begin 8 12325 integer sig_type; 8 12326 8 12326 ac:= 0; 8 12327 antal_spec:= d.opref.data(4); 8 12328 filref:= d.opref.data(5); 8 12329 spec:= d.opref.data(6); 8 12330 if antal_spec>0 then 8 12331 begin 9 12332 antal_spec:= antal_spec-1; 9 12333 if filref<>0 then 9 12334 begin 10 12335 læsfil(filref,1,zno); 10 12336 b_pt:= fil(zno).spec(1) shift (-12); 10 12337 sig_type:= fil(zno).spec(1) shift (-8) extract 4; 10 12338 b_answ(answ,d.opref.data(3),fil(zno).spec, 10 12339 antal_spec>0,ac); 10 12340 spec:= spec + (fil(zno).spec(1) extract 8 + 1)*2; 10 12341 end 9 12342 else 9 12343 begin 10 12344 b_pt:= d.opref.spec(1) shift (-12); 10 12345 sig_type:= d.opref.spec(1) shift (-8) extract 4; 10 12346 b_answ(answ,d.opref.data(3),d.opref.spec, 10 12347 antal_spec>0,ac); 10 12348 spec:= spec + d.opref.spec(1) extract 8*2 + 2; 10 12349 end; 9 12350 9 12350 <* send answer *> 9 12351 <*+2*> if (testbit36 or testbit38) and overvåget then 9 12352 disable begin 10 12353 write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf); 10 12354 outchar(zrl,'nl'); 10 12355 end; 9 12356 <*-2*> 9 12357 write(z_fr_out,"nl",1,answ.laf,"cr",1); 9 12358 disable setposition(z_fr_out,0,0); 9 12359 if ac<>0 then 9 12360 begin 10 12361 antal_spec:= 0; 10 12362 ac:= -1; 10 12363 end 9 12364 else 9 12365 begin 10 12366 for i:= 1 step 1 until max_antal_områder do 10 12367 if område_id(i,2)=b_pt then 10 12368 begin 11 12369 j:= (if b_pt=3 and sig_type=2 then 0 else i); 11 12370 if sætbiti(d.opref.data(7),j,1)=0 then 11 12371 d.opref.resultat:= d.opref.resultat + 1; 11 12372 end; 10 12373 end; 9 12374 end; 8 12375 \f 8 12375 message procedure radio_ind side 6 - 881107/cl; 8 12376 8 12376 <* afvent nyt telegram *> 8 12377 d.opref.data(4):= antal_spec; 8 12378 d.opref.data(6):= spec; 8 12379 ac:= -1; 8 12380 systime(1,0.0,d.opref.tid); 8 12381 <*+2*> if testbit37 and overvåget then 8 12382 disable begin 9 12383 skriv_radio_ind(out,0); 9 12384 write(out,<:radio-ind B-op retur på cs:>,<<d>,cs_radio_ind); skriv_op(out,opref); 9 12385 ud; 9 12386 end; 8 12387 <*-2*> 8 12388 signalch(cs_radio_ind,opref,d.opref.optype); 8 12389 end; 7 12390 end 6 12391 else ac:= 2; 6 12392 end; 5 12393 if ac > 0 then 5 12394 begin 6 12395 for i:= 1 step 1 until 6 do val(i):= 0; 6 12396 b_answ(answ,0,val,false,ac); 6 12397 <*+2*> 6 12398 if (testbit36 or testbit38) and overvåget then 6 12399 disable begin 7 12400 write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf); 7 12401 outchar(zrl,'nl'); 7 12402 end; 6 12403 <*-2*> 6 12404 write(z_fr_out,"nl",1,answ.laf,"cr",1); 6 12405 disable setposition(z_fr_out,0,0); 6 12406 ac:= -1; 6 12407 end; 5 12408 \f 5 12408 message procedure radio_ind side 7 - 881107/cl; 5 12409 end <* ttyp = 'B' *> 4 12410 else 4 12411 if ttyp='C' or ttyp='J' then 4 12412 begin 5 12413 if ptyp<>4 or pnum<1 or pnum>max_antal_taleveje then 5 12414 ac:= 1 5 12415 else 5 12416 begin 6 12417 typ(1):= 1 shift 12 + (opkode - 1); val(1):= 'B'; 6 12418 typ(2):= 2 shift 12 + (data + 2); val(2):= pnum; 6 12419 typ(3):= -1; 6 12420 getch(cs_radio_ind,opref,rad_optype,typ,val); 6 12421 if opref > 0 then 6 12422 begin 7 12423 d.opref.resultat:= d.opref.resultat - 1; 7 12424 if ttyp = 'C' then 7 12425 begin 8 12426 b_pt:= læstegn(tlgr,4,tegn)-'@'; <* ????? *> 8 12427 b_pn:= læstegn(tlgr,5,tegn)-'@'; <* ????? *> 8 12428 j:= 0; 8 12429 for i:= 1 step 1 until max_antal_kanaler do 8 12430 if kanal_id(i)=b_pt shift 5 + b_pn then j:= i; 8 12431 if kanal_til_omr(j)=3 and d.opref.resultat>0 then 8 12432 d.opref.resultat:= d.opref.resultat-1; 8 12433 sætbiti(optaget_flag,j,1); 8 12434 sætbiti(d.opref.data(9),j,1); 8 12435 end 7 12436 else 7 12437 begin <* INGEN FORBINDELSE *> 8 12438 sætbiti(d.opref.data(8),læstegn(tlgr,4,tegn)-'@',1); 8 12439 end; 7 12440 ac:= 0; 7 12441 if d.opref.resultat<>0 or d.opref.data(4)<>0 then 7 12442 begin 8 12443 systime(1,0,d.opref.tid); 8 12444 signal_ch(cs_radio_ind,opref,d.opref.op_type); 8 12445 end 7 12446 else 7 12447 begin 8 12448 d.opref.resultat:= if d.opref.data(9)<>0 then 0 else 8 12449 if læsbiti(d.opref.data(8),9) then 52 else 8 12450 if læsbiti(d.opref.data(8),10) then 20 else 8 12451 if læsbiti(d.opref.data(8),2) then 52 else 59; 8 12452 signalch(d.opref.retur, opref, d.opref.optype); 8 12453 end; 7 12454 end 6 12455 else 6 12456 ac:= 2; 6 12457 end; 5 12458 pos:= 1; 5 12459 skrivtegn(answ,pos,ttyp); 5 12460 skrivtegn(answ,pos,' '); 5 12461 skrivtegn(answ,pos,ac+'@'); 5 12462 i:= 1; sum:= 0; 5 12463 while i < pos do 5 12464 sum:= (sum + læstegn(answ,i,tegn)) mod 256; 5 12465 skrivtegn(answ,pos,sum shift (-4) + '@'); 5 12466 skrivtegn(answ,pos,sum extract 4 + '@'); 5 12467 repeat afsluttext(answ,pos) until pos mod 6 = 1; 5 12468 <*+2*> if (testbit36 or testbit38) and overvåget then 5 12469 disable begin 6 12470 write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf); 6 12471 outchar(zrl,'nl'); 6 12472 end; 5 12473 <*-2*> 5 12474 write(z_fr_out,"nl",1,answ.laf,"cr",1); 5 12475 disable setposition(z_fr_out,0,0); 5 12476 ac:= -1; 5 12477 \f 5 12477 message procedure radio_ind side 8 - 881107/cl; 5 12478 end <* ttyp = 'C' or 'J' *> 4 12479 else 4 12480 if ttyp = 'D' then 4 12481 begin 5 12482 if ptyp = 4 <* VDU *> then 5 12483 begin 6 12484 if pnum<1 or pnum>max_antal_taleveje then 6 12485 ac:= 1 6 12486 else 6 12487 begin 7 12488 inspect(bs_talevej_udkoblet(pnum),j); 7 12489 if j>=0 then 7 12490 begin 8 12491 sætbit_ia(samtaleflag,pnum,1); 8 12492 signal_bin(bs_mobil_opkald); 8 12493 end; 7 12494 if læsbit_ia(hookoff_maske,pnum) then 7 12495 signalbin(bs_talevej_udkoblet(pnum)); 7 12496 ac:= 0; 7 12497 end 6 12498 end 5 12499 else 5 12500 if ptyp=3 or ptyp=2 then 5 12501 begin 6 12502 if ptyp=3 and (pnum<1 or max_antal_radiokanaler<pnum) or 6 12503 ptyp=2 and pnum<>2 6 12504 then 6 12505 ac:= 1 6 12506 else 6 12507 begin 7 12508 if læstegn(tlgr,5,tegn)='D' then 7 12509 begin <* teknisk nr i telegram *> 8 12510 b_pn:= 0; 8 12511 for i:= 1 step 1 until 4 do 8 12512 b_pn:= b_pn*10 + læstegn(tlgr,5+i,tegn)-'0'; 8 12513 end 7 12514 else 7 12515 b_pn:= 0; 7 12516 b_pt:= port_til_omr(ptyp shift 6 + pnum); 7 12517 i:= 0; 7 12518 for j:= 1 step 1 until max_antal_kanaler do 7 12519 if kanal_id(j) = ptyp shift 5 + pnum then i:= j; 7 12520 if i<>0 then 7 12521 begin 8 12522 ref:= (i-1)*kanalbeskrlængde; 8 12523 inspect(ss_samtale_nedlagt(i),j); 8 12524 if j>=0 then 8 12525 begin 9 12526 sætbit_ia(samtaleflag, 9 12527 tv_operatør(kanal_tab.ref.kanal_tilstand shift (-16)),1); 9 12528 signalbin(bs_mobil_opkald); 9 12529 end; 8 12530 signal(ss_samtale_nedlagt(i)); 8 12531 if b_pn<>0 then frigiv_id(b_pn,b_pt); 8 12532 begin 9 12533 if kanal_tab.ref.kanal_id1<>0 and 9 12534 (kanal_tab.ref.kanal_id1 shift (-22)<>0 or 9 12535 kanal_tab.ref.kanal_id1 extract 14<>b_pn) then 9 12536 frigiv_id(kanal_tab.ref.kanal_id1,b_pt); 9 12537 if kanal_tab.ref.kanal_id2<>0 and 9 12538 (kanal_tab.ref.kanal_id2 shift (-22)<>0 or 9 12539 kanal_tab.ref.kanal_id2 extract 14<>b_pn) then 9 12540 frigiv_id(kanal_tab.ref.kanal_id2,b_pt); 9 12541 end; 8 12542 sætbiti(optaget_flag,i,0); 8 12543 end; 7 12544 ac:= 0; 7 12545 end; 6 12546 end 5 12547 else ac:= 1; 5 12548 if ac>=0 then 5 12549 begin 6 12550 pos:= i:= 1; sum:= 0; 6 12551 skrivtegn(answ,pos,'D'); 6 12552 skrivtegn(answ,pos,' '); 6 12553 skrivtegn(answ,pos,ac+'@'); 6 12554 skrivtegn(answ,pos,'@'); 6 12555 while i<pos do 6 12556 sum:= (sum + læstegn(answ,i,tegn)) mod 256; 6 12557 skrivtegn(answ,pos, sum shift (-4) extract 4 + '@'); 6 12558 skrivtegn(answ,pos, sum extract 4 + '@'); 6 12559 repeat afsluttext(answ,pos) until pos mod 6 = 1; 6 12560 <*+2*> 6 12561 if (testbit36 or testbit38) and overvåget then 6 12562 disable begin 7 12563 write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf); 7 12564 outchar(zrl,'nl'); 7 12565 end; 6 12566 <*-2*> 6 12567 write(z_fr_out,"nl",1,answ.laf,"cr",1); 6 12568 disable setposition(z_fr_out,0,0); 6 12569 ac:= -1; 6 12570 end; 5 12571 \f 5 12571 message procedure radio_ind side 9 - 881107/cl; 5 12572 end <* ttyp = D *> 4 12573 else 4 12574 if ttyp='H' then 4 12575 begin 5 12576 integer htyp; 5 12577 5 12577 htyp:= læstegn(tlgr,7+læstegn(tlgr,6,tegn)-'@',tegn); 5 12578 5 12578 if htyp='A' then 5 12579 begin <*mobilopkald*> 6 12580 if (ptyp=2 and pnum<>2) or (ptyp=3 and 6 12581 (pnum<1 or pnum>max_antal_radiokanaler)) then 6 12582 ac:= 1 6 12583 else 6 12584 begin 7 12585 b_pt:= læstegn(tlgr,5,tegn)-'@'; 7 12586 if læstegn(tlgr,6,tegn)='D' then 7 12587 begin <*teknisk nr. i telegram*> 8 12588 b_pn:= 0; 8 12589 for i:= 1 step 1 until 4 do 8 12590 b_pn:= b_pn*10 + læstegn(tlgr,6+i,tegn)-'0'; 8 12591 end 7 12592 else b_pn:= 0; 7 12593 bs:= læstegn(tlgr,9+læstegn(tlgr,6,tegn)-'@',tegn)-'@'+1; 7 12594 <* opkaldstype *> 7 12595 j:= (if ptyp=2 then pabx_id(pnum) else radio_id(pnum)); 7 12596 if j>0 then 7 12597 begin 8 12598 if bs=10 then 8 12599 ann_opkald(b_pn,j) 8 12600 else 8 12601 indsæt_opkald(b_pn,bs,j,if b_pt>1 then 1 else 0); 8 12602 ac:= 0; 8 12603 end else ac:= 1; 7 12604 end; 6 12605 \f 6 12605 message procedure radio_ind side 10 - 881107/cl; 6 12606 end 5 12607 else 5 12608 if htyp='E' then 5 12609 begin <* radiokanal status *> 6 12610 long onavn; 6 12611 6 12611 ac:= 0; 6 12612 j:= 0; 6 12613 for i:= 1 step 1 until max_antal_kanaler do 6 12614 if kanal_id(i) = ptyp shift 5 + pnum then j:= i; 6 12615 6 12615 <* Alarmer for K12 = GLX ignoreres *> 6 12616 <* 94.06.14/CL *> 6 12617 <* Alarmer for K15 = HG ignoreres *> 6 12618 <* 95.07.31/CL *> 6 12619 <* Alarmer for K10 = FS ignoreres *> 6 12620 <* 96.05.27/CL *> 6 12621 if j>0 then 6 12622 begin 7 12623 onavn:= områdenavn(port_til_omr(ptyp shift 6 + pnum)); 7 12624 j:= (if (onavn = long<:GLX:>) or (onavn = long<:HG:>) or 7 12625 (onavn = long<:FS:>) then 0 else j); 7 12626 end; 6 12627 6 12627 læstegn(tlgr,9,tegn); 6 12628 if j<>0 and (tegn='A' or tegn='E') then 6 12629 begin 7 12630 ref:= (j-1)*kanalbeskrlængde; 7 12631 bs:= if tegn='E' then 0 else 15; 7 12632 if bs<>sæt_hex_ciffer(kanal_tab.ref,3,bs) then 7 12633 begin 8 12634 tofrom(kanalflag,alle_operatører,op_maske_lgd); 8 12635 signalbin(bs_mobil_opkald); 8 12636 end; 7 12637 end; 6 12638 if tegn<>'A' and tegn<>'E' and j<>0 then 6 12639 begin 7 12640 waitch(cs_radio_pulje,opref,true,-1); 7 12641 startoperation(opref,401,cs_radio_pulje,23); 7 12642 i:= 1; 7 12643 hægtstring(d.opref.data,i,<:radiofejl :>); 7 12644 if læstegn(tlgr,4,k)<>'@' then 7 12645 begin 8 12646 if k-'@' = 17 then 8 12647 hægtstring(d.opref.data,i,<: AMV:>) 8 12648 else 8 12649 if k-'@' = 18 then 8 12650 hægtstring(d.opref.data,i,<: BHV:>) 8 12651 else 8 12652 begin 9 12653 hægtstring(d.opref.data,i,<: BST:>); 9 12654 anbringtal(d.opref.data,i,k-'@',1); 9 12655 end; 8 12656 end; 7 12657 skrivtegn(d.opref.data,i,' '); 7 12658 hægtstring(d.opref.data,i,string kanal_navn(j)); 7 12659 skrivtegn(d.opref.data,i,' '); 7 12660 hægtstring(d.opref.data,i, 7 12661 string område_navn(kanal_til_omr(j))); 7 12662 if '@'<=tegn and tegn<='F' then 7 12663 hægtstring(d.opref.data,i,case (tegn-'@'+1) of ( 7 12664 <*@*> <:: ukendt fejl:>, 7 12665 <*A*> <:: compad-fejl:>, 7 12666 <*B*> <:: ladefejl:>, 7 12667 <*C*> <:: dør åben:>, 7 12668 <*D*> <:: senderfejl:>, 7 12669 <*E*> <:: compad ok:>, 7 12670 <*F*> <:: liniefejl:>, 7 12671 <::>)) 7 12672 else 7 12673 begin 8 12674 hægtstring(d.opref.data,i,<:: fejlkode :>); 8 12675 skrivtegn(d.opref.data,i,tegn); 8 12676 end; 7 12677 repeat afsluttext(d.opref.data,i) until i mod 6 = 1; 7 12678 signalch(cs_io,opref,gen_optype or rad_optype); 7 12679 ref:= (j-1)*kanalbeskrlængde; 7 12680 tofrom(kanal_tab.ref.kanal_alarm,alle_operatører,op_maske_lgd); 7 12681 tofrom(kanalflag,alle_operatører,op_maske_lgd); 7 12682 signalbin(bs_mobilopkald); 7 12683 end; 6 12684 \f 6 12684 message procedure radio_ind side 11 - 881107/cl; 6 12685 end 5 12686 else 5 12687 if htyp='G' then 5 12688 begin <* fjerninkludering/-ekskludering af område *> 6 12689 bs:= læstegn(tlgr,9,tegn)-'@'; 6 12690 j:= 0; 6 12691 for i:= 1 step 1 until max_antal_kanaler do 6 12692 if kanal_id(i) = ptyp shift 5 + pnum then j:= i; 6 12693 if j<>0 then 6 12694 begin 7 12695 ref:= (j-1)*kanalbeskrlængde; 7 12696 sætbiti(kanal_tab.ref.kanal_tilstand,11,bs extract 1); 7 12697 end; 6 12698 tofrom(kanalflag,alle_operatører,op_maske_lgd); 6 12699 signalbin(bs_mobilopkald); 6 12700 ac:= 0; 6 12701 end 5 12702 else 5 12703 if htyp='L' then 5 12704 begin <* vogntabelændringer *> 6 12705 long field ll; 6 12706 6 12706 ll:= 10; 6 12707 ac:= 0; 6 12708 zno:= port_til_omr(ptyp shift 6 + pnum); 6 12709 læstegn(tlgr,9,tegn); 6 12710 if (tegn='N') or (tegn='O') then 6 12711 begin 7 12712 typ(1):= 1 shift 12 + (opkode-1); val(1):= 'H'; 7 12713 typ(2):= -1; 7 12714 getch(cs_radio_ind,opref,rad_optype,typ,val); 7 12715 if opref>0 then 7 12716 begin 8 12717 d.opref.resultat:= if tegn='N' then 3 else 60; 8 12718 signalch(d.opref.retur,opref,d.opref.optype); 8 12719 end; 7 12720 ac:= -1; 7 12721 end 6 12722 else 6 12723 if (tegn='G') and (tlgr.ll=(long<:FFFFF:> add 'F')) then 6 12724 ac:= -1 6 12725 else 6 12726 if tegn='G' then <*indkodning*> 6 12727 begin 7 12728 pos:= 10; i:= 0; 7 12729 while læstegn(tlgr,pos,tegn)>='0' and tegn<='9' and pos<=14 do 7 12730 i:= i*10 + (tegn-'0'); 7 12731 i:= i mod 1000; 7 12732 b_pn:= (1 shift 22) + (i shift 12); 7 12733 if pos=14 and 'A'<=tegn and tegn<='Å' then 7 12734 b_pn:= b_pn + ((tegn-'@') shift 7); 7 12735 pos:= 14; i:= 0; 7 12736 while læstegn(tlgr,pos,tegn)>='0' and tegn<='9' and pos<=16 do 7 12737 i:= i*10 + (tegn-'0'); 7 12738 b_pn:= b_pn + i; 7 12739 pos:= 16; i:= 0; 7 12740 while læstegn(tlgr,pos,tegn)>='0' and tegn<='9' and pos<=20 do 7 12741 i:= i*10 + (tegn-'0'); 7 12742 b_pt:= i; 7 12743 bs:= 11; 7 12744 \f 7 12744 message procedure radio_ind side 12 - 881107/cl; 7 12745 end 6 12746 else 6 12747 if tegn='H' then <*udkodning*> 6 12748 begin 7 12749 pos:= 10; i:= 0; 7 12750 while læstegn(tlgr,pos,tegn)>='0' and tegn<='9' and pos<=14 do 7 12751 i:= i*10 + (tegn-'0'); 7 12752 b_pt:= i; 7 12753 b_pn:= 0; 7 12754 bs:= 12; 7 12755 end 6 12756 else 6 12757 if tegn='I' then <*slet tabel*> 6 12758 begin 7 12759 b_pt:= 1; b_pn:= 999; bs:= 19; 7 12760 pos:= 10; i:= 0; 7 12761 i:= hex_to_dec(læstegn(tlgr,pos,tegn))*16 + 7 12762 hex_to_dec(læstegn(tlgr,pos,tegn)); 7 12763 zno:= i; 7 12764 end 6 12765 else ac:= 2; 6 12766 if ac<0 then 6 12767 ac:= 0 6 12768 else 6 12769 6 12769 if ac=0 then 6 12770 begin 7 12771 waitch(cs_vt_adgang,opref,true,-1); 7 12772 startoperation(opref,401,cs_vt_adgang,bs); 7 12773 d.opref.data(1):= b_pt; 7 12774 d.opref.data(2):= b_pn; 7 12775 d.opref.data(if bs=19 then 3 else 4):= zno; 7 12776 signalch(cs_vt,opref,gen_optype or vt_optype); 7 12777 end; 6 12778 end 5 12779 else 5 12780 ac:= 2; 5 12781 5 12781 pos:= 1; 5 12782 skrivtegn(answ,pos,'H'); 5 12783 skrivtegn(answ,pos,' '); 5 12784 skrivtegn(answ,pos,ac+'@'); 5 12785 i:= 1; sum:= 0; 5 12786 while i < pos do 5 12787 sum:= (sum + læstegn(answ,i,tegn)) mod 256; 5 12788 skriv_tegn(answ,pos, sum shift (-4) extract 4 +'@'); 5 12789 skriv_tegn(answ,pos, sum extract 4 +'@'); 5 12790 repeat afsluttext(answ,pos) until pos mod 6 = 1; 5 12791 <*+2*> if (testbit36 or testbit38) and overvåget then 5 12792 disable begin 6 12793 write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf); 6 12794 outchar(zrl,'nl'); 6 12795 end; 5 12796 <*-2*> 5 12797 write(z_fr_out,"nl",1,answ.laf,"cr",1); 5 12798 disable setposition(z_fr_out,0,0); 5 12799 ac:= -1; 5 12800 \f 5 12800 message procedure radio_ind side 13 - 881107/cl; 5 12801 end 4 12802 else 4 12803 if ttyp = 'I' then 4 12804 begin 5 12805 typ(1):= -1; 5 12806 repeat 5 12807 getch(cs_radio_ind,opref,true,typ,val); 5 12808 if opref<>0 then 5 12809 begin 6 12810 d.opref.resultat:= 31; 6 12811 signalch(d.opref.retur,opref,d.opref.op_type); 6 12812 end; 5 12813 until opref=0; 5 12814 for i:= 1 step 1 until max_antal_taleveje do 5 12815 if læsbit_ia(hookoff_maske,i) then 5 12816 begin 6 12817 signalbin(bs_talevej_udkoblet(i)); 6 12818 sætbit_ia(samtaleflag,tv_operatør(i),1); 6 12819 end; 5 12820 if antal_bits_ia(samtaleflag,1,max_antal_operatører)<>0 then 5 12821 signal_bin(bs_mobil_opkald); 5 12822 for i:= 1 step 1 until max_antal_kanaler do 5 12823 begin 6 12824 ref:= (i-1)*kanalbeskrlængde; 6 12825 if kanal_tab.ref.kanal_tilstand extract 2 <> 0 then 6 12826 begin 7 12827 if kanal_tab.ref.kanal_id2<>0 and 7 12828 kanal_tab.ref.kanal_id2 shift (-22)<>3 7 12829 then 7 12830 begin 8 12831 signal(ss_samtale_nedlagt(i)); 8 12832 frigiv_id(kanal_tab.ref.kanal_id2,kanal_til_omr(i)); 8 12833 end; 7 12834 if kanal_tab.ref.kanal_id1<>0 then 7 12835 begin 8 12836 signal(ss_samtale_nedlagt(i)); 8 12837 frigiv_id(kanal_tab.ref.kanal_id1,kanal_til_omr(i)); 8 12838 end; 7 12839 end; 6 12840 sæt_hex_ciffer(kanal_tab.ref,3,15); 6 12841 end; 5 12842 <*V*> waitch(cs_radio_pulje,opref,true,-1); 5 12843 startoperation(opref,401,cs_radio_pulje,23); 5 12844 i:= 1; 5 12845 hægtstring(d.opref.data,i,<:radio-info: :>); 5 12846 j:= 4; 5 12847 while j<=lgd and i<(d.opref.opsize - data - 2)//2*3 do 5 12848 begin 6 12849 skrivtegn(d.opref.data,i,læstegn(tlgr,j,tegn)); 6 12850 end; 5 12851 repeat afsluttext(d.opref.data,i) until i mod 6 = 1; 5 12852 signalch(cs_io,opref,gen_optype or rad_optype); 5 12853 optaget_flag:= 0; 5 12854 pos:= i:= 1; sum:= 0; 5 12855 skrivtegn(answ,pos,'I'); 5 12856 skrivtegn(answ,pos,' '); 5 12857 skrivtegn(answ,pos,'@'); 5 12858 while i<pos do 5 12859 sum:= (sum+læstegn(answ,i,tegn)) mod 256; 5 12860 skrivtegn(answ,pos,sum shift (-4) extract 4 + '@'); 5 12861 skrivtegn(answ,pos,sum extract 4 + '@'); 5 12862 repeat afsluttext(answ,pos) until pos mod 6 = 1; 5 12863 <*+2*> if (testbit36 or testbit38) and overvåget then 5 12864 disable begin 6 12865 write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf); 6 12866 outchar(zrl,'nl'); 6 12867 end; 5 12868 <*-2*> 5 12869 write(z_fr_out,"nl",1,answ.laf,"cr",1); 5 12870 disable setposition(z_fr_out,0,0); 5 12871 ac:= -1; 5 12872 \f 5 12872 message procedure radio_ind side 14 - 881107/cl; 5 12873 end 4 12874 else 4 12875 if ttyp='L' then 4 12876 begin 5 12877 ac:= 0; 5 12878 <****** RADIO-INFO meddelelser til hovedkonsol afhængig af testbi21 ******> 5 12879 if testbit21 then 5 12880 begin 6 12881 waitch(cs_radio_pulje,opref,true,-1); 6 12882 startoperation(opref,401,cs_radio_pulje,23); 6 12883 i:= 1; 6 12884 hægtstring(d.opref.data,i,<:radio-info: :>); 6 12885 j:= 4; 6 12886 while j<=lgd and i<(d.opref.opsize-data-2)//2*3 do 6 12887 begin 7 12888 skrivtegn(d.opref.data,i,læstegn(tlgr,j,tegn)); 7 12889 end; 6 12890 repeat afsluttext(d.opref.data,i) until i mod 6 = 1; 6 12891 signalch(cs_io,opref,gen_optype or rad_optype); 6 12892 end; <*testbit21*> 5 12893 end 4 12894 else 4 12895 if ttyp='Z' then 4 12896 begin 5 12897 <*+2*> if (testbit36 or testbit38) and overvåget then 5 12898 disable begin 6 12899 write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf); 6 12900 outchar(zrl,'nl'); 6 12901 end; 5 12902 <*-2*> 5 12903 write(z_fr_out,"nl",1,answ.laf,"cr",1); 5 12904 disable setposition(z_fr_out,0,0); 5 12905 ac:= -1; 5 12906 end 4 12907 else 4 12908 ac:= 1; 4 12909 end; <* telegram modtaget ok *> 3 12910 \f 3 12910 message procedure radio_ind side 15 - 881107/cl; 3 12911 if ac>=0 then 3 12912 begin 4 12913 pos:= i:= 1; sum:= 0; 4 12914 skrivtegn(answ,pos,ttyp); 4 12915 skrivtegn(answ,pos,' '); 4 12916 skrivtegn(answ,pos,ac+'@'); 4 12917 while i<pos do 4 12918 sum:= (sum+læstegn(answ,i,tegn)) mod 256; 4 12919 skrivtegn(answ,pos, sum shift (-4) extract 4 + '@'); 4 12920 skrivtegn(answ,pos, sum extract 4 + '@'); 4 12921 repeat afsluttext(answ,pos) until pos mod 6 = 1; 4 12922 <*+2*> if (testbit36 or testbit38) and overvåget then 4 12923 disable begin 5 12924 write(zrl,<<zd dd dd.dd >,now,<:fr-answ: :>,answ.laf); 5 12925 outchar(zrl,'nl'); 5 12926 end; 4 12927 <*-2*> 4 12928 write(z_fr_out,"nl",1,answ.laf,"cr",1); 4 12929 disable setposition(z_fr_out,0,0); 4 12930 ac:= -1; 4 12931 end; 3 12932 3 12932 typ(1):= 0; 3 12933 typ(2):= 1 shift 18 + 4 shift 12 + tid; <* lt real tid *> 3 12934 rf:= 4; 3 12935 systime(1,0.0,val.rf); 3 12936 val.rf:= val.rf - 30.0; 3 12937 typ(3):= -1; 3 12938 repeat 3 12939 getch(cs_radio_ind,opref,true,typ,val); 3 12940 if opref>0 then 3 12941 begin 4 12942 d.opref.resultat:= 53; <*annuleret*> 4 12943 signalch(d.opref.retur,opref,d.opref.optype); 4 12944 end; 3 12945 until opref=0; 3 12946 3 12946 until false; 3 12947 3 12947 radio_ind_trap: 3 12948 3 12948 disable skriv_radio_ind(zbillede,1); 3 12949 3 12949 end radio_ind; 2 12950 \f 2 12950 message procedure radio_ud side 1 - 820301/hko; 2 12951 2 12951 procedure radio_ud(op); 2 12952 value op; 2 12953 integer op; 2 12954 begin 3 12955 integer array field opref,io_opref; 3 12956 integer opgave, kode, pos, tegn, i, sum, rc, svar_status; 3 12957 integer array answ, tlgr(1:32); 3 12958 long array field laf; 3 12959 3 12959 procedure skriv_radio_ud(z,omfang); 3 12960 value omfang; 3 12961 zone z; 3 12962 integer omfang; 3 12963 begin integer i1; 4 12964 disable i1:= write(z,"nl",1,<:+++ radio-ud ::>); 4 12965 if omfang > 0 then 4 12966 disable begin real x; long array field tx; 5 12967 tx:= 0; 5 12968 trap(slut); 5 12969 write(z,"nl",1, 5 12970 <: opref: :>,opref,"nl",1, 5 12971 <: io-opref: :>,io_opref,"nl",1, 5 12972 <: opgave: :>,opgave,"nl",1, 5 12973 <: kode: :>,kode,"nl",1, 5 12974 <: pos: :>,pos,"nl",1, 5 12975 <: tegn: :>,tegn,"nl",1, 5 12976 <: i: :>,i,"nl",1, 5 12977 <: sum: :>,sum,"nl",1, 5 12978 <: rc: :>,rc,"nl",1, 5 12979 <: svar-status: :>,svar_status,"nl",1, 5 12980 <: tlgr: ":>,tlgr.tx,<:":>,"nl",1, 5 12981 <: answ: ":>,answ.tx,<:":>,"nl",1, 5 12982 <::>); 5 12983 skriv_coru(z,coru_no(402)); 5 12984 slut: 5 12985 end; <*disable*> 4 12986 end skriv_radio_ud; 3 12987 3 12987 trap(radio_ud_trap); 3 12988 laf:= 0; 3 12989 stack_claim((if cm_test then 200 else 150) +35+100); 3 12990 3 12990 <*+2*>if testbit32 and overvåget or testbit28 then 3 12991 skriv_radio_ud(out,0); 3 12992 <*-2*> 3 12993 3 12993 io_opref:= op; 3 12994 \f 3 12994 message procedure radio_ud side 2 - 810529/hko; 3 12995 3 12995 repeat 3 12996 3 12996 <*V*> wait_ch(cs_radio_ud,op_ref,gen_optype or rad_optype,-1); 3 12997 kode:= d.op_ref.opkode; 3 12998 opgave:= kode shift(-12); 3 12999 kode:= kode extract 12; 3 13000 if opgave < 'A' or opgave > 'I' then 3 13001 begin 4 13002 d.opref.resultat:= 31; 4 13003 end 3 13004 else 3 13005 begin 4 13006 pos:= 1; 4 13007 if opgave='A' or opgave='B' or opgave='D' or opgave='H' then 4 13008 begin 5 13009 skrivtegn(tlgr,pos,opgave); 5 13010 if d.opref.data(1) = 0 then 5 13011 begin 6 13012 skrivtegn(tlgr,pos,'G'); 6 13013 skrivtegn(tlgr,pos,'A'); 6 13014 end 5 13015 else 5 13016 begin 6 13017 skrivtegn(tlgr,pos,'D'); 6 13018 skrivtegn(tlgr,pos,d.opref.data(1)+'@'); <*talevejsnr*> 6 13019 end; 5 13020 if opgave='A' then 5 13021 begin 6 13022 skrivtegn(tlgr,pos,d.opref.data(2)+'@'); <*calltype*> 6 13023 end 5 13024 else 5 13025 if opgave='B' then 5 13026 begin 6 13027 skrivtegn(tlgr,pos,d.opref.data(2)); 6 13028 if d.opref.data(2)='V' then 6 13029 begin 7 13030 skrivtegn(tlgr,pos, 7 13031 d.opref.data(10) shift (-18) extract 6+'@'); <*trunktype*> 7 13032 skrivtegn(tlgr,pos, 7 13033 d.opref.data(10) shift (-12) extract 6+'@'); <*trunknum.*> 7 13034 end; 6 13035 d.opref.data(7):= d.opref.data(8):= d.opref.data(9):= 0; 6 13036 d.opref.data(6):= if d.opref.data(5)<>0 then 2 else data+18; 6 13037 end 5 13038 else 5 13039 if opgave='H' then 5 13040 begin 6 13041 skrivtegn(tlgr,pos,d.opref.data(3)+'@'); <*trunktype*> 6 13042 skrivtegn(tlgr,pos,d.opref.data(4)+'@'); <*trunknum.*> 6 13043 hægtstring(tlgr,pos,<:@@@:>); 6 13044 skrivtegn(tlgr,pos,d.opref.data(2)); <*H_tlgr_type*> 6 13045 skrivtegn(tlgr,pos,'A'); 6 13046 skrivtegn(tlgr,pos,(if d.opref.data(2)='L' and 6 13047 d.opref.data(5)=8 then 7 else d.opref.data(5))+'@'); 6 13048 if d.opref.data(2)='L' then 6 13049 begin 7 13050 if d.opref.data(5)=7 then 7 13051 begin 8 13052 anbringtal(tlgr,pos, 8 13053 d.opref.data(8) shift (-12) extract 10,-4); 8 13054 anbringtal(tlgr,pos, 8 13055 d.opref.data(8) extract 7,-2); 8 13056 end 7 13057 else 7 13058 if d.opref.data(5)=8 then 7 13059 begin 8 13060 hægtstring(tlgr,pos,<:FFFFFF:>); 8 13061 end; 7 13062 if d.opref.data(5)<>9 then 7 13063 anbringtal(tlgr,pos,d.opref.data(7),-4); 7 13064 skrivtegn(tlgr,pos, 7 13065 dec_to_hex(d.opref.data(6) shift (-4) extract 4)); 7 13066 skrivtegn(tlgr,pos, 7 13067 dec_to_hex(d.opref.data(6) extract 4)); 7 13068 skrivtegn(tlgr,10,pos-11+'@'); 7 13069 end; 6 13070 end; 5 13071 end 4 13072 else 4 13073 if opgave='I' then 4 13074 begin 5 13075 hægtstring(tlgr,pos,<:IGA:>); 5 13076 end 4 13077 else d.opref.resultat:= 31; <*systemfejl*> 4 13078 end; 3 13079 \f 3 13079 message procedure radio_ud side 3 - 881107/cl; 3 13080 3 13080 if d.opref.resultat=0 then 3 13081 begin 4 13082 if (opgave <= 'B') 4 13083 <* or (opgave='H' and d.opref.data(2)='L') *> then 4 13084 begin 5 13085 systime(1,0,d.opref.tid); 5 13086 signalch(cs_radio_ind,opref,d.opref.optype); 5 13087 opref:= 0; 5 13088 end; 4 13089 <* beregn checksum og send *> 4 13090 i:= 1; sum:= 0; 4 13091 while i < pos do 4 13092 sum:= (sum + læstegn(tlgr,i,tegn)) mod 256; 4 13093 skrivtegn(tlgr,pos,sum shift (-4) + '@'); 4 13094 skrivtegn(tlgr,pos,sum extract 4 + '@'); 4 13095 repeat skrivtegn(tlgr,pos,0) until pos mod 6 = 1; 4 13096 <**********************************************> 4 13097 <* specialaktion p.g.a. modtagebesvær i COMET *> 4 13098 4 13098 if opgave='B' then delay(1); 4 13099 4 13099 <* 94.04.19/cl *> 4 13100 <**********************************************> 4 13101 4 13101 <*+2*> if (testbit36 or testbit39) and overvåget then 4 13102 disable begin 5 13103 write(zrl,<<zd dd dd.dd >,now,<:rf-tlgr: :>,tlgr.laf); 5 13104 outchar(zrl,'nl'); 5 13105 end; 4 13106 <*-2*> 4 13107 setposition(z_rf_in,0,0); 4 13108 write(z_rf_out,"nl",1,tlgr.laf,"cr",1); 4 13109 disable setposition(z_rf_out,0,0); 4 13110 rc:= 0; 4 13111 4 13111 <* afvent svar*> 4 13112 repeat 4 13113 <*V*> svar_status:= afvent_radioinput(z_rf_in,answ,true); 4 13114 if svar_status=6 then 4 13115 begin 5 13116 svar_status:= -3; 5 13117 goto radio_ud_check; 5 13118 end; 4 13119 pos:= 1; 4 13120 while læstegn(answ,pos,i)<>0 do ; 4 13121 pos:= pos-2; 4 13122 if pos > 0 then 4 13123 begin 5 13124 if pos<3 then 5 13125 svar_status:= -2 <*format error*> 5 13126 else 5 13127 begin 6 13128 if læstegn(answ,3,tegn)<>'@' then 6 13129 svar_status:= tegn - '@' 6 13130 else 6 13131 begin 7 13132 pos:= 1; 7 13133 læstegn(answ,pos,tegn); 7 13134 if tegn<>opgave then 7 13135 svar_status:= -4 <*gal type*> 7 13136 else 7 13137 if læstegn(answ,pos,tegn)<>' ' then 7 13138 svar_status:= -tegn <*fejl*> 7 13139 else 7 13140 svar_status:= læstegn(answ,pos,tegn)-'@'; 7 13141 end; 6 13142 end; 5 13143 end 4 13144 else 4 13145 svar_status:= -1; 4 13146 \f 4 13146 message procedure radio_ud side 5 - 881107/cl; 4 13147 4 13147 radio_ud_check: 4 13148 rc:= rc+1; 4 13149 if -3<=svar_status and svar_status< -1 then 4 13150 disable begin 5 13151 write(z_rf_out,<:<'nl'>Z@@MJ<'cr'>:>); 5 13152 setposition(z_rf_out,0,0); 5 13153 <*+2*> if (testbit36 or testbit39) and overvåget then 5 13154 begin 6 13155 write(zrl,<<zd dd dd.dd >,now,<:rf-tlgr: Z@@MJ:>); 6 13156 outchar(zrl,'nl'); 6 13157 end; 5 13158 <*-2*> 5 13159 end 4 13160 else 4 13161 if svar_status=6 or svar_status=(-4) or svar_status=(-1) then 4 13162 disable begin 5 13163 write(z_rf_out,"nl",1,tlgr.laf,"cr",1); 5 13164 setposition(z_rf_out,0,0); 5 13165 <*+2*> if (testbit36 or testbit39) and overvåget then 5 13166 begin 6 13167 write(zrl,<<zd dd dd.dd >,now,<:rf-tlgr: :>, 6 13168 tlgr.laf,<: (repeat):>); outchar(zrl,'nl'); 6 13169 end; 5 13170 <*-2*> 5 13171 end 4 13172 else 4 13173 if svar_status=0 and opref<>0 then 4 13174 d.opref.resultat:= 0 4 13175 else 4 13176 if opref<>0 then 4 13177 d.opref.resultat:= 31; 4 13178 until svar_status=0 or rc>3; 4 13179 end; 3 13180 if opref<>0 then 3 13181 begin 4 13182 if svar_status<>0 and rc>3 then 4 13183 d.opref.resultat:= 53; <* annulleret *> 4 13184 signalch(d.opref.retur,opref,d.opref.optype); 4 13185 opref:= 0; 4 13186 end; 3 13187 until false; 3 13188 3 13188 radio_ud_trap: 3 13189 3 13189 disable skriv_radio_ud(zbillede,1); 3 13190 3 13190 end radio_ud; 2 13191 \f 2 13191 message procedure radio_medd_opkald side 1 - 810610/hko; 2 13192 2 13192 procedure radio_medd_opkald; 2 13193 begin 3 13194 integer array field ref,op_ref; 3 13195 integer i; 3 13196 3 13196 procedure skriv_radio_medd_opkald(z,omfang); 3 13197 value omfang; 3 13198 zone z; 3 13199 integer omfang; 3 13200 begin integer x; 4 13201 disable x:= write(z,"nl",1,<:+++ radio-medd-opkald:>); 4 13202 write(z,"sp",26-x); 4 13203 if omfang > 0 then 4 13204 disable begin 5 13205 trap(slut); 5 13206 write(z,"nl",1, 5 13207 <: ref: :>,ref,"nl",1, 5 13208 <: opref: :>,op_ref,"nl",1, 5 13209 <: i: :>,i,"nl",1, 5 13210 <::>); 5 13211 skriv_coru(z,abs curr_coruno); 5 13212 slut: 5 13213 end;<*disable*> 4 13214 end skriv_radio_medd_opkald; 3 13215 3 13215 trap(radio_medd_opkald_trap); 3 13216 3 13216 stack_claim((if cm_test then 200 else 150) +1); 3 13217 3 13217 <*+2*>if testbit32 and overvåget or testbit28 then 3 13218 disable skriv_radio_medd_opkald(out,0); 3 13219 <*-2*> 3 13220 \f 3 13220 message procedure radio_medd_opkald side 2 - 820301/hko; 3 13221 3 13221 repeat 3 13222 3 13222 <*V*> wait(bs_mobil_opkald); 3 13223 <*V*> wait_ch(cs_radio_medd,op_ref,genoptype or rad_optype,-1); 3 13224 <*V*> wait(bs_opkaldskø_adgang); 3 13225 3 13225 ref:= første_nød_opkald; 3 13226 while ref <> 0 do <* meld ikke meldt nødopkald til io *> 3 13227 begin 4 13228 i:= opkaldskø.ref(2); 4 13229 if i < 0 then 4 13230 begin 5 13231 <* nødopkald ikke meldt *> 5 13232 5 13232 start_operation(op_ref,403,cs_radio_medd,45<*nødop.modt.*>); 5 13233 d.op_ref.data(1):= <* vogn_id *> 5 13234 if opkaldskø.ref(3)<>0 then opkaldskø.ref(3) else i extract 22; 5 13235 opkaldskø.ref(2):= i extract 22; 5 13236 d.op_ref.data(2):= opkaldskø.ref(4) shift(-12); <* ttmm *> 5 13237 d.op_ref.data(3):= opkaldskø.ref(5) extract 20; 5 13238 i:= op_ref; 5 13239 <*+2*> if testbit35 and overvåget then 5 13240 disable begin 6 13241 write(out,"nl",1,<:radio nød-medd:>); 6 13242 skriv_op(out,op_ref); 6 13243 ud; 6 13244 end; 5 13245 <*-2*> 5 13246 signal_ch(cs_io,op_ref,gen_optype or rad_optype); 5 13247 <*V*> wait_ch(cs_radio_medd,op_ref,rad_optype,-1); 5 13248 <*+4*> if i <> op_ref then 5 13249 fejlreaktion(11<*fremmed post*>,i,<:radio io/medd:>,0); 5 13250 <*-4*> 5 13251 end;<*nødopkald ikke meldt*> 4 13252 4 13252 ref:= opkaldskø.ref(1) extract 12; 4 13253 end; <* melding til io *> 3 13254 \f 3 13254 message procedure radio_medd_opkald side 3 - 820304/hko; 3 13255 3 13255 start_operation(op_ref,403,cs_radio_medd, 3 13256 40<*opdater opkaldskøbill*>); 3 13257 signal_bin(bs_opkaldskø_adgang); 3 13258 <*+2*> if testbit35 and overvåget then 3 13259 disable begin 4 13260 write(out,"nl",1,<:radio opdater opkaldskø-billede:>); 4 13261 skriv_op(out,op_ref); 4 13262 write(out, <:opkaldsflag: :>,"nl",1); 4 13263 outintbits_ia(out,opkaldsflag,1,op_maske_lgd//2); 4 13264 write(out,"nl",1,<:kanalflag: :>,"nl",1); 4 13265 outintbits_ia(out,kanalflag,1,op_maske_lgd//2); 4 13266 write(out,"nl",1,<:samtaleflag: :>,"nl",1); 4 13267 outintbits_ia(out,samtaleflag,1,op_maske_lgd//2); 4 13268 ud; 4 13269 end; 3 13270 <*-2*> 3 13271 signal_ch(cs_op,op_ref,gen_optype or rad_optype); 3 13272 3 13272 until false; 3 13273 3 13273 radio_medd_opkald_trap: 3 13274 3 13274 disable skriv_radio_medd_opkald(zbillede,1); 3 13275 3 13275 end radio_medd_opkald; 2 13276 \f 2 13276 message procedure radio_adm side 1 - 820301/hko; 2 13277 2 13277 procedure radio_adm(op); 2 13278 value op; 2 13279 integer op; 2 13280 begin 3 13281 integer array field opref, rad_op, iaf; 3 13282 integer nr,i,j,k,res,opgave,tilst,operatør; 3 13283 3 13283 procedure skriv_radio_adm(z,omfang); 3 13284 value omfang; 3 13285 zone z; 3 13286 integer omfang; 3 13287 begin integer i1; 4 13288 disable i1:= write(z,"nl",1,<:+++ radio-adm:>); 4 13289 write(z,"sp",26-i1); 4 13290 if omfang > 0 then 4 13291 disable begin real x; 5 13292 trap(slut); 5 13293 \f 5 13293 message procedure radio_adm side 2- 820301/hko; 5 13294 5 13294 write(z,"nl",1, 5 13295 <: op_ref: :>,op_ref,"nl",1, 5 13296 <: iaf: :>,iaf,"nl",1, 5 13297 <: rad-op: :>,rad_op,"nl",1, 5 13298 <: nr: :>,nr,"nl",1, 5 13299 <: i: :>,i,"nl",1, 5 13300 <: j: :>,j,"nl",1, 5 13301 <: k: :>,k,"nl",1, 5 13302 <: tilst: :>,tilst,"nl",1, 5 13303 <: res: :>,res,"nl",1, 5 13304 <: opgave: :>,opgave,"nl",1, 5 13305 <: operatør: :>,operatør,"nl",1); 5 13306 skriv_coru(z,coru_no(404)); 5 13307 slut: 5 13308 end;<*disable*> 4 13309 end skriv_radio_adm; 3 13310 \f 3 13310 message procedure radio_adm side 3 - 820304/hko; 3 13311 3 13311 rad_op:= op; 3 13312 3 13312 trap(radio_adm_trap); 3 13313 stack_claim((if cm_test then 200 else 150) +50); 3 13314 3 13314 <*+2*>if testbit32 and overvåget or testbit28 then 3 13315 skriv_radio_adm(out,0); 3 13316 <*-2*> 3 13317 3 13317 pass; 3 13318 if -,testbit22 then 3 13319 begin 4 13320 startoperation(rad_op,404,cs_radio_adm,'I' shift 12 + 60); 4 13321 signalch(cs_radio_ud,rad_op,rad_optype); 4 13322 waitch(cs_radio_adm,rad_op,rad_optype,-1); 4 13323 end; 3 13324 repeat 3 13325 waitch(cs_radio_adm,opref,true,-1); 3 13326 <*+2*> 3 13327 if testbit33 and overvåget then 3 13328 disable begin 4 13329 skriv_radio_adm(out,0); 4 13330 write(out,<: operation modtaget på cs:>,<<d>,cs_radio_adm); 4 13331 skriv_op(out,opref); 4 13332 end; 3 13333 <*-2*> 3 13334 3 13334 k:= d.op_ref.opkode extract 12; 3 13335 opgave:= d.opref.opkode shift (-12); 3 13336 nr:=operatør:=d.op_ref.data(1); 3 13337 3 13337 <*+4*> if (d.op_ref.optype and 3 13338 (gen_optype or io_optype or op_optype or vt_optype)) 3 13339 extract 12 = 0 then fejlreaktion(12<*operationstype*>,op_ref, 3 13340 <:radio_adm:>,0); 3 13341 <*-4*> 3 13342 if k = 74 <* RA,I *> then 3 13343 begin 4 13344 startoperation(rad_op,404,cs_radio_adm,'I' shift 12 + 60); 4 13345 signalch(cs_radio_ud,rad_op,rad_optype); 4 13346 waitch(cs_radio_adm,rad_op,rad_optype,-1); 4 13347 d.opref.resultat:= if d.rad_op.resultat=0 then 3 4 13348 else d.rad_op.resultat; 4 13349 signalch(d.opref.retur,opref,d.opref.optype); 4 13350 \f 4 13350 message procedure radio_adm side 4 - 820301/hko; 4 13351 end 3 13352 else 3 13353 3 13353 if k = 1<*IN,O*> or k = 2<*EK,O*> or k = 77<*FO,O*> or 3 13354 k = 5<*FO,L*> or k = 6<*ST *> then 3 13355 begin 4 13356 if k = 5 or k=77 then 4 13357 begin 5 13358 5 13358 <*V*> wait(bs_opkaldskø_adgang); 5 13359 if k=5 then 5 13360 begin 6 13361 disable for iaf:= 0 step 512 until (max_linienr//768*512) do 6 13362 begin 7 13363 i:= læs_fil(1035,iaf//512+1,nr); 7 13364 if i <> 0 then 7 13365 fejlreaktion(5<*læs_fil*>,i,<:liniefordelingstabel:>,0); 7 13366 tofrom(radio_linietabel.iaf,fil(nr), 7 13367 if (((max_linienr+1 - (iaf//2*3))+2)//3*2) > 512 then 512 7 13368 else ((max_linienr+1 - (iaf//2*3))+2)//3*2); 7 13369 end; 6 13370 6 13370 for i:= 1 step 1 until max_antal_mobilopkald do 6 13371 begin 7 13372 iaf:= i*opkaldskø_postlængde; 7 13373 nr:= opkaldskø.iaf(3) shift (-12) extract 10; <*linienr*> 7 13374 if nr>0 then 7 13375 begin 8 13376 læs_tegn(radio_linietabel,nr+1,operatør); 8 13377 if operatør>max_antal_operatører then operatør:= 0; 8 13378 opkaldskø.iaf(4):= opkaldskø.iaf(4) shift(-8) shift 8 + 8 13379 operatør; 8 13380 end; 7 13381 end; 6 13382 end 5 13383 else 5 13384 if k=77 then 5 13385 begin 6 13386 disable i:= læsfil(1034,1,nr); 6 13387 if i<>0 then fejlreaktion(5,i,<:områdefordelingstabel:>,0); 6 13388 tofrom(radio_områdetabel,fil(nr),max_antal_områder*2); 6 13389 for i:= 1 step 1 until max_antal_mobilopkald do 6 13390 begin 7 13391 iaf:= i*opkaldskø_postlængde; 7 13392 nr:= opkaldskø.iaf(5) extract 4; 7 13393 operatør:= radio_områdetabel(nr); 7 13394 if operatør < 0 or max_antal_operatører < operatør then 7 13395 operatør:= 0; 7 13396 if opkaldskø.iaf(4) extract 8=0 and 7 13397 opkaldskø.iaf(3) shift (-12) extract 10 = 0 then 7 13398 opkaldskø.iaf(4):= opkaldskø.iaf(4) shift(-8) shift 8 + 7 13399 operatør; 7 13400 end; 6 13401 end; 5 13402 5 13402 tofrom(opkaldsflag,alle_operatører,op_maske_lgd); 5 13403 signal_bin(bs_opkaldskø_adgang); 5 13404 5 13404 signal_bin(bs_mobil_opkald); 5 13405 5 13405 d.op_ref.resultat:= res:= 3; 5 13406 \f 5 13406 message procedure radio_adm side 5 - 820304/hko; 5 13407 5 13407 end <*k = 5 / k = 77*> 4 13408 else 4 13409 begin <*k =1,2 eller 6 (IN,O - EK,O eller ST) *> 5 13410 res:= 3; 5 13411 for nr:= 1 step 1 until max_antal_kanaler do 5 13412 begin 6 13413 iaf:= (nr-1)*kanal_beskr_længde; 6 13414 if kanal_tab.iaf.kanal_tilstand shift (-16) = 6 13415 op_talevej(operatør) then 6 13416 begin 7 13417 tilst:= kanal_tab.iaf.kanal_tilstand extract 2; 7 13418 if tilst <> 0 then 7 13419 res:= 16; <*skærm optaget*> 7 13420 end; <* kanal_tab(operatør) = operatør*> 6 13421 end; 5 13422 tofrom(opkaldsflag,alle_operatører,op_maske_lgd); 5 13423 sæt_bit_ia(opkaldsflag,operatør,k extract 1); 5 13424 signal_bin(bs_mobil_opkald); 5 13425 d.op_ref.resultat:= res; 5 13426 end;<*k=1,2 eller 6 *> 4 13427 4 13427 <*+2*> if testbit35 and overvåget then 4 13428 disable begin 5 13429 skriv_radio_adm(out,0); 5 13430 write(out,<: sender til :>, 5 13431 if k=5 or k=6 or k=77 or res > 3 then d.op_ref.retur 5 13432 else cs_op); 5 13433 skriv_op(out,op_ref); 5 13434 end; 4 13435 <*-2*> 4 13436 4 13436 if k=5 or k=6 or k=77 or res > 3 then 4 13437 signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype) 4 13438 else 4 13439 begin <*k = (1 eller 2) og res = 3 *> 5 13440 d.op_ref.resultat:=0; 5 13441 signal_ch(cs_op,op_ref,d.op_ref.optype); 5 13442 end; 4 13443 \f 4 13443 message procedure radio_adm side 6 - 816610/hko; 4 13444 4 13444 end <*k=1,2,5 eller 6*> 3 13445 else 3 13446 if k=3 <*IN,R*> or k=4 <*EK,R*> then 3 13447 begin 4 13448 nr:= d.op_ref.data(1); 4 13449 res:= 3; 4 13450 4 13450 if nr<=3 then 4 13451 res:= 51 <* afvist *> 4 13452 else 4 13453 begin 5 13454 5 13454 <* gennemstilling af område *> 5 13455 j:= 1; 5 13456 for i:= 1 step 1 until max_antal_kanaler do 5 13457 begin 6 13458 if kanal_id(i) shift (-5) extract 3 = 3 and 6 13459 radio_id(kanal_id(i) extract 5) = nr then j:= i; 6 13460 end; 5 13461 nr:= j; 5 13462 iaf:= (nr-1)*kanalbeskrlængde; 5 13463 if læsbiti(kanal_tab.iaf.kanal_tilstand,11) == (k=4) then 5 13464 begin 6 13465 startoperation(radop,404,cs_radio_adm,'H' shift 12 + 60); 6 13466 d.rad_op.data(1):= 0; 6 13467 d.rad_op.data(2):= 'G'; <* gennemstil område *> 6 13468 d.rad_op.data(3):= kanal_id(nr) shift (-5) extract 3; 6 13469 d.rad_op.data(4):= kanal_id(nr) extract 5; 6 13470 d.rad_op.data(5):= k extract 1; <* set/slet gennemstilling *> 6 13471 signalch(cs_radio_ud,rad_op,rad_optype); 6 13472 waitch(cs_radio_adm,rad_op,rad_optype,-1); 6 13473 res:= d.rad_op.resultat; 6 13474 if res=0 then res:= 3; 6 13475 sætbiti(kanal_tab.iaf.kanal_tilstand,11,k extract 1); 6 13476 sætbiti(kanal_tab.iaf.kanal_tilstand,10,k extract 1); 6 13477 end; 5 13478 end; 4 13479 d.op_ref.resultat:=res; 4 13480 signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype); 4 13481 tofrom(kanalflag,alle_operatører,op_maske_lgd); 4 13482 signal_bin(bs_mobil_opkald); 4 13483 \f 4 13483 message procedure radio_adm side 7 - 880930/cl; 4 13484 4 13484 4 13484 end <* k=3 eller 4 *> 3 13485 else 3 13486 if k=72<*EK,K*> or k=73<*IN,K*> then 3 13487 begin 4 13488 nr:= d.opref.data(1) extract 22; 4 13489 res:= 3; 4 13490 iaf:= (nr-1)*kanalbeskrlængde; 4 13491 start_operation(radop,404,cs_radio_adm,'H' shift 12 + 60); 4 13492 d.rad_op.data(1):= 0; 4 13493 d.rad_op.data(2):= 'C'; <* kanal inkluder/ekskluder *> 4 13494 d.rad_op.data(3):= kanalid(nr) shift (-5) extract 3; 4 13495 d.rad_op.data(4):= kanalid(nr) extract 5; 4 13496 d.rad_op.data(5):= k extract 1; 4 13497 signalch(cs_radio_ud,radop,rad_optype); 4 13498 waitch(cs_radio_adm,radop,rad_optype,-1); 4 13499 res:= d.radop.resultat; 4 13500 if res=0 then res:= 3; 4 13501 j:= if k=72 then 15 else 0; 4 13502 if res=3 and j<>sæt_hex_ciffer(kanal_tab.iaf,3,j) then 4 13503 begin 5 13504 tofrom(kanalflag,alle_operatører,op_maske_lgd); 5 13505 signalbin(bs_mobilopkald); 5 13506 end; 4 13507 d.opref.resultat:= res; 4 13508 signalch(d.opref.retur,opref,d.opref.optype); 4 13509 end 3 13510 else 3 13511 if k=11 or k=12 or k=19 then <*vt_opd*> 3 13512 begin 4 13513 nr:= d.opref.data(1) extract 8; 4 13514 opgave:= if k=19 then 9 else (k-4); 4 13515 if nr<=3 then 4 13516 res:= 51 <*afvist*> 4 13517 else 4 13518 begin 5 13519 startoperation(radop,404,cs_radio_adm,'H' shift 12 + 60); 5 13520 d.radop.data(1):= 0; 5 13521 d.radop.data(2):= 'L'; 5 13522 d.radop.data(3):= omr_til_trunk(nr) shift (-6); 5 13523 d.radop.data(4):= omr_til_trunk(nr) extract 6; 5 13524 d.radop.data(5):= opgave; 5 13525 d.radop.data(6):= d.opref.data(1) shift (-8) extract 8; 5 13526 d.radop.data(7):= d.opref.data(2); 5 13527 d.radop.data(8):= d.opref.data(3); 5 13528 signalch(cs_radio_ud,radop,rad_optype); 5 13529 <*V*> waitch(cs_radio_adm,radop,rad_optype,-1); 5 13530 res:= d.radop.resultat; 5 13531 if res=0 then res:= 3; 5 13532 end; 4 13533 d.opref.resultat:= res; 4 13534 signalch(d.opref.retur,opref,d.opref.optype); 4 13535 end 3 13536 else 3 13537 3 13537 begin 4 13538 4 13538 d.op_ref.resultat:= 45; <* ikke implementeret *> 4 13539 4 13539 signal_ch(d.op_ref.retur,op_ref,d.op_ref.optype); 4 13540 4 13540 end; 3 13541 3 13541 until false; 3 13542 radio_adm_trap: 3 13543 disable skriv_radio_adm(zbillede,1); 3 13544 end radio_adm; 2 13545 2 13545 \f 2 13545 message vogntabel erklæringer side 1 - 820301/cl; 2 13546 2 13546 integer cs_vt, cs_vt_adgang,cs_vt_logpool,cs_vt_opd,cs_vt_rap, 2 13547 cs_vt_tilst,cs_vt_auto,cs_vt_grp,cs_vt_spring,vt_op, 2 13548 cs_vt_log; 2 13549 integer sidste_bus,sidste_linie_løb,tf_vogntabel, 2 13550 max_antal_i_gruppe,tf_gruppedef,tf_gruppeidenter,tf_springdef, 2 13551 vt_log_slicelgd; 2 13552 integer array bustabel,bustabel1(0:max_antal_busser), 2 13553 linie_løb_tabel(0:max_antal_linie_løb), 2 13554 springtabel(1:max_antal_spring,1:3), 2 13555 gruppetabel(1:max_antal_grupper), 2 13556 gruppeopkald(1:max_antal_gruppeopkald,1:2), <* ident , filref *> 2 13557 vt_logop(1:2), 2 13558 vt_logdisc(1:4), 2 13559 vt_log_tail(1:10); 2 13560 boolean array busindeks(-1:max_antal_linie_løb), 2 13561 bustilstand(-1:max_antal_busser), 2 13562 linie_løb_indeks(-1:max_antal_busser); 2 13563 real array springtid,springstart(1:max_antal_spring); 2 13564 real vt_logstart; 2 13565 integer field v_kode,v_bus,v_ll1,v_ll2; 2 13566 integer array field v_tekst; 2 13567 real field v_tid; 2 13568 2 13568 zone zvtlog(128,1,stderror); 2 13569 2 13569 \f 2 13569 message vogntabel erklæringer side 2 - 851001/cl; 2 13570 2 13570 procedure skriv_vt_variable(zud); 2 13571 zone zud; 2 13572 begin integer i; long array field laf; 3 13573 laf:= 0; 3 13574 write(zud,"nl",1,<:+++++ vogntabel variable::>,"nl",1,<<d>, 3 13575 <:vt-op-længde :>,vt_op_længde,"nl",1, 3 13576 <:cs-vt :>,cs_vt,"nl",1, 3 13577 <:cs-vt-adgang :>,cs_vt_adgang,"nl",1, 3 13578 <:cs-vt-logpool :>,cs_vt_logpool,"nl",1, 3 13579 <:cs-vt-opd :>,cs_vt_opd,"nl",1, 3 13580 <:cs-vt-rap :>,cs_vt_rap,"nl",1, 3 13581 <:cs-vt-tilst :>,cs_vt_tilst,"nl",1, 3 13582 <:cs-vt-auto :>,cs_vt_auto,"nl",1, 3 13583 <:cs-vt-grp :>,cs_vt_grp,"nl",1, 3 13584 <:cs-vt-spring :>,cs_vt_spring,"nl",1, 3 13585 <:cs-vt-log :>,cs_vt_log,"nl",1, 3 13586 <:vt-op :>,vt_op,"nl",1, 3 13587 <:vt-logop(1) :>,vt_logop(1),"nl",1, 3 13588 <:vt-logop(2) :>,vt_logop(2),"nl",1, 3 13589 <:sidste-bus :>,sidste_bus,"nl",1, 3 13590 <:sidste-linie-løb :>,sidste_linie_løb,"nl",1, 3 13591 <:max-antal-i-gruppe :>,max_antal_i_gruppe,"nl",1, 3 13592 <:tf-vogntabel :>,tf_vogntabel,"nl",1, 3 13593 <:tf-gruppedef :>,tf_gruppedef,"nl",1, 3 13594 <:tf-gruppeidenter :>,tf_gruppeidenter,"nl",1, 3 13595 <:tf-springdef :>,tf_springdef,"nl",1, 3 13596 <:vt-logskift :>,vt_logskift,"nl",1, 3 13597 <:vt-logdisc :>,vt_logdisc.laf,"nl",1, 3 13598 <:vt-log-slicelgd :>,vt_log_slicelgd,"nl",1, 3 13599 <:vt-log-aktiv :>, 3 13600 if vt_log_aktiv then <:true:> else <:false:>,"nl",1, 3 13601 <:vt-logstart :>,<<zdddddd.dd>,vt_logstart,"nl",1, 3 13602 <::>); 3 13603 write(zud,"nl",1,<:vt-logtail:<'nl'>:>); 3 13604 laf:= 2; 3 13605 write(zud,"sp",2,<<d>,vt_logtail(1),"sp",1,vt_logtail.laf); 3 13606 for i:= 6 step 1 until 10 do 3 13607 write(zud,"sp",1,<<d>,vt_logtail(i)); 3 13608 write(zud,"nl",1); 3 13609 end; 2 13610 \f 2 13610 message procedure p_vogntabel side 1 - 820301/cl; 2 13611 2 13611 procedure p_vogntabel(z); 2 13612 zone z; 2 13613 begin 3 13614 integer i,b,s,o,t,li,lb,lø,g; 3 13615 write(z,<:<10>***** udskrift af vogntabel *****<10>:>, 3 13616 <:<10>max-antal-busser =:>,max_antal_busser,<: sidste-bus =:>, 3 13617 sidste_bus,<:<10>max-antal-linie-løb =:>,max_antal_linie_løb, 3 13618 <: sidste-linie-løb =:>,sidste_linie_løb,"nl",1); 3 13619 3 13619 for i:= 1 step 1 until sidste_bus do 3 13620 begin 4 13621 b:= bustabel(i) extract 14; 4 13622 g:= bustabel(i) shift (-14); 4 13623 s:= bustabel1(i) shift (-23); 4 13624 o:= bustabel1(i) extract 8; 4 13625 t:= intg(bustilstand(i)); 4 13626 li:= linie_løb_tabel(linie_løb_indeks(i) extract 12); 4 13627 lø:= li extract 7; 4 13628 lb:= li shift (-7) extract 5; 4 13629 lb:= if lb=0 then 32 else lb+64; 4 13630 li:= li shift (-12) extract 10; 4 13631 write(z,if i mod 2 = 1 then <:<10>:> else <: :>, 4 13632 <<zddd>,b,if s=1 then <:B:> else <: :>,"sp",1, 4 13633 if g > 0 then string bpl_navn(g) else <: :>, 4 13634 ";",1,true,4,string område_navn(o), 4 13635 <:(:>,<<-dd>,t,<:) :>," ",if lb=' ' then 1 else 0,<<ddd>, 4 13636 li,false add lb,if lb=' ' then 0 else 1,<:/:>,<<zd>,lø); 4 13637 end; 3 13638 end p_vogntabel; 2 13639 \f 2 13639 message procedure p_gruppetabel side 1 - 810531/cl; 2 13640 2 13640 procedure p_gruppetabel(z); 2 13641 zone z; 2 13642 begin 3 13643 integer i,nr,bogst; 3 13644 boolean spc_gr; 3 13645 write(z,"nl",2,<:***** udskrift af gruppetabel *****:>,"nl",1, 3 13646 <:max-antal-grupper =:>,max_antal_grupper, 3 13647 <: max-antal-i-gruppe =:>,max_antal_i_gruppe, 3 13648 <: max-antal-gruppeopkald =:>,max_antal_gruppeopkald,"nl",2, 3 13649 <:gruppetabel::>); 3 13650 for i:= 1 step 1 until max_antal_grupper do 3 13651 write(z,if i mod 10 = 1 then <:<10>:> else <: :>,<<dd>,i,":",1, 3 13652 if gruppetabel(i) <> 0 then "G" else " ",1,true,2,<<b>, 3 13653 gruppetabel(i) extract 7); 3 13654 write(z,"nl",2,<:gruppeopkald::>); 3 13655 for i:= 1 step 1 until max_antal_gruppeopkald do 3 13656 begin 4 13657 write(z,if i mod 4 = 1 then <:<10>:> else <: :>,<<dd>,i,":",1); 4 13658 if gruppeopkald(i,1) = 0 then 4 13659 write(z,"sp",11) 4 13660 else 4 13661 begin 5 13662 spc_gr:= gruppeopkald(i,1) shift (-21) = 5; 5 13663 if spc_gr then nr:= gruppeopkald(i,1) extract 7 5 13664 else 5 13665 begin 6 13666 nr:= gruppeopkald(i,1) shift (-5) extract 10; 6 13667 bogst:= gruppeopkald(i,1) extract 5 +'@'; 6 13668 if bogst = '@' then bogst:= 'sp'; 6 13669 end; 5 13670 if spc_gr then 5 13671 write(z,<:(G:>,<<d>,true,3,nr) 5 13672 else 5 13673 write(z,"(",1,<<ddd>,nr,false add bogst,1); 5 13674 write(z,",",1,<<dddd>,gruppeopkald(i,2),")",1); 5 13675 end; 4 13676 end; 3 13677 end p_gruppetabel; 2 13678 \f 2 13678 message procedure p_springtabel side 1 - 810519/cl; 2 13679 2 13679 procedure p_springtabel(z); 2 13680 zone z; 2 13681 begin 3 13682 integer li,bo,max,st,nr; 3 13683 long indeks; 3 13684 real t; 3 13685 3 13685 write(z,"nl",2,<:***** springtabel *****:>,"nl",1, 3 13686 <:max-antal-spring =:>,max_antal_spring,"nl",2, 3 13687 <:nr spring-id max status næste-tid:>,"nl",1); 3 13688 for nr:= 1 step 1 until max_antal_spring do 3 13689 begin 4 13690 write(z,<<dd>,nr); 4 13691 <* if springtabel(nr,1)<>0 then *> 4 13692 begin 5 13693 li:= springtabel(nr,1) shift (-5) extract 10; 5 13694 bo:= springtabel(nr,1) extract 5; 5 13695 if bo<>0 then bo:= bo + 'A' - 1; 5 13696 indeks:= extend springtabel(nr,2) shift 24; 5 13697 st:= extend springtabel(nr,3) shift (-12) extract 24; 5 13698 max:= springtabel(nr,3) extract 12; 5 13699 write(z,"sp",(bo=0) extract 1 + 2,<<ddd>,li,false add bo,1,<:.:>); 5 13700 write(z,"sp",4-write(z,string indeks),<< dd>,max,<< -dd>,st); 5 13701 if springtid(nr)<>0.0 then 5 13702 write(z,<< zddddd.dddd>,systime(4,springtid(nr),t)+t/1000000) 5 13703 else 5 13704 write(z,<< d.d >,0.0); 5 13705 if springstart(nr)<>0.0 then 5 13706 write(z,<< zddddd.dddd>,systime(4,springstart(nr),t)+t/1000000) 5 13707 else 5 13708 write(z,<< d.d >,0.0); 5 13709 end 4 13710 <* else 4 13711 write(z,<: --------:>)*>; 4 13712 write(z,"nl",1); 4 13713 end; 3 13714 end p_springtabel; 2 13715 \f 2 13715 message procedure find_busnr side 1 - 820301/cl; 2 13716 2 13716 integer procedure findbusnr(ll_id,busnr,garage,tilst); 2 13717 value ll_id; 2 13718 integer ll_id, busnr, garage, tilst; 2 13719 begin 3 13720 integer i,j; 3 13721 3 13721 j:= binærsøg(sidste_linie_løb, 3 13722 (linie_løb_tabel(i) - ll_id), i); 3 13723 if j<>0 then <* linie/løb findes ikke *> 3 13724 begin 4 13725 find_busnr:= -1; 4 13726 busnr:= 0; 4 13727 garage:= 0; 4 13728 tilst:= 0; 4 13729 end 3 13730 else 3 13731 begin 4 13732 busnr:= bustabel(busindeks(i) extract 12); 4 13733 tilst:= intg(bustilstand(intg(busindeks(i)))); 4 13734 garage:= busnr shift (-14); 4 13735 busnr:= busnr extract 14; 4 13736 find_busnr:= busindeks(i) extract 12; 4 13737 end; 3 13738 end find_busnr; 2 13739 \f 2 13739 message procedure søg_omr_bus side 1 - 881027/cl; 2 13740 2 13740 2 13740 integer procedure søg_omr_bus(bus,ll,gar,omr,sig,tilst); 2 13741 value bus; 2 13742 integer bus,ll,gar,omr,sig,tilst; 2 13743 begin 3 13744 integer i,j,nr,bu,bi,bl; 3 13745 3 13745 j:= binærsøg(sidste_bus,((bustabel(bi) extract 14) - (bus extract 14)),bi); 3 13746 nr:= -1; 3 13747 if j=0 then 3 13748 begin 4 13749 bl:= bu:= bi; 4 13750 while bl>1 and bustabel(bl-1) extract 14 = bus extract 14 do bl:=bl-1; 4 13751 while bu<sidste_bus and 4 13752 bustabel(bu+1) extract 14 = bus extract 14 do bu:= bu+1; 4 13753 4 13753 if bl<>bu then 4 13754 begin 5 13755 <* flere busser med samme tekniske nr. omr skal passe *> 5 13756 nr:= -2; 5 13757 for bi:= bl step 1 until bu do 5 13758 if bustabel1(bi) extract 8 = omr extract 8 then nr:= bi; 5 13759 end 4 13760 else 4 13761 nr:= bi; 4 13762 end; 3 13763 3 13763 if nr<0 then 3 13764 begin 4 13765 <* bus findes ikke *> 4 13766 ll:= gar:= tilst:= sig:= 0; 4 13767 end 3 13768 else 3 13769 begin 4 13770 tilst:= intg(bustilstand(nr)); 4 13771 gar:= bustabel(nr) shift (-14); 4 13772 ll:= linie_løb_tabel( linie_løb_indeks(nr) extract 12 ); 4 13773 if omr=0 then omr:= bustabel1(nr) extract 8; 4 13774 sig:= bustabel1(nr) shift (-23); 4 13775 end; 3 13776 søg_omr_bus:= nr; 3 13777 end; 2 13778 \f 2 13778 message procedure find_linie_løb side 1 - 820301/cl; 2 13779 2 13779 integer procedure find_linie_løb(busnr,linie_løb,garage,tilst); 2 13780 value busnr; 2 13781 integer busnr, linie_løb, garage, tilst; 2 13782 begin 3 13783 integer i,j; 3 13784 3 13784 j:= binærsøg(sidste_bus,((bustabel(i) extract 14) - (busnr extract 14)), i); 3 13785 3 13785 if j<>0 then <* bus findes ikke *> 3 13786 begin 4 13787 find_linie_løb:= -1; 4 13788 linie_løb:= 0; 4 13789 garage:= 0; 4 13790 tilst:= 0; 4 13791 end 3 13792 else 3 13793 begin 4 13794 tilst:= intg(bustilstand(i)); 4 13795 garage:= bustabel(i) shift (-14); 4 13796 linie_løb:= linie_løb_tabel(linie_løb_indeks(i) extract 12); 4 13797 find_linie_løb:= linie_løb_indeks(i) extract 12; 4 13798 end; 3 13799 end find_linie_løb; 2 13800 \f 2 13800 message procedure h_vogntabel side 1 - 810413/cl; 2 13801 2 13801 <* hovedmodulcorutine for vogntabelmodul *> 2 13802 2 13802 procedure h_vogntabel; 2 13803 begin 3 13804 integer array field op; 3 13805 integer dest_sem,k; 3 13806 3 13806 procedure skriv_h_vogntabel(zud,omfang); 3 13807 value omfang; 3 13808 zone zud; 3 13809 integer omfang; 3 13810 begin 4 13811 write(zud,"nl",1,<:+++ hovedmodul vogntabel :>); 4 13812 if omfang<>0 then 4 13813 disable 4 13814 begin 5 13815 skriv_coru(zud,abs curr_coruno); 5 13816 write(zud,"nl",1,<<d>, 5 13817 <:cs-vt :>,cs_vt,"nl",1, 5 13818 <:op :>,op,"nl",1, 5 13819 <:dest-sem :>,dest_sem,"nl",1, 5 13820 <:k :>,k,"nl",1, 5 13821 <::>); 5 13822 end; 4 13823 end; 3 13824 \f 3 13824 message procedure h_vogntabel side 2 - 820301/cl; 3 13825 3 13825 stackclaim(if cm_test then 198 else 146); 3 13826 trap(h_vt_trap); 3 13827 3 13827 <*+2*> 3 13828 <**> disable if testbit47 and overvåget or testbit28 then 3 13829 <**> skriv_h_vogntabel(out,0); 3 13830 <*-2*> 3 13831 3 13831 repeat 3 13832 waitch(cs_vt,op,true,-1); 3 13833 <*+4*> 3 13834 if (d.op.optype and gen_optype) extract 12 = 0 and 3 13835 (d.op.optype and vt_optype) extract 12 = 0 then 3 13836 fejlreaktion(12,op,<:vogntabel:>,0); 3 13837 <*-4*> 3 13838 disable 3 13839 begin 4 13840 4 13840 k:= d.op.opkode extract 12; 4 13841 dest_sem:= 4 13842 if k = 9 then cs_vt_rap else 4 13843 if k = 10 then cs_vt_rap else 4 13844 if k = 11 then cs_vt_opd else 4 13845 if k = 12 then cs_vt_opd else 4 13846 if k = 13 then cs_vt_opd else 4 13847 if k = 14 then cs_vt_tilst else 4 13848 if k = 15 then cs_vt_tilst else 4 13849 if k = 16 then cs_vt_tilst else 4 13850 if k = 17 then cs_vt_tilst else 4 13851 if k = 18 then cs_vt_tilst else 4 13852 if k = 19 then cs_vt_opd else 4 13853 if k = 20 then cs_vt_opd else 4 13854 if k = 21 then cs_vt_auto else 4 13855 if k = 24 then cs_vt_opd else 4 13856 if k = 25 then cs_vt_grp else 4 13857 if k = 26 then cs_vt_grp else 4 13858 if k = 27 then cs_vt_grp else 4 13859 if k = 28 then cs_vt_grp else 4 13860 if k = 30 then cs_vt_spring else 4 13861 if k = 31 then cs_vt_spring else 4 13862 if k = 32 then cs_vt_spring else 4 13863 if k = 33 then cs_vt_spring else 4 13864 if k = 34 then cs_vt_spring else 4 13865 if k = 35 then cs_vt_spring else 4 13866 -1; 4 13867 \f 4 13867 message procedure h_vogntabel side 3 - 810422/cl; 4 13868 4 13868 <*+2*> 4 13869 <**> if testbit41 and overvåget then 4 13870 <**> begin 5 13871 <**> skriv_h_vogntabel(out,0); write(out,<: modtaget operation:>); 5 13872 <**> skriv_op(out,op); 5 13873 <**> end; 4 13874 <*-2*> 4 13875 end; 3 13876 3 13876 if dest_sem = -1 then 3 13877 fejlreaktion(2,k,<:vogntabel:>,0); 3 13878 disable signalch(dest_sem,op,d.op.optype); 3 13879 until false; 3 13880 h_vt_trap: 3 13881 disable skriv_h_vogntabel(zbillede,1); 3 13882 end h_vogntabel; 2 13883 \f 2 13883 message procedure vt_opdater side 1 - 810317/cl; 2 13884 2 13884 procedure vt_opdater(op1); 2 13885 value op1; 2 13886 integer op1; 2 13887 begin 3 13888 integer array field op,radop; 3 13889 integer funk,res,busnr,ll_id,ll1,omr,gar,sig,tilst,bi,li,s,zi, 3 13890 format,ll_id1,ll_id2,inf1,inf2,i,bi1,bi2,li1,li2,pm1, 3 13891 flin,slin,finx,sinx; 3 13892 integer field bn,ll; 3 13893 3 13893 procedure skriv_vt_opd(zud,omfang); 3 13894 value omfang; integer omfang; 3 13895 zone zud; 3 13896 begin 4 13897 write(zud,"nl",1,<:+++ vt_opdater :>); 4 13898 if omfang <> 0 then 4 13899 disable 4 13900 begin 5 13901 skriv_coru(zud,abs curr_coruno); 5 13902 write(zud,"nl",1, 5 13903 <: op: :>,op,"nl",1, 5 13904 <: radop::>,radop,"nl",1, 5 13905 <: funk: :>,funk,"nl",1, 5 13906 <: res: :>,res,"nl",1, 5 13907 <::>); 5 13908 end; 4 13909 end skriv_vt_opd; 3 13910 3 13910 integer procedure opd_omr(fnk,omr,bus,ll); 3 13911 value fnk,omr,bus,ll; 3 13912 integer fnk,omr,bus,ll; 3 13913 begin 4 13914 opd_omr:= 3; 4 13915 <*GØR PROCEDUREN TIL DUMMYPROCEDURE - 4 13916 ændringer skal ikke længere meldes til yderområder *> 4 13917 goto dummy_retur; 4 13918 4 13918 if omr extract 8 > 3 then 4 13919 begin 5 13920 startoperation(radop,501,cs_vt_opd,fnk); 5 13921 d.radop.data(1):= omr; 5 13922 d.radop.data(2):= bus; 5 13923 d.radop.data(3):= ll; 5 13924 signalch(cs_rad,radop,vt_optype); 5 13925 <*V*> waitch(cs_vt_opd,radop,vt_optype,-1); 5 13926 opd_omr:= d.radop.resultat; 5 13927 end 4 13928 else 4 13929 opd_omr:= 0; 4 13930 dummy_retur: 4 13931 end; 3 13932 message procedure vt_opdater side 1a - 920517/cl; 3 13933 3 13933 procedure opd_log(kilde,kode,bus,ll1,ll2); 3 13934 value kilde,kode,bus,ll1,ll2; 3 13935 integer kilde,kode,bus,ll1,ll2; 3 13936 begin 4 13937 integer array field op; 4 13938 4 13938 <*V*> waitch(cs_vt_logpool,op,vt_optype,-1); 4 13939 4 13939 startoperation(op,curr_coruid,cs_vt_logpool,0); 4 13940 systime(1,0.0,d.op.data.v_tid); 4 13941 d.op.data.v_kode:= kode + (if kilde=506 <*vt_auto*> then 0 else 4); 4 13942 d.op.data.v_bus:= bus; 4 13943 d.op.data.v_ll1:= ll1; 4 13944 d.op.data.v_ll2:= ll2; 4 13945 signalch(cs_vt_log,op,vt_optype); 4 13946 end; 3 13947 3 13947 stackclaim((if cm_test then 198 else 146)+125); 3 13948 3 13948 bn:= 4; ll:= 2; 3 13949 radop:= op1; 3 13950 trap(vt_opd_trap); 3 13951 3 13951 <*+2*> 3 13952 <**> disable if testbit47 and overvåget or testbit28 then 3 13953 <**> skriv_vt_opd(out,0); 3 13954 <*-2*> 3 13955 \f 3 13955 message procedure vt_opdater side 2 - 851001/cl; 3 13956 3 13956 vent_op: 3 13957 waitch(cs_vt_opd,op,gen_optype or vt_optype,-1); 3 13958 3 13958 <*+2*> 3 13959 <**> disable 3 13960 <**> if testbit41 and overvåget then 3 13961 <**> begin 4 13962 <**> skriv_vt_opd(out,0); 4 13963 <**> write(out,<: modtaget operation:>); 4 13964 <**> skriv_op(out,op); 4 13965 <**> end; 3 13966 <*-2*> 3 13967 3 13967 <*+4*> 3 13968 <**>if op<>vt_op then 3 13969 <**>begin 4 13970 <**> disable begin 5 13971 <**> fejlreaktion(11,op,<:vt-opdater:>,1); 5 13972 <**> d.op.resultat:= 31; <*systemfejl*> 5 13973 <**> signalch(d.op.retur,op,d.op.optype); 5 13974 <**> end; 4 13975 <**> goto vent_op; 4 13976 <**>end; 3 13977 <*-4*> 3 13978 disable 3 13979 begin integer opk; 4 13980 4 13980 opk:= d.op.opkode extract 12; 4 13981 funk:= if opk=11 then 1 else 4 13982 if opk=12 then 2 else 4 13983 if opk=13 then 3 else 4 13984 if opk=19 then 4 else 4 13985 if opk=20 then 5 else 4 13986 if opk=24 then 6 else 4 13987 0; 4 13988 if funk=0 then fejlreaktion( 2,opk,<:vt_opdater:>,0); 4 13989 end; 3 13990 res:= 0; 3 13991 goto case funk of (indsæt,udtag,omkod,slet,flyt,roker); 3 13992 \f 3 13992 message procedure vt_opdater side 3 - 820301/cl; 3 13993 3 13993 indsæt: 3 13994 begin 4 13995 integer busnr,ll_id,ll1,omr,gar,sig,tilst,bi,li,s,zi; 4 13996 <*+4*> 4 13997 <**> if d.op.data(1) shift (-22) <> 0 then 4 13998 <**> begin 5 13999 <**> res:= 31; fejlreaktion(10,d.op.data(1),<:indsæt busnr:>,1); 5 14000 <**> goto slut_indsæt; 5 14001 <**> end; 4 14002 <*-4*> 4 14003 busnr:= d.op.data(1) extract 14; 4 14004 <*+4*> 4 14005 <**> if d.op.data(2) shift (-22) <> 1 then 4 14006 <**> begin 5 14007 <**> res:= 31; fejlreaktion(10,d.op.data(2),<:indsæt linie/løb:>,1); 5 14008 <**> goto slut_indsæt; 5 14009 <**> end; 4 14010 <*-4*> 4 14011 ll_id:= d.op.data(2); 4 14012 s:= omr:= d.op.data(4) extract 8; 4 14013 bi:= søg_omr_bus(busnr,ll1,gar,omr,sig,tilst); 4 14014 if bi<0 then 4 14015 begin 5 14016 if bi=(-1) then res:=10 <*bus ukendt*> else 5 14017 if s<>0 then res:= 58 <*ulovligt omr*> else res:= 57 <*omr nødv.*>; 5 14018 end 4 14019 else 4 14020 if s<>0 and s<>omr then 4 14021 res:= 58 <* ulovligt område for bus *> 4 14022 else 4 14023 if intg(bustilstand(bi)) <> 0 then 4 14024 res:=(if intg(bustilstand(bi))=(-1) then 18 <* i kø *> 4 14025 else 14 <* optaget *>) 4 14026 else 4 14027 begin 5 14028 if linie_løb_indeks(bi) extract 12 <> 0 then 5 14029 begin <* linie/løb allerede indsat *> 6 14030 res:= 11; 6 14031 d.op.data(3):= linie_løb_tabel(linie_løb_indeks(bi) extract 12); 6 14032 end 5 14033 else 5 14034 begin 6 14035 \f 6 14035 message procedure vt_opdater side 3a - 900108/cl; 6 14036 6 14036 if d.op.kilde//100 <> 4 then 6 14037 res:= opd_omr(11,gar shift 8 + 6 14038 bustabel1(bi) extract 8,busnr,ll_id); 6 14039 if res>3 then goto slut_indsæt; 6 14040 s:= binærsøg(sidste_linie_løb,linie_løb_tabel(li) - ll_id,li); 6 14041 if s=0 then <* linie/løb findes allerede *> 6 14042 begin 7 14043 sig:= busindeks(li) extract 12; 7 14044 d.op.data(3):= bustabel(sig); 7 14045 linie_løb_indeks(sig):= false; 7 14046 disable modiffil(tf_vogntabel,sig,zi); 7 14047 fil(zi).ll:= 0; 7 14048 fil(zi).bn:= bustabel(sig) extract 14 add 7 14049 (bustabel1(sig) extract 8 shift 14); 7 14050 opd_log(d.op.kilde,2,bustabel(sig),ll_id,0); 7 14051 7 14051 linie_løb_indeks(bi):= false add li; 7 14052 busindeks(li):= false add bi; 7 14053 disable modiffil(tf_vogntabel,bi,zi); 7 14054 fil(zi).ll:= ll_id; 7 14055 fil(zi).bn:= bustabel(bi) extract 14 add 7 14056 (bustabel1(bi) extract 8 shift 14); 7 14057 opd_log(d.op.kilde,1,busnr,0,ll_id); 7 14058 res:= 3; 7 14059 end 6 14060 else 6 14061 begin 7 14062 \f 7 14062 message procedure vt_opdater side 4 - 810527/cl; 7 14063 7 14063 if s<0 then li:= li +1; 7 14064 if sidste_linie_løb=max_antal_linie_løb then 7 14065 begin 8 14066 fejlreaktion(10,max_antal_linie_løb,<:for mange linie/løb:>,1); 8 14067 res:= 31; 8 14068 end 7 14069 else 7 14070 begin 8 14071 for i:= sidste_linie_løb step -1 until li do 8 14072 begin 9 14073 linie_løb_tabel(i+1):=linie_løb_tabel(i); 9 14074 linie_løb_indeks(bus_indeks(i) extract 12):=false add (i+1); 9 14075 bus_indeks(i+1):=bus_indeks(i); 9 14076 end; 8 14077 sidste_linie_løb:= sidste_linie_løb +1; 8 14078 linie_løb_tabel(li):= ll_id; 8 14079 linie_løb_indeks(bi):= false add li; 8 14080 busindeks(li):= false add bi; 8 14081 disable s:= modiffil(tf_vogntabel,bi,zi); 8 14082 if s<>0 then fejlreaktion(7,s,<:vt_indsæt:>,0); 8 14083 fil(zi).bn:= busnr extract 14 add 8 14084 (bustabel1(bi) extract 8 shift 14); 8 14085 fil(zi).ll:= ll_id; 8 14086 opd_log(d.op.kilde,1,busnr,0,ll_id); 8 14087 res:= 3; <* ok *> 8 14088 end; 7 14089 end; 6 14090 end; 5 14091 end; 4 14092 slut_indsæt: 4 14093 d.op.resultat:= res; 4 14094 end; 3 14095 goto returner; 3 14096 \f 3 14096 message procedure vt_opdater side 5 - 820301/cl; 3 14097 3 14097 udtag: 3 14098 begin 4 14099 integer busnr,ll_id,omr,gar,sig,bi,li,s,format,tilst,zi; 4 14100 4 14100 busnr:= ll_id:= 0; 4 14101 omr:= s:= d.op.data(2) extract 8; 4 14102 format:= d.op.data(1) shift (-22); 4 14103 if format=0 then <*busnr*> 4 14104 begin 5 14105 busnr:= d.op.data(1) extract 14; 5 14106 bi:= søg_omr_bus(busnr,ll_id,gar,omr,sig,tilst); 5 14107 if bi<0 then 5 14108 begin 6 14109 if bi=-1 then res:= 10 else 6 14110 if s<>0 then res:= 58 else res:= 57; 6 14111 goto slut_udtag; 6 14112 end; 5 14113 if bi>0 and s<>0 and s<>omr then 5 14114 begin 6 14115 res:= 58; goto slut_udtag; 6 14116 end; 5 14117 li:= linie_løb_indeks(bi) extract 12; 5 14118 busnr:= bustabel(bi); 5 14119 if li=0 or linie_løb_tabel(li)=0 then 5 14120 begin <* bus ej indsat *> 6 14121 res:= 13; 6 14122 goto slut_udtag; 6 14123 end; 5 14124 ll_id:= linie_løb_tabel(li); 5 14125 end 4 14126 else 4 14127 if format=1 then <* linie_løb *> 4 14128 begin 5 14129 ll_id:= d.op.data(1); 5 14130 s:= binærsøg(sidste_linie_løb,linie_løb_tabel(li)-ll_id,li); 5 14131 if s<>0 then 5 14132 begin <* linie/løb findes ikke *> 6 14133 res:= 9; 6 14134 goto slut_udtag; 6 14135 end; 5 14136 bi:= busindeks(li) extract 12; 5 14137 busnr:= bustabel(bi); 5 14138 end 4 14139 else <* ulovlig identifikation *> 4 14140 begin 5 14141 res:= 31; 5 14142 fejlreaktion(10,d.op.data(1),<:udtag ident:>,1); 5 14143 goto slut_udtag; 5 14144 end; 4 14145 \f 4 14145 message procedure vt_opdater side 6 - 820301/cl; 4 14146 4 14146 tilst:= intg(bustilstand(bi)); 4 14147 if tilst<>0 then 4 14148 begin 5 14149 res:= if tilst = -1 then 18<*i kø*> else 14<*optaget*>; 5 14150 goto slut_udtag; 5 14151 end; 4 14152 if d.op.kilde//100 <> 4 then 4 14153 res:= opd_omr(12, bustabel(bi) shift (-14) extract 8 shift 8 + 4 14154 bustabel1(bi) extract 8,bustabel(bi) extract 14,0); 4 14155 if res>3 then goto slut_udtag; 4 14156 linie_løb_indeks(bi):= false; 4 14157 for i:= li step 1 until sidste_linie_løb -1 do 4 14158 begin 5 14159 linie_løb_tabel(i):= linie_løb_tabel(i+1); 5 14160 linie_løb_indeks(bus_indeks(i+1) extract 12):= false add i; 5 14161 bus_indeks(i):= bus_indeks(i+1); 5 14162 end; 4 14163 linie_løb_tabel(sidste_linie_løb):= 0; 4 14164 bus_indeks(sidste_linie_løb):= false; 4 14165 sidste_linie_løb:= sidste_linie_løb -1; 4 14166 disable s:= modif_fil(tf_vogntabel,bi,zi); 4 14167 if s<>0 then fejlreaktion(7,s,<:vt_udtag:>,0); 4 14168 fil(zi).ll:= 0; 4 14169 fil(zi).bn:= busnr add (bustabel1(bi) extract 8 shift 14); 4 14170 opd_log(d.op.kilde,2,busnr,ll_id,0); 4 14171 res:= 3; <* ok *> 4 14172 slut_udtag: 4 14173 d.op.resultat:= res; 4 14174 d.op.data(2):= ll_id; 4 14175 d.op.data(3):= busnr; 4 14176 end; 3 14177 goto returner; 3 14178 \f 3 14178 message procedure vt_opdater side 7 - 851001/cl; 3 14179 3 14179 omkod: 3 14180 flyt: 3 14181 roker: 3 14182 begin 4 14183 integer ll_id1,ll_id2,inf1,inf2,i,s,bi1,bi2,li1,li2,tilst,zi,pm1; 4 14184 4 14184 inf1:= inf2:= 0; 4 14185 ll_id1:= d.op.data(1); 4 14186 ll_id2:= d.op.data(2); 4 14187 if ll_id1=ll_id2 then 4 14188 begin 5 14189 res:= 24; inf1:= ll_id2; 5 14190 goto slut_flyt; 5 14191 end; 4 14192 <*+4*> 4 14193 <**> for i:= 1,2 do 4 14194 <**> if d.op.data(i) shift (-22) <> 1 then 4 14195 <**> begin 5 14196 <**> res:= 31; 5 14197 <**> fejlreaktion(10,d.op.data(i),case i of ( 5 14198 <**> <:omkod/flyt/roker ident1:>,<:omkod/flyt/roker ident2:>),1); 5 14199 <**> goto slut_flyt; 5 14200 <**> end; 4 14201 <*-4*> 4 14202 4 14202 s:= binærsøg(sidste_linie_løb,linie_løb_tabel(li1) - ll_id1,li1); 4 14203 if s<>0 and funk=6 <* roker *> then 4 14204 begin 5 14205 i:= ll_id1; ll_id1:= ll_id2; ll_id2:= i; 5 14206 s:= binærsøg(sidste_linie_løb,linie_løb_tabel(li1) - ll_id1,li1); 5 14207 end; 4 14208 if s<>0 then 4 14209 begin 5 14210 res:= 9; <* ukendt linie/løb *> 5 14211 goto slut_flyt; 5 14212 end; 4 14213 bi1:= busindeks(li1) extract 12; 4 14214 inf1:= bustabel(bi1); 4 14215 tilst:= intg(bustilstand(bi1)); 4 14216 if tilst<>0 then <* bus ikke fri *> 4 14217 begin 5 14218 res:= if tilst=-1 then 18 <* i kø *> else 14 <*optaget*>; 5 14219 goto slut_flyt; 5 14220 end; 4 14221 \f 4 14221 message procedure vt_opdater side 7a- 851001/cl; 4 14222 if d.op.kilde//100 <> 4 then 4 14223 4 14223 res:= opd_omr(11, bustabel(bi1) shift (-14) extract 8 shift 8 + 4 14224 bustabel1(bi1) extract 8, inf1 extract 14, ll_id2); 4 14225 if res>3 then goto slut_flyt; 4 14226 4 14226 s:= binærsøg(sidste_linie_løb,linie_løb_tabel(li2) - ll_id2,li2); 4 14227 if s=0 then 4 14228 begin <* ll_id2 er indkodet *> 5 14229 bi2:= busindeks(li2) extract 12; 5 14230 inf2:= bustabel(bi2); 5 14231 tilst:= intg(bustilstand(bi2)); 5 14232 if funk=3 then res:= 12 <* ulovlig ved omkod *> else 5 14233 if tilst=-1 then res:= 18 else if tilst<>0 then res:= 14; 5 14234 if res>3 then 5 14235 begin 6 14236 inf1:= inf2; inf2:= 0; 6 14237 goto slut_flyt; 6 14238 end; 5 14239 5 14239 if d.op.kilde//100 <> 4 then 5 14240 res:= opd_omr(11, bustabel(bi2) shift (-14) extract 8 shift 8 + 5 14241 bustabel1(bi2) extract 8, inf2 extract 14, ll_id1); 5 14242 if res>3 then goto slut_flyt; 5 14243 5 14243 <* flyt bus *> 5 14244 if funk=6 then 5 14245 linie_løb_indeks(bi2):= false add li1 5 14246 else 5 14247 linie_løb_indeks(bi2):= false; 5 14248 linie_løb_indeks(bi1):= false add li2; 5 14249 if funk=6 then 5 14250 busindeks(li1):= false add bi2 5 14251 else 5 14252 busindeks(li1):= false; 5 14253 busindeks(li2):= false add bi1; 5 14254 5 14254 if funk<>6 then 5 14255 begin 6 14256 <* fjern ll_id1 *> 6 14257 for i:= li1 step 1 until sidste_linie_løb - 1 do 6 14258 begin 7 14259 linie_løb_tabel(i):= linie_løb_tabel(i+1); 7 14260 linie_løb_indeks(intg(busindeks(i+1))):= false add i; 7 14261 busindeks(i):= busindeks(i+1); 7 14262 end; 6 14263 linie_løb_tabel(sidste_linie_løb):= 0; 6 14264 bus_indeks(sidste_linie_løb):= false; 6 14265 sidste_linie_løb:= sidste_linie_løb-1; 6 14266 end; 5 14267 5 14267 <* opdater vogntabelfil *> 5 14268 disable s:= modiffil(tf_vogntabel,bi2,zi); 5 14269 if s<>0 then fejlreaktion(7,s,<:vt-omkod/flyt:>,0); 5 14270 fil(zi).ll:= if funk=6 then ll_id1 else 0; 5 14271 fil(zi).bn:= inf2 extract 14 add (bustabel1(bi2) extract 8 shift 14); 5 14272 if funk=6 then 5 14273 opd_log(d.op.kilde,3,bustabel(bi2),ll_id2,ll_id1) 5 14274 else 5 14275 opd_log(d.op.kilde,2,bustabel(bi2),ll_id2,0); 5 14276 disable s:= modiffil(tf_vogntabel,bi1,zi); 5 14277 if s<>0 then fejlreaktion(7,s,<:vt-omkod/flyt:>,0); 5 14278 fil(zi).ll:= ll_id2; 5 14279 fil(zi).bn:= inf1 extract 14 add (bustabel1(bi1) extract 8 shift 14); 5 14280 opd_log(d.op.kilde,3,bustabel(bi1),ll_id1,ll_id2); 5 14281 \f 5 14281 message procedure vt_opdater side 8 - 820301/cl; 5 14282 5 14282 end <* ll_id2 indkodet *> 4 14283 else 4 14284 begin 5 14285 if sign(s)=sign(li2-li1) then li2:=li2-sign(s); 5 14286 <* li2 skal være indeks for sidste linie/løb der skal flyttes i vt *> 5 14287 pm1:= sgn(li2-li1); 5 14288 for i:= li1 step pm1 until li2-pm1 do 5 14289 begin 6 14290 linie_løb_tabel(i):= linie_løb_tabel(i+pm1); 6 14291 busindeks(i):= busindeks(i+pm1); 6 14292 linie_løb_indeks(intg(busindeks(i+pm1))):= false add i; 6 14293 end; 5 14294 linie_løb_tabel(li2):= ll_id2; 5 14295 busindeks(li2):= false add bi1; 5 14296 linie_løb_indeks(bi1):= false add li2; 5 14297 disable s:= modiffil(tf_vogntabel,bi1,zi); 5 14298 if s<>0 then fejlreaktion(7,s,<:vt-omkod/flyt:>,0); 5 14299 fil(zi).ll:= ll_id2; 5 14300 fil(zi).bn:= inf1 extract 14 add (bustabel1(bi1) extract 8 shift 14); 5 14301 opd_log(d.op.kilde,3,bustabel(bi1),ll_id1,ll_id2); 5 14302 end; 4 14303 res:= 3; <*udført*> 4 14304 slut_flyt: 4 14305 d.op.resultat:= res; 4 14306 d.op.data(3):= inf1; 4 14307 if funk=5 then d.op.data(4):= inf2; 4 14308 end; 3 14309 goto returner; 3 14310 \f 3 14310 message procedure vt_opdater side 9 - 851001/cl; 3 14311 3 14311 slet: 3 14312 begin 4 14313 integer flin,slin,finx,sinx,s,li,bi,omr,gar; 4 14314 boolean test24; 4 14315 4 14315 if d.op.data(2)=0 then d.op.data(2):= d.op.data(1); 4 14316 omr:= d.op.data(3); 4 14317 4 14317 if d.op.data(1) > d.op.data(2) then 4 14318 begin 5 14319 res:= 44; <* intervalstørrelse ulovlig *> 5 14320 goto slut_slet; 5 14321 end; 4 14322 4 14322 flin:= (1 shift 22) + (d.op.data(1) extract 21 shift 7); 4 14323 slin:= (1 shift 22) + (d.op.data(2) extract 21 shift 7) + 127; 4 14324 4 14324 s:= binærsøg(sidste_linie_løb, (linie_løb_tabel(finx)-flin), finx); 4 14325 if s<0 then finx:= finx+1; 4 14326 s:= binærsøg(sidste_linie_løb, (linie_løb_tabel(sinx)-slin), sinx); 4 14327 if s>0 then sinx:= sinx-1; 4 14328 4 14328 for li:= finx step 1 until sinx do 4 14329 begin 5 14330 bi:= busindeks(li) extract 12; 5 14331 gar:= bustabel(bi) shift (-14) extract 8; 5 14332 if intg(bustilstand(bi))=0 and 5 14333 (omr = 0 or (omr > 0 and omr = gar) or 5 14334 (omr < 0 and omr extract 8 = bustabel1(bi) extract 8)) then 5 14335 begin 6 14336 opd_log(d.op.kilde,2,bustabel(bi),linie_løb_tabel(li),0); 6 14337 linie_løb_indeks(bi):= busindeks(li):= false; 6 14338 linie_løb_tabel(li):= 0; 6 14339 end; 5 14340 end; 4 14341 \f 4 14341 message procedure vt_opdater side 10 - 850820/cl; 4 14342 4 14342 sinx:= finx-1; 4 14343 for li:= finx step 1 until sidste_linie_løb do 4 14344 begin 5 14345 if linie_løb_tabel(li)<>0 then 5 14346 begin 6 14347 sinx:= sinx+1; 6 14348 if sinx<>li then 6 14349 begin 7 14350 linie_løb_tabel(sinx):= linie_løb_tabel(li); 7 14351 busindeks(sinx):= busindeks(li); 7 14352 linie_løb_indeks(busindeks(sinx) extract 12):= false add sinx; 7 14353 linie_løb_tabel(li):= 0; 7 14354 busindeks(li):= false; 7 14355 end; 6 14356 end; 5 14357 end; 4 14358 sidste_linie_løb:= sinx; 4 14359 4 14359 test24:= testbit24; testbit24:= false; 4 14360 for bi:= 1 step 1 until sidste_bus do 4 14361 disable 4 14362 begin 5 14363 s:= modiffil(tf_vogntabel,bi,finx); 5 14364 if s<>0 then fejlreaktion(7,s,<:vt-slet:>,0); 5 14365 fil(finx).bn:= bustabel(bi) extract 14 add 5 14366 (bustabel1(bi) extract 8 shift 14); 5 14367 fil(finx).ll:= linie_løb_tabel(linie_løb_indeks(bi) extract 12); 5 14368 end; 4 14369 testbit24:= test24; 4 14370 res:= 3; 4 14371 4 14371 slut_slet: 4 14372 d.op.resultat:= res; 4 14373 end; 3 14374 goto returner; 3 14375 \f 3 14375 message procedure vt_opdater side 11 - 810409/cl; 3 14376 3 14376 returner: 3 14377 disable 3 14378 begin 4 14379 4 14379 <*+2*> 4 14380 <**> if testbit40 and overvåget then 4 14381 <**> begin 5 14382 <**> skriv_vt_opd(out,0); 5 14383 <**> write(out,<: vogntabel efter ændring:>); 5 14384 <**> p_vogntabel(out); 5 14385 <**> end; 4 14386 <**> if testbit41 and overvåget then 4 14387 <**> begin 5 14388 <**> skriv_vt_opd(out,0); 5 14389 <**> write(out,<: returner operation:>); 5 14390 <**> skriv_op(out,op); 5 14391 <**> end; 4 14392 <*-2*> 4 14393 4 14393 signalch(d.op.retur,op,d.op.optype); 4 14394 end; 3 14395 goto vent_op; 3 14396 3 14396 vt_opd_trap: 3 14397 disable skriv_vt_opd(zbillede,1); 3 14398 3 14398 end vt_opdater; 2 14399 \f 2 14399 message procedure vt_tilstand side 1 - 810424/cl; 2 14400 2 14400 procedure vt_tilstand(cs_fil,fil_opref); 2 14401 value cs_fil,fil_opref; 2 14402 integer cs_fil,fil_opref; 2 14403 begin 3 14404 integer array field op,filop; 3 14405 integer funk,format,busid,res,bi,tilst,opk,opk_indeks, 3 14406 g_type,gr,antal,ej_res,zi,li,filref; 3 14407 integer array identer(1:max_antal_i_gruppe); 3 14408 3 14408 procedure skriv_vt_tilst(zud,omfang); 3 14409 value omfang; 3 14410 zone zud; 3 14411 integer omfang; 3 14412 begin 4 14413 real array field raf; 4 14414 raf:= 0; 4 14415 write(zud,"nl",1,<:+++ vt_tilstand :>); 4 14416 if omfang <> 0 then 4 14417 begin 5 14418 skriv_coru(zud,abs curr_coruno); 5 14419 write(zud,"nl",1,<<d>, 5 14420 <:cs-fil :>,cs_fil,"nl",1, 5 14421 <:filop :>,filop,"nl",1, 5 14422 <:op :>,op,"nl",1, 5 14423 <:funk :>,funk,"nl",1, 5 14424 <:format :>,format,"nl",1, 5 14425 <:busid :>,busid,"nl",1, 5 14426 <:res :>,res,"nl",1, 5 14427 <:bi :>,bi,"nl",1, 5 14428 <:tilst :>,tilst,"nl",1, 5 14429 <:opk :>,opk,"nl",1, 5 14430 <:opk-indeks :>,opk_indeks,"nl",1, 5 14431 <:g-type :>,g_type,"nl",1, 5 14432 <:gr :>,gr,"nl",1, 5 14433 <:antal :>,antal,"nl",1, 5 14434 <:ej-res :>,ej_res,"nl",1, 5 14435 <:zi :>,zi,"nl",1, 5 14436 <:li :>,li,"nl",1, 5 14437 <::>); 5 14438 write(zud,"nl",1,<:identer:>); 5 14439 skriv_hele(zud,identer.raf,max_antal_i_gruppe*2,2); 5 14440 end; 4 14441 end; 3 14442 3 14442 procedure sorter_gruppe(tab,l,u); 3 14443 value l,u; 3 14444 integer array tab; 3 14445 integer l,u; 3 14446 begin 4 14447 integer array field ii,jj; 4 14448 integer array ww, xx(1:2); 4 14449 4 14449 integer procedure sml(a,b); 4 14450 integer array a,b; 4 14451 begin 5 14452 integer res; 5 14453 5 14453 res:= sign((a(1) shift (-8) extract 4) - (b(1) shift (-8) extract 4)); 5 14454 if res = 0 then 5 14455 res:= sign((b(1) shift (-18)) - (a(1) shift (-18))); 5 14456 if res = 0 then 5 14457 res:= 5 14458 sign((a(1) shift (-12) extract 6) - (b(1) shift (-12) extract 6)); 5 14459 if res = 0 then 5 14460 res:= sign((a(2) extract 14) - (b(2) extract 14)); 5 14461 sml:= res; 5 14462 end; 4 14463 4 14463 ii:= ((l+u)//2 - 1)*4; 4 14464 tofrom(xx,tab.ii,4); 4 14465 ii:= (l-1)*4; jj:= (u-1)*4; 4 14466 repeat 4 14467 while sml(tab.ii,xx) < 0 do ii:= ii+4; 4 14468 while sml(xx,tab.jj) < 0 do jj:= jj-4; 4 14469 if ii <= jj then 4 14470 begin 5 14471 tofrom(ww,tab.ii,4); 5 14472 tofrom(tab.ii,tab.jj,4); 5 14473 tofrom(tab.jj,ww,4); 5 14474 ii:= ii+4; 5 14475 jj:= jj-4; 5 14476 end; 4 14477 until ii>jj; 4 14478 if l < jj//4+1 then sorter_gruppe(tab,l,jj//4+1); 4 14479 if ii//4+1 < u then sorter_gruppe(tab,ii//4+1,u); 4 14480 end; 3 14481 \f 3 14481 message procedure vt_tilstand side 2 - 820301/cl; 3 14482 3 14482 filop:= filopref; 3 14483 stackclaim(if cm_test then 550 else 500); 3 14484 trap(vt_tilst_trap); 3 14485 3 14485 <*+2*> 3 14486 <**> disable if testbit47 and overvåget or testbit28 then 3 14487 <**> skriv_vt_tilst(out,0); 3 14488 <*-2*> 3 14489 3 14489 vent_op: 3 14490 waitch(cs_vt_tilst,op,vt_optype or gen_optype,-1); 3 14491 <*+2*>disable 3 14492 <**> if (testbit41 and overvåget) or 3 14493 (testbit46 and overvåget and 3 14494 (d.op.opkode extract 12 = 16 or d.op.opkode extract 12 = 18)) 3 14495 then 3 14496 <**> begin 4 14497 <**> skriv_vt_tilst(out,0); 4 14498 <**> write(out,<: modtaget operation:>); 4 14499 <**> skriv_op(out,op); 4 14500 <**> end; 3 14501 <*-2*> 3 14502 3 14502 <*+4*> 3 14503 <**> if op <> vt_op then 3 14504 <**> begin 4 14505 <**> disable begin 5 14506 <**> d.op.resultat:= 31; 5 14507 <**> fejlreaktion(11,op,<:vt-tilstand:>,1); 5 14508 <**> end; 4 14509 <**> goto returner; 4 14510 <**> end; 3 14511 <*-4*> 3 14512 3 14512 opk:= d.op.opkode extract 12; 3 14513 funk:= if opk = 14 <*bus i kø*> then 1 else 3 14514 if opk = 15 <*bus res *> then 2 else 3 14515 if opk = 16 <*grp res *> then 4 else 3 14516 if opk = 17 <*bus fri *> then 3 else 3 14517 if opk = 18 <*grp fri *> then 5 else 3 14518 0; 3 14519 if funk = 0 then fejlreaktion(2,opk,<:vt_tilstand:>,0); 3 14520 res:= 0; 3 14521 format:= d.op.data(1) shift (-22); 3 14522 3 14522 goto case funk of(enkelt_bus,enkelt_bus,enkelt_bus,grp_res,grp_fri); 3 14523 \f 3 14523 message procedure vt_tilstand side 3 - 820301/cl; 3 14524 3 14524 enkelt_bus: 3 14525 <* sæt enkelt bus i kø, reserver eller frigiv enkelt bus *> 3 14526 disable 3 14527 begin integer busnr,i,s,tilst,ll,gar,omr,sig; 4 14528 <*+4*> 4 14529 <**>if format <> 0 and format <> 1 then 4 14530 <**>begin 5 14531 <**> res:= 31; 5 14532 <**> fejlreaktion(10,d.op.data(1),<:tilstand ident:>,1); 5 14533 <**> goto slut_enkelt_bus; 5 14534 <**>end; 4 14535 <*-4*> 4 14536 <* find busnr og tilstand *> 4 14537 case format+1 of 4 14538 begin 5 14539 <* 0: budident *> 5 14540 begin 6 14541 busnr:= d.op.data(1) extract 14; 6 14542 s:= omr:= d.op.data(4) extract 8; 6 14543 bi:= søg_omr_bus(busnr,ll,gar,omr,sig,tilst); 6 14544 if bi<0 then 6 14545 begin 7 14546 res:= if bi=(-1) then 10 else (if s<>0 then 58 else 57); 7 14547 goto slut_enkelt_bus; 7 14548 end 6 14549 else 6 14550 begin 7 14551 tilst:= intg(bustilstand(bi)); 7 14552 end; 6 14553 end; 5 14554 5 14554 <* 1: linie_løb_ident *> 5 14555 begin 6 14556 bi:= findbusnr(d.op.data(1),busnr,i,tilst); 6 14557 if bi < 0 then <* ukendt linie_løb *> 6 14558 begin 7 14559 res:= 9; 7 14560 goto slut_enkelt_bus; 7 14561 end; 6 14562 end; 5 14563 end case; 4 14564 \f 4 14564 message procedure vt_tilstand side 4 - 830310/cl; 4 14565 4 14565 if funk < 3 then 4 14566 begin 5 14567 d.op.data(2):= if linie_løb_indeks(bi) extract 12 <> 0 then 5 14568 linie_løb_tabel(linie_løb_indeks(bi) extract 12) 5 14569 else 0; 5 14570 d.op.data(3):= bustabel(bi); 5 14571 d.op.data(4):= bustabel1(bi); 5 14572 end; 4 14573 4 14573 <* check tilstand *> 4 14574 if funk = 3 <*frigiv*> and tilst >= 0 <*fri/optaget_i_gruppe*> then 4 14575 res:= 39 <* bus ikke reserveret *> 4 14576 else 4 14577 if tilst <> 0 and tilst <> (-1) and funk < 3 then 4 14578 res:= 14 <* bus optaget *> 4 14579 else 4 14580 if funk = 1 <* i kø *> and tilst = (-1) then 4 14581 res:= 18 <* i kø *> 4 14582 else 4 14583 res:= 3; <*udført*> 4 14584 4 14584 if res = 3 then 4 14585 bustilstand(bi):= false add (case funk of (-1,-2,0)); 4 14586 4 14586 slut_enkelt_bus: 4 14587 d.op.resultat:= res; 4 14588 end <*disable*>; 3 14589 goto returner; 3 14590 \f 3 14590 message procedure vt_tilstand side 5 - 810424/cl; 3 14591 3 14591 grp_res: <* reserver gruppe *> 3 14592 disable 3 14593 begin 4 14594 4 14594 <*+4*> 4 14595 <**> if format <> 2 then 4 14596 <**> begin 5 14597 <**> res:= 31; 5 14598 <**> fejlreaktion(10,d.op.data(1),<:tilstand ident:>,1); 5 14599 <**> goto slut_grp_res_1; 5 14600 <**> end; 4 14601 <*-4*> 4 14602 4 14602 <* find frit indeks i opkaldstabel *> 4 14603 opk_indeks:= 0; 4 14604 for i:= max_antal_gruppeopkald step -1 until 1 do 4 14605 begin 5 14606 if gruppeopkald(i,1)=0 then opk_indeks:= i <*fri plads*> else 5 14607 if gruppeopkald(i,1)=d.op.data(1) then res:= 15 <*optaget*>; 5 14608 end; 4 14609 if opk_indeks = 0 then res:= 32; <* ingen plads *> 4 14610 if res <> 0 then goto slut_grp_res_1; 4 14611 g_type:= d.op.data(1) shift (-21) extract 1; 4 14612 if g_type = 1 <*special gruppe*> then 4 14613 begin <*check eksistens*> 5 14614 gr:= 0; 5 14615 for i:= 1 step 1 until max_antal_grupper do 5 14616 if gruppetabel(i) = d.op.data(1) then gr:= i; 5 14617 if gr = 0 then <*gruppe ukendt*> 5 14618 begin 6 14619 res:= 8; 6 14620 goto slut_grp_res_1; 6 14621 end; 5 14622 end; 4 14623 4 14623 <* reserver i opkaldstabel *> 4 14624 gruppeopkald(opk_indeks,1):= d.op.data(1); 4 14625 \f 4 14625 message procedure vt_tilstand side 6 - 810428/cl; 4 14626 4 14626 <* tilknyt fil *> 4 14627 start_operation(filop,curr_coruid,cs_fil,101); 4 14628 d.filop.data(1):= 0; <*postantal*> 4 14629 d.filop.data(2):= 256; <*postlængde*> 4 14630 d.filop.data(3):= 1; <*segmentantal*> 4 14631 d.filop.data(4):= 2 shift 10; <*spool fil*> 4 14632 signalch(cs_opret_fil,filop,vt_optype); 4 14633 4 14633 slut_grp_res_1: 4 14634 if res <> 0 then d.op.resultat:= res; 4 14635 end; 3 14636 if res <> 0 then goto returner; 3 14637 3 14637 waitch(cs_fil,filop,vt_optype,-1); 3 14638 3 14638 <* check filsys-resultat *> 3 14639 if d.filop.data(9) <> 0 then 3 14640 fejlreaktion(13,d.filop.data(9),<:gruppe,res:>,0); 3 14641 filref:= d.filop.data(4); 3 14642 \f 3 14642 message procedure vt_tilstand side 7 - 820301/cl; 3 14643 disable if g_type = 0 <*linie-gruppe*> then 3 14644 begin 4 14645 integer s,i,ll_id; 4 14646 integer array field iaf1; 4 14647 4 14647 ll_id:= 1 shift 22 + d.op.data(1) shift 7; 4 14648 iaf1:= 2; 4 14649 s:= binærsøg(sidste_linie_løb, 4 14650 linie_løb_tabel(i) - ll_id, i); 4 14651 if s < 0 then i:= i +1; 4 14652 antal:= ej_res:= 0; 4 14653 skrivfil(filref,1,zi); 4 14654 if i <= sidste_linie_løb then 4 14655 begin 5 14656 while linie_løb_tabel(i) shift (-7) shift 7 = ll_id do 5 14657 begin 6 14658 if (intg(bustilstand(intg(busindeks(i))))<>0) or 6 14659 (bustabel1(intg(busindeks(i))) extract 8 <> 3) then 6 14660 ej_res:= ej_res+1 6 14661 else 6 14662 begin 7 14663 antal:= antal+1; 7 14664 bi:= busindeks(i) extract 12; 7 14665 fil(zi).iaf1(1):= 7 14666 område_id( bustabel1(bi) extract 8, 2) extract 12 shift 12 + 7 14667 (bustabel1(bi) shift (-23) + 1) shift 8 + 1; 7 14668 fil(zi).iaf1(2):= bustabel(bi); 7 14669 iaf1:= iaf1+4; 7 14670 bustilstand(bi):= false add opk_indeks; 7 14671 end; 6 14672 i:= i +1; 6 14673 if i > sidste_linie_løb then goto slut_l_grp; 6 14674 end; 5 14675 end; 4 14676 \f 4 14676 message procedure vt_tilstand side 8 - 820301/cl; 4 14677 4 14677 slut_l_grp: 4 14678 end 3 14679 else 3 14680 begin <*special gruppe*> 4 14681 integer i,s,li,omr,gar,tilst; 4 14682 integer array field iaf1; 4 14683 4 14683 iaf1:= 2; 4 14684 antal:= ej_res:= 0; 4 14685 s:= læsfil(tf_gruppedef,gr,zi); 4 14686 if s <> 0 then fejlreaktion(5,s,<:gruppe,res:>,0); 4 14687 tofrom(identer,fil(zi),max_antal_i_gruppe*2); 4 14688 s:= skrivfil(filref,1,zi); 4 14689 if s<>0 then fejlreaktion(6,s,<:gruppe,res:>,0); 4 14690 i:= 1; 4 14691 while identer(i) <> 0 do 4 14692 begin 5 14693 if identer(i) shift (-22) = 0 then 5 14694 begin <*busident*> 6 14695 omr:= 0; 6 14696 bi:= søg_omr_bus(identer(i),li,gar,omr,s,tilst); 6 14697 if bi<0 then goto næste_ident; 6 14698 li:= linie_løb_indeks(bi) extract 12; 6 14699 end 5 14700 else 5 14701 begin <*linie/løb ident*> 6 14702 s:= binærsøg(sidste_linie_løb, 6 14703 linie_løb_tabel(li) - identer(i), li); 6 14704 if s <> 0 then goto næste_ident; 6 14705 bi:= busindeks(li) extract 12; 6 14706 end; 5 14707 if (intg(bustilstand(bi))<>0) or 5 14708 (bustabel1(bi) extract 8 <> 3) then 5 14709 ej_res:= ej_res+1 5 14710 else 5 14711 begin 6 14712 antal:= antal +1; 6 14713 fil(zi).iaf1(1):= 6 14714 område_id( bustabel1(bi) extract 8, 2) extract 12 shift 12 + 6 14715 (bustabel1(bi) shift (-23) + 1) shift 8 + 1; 6 14716 fil(zi).iaf1(2):= bustabel(bi); 6 14717 iaf1:= iaf1+4; 6 14718 bustilstand(bi):= false add opk_indeks; 6 14719 end; 5 14720 næste_ident: 5 14721 i:= i +1; 5 14722 if i > max_antal_i_gruppe then goto slut_s_grp; 5 14723 end; 4 14724 slut_s_grp: 4 14725 end; 3 14726 \f 3 14726 message procedure vt_tilstand side 9 - 820301/cl; 3 14727 3 14727 if antal > 0 then <*ok*> 3 14728 disable begin 4 14729 integer array field spec,akt; 4 14730 integer a; 4 14731 integer field antal_spec; 4 14732 4 14732 antal_spec:= 2; a:= 0; 4 14733 spec:= 2; akt:= 2; 4 14734 sorter_gruppe(fil(zi).spec,1,antal); 4 14735 fil(zi).antal_spec:= 0; 4 14736 while akt//4 < antal do 4 14737 begin 5 14738 fil(zi).spec(1):= fil(zi).akt(1) shift (-8) shift 8; 5 14739 a:= 0; 5 14740 while fil(zi).akt(1) shift (-8) = fil(zi).spec(1) shift (-8) 5 14741 and a<15 do 5 14742 begin 6 14743 a:= a+1; 6 14744 fil(zi).spec(1+a):= fil(zi).akt(2) extract 14; 6 14745 akt:= akt+4; 6 14746 end; 5 14747 fil(zi).spec(1):= fil(zi).spec(1) + a; 5 14748 fil(zi).antal_spec:= fil(zi).antal_spec+1; 5 14749 spec:= spec + 2*a + 2; 5 14750 end; 4 14751 antal:= fil(zi).antal_spec; 4 14752 gruppeopkald(opk_indeks,2):= filref; 4 14753 d.op.resultat:= 3; 4 14754 d.op.data(2):= antal; 4 14755 d.op.data(3):= filref; 4 14756 d.op.data(4):= ej_res; 4 14757 end 3 14758 else 3 14759 begin 4 14760 disable begin 5 14761 d.filop.opkode:= 104; <*slet fil*> 5 14762 signalch(cs_slet_fil,filop,vt_optype); 5 14763 gruppeopkald(opk_indeks,1):= 0; <*fri*> 5 14764 d.op.resultat:= 54; 5 14765 d.op.data(2):= antal; 5 14766 d.op.data(3):= 0; 5 14767 d.op.data(4):= ej_res; 5 14768 end; 4 14769 waitch(cs_fil,filop,vt_optype,-1); 4 14770 if d.filop.data(9) <> 0 then 4 14771 fejlreaktion(16,d.filop.data(9),<:gruppe,res:>,0); 4 14772 end; 3 14773 goto returner; 3 14774 \f 3 14774 message procedure vt_tilstand side 10 - 820301/cl; 3 14775 3 14775 grp_fri: <* frigiv gruppe *> 3 14776 disable 3 14777 begin integer i,j,s,ll,gar,omr,tilst; 4 14778 integer array field spec; 4 14779 4 14779 <*+4*> 4 14780 <**> if format <> 2 then 4 14781 <**> begin 5 14782 <**> res:= 31; 5 14783 <**> fejlreaktion(10,d.op.data(1),<:tilstand ident:>,1); 5 14784 <**> goto slut_grp_fri; 5 14785 <**> end; 4 14786 <*-4*> 4 14787 4 14787 <* find indeks i opkaldstabel *> 4 14788 opk_indeks:= 0; 4 14789 for i:= 1 step 1 until max_antal_gruppeopkald do 4 14790 if gruppeopkald(i,1) = d.op.data(1) then opk_indeks:= i; 4 14791 if opk_indeks = 0 <*ikke fundet*> then 4 14792 begin 5 14793 res:= 40; <*gruppe ej reserveret*> 5 14794 goto slut_grp_fri; 5 14795 end; 4 14796 filref:= gruppeopkald(opk_indeks,2); 4 14797 start_operation(filop,curr_coruid,cs_fil,104); 4 14798 d.filop.data(4):= filref; 4 14799 hentfildim(d.filop.data); 4 14800 læsfil(filref,1,zi); 4 14801 spec:= 0; 4 14802 antal:= fil(zi).spec(1); 4 14803 spec:= spec+2; 4 14804 for i:= 1 step 1 until antal do 4 14805 begin 5 14806 for j:= 1 step 1 until fil(zi).spec(1) extract 8 do 5 14807 begin 6 14808 busid:= fil(zi).spec(1+j) extract 14; 6 14809 omr:= 0; 6 14810 bi:= søg_omr_bus(busid,ll,gar,omr,s,tilst); 6 14811 if bi>=0 then bustilstand(bi):= false; 6 14812 end; 5 14813 spec:= spec + 2*(fil(zi).spec(1) extract 8) + 2; 5 14814 end; 4 14815 4 14815 slut_grp_fri: 4 14816 d.op.resultat:= res; 4 14817 end; 3 14818 if res <> 0 then goto returner; 3 14819 gruppeopkald(opk_indeks,1):= gruppeopkald(opk_indeks,2):= 0; 3 14820 signalch(cs_slet_fil,filop,vt_optype); 3 14821 \f 3 14821 message procedure vt_tilstand side 11 - 810424/cl; 3 14822 3 14822 waitch(cs_fil,filop,vt_optype,-1); 3 14823 3 14823 if d.filop.data(9) <> 0 then 3 14824 fejlreaktion(16,d.filop.data(9),<:gruppe,fri:>,0); 3 14825 d.op.resultat:= 3; 3 14826 3 14826 returner: 3 14827 disable 3 14828 begin 4 14829 <*+2*> 4 14830 <**> if testbit40 and overvåget then 4 14831 <**> begin 5 14832 <**> skriv_vt_tilst(out,0); 5 14833 <**> write(out,<: vogntabel efter ændring:>); 5 14834 <**> p_vogntabel(out); 5 14835 <**> end; 4 14836 <**> if testbit43 and overvåget and (funk=4 or funk=5) then 4 14837 <**> begin 5 14838 <**> skriv_vt_tilst(out,0); write(out,<: gruppetabel efter ændring:>); 5 14839 <**> p_gruppetabel(out); 5 14840 <**> end; 4 14841 <**> if (testbit41 and overvåget) or 4 14842 <**> (testbit46 and overvåget and (funk=4 or funk=5)) then 4 14843 <**> begin 5 14844 <**> skriv_vt_tilst(out,0); 5 14845 <**> write(out,<: returner operation:>); 5 14846 <**> skriv_op(out,op); 5 14847 <**> end; 4 14848 <*-2*> 4 14849 signalch(d.op.retur,op,d.op.optype); 4 14850 end; 3 14851 goto vent_op; 3 14852 3 14852 vt_tilst_trap: 3 14853 disable skriv_vt_tilst(zbillede,1); 3 14854 3 14854 end vt_tilstand; 2 14855 \f 2 14855 message procedure vt_rapport side 1 - 810428/cl; 2 14856 2 14856 procedure vt_rapport(cs_fil,fil_opref); 2 14857 value cs_fil,fil_opref; 2 14858 integer cs_fil,fil_opref; 2 14859 begin 3 14860 integer array field op,filop; 3 14861 integer funk,filref,antal,id_ant,res; 3 14862 integer field i1,i2; 3 14863 3 14863 procedure skriv_vt_rap(z,omfang); 3 14864 value omfang; 3 14865 zone z; 3 14866 integer omfang; 3 14867 begin 4 14868 write(z,"nl",1,<:+++ vt_rapport :>); 4 14869 if omfang <> 0 then 4 14870 begin 5 14871 skriv_coru(z,abs curr_coruno); 5 14872 write(z,"nl",1,<<d>, 5 14873 <: cs_fil :>,cs_fil,"nl",1, 5 14874 <: filop :>,filop,"nl",1, 5 14875 <: op :>,op,"nl",1, 5 14876 <: funk :>,funk,"nl",1, 5 14877 <: filref :>,filref,"nl",1, 5 14878 <: antal :>,antal,"nl",1, 5 14879 <: id-ant :>,id_ant,"nl",1, 5 14880 <: res :>,res,"nl",1, 5 14881 <::>); 5 14882 5 14882 end; 4 14883 end skriv_vt_rap; 3 14884 3 14884 stackclaim(if cm_test then 198 else 146); 3 14885 filop:= fil_opref; 3 14886 i1:= 2; i2:= 4; 3 14887 trap(vt_rap_trap); 3 14888 3 14888 <*+2*> 3 14889 <**> disable if testbit47 and overvåget or testbit28 then 3 14890 <**> skriv_vt_rap(out,0); 3 14891 <*-2*> 3 14892 \f 3 14892 message procedure vt_rapport side 2 - 810505/cl; 3 14893 3 14893 vent_op: 3 14894 waitch(cs_vt_rap,op,gen_optype or vt_optype,-1); 3 14895 3 14895 <*+2*> 3 14896 <**> disable begin 4 14897 <**> if testbit41 and overvåget then 4 14898 <**> begin 5 14899 <**> skriv_vt_rap(out,0); 5 14900 <**> write(out,<: modtaget operation:>); 5 14901 <**> skriv_op(out,op); 5 14902 <**> ud; 5 14903 <**> end; 4 14904 <**> end;<*disable*> 3 14905 <*-2*> 3 14906 3 14906 disable 3 14907 begin 4 14908 integer opk; 4 14909 4 14909 opk:= d.op.opkode extract 12; 4 14910 funk:= if opk = 9 then 1 else 4 14911 if opk =10 then 2 else 4 14912 0; 4 14913 if funk = 0 then fejlreaktion(2,opk,<:vt_gruppe:>,0); 4 14914 4 14914 <* opret og tilknyt fil *> 4 14915 start_operation(filop,curr_coruid,cs_fil,101); 4 14916 d.filop.data(1):= 0; <*postantal(midlertidigt)*> 4 14917 d.filop.data(2):= 2; <*postlængde*> 4 14918 d.filop.data(3):=10; <*segmenter*> 4 14919 d.filop.data(4):= 2 shift 10; <*spool fil*> 4 14920 signalch(cs_opretfil,filop,vt_optype); 4 14921 end; 3 14922 3 14922 waitch(cs_fil,filop,vt_optype,-1); 3 14923 3 14923 <* check resultat *> 3 14924 if d.filop.data(9) <> 0 then 3 14925 fejlreaktion(13,d.filop.data(9),<:vt-rapport:>,0); 3 14926 filref:= d.filop.data(4); 3 14927 antal:= 0; 3 14928 goto case funk of (l_rapport,b_rapport); 3 14929 \f 3 14929 message procedure vt_rapport side 3 - 850820/cl; 3 14930 3 14930 l_rapport: 3 14931 disable 3 14932 begin 4 14933 integer i,j,s,ll,zi; 4 14934 idant:= 0; 4 14935 for id_ant:= id_ant+1 while d.op.data(id_ant)<>0 and id_ant<5 do 4 14936 <*+4*> 4 14937 <**> if d.op.data(id_ant) shift (-22) <> 2 then 4 14938 <**> begin 5 14939 <**> res:= 31; 5 14940 <**> fejlreaktion(10,d.op.data(id_ant),<:l-rapport ident:>,1); 5 14941 <**> goto l_rap_slut; 5 14942 <**> end; 4 14943 <*-4*> 4 14944 ; 4 14945 4 14945 for i:= 1 step 1 until id_ant do 4 14946 begin 5 14947 ll:= (1 shift 22) + d.op.data(i) extract 15 shift 7; 5 14948 s:= binærsøg(sidste_linie_løb, 5 14949 linie_løb_tabel(j) - ll, j); 5 14950 if s < 0 then j:= j +1; 5 14951 5 14951 if j<= sidste_linie_løb then 5 14952 begin <* skriv identer *> 6 14953 while linie_løb_tabel(j) shift (-7) shift 7 = ll do 6 14954 begin 7 14955 antal:= antal +1; 7 14956 s:= skrivfil(filref,antal,zi); 7 14957 if s <> 0 then fejlreaktion(6,s,<:vt_rapport:>,0); 7 14958 fil(zi).i1:= linie_løb_tabel(j); 7 14959 fil(zi).i2:= bustabel(busindeks(j) extract 12); 7 14960 j:= j +1; 7 14961 if j > sidste_bus then goto linie_slut; 7 14962 end; 6 14963 end; 5 14964 linie_slut: 5 14965 end; 4 14966 res:= 3; 4 14967 l_rap_slut: 4 14968 end <*disable*>; 3 14969 goto returner; 3 14970 \f 3 14970 message procedure vt_rapport side 4 - 820301/cl; 3 14971 3 14971 b_rapport: 3 14972 disable 3 14973 begin 4 14974 integer i,j,s,zi,busnr1,busnr2; 4 14975 <*+4*> 4 14976 <**> for i:= 1,2 do 4 14977 <**> if d.op.data(i) shift (-14) <> 0 then 4 14978 <**> begin 5 14979 <**> res:= 31; 5 14980 <**> fejlreaktion(10,d.op.data(i),<:b-rapport ident:>,1); 5 14981 <**> goto bus_slut; 5 14982 <**> end; 4 14983 <*-4*> 4 14984 4 14984 busnr1:= d.op.data(1) extract 14; 4 14985 busnr2:= if d.op.data(2) = 0 then busnr1 else d.op.data(2) extract 14; 4 14986 if busnr1 = 0 or busnr2 < busnr1 then 4 14987 begin 5 14988 res:= 7; <* fejl i busnr *> 5 14989 goto bus_slut; 5 14990 end; 4 14991 4 14991 s:= binærsøg(sidste_bus,bustabel(j) extract 14 4 14992 - busnr1,j); 4 14993 if s < 0 then j:= j +1; 4 14994 while j>1 and bustabel(j-1) extract 14 >= busnr1 do j:= j-1; 4 14995 if j <= sidste_bus then 4 14996 begin <* skriv identer *> 5 14997 while bustabel(j) extract 14 <= busnr2 do 5 14998 begin 6 14999 i:= linie_løb_indeks(j) extract 12; 6 15000 if i<>0 then 6 15001 begin 7 15002 antal:= antal +1; 7 15003 s:= skriv_fil(filref,antal,zi); 7 15004 if s <> 0 then fejlreaktion(6,s,<:vt-rapport:>,0); 7 15005 fil(zi).i1:= bustabel(j); 7 15006 fil(zi).i2:= linie_løb_tabel(i); 7 15007 end; 6 15008 j:= j +1; 6 15009 if j > sidste_bus then goto bus_slut; 6 15010 end; 5 15011 end; 4 15012 bus_slut: 4 15013 end <*disable*>; 3 15014 res:= 3; <*ok*> 3 15015 \f 3 15015 message procedure vt_rapport side 5 - 810409/cl; 3 15016 3 15016 returner: 3 15017 disable 3 15018 begin 4 15019 d.op.resultat:= res; 4 15020 d.op.data(6):= antal; 4 15021 d.op.data(7):= filref; 4 15022 d.filop.data(1):= antal; 4 15023 d.filop.data(3):= (antal*d.filop.data(2) -1)//256 +1; 4 15024 i:= sæt_fil_dim(d.filop.data); 4 15025 if i <> 0 then fejlreaktion(9,i,<:vt-rapport:>,0); 4 15026 <*+2*> 4 15027 <**> if testbit41 and overvåget then 4 15028 <**> begin 5 15029 <**> skriv_vt_rap(out,0); 5 15030 <**> write(out,<: returner operation:>); 5 15031 <**> skriv_op(out,op); 5 15032 <**> end; 4 15033 <*-2*> 4 15034 signalch(d.op.retur,op,d.op.optype); 4 15035 end; 3 15036 goto vent_op; 3 15037 3 15037 vt_rap_trap: 3 15038 disable skriv_vt_rap(zbillede,1); 3 15039 3 15039 end vt_rapport; 2 15040 \f 2 15040 message procedure vt_gruppe side 1 - 810428/cl; 2 15041 2 15041 procedure vt_gruppe(cs_fil,fil_opref); 2 15042 2 15042 value cs_fil,fil_opref; 2 15043 integer cs_fil,fil_opref; 2 15044 begin 3 15045 integer array field op, fil_op, iaf; 3 15046 integer funk, res, filref, gr, i, antal, zi, s; 3 15047 integer array identer(1:(if max_antal_grupper>max_antal_i_gruppe then 3 15048 max_antal_grupper else max_antal_i_gruppe)); 3 15049 3 15049 procedure skriv_vt_gruppe(zud,omfang); 3 15050 value omfang; 3 15051 integer omfang; 3 15052 zone zud; 3 15053 begin 4 15054 integer øg; 4 15055 4 15055 write(zud,"nl",1,<:+++ vt_gruppe :>); 4 15056 if omfang <> 0 then 4 15057 disable 4 15058 begin 5 15059 skriv_coru(zud,abs curr_coruno); 5 15060 write(zud,"nl",1,<<d>, 5 15061 <: cs_fil :>,cs_fil,"nl",1, 5 15062 <: op :>,op,"nl",1, 5 15063 <: filop :>,filop,"nl",1, 5 15064 <: funk :>,funk,"nl",1, 5 15065 <: res :>,res,"nl",1, 5 15066 <: filref :>,filref,"nl",1, 5 15067 <: gr :>,gr,"nl",1, 5 15068 <: i :>,i,"nl",1, 5 15069 <: antal :>,antal,"nl",1, 5 15070 <: zi :>,zi,"nl",1, 5 15071 <: s :>,s,"nl",1, 5 15072 <::>); 5 15073 raf:= 0; 5 15074 system(3,øg,identer); 5 15075 write(zud,"nl",1,<:identer::>); 5 15076 skriv_hele(zud,identer.raf,øg*2,2); 5 15077 end; 4 15078 end; 3 15079 3 15079 stackclaim(if cm_test then 198 else 146); 3 15080 filop:= fil_opref; 3 15081 trap(vt_grp_trap); 3 15082 iaf:= 0; 3 15083 \f 3 15083 message procedure vt_gruppe side 2 - 810409/cl; 3 15084 3 15084 <*+2*> 3 15085 <**> disable if testbit47 and overvåget or testbit28 then 3 15086 <**> skriv_vt_gruppe(out,0); 3 15087 <*-2*> 3 15088 3 15088 vent_op: 3 15089 waitch(cs_vt_grp,op,gen_optype or vt_optype,-1); 3 15090 <*+2*> 3 15091 <**>disable 3 15092 <**>begin 4 15093 <**> if testbit41 and overvåget then 4 15094 <**> begin 5 15095 <**> skriv_vt_gruppe(out,0); 5 15096 <**> write(out,<: modtaget operation:>); 5 15097 <**> skriv_op(out,op); 5 15098 <**> ud; 5 15099 <**> end; 4 15100 <**>end; 3 15101 <*-2*> 3 15102 3 15102 disable 3 15103 begin 4 15104 integer opk; 4 15105 4 15105 opk:= d.op.opkode extract 12; 4 15106 funk:= if opk=25 then 1 else 4 15107 if opk=26 then 2 else 4 15108 if opk=27 then 3 else 4 15109 if opk=28 then 4 else 4 15110 0; 4 15111 if funk=0 then fejlreaktion(2,opk,<:vt_gruppe:>,0); 4 15112 end; 3 15113 <*+4*> 3 15114 <**> if funk<4 and d.op.data(1) shift (-21) <> 5 then 3 15115 <**> begin 4 15116 <**> disable begin 5 15117 <**> d.op.resultat:= 31; 5 15118 <**> fejlreaktion(10,d.op.data(1),<:gruppe ident:>,1); 5 15119 <**> end; 4 15120 <**> goto returner; 4 15121 <**> end; 3 15122 <*-4*> 3 15123 3 15123 goto case funk of(definer,slet,vis,oversigt); 3 15124 \f 3 15124 message procedure vt_gruppe side 3 - 810505/cl; 3 15125 3 15125 definer: 3 15126 disable 3 15127 begin 4 15128 gr:= 0; res:= 0; 4 15129 for i:= max_antal_grupper step -1 until 1 do 4 15130 begin 5 15131 if gruppetabel(i)=0 then gr:= i <*fri plads*> else 5 15132 if gruppetabel(i)=d.op.data(1) then res:= 34; <*allerede defineret*> 5 15133 end; 4 15134 if gr=0 then res:= 32; <*ingen plads*> 4 15135 end; 3 15136 if res<>0 then goto slut_definer; 3 15137 disable 3 15138 begin <*fri plads fundet*> 4 15139 antal:= d.op.data(2); 4 15140 if antal <=0 or max_antal_i_gruppe<antal then 4 15141 res:= 33 <*fejl i gruppestørrelse*> 4 15142 else 4 15143 begin 5 15144 for i:= 1 step 1 until antal do 5 15145 begin 6 15146 s:= læsfil(d.op.data(3),i,zi); 6 15147 if s<>0 then fejlreaktion(5,s,<:gruppe,def:>,0); 6 15148 identer(i):= fil(zi).iaf(1); 6 15149 end; 5 15150 s:= modif_fil(tf_gruppedef,gr,zi); 5 15151 if s<>0 then fejlreaktion(7,s,<:gruppe,def:>,0); 5 15152 tofrom(fil(zi).iaf,identer,antal*2); 5 15153 for i:= antal+1 step 1 until max_antal_i_gruppe do 5 15154 fil(zi).iaf(i):= 0; 5 15155 gruppetabel(gr):= d.op.data(1); 5 15156 s:= modiffil(tf_gruppeidenter,gr,zi); 5 15157 if s<>0 then fejlreaktion(7,s,<:gruppe,def:>,0); 5 15158 fil(zi).iaf(1):= gruppetabel(gr); 5 15159 res:= 3; 5 15160 end; 4 15161 end; 3 15162 slut_definer: 3 15163 <*slet fil*> 3 15164 start_operation(fil_op,curr_coruid,cs_fil,104); 3 15165 d.filop.data(4):= d.op.data(3); 3 15166 signalch(cs_slet_fil,filop,vt_optype); 3 15167 waitch(cs_fil,filop,vt_optype,-1); 3 15168 if d.filop.data(9)<>0 then fejlreaktion(16,d.filop.data(9),<:gruppe,def:>,0); 3 15169 d.op.resultat:= res; 3 15170 goto returner; 3 15171 \f 3 15171 message procedure vt_gruppe side 4 - 810409/cl; 3 15172 3 15172 slet: 3 15173 disable 3 15174 begin 4 15175 gr:= 0; res:= 0; 4 15176 for i:= 1 step 1 until max_antal_grupper do 4 15177 begin 5 15178 if gruppetabel(i)=d.op.data(1) then gr:= i; 5 15179 end; 4 15180 if gr = 0 then res:= 8 <*gruppe ej defineret*> 4 15181 else 4 15182 begin 5 15183 for i:= 1 step 1 until max_antal_gruppeopkald do 5 15184 if gruppeopkald(i,1)=d.op.data(1) then res:=15; <*gruppe optaget*> 5 15185 if res = 0 then 5 15186 begin 6 15187 gruppetabel(gr):= 0; 6 15188 s:= modif_fil(tf_gruppeidenter,gr,zi); 6 15189 if s<>0 then fejlreaktion(7,s,<:gruppe,slet:>,0); 6 15190 fil(zi).iaf(1):= gruppetabel(gr); 6 15191 res:= 3; 6 15192 end; 5 15193 end; 4 15194 d.op.resultat:= res; 4 15195 end; 3 15196 goto returner; 3 15197 \f 3 15197 message procedure vt_gruppe side 5 - 810505/cl; 3 15198 3 15198 vis: 3 15199 disable 3 15200 begin 4 15201 res:= 0; gr:= 0; antal:= 0; filref:= 0; 4 15202 for i:= 1 step 1 until max_antal_grupper do 4 15203 if gruppetabel(i) = d.op.data(1) then gr:= i; 4 15204 if gr = 0 then res:= 8 4 15205 else 4 15206 begin 5 15207 s:= læsfil(tf_gruppedef,gr,zi); 5 15208 if s<>0 then fejlreaktion(5,s,<:gruppe,vis:>,0); 5 15209 for i:= 1 step 1 until max_antal_i_gruppe do 5 15210 begin 6 15211 identer(i):= fil(zi).iaf(i); 6 15212 if identer(i) <> 0 then antal:= antal +1; 6 15213 end; 5 15214 start_operation(filop,curr_coruid,cs_fil,101); 5 15215 d.filop.data(1):= antal; <*postantal*> 5 15216 d.filop.data(2):= 1; <*postlængde*> 5 15217 d.filop.data(3):= (antal-1)//256 + 1; <*segmenter*> 5 15218 d.filop.data(4):= 2 shift 10; <*spool fil*> 5 15219 d.filop.data(5):= d.filop.data(6):= 5 15220 d.filop.data(7):= d.filop.data(8):= 0; <*navn*> 5 15221 signalch(cs_opret_fil,filop,vt_optype); 5 15222 end; 4 15223 end; 3 15224 if res <> 0 then goto slut_vis; 3 15225 waitch(cs_fil,filop,vt_optype,-1); 3 15226 disable 3 15227 begin 4 15228 if d.filop.data(9) <> 0 then 4 15229 fejlreaktion(13,d.filop.data(9),<:gruppe,vis:>,0); 4 15230 filref:= d.filop.data(4); 4 15231 for i:= 1 step 1 until antal do 4 15232 begin 5 15233 s:= skrivfil(filref,i,zi); 5 15234 if s <> 0 then fejlreaktion(6,s,<:gruppe,vis:>,0); 5 15235 fil(zi).iaf(1):= identer(i); 5 15236 end; 4 15237 res:= 3; 4 15238 end; 3 15239 slut_vis: 3 15240 d.op.resultat:= res; d.op.data(2):= antal; d.op.data(3):= filref; 3 15241 goto returner; 3 15242 \f 3 15242 message procedure vt_gruppe side 6 - 810508/cl; 3 15243 3 15243 oversigt: 3 15244 disable 3 15245 begin 4 15246 res:= 0; antal:= 0; filref:= 0; iaf:= 0; 4 15247 for i:= 1 step 1 until max_antal_grupper do 4 15248 begin 5 15249 if gruppetabel(i) <> 0 then 5 15250 begin 6 15251 antal:= antal +1; 6 15252 identer(antal):= gruppetabel(i); 6 15253 end; 5 15254 end; 4 15255 start_operation(filop,curr_coruid,cs_fil,101); 4 15256 d.filop.data(1):= antal; <*postantal*> 4 15257 d.filop.data(2):= 1; <*postlængde*> 4 15258 d.filop.data(3):= if antal = 0 then 1 else 4 15259 (antal-1)//256 +1; <*segm.antal*> 4 15260 d.filop.data(4):= 2 shift 10; <*spool fil*> 4 15261 d.filop.data(5):= d.filop.data(6):= 4 15262 d.filop.data(7):= d.filop.data(8):= 0; <*navn*> 4 15263 signalch(cs_opretfil,filop,vt_optype); 4 15264 end; 3 15265 waitch(cs_fil,filop,vt_optype,-1); 3 15266 disable 3 15267 begin 4 15268 if d.filop.data(9) <> 0 then 4 15269 fejlreaktion(13,d.filop.data(9),<:grupper,over:>,0); 4 15270 filref:= d.filop.data(4); 4 15271 for i:= 1 step 1 until antal do 4 15272 begin 5 15273 s:= skriv_fil(filref,i,zi); 5 15274 if s <> 0 then fejlreaktion(6,s,<:gruppe,over:>,0); 5 15275 fil(zi).iaf(1):= identer(i); 5 15276 end; 4 15277 d.op.resultat:= 3; <*ok*> 4 15278 d.op.data(1):= antal; 4 15279 d.op.data(2):= filref; 4 15280 end; 3 15281 \f 3 15281 message procedure vt_gruppe side 7 - 810505/cl; 3 15282 3 15282 returner: 3 15283 disable 3 15284 begin 4 15285 <*+2*> 4 15286 <**> if testbit43 and overvåget and (funk=1 or funk=2) then 4 15287 <**> begin 5 15288 <**> skriv_vt_gruppe(out,0); 5 15289 <**> write(out,<: gruppetabel efter ændring:>); 5 15290 <**> p_gruppetabel(out); 5 15291 <**> end; 4 15292 <**> if testbit41 and overvåget then 4 15293 <**> begin 5 15294 <**> skriv_vt_gruppe(out,0); 5 15295 <**> write(out,<: returner operation:>); 5 15296 <**> skriv_op(out,op); 5 15297 <**> end; 4 15298 <*-2*> 4 15299 signalch(d.op.retur,op,d.op.optype); 4 15300 end; 3 15301 goto vent_op; 3 15302 3 15302 vt_grp_trap: 3 15303 disable skriv_vt_gruppe(zbillede,1); 3 15304 3 15304 end vt_gruppe; 2 15305 \f 2 15305 message procedure vt_spring side 1 - 810506/cl; 2 15306 2 15306 procedure vt_spring(cs_spring_retur,spr_opref); 2 15307 value cs_spring_retur,spr_opref; 2 15308 integer cs_spring_retur,spr_opref; 2 15309 begin 3 15310 integer array field komm_op,spr_op,iaf; 3 15311 real nu; 3 15312 integer funk,interval,nr,i,s,id1,id2,res,res_inf,medd_kode,zi; 3 15313 3 15313 procedure skriv_vt_spring(zud,omfang); 3 15314 value omfang; 3 15315 zone zud; 3 15316 integer omfang; 3 15317 begin 4 15318 write(zud,"nl",1,<:+++ vt_spring :>); 4 15319 if omfang <> 0 then 4 15320 begin 5 15321 skriv_coru(zud,abs curr_coruno); 5 15322 write(zud,"nl",1,<<d>, 5 15323 <:cs-spring-retur:>,cs_spring_retur,"nl",1, 5 15324 <:spr-op :>,spr_op,"nl",1, 5 15325 <:komm-op :>,komm_op,"nl",1, 5 15326 <:funk :>,funk,"nl",1, 5 15327 <:interval :>,interval,"nl",1, 5 15328 <:nr :>,nr,"nl",1, 5 15329 <:i :>,i,"nl",1, 5 15330 <:s :>,s,"nl",1, 5 15331 <:id1 :>,id1,"nl",1, 5 15332 <:id2 :>,id2,"nl",1, 5 15333 <:res :>,res,"nl",1, 5 15334 <:res-inf :>,res_inf,"nl",1, 5 15335 <:medd-kode :>,medd_kode,"nl",1, 5 15336 <:zi :>,zi,"nl",1, 5 15337 <:nu :>,<<zddddd.dddd>,nu,"nl",1, 5 15338 <::>); 5 15339 end; 4 15340 end; 3 15341 \f 3 15341 message procedure vt_spring side 2 - 810506/cl; 3 15342 3 15342 procedure vt_operation(aktion,id1,id2,res,res_inf); 3 15343 value aktion,id1,id2; 3 15344 integer aktion,id1,id2,res,res_inf; 3 15345 begin <* aktion: 11=indsæt, 12=udtag, 13=omkod *> 4 15346 integer array field akt_op; 4 15347 4 15347 <* vent på adgang til vogntabel *> 4 15348 waitch(cs_vt_adgang,akt_op,true,-1); 4 15349 4 15349 <* start operation *> 4 15350 disable 4 15351 begin 5 15352 start_operation(akt_op,curr_coruid,cs_spring_retur,aktion); 5 15353 d.akt_op.data(1):= id1; 5 15354 d.akt_op.data(2):= id2; 5 15355 signalch(cs_vt_opd,akt_op,vt_optype); 5 15356 end; 4 15357 4 15357 <* afvent svar *> 4 15358 waitch(cs_spring_retur,akt_op,vt_optype,-1); 4 15359 res:= d.akt_op.resultat; 4 15360 res_inf:= d.akt_op.data(3); 4 15361 <*+2*> 4 15362 <**> disable 4 15363 <**> if testbit45 and overvåget then 4 15364 <**> begin 5 15365 <**> real t; 5 15366 <**> skriv_vt_spring(out,0); 5 15367 <**> write(out,"nl",1,<<zddddd>,systime(4,d.akt_op.tid,t),<:.:>,t); 5 15368 <**> skriv_id(out,springtabel(nr,1),0); 5 15369 <**> write(out,<:.:>,string(extend springtabel(nr,2) shift 24),<:(:>, 5 15370 <**> <<d>,extend springtabel(nr,3) shift (-12) extract 24,<:)::>, 5 15371 <**> if aktion=11 then <:indsæt:> else if aktion=12 then <:udtag:> else 5 15372 <**> if aktion=13 then <:omkod:> else <:***:>,<: - res=:>, 5 15373 <**> d.akt_op.resultat,"sp",2); 5 15374 <**> skriv_id(out,d.akt_op.data(1),8); 5 15375 <**> skriv_id(out,d.akt_op.data(2),8); 5 15376 <**> skriv_id(out,d.akt_op.data(3),8); 5 15377 <**> systime(4,springtid(nr),t); 5 15378 <**> write(out,<: springtid: :>,<<zd.dd>,entier(t/100),"nl",1); 5 15379 <**> end; 4 15380 <*-2*> 4 15381 4 15381 <* åbn adgang til vogntabel *> 4 15382 disable signalch(cs_vt_adgang,akt_op,gen_optype or vt_optype); 4 15383 end vt_operation; 3 15384 \f 3 15384 message procedure vt_spring side 2a - 810506/cl; 3 15385 3 15385 procedure io_meddelelse(medd_no,bus,linie,springno); 3 15386 value medd_no,bus,linie,springno; 3 15387 integer medd_no,bus,linie,springno; 3 15388 begin 4 15389 disable start_operation(spr_op,curr_coruid,cs_spring_retur,36); 4 15390 d.spr_op.data(1):= medd_no; 4 15391 d.spr_op.data(2):= bus; 4 15392 d.spr_op.data(3):= linie; 4 15393 d.spr_op.data(4):= springtabel(springno,1); 4 15394 d.spr_op.data(5):= springtabel(springno,2); 4 15395 disable signalch(cs_io,spr_op,io_optype or gen_optype); 4 15396 waitch(cs_spring_retur,spr_op,io_optype or gen_optype,-1); 4 15397 end; 3 15398 3 15398 procedure returner_op(op,res); 3 15399 value res; 3 15400 integer array field op; 3 15401 integer res; 3 15402 begin 4 15403 <*+2*> 4 15404 <**> disable 4 15405 <**> if testbit41 and overvåget then 4 15406 <**> begin 5 15407 <**> skriv_vt_spring(out,0); write(out,<: returner operation::>); 5 15408 <**> skriv_op(out,op); 5 15409 <**> end; 4 15410 <*-2*> 4 15411 d.op.resultat:= res; 4 15412 signalch(d.op.retur,op,d.op.optype); 4 15413 end; 3 15414 \f 3 15414 message procedure vt_spring side 3 - 810603/cl; 3 15415 3 15415 iaf:= 0; 3 15416 spr_op:= spr_opref; 3 15417 stack_claim((if cm_test then 198 else 146) + 24); 3 15418 3 15418 trap(vt_spring_trap); 3 15419 3 15419 for i:= 1 step 1 until max_antal_spring do 3 15420 begin 4 15421 springtabel(i,1):= springtabel(i,2):= springtabel(i,3):= 0; 4 15422 springtid(i):= springstart(i):= 0.0; 4 15423 end; 3 15424 3 15424 <*+2*> 3 15425 <**> disable 3 15426 <**> if testbit44 and overvåget then 3 15427 <**> begin 4 15428 <**> skriv_vt_spring(out,0); 4 15429 <**> write(out,<: springtabel efter initialisering:>); 4 15430 <**> p_springtabel(out); ud; 4 15431 <**> end; 3 15432 <*-2*> 3 15433 3 15433 <*+2*> 3 15434 <**> disable if testbit47 and overvåget or testbit28 then 3 15435 <**> skriv_vt_spring(out,0); 3 15436 <*-2*> 3 15437 \f 3 15437 message procedure vt_spring side 4 - 810609/cl; 3 15438 3 15438 næste_tid: <* find næste tid *> 3 15439 disable 3 15440 begin 4 15441 interval:= -1; <*vent uendeligt*> 4 15442 systime(1,0.0,nu); 4 15443 for i:= 1 step 1 until max_antal_spring do 4 15444 if springtabel(i,3) < 0 then 4 15445 interval:= 5 4 15446 else 4 15447 if springtid(i) <> 0.0 and 4 15448 ( (springtid(i)-nu) < interval or interval < 0 ) then 4 15449 interval:= (if springtid(i) <= nu then 0 else 4 15450 round(springtid(i) -nu)); 4 15451 if interval=0 then interval:= 1; 4 15452 end; 3 15453 \f 3 15453 message procedure vt_spring side 4a - 810525/cl; 3 15454 3 15454 <* afvent operation eller timeout *> 3 15455 waitch(cs_vt_spring,komm_op,vt_optype or gen_optype,interval); 3 15456 if komm_op <> 0 then goto afkod_operation; 3 15457 3 15457 <* timeout *> 3 15458 systime(1,0.0,nu); 3 15459 nr:= 1; 3 15460 næste_sekv: 3 15461 if nr > max_antal_spring then goto næste_tid; 3 15462 if springtid(nr) > nu and springtabel(nr,3) > 0 or springstart(nr)=0.0 then 3 15463 begin 4 15464 nr:= nr +1; 4 15465 goto næste_sekv; 4 15466 end; 3 15467 disable s:= modif_fil(tf_springdef,nr,zi); 3 15468 if s <> 0 then fejlreaktion(7,s,<:spring:>,0); 3 15469 if springtabel(nr,3) < 0 then 3 15470 begin <* hængende spring *> 4 15471 if springtid(nr) <= nu then 4 15472 begin <* spring ikke udført indenfor angivet interval - annuler *> 5 15473 <* find frit løb *> 5 15474 disable 5 15475 begin 6 15476 id2:= 0; 6 15477 for i:= 1 step 1 until springtabel(nr,3) extract 12 do 6 15478 if fil(zi).iaf(2+i) shift (-22) = 1 then 6 15479 id2:= fil(zi).iaf(1) extract 15 shift 7 6 15480 + fil(zi).iaf(2+i) shift (-12) extract 7 +1 shift 22; 6 15481 end; 5 15482 <* send meddelelse til io *> 5 15483 io_meddelelse(5,0,id2,nr); 5 15484 5 15484 <* annuler spring*> 5 15485 for i:= 1,2,3 do springtabel(nr,i):= 0; 5 15486 springtid(nr):= springstart(nr):= 0.0; 5 15487 end 4 15488 else 4 15489 begin <* forsøg igen *> 5 15490 \f 5 15490 message procedure vt_spring side 5 - 810525/cl; 5 15491 5 15491 i:= abs(extend springtabel(nr,3) shift (-12) extract 24); 5 15492 if i = 2 <* første spring ej udført *> then 5 15493 begin 6 15494 id1:= fil(zi).iaf(1) extract 15 shift 7 6 15495 + fil(zi).iaf(3) shift (-12) extract 7 +1 shift 22; 6 15496 id2:= id1; 6 15497 vt_operation(12<*udtag*>,id1,id2,res,res_inf); 6 15498 end 5 15499 else 5 15500 begin 6 15501 id1:= fil(zi).iaf(1) extract 15 shift 7 6 15502 + fil(zi).iaf(2+i-1) shift (-12) extract 7 +1 shift 22; 6 15503 id2:= id1 shift (-7) shift 7 6 15504 + fil(zi).iaf(2+i-2) shift (-12) extract 7; 6 15505 vt_operation(13<*omkod*>,id1,id2,res,res_inf); 6 15506 end; 5 15507 5 15507 <* check resultat *> 5 15508 medd_kode:= if res = 3 and i = 2 then 7 else 5 15509 if res = 3 and i > 2 then 8 else 5 15510 <* if res = 9 then 1 else 5 15511 if res =12 then 2 else 5 15512 if res =14 then 4 else 5 15513 if res =18 then 3 else *> 5 15514 0; 5 15515 if medd_kode > 0 then 5 15516 io_meddelelse(medd_kode,res_inf,if res=3 or res=12 then 5 15517 id2 else id1,nr); 5 15518 if res = 3 then 5 15519 begin <* spring udført *> 6 15520 disable s:= modiffil(tf_springdef,nr,zi); 6 15521 if s<>0 then fejlreaktion(7,s,<:spring:>,0); 6 15522 springtabel(nr,3):= i shift 12 +springtabel(nr,3) extract 12; 6 15523 fil(zi).iaf(2+i-1):= 1 shift 22 +fil(zi).iaf(2+i-1) extract 22; 6 15524 if i > 2 then fil(zi).iaf(2+i-2):= 6 15525 fil(zi).iaf(2+i-2) extract 22 add (1 shift 23); 6 15526 end; 5 15527 end; 4 15528 end <* hængende spring *> 3 15529 else 3 15530 begin 4 15531 i:= spring_tabel(nr,3) shift (-12); 4 15532 id1:= fil(zi).iaf(1) extract 15 shift 7 4 15533 + fil(zi).iaf(2+i) shift (-12) extract 7 +1 shift 22; 4 15534 id2:= fil(zi).iaf(2+i-1) shift (-12) extract 7 4 15535 + id1 shift (-7) shift 7; 4 15536 vt_operation(13<*omkod*>,id1,id2,res,res_inf); 4 15537 \f 4 15537 message procedure vt_spring side 6 - 820304/cl; 4 15538 4 15538 <* check resultat *> 4 15539 medd_kode:= if res = 3 then 8 else 4 15540 if res = 9 then 1 else 4 15541 if res =12 then 2 else 4 15542 if res =14 then 4 else 4 15543 if res =18 then 3 else 4 15544 if res =60 then 9 else 0; 4 15545 if medd_kode > 0 then 4 15546 io_meddelelse(medd_kode,res_inf,if res=3 or res=12 then id2 else id1,nr); 4 15547 4 15547 <* opdater springtabel *> 4 15548 disable s:= modiffil(tf_springdef,nr,zi); 4 15549 if s<>0 then fejlreaktion(7,s,<:spring:>,0); 4 15550 if fil(zi).iaf(2+i) extract 12 = 0 <*sidste løb*> then 4 15551 begin 5 15552 io_meddelelse(if res=3 then 6 else 5,0, 5 15553 if res=3 then id1 else id2,nr); 5 15554 for i:= 1,2,3 do springtabel(nr,i):= 0; <*annuleret*> 5 15555 springtid(nr):= springstart(nr):= 0.0; 5 15556 end 4 15557 else 4 15558 begin 5 15559 springtid(nr):= springtid(nr) +(fil(zi).iaf(2+i) extract 12)*60.0; 5 15560 if res = 3 then 5 15561 begin 6 15562 fil(zi).iaf(2+i-1):= (1 shift 23) add 6 15563 (fil(zi).iaf(2+i-1) extract 22); 6 15564 fil(zi).iaf(2+i) := (1 shift 22) add 6 15565 (fil(zi).iaf(2+i) extract 22); 6 15566 springtabel(nr,3):=(i+1) shift 12 add (springtabel(nr,3) extract 12); 6 15567 end 5 15568 else 5 15569 springtabel(nr,3):= (-i-1) shift 12 add (springtabel(nr,3) extract 12); 5 15570 end; 4 15571 end; 3 15572 <*+2*> 3 15573 <**> disable 3 15574 <**> if testbit44 and overvåget then 3 15575 <**> begin 4 15576 <**> skriv_vt_spring(out,0); write(out,<: springtabel efter ændring:>); 4 15577 <**> p_springtabel(out); ud; 4 15578 <**> end; 3 15579 <*-2*> 3 15580 3 15580 nr:= nr +1; 3 15581 goto næste_sekv; 3 15582 \f 3 15582 message procedure vt_spring side 7 - 810506/cl; 3 15583 3 15583 afkod_operation: 3 15584 <*+2*> 3 15585 <**> disable 3 15586 <**> if testbit41 and overvåget then 3 15587 <**> begin 4 15588 <**> skriv_vt_spring(out,0); write(out,<: modtaget operation:>); 4 15589 <**> skriv_op(out,komm_op); 4 15590 <**> end; 3 15591 <*-2*> 3 15592 3 15592 disable 3 15593 begin integer opk; 4 15594 4 15594 opk:= d.komm_op.opkode extract 12; 4 15595 funk:= if opk = 30 <*sp,d*> then 5 else 4 15596 if opk = 31 <*sp. *> then 1 else 4 15597 if opk = 32 <*sp,v*> then 4 else 4 15598 if opk = 33 <*sp,o*> then 6 else 4 15599 if opk = 34 <*sp,r*> then 2 else 4 15600 if opk = 35 <*sp,a*> then 3 else 4 15601 0; 4 15602 if funk = 0 then fejlreaktion(2,opk,<:vt_spring:>,0); 4 15603 4 15603 if funk <> 6 <*sp,o*> then 4 15604 begin <* find nr i springtabel *> 5 15605 nr:= 0; 5 15606 for i:= 1 step 1 until max_antal_spring do 5 15607 if springtabel(i,1) = d.komm_op.data(1) and 5 15608 springtabel(i,2) = d.komm_op.data(2) then nr:= i; 5 15609 end; 4 15610 end; 3 15611 if funk = 6 then goto oversigt; 3 15612 if funk = 5 then goto definer; 3 15613 3 15613 if nr = 0 then 3 15614 begin 4 15615 returner_op(komm_op,37<*spring ukendt*>); 4 15616 goto næste_tid; 4 15617 end; 3 15618 3 15618 goto case funk of(start,indsæt,annuler,vis); 3 15619 \f 3 15619 message procedure vt_spring side 8 - 810525/cl; 3 15620 3 15620 start: 3 15621 if springtabel(nr,3) shift (-12) <> 0 then 3 15622 begin returner_op(komm_op,38); goto næste_tid; end; 3 15623 disable 3 15624 begin <* find linie_løb_og_udtag *> 4 15625 s:= modif_fil(tf_springdef,nr,zi); 4 15626 if s <> 0 then fejlreaktion(7,s,<:spring,start:>,0); 4 15627 id1:= fil(zi).iaf(1) extract 15 shift 7 4 15628 + fil(zi).iaf(3) shift (-12) extract 7 +1 shift 22; 4 15629 id2:= 0; 4 15630 end; 3 15631 vt_operation(12,id1,id2,res,res_inf); 3 15632 3 15632 disable <* check resultat *> 3 15633 medd_kode:= if res = 3 <*ok*> then 7 else 3 15634 if res = 9 <*linie/løb ukendt*> then 1 else 3 15635 if res =14 <*optaget*> then 4 else 3 15636 if res =18 <*i kø*> then 3 else 0; 3 15637 returner_op(komm_op,3); 3 15638 if medd_kode = 0 then goto næste_tid; 3 15639 3 15639 <* send spring-meddelelse til io *> 3 15640 io_meddelelse(medd_kode,res_inf,id1,nr); 3 15641 3 15641 <* opdater springtabel *> 3 15642 disable 3 15643 begin 4 15644 s:= modif_fil(tf_springdef,nr,zi); 4 15645 if s <> 0 then fejlreaktion(7,s,<:spring,start:>,0); 4 15646 springtabel(nr,3):= (if res = 3 then 2 else (-2)) shift 12 4 15647 add (springtabel(nr,3) extract 12); 4 15648 systime(1,0.0,nu); 4 15649 springstart(nr):= nu; 4 15650 springtid(nr):= nu +fil(zi).iaf(3) extract 12 *60.0; 4 15651 if res = 3 then fil(zi).iaf(3):= fil(zi).iaf(3) add (1 shift 22); 4 15652 end; 3 15653 <*+2*> 3 15654 <**> disable 3 15655 <**> if testbit44 and overvåget then 3 15656 <**> begin 4 15657 <**> skriv_vt_spring(out,0); write(out,<: springtabel efter ændring:>); 4 15658 <**> p_springtabel(out); ud; 4 15659 <**> end; 3 15660 <*-2*> 3 15661 3 15661 goto næste_tid; 3 15662 \f 3 15662 message procedure vt_spring side 9 - 810506/cl; 3 15663 3 15663 indsæt: 3 15664 if springtabel(nr,3) shift (-12) = 0 then 3 15665 begin <* ikke igangsat *> 4 15666 returner_op(komm_op,41); 4 15667 goto næste_tid; 4 15668 end; 3 15669 <* find frie linie/løb *> 3 15670 disable 3 15671 begin 4 15672 s:= læs_fil(tf_springdef,nr,zi); 4 15673 if s <> 0 then fejlreaktion(5,s,<:spring,reserve:>,0); 4 15674 id2:= 0; 4 15675 for i:= 1 step 1 until springtabel(nr,3) extract 12 do 4 15676 if fil(zi).iaf(2+i) shift (-22) = 1 then 4 15677 id2:= 1 shift 22 +fil(zi).iaf(1) extract 15 shift 7 4 15678 +fil(zi).iaf(2+i) shift (-12) extract 7; 4 15679 id1:= d.komm_op.data(3); 4 15680 end; 3 15681 3 15681 if id2<>0 then 3 15682 vt_operation(11,id1,id2,res,res_inf) 3 15683 else 3 15684 res:= 42; 3 15685 3 15685 disable <* check resultat *> 3 15686 medd_kode:= if res = 3 <*ok*> then 8 else 3 15687 if res =10 <*bus ukendt*> then 0 else 3 15688 if res =11 <*bus allerede indsat*> then 0 else 3 15689 if res =12 <*linie/løb allerede besat*> then 2 else 3 15690 if res =42 <*intet frit linie/løb*> then 5 else 0; 3 15691 if res = 11 or res = 12 then d.komm_op.data(4):= res_inf; 3 15692 returner_op(komm_op,res); 3 15693 if medd_kode = 0 then goto næste_tid; 3 15694 3 15694 <* send springmeddelelse til io *> 3 15695 if res<>42 then io_meddelelse(medd_kode,id1,id2,nr); 3 15696 io_meddelelse(5,0,0,nr); 3 15697 \f 3 15697 message procedure vt_spring side 9a - 810525/cl; 3 15698 3 15698 <* annuler springtabel *> 3 15699 for i:= 1,2,3 do springtabel(nr,i):= 0; 3 15700 springtid(nr):= springstart(nr):= 0.0; 3 15701 <*+2*> 3 15702 <**> disable 3 15703 <**> if testbit44 and overvåget then 3 15704 <**> begin 4 15705 <**> skriv_vt_spring(out,0); write(out,<: springtabel efter ændring:>); 4 15706 <**> p_springtabel(out); ud; 4 15707 <**> end; 3 15708 <*-2*> 3 15709 3 15709 goto næste_tid; 3 15710 \f 3 15710 message procedure vt_spring side 10 - 810525/cl; 3 15711 3 15711 annuler: 3 15712 disable 3 15713 begin <* find evt. frit linie/løb *> 4 15714 s:= læs_fil(tf_springdef,nr,zi); 4 15715 if s <> 0 then fejlreaktion(5,s,<:spring,annuler:>,0); 4 15716 id1:= id2:= 0; 4 15717 for i:= 1 step 1 until springtabel(nr,3) extract 12 do 4 15718 if fil(zi).iaf(2+i) shift (-22) = 1 then 4 15719 id2:= fil(zi).iaf(1) extract 15 shift 7 4 15720 + fil(zi).iaf(2+i) shift (-12) extract 7 +1 shift 22; 4 15721 returner_op(komm_op,3); 4 15722 end; 3 15723 3 15723 <* send springmeddelelse til io *> 3 15724 io_meddelelse(5,id1,id2,nr); 3 15725 3 15725 <* annuler springtabel *> 3 15726 for i:= 1,2,3 do springtabel(nr,i):= 0; 3 15727 springtid(nr):= springstart(nr):= 0.0; 3 15728 <*+2*> 3 15729 <**> disable 3 15730 <**> if testbit44 and overvåget then 3 15731 <**> begin 4 15732 <**> skriv_vt_spring(out,0); write(out,<: springtabel efter ændring:>); 4 15733 <**> p_springtabel(out); ud; 4 15734 <**> end; 3 15735 <*-2*> 3 15736 3 15736 goto næste_tid; 3 15737 3 15737 definer: 3 15738 if nr <> 0 then <* allerede defineret *> 3 15739 begin 4 15740 res:= 36; 4 15741 goto slut_definer; 4 15742 end; 3 15743 3 15743 <* find frit nr *> 3 15744 i:= 0; 3 15745 for i:= i+1 while i<= max_antal_spring and nr = 0 do 3 15746 if springtabel(i,1) = 0 then nr:= i; 3 15747 if nr = 0 then 3 15748 begin 4 15749 res:= 32; <* ingen fri plads *> 4 15750 goto slut_definer; 4 15751 end; 3 15752 \f 3 15752 message procedure vt_spring side 11 - 810525/cl; 3 15753 3 15753 disable 3 15754 begin integer array fdim(1:8),ia(1:32); 4 15755 <* læs sekvens *> 4 15756 fdim(4):= d.komm_op.data(3); 4 15757 s:= hent_fil_dim(fdim); 4 15758 if s <> 0 then fejlreaktion(8,s,<:spring,def:>,0); 4 15759 if fdim(1) > 30 then 4 15760 res:= 35 <* springsekvens for stor *> 4 15761 else 4 15762 begin 5 15763 for i:= 1 step 1 until fdim(1) do 5 15764 begin 6 15765 s:= læs_fil(fdim(4),i,zi); 6 15766 if s <> 0 then fejlreaktion(5,s,<:spring,def:>,0); 6 15767 ia(i):= fil(zi).iaf(1) shift 12; 6 15768 if i>1 then ia(i-1):= ia(i-1) + fil(zi).iaf(1) shift (-12); 6 15769 end; 5 15770 s:= modif_fil(tf_springdef,nr,zi); 5 15771 if s <> 0 then fejlreaktion(7,s,<:spring,def:>,0); 5 15772 fil(zi).iaf(1):= springtabel(nr,1):= d.komm_op.data(1); 5 15773 fil(zi).iaf(2):= springtabel(nr,2):= d.komm_op.data(2); 5 15774 iaf:= 4; 5 15775 tofrom(fil(zi).iaf,ia,60); 5 15776 iaf:= 0; 5 15777 springtabel(nr,3):= fdim(1); 5 15778 springtid(nr):= springstart(nr):= 0.0; 5 15779 res:= 3; 5 15780 end; 4 15781 end; 3 15782 \f 3 15782 message procedure vt_spring side 11a - 81-525/cl; 3 15783 3 15783 slut_definer: 3 15784 3 15784 <* slet fil *> 3 15785 start_operation(spr_op,curr_coruid,cs_spring_retur,104); 3 15786 d.spr_op.data(4):= d.komm_op.data(3); <* filref *> 3 15787 signalch(cs_slet_fil,spr_op,vt_optype); 3 15788 waitch(cs_spring_retur,spr_op,vt_optype,-1); 3 15789 if d.spr_op.data(9) <> 0 then 3 15790 fejlreaktion(16,d.spr_op.data(9),<:spring,def:>,0); 3 15791 returner_op(komm_op,res); 3 15792 <*+2*> 3 15793 <**> disable 3 15794 <**> if testbit44 and overvåget then 3 15795 <**> begin 4 15796 <**> skriv_vt_spring(out,0); write(out,<: springtabel efter ændring:>); 4 15797 <**> p_springtabel(out); ud; 4 15798 <**> end; 3 15799 <*-2*> 3 15800 goto næste_tid; 3 15801 \f 3 15801 message procedure vt_spring side 12 - 810525/cl; 3 15802 3 15802 vis: 3 15803 disable 3 15804 begin 4 15805 <* tilknyt fil *> 4 15806 start_operation(spr_op,curr_coruid,cs_spring_retur,101); 4 15807 d.spr_op.data(1):= (springtabel(nr,3) extract 12)*2; 4 15808 d.spr_op.data(2):= 1; 4 15809 d.spr_op.data(3):= (d.spr_op.data(1) -1)//256 +1; 4 15810 d.spr_op.data(4):= 2 shift 10; <* spoolfil *> 4 15811 signalch(cs_opret_fil,spr_op,vt_optype); 4 15812 end; 3 15813 3 15813 <* afvent svar *> 3 15814 waitch(cs_spring_retur,spr_op,vt_optype,-1); 3 15815 if d.spr_op.data(9) <> 0 then 3 15816 fejlreaktion(13,d.spr_op.data(9),<:spring,vis:>,0); 3 15817 disable 3 15818 begin integer array ia(1:30); 4 15819 s:= læs_fil(tf_springdef,nr,zi); 4 15820 if s <> 0 then fejlreaktion(5,s,<:spring,vis:>,0); 4 15821 iaf:= 4; 4 15822 tofrom(ia,fil(zi).iaf,60); 4 15823 iaf:= 0; 4 15824 for i:= 1 step 1 until d.spr_op.data(1) do 4 15825 begin 5 15826 s:= skriv_fil(d.spr_op.data(4),(i-1)*2+1,zi); 5 15827 if s <> 0 then fejlreaktion(6,s,<:spring,vis:>,0); 5 15828 fil(zi).iaf(1):= if ia(i) shift (-22) = 0 then 5 15829 ia(i) shift (-12) extract 7 5 15830 else -(ia(i) shift (-12) extract 7); 5 15831 s:= skriv_fil(d.spr_op.data(4),2*i,zi); 5 15832 if s <> 0 then fejlreaktion(6,s,<:spring,vis:>,0); 5 15833 fil(zi).iaf(1):= if i < d.spr_op.data(1) then 5 15834 (if ia(i+1) shift (-22) <> 0 then -(ia(i) extract 12) 5 15835 else ia(i) extract 12) 5 15836 else 0; 5 15837 end; 4 15838 d.spr_op.data(1):= d.spr_op.data(1) - 1; 4 15839 sæt_fil_dim(d.spr_op.data); 4 15840 d.komm_op.data(3):= d.spr_op.data(1); 4 15841 d.komm_op.data(4):= d.spr_op.data(4); 4 15842 raf:= data+8; 4 15843 d.komm_op.raf(1):= springstart(nr); 4 15844 returner_op(komm_op,3); 4 15845 end; 3 15846 goto næste_tid; 3 15847 \f 3 15847 message procedure vt_spring side 13 - 810525/cl; 3 15848 3 15848 oversigt: 3 15849 disable 3 15850 begin 4 15851 <* opret fil *> 4 15852 start_operation(spr_op,curr_coruid,cs_spring_retur,101); 4 15853 d.spr_op.data(1):= max_antal_spring; 4 15854 d.spr_op.data(2):= 4; 4 15855 d.spr_op.data(3):= (max_antal_spring -1)//64 +1; 4 15856 d.spr_op.data(4):= 2 shift 10; <* spoolfil *> 4 15857 signalch(cs_opret_fil,spr_op,vt_optype); 4 15858 end; 3 15859 3 15859 <* afvent svar *> 3 15860 waitch(cs_spring_retur,spr_op,vt_optype,-1); 3 15861 if d.spr_op.data(9) <> 0 then 3 15862 fejlreaktion(13,d.spr_op.data(9),<:spring,over:>,0); 3 15863 disable 3 15864 begin 4 15865 nr:= 0; 4 15866 for i:= 1 step 1 until max_antal_spring do 4 15867 begin 5 15868 if springtabel(i,1) <> 0 then 5 15869 begin 6 15870 nr:= nr +1; 6 15871 s:= skriv_fil(d.spr_op.data(4),nr,zi); 6 15872 if s <> 0 then fejlreaktion(6,s,<:spring,over:>,0); 6 15873 fil(zi).iaf(1):= springtabel(i,1); 6 15874 fil(zi).iaf(2):= springtabel(i,2); 6 15875 fil(zi,2):= springstart(i); 6 15876 end; 5 15877 end; 4 15878 d.spr_op.data(1):= nr; 4 15879 s:= sæt_fil_dim(d.spr_op.data); 4 15880 if s <> 0 then fejlreaktion(9,s,<:spring,over:>,0); 4 15881 d.komm_op.data(1):= nr; 4 15882 d.komm_op.data(2):= d.spr_op.data(4); 4 15883 returner_op(komm_op,3); 4 15884 end; 3 15885 goto næste_tid; 3 15886 3 15886 vt_spring_trap: 3 15887 disable skriv_vt_spring(zbillede,1); 3 15888 3 15888 end vt_spring; 2 15889 \f 2 15889 message procedure vt_auto side 1 - 810505/cl; 2 15890 2 15890 procedure vt_auto(cs_auto_retur,auto_opref); 2 15891 value cs_auto_retur,auto_opref; 2 15892 integer cs_auto_retur,auto_opref; 2 15893 begin 3 15894 integer array field op,auto_op,iaf; 3 15895 integer filref,id1,id2,aktion,postnr,sidste_post,interval,res, 3 15896 res_inf,i,s,zi,kl,døgnstart; 3 15897 real t,nu,næste_tid; 3 15898 boolean optaget; 3 15899 integer array filnavn,nytnavn(1:4); 3 15900 3 15900 procedure skriv_vt_auto(zud,omfang); 3 15901 value omfang; 3 15902 zone zud; 3 15903 integer omfang; 3 15904 begin 4 15905 long array field laf; 4 15906 4 15906 laf:= 0; 4 15907 write(zud,"nl",1,<:+++ vt_auto :>); 4 15908 if omfang<>0 then 4 15909 begin 5 15910 skriv_coru(zud,abs curr_coruno); 5 15911 write(zud,"nl",1,<<d>, 5 15912 <:cs-auto-retur :>,cs_auto_retur,"nl",1, 5 15913 <:op :>,op,"nl",1, 5 15914 <:auto-op :>,auto_op,"nl",1, 5 15915 <:filref :>,filref,"nl",1, 5 15916 <:id1 :>,id1,"nl",1, 5 15917 <:id2 :>,id2,"nl",1, 5 15918 <:aktion :>,aktion,"nl",1, 5 15919 <:postnr :>,postnr,"nl",1, 5 15920 <:sidste-post :>,sidste_post,"nl",1, 5 15921 <:interval :>,interval,"nl",1, 5 15922 <:res :>,res,"nl",1, 5 15923 <:res-inf :>,res_inf,"nl",1, 5 15924 <:i :>,i,"nl",1, 5 15925 <:s :>,s,"nl",1, 5 15926 <:zi :>,zi,"nl",1, 5 15927 <:kl :>,kl,"nl",1, 5 15928 <:døgnstart :>,døgnstart,"nl",1, 5 15929 <:optaget :>,if optaget then <:true:> else <:false:>,"nl",1, 5 15930 <:t :>,<<zddddd.dddd>,t,"nl",1, 5 15931 <:nu :>,nu,"nl",1, 5 15932 <:næste-tid :>,næste_tid,"nl",1, 5 15933 <:filnavn :>,filnavn.laf,"nl",1, 5 15934 <:nytnavn :>,nytnavn.laf,"nl",1, 5 15935 <::>); 5 15936 end; 4 15937 end skriv_vt_auto; 3 15938 \f 3 15938 message procedure vt_auto side 2 - 810507/cl; 3 15939 3 15939 iaf:= 0; 3 15940 auto_op:= auto_opref; 3 15941 filref:= id1:= id2:= aktion:= postnr:= sidste_post:= 0; 3 15942 optaget:= false; 3 15943 næste_tid:= 0.0; 3 15944 for i:= 1,2,3,4 do filnavn(i):=nytnavn(i):=0; 3 15945 stack_claim(if cm_test then 298 else 246); 3 15946 trap(vt_auto_trap); 3 15947 3 15947 <*+2*> 3 15948 <**> disable if testbit47 and overvåget or testbit28 then 3 15949 <**> skriv_vt_auto(out,0); 3 15950 <*-2*> 3 15951 3 15951 vent: 3 15952 3 15952 systime(1,0.0,nu); 3 15953 interval:= if filref=0 then (-1) <*uendeligt*> else 3 15954 if næste_tid > nu then round(næste_tid-nu) else 3 15955 if optaget then 5 else 0; 3 15956 if interval=0 then interval:= 1; 3 15957 3 15957 <*v*> waitch(cs_vt_auto,op,vt_optype or gen_optype,interval); 3 15958 3 15958 if op<>0 then goto filskift; 3 15959 3 15959 <* vent på adgang til vogntabel *> 3 15960 <*v*> waitch(cs_vt_adgang,op,vt_optype,-1); 3 15961 3 15961 <* afsend relevant operation til opdatering af vogntabel *> 3 15962 start_operation(op,curr_coruid,cs_auto_retur,aktion); 3 15963 d.op.data(1):= id1; 3 15964 d.op.data(2):= id2; 3 15965 signalch(cs_vt_opd,op,vt_optype); 3 15966 <*v*> waitch(cs_auto_retur,op,vt_optype,-1); 3 15967 res:= d.op.resultat; 3 15968 id2:= d.op.data(2); 3 15969 res_inf:= d.op.data(3); 3 15970 3 15970 <* åbn for vogntabel *> 3 15971 signalch(cs_vt_adgang,op,vt_optype or gen_optype); 3 15972 \f 3 15972 message procedure vt_auto side 3 - 810507/cl; 3 15973 3 15973 <* behandl svar fra opdatering *> 3 15974 <*+2*> 3 15975 <**> disable 3 15976 <**> if testbit45 and overvåget then 3 15977 <**> begin 4 15978 <**> integer li,lø,bo; 4 15979 <**> skriv_vt_auto(out,0); 4 15980 <**> write(out,"nl",1,<<zddddd>,systime(4,d.op.tid,t),<:.:>,entier t, 4 15981 <**> <: POSTNR. :>,<<d>,postnr,if aktion=12 then <:: SLET:> else 4 15982 <**> <:: OMKOD:>,<: - RES=:>,res); 4 15983 <**> for i:= 1,2 do 4 15984 <**> begin 5 15985 <**> li:= d.op.data(i); 5 15986 <**> lø:= li extract 7; bo:= li shift (-7) extract 5; 5 15987 <**> if bo<>0 then bo:= bo + 'A' - 1; 5 15988 <**> li:= li shift (-12) extract 10; 5 15989 <**> write(out,<< ddd>,li,false add bo,1,"/",1,<<d>,lø); 5 15990 <**> end; 4 15991 <**> systime(4,næste_tid,t); 4 15992 <**> write(out,<< zddd>,d.op.data(3) extract 14,<: - AUTOTID::>, 4 15993 <**> << zd.dd>,t/10000,"nl",1); 4 15994 <**> end; 3 15995 <*-2*> 3 15996 if res=31 then 3 15997 fejlreaktion(10,aktion,<:AUTO: SYSTEMFEJL:>,1) 3 15998 else 3 15999 if res<>3 then 3 16000 begin 4 16001 if -, optaget then 4 16002 begin 5 16003 disable start_operation(auto_op,curr_coruid,cs_auto_retur,22); 5 16004 d.auto_op.data(1):= if res=9 then 1 else if res=12 then 2 else 5 16005 if res=18 then 3 else if res=60 then 9 else 4; 5 16006 d.auto_op.data(2):= res_inf; 5 16007 d.auto_op.data(3):= if res=12 then id2 else id1; 5 16008 signalch(cs_io,auto_op,io_optype or gen_optype); 5 16009 waitch(cs_auto_retur,auto_op,io_optype or gen_optype,-1); 5 16010 end; 4 16011 if res=14 or res=18 then <* i kø eller optaget *> 4 16012 begin 5 16013 optaget:= true; 5 16014 goto vent; 5 16015 end; 4 16016 end; 3 16017 optaget:= false; 3 16018 \f 3 16018 message procedure vt_auto side 4 - 810507/cl; 3 16019 3 16019 <* find næste post *> 3 16020 disable 3 16021 begin 4 16022 if postnr=sidste_post then 4 16023 begin <* døgnskift *> 5 16024 postnr:= 1; 5 16025 døgnstart:= systime(4,systid(døgnstart+1,120000),t); 5 16026 end 4 16027 else postnr:= postnr+1; 4 16028 s:= læsfil(filref,postnr,zi); 4 16029 if s<>0 then fejlreaktion(5,s,<:auto:>,0); 4 16030 aktion:= fil(zi).iaf(1); 4 16031 næste_tid:= systid(døgnstart,fil(zi).iaf(2)); 4 16032 id1:= fil(zi).iaf(3); 4 16033 id2:= fil(zi).iaf(4); 4 16034 end; 3 16035 goto vent; 3 16036 \f 3 16036 message procedure vt_auto side 5 - 810507/cl; 3 16037 3 16037 filskift: 3 16038 3 16038 <*+2*> 3 16039 <**> disable 3 16040 <**> if testbit41 and overvåget then 3 16041 <**> begin 4 16042 <**> skriv_vt_auto(out,0); 4 16043 <**> write(out,<: modtaget operation::>); 4 16044 <**> skriv_op(out,op); 4 16045 <**> end; 3 16046 <*-2*> 3 16047 for i:= 1 step 1 until 4 do filnavn(i):=nytnavn(i):= 0; 3 16048 res:= 46; 3 16049 if d.op.opkode extract 12 <> 21 then 3 16050 fejlreaktion(2,d.op.opkode extract 12,<:auto,filskift:>,0); 3 16051 if filref = 0 then goto knyt; 3 16052 3 16052 <* gem filnavn til io-meddelelse *> 3 16053 disable begin 4 16054 integer array fdim(1:8); 4 16055 integer array field navn; 4 16056 fdim(4):= filref; 4 16057 hentfildim(fdim); 4 16058 navn:= 8; 4 16059 tofrom(filnavn,fdim.navn,8); 4 16060 end; 3 16061 3 16061 <* frivgiv tilknyttet autofil *> 3 16062 disable start_operation(auto_op,curr_coruid,cs_auto_retur,103); 3 16063 d.auto_op.data(4):= filref; 3 16064 signalch(cs_frigiv_fil,auto_op,vt_optype); 3 16065 <*v*> waitch(cs_auto_retur,auto_op,vt_optype,-1); 3 16066 if d.auto_op.data(9) <> 0 then 3 16067 fejlreaktion(15,d.auto_op.data(9),<:auto,filskift:>,0); 3 16068 filref:= aktion:= id1:= id2:= postnr:= sidste_post:= 0; 3 16069 optaget:= false; 3 16070 næste_tid:= 0.0; 3 16071 res:= 3; 3 16072 \f 3 16072 message procedure vt_auto side 6 - 810507/cl; 3 16073 3 16073 <* tilknyt evt. ny autofil *> 3 16074 knyt: 3 16075 if d.op.data(1)<>0 then 3 16076 begin 4 16077 disable startoperation(auto_op,curr_coruid,cs_auto_retur,102); 4 16078 d.auto_op.data(4):= 30 shift 12; <* contentskey,subno *> 4 16079 for i:= 1,2,3,4 do d.auto_op.data(4+i):= d.op.data(i); 4 16080 disable 4 16081 begin integer pos1,pos2; 5 16082 pos1:= pos2:= 13; 5 16083 while læstegn(d.auto_op.data,pos1,i)<>0 do 5 16084 begin 6 16085 if 'A'<=i and i<='Å' then i:= i - 'A' + 'a'; 6 16086 skrivtegn(d.auto_op.data,pos2,i); 6 16087 end; 5 16088 end; 4 16089 signalch(cs_tilknyt_fil,auto_op,vt_optype); 4 16090 <*v*> waitch(cs_auto_retur,auto_op,vt_optype,-1); 4 16091 s:= d.auto_op.data(9); 4 16092 if s=0 then res:= 3 <* ok *> else 4 16093 if s=1 or s=2 then res:= 46 <* ukendt navn *> else 4 16094 if s=5 or s=7 then res:= 47 <* galt indhold *> else 4 16095 if s=6 then res:= 48 <* i brug *> else 4 16096 fejlreaktion(14,2,<:auto,filskift:>,0); 4 16097 if res<>3 then goto returner; 4 16098 4 16098 tofrom(nytnavn,d.op.data,8); 4 16099 4 16099 <* find første post *> 4 16100 disable 4 16101 begin 5 16102 døgnstart:= systime(5,0.0,t); 5 16103 kl:= round t; 5 16104 filref:= d.auto_op.data(4); 5 16105 sidste_post:= d.auto_op.data(1); 5 16106 postnr:= 0; 5 16107 for postnr:= postnr+1 while postnr <= sidste_post do 5 16108 begin 6 16109 s:= læsfil(filref,postnr,zi); 6 16110 if s<>0 then fejlreaktion(5,s,<:auto,filskift:>,0); 6 16111 if fil(zi).iaf(2) > kl then goto post_fundet; 6 16112 end; 5 16113 postnr:= 1; 5 16114 døgnstart:= systime(4,systid(døgnstart+1,120000),t); 5 16115 \f 5 16115 message procedure vt_auto side 7 - 810507/cl; 5 16116 5 16116 post_fundet: 5 16117 s:= læsfil(filref,postnr,zi); 5 16118 if s<>0 then fejlreaktion(5,s,<:auto,filskift:>,0); 5 16119 aktion:= fil(zi).iaf(1); 5 16120 næste_tid:= systid(døgnstart,fil(zi).iaf(2)); 5 16121 id1:= fil(zi).iaf(3); 5 16122 id2:= fil(zi).iaf(4); 5 16123 res:= 3; 5 16124 end; 4 16125 end ny fil; 3 16126 3 16126 returner: 3 16127 d.op.resultat:= res; 3 16128 <*+2*> 3 16129 <**> disable 3 16130 <**> if testbit41 and overvåget then 3 16131 <**> begin 4 16132 <**> skriv_vt_auto(out,0); 4 16133 <**> write(out,<: returner operation::>); 4 16134 <**> skriv_op(out,op); 4 16135 <**> end; 3 16136 <*-2*> 3 16137 signalch(d.op.retur,op,d.op.optype); 3 16138 3 16138 if vt_log_aktiv then 3 16139 begin 4 16140 waitch(cs_vt_logpool,op,vt_optype,-1); 4 16141 startoperation(op,curr_coruid,cs_vt_logpool,0); 4 16142 if nytnavn(1)=0 then 4 16143 hægtstring(d.op.data.v_tekst,1,<:ophør:>) 4 16144 else 4 16145 skriv_text(d.op.data.v_tekst,1,nytnavn); 4 16146 d.op.data.v_kode:= 4; <*PS (PlanSkift)*> 4 16147 systime(1,0.0,d.op.data.v_tid); 4 16148 signalch(cs_vt_log,op,vt_optype); 4 16149 end; 3 16150 3 16150 if filnavn(1)<>0 then 3 16151 begin <* meddelelse til io om annulering *> 4 16152 disable begin 5 16153 start_operation(auto_op,curr_coruid,cs_auto_retur,23<*io_gen_medd*>); 5 16154 i:= 1; 5 16155 hægtstring(d.auto_op.data,i,<:auto :>); 5 16156 skriv_text(d.auto_op.data,i,filnavn); 5 16157 hægtstring(d.auto_op.data,i,<: annuleret:>); 5 16158 repeat skrivtegn(d.auto_op.data,i,'nul') until (i-1) mod 6 = 0; 5 16159 signalch(cs_io,auto_op,io_optype or gen_optype); 5 16160 end; 4 16161 waitch(cs_auto_retur,auto_op,io_optype or gen_optype,-1); 4 16162 end; 3 16163 goto vent; 3 16164 3 16164 vt_auto_trap: 3 16165 disable skriv_vt_auto(zbillede,1); 3 16166 3 16166 end vt_auto; 2 16167 message procedure vt_log side 1 - 920517/cl; 2 16168 2 16168 procedure vt_log; 2 16169 begin 3 16170 integer i,j,ventetid; 3 16171 real dg,t,nu,skiftetid; 3 16172 boolean fil_åben; 3 16173 integer array ia(1:10),dp,dp1(1:8); 3 16174 integer array field op, iaf; 3 16175 3 16175 procedure skriv_vt_log(zud,omfang); 3 16176 value omfang; 3 16177 zone zud; 3 16178 integer omfang; 3 16179 begin 4 16180 write(zud,"nl",1,<:+++ vt-log :>); 4 16181 if omfang<>0 then 4 16182 begin 5 16183 skriv_coru(zud, abs curr_coruno); 5 16184 write(zud,"nl",1,<<d>, 5 16185 <:i :>,i,"nl",1, 5 16186 <:j :>,j,"nl",1, 5 16187 <:ventetid :>,ventetid,"nl",1, 5 16188 <:dg :>,<<zddddd.dd>,dg,"nl",1, 5 16189 <:t :>,t,"nl",1, 5 16190 <:nu :>,nu,"nl",1, 5 16191 <:skiftetid :>,skiftetid,"nl",1, 5 16192 <:filåben :>,if fil_åben then <:true:> else <:false:>,"nl",1, 5 16193 <:op :>,<<d>,op,"nl",1, 5 16194 <::>); 5 16195 raf:= 0; 5 16196 write(zud,"nl",1,<:ia::>); 5 16197 skrivhele(zud,ia.raf,20,2); 5 16198 write(zud,"nl",2,<:dp::>); 5 16199 skrivhele(zud,dp.raf,16,2); 5 16200 write(zud,"nl",2,<:dp1::>); 5 16201 skrivhele(zud,dp1.raf,16,2); 5 16202 end; 4 16203 end; 3 16204 3 16204 message procedure vt_log side 2 - 920517/cl; 3 16205 3 16205 procedure slet_fil; 3 16206 begin 4 16207 integer segm,res; 4 16208 integer array tail(1:10); 4 16209 4 16209 res:= monitor(42)lookup_entry:(zvtlog,0,tail); 4 16210 if res=0 then 4 16211 begin 5 16212 segm:= tail(10); 5 16213 res:=monitor(48)remove_entry:(zvtlog,0,tail); 5 16214 if res=0 then 5 16215 begin 6 16216 close(zvtlog,true); 6 16217 open(zvtlog,4,<:vtlogpool:>,0); close(zvtlog,true); 6 16218 res:=monitor(42)lookup_entry:(zvtlog,0,tail); 6 16219 if res=0 then 6 16220 begin 7 16221 tail(1):= tail(1)+segm; 7 16222 monitor(44)change_entry:(zvtlog,0,tail); 7 16223 end; 6 16224 end; 5 16225 end; 4 16226 end; 3 16227 3 16227 boolean procedure udvid_fil; 3 16228 begin 4 16229 integer res,spos; 4 16230 integer array tail(1:10); 4 16231 zone z(1,1,stderror); 4 16232 4 16232 udvid_fil:= false; 4 16233 open(z,0,<:vtlogpool:>,0); close(z,true); 4 16234 res:= monitor(42)lookup_entry:(z,0,tail); 4 16235 if (res=0) and (tail(1) >= vt_log_slicelgd) then 4 16236 begin 5 16237 tail(1):=tail(1) - vt_log_slicelgd; 5 16238 res:=monitor(44)change_entry:(z,0,tail); 5 16239 if res=0 then 5 16240 begin 6 16241 spos:= vt_logtail(1); 6 16242 vt_logtail(1):= vt_logtail(1)+vt_log_slicelgd; 6 16243 res:=monitor(44)change_entry:(zvtlog,0,vt_logtail); 6 16244 if res<>0 then 6 16245 begin 7 16246 vt_logtail(1):= vt_logtail(1) - vt_log_slicelgd; 7 16247 tail(1):= tail(1) + vt_log_slicelgd; 7 16248 monitor(44)change_entry:(z,0,tail); 7 16249 end 6 16250 else 6 16251 begin 7 16252 setposition(zvtlog,0,spos); 7 16253 udvid_fil:= true; 7 16254 end; 6 16255 end; 5 16256 end; 4 16257 end; 3 16258 3 16258 message procedure vt_log side 3 - 920517/cl; 3 16259 3 16259 boolean procedure ny_fil; 3 16260 begin 4 16261 integer res,i,j; 4 16262 integer array nyt(1:4), ia,tail(1:10); 4 16263 long array field navn; 4 16264 real t; 4 16265 4 16265 navn:=0; 4 16266 if fil_åben then 4 16267 begin 5 16268 close(zvtlog,true); 5 16269 fil_åben:= false; 5 16270 nyt.navn(1):= long<:vtlo:>; 5 16271 nyt.navn(2):= long<::>; 5 16272 anbringtal(nyt,5,round systime(4,vt_logstart,t),-6); 5 16273 j:= 'a' - 1; 5 16274 repeat 5 16275 res:=monitor(46)rename_entry:(zvtlog,0,nyt); 5 16276 if res=3 then 5 16277 begin 6 16278 j:= j+1; 6 16279 if j <= 'å' then skrivtegn(nyt,11,j); 6 16280 end; 5 16281 until (res<>3) or (j > 'å'); 5 16282 5 16282 if res=0 then 5 16283 begin 6 16284 open(zvtlog,4,<:vtlogklar:>,0); 6 16285 res:=monitor(42)lookup_entry:(zvtlog,0,tail); 6 16286 if res=0 then 6 16287 res:=monitor(52)create_areaproc:(zvtlog,0,ia); 6 16288 if res=0 then 6 16289 begin 7 16290 res:=monitor(8)reserve_process:(zvtlog,0,ia); 7 16291 if res<>0 then monitor(64)remove_areaproc:(zvtlog,0,ia); 7 16292 end; 6 16293 6 16293 if res=0 then 6 16294 begin 7 16295 setposition(zvtlog,0,tail(10)//64); 7 16296 navn:= (tail(10) mod 64)*8; 7 16297 if (tail(1) <= tail(10)//64) then 7 16298 outrec6(zvtlog,512) 7 16299 else 7 16300 swoprec6(zvtlog,512); 7 16301 tofrom(zvtlog.navn,nyt,8); 7 16302 tail(10):= tail(10)+1; 7 16303 setposition(zvtlog,0,tail(10)//64); 7 16304 monitor(44)change_entry:(zvtlog,0,tail); 7 16305 close(zvtlog,true); 7 16306 end 6 16307 else 6 16308 begin 7 16309 navn:= 0; 7 16310 close(zvtlog,true); 7 16311 open(zvtlog,4,<:vtlog:>,0); 7 16312 slet_fil; 7 16313 end; 6 16314 end 5 16315 else 5 16316 slet_fil; 5 16317 end; 4 16318 4 16318 <* logfilen er nu omdøbt og indskrevet i vtlogklar *> 4 16319 <* eller den er blevet slettet. *> 4 16320 4 16320 open(zvtlog,4,<:vtlog:>,0); 4 16321 for i:= 1 step 1 until 10 do vt_logtail(i):= 0; 4 16322 iaf:= 2; tofrom(vt_logtail.iaf,vt_logdisc,8); 4 16323 vt_logtail(6):= systime(7,0,t); 4 16324 4 16324 res:=monitor(40)create_entry:(z_vtlog,0,vt_logtail); 4 16325 if res=0 then 4 16326 begin 5 16327 monitor(50)permanent_entry:(zvtlog,3,ia); 5 16328 if res<>0 then 5 16329 monitor(48)remove_entry:(zvtlog,0,ia); 5 16330 end; 4 16331 4 16331 if res=0 then fil_åben:= true; 4 16332 4 16332 ny_fil:= fil_åben; 4 16333 end ny_fil; 3 16334 3 16334 message procedure vt_log side 4 - 920517/cl; 3 16335 3 16335 procedure skriv_post(logpost); 3 16336 integer array logpost; 3 16337 begin 4 16338 integer array field post; 4 16339 real t; 4 16340 4 16340 if vt_logtail(10)//32 < vt_logtail(1) then 4 16341 begin 5 16342 outrec6(zvtlog,512); 5 16343 post:= (vt_logtail(10) mod 32)*16; 5 16344 tofrom(zvtlog.post,logpost,16); 5 16345 vt_logtail(10):= vt_logtail(10)+1; 5 16346 setposition(zvtlog,0,vt_logtail(10)//32); 5 16347 vt_logtail(6):= systime(7,0,t); 5 16348 monitor(44)change_entry:(zvtlog,0,vt_logtail); 5 16349 end; 4 16350 end; 3 16351 3 16351 procedure sletsendte; 3 16352 begin 4 16353 zone z(128,1,stderror), zpool,zlog(1,1,stderror); 4 16354 integer array pooltail,tail,ia(1:10); 4 16355 integer i,res; 4 16356 4 16356 open(zpool,0,<:vtlogpool:>,0); close(zpool,true); 4 16357 res:=monitor(42,zpool,0,pooltail); 4 16358 4 16358 open(z,4,<:vtlogslet:>,0); 4 16359 if monitor(42,z,0,tail)=0 and tail(10)>0 then 4 16360 begin 5 16361 if monitor(52,z,0,tail)=0 then 5 16362 begin 6 16363 if monitor(8,z,0,tail)=0 then 6 16364 begin 7 16365 for i:=1 step 1 until tail(10) do 7 16366 begin 8 16367 inrec6(z,8); 8 16368 open(zlog,0,z,0); close(zlog,true); 8 16369 if monitor(42,zlog,0,ia)=0 then 8 16370 begin 9 16371 if monitor(48,zlog,0,ia)=0 then 9 16372 begin 10 16373 pooltail(1):=pooltail(1)+ia(1); 10 16374 end; 9 16375 end; 8 16376 end; 7 16377 tail(10):=0; 7 16378 monitor(44,z,0,tail); 7 16379 end 6 16380 else 6 16381 monitor(64,z,0,tail); 6 16382 end; 5 16383 if res=0 then monitor(44,zpool,0,pooltail); 5 16384 end; 4 16385 close(z,true); 4 16386 end; 3 16387 3 16387 message procedure vt_log side 5 - 920517/cl; 3 16388 3 16388 trap(vt_log_trap); 3 16389 stack_claim(200); 3 16390 3 16390 fil_åben:= false; 3 16391 if -, vt_log_aktiv then goto init_slut; 3 16392 open(zvtlog,4,<:vtlog:>,0); 3 16393 i:=monitor(42)lookup_entry:(zvtlog,0,vt_logtail); 3 16394 if i=0 then 3 16395 i:=monitor(52)create_areaproc:(zvtlog,0,ia); 3 16396 if i=0 then 3 16397 begin 4 16398 i:=monitor(8)reserve_process:(zvtlog,0,ia); 4 16399 if i<>0 then monitor(64)remove_areaproc:(zvtlog,0,ia); 4 16400 end; 3 16401 3 16401 if (i=0) and (vt_logtail(1)=0) then 3 16402 begin 4 16403 close(zvtlog,true); 4 16404 monitor(48)remove_entry:(zvtlog,0,ia); 4 16405 i:= 1; 4 16406 end; 3 16407 3 16407 disable 3 16408 if i=0 then 3 16409 begin 4 16410 fil_åben:= true; 4 16411 inrec6(zvtlog,512); 4 16412 vt_logstart:= zvtlog.v_tid; 4 16413 systime(1,0.0,nu); 4 16414 if (nu - vt_logstart) < 24*60*60.0 then 4 16415 begin 5 16416 setposition(zvtlog,0,vt_logtail(10)//32); 5 16417 if (vt_logtail(10)//32) < vt_logtail(1) then 5 16418 begin 6 16419 inrec6(zvtlog,512); 6 16420 setposition(zvtlog,0,vt_logtail(10)//32); 6 16421 end; 5 16422 end 4 16423 else 4 16424 begin 5 16425 if ny_fil then 5 16426 begin 6 16427 if udvid_fil then 6 16428 begin 7 16429 systime(1,0.0,dp.v_tid); 7 16430 vt_logstart:= dp.v_tid; 7 16431 dp.v_kode:=0; 7 16432 skriv_post(dp); 7 16433 end 6 16434 else 6 16435 begin 7 16436 close(zvtlog,true); 7 16437 monitor(48)remove_entry:(zvtlog,0,ia); 7 16438 fil_åben:= false; 7 16439 end; 6 16440 end; 5 16441 end; 4 16442 end 3 16443 else 3 16444 begin 4 16445 close(zvtlog,true); 4 16446 if ny_fil then 4 16447 begin 5 16448 if udvid_fil then 5 16449 begin 6 16450 systime(1,0.0,dp.v_tid); 6 16451 vt_logstart:= dp.v_tid; 6 16452 dp.v_kode:=0; 6 16453 skriv_post(dp); 6 16454 end 5 16455 else 5 16456 begin 6 16457 close(zvtlog,true); 6 16458 monitor(48)remove_entry:(zvtlog,0,ia); 6 16459 fil_åben:= false; 6 16460 end; 5 16461 end; 4 16462 end; 3 16463 3 16463 init_slut: 3 16464 3 16464 dg:= systime(5,0,t); 3 16465 if t < vt_logskift then 3 16466 skiftetid:= systid(dg,vt_logskift) 3 16467 else 3 16468 skiftetid:= systid(dg+1,vt_logskift); 3 16469 3 16469 message procedure vt_log side 6 - 920517/cl; 3 16470 3 16470 vent: 3 16471 3 16471 systime(1,0.0,nu); dg:= systime(5,0.0,t); 3 16472 ventetid:= round(skiftetid - nu); 3 16473 if ventetid < 1 then ventetid:= 1; 3 16474 3 16474 <*V*> waitch(cs_vt_log,op,vt_optype,ventetid); 3 16475 3 16475 systime(1,0.0,nu); dg:=systime(4,nu,t); 3 16476 if op <> 0 then 3 16477 begin 4 16478 tofrom(dp,d.op.data,16); 4 16479 signalch(cs_vt_logpool,op,vt_optype); 4 16480 end; 3 16481 3 16481 if -, vt_log_aktiv then goto vent; 3 16482 3 16482 disable if (op=0) or (nu > skiftetid) then 3 16483 begin 4 16484 if fil_åben then 4 16485 begin 5 16486 dp1.v_tid:= systid(dg,vt_logskift); 5 16487 dp1.v_kode:= 1; 5 16488 if (vt_logtail(10)//32) >= vt_logtail(1) then 5 16489 begin 6 16490 if udvid_fil then 6 16491 skriv_post(dp1); 6 16492 end 5 16493 else 5 16494 skriv_post(dp1); 5 16495 end; 4 16496 4 16496 if (op=0) or (nu > skiftetid) then 4 16497 skiftetid:= skiftetid + 24*60*60.0; 4 16498 4 16498 sletsendte; 4 16499 4 16499 if ny_fil then 4 16500 begin 5 16501 if udvid_fil then 5 16502 begin 6 16503 vt_logstart:=dp1.v_tid:= systid(dg,vt_logskift); 6 16504 dp1.v_kode:= 0; 6 16505 skriv_post(dp1); 6 16506 end 5 16507 else 5 16508 begin 6 16509 close(zvtlog,true); 6 16510 monitor(48)remove_entry:(zvtlog,0,ia); 6 16511 fil_åben:= false; 6 16512 end; 5 16513 end; 4 16514 end; 3 16515 3 16515 disable if op<>0 and fil_åben then 3 16516 begin 4 16517 if (vt_logtail(10)//32) >= vt_logtail(1) then 4 16518 begin 5 16519 if -, udvid_fil then 5 16520 begin 6 16521 if ny_fil then 6 16522 begin 7 16523 if udvid_fil then 7 16524 begin 8 16525 systime(1,0.0,dp1.v_tid); 8 16526 vt_logstart:= dp1.v_tid; 8 16527 dp1.v_kode:= 0; 8 16528 skriv_post(dp1); 8 16529 end 7 16530 else 7 16531 begin 8 16532 close(zvtlog,true); 8 16533 monitor(48)remove_entry:(zvtlog,0,ia); 8 16534 fil_åben:= false; 8 16535 end; 7 16536 end; 6 16537 end; 5 16538 end; 4 16539 4 16539 if fil_åben then skriv_post(dp); 4 16540 end; 3 16541 3 16541 goto vent; 3 16542 3 16542 vt_log_trap: 3 16543 disable skriv_vt_log(zbillede,1); 3 16544 end vt_log; 2 16545 \f 2 16545 2 16545 algol list.off; 2 16546 message coroutinemonitor - 11 ; 2 16547 2 16547 2 16547 <*************** coroutine monitor procedures ***************> 2 16548 2 16548 2 16548 <***** delay ***** 2 16549 2 16549 this procedure links the calling coroutine into the timerqueue and sets 2 16550 the timeout value to 'timeout'. *> 2 16551 2 16551 2 16551 procedure delay (timeout); 2 16552 value timeout; 2 16553 integer timeout; 2 16554 begin 3 16555 link(current, idlequeue); 3 16556 link(current + corutimerchain, timerqueue); 3 16557 d.current.corutimer:= timeout; 3 16558 3 16558 3 16558 passivate; 3 16559 d.current.corutimer:= 0; 3 16560 end; 2 16561 \f 2 16561 2 16561 message coroutinemonitor - 12 ; 2 16562 2 16562 2 16562 <***** pass ***** 2 16563 2 16563 this procedure moves the calling coroutine from the head of the ready 2 16564 queue down below all coroutines of lower or equal priority. *> 2 16565 2 16565 2 16565 procedure pass; 2 16566 begin 3 16567 linkprio(current, readyqueue); 3 16568 3 16568 3 16568 passivate; 3 16569 end; 2 16570 2 16570 2 16570 <***** signal **** 2 16571 2 16571 this procedure increases the value af 'semaphore' by 1. 2 16572 in case some coroutine is already waiting, it is linked into the ready 2 16573 queue for activation. the calling coroutine continues execution. *> 2 16574 2 16574 2 16574 procedure signal (semaphore); 2 16575 value semaphore; 2 16576 integer semaphore; 2 16577 begin 3 16578 integer array field sem; 3 16579 sem:= semaphore; 3 16580 if d.sem.simvalue < 0 then linkprio(d.sem.simcoru, readyqueue); 3 16581 d.sem.simvalue:= d.sem.simvalue + 1; 3 16582 3 16582 3 16582 end; 2 16583 \f 2 16583 2 16583 message coroutinemonitor - 13 ; 2 16584 2 16584 2 16584 <***** wait ***** 2 16585 2 16585 this procedure decreases the value of 'semaphore' by 1. 2 16586 in case the value of the semaphore is negative after the decrease, the 2 16587 calling coroutine is linked into the semaphore queue waiting for a 2 16588 coroutine to signal this semaphore. *> 2 16589 2 16589 2 16589 procedure wait (semaphore); 2 16590 value semaphore; 2 16591 integer semaphore; 2 16592 begin 3 16593 integer array field sem; 3 16594 sem:= semaphore; 3 16595 d.sem.simvalue:= d.sem.simvalue - 1; 3 16596 3 16596 3 16596 linkprio(current, if d.sem.simvalue < 0 then sem+simcoru else readyqueue); 3 16597 passivate; 3 16598 end; 2 16599 \f 2 16599 2 16599 message coroutinemonitor - 14 ; 2 16600 2 16600 2 16600 <***** inspect ***** 2 16601 2 16601 this procedure inspects the value of the semaphore and returns it in 2 16602 'elements'. 2 16603 the semaphore is left unchanged. *> 2 16604 2 16604 2 16604 procedure inspect (semaphore, elements); 2 16605 value semaphore; 2 16606 integer semaphore, elements; 2 16607 begin 3 16608 integer array field sem; 3 16609 sem:= semaphore; 3 16610 elements:= d.sem.simvalue; 3 16611 3 16611 3 16611 end; 2 16612 \f 2 16612 2 16612 message coroutinemonitor - 15 ; 2 16613 2 16613 2 16613 <***** signalch ***** 2 16614 2 16614 this procedure delivers an operation at 'semaphore'. 2 16615 in case another coroutine is already waiting for an operation of the 2 16616 kind 'operationtype' this coroutine will get the operation and it will 2 16617 be put into the ready queue for activation. 2 16618 in case no coroutine is waiting for the actial kind of operation it is 2 16619 linked into the semaphore queue, at the end of the queue 2 16620 if operation is positive and at the beginning if operation is negative. 2 16621 the calling coroutine continues execution. *> 2 16622 2 16622 2 16622 procedure signalch (semaphore, operation, operationtype); 2 16623 value semaphore, operation, operationtype; 2 16624 integer semaphore, operation; 2 16625 boolean operationtype; 2 16626 begin 3 16627 integer array field firstcoru, currcoru, op,currop; 3 16628 op:= abs operation; 3 16629 d.op.optype:= operationtype; 3 16630 firstcoru:= semaphore + semcoru; 3 16631 currcoru:= d.firstcoru.next; 3 16632 while currcoru <> firstcoru do 3 16633 begin 4 16634 if (d.currcoru.corutypeset and operationtype) extract 12 <> 0 then 4 16635 begin 5 16636 link(operation, 0); 5 16637 d.currcoru.coruop:= operation; 5 16638 linkprio(currcoru, readyqueue); 5 16639 link(currcoru + corutimerchain, idlequeue); 5 16640 goto exit; 5 16641 end else currcoru:= d.currcoru.next; 4 16642 end; 3 16643 currop:=semaphore + semop; 3 16644 if operation < 0 then currop:=d.currop.next; 3 16645 link(op, currop); 3 16646 exit: 3 16647 3 16647 3 16647 end; 2 16648 \f 2 16648 2 16648 message coroutinemonitor - 16 ; 2 16649 2 16649 2 16649 <***** waitch ***** 2 16650 2 16650 this procedure fetches an operation from a semaphore. 2 16651 in case an operation matching 'operationtypeset' is already waiting at 2 16652 'semaphore' it is handed over to the calling coroutine. 2 16653 in case no matching operation is waiting, the calling coroutine is 2 16654 linked to the semaphore. 2 16655 in any case the calling coroutine will be stopped and all corouti- 2 16656 nes are rescheduled. *> 2 16657 2 16657 2 16657 procedure waitch (semaphore, operation, operationtypeset, timeout); 2 16658 value semaphore, operationtypeset, timeout; 2 16659 integer semaphore, operation, timeout; 2 16660 boolean operationtypeset; 2 16661 begin 3 16662 integer array field firstop, currop; 3 16663 firstop:= semaphore + semop; 3 16664 currop:= d.firstop.next; 3 16665 3 16665 3 16665 while currop <> firstop do 3 16666 begin 4 16667 if (d.currop.optype and operationtypeset) extract 12 <> 0 then 4 16668 begin 5 16669 link(currop, 0); 5 16670 d.current.coruop:= currop; 5 16671 operation:= currop; 5 16672 \f 5 16672 5 16672 message coroutinemonitor - 17 ; 5 16673 5 16673 linkprio(current, readyqueue); 5 16674 passivate; 5 16675 goto exit; 5 16676 end else currop:= d.currop.next; 4 16677 end; 3 16678 linkprio(current, semaphore + semcoru); 3 16679 if timeout > 0 then 3 16680 begin 4 16681 link(current + corutimerchain, timerqueue); 4 16682 d.current.corutimer:= timeout; 4 16683 end else d.current.corutimer:= 0; 3 16684 d.current.corutypeset:= operationtypeset; 3 16685 passivate; 3 16686 if d.current.corutimer < 0 then operation:= 0 3 16687 else operation:= d.current.coruop; 3 16688 d.current.corutimer:= 0; 3 16689 currop:= operation; 3 16690 d.current.coruop:= currop; 3 16691 link(current+corutimerchain, idlequeue); 3 16692 exit: 3 16693 3 16693 3 16693 end; 2 16694 \f 2 16694 2 16694 message coroutinemonitor - 18 ; 2 16695 2 16695 2 16695 <***** inspectch ***** 2 16696 2 16696 this procedure inspects the queue of operations waiting at 'semaphore'. 2 16697 the number of matching operations are counted and delivered in 'elements'. 2 16698 if no operations are found the number of coroutines waiting 2 16699 for operations of the typeset are counted and delivered as 2 16700 negative value in 'elements'. 2 16701 the semaphore is left unchanged. *> 2 16702 2 16702 2 16702 procedure inspectch (semaphore, operationtypeset, elements); 2 16703 value semaphore, operationtypeset; 2 16704 integer semaphore, elements; 2 16705 boolean operationtypeset; 2 16706 begin 3 16707 integer array field firstop, currop,firstcoru,currcoru; 3 16708 integer counter; 3 16709 counter:= 0; 3 16710 firstop:= semaphore + semop; 3 16711 currop:= d.firstop.next; 3 16712 while currop <> firstop do 3 16713 begin 4 16714 if (operationtypeset and d.currop.optype) extract 12 <> 0 then 4 16715 counter:= counter + 1; 4 16716 currop:= d.currop.next; 4 16717 end; 3 16718 if counter=0 then 3 16719 begin 4 16720 firstcoru:=semaphore + sem_coru; 4 16721 curr_coru:=d.firstcoru.next; 4 16722 while curr_coru<>first_coru do 4 16723 begin 5 16724 if (operationtypeset and d.curr_coru.corutypeset) extract 12 <>0 then 5 16725 counter:=counter - 1; 5 16726 curr_coru:=d.curr_coru.next; 5 16727 end; 4 16728 end; 3 16729 elements:= counter; 3 16730 3 16730 3 16730 end; 2 16731 \f 2 16731 2 16731 message coroutinemonitor - 19 ; 2 16732 2 16732 2 16732 <***** csendmessage ***** 2 16733 2 16733 this procedure sends the message in 'mess' to the process defined by the name 2 16734 in 'receiver', and returns an identification of the message extension used 2 16735 for sending the message (this identification is to be used for calling 'cwait- 2 16736 answer' or 'cregretmessage'. *> 2 16737 2 16737 2 16737 procedure csendmessage (receiver, mess, messextension); 2 16738 real array receiver; 2 16739 integer array mess; 2 16740 integer messextension; 2 16741 begin 3 16742 integer bufref, messext; 3 16743 messref(maxmessext):= 0; 3 16744 messext:= 1; 3 16745 while messref(messext) <> 0 do messext:= messext + 1; 3 16746 if messext = maxmessext then <* no resources *> messext:= 0 else 3 16747 begin 4 16748 messcode(messext):= 1 shift 12 add 2; 4 16749 mon(16) send message :(0, mess, 0, receiver); 4 16750 messref(messext):= monw2; 4 16751 if monw2 > 0 then messextension:= messext else messextension:= 0; 4 16752 end; 3 16753 3 16753 3 16753 end; 2 16754 \f 2 16754 2 16754 message coroutinemonitor - 20 ; 2 16755 2 16755 2 16755 <***** cwaitanswer ***** 2 16756 2 16756 this procedure asks the coroutine monitor to get an answer to the message 2 16757 corresponding to 'messextension'. in case the answer has already arrived 2 16758 it stays in the eventqueue until 'cwaitanswer' is called. 2 16759 in case 'timeout' is positive, the coroutine is linked into the timer 2 16760 queue, and in case the answer does not arrive within 'timout' seconds the 2 16761 coroutine is restarted with result = 0. *> 2 16762 2 16762 2 16762 procedure cwaitanswer (messextension, answer, result, timeout); 2 16763 value messextension, timeout; 2 16764 integer messextension, result, timeout; 2 16765 integer array answer; 2 16766 begin 3 16767 integer messext; 3 16768 messext:= messextension; 3 16769 messcode(messext):= messcode(messext) extract 12; 3 16770 link(current, idlequeue); 3 16771 messop(messext):= current; 3 16772 if timeout > 0 then 3 16773 begin 4 16774 link(current + corutimerchain, timerqueue); 4 16775 d.current.corutimer:= timeout; 4 16776 end else d.current.corutimer:= 0; 3 16777 3 16777 3 16777 passivate; 3 16778 if d.current.corutimer < 0 then result:= 0 else 3 16779 begin 4 16780 mon(18) wait answer :(0, answer, messref(messextension), 0); 4 16781 result:= monw0; 4 16782 baseevent:= 0; 4 16783 messref(messextension):= 0; 4 16784 end; 3 16785 d.current.corutimer:= 0; 3 16786 link(current+corutimerchain, idlequeue); 3 16787 end; 2 16788 \f 2 16788 2 16788 message coroutinemonitor - 21 ; 2 16789 2 16789 2 16789 <***** cwaitmessage ***** 2 16790 2 16790 this procedure asks the coroutine monitor to give it a message, when some- 2 16791 one arrives. in case a message has arrived already it stays at the event queue 2 16792 until 'cwaitmessage' is called. 2 16793 in case 'timeout' is positive, the coroutine is linked into the timer queue, 2 16794 if no message arrives within 'timeout' seconds, the coroutine is restarted 2 16795 with messbufferref = 0. *> 2 16796 2 16796 2 16796 procedure cwaitmessage (processextension, mess, messbufferref, timeout); 2 16797 value timeout, processextension; 2 16798 integer processextension, messbufferref, timeout; 2 16799 integer array mess; 2 16800 begin 3 16801 integer i; 3 16802 integer array field messbuf; 3 16803 proccode(processextension):= 2; 3 16804 procop(processextension):= current; 3 16805 link(current, idlequeue); 3 16806 if timeout > 0 then 3 16807 begin 4 16808 link(current + corutimerchain, timerqueue); 4 16809 d.current.corutimer:= timeout; 4 16810 end else d.current.corutimer:= 0; 3 16811 3 16811 3 16811 passivate; 3 16812 if d.current.corutimer < 0 then messbufferref:= 0 else 3 16813 begin 4 16814 messbuf:= procop(processextension); 4 16815 for i:=1 step 1 until 8 do mess(i):= core.messbuf(4+i); 4 16816 proccode(procext):= 1 shift 12; 4 16817 messbufferref:= messbuf; 4 16818 baseevent:= 0; 4 16819 end; 3 16820 d.current.corutimer:= 0; 3 16821 link(current+corutimerchain, idlequeue); 3 16822 end; 2 16823 \f 2 16823 2 16823 message coroutinemonitor - 22 ; 2 16824 2 16824 2 16824 <***** cregretmessage ***** 2 16825 2 16825 this procedure regrets the message corresponding to messageexten- 2 16826 sion, to release message buffer and message extension. 2 16827 i/o messages are not regretable. *> 2 16828 2 16828 2 16828 2 16828 procedure cregretmessage (messageextension); 2 16829 value messageextension; 2 16830 integer messageextension; 2 16831 begin 3 16832 integer array field messbuf; 3 16833 messbuf:= messref(messageextension); 3 16834 mon(82) regret message :(0, 0, messbuf, 0); 3 16835 messref(messageextension):= 0; 3 16836 3 16836 3 16836 end; 2 16837 \f 2 16837 2 16837 message coroutinemonitor - 23 ; 2 16838 2 16838 2 16838 <***** semsendmessage ***** 2 16839 2 16839 this procedure sends the message 'mess' to 'receiver' and at the same time it 2 16840 defines a 'signalch(semaphore, operation, operationtype)' to be performed 2 16841 by the monitor, when the answer arrives. 2 16842 in case there are too few resources to send the message, the operation is 2 16843 returned immediately with the result field set to zero. *> 2 16844 2 16844 2 16844 procedure semsendmessage (receiver, mess, semaphore, operation, operationtype); 2 16845 value semaphore, operation, operationtype; 2 16846 real array receiver; 2 16847 integer array mess; 2 16848 integer semaphore, operation; 2 16849 boolean operationtype; 2 16850 begin 3 16851 integer array field op; 3 16852 integer messext; 3 16853 op:= operation; 3 16854 messref(maxmessext):= 0; 3 16855 messext:= 1; 3 16856 while messref(messext) <> 0 do messext:= messext + 1; 3 16857 if messext < maxmessext then 3 16858 begin 4 16859 messop(messext):= op; 4 16860 messcode(messext):=1; 4 16861 d.op(1):= semaphore; 4 16862 d.op.optype:= operationtype; 4 16863 mon(16) send message :(0, mess, 0, receiver); 4 16864 messref(messext):= monw2; 4 16865 end; 3 16866 3 16866 3 16866 if messext = maxmessext or messref(messext) = 0 <* no resources *> then 3 16867 begin <* return the operation immediately with result = 0 *> 4 16868 d.op(9):= 0; 4 16869 signalch(semaphore, op, operationtype); 4 16870 end; 3 16871 end; 2 16872 \f 2 16872 2 16872 message coroutinemonitor - 24 ; 2 16873 2 16873 2 16873 <***** semwaitmessage ***** 2 16874 2 16874 this procedure defines a 'signalch(semaphore, operation, operationtype)' to 2 16875 be performed by the coroutine monitor when a message arrives to the process 2 16876 corresponding to 'processextension'. *> 2 16877 2 16877 2 16877 procedure semwaitmessage (processextension, semaphore, operation, operationtype); 2 16878 value processextension, semaphore, operation, operationtype; 2 16879 integer processextension, semaphore, operation; 2 16880 boolean operationtype; 2 16881 begin 3 16882 integer array field op; 3 16883 op:= operation; 3 16884 procop(processextension):= operation; 3 16885 d.op(1):= semaphore; 3 16886 d.op.optype:= operationtype; 3 16887 proccode(processextension):= 1; 3 16888 3 16888 3 16888 end; 2 16889 \f 2 16889 2 16889 message coroutinemonitor - 25 ; 2 16890 2 16890 2 16890 <***** semregretmessage ***** 2 16891 2 16891 this procedure regrets a message sent by semsendmessage. 2 16892 the message is identified by the operation in which the answer should be 2 16893 returned. 2 16894 the procedure sets the result field of the operation to zero, and then 2 16895 returns it by performing a signalch. *> 2 16896 2 16896 2 16896 procedure semregretmessage (operation); 2 16897 value operation; 2 16898 integer operation; 2 16899 begin 3 16900 integer i, j; 3 16901 integer array field op, sem; 3 16902 op:= operation; 3 16903 i:= 1; 3 16904 while i < maxmessext do 3 16905 begin 4 16906 if messref(i) > 0 and (messcode(i) = 1 and messop(i) = op) then 4 16907 begin 5 16908 mon(82) regret message :(0, 0, messref(i), 0); 5 16909 messref(i):= 0; 5 16910 sem:= d.op(1); 5 16911 for j:=1 step 1 until 9 do d.op(j):= 0; 5 16912 signalch(sem, op, d.op.optype); 5 16913 i:= maxmessext; 5 16914 end; 4 16915 i:= i + 1; 4 16916 end; 3 16917 3 16917 3 16917 end; 2 16918 \f 2 16918 2 16918 message coroutinemonitor - 26 ; 2 16919 2 16919 2 16919 <***** link ***** 2 16920 2 16920 this procedure links an object (allocated in the descriptor array 'd') into 2 16921 a queue of alements (allocated in the descriptor array 'd'). the queues 2 16922 are all double chained, and the chainhead is of the same format as the chain 2 16923 fields of the objects. 2 16924 the procedure links the object immediately after the head. *> 2 16925 2 16925 2 16925 procedure link (object, chainhead); 2 16926 value object, chainhead; 2 16927 integer object, chainhead; 2 16928 begin 3 16929 integer array field prevelement, nextelement, chead, obj; 3 16930 obj:= object; 3 16931 chead:= chainhead; 3 16932 prevelement:= d.obj.prev; 3 16933 nextelement:= d.obj.next; 3 16934 d.prevelement.next:= nextelement; 3 16935 d.nextelement.prev:= prevelement; 3 16936 if chead > 0 then <* link into queue *> 3 16937 begin 4 16938 prevelement:= d.chead.prev; 4 16939 d.obj.prev:= prevelement; 4 16940 d.prevelement.next:= obj; 4 16941 d.obj.next:= chead; 4 16942 d.chead.prev:= obj; 4 16943 end else 3 16944 begin <* link onto itself *> 4 16945 d.obj.prev:= obj; 4 16946 d.obj.next:= obj; 4 16947 end; 3 16948 end; 2 16949 \f 2 16949 2 16949 message coroutinemonitor - 27 ; 2 16950 2 16950 2 16950 <***** linkprio ***** 2 16951 2 16951 this procedure is used to link coroutines into queues corresponding to 2 16952 the priorities of the actual coroutine and the queue elements. 2 16953 the object is linked immediately before the first coroutine of lower prio- 2 16954 rity. *> 2 16955 2 16955 2 16955 procedure linkprio (object, chainhead); 2 16956 value object, chainhead; 2 16957 integer object, chainhead; 2 16958 begin 3 16959 integer array field currelement, chead, obj; 3 16960 obj:= object; 3 16961 chead:= chainhead; 3 16962 currelement:= d.chead.next; 3 16963 while currelement <> chead 3 16964 and d.currelement.corupriority <= d.obj.corupriority 3 16965 do currelement:= d.currelement.next; 3 16966 link(obj, currelement); 3 16967 end; 2 16968 \f 2 16968 2 16968 message coroutinemonitor - 28 ; 2 16969 2 16969 \f 2 16969 2 16969 message coroutinemonitor - 30a ; 2 16970 2 16970 2 16970 <*************** extention to coroutine monitor procedures **********> 2 16971 2 16971 <***** signalbin ***** 2 16972 2 16972 this procedure simulates a binary semaphore on a simple semaphore 2 16973 by testing the value of the semaphore before signaling the 2 16974 semaphore. if the value of the semaphore is one (=open) nothing is 2 16975 done, otherwise a normal signal is carried out. *> 2 16976 2 16976 2 16976 procedure signalbin(semaphore); 2 16977 value semaphore; 2 16978 integer semaphore; 2 16979 begin 3 16980 integer array field sem; 3 16981 integer val; 3 16982 sem:= semaphore; 3 16983 inspect(sem,val); 3 16984 if val<1 then signal(sem); 3 16985 end; 2 16986 \f 2 16986 2 16986 message coroutinemonitor - 30b ; 2 16987 2 16987 <***** coruno ***** 2 16988 2 16988 delivers the coroutinenumber for a give coroutine id. 2 16989 if the coroutine does not exists the value 0 is delivered *> 2 16990 2 16990 integer procedure coru_no(coru_id); 2 16991 value coru_id; 2 16992 integer coru_id; 2 16993 begin 3 16994 integer array field cor; 3 16995 3 16995 coru_no:= 0; 3 16996 for cor:= firstcoru step corusize until (coruref-1) do 3 16997 if d.cor.coruident//1000 = coru_id then 3 16998 coru_no:= d.cor.coruident mod 1000; 3 16999 end; 2 17000 \f 2 17000 2 17000 message coroutinemonitor - 30c ; 2 17001 2 17001 <***** coroutine ***** 2 17002 2 17002 delivers the referencebyte for the coroutinedescriptor for 2 17003 a coroutine identified by coroutinenumber *> 2 17004 2 17004 integer procedure coroutine(cor_no); 2 17005 value cor_no; 2 17006 integer cor_no; 2 17007 coroutine:= if cor_no <= 0 or maxcoru < cor_no then -1 else 2 17008 firstcoru + (cor_no-1)*corusize; 2 17009 \f 2 17009 2 17009 message coroutinemonitor - 30d ; 2 17010 2 17010 <***** curr_coruno ***** 2 17011 2 17011 delivers number of calling coroutine 2 17012 curr_coruno: 2 17013 < 0 = -current_coroutine_number in disabled mode 2 17014 = 0 = procedure not called from coroutine 2 17015 > 0 = current_coroutine_number in enabled mode *> 2 17016 2 17016 integer procedure curr_coruno; 2 17017 begin 3 17018 integer i; 3 17019 integer array ia(1:12); 3 17020 3 17020 i:= system(12,0,ia); 3 17021 if i > 0 then 3 17022 begin 4 17023 i:= system(12,1,ia); 4 17024 curr_coruno:= ia(3); 4 17025 end else curr_coruno:= 0; 3 17026 end curr_coruno; 2 17027 \f 2 17027 2 17027 message coroutinemonitor - 30e ; 2 17028 2 17028 <***** curr_coruid ***** 2 17029 2 17029 delivers coruident of calling coroutine : 2 17030 2 17030 curr_coruid: 2 17031 > 0 = coruident of calling coroutine 2 17032 = 0 = procedure not called from coroutine *> 2 17033 2 17033 integer procedure curr_coruid; 2 17034 begin 3 17035 integer cor_no; 3 17036 integer array field cor; 3 17037 3 17037 cor_no:= abs curr_coruno; 3 17038 if cor_no <> 0 then 3 17039 begin 4 17040 cor:= coroutine(cor_no); 4 17041 curr_coruid:= d.cor.coruident // 1000; 4 17042 end 3 17043 else curr_coruid:= 0; 3 17044 end curr_coruid; 2 17045 \f 2 17045 message coroutinemonitor - 30f.1 ; 2 17046 2 17046 <**** getch ***** 2 17047 2 17047 this procedure searches the queue of operations waiting at 'semaphore' 2 17048 to find an operation that matches the operationstypeset and a set of 2 17049 select-values. each select value is specified by type and fieldvalue 2 17050 in integer array 'type' and by the value in integer array 'val'. 2 17051 2 17051 0: eq 0: not used 2 17052 1: lt 1: boolean 2 17053 2: le 2: integer 2 17054 3: gt 3: long 2 17055 4: ge 4: real 2 17056 5: ne 2 17057 *> 2 17058 2 17058 procedure getch(semaphore,operation,operationtypeset,type,val); 2 17059 value semaphore,operationtypeset; 2 17060 integer semaphore,operation; 2 17061 boolean operationtypeset; 2 17062 integer array type,val; 2 17063 begin 3 17064 integer array field firstop,currop; 3 17065 integer ø,n,i,f,t,rel,i1,i2; 3 17066 boolean field bf,bfval; 3 17067 integer field intf; 3 17068 long field lf,lfval; long l1,l2; 3 17069 real field rf,rfval; real r1,r2; 3 17070 3 17070 boolean match; 3 17071 3 17071 operation:= 0; 3 17072 n:= system(3,ø,type); 3 17073 match:= false; 3 17074 firstop:= semaphore + semop; 3 17075 currop:= d.firstop.next; 3 17076 while currop <> firstop and -,match do 3 17077 begin 4 17078 if (operationtypeset and d.currop.optype) extract 12 <> 0 then 4 17079 begin 5 17080 i:= n; 5 17081 match:= true; 5 17082 \f 5 17082 message coroutinemonitor - 30f.2 ; 5 17083 5 17083 while match and (if i <= ø then type(i) >= 0 else false) do 5 17084 begin 6 17085 rel:= type(i) shift(-18); 6 17086 t:= type(i) shift(-12) extract 6; 6 17087 f:= type(i) extract 12; 6 17088 if f > 2047 then f:= f -4096; 6 17089 case t+1 of 6 17090 begin 7 17091 ; <* not used *> 7 17092 7 17092 begin <*boolean or signed short integer*> 8 17093 bf:= f; 8 17094 bfval:= 2*i; 8 17095 i1:= d.currop.bf extract 12; 8 17096 if i1 > 2047 then i1:= i1-4096; 8 17097 i2:= val.bfval extract 12; 8 17098 if i2 > 2047 then i2:= i2-4096; 8 17099 match:= case rel+1 of (i1=i2,i1<i2,i1<=i2,i1>i2,i1>=i2,i1<>i2); 8 17100 end; 7 17101 7 17101 begin <*integer*> 8 17102 intf:= f; 8 17103 i1:= d.currop.intf; 8 17104 i2:= val(i); 8 17105 match:= case rel+1 of (i1=i2,i1<i2,i1<=i2,i1>i2,i1>=i2,i1<>i2); 8 17106 end; 7 17107 7 17107 begin <*long*> 8 17108 lf:= f; 8 17109 lfval:= i*2; 8 17110 l1:= d.currop.lf; 8 17111 l2:= val.lfval; 8 17112 match:= case rel+1 of (l1=l2,l1<l2,l1<=l2,l1>l2,l1>=l2,l1<>l2); 8 17113 end; 7 17114 7 17114 begin <*real*> 8 17115 rf:= f; 8 17116 rfval:= i*2; 8 17117 r1:= d.currop.rf; 8 17118 r2:= val.rfval; 8 17119 match:= case rel+1 of (r1=r2,r1<r2,r1<=r2,r1>r2,r1>=r2,r1<>r2); 8 17120 end; 7 17121 7 17121 end;<*case t+1*> 6 17122 6 17122 i:= i+1; 6 17123 end; <*while match and i<=ø and t>=0 *> 5 17124 \f 5 17124 message coroutinemonitor - 30f.3 ; 5 17125 5 17125 end; <* if operationtypeset and ---*> 4 17126 if -,match then currop:= d.currop.next; 4 17127 end; <*while currop <> firstop and -,match*> 3 17128 3 17128 if match then 3 17129 begin 4 17130 link(currop,0); 4 17131 d.current.coruop:= currop; 4 17132 operation:= currop; 4 17133 end; 3 17134 end getch; 2 17135 \f 2 17135 2 17135 message coroutinemonitor - 31 ; 2 17136 2 17136 activity(maxcoru); 2 17137 2 17137 goto initialization; 2 17138 2 17138 2 17138 2 17138 <*************** event handling ***************> 2 17139 2 17139 2 17139 2 17139 takeexternal: 2 17140 currevent:= baseevent; 2 17141 eventqueueempty:= false; 2 17142 repeat 2 17143 current:= 0; 2 17144 prevevent:= currevent; 2 17145 mon(66) test event :(0, 0, currevent, 0); 2 17146 currevent:= monw2; 2 17147 if monw0 < 0 <* no event *> then goto takeinternal; 2 17148 if monw0 = 1 and monw1 > 0 and monw1 <= maxcoru then 2 17149 cmi:= monw1 2 17150 else 2 17151 cmi:= - monw0; 2 17152 2 17152 if cmi > 0 then 2 17153 begin <* answer to activity zone *> 3 17154 current:= firstcoru + (cmi - 1) * corusize; 3 17155 linkprio(current, readyqueue); 3 17156 baseevent:= 0; 3 17157 end else 2 17158 2 17158 if cmi = 0 then 2 17159 begin <* message arrived *> 3 17160 \f 3 17160 3 17160 message coroutinemonitor - 32 ; 3 17161 3 17161 receiver:= core.currevent(3); 3 17162 if receiver < 0 then receiver:= - receiver; 3 17163 procref(maxprocext):= receiver; 3 17164 procext:= 1; 3 17165 while procref(procext) <> receiver do procext:= procext + 1; 3 17166 if procext = maxprocext then 3 17167 begin <* receiver unknown *> 4 17168 <* leave the message unchanged *> 4 17169 end else 3 17170 if proccode(procext) shift (-12) = 0 then 3 17171 begin <* the receiver is ready for accepting messages *> 4 17172 mon(26) get event :(0, 0, currevent, 0); 4 17173 case proccode(procext) of 4 17174 begin 5 17175 begin <* message received by semwaitmessage *> 6 17176 op:= procop(procext); 6 17177 sem:= d.op(1); 6 17178 for cmj:=1 step 1 until 8 do d.op(cmj):= core.currevent(4+cmj); 6 17179 d.op(9):= currevent; 6 17180 signalch(sem, op, d.op.optype); 6 17181 proccode(procext):= 1 shift 12; 6 17182 end; 5 17183 begin <* message received by cwaitmessage *> 6 17184 current:= procop(procext); 6 17185 procop(procext):= currevent; 6 17186 linkprio(current, readyqueue); 6 17187 link(current + corutimerchain, idlequeue); 6 17188 6 17188 6 17188 end; 5 17189 end; <* case *> 4 17190 currevent:= baseevent; 4 17191 proccode(procext):= 1 shift 12; 4 17192 end; 3 17193 end <* message *> else 2 17194 2 17194 if cmi = -1 then 2 17195 begin <* answer arrived *> 3 17196 \f 3 17196 3 17196 message coroutinemonitor - 33 ; 3 17197 3 17197 if currevent = timermessage then 3 17198 begin 4 17199 mon(26) get event :(0, 0, currevent, 0); 4 17200 coru:= d.timerqueue.next; 4 17201 while coru <> timerqueue do 4 17202 begin 5 17203 current:= coru - corutimerchain; 5 17204 d.current.corutimer:= d.current.corutimer - clockmess(2); 5 17205 coru:= d.coru.next; 5 17206 if d.current.corutimer <= 0 then 5 17207 begin <* timer perion expired *> 6 17208 d.current.corutimer:= -1; 6 17209 linkprio(current, readyqueue); 6 17210 link(current + corutimerchain, idlequeue); 6 17211 end; 5 17212 end; 4 17213 mon(16) send message :(0, clockmess, 0, clock); 4 17214 timermessage:= monw2; 4 17215 currevent:= baseevent; 4 17216 end <* timer answer *> else 3 17217 begin 4 17218 messref(maxmessext):= currevent; 4 17219 messext:= 1; 4 17220 while messref(messext) <> currevent do messext:= messext + 1; 4 17221 if messext = maxmessext then 4 17222 begin <* the answer is unknown *> 5 17223 <* leave the answer unchanged - it may belong to an activity *> 5 17224 end else 4 17225 if messcode(messext) shift (-12) = 0 then 4 17226 begin 5 17227 case messcode(messext) extract 12 of 5 17228 begin 6 17229 \f 6 17229 6 17229 message coroutinemonitor - 34 ; 6 17230 begin <* answer arrived after semsendmessage *> 7 17231 op:= messop(messext); 7 17232 sem:= d.op(1); 7 17233 mon(18) wait answer :(0, d.op, currevent, 0); 7 17234 d.op(9):= monw0; 7 17235 signalch(sem, op, d.op.optype); 7 17236 messref(messext):= 0; 7 17237 baseevent:= 0; 7 17238 end; 6 17239 begin <* answer arrived after csendmessage *> 7 17240 current:= messop(messext); 7 17241 linkprio(current, readyqueue); 7 17242 link(current + corutimerchain, idlequeue); 7 17243 7 17243 7 17243 end; 6 17244 end; 5 17245 end else baseevent:= currevent; 4 17246 end; 3 17247 end; 2 17248 until eventqueueempty; 2 17249 \f 2 17249 2 17249 message coroutinemonitor - 35 ; 2 17250 2 17250 2 17250 2 17250 <*************** coroutine activation ***************> 2 17251 2 17251 takeinternal: 2 17252 2 17252 current:= d.readyqueue.next; 2 17253 if current = readyqueue then 2 17254 begin 3 17255 mon(24) wait event :(0, 0, prevevent, 0); 3 17256 goto takeexternal; 3 17257 end; 2 17258 2 17258 <*+2*> if testbit30 and d.current.corutestmask shift(-11) then 2 17259 <**> begin 3 17260 <**> systime(5,0,r); 3 17261 <**> write(out,"nl",1,<<zd dd dd>,r,<: coroutine: :>,<<dd>, 3 17262 <**> d.current.coruident mod 1000,<: ident: :>,<<ddd>, 3 17263 <**> d.current.coruident//1000,<: aktiveres:>); 3 17264 <**> end; 2 17265 <*-2*> 2 17266 2 17266 corustate:= activate(d.current.coruident mod 1000); 2 17267 cmi:= corustate extract 24; 2 17268 <*+2*> if testbit30 and d.current.corutestmask shift(-11) then 2 17269 <**> begin 3 17270 <**> systime(5,0,r); 3 17271 <**> write(out,"nl",1,<<zd dd dd>,r,<: coroutine: :>,<<dd>, 3 17272 <**> d.current.coruident mod 1000,<: ident: :>,<<ddd>, 3 17273 <**> d.current.coruident//1000,<: afbrudt, årsag=:>,cmi); 3 17274 <**> end; 2 17275 <*-2*> 2 17276 2 17276 if cmi = 1 then 2 17277 begin <* programmed passivate *> 3 17278 goto takeexternal; 3 17279 end; 2 17280 2 17280 if cmi = 2 then 2 17281 begin <* implicit passivate in activity *> 3 17282 3 17282 3 17282 link(current, idlequeue); 3 17283 goto takeexternal; 3 17284 end; 2 17285 \f 2 17285 2 17285 message coroutinemonitor - 36 ; 2 17286 2 17286 <* coroutine termination (normal or abnormal) *> 2 17287 2 17287 <* aktioner ved normal og unormal coroutineterminering insættes her *> 2 17288 coru_term: 2 17289 2 17289 begin 3 17290 if false and alarmcause extract 24 = (-9) <* break *> and 3 17291 alarmcause shift (-24) extract 24 = 0 then 3 17292 begin 4 17293 endaction:= 2; 4 17294 goto program_slut; 4 17295 end; 3 17296 if alarmcause extract 24 = (-9) <* break *> and 3 17297 alarmcause shift (-24) = 8 <* parent *> 3 17298 then sæt_bit_i(trapmode,15<*killed activities*>,0<*normal output*>); 3 17299 if alarmcause shift (-24) extract 24 <> -2 or 3 17300 alarmcause extract 24 <> -13 then 3 17301 begin 4 17302 write(zbillede,"nl",1,<:alarmcause(param,cause)=:>,<<d>, 4 17303 alarmcause shift (-24),<:,:>, 4 17304 alarmcause extract 24); 4 17305 for i:=1 step 1 until max_coru do 4 17306 j:=activate(-i); <* kill *> 4 17307 <* skriv billede *> 4 17308 end 3 17309 else 3 17310 begin 4 17311 errorbits:= 0; <* ok.yes warning.no *> 4 17312 goto finale; 4 17313 end; 3 17314 end; 2 17315 2 17315 goto dump; 2 17316 2 17316 link(current, idlequeue); 2 17317 goto takeexternal; 2 17318 \f 2 17318 2 17318 message coroutinemonitor - 37 ; 2 17319 2 17319 2 17319 2 17319 initialization: 2 17320 2 17320 2 17320 <*************** initialization ***************> 2 17321 2 17321 <* chain head *> 2 17322 2 17322 prev:= -2; <* -2 prev *> 2 17323 next:= 0; <* +0 next *> 2 17324 2 17324 <* corutine descriptor *> 2 17325 2 17325 <* -2 prev *> 2 17326 <* +0 next *> 2 17327 <* +2 (link field) *> 2 17328 corutimerchain:= next + 4; <* +4 corutimerchain *> 2 17329 <* +6 (link field) *> 2 17330 coruop:= corutimerchain + 4; <* +8 coruop *> 2 17331 corutimer:= coruop + 2; <*+10 corutimer *> 2 17332 coruident:= corutimer + 2; <*+12 coruident *> 2 17333 corupriority:= coruident + 2; <*+14 corupriority *> 2 17334 corutypeset:= corupriority + 1; <*+15 corutypeset *> 2 17335 corutestmask:= corutypeset + 1; <*+16 corutestmask *> 2 17336 2 17336 <* simple semaphore *> 2 17337 2 17337 <* -2 (link field) *> 2 17338 simcoru:= next; <* +0 simcoru *> 2 17339 simvalue:= simcoru + 2; <* +2 simvalue *> 2 17340 2 17340 <* chained semaphore *> 2 17341 2 17341 <* -2 (link field) *> 2 17342 semcoru:= next; <* +0 semcoru *> 2 17343 <* +2 (link field) *> 2 17344 semop:= semcoru + 4; <* +4 semop *> 2 17345 \f 2 17345 2 17345 message coroutinemonitor - 38 ; 2 17346 2 17346 <* operation *> 2 17347 2 17347 opsize:= next - 6; <* -6 opsize *> 2 17348 optype:= opsize + 1; <* -5 optype *> 2 17349 <* -2 prev *> 2 17350 <* +0 next *> 2 17351 <* +2 operation(1) *> 2 17352 <* +4 operation(2) *> 2 17353 <* +6 - *> 2 17354 <* . - *> 2 17355 <* . - *> 2 17356 2 17356 \f 2 17356 2 17356 message coroutinemonitor - 39 ; 2 17357 2 17357 trap(dump); 2 17358 systime(1, 0, starttime); 2 17359 for cmi:= 1 step 1 until maxmessext do messref(cmi):= 0; 2 17360 clockmess(1):= 0; 2 17361 clockmess(2):= timeinterval; 2 17362 clock(1):= real <:clock:>; 2 17363 clock(2):= real <::>; 2 17364 mon(16) send message :(0, clockmess, 0, clock); 2 17365 timermessage:= monw2; 2 17366 readyqueue:= 4; 2 17367 initchain(readyqueue); 2 17368 idlequeue:= readyqueue + 4; 2 17369 initchain(idlequeue); 2 17370 timerqueue:= idlequeue + 4; 2 17371 initchain(timerqueue); 2 17372 current:= 0; 2 17373 corucount:= 0; 2 17374 proccount:= 0; 2 17375 baseevent:= 0; 2 17376 coruref:= timerqueue + 4; 2 17377 firstcoru:= coruref; 2 17378 simref:= coruref + maxcoru * corusize; 2 17379 firstsim:= simref; 2 17380 semref:= simref + maxsem * simsize; 2 17381 firstsem:= semref; 2 17382 opref:= semref + maxsemch * semsize + 4; 2 17383 firstop:= opref; 2 17384 optop:= opref + maxop * opheadsize + maxnettoop - 6; 2 17385 for cmi:= coruref step 2 until optop - 2 do d(cmi/2):= 0; 2 17386 reflectcore(core); 2 17387 2 17387 algol list.on; 2 17388 2 17388 \f 2 17388 message sys_initialisering side 1 - 810601/hko; 2 17389 2 17389 trapmode:= 1 shift 15; 2 17390 errorbits:= 1; <* warning.no ok.no *> 2 17391 trap(coru_term); 2 17392 2 17392 open(zbillede,4,<:billede:>,0); 2 17393 write(zbillede,"ff",1,"nl",2,<:********** billede for kørsel startet :>, 2 17394 <<zddddd>,systime(5,0,r),".",1,r,<: **********:>,"nl",1); 2 17395 system(2,0,ia); 2 17396 open(zdummy,4,ia,0); close(zdummy,false); 2 17397 monitor(42,zdummy,0,ia); 2 17398 laf:= 0; 2 17399 write(zbillede,"nl",1,<:prog.vers. :>,<<dddddd.dddd>, 2 17400 systime(6,ia(6),r)+r/1000000,"nl",2, 2 17401 <:konsolnavn: :>,konsol_navn.laf,"nl",1); 2 17402 2 17402 open(zrl,4,<:radiolog:>,0); 2 17403 if monitor(42)lookup_entry:(zrl,0,ia)<>0 or 2 17404 monitor(52)create_areaproc:(zrl,0,ia)<>0 or 2 17405 monitor(8)reserve_process:(zrl,0,ia)<>0 then 2 17406 begin 3 17407 ia(1):=1; ia(2):= 3; 3 17408 for i:= 3 step 1 until 10 do ia(i):= 0; 3 17409 monitor(40)create_area:(zrl,0,ia); 3 17410 end; 2 17411 2 17411 for i:=1 step 1 until max_antal_fejltekster do 2 17412 fejltekst(i):= real (case i of ( 2 17413 <* 1*><:filsystem:>, 2 17414 <* 2*><:operationskode:>, 2 17415 <* 3*><:programfejl:>, 2 17416 <* 4*><:monitor<'_'>resultat=:>, 2 17417 <* 5*><:læs<'_'>fil:>, 2 17418 <* 6*><:skriv<'_'>fil:>, 2 17419 <* 7*><:modif<'_'>fil:>, 2 17420 <* 8*><:hent<'_'>fil<'_'>dim:>, 2 17421 <* 9*><:sæt<'_'>fil<'_'>dim:>, 2 17422 <*10*><:vogntabel:>, 2 17423 <*11*><:fremmed operation:>, 2 17424 <*12*><:operationstype:>, 2 17425 <*13*><:opret<'_'>fil:>, 2 17426 <*14*><:tilknyt<'_'>fil:>, 2 17427 <*15*><:frigiv<'_'>fil:>, 2 17428 <*16*><:slet<'_'>fil:>, 2 17429 <*17*><:ydre enhed, status=:>, 2 17430 <*18*><:tabelfil:>, 2 17431 <*19*><:radio:>, 2 17432 <*20*><:mobilopkald, bus:>, 2 17433 <*21*><:talevejsswitch:>, 2 17434 <*99*><:ftslut:>)); 2 17435 2 17435 for i:= 1 step 1 until max_antal_områder do 2 17436 begin 3 17437 område_navn(i):= long (case i of 3 17438 (<:TLF:>,<:VHF:>,<:KBH:>,<:RO:>,<:FS:>,<:HHL:>,<:GLX:>, 3 17439 <:KJ:>,<:HI:>,<:HG:>,<:BA:>) ); 3 17440 område_id(i,1):= område_navn(i) shift (-24) extract 24; 3 17441 område_id(i,2):= 3 17442 (case i of ( 2, 3, 13, 3, 3, 3, 3, 3, 3, 3, 3)) shift 6 add 3 17443 (case i of ( 2, 5, 2, 9, 10, 11, 12, 13, 14, 15, 16)); 3 17444 end; 2 17445 2 17445 pabx_id(1):= -1; 2 17446 pabx_id(2):= 1; 2 17447 2 17447 for i:= 1 step 1 until max_antal_radiokanaler do 2 17448 begin 3 17449 radio_id(i):= 3 17450 case i of ( 3, 3, 3, 3, 2, -1, -1, -1, 4, 5, 6, 7, 8, 9, 10, 11); 3 17451 end; 2 17452 2 17452 for i:=1 step 1 until max_antal_kanaler do 2 17453 begin 3 17454 kanal_navn(i):= long (case i of ( 3 17455 <:K1:>,<:K2:>,<:K3:>,<:K4:>,<:K5:>,<:K9:>,<:K10:>,<:K11:>,<:K12:>, 3 17456 <:K13:>,<:K14:>,<:K15:>,<:K16:>,<:L4190:>) ); 3 17457 kanal_id(i):= 3 17458 (case i of ( 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2)) shift 5 + 3 17459 (case i of ( 2, 3, 4, 1, 5, 9,10,11,12,13,14,15,16, 2)); 3 17460 end; 2 17461 2 17461 for i:= 1 step 1 until op_maske_lgd//2 do 2 17462 ingen_operatører(i):= alle_operatører(i):= 0; 2 17463 for i:= 1 step 1 until tv_maske_lgd//2 do 2 17464 ingen_taleveje(i):= alle_taleveje(i):= 0; 2 17465 2 17465 begin 3 17466 long array navn(1:2); 3 17467 long array field doc, ref; 3 17468 3 17468 doc:= 2; iaf:= 0; 3 17469 movestring(navn,1,<:terminal0:>); 3 17470 for i:= 1 step 1 until max_antal_operatører do 3 17471 begin 4 17472 ref:=(i-1)*8; k:=9; 4 17473 if i>9 then skrivtegn(navn.iaf, k, '0' + i//10); 4 17474 skrivtegn(navn.iaf,k,'0'+ i mod 10); 4 17475 open(zdummy,8,navn,0); close(zdummy,true); 4 17476 k:= monitor(42,zdummy,0,ia); 4 17477 if k=0 then tofrom(terminal_navn.ref,ia.doc,8) 4 17478 else tofrom(terminal_navn.ref,navn,8); 4 17479 operatør_auto_include(i):= false; 4 17480 sætbit_ia(alle_operatører,i,1); 4 17481 end; 3 17482 3 17482 movestring(navn,1,<:garage0:>); 3 17483 for i:= 1 step 1 until max_antal_garageterminaler do 3 17484 begin 4 17485 ref:=(i-1)*8; k:=7; 4 17486 if i>9 then skrivtegn(navn.iaf, k, '0' + i//10); 4 17487 skrivtegn(navn.iaf,k,'0'+ i mod 10); 4 17488 open(zdummy,8,navn,0); close(zdummy,true); 4 17489 k:= monitor(42,zdummy,0,ia); 4 17490 if k=0 then tofrom(garage_terminal_navn.ref,ia.doc,8) 4 17491 else tofrom(garage_terminal_navn.ref,navn,8); 4 17492 garage_auto_include(i):= false; 4 17493 end; 3 17494 end; 2 17495 2 17495 for i:= 1 step 1 until max_antal_taleveje do 2 17496 sætbit_ia(alle_taleveje,i,1); 2 17497 for i:= 1 step 1 until findfpparam(<:operatør:>,true,ia) do 2 17498 if 1<=ia(i) and ia(i)<=max_antal_operatører then 2 17499 operatør_auto_include(ia(i)):= true; 2 17500 for i:= 1 step 1 until findfpparam(<:garage:>,true,ia) do 2 17501 if 1<=ia(i) and ia(i)<=max_antal_garageterminaler then 2 17502 garage_auto_include(ia(i)):= true; 2 17503 2 17503 2 17503 \f 2 17503 message fil_init side 1 - 801030/jg; 2 17504 2 17504 begin integer i,antz,tz,s; 3 17505 real array field raf; 3 17506 3 17506 filskrevet:=fillæst:=0; <*fil*> 3 17507 dbsegmax:= 2**18-1; 3 17508 3 17508 tz:=dbantez+dbantsz; antz:=tz+dbanttz; 3 17509 for i:=1 step 1 until dbantez do 3 17510 begin open(fil(i),4,<::>,0); close(fil(i),false) end; 3 17511 for i:=dbantez+1 step 1 until tz do 3 17512 open(fil(i),4,dbsnavn,0); 3 17513 for i:=tz+1 step 1 until antz do 3 17514 open(fil(i),4,dbtnavn,0); 3 17515 3 17515 for i:=1 step 1 until dbantez do <*dbkatz*> 3 17516 dbkatz(i,1):=dbkatz(i,2):=0; 3 17517 for i:=dbantez+1 step 1 until tz do 3 17518 begin dbkatz(i,1):=2 shift 10;dbkatz(i,2):=0 end; 3 17519 for i:=tz+1 step 1 until antz do 3 17520 begin dbkatz(i,1):=1 shift 10;dbkatz(i,2):=i+1 end; 3 17521 dbkatz(antz,2):=tz+1; 3 17522 dbsidstetz:=antz; 3 17523 dbsidstesz:=tz; 3 17524 3 17524 for i:=1 step 1 until dbmaxef do <*dbkate*> 3 17525 begin integer j; 4 17526 for j:=1,3 step 1 until 6 do 4 17527 dbkate(i,j):=0; 4 17528 dbkate(i,2):=i+1; 4 17529 end; 3 17530 dbkate(dbmaxef,2):=0; 3 17531 dbkatefri:=1; 3 17532 dbantef:=0; 3 17533 \f 3 17533 message fil_init side 2 - 801030/jg; 3 17534 3 17534 3 17534 for i:= 1 step 1 until dbmaxsf do <*dbkats*> 3 17535 begin 4 17536 dbkats(i,1):=0; 4 17537 dbkats(i,2):=i+1; 4 17538 end; 3 17539 dbkats(dbmaxsf,2):=0; 3 17540 dbkatsfri:=1; 3 17541 dbantsf:=0; 3 17542 3 17542 for i:=1 step 1 until dbmaxb do <*dbkatb*> 3 17543 dbkatb(i):=false add (i+1); 3 17544 dbkatb(dbmaxb):=false; 3 17545 dbkatbfri:=1; 3 17546 dbantb:=0; 3 17547 raf:=4; 3 17548 for i:=1 step 1 until dbmaxtf do 3 17549 begin 4 17550 inrec6(fil(antz),4); 4 17551 dbkatt.raf(i):=fil(antz,1); 4 17552 end; 3 17553 inrec6(fil(antz),4); 3 17554 if fil(antz,1)<>real extend 8388607 shift 24 add 8388607 then 3 17555 fejl_reaktion(1,dbmaxtf,<:tabelfil init:>,0); 3 17556 setposition(fil(antz),0,0); 3 17557 3 17557 end filsystem; 2 17558 \f 2 17558 message fil_init side 3 - 810209/cl; 2 17559 2 17559 bs_kats_fri:= nextsem; 2 17560 <*+3*> skriv_new_sem(out,1,bs_kats_fri,<:bs-kats-fri:>); 2 17561 <*-3*> 2 17562 bs_kate_fri:= nextsem; 2 17563 <*+3*> skriv_new_sem(out,1,bs_kate_fri,<:bs-kate-fri:>); 2 17564 <*-3*> 2 17565 cs_opret_fil:= nextsemch; 2 17566 <*+3*> skriv_new_sem(out,3,cs_opret_fil,<:cs-opret-fil:>); 2 17567 <*-3*> 2 17568 cs_tilknyt_fil:= nextsemch; 2 17569 <*+3*> skriv_new_sem(out,3,cs_tilknyt_fil,<:cs-tilknyt-fil:>); 2 17570 <*-3*> 2 17571 cs_frigiv_fil:= nextsemch; 2 17572 <*+3*> skriv_new_sem(out,3,cs_frigiv_fil,<:cs-frigiv-fil:>); 2 17573 <*-3*> 2 17574 cs_slet_fil:= nextsemch; 2 17575 <*+3*> skriv_new_sem(out,3,cs_slet_fil,<:cs-slet-fil:>); 2 17576 <*-3*> 2 17577 cs_opret_spoolfil:= nextsemch; 2 17578 <*+3*> skriv_new_sem(out,3,cs_opret_spoolfil,<:cs-opret-spoolfil:>); 2 17579 <*-3*> 2 17580 cs_opret_eksternfil:= nextsemch; 2 17581 <*+3*> skriv_new_sem(out,3,cs_opret_eksternfil,<:cs-opret-ekst-fil:>); 2 17582 <*-3*> 2 17583 \f 2 17583 message fil_init side 4 810209/cl; 2 17584 2 17584 2 17584 <* initialisering af filsystemcoroutiner *> 2 17585 2 17585 i:= nextcoru(001,10,true); 2 17586 j:= newactivity(i,0,opretfil); 2 17587 <*+3*> skriv_newactivity(out,i,j); 2 17588 <*-3*> 2 17589 2 17589 i:= nextcoru(002,10,true); 2 17590 j:= newactivity(i,0,tilknytfil); 2 17591 <*+3*> skriv_newactivity(out,i,j); 2 17592 <*-3*> 2 17593 2 17593 i:= nextcoru(003,10,true); 2 17594 j:= newactivity(i,0,frigivfil); 2 17595 <*+3*> skriv_newactivity(out,i,j); 2 17596 <*-3*> 2 17597 2 17597 i:= nextcoru(004,10,true); 2 17598 j:= newactivity(i,0,sletfil); 2 17599 <*+3*> skriv_newactivity(out,i,j); 2 17600 <*-3*> 2 17601 2 17601 i:= nextcoru(005,10,true); 2 17602 j:= newactivity(i,0,opretspoolfil); 2 17603 <*+3*> skriv_newactivity(out,i,j); 2 17604 <*-3*> 2 17605 2 17605 i:= nextcoru(006,10,true); 2 17606 j:= newactivity(i,0,opreteksternfil); 2 17607 <*+3*> skriv_newactivity(out,i,j); 2 17608 <*-3*> 2 17609 \f 2 17609 message attention_initialisering side 1 - 850820/cl; 2 17610 2 17610 tf_kommandotabel:= 1 shift 10 + 1; 2 17611 2 17611 begin 3 17612 integer i, s, zno; 3 17613 zone z(128,1,stderror); 3 17614 integer array fdim(1:8); 3 17615 3 17615 fdim(4):= tf_kommandotabel; 3 17616 hentfildim(fdim); 3 17617 3 17617 open(z,4,<:htkommando:>,0); 3 17618 for i:= 1 step 1 until fdim(3) do 3 17619 begin 4 17620 inrec6(z,512); 4 17621 s:= skrivfil(tf_kommandotabel,i,zno); 4 17622 if s<>0 then fejlreaktion(6,s,<:kommandotabelinit:>,0); 4 17623 tofrom(fil(zno),z,512); 4 17624 end; 3 17625 close(z,true); 3 17626 end; 2 17627 \f 2 17627 message attention_initialisering side 1a - 810428/hko; 2 17628 2 17628 for j:= system(3,i,terminal_tab) step 1 until i do 2 17629 terminal_tab(j):= 0; 2 17630 2 17630 cs_att_pulje:=next_semch; 2 17631 <*+3*> skriv_new_sem(out,3,cs_att_pulje,<:cs-att-pulje:>); 2 17632 <*-3*> 2 17633 2 17633 bs_fortsæt_adgang:= nextsem; 2 17634 <*+3*> skriv_new_sem(out,1,bs_fortsæt_adgang,<:bs-fortsæt-adgang:>); 2 17635 <*-3*> 2 17636 signalbin(bs_fortsæt_adgang); 2 17637 2 17637 for i:= 1, 2 17638 1 step 1 until max_antal_operatører, 2 17639 1 step 1 until max_antal_garageterminaler do 2 17640 2 17640 <* initialisering af pulje med attention_operationer *> 2 17641 2 17641 signalch(cs_att_pulje, <* pulje_semafor *> 2 17642 nextop(data+att_op_længde), <* næste_operation *> 2 17643 gen_optype); 2 17644 2 17644 att_proc_ref:=next_proc_ext(system(6<* own process*>,i,ra)); 2 17645 2 17645 i:=next_coru(010,<*ident*> 2 17646 2,<*prioritet*> 2 17647 true<*test_maske*>); 2 17648 j:=newactivity( i, <*activityno *> 2 17649 0, <*ikke virtual *> 2 17650 attention);<*ingen parametre*> 2 17651 2 17651 <*+3*>skriv_newactivity(out,i,j); 2 17652 <*-3*> 2 17653 2 17653 \f 2 17653 message io_initialisering side 1 - 810507/hko; 2 17654 2 17654 io_spoolfil:= 1028; 2 17655 begin 3 17656 integer array fdim(1:8); 3 17657 fdim(4):= io_spoolfil; 3 17658 hent_fildim(fdim); 3 17659 io_spool_postantal:= fdim(1); 3 17660 io_spool_postlængde:= fdim(2); 3 17661 end; 2 17662 2 17662 io_spool_post:= 4; 2 17663 2 17663 cs_io:= next_semch; 2 17664 <*+3*> skriv_new_sem(out,3,cs_io,<:cs-io:>); 2 17665 <*-3*> 2 17666 2 17666 i:= next_coru(100,<*ident *> 2 17667 5,<*prioritet *> 2 17668 true<*test_maske*>); 2 17669 2 17669 j:= new_activity( i, 2 17670 0, 2 17671 h_io); 2 17672 2 17672 <*+3*>skriv_newactivity(out,i,j); 2 17673 <*-3*> 2 17674 cs_io_komm:= next_semch; 2 17675 <*+3*> skriv_new_sem(out,3,cs_io_komm,<:cs-io-komm:>); 2 17676 <*-3*> 2 17677 2 17677 i:= next_coru(101,<*ident*> 2 17678 10,<*prioritet*> 2 17679 true <*testmaske*>); 2 17680 j:= new_activity( i, 2 17681 0, 2 17682 io_komm);<*ingen parametre*> 2 17683 2 17683 <*+3*>skriv_newactivity(out,i,j); 2 17684 <*-3*> 2 17685 \f 2 17685 message io_initialisering side 2 - 810520/hko/cl; 2 17686 2 17686 bs_zio_adgang:= next_sem; 2 17687 <*+3*> skriv_new_sem(out,1,bs_zio_adgang,<:bs-zio-adgang:>); 2 17688 <*-3*> 2 17689 signal_bin(bs_zio_adgang); 2 17690 2 17690 cs_io_spool:= next_semch; 2 17691 <*+3*> skriv_new_sem(out,3,cs_io_spool,<:cs-io-spool:>); 2 17692 <*-3*> 2 17693 2 17693 cs_io_fil:=next_semch; 2 17694 <*+3*> skriv_new_sem(out,3,cs_io_fil,<:cs-io-fil:>); 2 17695 <*-3*> 2 17696 signal_ch(cs_io_fil,next_op(data+18),gen_optype); 2 17697 2 17697 ss_io_spool_fulde:= next_sem; 2 17698 <*+3*> skriv_new_sem(out,2,ss_io_spool_fulde,<:ss-io-spool-fulde:>); 2 17699 <*-3*> 2 17700 2 17700 ss_io_spool_tomme:= next_sem; 2 17701 <*+3*> skriv_new_sem(out,2,ss_io_spool_tomme,<:ss-io-spool-tomme:>); 2 17702 <*-3*> 2 17703 for i:= 1 step 1 until io_spool_postantal do 2 17704 signal(ss_io_spool_tomme); 2 17705 \f 2 17705 message io_initialisering side 3 - 880901/cl; 2 17706 2 17706 i:= next_coru(102, 2 17707 5, 2 17708 true); 2 17709 j:= new_activity(i,0,io_spool); 2 17710 2 17710 <*+3*>skriv_newactivity(out,i,j); 2 17711 <*-3*> 2 17712 2 17712 i:= next_coru(103, 2 17713 10, 2 17714 true); 2 17715 j:= new_activity(i,0,io_spon); 2 17716 2 17716 <*+3*>skriv_newactivity(out,i,j); 2 17717 <*-3*> 2 17718 2 17718 cs_io_medd:= next_semch; 2 17719 <*+3*> skriv_new_sem(out,3,cs_io_medd,<:cs-io-medd:>); 2 17720 <*-3*> 2 17721 2 17721 i:= next_coru(104,<*ident *> 2 17722 10,<*prioritet *> 2 17723 true<*test_maske*>); 2 17724 2 17724 j:= new_activity( i, 2 17725 0, 2 17726 io_medd); 2 17727 2 17727 <*+3*>skriv_newactivity(out,i,j); 2 17728 <*-3*> 2 17729 2 17729 cs_io_nulstil:= next_semch; 2 17730 <*+3*> skriv_new_sem(out,3,cs_io_nulstil,<:cs-io-nulstil:>); 2 17731 <*-3*> 2 17732 2 17732 i:= next_coru(105,<*ident *> 2 17733 10,<*prioritet *> 2 17734 true<*test_maske*>); 2 17735 2 17735 j:= new_activity( i, 2 17736 0, 2 17737 io_nulstil_tællere); 2 17738 2 17738 <*+3*>skriv_newactivity(out,i,j); 2 17739 <*-3*> 2 17740 2 17740 open(z_io,8,konsol_navn,1 shift 21 + 1 shift 9); 2 17741 i:= monitor(8)reserve process:(z_io,0,ia); 2 17742 if i <> 0 then 2 17743 begin 3 17744 fejlreaktion(4<*monitor result*>,+i,<:io reservation:>,0); 3 17745 end 2 17746 else 2 17747 begin 3 17748 ref:= 0; 3 17749 terminal_tab.ref.terminal_tilstand:= 0; 3 17750 write(z_io,"nl",3,"sp",10,"*",15,<: busradio startet :>, 3 17751 <<zddddd>,systime(5,0.0,r),".",1,r, 3 17752 "sp",1,"*",15,"nl",1); 3 17753 setposition(z_io,0,0); 3 17754 end; 2 17755 \f 2 17755 message operatør_initialisering side 1 - 810520/hko; 2 17756 2 17756 top_bpl_gruppe:= 64; 2 17757 2 17757 bpl_navn(0):= long<::>; 2 17758 for i:= 1 step 1 until 127 do 2 17759 begin 3 17760 k:= læsfil(tf_bpl_navne,i,j); 3 17761 if k<>0 then fejlreaktion(5,k,<:bplnavne init:>,0); 3 17762 bpl_navn(i):= (long fil(j,1)) shift (-8) shift 8; 3 17763 if i<=max_antal_operatører then 3 17764 operatør_auto_include(i):= false add (fil(j,1) extract 8); 3 17765 if i>64 and fil(j,1)<>real<::> and i>top_bpl_gruppe then 3 17766 top_bpl_gruppe:= i; 3 17767 end; 2 17768 2 17768 for i:= 0 step 1 until 64 do 2 17769 begin 3 17770 iaf:= i*op_maske_lgd; 3 17771 tofrom(bpl_def.iaf,ingen_operatører,op_maske_lgd); 3 17772 bpl_tilst(i,1):= bpl_tilst(i,2):= 0; 3 17773 if 1<=i and i<= max_antal_operatører then 3 17774 begin 4 17775 bpl_tilst(i,2):= 1; 4 17776 sætbit_ia(bpl_def.iaf,i,1); 4 17777 end; 3 17778 end; 2 17779 for i:= 65 step 1 until 127 do 2 17780 begin 3 17781 k:= læsfil(tf_bpl_def,i-64,j); 3 17782 if k<>0 then fejlreaktion(5,k,<:bpldef init:>,0); 3 17783 iaf:= i*op_maske_lgd; 3 17784 tofrom(bpl_def.iaf,fil(j),op_maske_lgd); 3 17785 bpl_tilst(i,1):= 0; 3 17786 bpl_tilst(i,2):= fil(j,2) extract 24; 3 17787 end; 2 17788 2 17788 for k:= 0,1,2,3 do operatør_stop(0,k):= 0; 2 17789 iaf:= 0; 2 17790 for i:= 1 step 1 until max_antal_operatører do 2 17791 begin 3 17792 k:= læsfil(tf_stoptabel,i,j); 3 17793 if k<>0 then fejlreaktion(5,k,<:stoptabel init:>,0); 3 17794 operatør_stop(i,0):= i; 3 17795 for k:= 1,2,3 do 3 17796 operatør_stop(i,k):= fil(j).iaf(k+1); 3 17797 ant_i_opkø(i):= 0; 3 17798 end; 2 17799 2 17799 tofrom(operatørmaske,ingen_operatører,op_maske_lgd); 2 17800 for i:= 0 step 1 until max_antal_operatører do op_talevej(i):= 0; 2 17801 for i:= 0 step 1 until max_antal_taleveje do tv_operatør(i):= 0; 2 17802 sidste_tv_brugt:= max_antal_taleveje; 2 17803 2 17803 for i:= 1 step 1 until max_antal_operatører*(opk_alarm_tab_lgd//2) do 2 17804 opk_alarm(i):= 0; 2 17805 for i:= 1 step 1 until max_antal_operatører do 2 17806 begin 3 17807 integer array field tab; 3 17808 3 17808 k:= læsfil(tf_alarmlgd,i,j); 3 17809 if k<>0 then fejlreaktion(5,k,<:alarmlængde init:>,0); 3 17810 tab:= (i-1)*opk_alarm_tab_lgd; 3 17811 opk_alarm.tab.alarm_lgd:= fil(j).iaf(1); 3 17812 opk_alarm.tab.alarm_start:= 0.0; 3 17813 end; 2 17814 2 17814 op_spool_kilde:= 2; 2 17815 op_spool_tid := 6; 2 17816 op_spool_text := 6; 2 17817 begin 3 17818 long array field laf1, laf2; 3 17819 laf2:= 4; laf1:= 0; 3 17820 op_spool_buf.laf1(1):= long<::>; 3 17821 tofrom(op_spool_buf.laf2,op_spool_buf.laf1, 3 17822 op_spool_postantal*op_spool_postlgd-4); 3 17823 end; 2 17824 2 17824 k:=læsfil(1033,1,j); 2 17825 systime(1,0.0,r); 2 17826 if k<>0 then fejlreaktion(5,k,<:CQF-tabel init:>,0); 2 17827 for i:= 1 step 1 until max_cqf do 2 17828 begin 3 17829 ref:= (i-1)*cqf_lgd; iaf:= (i-1)*8; 3 17830 tofrom(cqf_tabel.ref,fil(j).iaf,8); 3 17831 cqf_tabel.ref.cqf_næste_tid:= 3 17832 (if cqf_tabel.ref.cqf_bus > 0 then (r + 5*60.0) else real<::>); 3 17833 cqf_tabel.ref.cqf_ok_tid:= real<::>; 3 17834 end; 2 17835 op_cqf_tab_ændret:= true; 2 17836 2 17836 laf:= raf:= 0; 2 17837 open(z_tv_in,8,taleswitch_in_navn,1 shift 21 + 1 shift 9); 2 17838 i:= monitor(8)reserve_process:(z_tv_in,0,ia); 2 17839 j:= 1; 2 17840 if i<>0 then 2 17841 fejlreaktion(4,i,string taleswitch_in_navn.raf(increase(j)),1); 2 17842 open(z_tv_out,4 shift 12 + 8,taleswitch_out_navn,1 shift 9); 2 17843 i:= monitor(8)reserve_process:(z_tv_in,0,ia); 2 17844 j:= 1; 2 17845 if i<>0 then 2 17846 fejlreaktion(4,i,string taleswitch_out_navn.raf(increase(j)),1); 2 17847 2 17847 ia(1):= 3; <*canonical*> 2 17848 ia(2):= 0; <*no echo*> 2 17849 ia(3):= 0; <*prompt*> 2 17850 ia(4):= 2; <*timeout*> 2 17851 setcspterm(taleswitch_in_navn.laf,ia); 2 17852 setcspterm(taleswitch_out_navn.laf,ia); 2 17853 2 17853 cs_op:= next_semch; 2 17854 2 17854 <*+3*>skriv_new_sem(out,3,cs_op,<:cs-op(hovedmodul):>); 2 17855 <*-3*> 2 17856 2 17856 cs_op_retur:= next_semch; 2 17857 2 17857 <*+3*>skriv_new_sem(out,3,cs_op_retur,<:cs_op_retur:>); 2 17858 <*-3*> 2 17859 2 17859 i:= nextcoru(200,<*ident*> 2 17860 10,<*prioitet*> 2 17861 true<*test_maske*>); 2 17862 2 17862 j:= new_activity( i, 2 17863 0, 2 17864 h_operatør); 2 17865 2 17865 <*+3*>skriv_newactivity(out,i,j); 2 17866 <*-3*> 2 17867 \f 2 17867 message operatør_initialisering side 2 - 810520/hko; 2 17868 2 17868 for k:= 1 step 1 until max_antal_operatører do 2 17869 begin 3 17870 ref:= (k-1)*8; 3 17871 open(z_op(k),8,terminal_navn.ref,1 shift 21 +1 shift 9); 3 17872 i:= monitor(4) processaddress:(z_op(k),0,ia); 3 17873 ref:=k*terminal_beskr_længde; 3 17874 if i = 0 then 3 17875 begin 4 17876 fejlreaktion(3<*programfejl*>,k,<:skærm eksisterer ikke:>,1); 4 17877 terminal_tab.ref.terminal_tilstand:= 4 shift 21; 4 17878 end 3 17879 else 3 17880 begin 4 17881 terminal_tab.ref.terminal_tilstand:= 7 shift 21;<*ej knyttet*> 4 17882 end; 3 17883 3 17883 cs_operatør(k):= next_semch; 3 17884 <*+3*>skriv_new_sem(out,3,cs_operatør(k),<:cs-operatør( ):>); 3 17885 <*-3*> 3 17886 3 17886 cs_op_fil(k):= nextsemch; 3 17887 <*+3*> skriv_new_sem(out,3,cs_op_fil(k),<:cs-op-fil( ):>); 3 17888 <*-3*> 3 17889 signalch(cs_op_fil(k),nextop(filoplængde),op_optype); 3 17890 3 17890 i:= next_coru(200+k,<*ident*> 3 17891 10,<*prioitet*> 3 17892 true<*testmaske*>); 3 17893 j:= new_activity( i, 3 17894 0, 3 17895 operatør,k); 3 17896 3 17896 <*+3*>skriv_newactivity(out,i,j); 3 17897 <*-3*> 3 17898 end; 2 17899 2 17899 cs_cqf:= next_semch; 2 17900 <*+3*>skriv_new_sem(out,3,cs_cqf,<:cs-cqf:>); 2 17901 <*-3*> 2 17902 2 17902 signalch(cs_cqf,nextop(60),true); 2 17903 2 17903 i:= next_coru(292, <*ident*> 2 17904 10, <*prioritet*> 2 17905 true <*testmaske*>); 2 17906 j:= new_activity( i, 2 17907 0, 2 17908 op_cqftest); 2 17909 <*+3*>skriv_new_activity(out,i,j); 2 17910 <*-3*> 2 17911 2 17911 cs_op_spool:= next_semch; 2 17912 <*+3*>skriv_new_sem(out,3,cs_op_spool,<:cs-op-spool:>); 2 17913 <*-3*> 2 17914 2 17914 cs_op_medd:= next_semch; 2 17915 <*+3*>skriv_new_sem(out,3,cs_op_medd,<:cs-op-medd:>); 2 17916 <*-3*> 2 17917 2 17917 ss_op_spool_tomme:= next_sem; 2 17918 <*+3*>skriv_new_sem(out,2,ss_op_spool_tomme,<:ss-op-spool-tomme:>); 2 17919 <*-3*> 2 17920 for i:= 1 step 1 until op_spool_postantal do signal(ss_op_spool_tomme); 2 17921 2 17921 ss_op_spool_fulde:= next_sem; 2 17922 <*+3*>skriv_new_sem(out,2,ss_op_spool_fulde,<:ss-op-spool-fulde:>); 2 17923 <*-3*> 2 17924 2 17924 signalch(cs_op_medd,nextop(data+op_spool_postlgd),gen_optype); 2 17925 2 17925 i:= next_coru(293, <*ident*> 2 17926 10, <*prioritet*> 2 17927 true <*testmaske*>); 2 17928 j:= new_activity( i, 2 17929 0, 2 17930 op_spool); 2 17931 <*+3*>skriv_new_activity(out,i,j); 2 17932 <*-3*> 2 17933 2 17933 i:= next_coru(294, <*ident*> 2 17934 10, <*prioritet*> 2 17935 true <*testmaske*>); 2 17936 j:= new_activity( i, 2 17937 0, 2 17938 op_medd); 2 17939 <*+3*>skriv_new_activity(out,i,j); 2 17940 <*-3*> 2 17941 2 17941 cs_op_iomedd:= next_semch; 2 17942 <*+3*>skriv_new_sem(out,3,cs_op_iomedd,<:cs-op-iomedd:>); 2 17943 <*-3*> 2 17944 2 17944 bs_opk_alarm:= next_sem; 2 17945 <*+3*>skriv_new_sem(out,1,bs_opk_alarm,<:bs-opk-alarm:>); 2 17946 <*-3*> 2 17947 2 17947 cs_opk_alarm:= next_semch; 2 17948 <*+3*>skriv_new_sem(out,3,cs_opk_alarm,<:cs-opk-alarm:>); 2 17949 <*-3*> 2 17950 2 17950 cs_opk_alarm_ur:= next_semch; 2 17951 <*+3*>skriv_new_sem(out,3,cs_opk_alarm_ur,<:cs-opk-alarm-ur:>); 2 17952 <*-3*> 2 17953 2 17953 cs_opk_alarm_ur_ret:= next_semch; 2 17954 <*+3*>skriv_new_sem(out,3,cs_opk_alarm_ur_ret,<:cs-opk-alarm-ur-ret:>); 2 17955 <*-3*> 2 17956 2 17956 cs_tvswitch_adgang:= next_semch; 2 17957 <*+3*>skriv_new_sem(out,3,cs_tvswitch_adgang,<:cs-tvswitch-adgang:>); 2 17958 <*-3*> 2 17959 2 17959 cs_tv_switch_input:= next_semch; 2 17960 <*+3*>skriv_new_sem(out,3,cs_tv_switch_input,<:cs-tvswitch-input:>); 2 17961 <*-3*> 2 17962 2 17962 cs_tv_switch_adm:= next_semch; 2 17963 <*+3*>skriv_new_sem(out,3,cs_tv_switch_adm,<:cs-tvswitch-adm:>); 2 17964 <*-3*> 2 17965 2 17965 cs_talevejsswitch:= next_semch; 2 17966 <*+3*>skriv_new_sem(out,3,cs_talevejsswitch,<:cs-talevejsswitch:>); 2 17967 <*-3*> 2 17968 2 17968 signalch(cs_op_iomedd,nextop(60),gen_optype); 2 17969 2 17969 iaf:= nextop(data+128); 2 17970 if testbit22 then 2 17971 signal_ch(cs_tv_switch_adgang,iaf,op_optype) 2 17972 else 2 17973 begin 3 17974 startoperation(iaf,298,cs_tv_switch_adgang,'I' shift 12 + 44); 3 17975 signal_ch(cs_talevejsswitch,iaf,op_optype); 3 17976 end; 2 17977 2 17977 i:= next_coru(295, <*ident*> 2 17978 8, <*prioritet*> 2 17979 true <*testmaske*>); 2 17980 j:= new_activity( i, 2 17981 0, 2 17982 alarmur); 2 17983 <*+3*>skriv_new_activity(out,i,j); 2 17984 <*-3*> 2 17985 2 17985 signal_ch(cs_opk_alarm_ur_ret,nextop(data),op_optype); 2 17986 2 17986 i:= next_coru(296, <*ident*> 2 17987 8, <*prioritet*> 2 17988 true <*testmaske*>); 2 17989 j:= new_activity( i, 2 17990 0, 2 17991 opkaldsalarmer); 2 17992 <*+3*>skriv_new_activity(out,i,j); 2 17993 <*-3*> 2 17994 2 17994 i:= next_coru(297, <*ident*> 2 17995 3, <*prioritet*> 2 17996 true <*testmaske*>); 2 17997 j:= new_activity( i, 2 17998 0, 2 17999 tv_switch_input); 2 18000 <*+3*>skriv_new_activity(out,i,j); 2 18001 <*-3*> 2 18002 2 18002 for i:= 1,2 do 2 18003 signalch(cs_tvswitch_input,nextop(data+256),op_optype); 2 18004 2 18004 i:= next_coru(298, <*ident*> 2 18005 20, <*prioritet*> 2 18006 true <*testmaske*>); 2 18007 j:= new_activity( i, 2 18008 0, 2 18009 tv_switch_adm); 2 18010 <*+3*>skriv_new_activity(out,i,j); 2 18011 <*-3*> 2 18012 2 18012 i:= next_coru(299, <*ident*> 2 18013 3, <*prioritet*> 2 18014 true <*testmaske*>); 2 18015 j:= new_activity( i, 2 18016 0, 2 18017 talevejsswitch); 2 18018 <*+3*>skriv_new_activity(out,i,j); 2 18019 <*-3*> 2 18020 \f 2 18020 message garage_initialisering side 1 - 810521/hko; 2 18021 2 18021 cs_gar:= next_semch; 2 18022 <*+3*>skriv_new_sem(out,3,cs_gar,<:cs-gar(hovedmodul):>); 2 18023 <*-3*> 2 18024 2 18024 i:= next_coru(300,<*ident*> 2 18025 10,<*prioritet*> 2 18026 true<*test_maske*>); 2 18027 2 18027 j:= new_activity( i, 2 18028 0, 2 18029 h_garage); 2 18030 2 18030 <*+3*>skriv_newactivity(out,i,j); 2 18031 <*-3*> 2 18032 2 18032 for k:= 1 step 1 until max_antal_garageterminaler do 2 18033 begin 3 18034 ref:= (k-1)*8; 3 18035 open(z_gar(k),8,garage_terminal_navn.raf,1 shift 21 + 1 shift 9); 3 18036 ref:= (max_antal_operatører+k)*terminal_beskr_længde; 3 18037 i:=monitor(4)process address:(z_gar(k),0,ia); 3 18038 if i = 0 then 3 18039 begin 4 18040 fejlreaktion(4<*monitor result*>,k,<:garageterminal eksisterer ikke:>,1); 4 18041 terminal_tab.ref.terminal_tilstand:= 4 shift 21; 4 18042 end 3 18043 else 3 18044 begin 4 18045 terminal_tab.ref.terminal_tilstand:= 4 18046 if garage_auto_include(k) then 0 else 7 shift 21; 4 18047 if garage_auto_include(k) then 4 18048 monitor(8)reserve:(z_gar(k),0,ia); 4 18049 end; 3 18050 cs_garage(k):= next_semch; 3 18051 <*+3*>skriv_new_sem(out,3,cs_garage(k),<:cs-garage( ):>); 3 18052 <*-3*> 3 18053 i:= next_coru(300+k,<*ident*> 3 18054 10,<*prioritet*> 3 18055 true <*testmaske*>); 3 18056 j:= new_activity( i, 3 18057 0, 3 18058 garage,k); 3 18059 3 18059 <*+3*>skriv_newactivity(out,i,j); 3 18060 <*-3*> 3 18061 3 18061 end; 2 18062 \f 2 18062 message radio_initialisering side 1 - 820301/hko; 2 18063 2 18063 cs_rad:= next_semch; 2 18064 <*+3*>skriv_new_sem(out,3,cs_rad,<:cs_rad(h_mod):>); 2 18065 <*-3*> 2 18066 2 18066 i:= next_coru(400,<*ident*> 2 18067 10,<*prioritet*> 2 18068 true<*test_maske*>); 2 18069 j:= new_activity( i, 2 18070 0, 2 18071 h_radio); 2 18072 <*+3*>skriv_newactivity(out,i,j); 2 18073 <*-3*> 2 18074 2 18074 opkalds_kø_ledige:= max_antal_mobilopkald; 2 18075 nødopkald_brugt:= 0; 2 18076 læsfil(1034,1,i); 2 18077 tofrom(radio_områdetabel,fil(i),max_antal_områder*2); 2 18078 2 18078 opkald_meldt:= opkaldskø_postlængde - op_maske_lgd; 2 18079 for i:= system(3,j,opkaldskø) step 1 until j do 2 18080 opkaldskø(i):= 0; 2 18081 første_frie_opkald:=opkaldskø_postlængde; 2 18082 første_opkald:=sidste_opkald:= 2 18083 første_nødopkald:=sidste_nødopkald:=j:=0; 2 18084 2 18084 for i:=1 step 1 until max_antal_mobil_opkald -1 do 2 18085 begin 3 18086 ref:=i*opkaldskø_postlængde; 3 18087 opkaldskø.ref(1):=j:=j shift 12 +ref +opkaldskø_postlængde; 3 18088 end; 2 18089 ref:=ref+opkaldskø_postlængde; 2 18090 opkaldskø.ref(1):=j shift 12; 2 18091 2 18091 for ref:= 0 step 512 until (max_linienr//768*512) do 2 18092 begin 3 18093 i:= læs_fil(1035,ref//512+1,j); 3 18094 if i <> 0 then 3 18095 fejlreaktion(5<*læs_fil*>,i,<:liniefordelingstabel:>,0); 3 18096 tofrom(radio_linietabel.ref,fil(j), 3 18097 if (((max_linienr+1 - (ref//2*3))+2)//3*2) > 512 then 512 3 18098 else ((max_linienr+1 - (ref//2*3))+2)//3*2); 3 18099 end; 2 18100 2 18100 for i:= system(3,j,kanal_tab) step 1 until j do 2 18101 kanal_tab(i):= 0; 2 18102 kanal_tilstand:= 2; 2 18103 kanal_id1:= 4; 2 18104 kanal_id2:= 6; 2 18105 kanal_spec:= 8; 2 18106 kanal_alt_id1:= 10; 2 18107 kanal_alt_id2:= 12; 2 18108 kanal_mon_maske:= 12; 2 18109 kanal_alarm:= kanal_mon_maske+tv_maske_lgd; 2 18110 2 18110 for i:= 1 step 1 until max_antal_kanaler do 2 18111 begin 3 18112 ref:= (i-1)*kanalbeskrlængde; 3 18113 sæthexciffer(kanal_tab.ref,3,15); 3 18114 if kanal_id(i) shift (-5) extract 3 = 2 or 3 18115 kanal_id(i) shift (-5) extract 3 = 3 and 3 18116 radio_id(kanal_id(i) extract 5)<=3 3 18117 then 3 18118 begin 4 18119 sætbiti(kanal_tab.ref.kanal_tilstand,11,1); 4 18120 sætbiti(kanal_tab.ref.kanal_tilstand,10,1); 4 18121 end; 3 18122 end; 2 18123 tofrom(opkaldsflag,alle_operatører,op_maske_lgd); 2 18124 tofrom(samtaleflag,ingen_operatører,op_maske_lgd); 2 18125 tofrom(hookoff_maske,ingen_taleveje,tv_maske_lgd); 2 18126 optaget_flag:= 0; 2 18127 \f 2 18127 message radio_initialisering side 2 - 810524/hko; 2 18128 2 18128 bs_mobil_opkald:= next_sem; 2 18129 2 18129 <*+3*>skriv_new_sem(out,1,bs_mobil_opkald,<:bs_mobil_opkald:>); 2 18130 <*-3*> 2 18131 2 18131 bs_opkaldskø_adgang:= next_sem; 2 18132 signal_bin(bs_opkaldskø_adgang); 2 18133 2 18133 <*+3*>skriv_new_sem(out,1,bs_opkaldskø_adgang,<:bs_opk.kø_adgang:>); 2 18134 <*-3*> 2 18135 2 18135 cs_radio_medd:=next_semch; 2 18136 signal_ch(cs_radio_medd,nextop(data+6),gen_optype or rad_optype); 2 18137 2 18137 <*+3*>skriv_new_sem(out,3,cs_radio_medd,<:cs_radio_medd:>); 2 18138 <*-3*> 2 18139 2 18139 i:= next_coru(403, 2 18140 5,<*prioritet*> 2 18141 true<*testmaske*>); 2 18142 2 18142 j:= new_activity( i, 2 18143 0, 2 18144 radio_medd_opkald); 2 18145 2 18145 <*+3*>skriv_newactivity(out,i,j); 2 18146 <*-3*> 2 18147 2 18147 cs_radio_adm:= nextsemch; 2 18148 <*+3*>skriv_new_sem(out,3,cs_radio_adm,<:cs_radio_adm:>); 2 18149 <*-3*> 2 18150 2 18150 i:= next_coru(404, 2 18151 10, 2 18152 true); 2 18153 j:= new_activity(i, 2 18154 0, 2 18155 radio_adm,next_op(data+radio_op_længde)); 2 18156 <*+3*>skriv_new_activity(out,i,j); 2 18157 <*-3*> 2 18158 \f 2 18158 message radio_initialisering side 3 - 810526/hko; 2 18159 for k:= 1 step 1 until max_antal_taleveje do 2 18160 begin 3 18161 3 18161 cs_radio(k):=next_semch; 3 18162 3 18162 <*+3*>skriv_new_sem(out,3,cs_radio(k),<:cs_radio( ):>); 3 18163 <*-3*> 3 18164 3 18164 bs_talevej_udkoblet(k):= nextsem; 3 18165 <*+3*>skriv_new_sem(out,1,bs_talevej_udkoblet(k),<:bs_talevej_udkoblet( ):>); 3 18166 <*-3*> 3 18167 3 18167 i:=next_coru(410+k, 3 18168 10, 3 18169 true); 3 18170 3 18170 j:=new_activity( i, 3 18171 0, 3 18172 radio,k,next_op(data + radio_op_længde)); 3 18173 3 18173 <*+3*>skriv_newactivity(out,i,j); 3 18174 <*-3*> 3 18175 end; 2 18176 2 18176 cs_radio_pulje:=next_semch; 2 18177 2 18177 <*+3*>skriv_new_sem(out,3,cs_radio_pulje,<:cs-radio-pulje:>); 2 18178 <*-3*> 2 18179 2 18179 for i:= 1 step 1 until radiopulje_størrelse do 2 18180 signal_ch(cs_radio_pulje, 2 18181 next_op(60), 2 18182 gen_optype or rad_optype); 2 18183 2 18183 cs_radio_kø:= next_semch; 2 18184 2 18184 <*+3*>skriv_new_sem(out,3,cs_radio_kø,<:cs_radio_kø:>); 2 18185 <*-3*> 2 18186 2 18186 mobil_opkald_aktiveret:= true; 2 18187 \f 2 18187 message radio_initialisering side 4 - 810522/hko; 2 18188 2 18188 laf:=raf:=0; 2 18189 2 18189 open(z_fr_in,8,radio_fr_navn,radio_giveup); 2 18190 i:= monitor(8)reserve process:(z_fr_in,0,ia); 2 18191 j:=1; 2 18192 if i <> 0 then 2 18193 fejlreaktion(4<*monitor resultat*>,i, 2 18194 string radio_fr_navn.raf(increase(j)),1); 2 18195 open(z_fr_out,4 shift 12 + 8,radio_fr_navn,radio_giveup); 2 18196 i:= monitor(8)reserve process:(z_fr_out,0,ia); 2 18197 j:=1; 2 18198 if i <> 0 then 2 18199 fejlreaktion(4,i,string radio_fr_navn.raf(increase(j)),1); 2 18200 ia(1):= 3 <*canonical*>; 2 18201 ia(2):= 0 <*no echo*>; 2 18202 ia(3):= 0 <*prompt*>; 2 18203 ia(4):= 5 <*timeout*>; 2 18204 setcspterm(radio_fr_navn.laf,ia); 2 18205 2 18205 open(z_rf_in,8,radio_rf_navn,radio_giveup); 2 18206 i:= monitor(8)reserve process:(z_rf_in,0,ia); 2 18207 j:= 1; 2 18208 if i <> 0 then 2 18209 fejlreaktion(4<*monitor resultat*>,i, 2 18210 string radio_rf_navn.raf(increase(j)),1); 2 18211 open(z_rf_out,4 shift 12 + 8,radio_rf_navn,radio_giveup); 2 18212 i:= monitor(8)reserve process:(z_rf_out,0,ia); 2 18213 j:= 1; 2 18214 if i <> 0 then 2 18215 fejlreaktion(4,i,string radio_rf_navn.raf(increase(j)),1); 2 18216 ia(1):= 3 <*canonical*>; 2 18217 ia(2):= 0 <*no echo*>; 2 18218 ia(3):= 0 <*prompt*>; 2 18219 ia(4):= 5 <*timeout*>; 2 18220 setcspterm(radio_rf_navn.laf,ia); 2 18221 \f 2 18221 message radio_initialisering side 5 - 810521/hko; 2 18222 for k:= 1 step 1 until max_antal_kanaler do 2 18223 begin 3 18224 3 18224 ss_radio_aktiver(k):=next_sem; 3 18225 <*+3*>skriv_new_sem(out,2,ss_radio_aktiver(k),<:ss_rad_aktiver( ):>); 3 18226 <*-3*> 3 18227 3 18227 ss_samtale_nedlagt(k):=next_sem; 3 18228 <*+3*>skriv_new_sem(out,2,ss_samtale_nedlagt(k),<:ss_samtale_nedlagt( ):>); 3 18229 <*-3*> 3 18230 end; 2 18231 2 18231 cs_radio_ind:= next_semch; 2 18232 <*+3*>skriv_new_sem(out,3,cs_radio_ind,<:cs_radio_ind:>); 2 18233 <*-3*> 2 18234 2 18234 i:= next_coru(401,<*ident radio_ind*> 2 18235 3, <*prioritet*> 2 18236 true <*testmaske*>); 2 18237 j:= new_activity( i, 2 18238 0, 2 18239 radio_ind,next_op(data + 64)); 2 18240 2 18240 <*+3*>skriv_newactivity(out,i,j); 2 18241 <*-3*> 2 18242 2 18242 cs_radio_ud:=next_semch; 2 18243 <*+3*>skriv_new_sem(out,3,cs_radio_ud,<:cs_radio_ud:>); 2 18244 <*-3*> 2 18245 2 18245 i:= next_coru(402,<*ident radio_out*> 2 18246 10,<*prioritet*> 2 18247 true <*testmaske*>); 2 18248 j:= new_activity( i, 2 18249 0, 2 18250 radio_ud,next_op(data + 64)); 2 18251 2 18251 <*+3*>skriv_newactivity(out,i,j); 2 18252 <*-3*> 2 18253 \f 2 18253 message vogntabel initialisering side 1 - 820301; 2 18254 2 18254 sidste_bus:= sidste_linie_løb:= 0; 2 18255 2 18255 tf_vogntabel:= 1 shift 10 + 2; 2 18256 tf_gruppedef:= ia(4):= 1 shift 10 +3; 2 18257 tf_gruppeidenter:= 1 shift 10 +6; 2 18258 tf_springdef:= 1 shift 10 +7; 2 18259 hent_fil_dim(ia); 2 18260 max_antal_i_gruppe:= ia(2); 2 18261 if ia(1) < max_antal_grupper then 2 18262 max_antal_grupper:= ia(1); 2 18263 2 18263 <* initialisering af interne vogntabeller *> 2 18264 begin 3 18265 long array field laf1,laf2; 3 18266 integer array fdim(1:8); 3 18267 zone z(128,1,stderror); 3 18268 integer busnr,i,j,zi,s,pant,ll_nr,b_nr,res,tegn,g_nr,o_nr; 3 18269 long omr,garageid; 3 18270 integer field ll, bn; 3 18271 boolean binær, test24; 3 18272 3 18272 ll:= 2; bn:= 4; 3 18273 3 18273 <* nulstil tabellerne *> 3 18274 laf1:= -2; 3 18275 laf2:= 2; 3 18276 bustabel1.laf2(0):= 3 18277 bustabel.laf2(0):= bustilstand.laf2(0):= linie_løb_tabel.laf2(0):= 3 18278 bus_indeks.laf2(0):= linie_løb_indeks.laf2(0):= extend 0; 3 18279 tofrom(bustabel.laf2,bustabel.laf1,(max_antal_busser+1)*2-4); 3 18280 tofrom(bustabel1.laf2,bustabel1.laf1,(max_antal_busser+1)*2-4); 3 18281 tofrom(linie_løb_tabel.laf2,linie_løb_tabel.laf1,(max_antal_linie_løb+1)*2-4); 3 18282 tofrom(busindeks.laf2,busindeks.laf1,max_antal_linie_løb-4); 3 18283 tofrom(linie_løb_indeks.laf2,linie_løb_indeks.laf1,max_antal_busser-4); 3 18284 tofrom(bustilstand.laf2,bustilstand.laf1,max_antal_busser-4); 3 18285 \f 3 18285 message vogntabel initialisering side 1a - 810505/cl; 3 18286 3 18286 3 18286 <* initialisering af intern busnummertabel *> 3 18287 open(z,4,<:busnumre:>,0); 3 18288 busnr:= -1; 3 18289 read(z,busnr); 3 18290 while busnr > 0 do 3 18291 begin 4 18292 if busnr < bustabel(sidste_bus) extract 14 or busnr >= 1 shift 14 then 4 18293 fejlreaktion(10,busnr,<:fejl i busnrfil:>,0); 4 18294 sidste_bus:= sidste_bus+1; 4 18295 if sidste_bus > max_antal_busser then 4 18296 fejlreaktion(10,busnr,<:for mange busser i busnrfil:>,0); 4 18297 repeatchar(z); readchar(z,tegn); 4 18298 garageid:= extend 0; binær:= false; omr:= extend 0; 4 18299 g_nr:= o_nr:= 0; 4 18300 if tegn='!' then 4 18301 begin 5 18302 binær:= true; 5 18303 readchar(z,tegn); 5 18304 end; 4 18305 if tegn='/' then <*garageid*> 4 18306 begin 5 18307 readchar(z,tegn); repeatchar(z); 5 18308 if '0'<=tegn and tegn<='9' then 5 18309 begin 6 18310 read(z,g_nr); if g_nr<1 or g_nr>max_antal_operatører then g_nr:= 0; 6 18311 if g_nr<>0 then garageid:=bpl_navn(g_nr); 6 18312 if g_nr<>0 and garageid=long<::> then 6 18313 begin 7 18314 fejlreaktion(10,busnr,<:ukendt garageidentifikation for bus:>,1); 7 18315 g_nr:= 0; 7 18316 end; 6 18317 end 5 18318 else 5 18319 begin 6 18320 while ('A'<= tegn and tegn <='Å') or ('0'<=tegn and tegn<='9') do 6 18321 begin 7 18322 garageid:= garageid shift 8 + tegn; 7 18323 readchar(z,tegn); 7 18324 end; 6 18325 while garageid shift (-40) extract 8 = 0 do 6 18326 garageid:= garageid shift 8; 6 18327 g_nr:= find_bpl(garageid); 6 18328 if g_nr=0 then 6 18329 fejlreaktion(10,busnr,<:ukendt garageidentifikation for bus:>,1); 6 18330 end; 5 18331 repeatchar(z); readchar(z,tegn); 5 18332 end; 4 18333 if tegn=';' then 4 18334 begin 5 18335 readchar(z,tegn); repeatchar(z); 5 18336 if '0'<=tegn and tegn<='9' then 5 18337 begin 6 18338 read(z,o_nr); 6 18339 if o_nr<1 or max_antal_områder<o_nr then o_nr:= 0; 6 18340 if o_nr<>0 then omr:= område_navn(o_nr); 6 18341 if o_nr<>0 and omr=long<::> then 6 18342 begin 7 18343 fejlreaktion(10,busnr,<:ukendt områdeidentifikation for bus:>,1); 7 18344 o_nr:= 0; 7 18345 end; 6 18346 end 5 18347 else 5 18348 begin 6 18349 while ('A'<=tegn and tegn<='Å') or ('0'<=tegn and tegn<='9') do 6 18350 begin 7 18351 omr:= omr shift 8 + tegn; 7 18352 readchar(z,tegn); 7 18353 end; 6 18354 while omr shift (-40) extract 8 = 0 do 6 18355 omr:= omr shift 8; 6 18356 if omr=long<:TCT:> then omr:=long<:KBH:>; 6 18357 i:= 1; 6 18358 while i<=max_antal_områder and o_nr=0 do 6 18359 begin 7 18360 if omr=område_navn(i) then o_nr:= i; 7 18361 i:= i+1; 7 18362 end; 6 18363 if o_nr=0 then 6 18364 fejlreaktion(10,busnr,<:ukendt områdeidentifikation for bus:>,1); 6 18365 end; 5 18366 repeatchar(z); readchar(z,tegn); 5 18367 end; 4 18368 if o_nr=0 then o_nr:= 3; 4 18369 bustabel (sidste_bus):= g_nr shift 14 + busnr; 4 18370 bustabel1(sidste_bus):= (binær extract 1) shift 23 + o_nr; 4 18371 4 18371 busnr:= -1; 4 18372 read(z,busnr); 4 18373 end; 3 18374 close(z,true); 3 18375 \f 3 18375 message vogntabel initialisering side 2 - 820301/cl; 3 18376 3 18376 <* initialisering af intern linie/løbs-tabel og bus-indekstabel *> 3 18377 test24:= testbit24; 3 18378 testbit24:= false; 3 18379 i:= 1; 3 18380 s:= læsfil(tf_vogntabel,i,zi); 3 18381 if s<>0 then fejlreaktion(5,s,<:vogntabelinit:>,0); 3 18382 while fil(zi).bn<>0 do 3 18383 begin 4 18384 if fil(zi).ll <> 0 then 4 18385 begin <* indsæt linie/løb *> 5 18386 res:= binærsøg(sidste_linie_løb,linie_løb_tabel(j) - 5 18387 fil(zi).ll,j); 5 18388 if res < 0 then j:= j+1; 5 18389 if res = 0 then fejlreaktion(10,fil(zi).bn, 5 18390 <:dobbeltregistrering i vogntabel:>,1) 5 18391 else 5 18392 begin 6 18393 o_nr:= fil(zi).bn shift (-14) extract 8; 6 18394 b_nr:= søg_omr_bus(fil(zi).bn extract 14,ll_nr,g_nr,o_nr,s,tegn); 6 18395 if b_nr<0 then fejlreaktion(10,fil(zi).bn extract 14, 6 18396 <:ukendt bus i vogntabel:>,1) 6 18397 else 6 18398 begin 7 18399 if sidste_linie_løb >= max_antal_linie_løb then 7 18400 fejlreaktion(10,fil(zi).bn extract 14, 7 18401 <:for mange linie/løb i vogntabel:>,0); 7 18402 for ll_nr:= sidste_linie_løb step (-1) until j do 7 18403 begin 8 18404 linie_løb_tabel(ll_nr+1):= linie_løb_tabel(ll_nr); 8 18405 bus_indeks(ll_nr+1):= bus_indeks(ll_nr); 8 18406 end; 7 18407 linie_løb_tabel(j):= fil(zi).ll; 7 18408 bus_indeks(j):= false add b_nr; 7 18409 sidste_linie_løb:= sidste_linie_løb + 1; 7 18410 end; 6 18411 end; 5 18412 end; 4 18413 i:= i+1; 4 18414 s:= læsfil(tf_vogntabel,i,zi); 4 18415 if s<>0 then fejlreaktion(5,s,<:vogntabelinit:>,0); 4 18416 end; 3 18417 \f 3 18417 message vogntabel initialisering side 3 - 810428/cl; 3 18418 3 18418 <* initialisering af intern linie/løb-indekstabel *> 3 18419 for ll_nr:= 1 step 1 until sidste_linie_løb do 3 18420 linie_løb_indeks(bus_indeks(ll_nr) extract 12):= false add ll_nr; 3 18421 3 18421 <* gem ny vogntabel i tabelfil *> 3 18422 for i:= 1 step 1 until sidste_bus do 3 18423 begin 4 18424 s:= skriv_fil(tf_vogntabel,i,zi); 4 18425 if s<>0 then fejlreaktion(6,s,<:vogntabelinit:>,0); 4 18426 fil(zi).bn:= bustabel(i) extract 14 add 4 18427 (bustabel1(i) extract 8 shift 14); 4 18428 fil(zi).ll:= linie_løb_tabel(linie_løb_indeks(i) extract 12); 4 18429 end; 3 18430 fdim(4):= tf_vogntabel; 3 18431 hent_fil_dim(fdim); 3 18432 pant:= fdim(3) * (256//fdim(2)); 3 18433 for i:= sidste_bus+1 step 1 until pant do 3 18434 begin 4 18435 s:= skriv_fil(tf_vogntabel,i,zi); 4 18436 if s<>0 then fejlreaktion(6,s,<:vogntabelinit:>,0); 4 18437 fil(zi).ll:= fil(zi).bn:= 0; 4 18438 end; 3 18439 3 18439 <* initialisering/nulstilling af gruppetabeller *> 3 18440 for i:= 1 step 1 until max_antal_grupper do 3 18441 begin 4 18442 s:= læs_fil(tf_gruppeidenter,i,zi); 4 18443 if s <> 0 then fejlreaktion(5,s,<:gruppetabelinit:>,0); 4 18444 gruppetabel(i):= fil(zi).ll; 4 18445 end; 3 18446 for i:= 1 step 1 until max_antal_gruppeopkald do 3 18447 gruppeopkald(i,1):= gruppeopkald(i,2):= 0; 3 18448 testbit24:= test24; 3 18449 end; 2 18450 2 18450 2 18450 <*+2*> 2 18451 <**> if testbit40 then p_vogntabel(out); 2 18452 <**> if testbit43 then p_gruppetabel(out); 2 18453 <*-2*> 2 18454 2 18454 message vogntabel initialisering side 3a -920517/cl; 2 18455 2 18455 <* initialisering for vt_log *> 2 18456 2 18456 v_tid:= 4; 2 18457 v_kode:= 6; 2 18458 v_bus:= 8; 2 18459 v_ll1:= 10; 2 18460 v_ll2:= 12; 2 18461 v_tekst:= 6; 2 18462 for i:= 1 step 1 until 4 do vt_logdisc(i):= 0; 2 18463 for i:= 1 step 1 until 10 do vt_log_tail(i):= 0; 2 18464 if vt_log_aktiv then 2 18465 begin 3 18466 integer i; 3 18467 real t; 3 18468 integer array field iaf; 3 18469 integer array 3 18470 tail(1:10),ia(1:10),chead(1:20); 3 18471 3 18471 open(zvtlog,4,<:vtlogpool:>,0); close(zvtlog,true); 3 18472 i:= monitor(42)lookup_entry:(zvtlog,0,tail); 3 18473 if i=0 then 3 18474 i:=monitor(52)create_areaproc:(zvtlog,0,ia); 3 18475 if i=0 then 3 18476 begin 4 18477 i:=monitor(8)reserve_process:(zvtlog,0,ia); 4 18478 monitor(64)remove_areaproc:(zvtlog,0,ia); 4 18479 end; 3 18480 3 18480 if i=0 then 3 18481 begin 4 18482 iaf:= 2; 4 18483 tofrom(vt_logdisc,tail.iaf,8); 4 18484 i:=slices(vt_logdisc,0,tail,chead); 4 18485 if i > (-2048) then 4 18486 begin 5 18487 vt_log_slicelgd:= chead(15); 5 18488 i:= 0; 5 18489 end; 4 18490 end; 3 18491 3 18491 if i=0 then 3 18492 begin 4 18493 open(zvtlog,4,<:vtlogklar:>,0); close(zvtlog,true); 4 18494 i:=monitor(42)lookup_entry:(zvtlog,0,tail); 4 18495 if i=0 then 4 18496 i:= monitor(52)create_areapproc:(zvtlog,0,ia); 4 18497 if i=0 then 4 18498 begin 5 18499 i:=monitor(8)reserve_process:(zvtlog,0,ia); 5 18500 monitor(64)remove_areaproc:(zvtlog,0,ia); 5 18501 end; 4 18502 4 18502 if i<>0 then 4 18503 begin 5 18504 for i:= 1 step 1 until 10 do tail(i):= 0; 5 18505 tail(1):= 1; 5 18506 iaf:= 2; 5 18507 tofrom(tail.iaf,vt_logdisc,8); 5 18508 tail(6):=systime(7,0,t); 5 18509 i:=monitor(40)create_entry:(zvtlog,0,tail); 5 18510 if i=0 then 5 18511 i:=monitor(50)permanent_entry:(zvtlog,3,ia); 5 18512 end; 4 18513 end; 3 18514 3 18514 if i<>0 then vt_log_aktiv:= false; 3 18515 end; 2 18516 2 18516 2 18516 \f 2 18516 message vogntabel initialisering side 4 - 810520/cl; 2 18517 2 18517 cs_vt:= nextsemch; 2 18518 <*+3*> skriv_new_sem(out,3,cs_vt,<:cs-vt:>); 2 18519 <*-3*> 2 18520 2 18520 cs_vt_adgang:= nextsemch; 2 18521 <*+3*> skriv_new_sem(out,3,cs_vt_adgang,<:cs-vt-adgang:>); 2 18522 <*-3*> 2 18523 2 18523 cs_vt_opd:= nextsemch; 2 18524 <*+3*> skriv_new_sem(out,3,cs_vt_opd,<:cs-vt-opd:>); 2 18525 <*-3*> 2 18526 2 18526 cs_vt_rap:= nextsemch; 2 18527 <*+3*> skriv_new_sem(out,3,cs_vt_rap,<:cs-vt-rap:>); 2 18528 <*-3*> 2 18529 2 18529 cs_vt_tilst:= nextsemch; 2 18530 <*+3*> skriv_new_sem(out,3,cs_vt_tilst,<:cs-vt-tilst:>); 2 18531 <*-3*> 2 18532 2 18532 cs_vt_auto:= nextsemch; 2 18533 <*+3*> skriv_new_sem(out,3,cs_vt_auto,<:cs-vt-auto:>); 2 18534 <*-3*> 2 18535 2 18535 cs_vt_grp:= nextsemch; 2 18536 <*+3*> skriv_new_sem(out,3,cs_vt_grp,<:cs-vt-grp:>); 2 18537 <*-3*> 2 18538 2 18538 cs_vt_spring:= nextsemch; 2 18539 <*+3*> skriv_new_sem(out,3,cs_vt_spring,<:cs-vt-spring:>); 2 18540 <*-3*> 2 18541 2 18541 cs_vt_log:= nextsemch; 2 18542 <*+3*> skriv_new_sem(out,3,cs_vt_log,<:cs-vt-log:>); 2 18543 <*-3*> 2 18544 2 18544 cs_vt_logpool:= nextsemch; 2 18545 <*+3*> skriv_new_sem(out,3,cs_vt_logpool,<:cs-vt-logpool:>); 2 18546 <*-3*> 2 18547 2 18547 vt_op:= nextop(vt_op_længde); 2 18548 signalch(cs_vt_adgang,vt_op,gen_optype or vt_optype); 2 18549 2 18549 vt_logop(1):= nextop(vt_op_længde); 2 18550 signalch(cs_vt_logpool,vt_logop(1),vt_optype); 2 18551 vt_logop(2):= nextop(vt_op_længde); 2 18552 signalch(cs_vt_logpool,vt_logop(2),vt_optype); 2 18553 2 18553 \f 2 18553 message vogntabel initialisering side 5 - 81-520/cl; 2 18554 2 18554 i:= nextcoru(500, <*ident*> 2 18555 10, <*prioitet*> 2 18556 true <*testmaske*>); 2 18557 j:= new_activity( i, 2 18558 0, 2 18559 h_vogntabel); 2 18560 <*+3*> skriv_newactivity(out,i,j); 2 18561 <*-3*> 2 18562 2 18562 i:= nextcoru(501, <*ident*> 2 18563 10, <*prioritet*> 2 18564 true <*testmaske*>); 2 18565 iaf:= nextop(filop_længde); 2 18566 j:= new_activity(i, 2 18567 0, 2 18568 vt_opdater,iaf); 2 18569 <*+3*> skriv_newactivity(out,i,j); 2 18570 <*-3*> 2 18571 2 18571 i:= nextcoru(502, <*ident*> 2 18572 10, <*prioritet*> 2 18573 true <*testmaske*>); 2 18574 k:= nextsemch; 2 18575 <*+3*> skriv_new_sem(out,3,k,<:cs-fil(vt-tilst):>); 2 18576 <*-3*> 2 18577 iaf:= nextop(fil_op_længde); 2 18578 j:= newactivity(i, 2 18579 0, 2 18580 vt_tilstand, 2 18581 k, 2 18582 iaf); 2 18583 <*+3*> skriv_newactivity(out,i,j); 2 18584 <*-3*> 2 18585 \f 2 18585 message vogntabel initialisering side 6 - 810520/cl; 2 18586 2 18586 i:= nextcoru(503, <*ident*> 2 18587 10, <*prioritet*> 2 18588 true <*testmaske*>); 2 18589 k:= nextsemch; 2 18590 <*+3*> skriv_new_sem(out,3,k,<:cs-fil(vt-rapport):>); 2 18591 <*-3*> 2 18592 iaf:= nextop(fil_op_længde); 2 18593 j:= newactivity(i, 2 18594 0, 2 18595 vt_rapport, 2 18596 k, 2 18597 iaf); 2 18598 <*+3*> skriv_newactivity(out,i,j); 2 18599 <*-3*> 2 18600 2 18600 i:= nextcoru(504, <*ident*> 2 18601 10, <*prioritet*> 2 18602 true <*testmaske*>); 2 18603 k:= nextsemch; 2 18604 <*+3*> skriv_new_sem(out,3,k,<:cs-fil(vt-gruppe):>); 2 18605 <*-3*> 2 18606 iaf:= nextop(fil_op_længde); 2 18607 j:= new_activity(i, 2 18608 0, 2 18609 vt_gruppe, 2 18610 k, 2 18611 iaf); 2 18612 <*+3*> skriv_newactivity(out,i,j); 2 18613 <*-3*> 2 18614 \f 2 18614 message vogntabel initialisering side 7 - 810520/cl; 2 18615 2 18615 i:= nextcoru(505, <*ident*> 2 18616 10, <*prioritet*> 2 18617 true <*testmaske*>); 2 18618 k:= nextsemch; 2 18619 <*+3*> skriv_new_sem(out,3,k,<:cs-spring-retur:>); 2 18620 <*-3*> 2 18621 iaf:= nextop(fil_op_længde); 2 18622 j:= newactivity(i, 2 18623 0, 2 18624 vt_spring, 2 18625 k, 2 18626 iaf); 2 18627 <*+3*> skriv_newactivity(out,i,j); 2 18628 <*-3*> 2 18629 2 18629 i:= nextcoru(506, <*ident*> 2 18630 10, 2 18631 true <*testmaske*>); 2 18632 k:= nextsemch; 2 18633 <*+3*> skriv_new_sem(out,3,k,<:cs-auto-retur:>); 2 18634 <*-3*> 2 18635 iaf:= nextop(if fil_op_længde>(data+20) then fil_op_længde else (data+20)); 2 18636 j:= newactivity(i, 2 18637 0, 2 18638 vt_auto, 2 18639 k, 2 18640 iaf); 2 18641 <*+3*> skriv_newactivity(out,i,j); 2 18642 <*-3*> 2 18643 2 18643 i:=nextcoru(507, <*ident*> 2 18644 10, <*prioritet*> 2 18645 true <*testmaske*>); 2 18646 j:=newactivity(i, 2 18647 0, 2 18648 vt_log); 2 18649 <*+3*> skriv_newactivity(out,i,j); 2 18650 <*-3*> 2 18651 2 18651 <*+2*> 2 18652 <**> if testbit42 then skriv_vt_variable(out); 2 18653 <*-2*> 2 18654 \f 2 18654 message sysslut initialisering side 1 - 810406/cl; 2 18655 begin 3 18656 zone z(128,1,stderror); 3 18657 integer i,coruid,j,k; 3 18658 integer array field cor; 3 18659 3 18659 open(z,4,<:overvågede:>,0); 3 18660 for i:= read(z,coruid) while i > 0 do 3 18661 begin 4 18662 if coruid = 0 then 4 18663 begin 5 18664 for coruid:= 1 step 1 until maxcoru do 5 18665 begin 6 18666 cor:= coroutine(coruid); 6 18667 d.cor.corutestmask:= d.cor.corutestmask shift 1 shift (-1); 6 18668 end 5 18669 end 4 18670 else 4 18671 begin 5 18672 cor:= coroutine(coru_no(abs coruid)); 5 18673 if cor > 0 then 5 18674 begin 6 18675 d.cor.corutestmask:= 6 18676 (d.cor.corutestmask shift 1 shift (-1)) add 6 18677 ((coruid > 0) extract 1 shift 11); 6 18678 end; 5 18679 end; 4 18680 end; 3 18681 close(z,true); 3 18682 3 18682 læsfil(tf_systællere,1,k); 3 18683 rf:=iaf:= 4; 3 18684 systællere_nulstillet:= fil(k).rf; 3 18685 nulstil_systællere:= fil(k).iaf(1); 3 18686 if systællere_nulstillet=real<::> then 3 18687 begin 4 18688 systællere_nulstillet:= 0.0; 4 18689 nulstil_systællere:= -1; 4 18690 end; 3 18691 iaf:= 32; 3 18692 tofrom(opkalds_tællere,fil(k).iaf,max_antal_områder*10); 3 18693 iaf:= 192; 3 18694 tofrom(operatør_tællere,fil(k).iaf,max_antal_operatører*10); 3 18695 3 18695 end; 2 18696 \f 2 18696 message sysslut initialisering side 2 - 810603/cl; 2 18697 2 18697 2 18697 if låsning > 0 then 2 18698 <* låsning 1 : *> lock(takeexternal,coru_term,mon,1); <* centrallogik *> 2 18699 2 18699 if låsning > 1 then 2 18700 <* låsning 2 : *> lock(readchar,1,write,2); 2 18701 2 18701 if låsning > 2 then 2 18702 <* låsning 3 : *> lock(activate,1,link,1,setposition,1); 2 18703 2 18703 2 18703 2 18703 2 18703 if låsning > 0 then 2 18704 begin 3 18705 i:= locked(ia); 3 18706 write(z_io,"nl",2,<:låsning::>,låsning,"nl",1,i,<: segmenter er låst:>); 3 18707 end; 2 18708 \f 2 18708 message sysslut initialisering side 3 - 810406/cl; 2 18709 2 18709 write(z_io,"nl",2,<:initialisering slut:>); 2 18710 system(2)free core:(i,ra); 2 18711 write(z_io,"nl",1,<:free core =:>,i,"nl",1); 2 18712 setposition(z_io,0,0); 2 18713 write(zbillede,"ff",0,"nl",1,<:initialisering slut :>,<<zddddd>, 2 18714 systime(5,0,r),".",1,r,"nl",1,<:free core=:>,i, 2 18715 "nl",1); 2 18716 errorbits:= 3; <* ok.no warning.yes *> 2 18717 \f 2 18717 2 18717 algol list.off; 2 18718 message coroutinemonitor - 40 ; 2 18719 2 18719 if simref <> firstsem then initerror(1, false); 2 18720 if semref <> firstop - 4 then initerror(2, false); 2 18721 if coruref <> firstsim then initerror(3, false); 2 18722 if opref <> optop + 6 then initerror(4, false); 2 18723 if proccount <> maxprocext -1 then initerror(5, false); 2 18724 goto takeexternal; 2 18725 2 18725 dump: 2 18726 op:= op; 2 18727 \f 2 18727 message sys trapaktion side 1 - 810521/hko/cl; 2 18728 trap(finale); 2 18729 write(zbillede,"ff",1,"nl",1,<:***** coroutine-monitor køer *****:>); 2 18730 for i:= 4<*readyqueue*>, 8<*idlequeue*>, 12<*timerqueue*> do 2 18731 begin 3 18732 k:= 0; 3 18733 write(zbillede,"nl",2,case i//4 of(<:readyqueue->:>,<:idlequeue ->:>, 3 18734 <:timerqueue->:>)); 3 18735 iaf:= i; 3 18736 for iaf:= d.iaf.next while iaf<>i do 3 18737 begin 4 18738 ref:= firstcoru + (iaf-firstcoru)//corusize*corusize; 4 18739 write(zbillede,<: cr:>,<<zdd>,d.ref.coruident//1000); 4 18740 k:=k+1; if k mod 10 = 0 then write(zbillede,"nl",1,"sp",12); 4 18741 end; 3 18742 end; 2 18743 outchar(zbillede,'nl'); 2 18744 2 18744 skriv_opkaldstællere(zbillede); 2 18745 2 18745 2 18745 pfilsystem(zbillede); 2 18746 2 18746 2 18746 write(zbillede,"nl",2,"=",20,<: attentionmodul :>,"=",20,"nl",1); 2 18747 2 18747 write(zbillede,"nl",1,<:attention-flag: :>,"nl",1); 2 18748 outintbits_ia(zbillede,att_flag,1,att_maske_lgd//2); 2 18749 2 18749 write(zbillede,"nl",1,<:attention-signal: :>,"nl",1); 2 18750 outintbits_ia(zbillede,att_signal,1,att_maske_lgd//2); 2 18751 \f 2 18751 message operatør trapaktion1 side 1 - 810521/hko; 2 18752 write(zbillede,"nl",2,"=",20,<: operatørmodul :>,"=",20,"nl",1); 2 18753 2 18753 write(zbillede,"nl",1,<:betjeningspladsnavne::>,"nl",1); 2 18754 for i:= 1 step 1 until max_antal_operatører do 2 18755 begin 3 18756 laf:= (i-1)*8; 3 18757 write(zbillede,<<dd>,i,<:: :>,true,6,string bpl_navn(i), 3 18758 case operatør_auto_include(i) extract 2 + 1 of ( 3 18759 <:EK :>,<:IN(ÅB):>,<:?? :>,<:IN(ST):>),<: :>, 3 18760 terminal_navn.laf,"nl",1); 3 18761 end; 2 18762 write(zbillede,"nl",1); 2 18763 2 18763 write(zbillede,"nl",1,<:top-bpl-gruppe: :>,<<d>,top_bpl_gruppe,"nl",1, 2 18764 <:betjeningspladsgrupper::>,"nl",1); 2 18765 for i:= 1 step 1 until 127 do 2 18766 if bpl_navn(i)<>long<::> then 2 18767 begin 3 18768 k:= write(zbillede,<<dd >,i,true,6,string bpl_navn(i),<:(:>,<<d>, 3 18769 bpl_tilst(i,1),<:/:>,bpl_tilst(i,2),<:):>); 3 18770 write(zbillede,"sp",16-k,<:= :>); 3 18771 iaf:= i*op_maske_lgd; j:=0; 3 18772 for k:= 1 step 1 until max_antal_operatører do 3 18773 begin 4 18774 if læsbit_ia(bpl_def.iaf,k) then 4 18775 begin 5 18776 if j mod 6 = 0 and j > 0 then write(zbillede,"nl",1,"sp",18); 5 18777 write(zbillede,true,6,string bpl_navn(k)); 5 18778 j:= j+1; 5 18779 end; 4 18780 end; 3 18781 write(zbillede,"nl",1); 3 18782 end; 2 18783 2 18783 write(zbillede,"nl",1,<:stoptabel::>,"nl",1); 2 18784 for i:= 1 step 1 until max_antal_operatører do 2 18785 begin 3 18786 write(zbillede,<<dd >,i); 3 18787 for j:= 0 step 1 until 3 do 3 18788 begin 4 18789 k:= operatør_stop(i,j); 4 18790 write(zbillede,if j=0 then <: :> else <:->:>,if k=0 then <:ALLE:> 4 18791 else string bpl_navn(k)); 4 18792 end; 3 18793 write(zbillede,<: (:>,<<d>,ant_i_opkø(i),<:):>,"nl",1); 3 18794 end; 2 18795 2 18795 skriv_terminal_tab(zbillede); 2 18796 write(zbillede,"nl",1,<:operatør-maske::>,"nl",1); 2 18797 outintbits_ia(zbillede,operatørmaske,1,op_maske_lgd//2); 2 18798 skriv_opk_alarm_tab(zbillede); 2 18799 skriv_talevejs_tab(zbillede); 2 18800 skriv_op_spool_buf(zbillede); 2 18801 skriv_cqf_tabel(zbillede,true); 2 18802 write(zbillede,"nl",2,"=",20,<: garagemodul :>,"=",20,"nl",1); 2 18803 2 18803 write(zbillede,"nl",1,<:garageterminaler::>,"nl",1); 2 18804 for i:= 1 step 1 until max_antal_garageterminaler do 2 18805 begin 3 18806 laf:= (i-1)*8; 3 18807 write(zbillede,<<dd>,i,<:: :>, if garage_auto_include(i) then 3 18808 <:IN,G :> else <:EK,G :>,garage_terminal_navn.laf,"nl",1); 3 18809 end; 2 18810 \f 2 18810 message radio trapaktion side 1 - 820301/hko; 2 18811 write(zbillede,"nl",2,"=",20,<: radiomodul :>,"=",20,"nl",1); 2 18812 skriv_kanal_tab(zbillede); 2 18813 skriv_opkaldskø(zbillede); 2 18814 skriv_radio_linietabel(zbillede); 2 18815 skriv_radio_områdetabel(zbillede); 2 18816 2 18816 \f 2 18816 message vogntabel trapaktion side 1 - 810520/cl; 2 18817 write(zbillede,"nl",2,"=",20,<: vogntabelmodul :>,"=",20,"nl",1); 2 18818 skriv_vt_variable(zbillede); 2 18819 p_vogntabel(zbillede); 2 18820 p_gruppetabel(zbillede); 2 18821 p_springtabel(zbillede); 2 18822 \f 2 18822 message sysslut trapaktion side 1 - 810519/cl; 2 18823 write(zbillede,"nl",2,"=",20,<: corutinemonitor :>,"=",20,"nl",1); 2 18824 corutable(zbillede); 2 18825 write(zbillede,"ff",1,<:***** simple semaphores *****:>,"nl",2, 2 18826 <: ref værdi prev next:>,"nl",1); 2 18827 iaf:= firstsim; 2 18828 repeat 2 18829 write(zbillede,<<dddd>,iaf,<< -dddd>,d.iaf.simvalue,<< dddd>, 2 18830 d.iaf(simcoru//2-1),d.iaf.simcoru,"nl",1); 2 18831 iaf:= iaf + simsize; 2 18832 until iaf>=simref; 2 18833 write(zbillede,"ff",1,<:***** chained semaphores *****:>,"nl",2, 2 18834 <: ref prev.coru next.coru prev.op next.op:>,"nl",1); 2 18835 iaf:= firstsem; 2 18836 repeat 2 18837 write(zbillede,<<dddd>,iaf,<<______dddd>,d.iaf(semcoru//2-1), 2 18838 d.iaf.semcoru,d.iaf(semop//2-1),d.iaf.semop,"nl",1); 2 18839 iaf:= iaf+semsize; 2 18840 until iaf>=semref; 2 18841 write(zbillede,"ff",1,<:***** operations *****:>,"nl",2); 2 18842 iaf:= firstop; 2 18843 repeat 2 18844 skriv_op(zbillede,iaf); 2 18845 iaf:= iaf+opheadsize+d.iaf.opsize; 2 18846 until iaf>=optop; 2 18847 write(zbillede,"ff",1,<:***** message extentions *****:>,"nl",2, 2 18848 <: messref messcode messop:>,"nl",1); 2 18849 for i:= 1 step 1 until maxmessext do 2 18850 write(zbillede,<< dddddddd>,messref(i),messcode(i),messop(i),"nl",1); 2 18851 write(zbillede,"nl",4,<:***** process extentions *****:>,"nl",2, 2 18852 <: procref proccode procop:>,"nl",1); 2 18853 for i:= 1 step 1 until maxprocext do 2 18854 write(zbillede,<< dddddddd>,procref(i),proccode(i),procop(i),"nl",1); 2 18855 2 18855 2 18855 \f 2 18855 message sys_finale side 1 - 810428/hko; 2 18856 2 18856 finale: 2 18857 trap(slut_finale); 2 18858 <* algol_pause:=algol_pause shift 24 shift (-24); *> 2 18859 endaction:=0; 2 18860 \f 2 18860 message filsystem finale side 1 - 810428/cl; 2 18861 2 18861 <* lukning af zoner *> 2 18862 write(out,<:lukker filsystem:>); ud; 2 18863 for i:= 1 step 1 until dbantez+dbantsz+dbanttz do 2 18864 close(fil(i),true); 2 18865 \f 2 18865 message operatør_finale side 1 - 810428/hko; 2 18866 2 18866 goto op_trap2_slut; 2 18867 2 18867 write(out,<:lukker operatører:>); ud; 2 18868 for k:= 1 step 1 until max_antal_operatører do 2 18869 begin 3 18870 close(z_op(k),true); 3 18871 end; 2 18872 op_trap2_slut: 2 18873 k:=k; 2 18874 2 18874 \f 2 18874 message garage_finale side 1 - 810428/hko; 2 18875 2 18875 write(out,<:lukker garager:>); ud; 2 18876 for k:= 1 step 1 until max_antal_garageterminaler do 2 18877 begin 3 18878 close(z_gar(k),true); 3 18879 end; 2 18880 \f 2 18880 message radio_finale side 1 - 810525/hko; 2 18881 write(out,<:lukker radio:>); ud; 2 18882 close(z_fr_in,true); 2 18883 close(z_fr_out,true); 2 18884 close(z_rf_in,true); 2 18885 close(z_rf_out,true); 2 18886 \f 2 18886 message sysslut finale side 1 - 810530/cl; 2 18887 2 18887 slut_finale: 2 18888 2 18888 trap(exit_finale); 2 18889 2 18889 outchar(zrl,'em'); 2 18890 close(zrl,true); 2 18891 2 18891 write(zbillede, 2 18892 "nl",2,<:blocksread=:>,blocksread, 2 18893 "nl",1,<:blocksout= :>,blocksout, 2 18894 "nl",1,<:fillæst= :>,fillæst, 2 18895 "nl",1,<:filskrevet=:>,filskrevet, 2 18896 "nl",3,<:********** billede genereret :>,<<zddddd>, 2 18897 systime(5,0,r),".",1,r,<: **********:>,"nl",1,"em",1); 2 18898 close(zbillede,true); 2 18899 monitor(42,zbillede,0,ia); 2 18900 ia(6):= systime(7,0,0.0); 2 18901 monitor(44,zbillede,0,ia); 2 18902 setposition(z_io,0,0); 2 18903 write(z_io,"nl",3,"sp",10,"*",15,<: busradio afsluttet :>,<<zddddd>, 2 18904 systime(5,0,r),".",1,r,"sp",1,"*",15,"nl",1,"em",1); 2 18905 close(z_io,true); 2 18906 exit_finale: trapmode:= 1 shift 10; 2 18907 2 18907 end; 1 18908 1 18908 1 18908 algol list.on; 1 18909 message programslut; 1 18910 program_slut: 1 18911 end \f 1. 7243143 9798898 611 0 0 2. 14420435 9620877 351 0 0 3. 2345542 15489587 420 368 0 4. 7831238 12320017 429 1657 742 5. 14057705 15299 584 29980 605 6. 14754120 13735534 585 0 0 7. 16051858 2408786 634 0 0 8. 18901 18895 18882 18864 18851 18843 18833 18825 18814 18803 18796 18783 18769 18760 18752 18746 18734 18721 18712 18702 18689 18660 18635 18617 18593 18574 18552 18539 18524 18508 18493 18472 18446 18432 18415 18395 18386 18364 18339 18314 18296 18283 18279 18251 18236 18220 18209 18196 18181 18165 18152 18136 18120 18098 18080 18064 18046 18029 18006 17987 17968 17956 17942 17922 17908 17889 17876 17857 17846 17833 17823 17806 17793 17782 17764 17751 17738 17718 17700 17687 17664 17644 17628 17615 17598 17586 17571 17556 17537 17516 17502 17492 17487 17477 17469 17450 17429 17409 17401 17394 17384 17339 17294 17266 17253 17220 17193 17170 17130 17105 17076 17020 16965 16912 16883 16850 16808 16776 16741 16685 16647 16607 16559 16526 16501 16478 16458 16430 16411 16392 16369 16358 16347 16327 16310 16295 16279 16252 16233 16217 16199 16190 16183 16158 16150 16140 16120 16109 16090 16079 16062 16047 16029 16004 15991 15980 15963 15945 15931 15924 15916 15907 15879 15862 15845 15832 15824 15815 15796 15785 15771 15759 15732 15717 15699 15677 15657 15644 15625 15602 15576 15555 15544 15522 15502 15480 15462 15434 15413 15395 15382 15374 15367 15352 15333 15326 15309 15289 15269 15255 15230 15215 15194 15168 15156 15147 15118 15096 15076 15066 15055 15030 15009 14989 14959 14940 14921 14901 14880 14872 14846 14833 14816 14797 14771 14752 14735 14708 14688 14666 14649 14629 14598 14567 14532 14505 14484 14471 14460 14439 14431 14422 14403 14383 14360 14333 14316 14298 14285 14275 14264 14240 14216 14197 14167 14154 14121 14086 14071 14050 14038 14012 13991 13971 13947 13936 13906 13887 13864 13834 13818 13795 13768 13733 13706 13699 13685 13664 13652 13638 13630 13615 13601 13594 13587 13580 13572 13539 13524 13504 13491 13473 13459 13431 13404 13386 13365 13347 13330 13313 13301 13291 13267 13261 13246 13226 13210 13193 13168 13155 13120 13103 13086 13063 13047 13035 13017 12990 12979 12971 12948 12929 12920 12903 12888 12870 12861 12849 12840 12822 12806 12791 12780 12761 12733 12712 12691 12675 12661 12654 12642 12625 12593 12575 12559 12542 12526 12495 12471 12461 12448 12433 12417 12399 12381 12357 12346 12330 12313 12297 12280 12256 12249 12231 12204 12186 12161 12136 12092 12081 12070 12042 12009 11979 11952 11910 11883 11862 11849 11841 11833 11823 11794 11777 11756 11741 11721 11698 11676 11652 11624 11602 11585 11560 11543 11527 11504 11489 11470 11451 11427 11392 11366 11348 11329 11308 11280 11263 11241 11227 11204 11176 11163 11150 11121 11083 11052 11009 10975 10944 10937 10929 10921 10910 10881 10858 10843 10833 10813 10795 10782 10773 10761 10752 10737 10729 10717 10688 10666 10648 10594 10559 10525 10492 10433 10417 10400 10381 10368 10355 10334 10322 10304 10291 10278 10251 10232 10215 10178 10162 10143 10135 10125 10094 10075 10058 10047 10017 9994 9969 9956 9947 9933 9909 9902 9892 9875 9856 9842 9823 9811 9795 9784 9773 9748 9731 9709 9691 9673 9653 9640 9620 9609 9583 9564 9545 9531 9521 9493 9475 9467 9443 9431 9419 9395 9377 9361 9350 9322 9305 9301 9284 9275 9268 9257 9243 9227 9210 9198 9186 9167 9156 9148 9121 9108 9099 9092 9073 9057 9046 9031 9023 9004 8965 8956 8932 8919 8908 8883 8864 8842 8823 8781 8769 8753 8734 8717 8710 8700 8690 8675 8662 8651 8637 8629 8609 8602 8591 8580 8565 8556 8548 8529 8517 8501 8483 8472 8458 8448 8437 8416 8402 8383 8371 8356 8343 8335 8321 8297 8279 8263 8242 8230 8208 8193 8177 8164 8150 8135 8094 8070 8036 8014 7989 7974 7952 7938 7914 7895 7868 7854 7832 7807 7795 7778 7764 7750 7730 7721 7705 7689 7675 7657 7639 7607 7589 7570 7547 7527 7505 7489 7466 7456 7422 7386 7377 7360 7343 7324 7310 7296 7283 7265 7248 7235 7222 7208 7184 7171 7152 7125 7115 7107 7099 7088 7053 7033 7010 6995 6978 6963 6953 6933 6924 6900 6889 6878 6867 6856 6848 6842 6830 6814 6795 6779 6761 6742 6734 6717 6705 6689 6657 6639 6624 6603 6566 6552 6542 6530 6516 6506 6493 6478 6462 6443 6437 6431 6419 6400 6393 6376 6368 6346 6334 6318 6308 6297 6279 6267 6242 6223 6207 6181 6162 6139 6115 6092 6069 6062 6045 6027 6013 5999 5976 5963 5953 5940 5930 5913 5875 5857 5844 5821 5791 5779 5770 5761 5746 5733 5721 5707 5695 5673 5654 5635 5614 5585 5572 5559 5539 5524 5501 5485 5471 5454 5436 5420 5403 5392 5383 5370 5352 5342 5326 5310 5298 5285 5270 5259 5242 5224 5214 5199 5178 5154 5136 5122 5109 5092 5074 5052 5029 5013 4997 4980 4960 4940 4916 4895 4880 4861 4848 4825 4812 4794 4773 4753 4726 4708 4685 4650 4635 4627 4619 4597 4571 4555 4535 4521 4505 4467 4424 4405 4383 4359 4349 4326 4316 4307 4278 4258 4240 4218 4199 4176 4170 4126 4114 4069 4039 4006 3973 3937 3892 3844 3800 3771 3728 3668 3617 3567 3533 3491 3460 3420 3367 3327 3290 3277 3258 3243 3225 3205 3182 3167 3145 3099 3077 3044 3003 2979 2938 2917 2887 2855 2828 2810 2673 2644 2619 2584 2559 2519 2475 2460 2444 2429 2404 2384 2374 2365 2340 2318 2291 2280 2259 2238 2219 2196 2167 2144 2134 2112 2094 2081 2055 2039 2031 2004 1988 1970 1940 1919 1906 1898 1873 1852 1832 1817 1796 1782 1775 1762 1750 1736 1720 1707 1699 1685 1656 1638 1606 1572 1534 1507 1478 1450 1427 1401 1386 1355 1331 1308 1283 1273 1260 1254 1243 1216 1209 1204 1180 1171 1162 1156 1134 1103 1083 1051 1030 995 960 928 914 900 878 853 845 834 824 812 788 766 735 698 663 632 590 445 344 327 310 283 259 213 200 185 171 32 1 1 1 1 16051858 2408786 973 506071 31003 9. 16 434 16 4 960807 235735 buskom1 7 3 1995 306 algftnrts 0 1 0 2 *version 986 400 986 4 flushout 986 44 986 4 911004 101112 sendmessage 987 106 987 12 910308 134214 copyout 988 244 988 12 890821 163833 getzone6 0 410 0 0 out 989 178 989 12 940411 220029 testbit 992 414 992 18 940411 222629 findfpparam 995 46 995 18 890821 163814 system 998 238 998 18 movestring 998 56 998 18 890821 163907 outdate 999 124 999 18 isotable 1000 176 999 18 890821 163656 write 1005 310 1005 152 intable 1006 34 1005 152 890821 163503 read 1010 24 1010 340 890821 163714 tofrom 997 420 995 18 stderror 1012 80 1012 340 890821 163740 open 1016 112 1016 340 890821 163754 monitor 1013 344 1012 340 close 1014 22 1012 340 setposition 997 378 995 18 increase 1004 50 999 18 outchar 999 26 999 18 replacechar 1019 98 1019 340 951214 094619 systime 0 1700 0 0 trapmode 1020 302 1020 340 trap 1020 112 1020 340 890821 163915 initzones 1021 268 1021 340 940411 222959 læsbitia 1022 22 1022 340 sign 1022 28 1022 340 890821 163648 ln 1023 432 1023 340 810409 111908 skrivhele 988 320 988 12 setzone6 1031 52 1031 340 inrec6 1031 28 1031 340 890821 163732 changerec6 1032 228 1032 340 940411 222949 sætbitia 1006 36 1005 152 readchar 1033 348 1033 340 940411 222633 læstegn 1699 0 0 0 000003 rs proc 1034 278 1034 340 940411 222636 skrivtegn 1035 384 1035 340 940411 222639 afsluttext 1036 394 1036 340 940411 222952 læsbiti 1037 498 1037 340 960610 222201 systid 1039 28 1039 340 getnumber 1039 18 1039 340 900925 171358 putnumber 1 656 0 0 errorbits 1046 60 1046 342 940411 222943 sætbiti 1047 354 1047 342 940411 222801 openbs 1049 228 1049 342 940411 222742 hægttekst 1031 54 1031 340 outrec6 0 1704 0 0 alarmcause 1050 332 1050 342 940411 222745 hægtstring 1051 254 1051 342 940411 222749 anbringtal 1005 288 1005 152 repeatchar 1052 444 1052 342 940411 223002 intg 1053 350 1053 342 940411 222739 binærsøg 1022 20 1022 340 sgn 1054 380 1054 342 940411 222646 skrivtext 1031 56 1031 340 swoprec6 1058 56 1055 342 passivate 1055 40 1055 342 890821 163947 activity 1060 78 1060 350 260479 150000 mon 1 1043 1060 350 monw2 1 1039 1060 350 monw0 1 1041 1060 350 monw1 1057 56 1055 342 activate 0 1588 0 0 endaction 1060 320 1060 350 reflectcore 1056 50 1055 342 newactivity 1061 372 1061 358 940327 154135 setcspterm 1063 428 1063 358 941030 233200 slices 1067 52 1067 358 890821 163933 lock 1067 258 1067 358 locked 0 1612 0 0 blocksread 0 1642 0 0 blocksout 1068 162 1068 358 940411 222622 fpparam 1 1049 1069 358 nl 1 1047 1069 358 220978 131500 bel 1070 330 1070 446 940411 222722 ud 1071 252 1071 446 940411 222656 taltekst 1 1045 1060 350 monw3 988 296 988 12 getshare6 988 398 988 12 setshare6 70 480 1074 446 0 algol end 1074 *if ok.no *if warning.yes *o c ▶EOF◀