|
DataMuseum.dkPresents historical artifacts from the history of: RC3500 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC3500 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 54528 (0xd500) Types: TextFileVerbose Names: »tsvchlst«
└─⟦a41ae585a⟧ Bits:30001842 SW-save af projekt 1000, Alarm-system └─⟦72244f0ef⟧ └─⟦this⟧ »tsvchlst«
\f tsvchlst 81.06.12. 16.11. page 1 10 1 \f tsvchlst 81.06.12. 16.11. page 2 1010 2 PROCESS vc_handler( 1020 3 1030 4 opsem : sempointer; 1040 5 VAR dc_addr, 1050 6 ts_addr : !macroaddr; 1060 7 VAR sem : !ts_pointer_vector 1070 8 ); 1080 9 1090 10 1100 11 CONST 1110 12 1120 13 version = "vers 3.91 /"; 1130 14 (* ------------ *) 1140 15 \f tsvchlst 81.06.12. 16.11. page 3 2010 16 (* 2020 17 INTRODUCTION TO THE VC-HANDLER: 2030 18 2040 19 2050 20 2060 21 Abbreviation list for the VC-HANDLER prosess: 2070 22 2080 23 ( the introduction of the alarmenvironment has made some inconsistenses in the list ) 2090 24 2100 25 --------------------------------------------- 2110 26 2120 27 adr address 2130 28 at alarm terminal 2140 29 atc at-connector 2150 30 ath at-handler 2160 31 buf buffer 2170 32 dc district center 2180 33 del delete 2190 34 elm element 2200 35 in input 2210 36 incar incarnation 2220 37 ins insert 2230 38 mac macro address 2240 39 max greatest 2250 40 mes message 2260 41 mic micro address 2270 42 min smallest 2280 43 nb number 2290 44 pvc primary vc 2300 45 rec receiver 2310 46 sem semaphore 2320 47 sen sender 2330 48 sup ts-supervisor 2340 49 vc alarm center 2350 50 vcc vc-connector 2360 51 vct vc-table 2370 52 \f tsvchlst 81.06.12. 16.11. page 4 3010 53 3020 54 Pseudo-code for the VC-HANDLER process: 3030 55 -------------------------------------- 3040 56 3050 57 ( this pseudo_code will be updated regularly - last time was 81.02.06 ) 3060 58 3070 59 PROCESS vc_handler("process_parameters"); 3080 60 3090 61 CONST 3100 62 . "process_constants, installation dependent" (may be moved to alarm-environment); 3110 63 3120 64 TYPE 3130 65 . "message_format" (may be moved to alarm-environment); 3140 66 3150 67 VAR 3160 68 . "vc_table, binary search"; 3170 69 3180 70 . "addressing_data"; 3190 71 . "scheduling_data"; 3200 72 . "supervising_data"; 3210 73 . "vcc_incarnation_data"; 3220 74 . "error_handling_data"; 3230 75 3240 76 . "input_semaphore"; 3250 77 . "wait_buffer_semaphore"; 3260 78 3270 79 BEGIN 3280 80 . "initialization"; 3290 81 3300 82 . REPEAT 3310 83 . "wait a message on the input_semaphore, and 3320 84 . "handle the message in the buffer, corresponding to the 3330 85 . operation_code, and produce resulting messages"; 3340 86 3350 87 . "for each resulting message do addressing/indexing 3360 88 . do supervising and signal each of the buffers to the 3370 89 . corresponding input_semaphore"; 3380 90 3390 91 . until forever 3400 92 3410 93 END; * of pseudo code * 3420 94 3430 95 *) 3440 96 \f tsvchlst 81.06.12. 16.11. page 5 4010 97 4020 98 (*--------------------- process vch help -------------------------------*) 4030 99 4040 100 PROCESS vch_help ( 4050 101 VAR vcc_inc : vcc_table; (* incarnation table *) 4060 102 VAR main, (* vch sem *) 4070 103 me, (* vch help sem *) 4080 104 free : !sempointer (* free buffers sem *) 4090 105 ); 4100 106 4110 107 TYPE 4120 108 note = PACKED RECORD (* for broadcast *) 4130 109 ! head : alarmlabel; 4140 110 ! comp : alarmnetaddr; 4150 111 ! count : integer 4160 112 END; 4170 113 4180 114 CONST 4190 115 write = 2; 4200 116 4210 117 sleep = 1; 4220 118 tested= 2; 4230 119 down = 4; 4240 120 4250 121 connection_code = #hc8; 4260 122 4270 123 VAR 4280 124 msg, bm : reference; 4290 125 v : vc_range; 4300 126 handler: alarmnetaddr; 4310 127 4320 128 BEGIN (*------------ main help program ----------------*) 4330 129 1 ! REPEAT 4340 130 2 ! ! wait ( msg, me^); 4350 131 3 ! ! 4360 132 4 ! ! IF msg^.u4 DIV 16 = 2 THEN (* broadcast *) 4370 133 5 ! ! BEGIN 4380 134 6 ! ! ! FOR v:= 1 TO vc_l DO 4390 135 7 ! ! ! IF vcc_inc(v).state < down THEN (* send a broadcast *) 4400 136 8 ! ! ! BEGIN 4410 137 9 ! ! ! ! wait ( bm, free^); 4420 138 10 ! ! ! ! bm^.u1:= write; 4430 139 11 ! ! ! ! bm^.u3:= netc_route; 4440 140 12 ! ! ! ! bm^.u4:= msg^.u4; 4450 141 13 ! ! ! ! LOCK bm AS buf: note DO 4460 142 14 ! ! ! ! LOCK msg AS mes: note DO \f tsvchlst 81.06.12. 16.11. page 6 4470 143 15 ! ! ! ! BEGIN 4480 144 16 ! ! ! ! ! buf:= mes; 4490 145 17 ! ! ! ! ! buf.head.rec.micro:= vcc_inc(v).vc_mic 4500 146 18 ! ! ! ! END; 4510 147 19 ! ! ! ! 4520 148 20 ! ! ! ! signal ( bm, main^) 4530 149 21 ! ! ! END; 4540 150 22 ! ! ! return ( msg) 4550 151 23 ! ! END 4560 152 24 ! ! ELSE 4570 153 25 ! ! IF msg^.u4 = #hc0 THEN (* node test *) 4580 154 26 ! ! BEGIN 4590 155 27 ! ! ! 4600 156 28 ! ! ! LOCK msg AS head: alarmlabel DO handler:= head.rec; 4610 157 29 ! ! ! 4620 158 30 ! ! ! FOR v:= 1 TO vc_l DO 4630 159 31 ! ! ! IF vcc_inc(v).state = sleep THEN 4640 160 32 ! ! ! BEGIN 4650 161 33 ! ! ! ! wait ( bm, free^); 4660 162 34 ! ! ! ! bm^.u1:= write; 4670 163 35 ! ! ! ! bm^.u3:= netc_route; 4680 164 36 ! ! ! ! bm^.u4:= connection_code; 4690 165 37 ! ! ! ! 4700 166 38 ! ! ! ! LOCK bm AS head: alarmlabel DO 4710 167 39 ! ! ! ! WITH head DO 4720 168 40 ! ! ! ! BEGIN 4730 169 41 ! ! ! ! ! no_of_by:= label_size; 4740 170 42 ! ! ! ! ! rec:= handler; 4750 171 43 ! ! ! ! ! rec.micro:= vcc_inc(v).vc_mic; 4760 172 44 ! ! ! ! ! send:= handler; 4770 173 45 ! ! ! ! END; 4780 174 46 ! ! ! ! signal ( bm, main^); 4790 175 47 ! ! ! ! vcc_inc(v).state:= tested; 4800 176 48 ! ! ! END; 4810 177 49 ! ! ! 4820 178 50 ! ! ! msg^.u3:= netc_route1; (* let vch make receipt *) 4830 179 51 ! ! ! msg^.u4:= #hc1; 4840 180 52 ! ! ! signal ( msg, main^) 4850 181 53 ! ! END; (* node test *) 4860 182 54 ! ! 4870 183 55 ! ! 4880 184 56 ! ! 4890 185 57 ! UNTIL false; 4900 186 58 END; 4910 187 4920 188 \f tsvchlst 81.06.12. 16.11. page 7 5010 189 5020 190 (*--------------------- vch ----------------------------------------*) 5030 191 5040 192 TYPE 5050 193 5060 194 alarm_form70 = RECORD (* used in 7.0 *) 5070 195 ! head : alarmlabel; 5080 196 ! tail : RECORD 5090 197 ! ! vcc_mic : integer; 5100 198 ! ! vc_kind : byte; (* 0 means at- and 1 means it-kind *) 5110 199 ! ! lam_nb : byte; (* index to the sem array *) 5120 200 ! ! port_nb : byte; (* channel number *) 5130 201 ! END; 5140 202 END; 5150 203 5160 204 5170 205 5180 206 alarm_form74 = RECORD (* format in 7.4 *) 5190 207 ! head : alarmlabel; 5200 208 ! vcc_addr : integer 5210 209 END; 5220 210 5230 211 5240 212 5250 213 CONST 5260 214 5270 215 ready = 0; (* vcc states *) 5280 216 sleep = 1; 5290 217 tested= 2; 5300 218 down = 4; 5310 219 5320 220 refuse_code = #h12; (* opcode 1.2 *) 5330 221 5340 222 helpsize = 200; 5350 223 helppri = -1; 5360 224 ok = 0; 5370 225 5380 226 \f tsvchlst 81.06.12. 16.11. page 8 6010 227 VAR 6020 228 6030 229 (*------------ incar-part ------------*) 6040 230 6050 231 shad : ARRAY ( vc_range) OF shadow; 6060 232 vct : vcc_table; (* incarnation table *) 6070 233 (* is used for administration of semaphores and shadow_variables 6080 234 . to all the vcc_incarnations 6090 235 *) 6100 236 6110 237 vct_index, 6120 238 vct_max : vc_range := 0; 6130 239 6140 240 6150 241 (*------------ main-part ------------*) 6160 242 6170 243 in_mes : reference; 6180 244 where : macroaddr; (* receiver *) 6190 245 who : integer; 6200 246 6210 247 result_code : result_range; 6220 248 6230 249 test : boolean := false; (* true means testmode *) 6240 250 6250 251 vcc_name : alfa; 6260 252 vcc_nb, alfa_pos : integer; 6270 253 6280 254 z : zone; 6290 255 6300 256 shadhelp : shadow; 6310 257 6320 258 6330 259 \f tsvchlst 81.06.12. 16.11. page 9 7010 260 (*------------ procedures and functions ------------*) 7020 261 7030 262 7040 263 (*------------ externals ------------*) 7050 264 7060 265 7070 266 PROCESS vcc( 7080 267 opsem : sempointer; 7090 268 VAR messem : !ts_pointer; 7100 269 VAR quesem : !ts_pointer; 7110 270 VAR vchsem, 7120 271 driversem, 7130 272 timeoutsem, 7140 273 comsem : !sempointer; 7150 274 VAR dc_addr, 7160 275 ts_addr: !macroaddr; 7170 276 micadr : integer; 7180 277 canno : byte 7190 278 ); 7200 279 EXTERNAL; 7210 280 7220 281 (*------------ forward declaration ------------*) 7230 282 7240 283 7250 284 PROCEDURE receipt_mes( 7260 285 VAR rec_mes : reference; 7270 286 result_code : result_range 7280 287 ); 7290 288 FORWARD; 7300 289 7310 290 7320 291 PROCEDURE refuse ( VAR msg : reference; cause : result_range); 7330 292 FORWARD; 7340 293 7350 294 \f tsvchlst 81.06.12. 16.11. page 10 8010 295 (*------------ vct_part ------------*) 8020 296 8030 297 8040 298 PROCEDURE find_vct_elm( 8050 299 mic : integer; 8060 300 VAR result : result_range; 8070 301 VAR index : vc_range 8080 302 ); 8090 303 (*--------------------------------------------------------------- 8100 304 . This procedure returns the index of the element with the given 8110 305 . micro-address. If not found, then the index is that of the 8120 306 . element in front of the place, where it ought to be. 8130 307 . The search strategi is binary search in an ordered list of 8140 308 . elements. The smallest element has the index = 1. 8150 309 . Error - will not appear. 8160 310 ----------------------------------------------------------------*) 8170 311 VAR 8180 312 low, mid, high : vc_range; 8190 313 8200 314 BEGIN 8210 315 1 ! result:= not_found; 8220 316 2 ! 8230 317 3 ! IF vct_max = 0 THEN 8240 318 4 ! index := 0 (* vct is empty *) 8250 319 5 ! ELSE (* we first check the lower bound *) 8260 320 6 ! IF mic < vct(1).vc_mic THEN index := 0 ELSE 8270 321 7 ! IF mic = vct(1).vc_mic THEN 8280 322 8 ! BEGIN 8290 323 9 ! ! index:= 1; 8300 324 10 ! ! result:= accepted 8310 325 11 ! END 8320 326 12 ! ELSE 8330 327 13 ! BEGIN (* now the search is started *) 8340 328 14 ! ! low := 1; 8350 329 15 ! ! high := vct_max; (* >1 *) 8360 330 16 ! ! mid := high; 8370 331 17 ! ! 8380 332 18 ! ! REPEAT 8390 333 19 ! ! ! WITH vct(mid) DO 8400 334 20 ! ! ! IF mic = vc_mic THEN 8410 335 21 ! ! ! BEGIN 8420 336 22 ! ! ! ! index := mid; 8430 337 23 ! ! ! ! result:= accepted 8440 338 24 ! ! ! END 8450 339 25 ! ! ! ELSE 8460 340 26 ! ! ! IF mic < vc_mic THEN \f tsvchlst 81.06.12. 16.11. page 11 8470 341 27 ! ! ! high := mid 8480 342 28 ! ! ! ELSE low := mid; (* mic > vc_mic *) 8490 343 29 ! ! ! (* end with *) 8500 344 30 ! ! ! mid := (high - low) DIV 2 + low; 8510 345 31 ! ! UNTIL (result = accepted) OR ( high - low < 2 ); 8520 346 32 ! ! 8530 347 33 ! ! IF result <> accepted THEN 8540 348 34 ! ! index := low; (* mic ought to be placed between low and high *) 8550 349 35 ! END (* search-part *); 8560 350 36 ! 8570 351 37 ! (*q if test then 8580 352 38 ! if result = accepted then testout(z,"vct index :",index) 8590 353 39 ! else testout(z,"not in vct :",mic); q*) 8600 354 40 ! 8610 355 41 END (* find_vct_el *); 8620 356 8630 357 \f tsvchlst 81.06.12. 16.11. page 12 9010 358 9020 359 PROCEDURE move_vct_entry ( VAR rec, from : vc_incar_e ); 9030 360 BEGIN 9040 361 1 ! WITH from DO 9050 362 2 ! BEGIN 9060 363 3 ! ! rec.vc_mic:= vc_mic; 9070 364 4 ! ! rec.state:= state; 9080 365 5 ! ! rec.in_sem:= in_sem; 9090 366 6 ! ! rec.shix := shix 9100 367 7 ! END 9110 368 8 END; (* of move *) 9120 369 9130 370 \f tsvchlst 81.06.12. 16.11. page 13 10010 371 PROCEDURE place_vct_elm( 10020 372 vcc_mic : integer; 10030 373 VAR result : result_range; 10040 374 VAR index : vc_range 10050 375 ); 10060 376 (*--------------------------------------------------------------------- 10070 377 . This procedure makes place for an element in the vct, if room for it 10080 378 . and initialize it. 10090 379 . Error => result := rejected. 10100 380 ---------------------------------------------------------------------*) 10110 381 VAR 10120 382 ix : vc_range; 10130 383 work : vc_incar_e; 10140 384 10150 385 BEGIN 10160 386 1 ! find_vct_elm( vcc_mic, result, index ); 10170 387 2 ! IF result = accepted THEN result:= existing_entry ELSE 10180 388 3 ! IF vct_max >= vc_l THEN result:= no_room ELSE 10190 389 4 ! IF (vcc_mic < vc_addr_limit) OR (vcc_mic >= at_addr_limit) THEN 10200 390 5 ! BEGIN 10210 391 6 ! ! (*q if test then testout(z,"place_err ",vcc_mic); q*) 10220 392 7 ! ! result:= not_found 10230 393 8 ! END 10240 394 9 ! ELSE 10250 395 10 ! BEGIN (* place the element *) 10260 396 11 ! ! move_vct_entry ( work, vct(vct_max+1)); 10270 397 12 ! ! FOR ix:= vct_max DOWNTO index+1 DO 10280 398 13 ! ! move_vct_entry ( vct(ix+1), vct(ix)); 10290 399 14 ! ! vct_max := vct_max + 1; 10300 400 15 ! ! index := index + 1; (* that's the new place *) 10310 401 16 ! ! move_vct_entry ( vct(index), work); 10320 402 17 ! ! vct(index).vc_mic:= vcc_mic; 10330 403 18 ! ! vct(index).state:= sleep; 10340 404 19 ! ! result:= accepted 10350 405 20 ! END; 10360 406 21 END (* place_vct_elm *); 10370 407 10380 408 \f tsvchlst 81.06.12. 16.11. page 14 11010 409 PROCEDURE del_vct_elm( 11020 410 del_mic : integer; 11030 411 VAR result : result_range 11040 412 ); 11050 413 (*----------------------------------------------------------------------- 11060 414 . This procedure delets an element in the vct, if found. 11070 415 . Error => dc 11080 416 -----------------------------------------------------------------------*) 11090 417 VAR 11100 418 res : result_range; 11110 419 index, ix : vc_range; 11120 420 work : vc_incar_e; 11130 421 11140 422 BEGIN 11150 423 1 ! find_vct_elm(del_mic, res, index); 11160 424 2 ! IF res = accepted THEN 11170 425 3 ! 11180 426 4 ! IF NOT nil ( shad(vct(index).shix)) THEN 11190 427 5 ! BEGIN 11200 428 6 ! ! 11210 429 7 ! ! vct(index).state:= down; 11220 430 8 ! ! break ( shad(vct(index).shix), 47); 11230 431 9 ! ! remove ( shad(vct(index).shix)); 11240 432 10 ! ! 11250 433 11 ! ! move_vct_entry ( work, vct(index)); 11260 434 12 ! ! FOR ix := index TO vct_max - 1 DO 11270 435 13 ! ! move_vct_entry ( vct(ix), vct(ix+1)); 11280 436 14 ! ! move_vct_entry ( vct(vct_max), work); 11290 437 15 ! ! vct_max := vct_max - 1; 11300 438 16 ! ! 11310 439 17 ! END; 11320 440 18 ! result:= res 11330 441 19 END (* del_vct_elm *); 11340 442 \f tsvchlst 81.06.12. 16.11. page 15 12010 443 (*------------ sup-part ------------*) 12020 444 12030 445 12040 446 (*------------------------------------------------------------------- 12050 447 . this part will later include several procedures for handling 12060 448 . this modules supervision of vcc's and tss. 12070 449 . so far - you will meet the comment "supervision", where these 12080 450 . procedures are to be called, 12090 451 . and that takes place immediately after waits, and when signalling. 12100 452 --------------------------------------------------------------------*) 12110 453 \f tsvchlst 81.06.12. 16.11. page 16 13010 454 (*------------ signal-part ------------*) 13020 455 13030 456 13040 457 PROCEDURE signal_to_vcc ( 13050 458 VAR msg : reference; 13060 459 known_index : vc_range 13070 460 ); 13080 461 (*---------------------------------------------------------------------- 13090 462 . This procedure signals the message to the input_semaphore of the vcc, 13100 463 . and do the supervision. If known_index is zero, this procedure 13110 464 . finds the vct-index itself. 13120 465 . No check on known_index. 13130 466 . Error => send receipt_mes. 13140 467 -----------------------------------------------------------------------*) 13150 468 VAR 13160 469 result : result_range; 13170 470 wanted : integer; 13180 471 index : vc_range; 13190 472 13200 473 BEGIN 13210 474 1 ! LOCK msg AS head : alarmlabel DO wanted:= head.rec.micro; 13220 475 2 ! IF known_index <> 0 THEN (* check *) 13230 476 3 ! IF vct(known_index).vc_mic <> wanted THEN known_index:= 0; 13240 477 4 ! 13250 478 5 ! IF known_index = 0 THEN 13260 479 6 ! find_vct_elm( wanted, result, index ) 13270 480 7 ! ELSE 13280 481 8 ! index := known_index; 13290 482 9 ! 13300 483 10 ! IF vct(index).state = down THEN result:= not_ready; 13310 484 11 ! IF result = accepted THEN 13320 485 12 ! BEGIN 13330 486 13 ! ! signal ( msg, sem( vct(index).in_sem).s^ ); 13340 487 14 ! ! (* supervision - here we need the index for identification of the vcc *) 13350 488 15 ! END 13360 489 16 ! ELSE 13370 490 17 ! BEGIN 13380 491 18 ! ! (*-- reject --*) 13390 492 19 ! ! 13400 493 20 ! ! refuse ( msg, result ); 13410 494 21 ! ! 13420 495 22 ! ! (*q if test then testout(z,"sgnl_vct_err",index); q*) 13430 496 23 ! END; 13440 497 24 END (* signal_to_vcc *); 13450 498 \f tsvchlst 81.06.12. 16.11. page 17 14010 499 14020 500 PROCEDURE receipt_mes ( 14030 501 14040 502 VAR rec_mes : reference; 14050 503 14060 504 result_code : result_range 14070 505 ); 14080 506 (*------------------------------------------------------------------ 14090 507 . This procedure signals receipt-messages to the sup with the 14100 508 . correct u3, u4, address, no_of_by, and result_code. 14110 509 --------------------------------------------------------------------*) 14120 510 BEGIN 14130 511 1 ! 14140 512 2 ! WITH rec_mes^ DO 14150 513 3 ! BEGIN 14160 514 4 ! ! 14170 515 5 ! ! LOCK rec_mes AS head : alarmlabel DO 14180 516 6 ! ! WITH head DO 14190 517 7 ! ! BEGIN 14200 518 8 ! ! ! rec := send; 14210 519 9 ! ! ! send.macro:= ts_addr; 14220 520 10 ! ! ! send.micro:= vch_mic_addr; 14230 521 11 ! ! ! result := result_code; 14240 522 12 ! ! END (* lock - with *); 14250 523 13 ! ! u3:= vci_route; 14260 524 14 ! ! u4:= (u4 DIV 2)*2 + 1; 14270 525 15 ! END (* with *); 14280 526 16 ! 14290 527 17 ! signal( rec_mes, sem(tssup_sem_no).s^ ); 14300 528 18 ! 14310 529 19 END (* receipt_mes *); 14320 530 14330 531 \f tsvchlst 81.06.12. 16.11. page 18 15010 532 15020 533 PROCEDURE refuse ( 15030 534 VAR msg : reference; (* message to refused *) 15040 535 cause : result_range (* result code *) 15050 536 ); 15060 537 15070 538 (* send 1.2 back to sender *) 15080 539 15090 540 TYPE 15100 541 15110 542 flawshape = PACKED RECORD (* for 1.2 *) 15120 543 ! head : alarmlabel; 15130 544 ! data : alarmlabel 15140 545 END; 15150 546 15160 547 BEGIN 15170 548 1 ! LOCK msg AS buf : flawshape DO 15180 549 2 ! WITH buf DO 15190 550 3 ! BEGIN 15200 551 4 ! ! data:= head; 15210 552 5 ! ! data.op_code:= msg^.u4; 15220 553 6 ! ! WITH head DO 15230 554 7 ! ! BEGIN 15240 555 8 ! ! ! no_of_by:= 2*label_size+2; 15250 556 9 ! ! ! rec:= send; 15260 557 10 ! ! ! send.macro:= ts_addr; 15270 558 11 ! ! ! send.micro:= vch_mic_addr; 15280 559 12 ! ! ! result:= cause; 15290 560 13 ! ! END 15300 561 14 ! END; 15310 562 15 ! 15320 563 16 ! msg^.u3:= vci_route; 15330 564 17 ! msg^.u4:= refuse_code; 15340 565 18 ! signal ( msg, sem(tssup_sem_no).s^) 15350 566 19 ! 15360 567 20 END; 15370 568 15380 569 15390 570 \f tsvchlst 81.06.12. 16.11. page 19 16010 571 16020 572 BEGIN 16030 573 1 ! (*------------ main program ------------*) 16040 574 2 ! 16050 575 3 ! (*------------ initialisation ------------*) 16060 576 4 ! 16070 577 5 ! testopen ( z, own.incname, opsem); 16080 578 6 ! testout(z,version,al_env_version); 16090 579 7 ! result_code := create ( "vchhelp ", 16100 580 8 ! vch_help ( vct, 16110 581 9 ! sem(vch_sem_no).s, 16120 582 10 ! sem(vch_int1).w, 16130 583 11 ! sem(com_pool).w 16140 584 12 ! ), 16150 585 13 ! shadhelp, helpsize ); 16160 586 14 ! 16170 587 15 ! IF result_code <> ok THEN 16180 588 16 ! testout ( z,"help create=", result_code) 16190 589 17 ! ELSE 16200 590 18 ! start ( shadhelp, helppri); 16210 591 19 ! FOR vct_index:= 1 TO vc_l DO 16220 592 20 ! WITH vct(vct_index) DO 16230 593 21 ! BEGIN 16240 594 22 ! ! vc_mic:= at_addr_limit; 16250 595 23 ! ! state:= down; 16260 596 24 ! ! in_sem:= vcc_sem_no - 2 + 2 * vct_index; 16270 597 25 ! ! shix:= vct_index 16280 598 26 ! END; 16290 599 27 ! 16300 600 28 ! (*------------ main repeat_loop-part ------------*) 16310 601 29 ! 16320 602 30 ! REPEAT (* until terminate situation *) 16330 603 31 ! ! 16340 604 32 ! ! result_code:= accepted; 16350 605 33 ! ! 16360 606 34 ! ! (*q if test then testout(z,"wait in_sem ",0); q*) 16370 607 35 ! ! 16380 608 36 ! ! wait( in_mes, sem( vch_sem_no ).w^ ); 16390 609 37 ! ! (* here it waits effectively, if no messages has been scheduled *) 16400 610 38 ! ! 16410 611 39 ! ! (* if test then testout(z,"in_mes u3:",in_mes^.u3); 16420 612 40 ! ! if test then testout(z," u4:",in_mes^.u4); *) 16430 613 41 ! ! 16440 614 42 ! ! (* first of all we group the messages, depending on from where it 16450 615 43 ! ! . does come. 16460 616 44 ! ! *) \f tsvchlst 81.06.12. 16.11. page 20 16470 617 45 ! ! 16480 618 46 ! ! (*q if test then testout(z,"case u3:",in_mes^.u3); 16490 619 47 ! ! if test then testout(z," u4:",in_mes^.u4); q*) 16500 620 48 ! ! 16510 621 49 ! ! CASE in_mes^.u3 OF 16520 622 50 ! ! ! 16530 623 51 ! ! ! dummy_route : return ( in_mes ); 16540 624 52 ! ! ! 16550 625 53 ! ! ! \f tsvchlst 81.06.12. 16.11. page 21 17010 626 54 ! ! ! <* timer NOT used 17020 627 55 ! ! ! tim_route, tim_route1 (* from timeout *) : 17030 628 56 ! ! ! BEGIN 17040 629 57 ! ! ! (*q if test then testout(z,"from timeout",0); q*) 17050 630 58 ! ! ! 17060 631 59 ! ! ! 17070 632 60 ! ! ! (* case on opcode *) 17080 633 61 ! ! ! 17090 634 62 ! ! ! receipt_mes( in_mes, rejected ); (* ?????? *) 17100 635 63 ! ! ! 17110 636 64 ! ! ! END (* from timeout *); 17120 637 65 ! ! ! *> 17130 638 66 ! ! ! \f tsvchlst 81.06.12. 16.11. page 22 18010 639 67 ! ! ! 18020 640 68 ! ! ! vci_route, vci_route1, 18030 641 69 ! ! ! vca_route, vca_route1 (* from a vcc - of kind at *) : 18040 642 70 ! ! ! 18050 643 71 ! ! ! BEGIN 18060 644 72 ! ! ! ! (* signal to sup *) 18070 645 73 ! ! ! ! 18080 646 74 ! ! ! ! (* No check here. But this block is planned used, when 18090 647 75 ! ! ! ! . the following opcodes are met: 18100 648 76 ! ! ! ! . 18110 649 77 ! ! ! ! . 0.2 3.1 3.2 3.4 3.5 4.0 8.1 8.3 8.4 9.1 10.3 10.5 18120 650 78 ! ! ! ! . 1.2 18130 651 79 ! ! ! ! . 18140 652 80 ! ! ! ! *) 18150 653 81 ! ! ! ! 18160 654 82 ! ! ! ! (*q if test then testout(z,"from a vcc ",0); q*) 18170 655 83 ! ! ! ! 18180 656 84 ! ! ! ! (* supervision *) 18190 657 85 ! ! ! ! LOCK in_mes AS head : alarmlabel DO 18200 658 86 ! ! ! ! WITH head DO 18210 659 87 ! ! ! ! BEGIN 18220 660 88 ! ! ! ! ! where:= rec.macro; 18230 661 89 ! ! ! ! ! who:= rec.micro; 18240 662 90 ! ! ! ! ! find_vct_elm ( send.micro, result_code, vct_index); 18250 663 91 ! ! ! ! END; 18260 664 92 ! ! ! ! 18270 665 93 ! ! ! ! WITH vct(vct_index) DO 18280 666 94 ! ! ! ! IF state < down THEN state:= ready; 18290 667 95 ! ! ! ! 18300 668 96 ! ! ! ! IF ( where = ts_addr ) 18310 669 97 ! ! ! ! AND ( who = vch_mic_addr ) THEN (* for me *) 18320 670 98 ! ! ! ! BEGIN 18330 671 99 ! ! ! ! ! return ( in_mes); 18340 672 100 ! ! ! ! END 18350 673 101 ! ! ! ! ELSE 18360 674 102 ! ! ! ! signal(in_mes,sem( tssup_sem_no).s^); 18370 675 103 ! ! ! ! 18380 676 104 ! ! ! ! 18390 677 105 ! ! ! END (* from a vcc *); 18400 678 106 ! ! ! 18410 679 107 ! ! ! \f tsvchlst 81.06.12. 16.11. page 23 19010 680 108 ! ! ! 19020 681 109 ! ! ! netc_route1: (* to vch itself *) 19030 682 110 ! ! ! 19040 683 111 ! ! ! BEGIN 19050 684 112 ! ! ! ! 19060 685 113 ! ! ! ! 19070 686 114 ! ! ! ! (*q if test then testout(z,"to vch ",in_mes^.u4); q*) 19080 687 115 ! ! ! ! 19090 688 116 ! ! ! ! CASE in_mes^.u4 (* operation code *) OF 19100 689 117 ! ! ! ! ! 19110 690 118 ! ! ! ! ! (* 1.2 *) #h12 : 19120 691 119 ! ! ! ! ! return ( in_mes); 19130 692 120 ! ! ! ! ! 19140 693 121 ! ! ! ! ! (* 2.x *) 19150 694 122 ! ! ! ! ! #h20..#h29, 19160 695 123 ! ! ! ! ! #hc0 : 19170 696 124 ! ! ! ! ! signal ( in_mes, sem(vch_int1).s^); 19180 697 125 ! ! ! ! ! 19190 698 126 ! ! ! ! ! (* 12.1 from help *) 19200 699 127 ! ! ! ! ! #hc1: ; 19210 700 128 ! ! ! ! ! 19220 701 129 ! ! ! ! ! (* 7.0 *) #h70 : 19230 702 130 ! ! ! ! ! BEGIN 19240 703 131 ! ! ! ! ! ! (* creation of a vcc_incanation *) 19250 704 132 ! ! ! ! ! ! (*** yet, creation is only allowed for vc's of kind at ***) 19260 705 133 ! ! ! ! ! ! (*** later we must remember to test on vc_kind ***) 19270 706 134 ! ! ! ! ! ! 19280 707 135 ! ! ! ! ! ! LOCK in_mes AS mes : alarm_form70 DO 19290 708 136 ! ! ! ! ! ! WITH mes DO 19300 709 137 ! ! ! ! ! ! BEGIN 19310 710 138 ! ! ! ! ! ! ! (* update vct *) 19320 711 139 ! ! ! ! ! ! ! 19330 712 140 ! ! ! ! ! ! ! IF (head.send.macro <> dc_addr) THEN 19340 713 141 ! ! ! ! ! ! ! BEGIN 19350 714 142 ! ! ! ! ! ! ! ! result_code:= unknown_sender; 19360 715 143 ! ! ! ! ! ! ! ! (*q if test then testout(z,"7.0 bad <> :",head.send.macro.dc_addr); q*) 19370 716 144 ! ! ! ! ! ! ! END 19380 717 145 ! ! ! ! ! ! ! ELSE 19390 718 146 ! ! ! ! ! ! ! place_vct_elm( tail.vcc_mic, result_code, vct_index ); 19400 719 147 ! ! ! ! ! ! ! 19410 720 148 ! ! ! ! ! ! ! IF result_code = accepted THEN 19420 721 149 ! ! ! ! ! ! ! BEGIN 19430 722 150 ! ! ! ! ! ! ! ! 19440 723 151 ! ! ! ! ! ! ! ! (* make an unambiguous vcc_name *) 19450 724 152 ! ! ! ! ! ! ! ! 19460 725 153 ! ! ! ! ! ! ! ! vcc_name := "vccon__ "; \f tsvchlst 81.06.12. 16.11. page 24 19470 726 154 ! ! ! ! ! ! ! ! vcc_nb := tail.vcc_mic; 19480 727 155 ! ! ! ! ! ! ! ! alfa_pos := 9; 19490 728 156 ! ! ! ! ! ! ! ! 19500 729 157 ! ! ! ! ! ! ! ! REPEAT 19510 730 158 ! ! ! ! ! ! ! ! ! (*q if test then testout(z,"vcc_nb-part:",vcc_nb); 19520 731 159 ! ! ! ! ! ! ! ! ! if test then testout(z,"alfa_pos :",alfa_pos); q*) 19530 732 160 ! ! ! ! ! ! ! ! ! 19540 733 161 ! ! ! ! ! ! ! ! ! vcc_name( alfa_pos ) := chr( vcc_nb MOD 10 + ord( "0" ) ); 19550 734 162 ! ! ! ! ! ! ! ! ! vcc_nb := vcc_nb DIV 10; 19560 735 163 ! ! ! ! ! ! ! ! ! alfa_pos := alfa_pos - 1;; 19570 736 164 ! ! ! ! ! ! ! ! UNTIL alfa_pos = 6; 19580 737 165 ! ! ! ! ! ! ! ! 19590 738 166 ! ! ! ! ! ! ! ! (* create and start the vcc_incarnation *) 19600 739 167 ! ! ! ! ! ! ! ! 19610 740 168 ! ! ! ! ! ! ! ! (*q if test then testout(z,"creating vcc",vct_index); q*) 19620 741 169 ! ! ! ! ! ! ! ! 19630 742 170 ! ! ! ! ! ! ! ! IF tail.vc_kind = vcat THEN (* create vc at connector *) 19640 743 171 ! ! ! ! ! ! ! ! BEGIN 19650 744 172 ! ! ! ! ! ! ! ! ! 19660 745 173 ! ! ! ! ! ! ! ! ! result_code:= link ( "vcatc ", vcc) 19670 746 174 ! ! ! ! ! ! ! ! ! ; 19680 747 175 ! ! ! ! ! ! ! ! ! result_code := create( 19690 748 176 ! ! ! ! ! ! ! ! ! vcc_name, 19700 749 177 ! ! ! ! ! ! ! ! ! vcc( 19710 750 178 ! ! ! ! ! ! ! ! ! opsem, 19720 751 179 ! ! ! ! ! ! ! ! ! sem( vct(vct_index).in_sem), 19730 752 180 ! ! ! ! ! ! ! ! ! sem( vct(vct_index).in_sem + 1 ), 19740 753 181 ! ! ! ! ! ! ! ! ! sem( vch_sem_no ).s, 19750 754 182 ! ! ! ! ! ! ! ! ! (* <<<sem( lam_sem_no + tail.lam_nb ).s, >>> *) 19760 755 183 ! ! ! ! ! ! ! ! ! sem(vas_sem_no).s, 19770 756 184 ! ! ! ! ! ! ! ! ! sem( timeout_sem_no ).s, 19780 757 185 ! ! ! ! ! ! ! ! ! sem(com_pool).w, 19790 758 186 ! ! ! ! ! ! ! ! ! dc_addr, 19800 759 187 ! ! ! ! ! ! ! ! ! ts_addr, 19810 760 188 ! ! ! ! ! ! ! ! ! tail.vcc_mic, 19820 761 189 ! ! ! ! ! ! ! ! ! tail.port_nb 19830 762 190 ! ! ! ! ! ! ! ! ! ), 19840 763 191 ! ! ! ! ! ! ! ! ! shad(vct( vct_index ).shix), 19850 764 192 ! ! ! ! ! ! ! ! ! vac_size) 19860 765 193 ! ! ! ! ! ! ! ! END 19870 766 194 ! ! ! ! ! ! ! ! ELSE 19880 767 195 ! ! ! ! ! ! ! ! IF tail.vc_kind = vcit THEN (* create vc it connector *) 19890 768 196 ! ! ! ! ! ! ! ! BEGIN 19900 769 197 ! ! ! ! ! ! ! ! ! 19910 770 198 ! ! ! ! ! ! ! ! ! result_code:= link ( "vcitc ", vcc ) 19920 771 199 ! ! ! ! ! ! ! ! ! ; \f tsvchlst 81.06.12. 16.11. page 25 19930 772 200 ! ! ! ! ! ! ! ! ! result_code:= create ( 19940 773 201 ! ! ! ! ! ! ! ! ! vcc_name, 19950 774 202 ! ! ! ! ! ! ! ! ! vcc ( 19960 775 203 ! ! ! ! ! ! ! ! ! opsem, 19970 776 204 ! ! ! ! ! ! ! ! ! sem( vct(vct_index).in_sem), 19980 777 205 ! ! ! ! ! ! ! ! ! sem( vct(vct_index).in_sem+1), 19990 778 206 ! ! ! ! ! ! ! ! ! sem( vch_sem_no).s, 20000 779 207 ! ! ! ! ! ! ! ! ! (* <<< sem ( lam_sem_no + tail.lam_nb).s, >>> *) 20010 780 208 ! ! ! ! ! ! ! ! ! sem( vis_sem_no).s, 20020 781 209 ! ! ! ! ! ! ! ! ! sem( timeout_sem_no ).s, 20030 782 210 ! ! ! ! ! ! ! ! ! sem( com_pool).w, 20040 783 211 ! ! ! ! ! ! ! ! ! dc_addr, 20050 784 212 ! ! ! ! ! ! ! ! ! ts_addr, 20060 785 213 ! ! ! ! ! ! ! ! ! tail.vcc_mic, 20070 786 214 ! ! ! ! ! ! ! ! ! tail.port_nb 20080 787 215 ! ! ! ! ! ! ! ! ! ), 20090 788 216 ! ! ! ! ! ! ! ! ! shad(vct(vct_index).shix), 20100 789 217 ! ! ! ! ! ! ! ! ! vic_size) 20110 790 218 ! ! ! ! ! ! ! ! END 20120 791 219 ! ! ! ! ! ! ! ! ELSE 20130 792 220 ! ! ! ! ! ! ! ! result_code:= out_of_range; 20140 793 221 ! ! ! ! ! ! ! ! 20150 794 222 ! ! ! ! ! ! ! ! IF result_code = accepted THEN 20160 795 223 ! ! ! ! ! ! ! ! start ( shad(vct(vct_index).shix), vcc_pri) 20170 796 224 ! ! ! ! ! ! ! ! ELSE 20180 797 225 ! ! ! ! ! ! ! ! del_vct_elm( tail.vcc_mic, result_code ); 20190 798 226 ! ! ! ! ! ! ! ! 20200 799 227 ! ! ! ! ! ! ! ! 20210 800 228 ! ! ! ! ! ! ! ! (*q if test then testout(z,"create value",c); q*) 20220 801 229 ! ! ! ! ! ! ! END (* if *); 20230 802 230 ! ! ! ! ! ! END (* lock - with *); 20240 803 231 ! ! ! ! ! ! 20250 804 232 ! ! ! ! ! END (* creation of a vcc_incarnation *); 20260 805 233 ! ! ! ! ! \f tsvchlst 81.06.12. 16.11. page 26 21010 806 234 ! ! ! ! ! 21020 807 235 ! ! ! ! ! #h74: (* remove a vcc *) 21030 808 236 ! ! ! ! ! BEGIN 21040 809 237 ! ! ! ! ! ! 21050 810 238 ! ! ! ! ! ! LOCK in_mes AS mes : alarm_form74 DO 21060 811 239 ! ! ! ! ! ! WITH mes, head DO 21070 812 240 ! ! ! ! ! ! IF send.macro <> dc_addr THEN 21080 813 241 ! ! ! ! ! ! result_code:= unknown_sender 21090 814 242 ! ! ! ! ! ! ELSE 21100 815 243 ! ! ! ! ! ! del_vct_elm ( vcc_addr, result_code) 21110 816 244 ! ! ! ! ! ! 21120 817 245 ! ! ! ! ! END; 21130 818 246 ! ! ! ! ! 21140 819 247 ! ! ! ! ! 21150 820 248 ! ! ! ! ! \f tsvchlst 81.06.12. 16.11. page 27 22010 821 249 ! ! ! ! ! 22020 822 250 ! ! ! ! ! (* 12.8 *) #hc8: ; 22030 823 251 ! ! ! ! ! 22040 824 252 ! ! ! ! ! (* 12.14 *) #hce: 22050 825 253 ! ! ! ! ! BEGIN 22060 826 254 ! ! ! ! ! ! (* state:= down broadcast vcc down *) 22070 827 255 ! ! ! ! ! ! refuse ( in_mes, not_ready); 22080 828 256 ! ! ! ! ! END 22090 829 257 ! ! ! ! ! OTHERWISE 22100 830 258 ! ! ! ! ! refuse ( in_mes, unknown_opcode) 22110 831 259 ! ! ! ! ! 22120 832 260 ! ! ! ! END; (* case *) 22130 833 261 ! ! ! ! 22140 834 262 ! ! ! ! IF NOT nil ( in_mes) THEN 22150 835 263 ! ! ! ! receipt_mes ( in_mes, result_code); 22160 836 264 ! ! ! ! 22170 837 265 ! ! ! END; (* for vch *) 22180 838 266 ! ! ! \f tsvchlst 81.06.12. 16.11. page 28 23010 839 267 ! ! ! 23020 840 268 ! ! ! netc_route: 23030 841 269 ! ! ! BEGIN (* for a vcc *) 23040 842 270 ! ! ! ! 23050 843 271 ! ! ! ! (*q if test then testout ( z, "to a vcc ", in_mes^.u4); q*) 23060 844 272 ! ! ! ! 23070 845 273 ! ! ! ! vct_index:= 0; 23080 846 274 ! ! ! ! signal_to_vcc ( in_mes, vct_index) 23090 847 275 ! ! ! ! 23100 848 276 ! ! ! END (* to a vcc *); 23110 849 277 ! ! ! \f tsvchlst 81.06.12. 16.11. page 29 24010 850 278 ! ! ! 24020 851 279 ! ! ! OTHERWISE (* not implemented - now used for change of testmode *) 24030 852 280 ! ! ! BEGIN 24040 853 281 ! ! ! ! (*q test := not test; 24050 854 282 ! ! ! ! 24060 855 283 ! ! ! ! if test then testout(z,"starttestout",0); 24070 856 284 ! ! ! ! if not test then testout(z,"stop testout",0); q*) 24080 857 285 ! ! ! ! 24090 858 286 ! ! ! ! refuse ( in_mes, unknown_route) 24100 859 287 ! ! ! ! 24110 860 288 ! ! ! END (* otherwise *); 24120 861 289 ! ! ! 24130 862 290 ! ! ! 24140 863 291 ! ! END (* case - upon routings information *); 24150 864 292 ! ! 24160 865 293 ! ! 24170 866 294 ! UNTIL false (* never stop *) 24180 867 295 ! 24190 868 296 END . (* main program *) 24200 869 24210 870 (* end of file *) 24220 871 24230 872 24240 873 \f tsvchlst 81.06.12. 16.11. page 30 0 215* 224* 238* 317 318 320 475 476 478 845 1 117* 134 158 216* 223* 320 321 323 328 396 397 398 399 400 434 435 437 524 591 735 752 777 2 115* 118* 132 217* 344 345 524 524 555 555 596 596 4 119* 218* 6 736 9 727 10 733 734 16 132 47 430 200 222* accepted 324 337 345 347 387 404 424 484 604 720 794 alarmlabel 109* 156 166 195* 207* 474 515 543* 544* 657 alarmnetaddr 110* 126* alarm_form70 194* 707 alarm_form74 206* 810 alfa 251* alfa_pos 252* 727= 733 735= 735 736 al_env_version <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 578 as 141: 142: 156: 166: 474: 515: 548: 657: 707: 810: at_addr_limit <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 389 594 bm 124* 137 138 139 140 141: 148 161 162 163 164 166: 174 boolean 249* break 430 buf 141: 144= 145 548: 549 byte 198* 199* 200* 277* canno 277* cause 291* 535* 559 chr 733 comp 110* comsem 273* com_pool 583 757 782 connection_code <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 121* 164 count 111* create 579 747 772 data 544* 551= 552 dc_addr 5* 274* 712 758 783 812 del_mic 410* 423 del_vct_elm 409* 797 815 down 119* 135 218* 429 483 595 666 driversem 271* \f tsvchlst 81.06.12. 16.11. page 31 dummy_route 623: existing_entry <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 387 external 279* false 185 249* 866 find_vct_elm 298* 386 423 479 662 flawshape 542* 548 free 104* 137 161 from 359* 361 h12 220* 690: h20 694 h29 694 h70 701: h74 807: handler 126* 156= 170 172 hc0 153 695: hc1 179 699: hc8 121* 822: hce 824: head 109* 145 156: 156 166: 167 195* 207* 474: 474 515: 516 543* 551 553 657: 658 712 811 helppri 223* 590 helpsize 222* 585 high 312* 329= 330 341= 344 345 incname 577 index 301* 318= 320= 323= 336= 348= 374* 386 397 400= 400 401 402 403 419* 423 426 429 430 431 433 434 471* 479 481= 483 486 integer 111* 197* 208* 245* 252* 276* 299* 372* 410* 470* in_mes 243* 608 621 623 657: 671 674 688 691 696 707: 810: 827 830 834 835 846 858 in_sem 365= 365 486 596= 751 752 776 777 ix 382* 397= 398 398 419* 434= 435 435 known_index 459* 475 476 476= 478 481 label_size 169 555 lam_nb 199* link 745 770 lock 141: 142: 156: 166: 474: 515: 548: 657: 707: 810: low 312* 328= 342= 344 344 345 348 macro 519= 557= 660 712 812 macroaddr 6* 244* 275* main 102* 148 174 180 me 103* 130 mes 142: 144 707: 708 810: 811 messem 268* \f tsvchlst 81.06.12. 16.11. page 32 mic 299* 320 321 334 340 micadr 276* micro 145= 171= 474 520= 558= 661 662 mid 312* 330= 333 336 341 342 344= move_vct_entry <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 359* 396 398 401 433 435 436 msg 124* 130 132 140 142: 150 153 156: 178 179 180 291* 458* 474: 486 493 534* 548: 552 563 564 565 netc_route 139 163 840: netc_route1 178 681: note 108* 141 142 not_found 315 392 not_ready 483 827 no_of_by 169= 555= no_room 388 ok 224* 587 opsem 4* 267* 577 750 775 op_code 552= ord 733 out_of_range 792 own 577 place_vct_elm <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 371* 718 port_nb 200* 761 786 process 2* 100* 266* quesem 269* ready 215* 666 rec 145 156 170= 171 359* 363 364 365 366 474 518= 556= 660 661 receipt_mes 284* 500* 835 rec_mes 285* 502* 512 515: 527 reference 124* 243* 285* 291* 458* 502* 534* refuse 291* 493 533* 827 830 858 refuse_code 220* 564 remove 431 res 418* 423 424 440 result 300* 315= 324= 337= 345 347 373* 386 387 387= 388= 392= 404= 411* 440= 469* 479 483= 484 493 521= 559= result_code 247* 286* 504* 521 579= 587 588 604= 662 714= 718 720 745= 747= 770= 772= 792= 794 797 813= 815 835 result_range 247* 286* 291* 300* 373* 411* 418* 469* 504* 535* return 150 623 671 691 s 486 527 565 581 674 696 753 755 756 778 780 781 sem 7* 486 527 565 581 582 583 608 674 696 751 752 753 755 756 757 776 777 778 780 781 782 \f tsvchlst 81.06.12. 16.11. page 33 sempointer 4* 104* 267* 273* send 172= 518 519 520 556 557 558 662 712 812 shad 231* 426 430 431 763 788 795 shadhelp 256* 585 590 shadow 231* 256* shix 366= 366 426 430 431 597= 763 788 795 signal 148 174 180 486 527 565 674 696 signal_to_vcc <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 457* 846 sleep 117* 159 216* 403 start 590 795 state 135 159 175= 364= 364 403= 429= 483 595= 666 666= tail 196* 718 726 742 760 761 767 785 786 797 test 249* tested 118* 175 217* testopen 577 testout 578 588 timeoutsem 272* timeout_sem_no <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 756 781 tssup_sem_no 527 565 674 ts_addr 6* 275* 519 557 668 759 784 ts_pointer 268* 269* ts_pointer_vector <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 7* u1 138= 162= u3 139= 163= 178= 523= 563= 621 u4 132 140= 140 153 164= 179= 524= 524 552 564= 688 unknown_opcode <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 830 unknown_route <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 858 unknown_sender <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 714 813 v 125* 134= 135 145 158= 159 171 175 vac_size 764 vas_sem_no 755 vcat 742 vca_route 641: vca_route1 641: vcc 266* 745 749 770 774 vcc_addr 208* 815 vcc_inc 101* 135 145 159 171 175 vcc_mic 197* 372* 386 389 389 402 718 726 760 785 797 \f tsvchlst 81.06.12. 16.11. page 34 vcc_name 251* 725= 733= 748 773 vcc_nb 252* 726= 733 734= 734 vcc_pri 795 vcc_sem_no 596 vcc_table 101* 232* vchsem 270* vch_help 100* 580 vch_int1 582 696 vch_mic_addr 520 558 669 vch_sem_no 581 608 753 778 vcit 767 vci_route 523 563 640: vci_route1 640: vct 232* 320 321 333 396 398 398 401 402 403 426 429 430 431 433 435 435 436 476 483 486 580 592 665 751 752 763 776 777 788 795 vct_index 237* 591= 592 596 597 662 665 718 751 752 763 776 777 788 795 845= 846 vct_max 238* 317 329 388 396 397 399= 399 434 436 437= 437 vc_addr_limit <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 389 vc_handler 2* vc_incar_e 359* 383* 420* vc_kind 198* 742 767 vc_l 134 158 388 591 vc_mic 145 171 320 321 334 340 363= 363 402= 476 594= vc_range 125* 231* 238* 301* 312* 374* 382* 419* 459* 471* version 13* 578 vic_size 789 vis_sem_no 780 w 582 583 608 757 782 wait 130 137 161 608 wanted 470* 474= 476 479 where 244* 660= 668 who 245* 661= 669 work 383* 396 401 420* 433 436 write 115* 138 162 z 254* 577 578 588 zone 254* \f tsvchlst 81.06.12. 16.11. page 35 AND 1 ARRAY 1 BEGIN 43 CASE 2 CONST 3 DIV 4 DO 27 DOWNTO 1 ELSE 18 END 50 FOR 5 FORWARD 2 IF 30 MOD 1 NIL 2 NOT 2 OF 3 OR 2 OTHERWISE 2 PACKED 2 PROCEDURE 9 RECORD 5 REPEAT 4 THEN 30 TO 4 TYPE 3 UNTIL 4 VAR 25 WITH 12 \f jg5 1981.06.12 16.12 tsvch program 81.06.12. 16.12. pascal80 version 1981.04.01 name headline beginline endline appetite(words) vch_help 108 130 186 : 90 find_vct_elm 312 315 355 : 10 move_vct_ent 360 363 368 : 5 place_vct_el 382 386 406 : 21 del_vct_elm 418 423 441 : 22 signal_to_vc 469 474 497 : 17 receipt_mes 510 512 529 : 11 refuse 542 548 565 : 11 vc_handler 13 577 868 : 209 code: 6 . 128 = 6272 bytes end of PASCAL80 compilation end blocksread = 53 «eof»