|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 87552 (0x15600) Types: TextFile Names: »tssuplst«
└─⟦a41ae585a⟧ Bits:30001842 SW-save af projekt 1000, Alarm-system └─⟦72244f0ef⟧ └─⟦this⟧ »tssuplst«
\f tssuplst 81.06.16. 09.17. page 1 10 1 \f tssuplst 81.06.16. 09.17. page 2 1010 2 (*----------------------------------------------------*) 1020 3 (* *) 1030 4 (* ts supervisor *) 1040 5 (* *) 1050 6 (*----------------------------------------------------*) 1060 7 1070 8 PROCESS tssupervisor ( 1080 9 opsem: sempointer; (* allocator, operator *) 1090 10 VAR sem : !ts_pointer_vector (* ts semaphores *) 1100 11 ); 1110 12 1120 13 CONST 1130 14 version= "vers 3.13 /"; 1140 15 1150 16 (*---------------------- externals -------------------------------*) 1160 17 1170 18 PROCESS timout ( opsem: sempointer; 1180 19 VAR tim: !ts_pointer; t, m: integer ); 1190 20 EXTERNAL; 1200 21 1210 22 <* PROCESS tsconnector ( opsem: sempointer; 1220 23 VAR tss, dc, nc, lam, tim, com : !sempointer; 1230 24 VAR net, s1, s2, s3, s4: !ts_pointer ); 1240 25 EXTERNAL; *> 1250 26 1260 27 PROCESS at_handler ( opsem: sempointer; 1270 28 VAR dca, tsa : macroaddr; 1280 29 VAR sem : !ts_pointer_vector ); 1290 30 EXTERNAL; 1300 31 1310 32 PROCESS vc_handler ( opsem: sempointer; 1320 33 VAR dca, tsa : macroaddr; 1330 34 VAR sem : !ts_pointer_vector ); 1340 35 EXTERNAL; 1350 36 1360 37 1370 38 PROCESS lam ( opsem: sempointer; 1380 39 pu, level: integer; 1390 40 VAR main_sem: !ts_pointer 1400 41 ); 1410 42 EXTERNAL; 1420 43 \f tssuplst 81.06.16. 09.17. page 3 2010 44 CONST 2020 45 2030 46 maxroute = 12; (* for u3 routing *) 2040 47 2050 48 TYPE (*----------------- options ------------------------------*) 2060 49 2070 50 grouptable = ARRAY (func_grp) OF integer; 2080 51 modulref = ( netc, vch, ath, traffic, nc, dc, tss, dummy, empty ); 2090 52 modulident = ARRAY (netc..ath) OF byte; 2100 53 modultable = ARRAY (modulref) OF integer; 2110 54 modulstate = ARRAY (modulref) OF boolean; 2120 55 modulroute = ARRAY (0..maxroute) OF modulref; 2130 56 leveltab = ARRAY (0..max_lam+1) OF byte; 2140 57 2150 58 CONST (*-------------- options -------------------------------*) 2160 59 2170 60 traffic_id = 24; (* for time_out *) 2180 61 nc_ident = 25; 2190 62 dc_ident = 26; 2200 63 2210 64 microadr = modultable ( netc_mic_addr, vch_mic_addr, ath_mic_addr, 2220 65 traffic_id, nc_ident, dc_ident, 0, 0, 0 ); 2230 66 2240 67 book_id = modulident(1,2,3); 2250 68 2260 69 interval = modultable(tss_netc_time,tss_vch_time,tss_ath_time, 2270 70 tss_nc_ltime,tss_nc_stime,tss_dc_stime,-1,-1,-1); 2280 71 2290 72 from = modulroute(tss,tss,netc,netc,ath,ath,4***vch,3***tss); 2300 73 2310 74 u3val= modulident(netc_route1, netc_route, netc_route); 2320 75 2330 76 2340 77 \f tssuplst 81.06.16. 09.17. page 4 3010 78 (*-------------------- op codes ---------------------------------*) 3020 79 3030 80 log_code = #h00; (* 0.0 *) 3040 81 nb_code = #h10; (* 1.0 *) 3050 82 refuse_code= #h12; (* 1.2 *) 3060 83 dc_down = #h20; (* 2.0 *) 3070 84 dc_up = #h21; (* 2.1 *) 3080 85 nc_down = #h22; (* 2.2 *) 3090 86 nc_up = #h23; (* 2.3 *) 3100 87 ts_down = #h24; (* 2.4 *) 3110 88 ts_up = #h25; (* 2.5 *) 3120 89 vc_down = #h26; (* 2.6 *) 3130 90 vc_up = #h27; (* 2.7 *) 3140 91 at_down = #h28; (* 2.8 *) 3150 92 at_up = #h29; (* 2.9 *) 3160 93 newlam_code= #h9c; (* 9.12 *) 3170 94 anslam_code= #h9d; (* 9.13 *) 3180 95 new_addr_code= #hb0; (* 11.0 *) 3190 96 new_ans_code = #hb1; (* 11.1 *) 3200 97 nodetest_code= #hc0; (* 12.0 *) 3210 98 nodeans_code= #hc1; (* 12.1 *) 3220 99 input_code = #hc5; (* 12.5 *) 3230 100 contest_code= #hc8; (* 12.8 *) 3240 101 conansw_code= #hc9; (* 12.9 *) 3250 102 3260 103 (*---------------------- other constants -------------------------*) 3270 104 3280 105 maxno = 2*2*2*2; (* 4 bits *) 3290 106 read_clock = 2; 3300 107 write = 2; 3310 108 by_father = 47; (* break parameter *) 3320 109 forever = false; 3330 110 label_length = label_size; (* size in words, length in bytes *) 3340 111 logleng = 2*size_supp -(4+2+label_length); 3350 112 rawleng = 2*size_listen - 2; 3360 113 free_sem_no = com_pool; (* free listen buffers are here *) 3370 114 queue = tssup_int1; 3380 115 done = tssup_int2; 3390 116 supp_sem_no = tssup_int3; (* log buffers *) 3400 117 3410 118 \f tssuplst 81.06.16. 09.17. page 5 4010 119 4020 120 (*------------------------ message formats --------------------------*) 4030 121 4040 122 TYPE 4050 123 4060 124 testshape = PACKED RECORD (* for nodetest *) 4070 125 ! head: alarmlabel; 4080 126 ! data: ARRAY (1..5) OF integer 4090 127 END; 4100 128 4110 129 4120 130 4130 131 flawshape = PACKED RECORD (* for 1.0 and 1.2 *) 4140 132 ! head : alarmlabel; 4150 133 ! data : alarmlabel 4160 134 END; 4170 135 4180 136 4190 137 4200 138 note = PACKED RECORD (* for broadcast *) 4210 139 ! head: alarmlabel; 4220 140 ! component: alarmnetaddr; 4230 141 ! count: integer 4240 142 END; 4250 143 4260 144 4270 145 4280 146 lammess = PACKED RECORD (* for new lam *) 4290 147 ! head: alarmlabel; 4300 148 ! lam_num, 4310 149 ! lam_level : integer 4320 150 END; 4330 151 4340 152 4350 153 \f tssuplst 81.06.16. 09.17. page 6 5010 154 5020 155 (*------------------ variables section ------------------------*) 5030 156 5040 157 VAR 5050 158 5060 159 who, 5070 160 here : alarmnetaddr; (* my own addr updated by 11.00 *) 5080 161 debug : integer:= 1; (* controls testoutput *) 5090 162 cv, (* value of create *) 5100 163 lost, (* num of loast messages *) 5110 164 quelen, (* actual queuelength *) 5120 165 maxqueue, (* max queuelength *) 5130 166 queput, (* number of queings *) 5140 167 nodetest_cnt : integer:=0; (* numb of nodetests send *) 5150 168 running : modulstate := modulstate(4***true, false, false, 3***true); 5160 169 ms1, (* a free buffer *) 5170 170 ms : reference; (* mess arrived *) 5180 171 console : zone; (**debug for output **) 5190 172 5200 173 (*----------------- for ts modules ----------------------*) 5210 174 5220 175 no : ARRAY (netc..ath) OF integer; 5230 176 suppool: pool no_req_supp OF ARRAY (1..size_supp) OF integer; 5240 177 lamname : alfa := "lam00 "; 5250 178 leveltable : leveltab := leveltab((max_lam+2) *** 0); 5260 179 proc_lam : ARRAY(0..max_lam) OF shadow; 5270 180 proc_timeout, 5280 181 proc_vchan, 5290 182 proc_athan : shadow; 5300 183 5310 184 (*----------------- for timing ---------------------------*) 5320 185 5330 186 nc_long, nc_short, (* timeouts from 11.0 *) 5340 187 cnt : integer; 5350 188 netaddr: ARRAY (nc..dc) OF alarmnetaddr; 5360 189 module: modulref; 5370 190 t_out, (* module timeouts *) 5380 191 t_up : ARRAY (netc..dc) OF reference; (* book and update *) 5390 192 u_pool: pool no_tss_tim OF updates; 5400 193 t_pool: pool no_tss_tim OF timers; 5410 194 5420 195 clockpool: pool 1 OF ts_time; (**demo **) 5430 196 clock_msg: reference; 5440 197 5450 198 (*---------------- end of data section -----------------------*) 5460 199 \f tssuplst 81.06.16. 09.17. page 7 6010 200 <*q q*> 6020 201 (*------------------------ display -----------------------------*) 6030 202 6040 203 PROCEDURE display ( VAR msg: reference); (* write contents *) 6050 204 CONST 6060 205 lastword = 16; 6070 206 TYPE 6080 207 abuf = RECORD w: ARRAY(1..lastword) OF integer END; 6090 208 VAR 6100 209 i,m : integer; 6110 210 BEGIN 6120 211 1 ! LOCK msg AS buf: abuf DO 6130 212 2 ! WITH buf DO 6140 213 3 ! BEGIN 6150 214 4 ! ! m:= (w(1)+1) DIV 2; 6160 215 5 ! ! IF m<7 THEN m:= 7; 6170 216 6 ! ! IF m>lastword THEN m:=lastword; 6180 217 7 ! ! FOR i:= 1 TO m DO testout ( console," data ", w(i)); 6190 218 8 ! END; 6200 219 9 END; 6210 220 6220 221 <*q q*> 6230 222 6240 223 \f tssuplst 81.06.16. 09.17. page 8 7010 224 (*------------------------ gettime -----------------------------*) 7020 225 7030 226 FUNCTION gettime : ts_time; 7040 227 TYPE 7050 228 clock_form = RECORD time: ts_time END; 7060 229 BEGIN 7070 230 1 ! signal ( clock_msg, sem(timeout_sem_no).s^); 7080 231 2 ! wait ( clock_msg, sem(done).w^); 7090 232 3 ! LOCK clock_msg AS buf : clock_form DO gettime:= buf.time 7100 233 4 END; 7110 234 7120 235 \f tssuplst 81.06.16. 09.17. page 9 8010 236 8020 237 (*--------------------- odd ------------------------------------*) 8030 238 8040 239 FUNCTION odd ( number: integer ) : boolean; 8050 240 BEGIN 8060 241 1 ! odd:= number MOD 2 = 1 8070 242 2 END; 8080 243 8090 244 8100 245 8110 246 8120 247 \f tssuplst 81.06.16. 09.17. page 10 9010 248 (*---------------------- send up ---------------------------*) 9020 249 9030 250 9040 251 PROCEDURE send_up ( (* signals to net-con *) 9050 252 VAR msg : reference; (* mess to be send *) 9060 253 operation : byte ); (* op code *) 9070 254 BEGIN 9080 255 1 ! 9090 256 2 ! msg^.u1:= write; 9100 257 3 ! msg^.u3:= tss_route; 9110 258 4 ! msg^.u4:= operation; 9120 259 5 ! IF ( debug MOD 16 ) >= 8 THEN display ( msg); 9130 260 6 ! signal ( msg, sem(netc_sem_no).s^ ); 9140 261 7 END; 9150 262 9160 263 9170 264 \f tssuplst 81.06.16. 09.17. page 11 10010 265 (*------------------------ to queue ------------------------------*) 10020 266 10030 267 PROCEDURE to_queue ( VAR msg : reference ); 10040 268 BEGIN 10050 269 1 ! count ( queput); 10060 270 2 ! quelen:= quelen+1; 10070 271 3 ! IF quelen > maxqueue THEN maxqueue:= quelen; 10080 272 4 ! signal ( msg, sem(queue).s^) 10090 273 5 END; 10100 274 10110 275 \f tssuplst 81.06.16. 09.17. page 12 11010 276 <* -- only used IN nc 11020 277 (*---------------------- nodetest --------------------------*) 11030 278 11040 279 PROCEDURE nodetest ( 11050 280 node : modulref ); (* node to be tested *) 11060 281 11070 282 VAR 11080 283 try : reference; (* node test message *) 11090 284 11100 285 BEGIN 11110 286 sensesem ( try, sem(free_sem_no).w^); 11120 287 IF NOT nil ( try) THEN 11130 288 BEGIN 11140 289 nodetest_cnt:= nodetest_cnt+1; 11150 290 LOCK try AS buf : testshape DO 11160 291 BEGIN 11170 292 WITH buf, head DO 11180 293 BEGIN 11190 294 no_of_by:= testlength; 11200 295 rec:= netaddr(node); 11210 296 send:= here; 11220 297 result:= 0; 11230 298 ts_add:= gettime; 11240 299 END; 11250 300 buf.data(1):= nodetest_cnt; 11260 301 END; 11270 302 send_up ( try, nodetest_code); 11280 303 timerupdate ( t_up(node), interval(node), 11290 304 sem(timeout_sem_no).s^, sem(done).w^ ) 11300 305 END 11310 306 END; 11320 307 11330 308 *> 11340 309 \f tssuplst 81.06.16. 09.17. page 13 12010 310 (*---------------------- broadcast -------------------------*) 12020 311 12030 312 PROCEDURE broadcast ( (* send a broadcast message *) 12040 313 VAR msg : reference; (* used for message *) 12050 314 element : alarmnetaddr; (* unit in question *) 12060 315 cnt : integer; (* counter in datapart *) 12070 316 operation: byte; (* op code *) 12080 317 recip : modulref); (* reveiver *) 12090 318 12100 319 CONST 12110 320 broadlength = label_length+6; 12120 321 12130 322 BEGIN 12140 323 1 ! LOCK msg AS buf : note DO 12150 324 2 ! WITH buf, head DO 12160 325 3 ! BEGIN 12170 326 4 ! ! no_of_by:= broadlength; 12180 327 5 ! ! IF recip = netc THEN rec:= netaddr(nc) ELSE 12190 328 6 ! ! BEGIN 12200 329 7 ! ! ! rec:= here; 12210 330 8 ! ! ! rec.micro:= microadr(recip) 12220 331 9 ! ! END; 12230 332 10 ! ! send:= here; 12240 333 11 ! ! update:= insert_code; 12250 334 12 ! ! result:= accepted; 12260 335 13 ! ! op_code:= operation; 12270 336 14 ! ! ts_add:= gettime; 12280 337 15 ! ! component:= element; 12290 338 16 ! ! count:= cnt 12300 339 17 ! END; 12310 340 18 ! msg^.u1:= write; 12320 341 19 ! IF recip = netc THEN msg^.u3:= tss_route ELSE msg^.u3:= netc_route1; 12330 342 20 ! msg^.u4:= operation; 12340 343 21 ! signal ( msg, sem(no(recip)).s^ ) 12350 344 22 ! (* end *) 12360 345 23 END; 12370 346 12380 347 \f tssuplst 81.06.16. 09.17. page 14 13010 348 13020 349 (*--------------------- start timeout -------------------------*) 13030 350 13040 351 PROCEDURE start_timeout; 13050 352 BEGIN 13060 353 1 ! IF nil ( proc_timeout ) THEN 13070 354 2 ! BEGIN 13080 355 3 ! ! cv:= link ("timout ", timout ); 13090 356 4 ! ! cv:= create ( "timout ", 13100 357 5 ! ! timout ( opsem, 13110 358 6 ! ! sem(timeout_sem_no), time_out_unit, timeout_l), 13120 359 7 ! ! proc_timeout, tim_size); 13130 360 8 ! ! IF cv = 0 THEN start ( proc_timeout, tim_pri) 13140 361 9 ! ! ELSE 13150 362 10 ! ! BEGIN 13160 363 11 ! ! ! testout ( console,"timeoutstart", cv); 13170 364 12 ! ! ! cv:= unlink ( timout) 13180 365 13 ! ! END 13190 366 14 ! END 13200 367 15 END; 13210 368 13220 369 13230 370 \f tssuplst 81.06.16. 09.17. page 15 14010 371 (*------------------- start lam --------------------------------*) 14020 372 14030 373 PROCEDURE start_lam ( nr, level: byte ); 14040 374 14050 375 BEGIN 14060 376 1 ! 14070 377 2 ! IF nil ( proc_lam(nr)) THEN 14080 378 3 ! BEGIN 14090 379 4 ! ! lamname(4):= chr ( ord("0") + nr DIV 10); 14100 380 5 ! ! lamname(5):= chr ( ord("0") + nr MOD 10); 14110 381 6 ! ! cv:= create ( lamname, 14120 382 7 ! ! lam ( opsem, pu_no, level, 14130 383 8 ! ! sem(lam_sem_no+nr) ), 14140 384 9 ! ! proc_lam(nr), lam_size); 14150 385 10 ! ! IF cv = 0 THEN 14160 386 11 ! ! BEGIN 14170 387 12 ! ! ! start ( proc_lam(nr), lam_pri); 14180 388 13 ! ! ! leveltable(nr):= level 14190 389 14 ! ! END 14200 390 15 ! ! ELSE testout ( console,"lam start ", cv); 14210 391 16 ! END; 14220 392 17 END; 14230 393 14240 394 \f tssuplst 81.06.16. 09.17. page 16 15010 395 <*------------------- start netcon ----------------------------* 15020 396 15030 397 PROCEDURE start_netcon; 15040 398 BEGIN 15050 399 IF nil ( proc_netcon ) THEN 15060 400 BEGIN 15070 401 (* 15080 402 cv:= link ("netconnector", netconnector ); 15090 403 *) 15100 404 cv:= link ("tsconnector ", tsconnector); 15110 405 cv:= create ( "tsconnector ", 15120 406 tsconnector ( 15130 407 opsem, 15140 408 sem(tssup_sem_no).s, 15150 409 sem(dc_sem_no).s, 15160 410 sem(nc_sem_no).s, 15170 411 sem(lam_sem_no).s, 15180 412 sem(timeout_sem_no).s, 15190 413 sem(com_pool).w, 15200 414 sem(netc_sem_no), 15210 415 sem(net_int1), sem(net_int2), sem(net_int3), 15220 416 sem(net_int4) 15230 417 ), 15240 418 proc_netcon, netc_size); 15250 419 IF cv = 0 THEN start ( proc_netcon, netc_pri) 15260 420 ELSE 15270 421 BEGIN 15280 422 testout ( console,"netcon start", cv ); 15290 423 cv:= unlink ( tsconnector) 15300 424 END; 15310 425 END 15320 426 END; 15330 427 -------------------------------------------------------------*> 15340 428 15350 429 \f tssuplst 81.06.16. 09.17. page 17 16010 430 16020 431 (*----------------------- start vchandler ---------------------*) 16030 432 16040 433 PROCEDURE start_vchan; 16050 434 BEGIN 16060 435 1 ! IF nil ( proc_vchan ) THEN 16070 436 2 ! BEGIN 16080 437 3 ! ! cv:= link ( "vc_handler ", vc_handler); 16090 438 4 ! ! cv:= create ( "vc_handler ", 16100 439 5 ! ! vc_handler ( opsem, 16110 440 6 ! ! netaddr(dc).macro, 16120 441 7 ! ! here.macro, 16130 442 8 ! ! sem 16140 443 9 ! ! ), 16150 444 10 ! ! proc_vchan, vch_size); 16160 445 11 ! ! IF cv = 0 THEN start ( proc_vchan, vch_pri) 16170 446 12 ! ! ELSE 16180 447 13 ! ! BEGIN 16190 448 14 ! ! ! testout ( console, "vc_han start", cv); 16200 449 15 ! ! ! cv:= unlink ( vc_handler) 16210 450 16 ! ! END 16220 451 17 ! END 16230 452 18 END; 16240 453 16250 454 16260 455 \f tssuplst 81.06.16. 09.17. page 18 17010 456 17020 457 (*------------------------ start athandler -----------------------*) 17030 458 17040 459 PROCEDURE start_athan; 17050 460 BEGIN 17060 461 1 ! IF nil ( proc_athan ) THEN 17070 462 2 ! BEGIN 17080 463 3 ! ! cv:= link ( "at_handler ", at_handler); 17090 464 4 ! ! cv:= create ( "at_handler ", 17100 465 5 ! ! at_handler ( opsem, 17110 466 6 ! ! netaddr(dc).macro, 17120 467 7 ! ! here.macro, 17130 468 8 ! ! sem 17140 469 9 ! ! ), 17150 470 10 ! ! proc_athan, ath_size); 17160 471 11 ! ! IF cv = 0 THEN start ( proc_athan, ath_pri ) 17170 472 12 ! ! ELSE 17180 473 13 ! ! BEGIN 17190 474 14 ! ! ! testout ( console, "at_han start", cv); 17200 475 15 ! ! ! cv:= unlink ( at_handler ) 17210 476 16 ! ! END 17220 477 17 ! END 17230 478 18 END; 17240 479 \f tssuplst 81.06.16. 09.17. page 19 18010 480 18020 481 (*---------------------- module timeout --------------------*) 18030 482 18040 483 PROCEDURE module_timeout ( 18050 484 VAR msg : reference; (* received mess *) 18060 485 VAR res : modulref); (* becomes dummy *) 18070 486 18080 487 VAR 18090 488 cnt, 18100 489 who : integer; 18110 490 elem : alarmnetaddr; 18120 491 bm1, bm2 : reference; (* 2 empty buffers *) 18130 492 18140 493 BEGIN 18150 494 1 ! sensesem ( bm1, sem(free_sem_no).w^); 18160 495 2 ! IF NOT nil ( bm1) THEN 18170 496 3 ! sensesem ( bm2, sem(free_sem_no).w^); 18180 497 4 ! IF nil ( bm2 ) THEN 18190 498 5 ! BEGIN (* try later *) 18200 499 6 ! ! IF NOT nil ( bm1) THEN return ( bm1); 18210 500 7 ! ! to_queue ( msg) 18220 501 8 ! END ELSE 18230 502 9 ! BEGIN 18240 503 10 ! ! LOCK msg AS buf : timers DO who:= buf.object; 18250 504 11 ! ! elem.macro:= here.macro; 18260 505 12 ! ! elem.micro:= who; 18270 506 13 ! ! CASE who OF 18280 507 14 ! ! ! 18290 508 15 ! ! ! <* 18300 509 16 ! ! ! netc_mic_addr: 18310 510 17 ! ! ! BEGIN (* net-connector stopped, so remove it 18320 511 18 ! ! ! and start a new one *) 18330 512 19 ! ! ! break ( proc_netcon, by_father); 18340 513 20 ! ! ! unlink ( tsconnector); 18350 514 21 ! ! ! remove ( proc_netcon); 18360 515 22 ! ! ! (* get released buffers. *) 18370 516 23 ! ! ! start_netcon; 18380 517 24 ! ! ! nodetest ( nc); 18390 518 25 ! ! ! timerbook ( t_up(netc), msg, interval(netc), who, 18400 519 26 ! ! ! sem(timeout_sem_no).s^, sem(done).w^) 18410 520 27 ! ! ! END; 18420 521 28 ! ! ! *> 18430 522 29 ! ! ! 18440 523 30 ! ! ! ath_mic_addr: 18450 524 31 ! ! ! BEGIN 18460 525 32 ! ! ! ! IF running(ath) THEN \f tssuplst 81.06.16. 09.17. page 20 18470 526 33 ! ! ! ! BEGIN 18480 527 34 ! ! ! ! ! broadcast ( bm1, elem, 0, at_down, netc); 18490 528 35 ! ! ! ! ! broadcast ( bm2, elem, 0, at_down, vch ) 18500 529 36 ! ! ! ! END; 18510 530 37 ! ! ! ! running(ath):= false; 18520 531 38 ! ! ! ! timerbook ( t_up(ath), msg, -1, who, 18530 532 39 ! ! ! ! sem(timeout_sem_no).s^, sem(done).w^) 18540 533 40 ! ! ! END; 18550 534 41 ! ! ! 18560 535 42 ! ! ! vch_mic_addr: 18570 536 43 ! ! ! BEGIN 18580 537 44 ! ! ! ! IF running(vch) THEN 18590 538 45 ! ! ! ! BEGIN 18600 539 46 ! ! ! ! ! broadcast ( bm1, elem, 0, vc_down, netc); 18610 540 47 ! ! ! ! ! broadcast ( bm2, elem, 0, vc_down, ath ); 18620 541 48 ! ! ! ! ! running(vch):= false 18630 542 49 ! ! ! ! END; 18640 543 50 ! ! ! ! timerbook ( t_up(vch), msg, -1, who, 18650 544 51 ! ! ! ! sem(timeout_sem_no).s^, sem(done).w^) 18660 545 52 ! ! ! END; 18670 546 53 ! ! ! 18680 547 54 ! ! ! <* 18690 548 55 ! ! ! traffic_id: 18700 549 56 ! ! ! BEGIN (* nc or paxnet stopped *) 18710 550 57 ! ! ! nodetest ( nc); 18720 551 58 ! ! ! timerbook ( t_up(traffic), msg, -1, who, 18730 552 59 ! ! ! sem(timeout_sem_no).s^, sem(done).w^) 18740 553 60 ! ! ! END; 18750 554 61 ! ! ! *> 18760 555 62 ! ! ! 18770 556 63 ! ! ! nc_ident: 18780 557 64 ! ! ! BEGIN (* nc down *) 18790 558 65 ! ! ! ! IF running(nc) THEN 18800 559 66 ! ! ! ! BEGIN 18810 560 67 ! ! ! ! ! broadcast ( bm1, elem, 0, nc_down, ath); 18820 561 68 ! ! ! ! ! broadcast ( bm2, elem, 0, nc_down, vch); 18830 562 69 ! ! ! ! ! running(dc):= false; 18840 563 70 ! ! ! ! ! running(nc):= false 18850 564 71 ! ! ! ! END; 18860 565 72 ! ! ! ! timerbook ( t_up(nc), msg, -1, who, 18870 566 73 ! ! ! ! sem(timeout_sem_no).s^, sem(done).w^) 18880 567 74 ! ! ! END; 18890 568 75 ! ! ! 18900 569 76 ! ! ! <* 18910 570 77 ! ! ! dc_ident: 18920 571 78 ! ! ! BEGIN (* dc down *) \f tssuplst 81.06.16. 09.17. page 21 18930 572 79 ! ! ! IF running(dc) THEN 18940 573 80 ! ! ! BEGIN 18950 574 81 ! ! ! broadcast ( bm1, elem, dc_down, ath); 18960 575 82 ! ! ! broadcast ( bm2, elem, dc_down, vch); 18970 576 83 ! ! ! running(dc):= false 18980 577 84 ! ! ! END; 18990 578 85 ! ! ! timerbook ( t_up(dc), msg, -1, who, 19000 579 86 ! ! ! sem(timeout_sem_no).s^, sem(done).w^); 19010 580 87 ! ! ! END; 19020 581 88 ! ! ! *> 19030 582 89 ! ! ! OTHERWISE 19040 583 90 ! ! ! BEGIN 19050 584 91 ! ! ! ! return ( bm1); 19060 585 92 ! ! ! ! return ( bm2) 19070 586 93 ! ! ! END 19080 587 94 ! ! END 19090 588 95 ! END; 19100 589 96 ! res:= dummy 19110 590 97 END; (* of module timeout *) 19120 591 19130 592 \f tssuplst 81.06.16. 09.17. page 22 20010 593 20020 594 (*--------------------- route ---------------------------*) 20030 595 20040 596 FUNCTION route ( 20050 597 microadr : integer (* addr of local module *) 20060 598 ) : modulref; (* the selected module *) 20070 599 BEGIN 20080 600 1 ! IF microadr >= at_addr_limit THEN route:= ath ELSE 20090 601 2 ! IF microadr >= vc_addr_limit THEN route:= vch ELSE 20100 602 3 ! IF microadr = vch_mic_addr THEN route:= vch ELSE 20110 603 4 ! IF microadr = ath_mic_addr THEN route:= ath ELSE 20120 604 5 ! IF microadr = netc_mic_addr THEN route:= netc ELSE 20130 605 6 ! IF microadr = tss_mic_addr THEN route:= tss ELSE 20140 606 7 ! route:= dc 20150 607 8 END; 20160 608 20170 609 \f tssuplst 81.06.16. 09.17. page 23 21010 610 (*----------------------- waitlog ----------------------------------*) 21020 611 21030 612 PROCEDURE waitlog ( (* fetch a free logbuffer *) 21040 613 VAR msg : reference ); (* a msg for log *) 21050 614 21060 615 BEGIN 21070 616 1 ! 21080 617 2 ! (* allocator may be used later ! *) 21090 618 3 ! 21100 619 4 ! IF open ( sem(supp_sem_no).w^) THEN 21110 620 5 ! BEGIN 21120 621 6 ! ! 21130 622 7 ! ! wait ( msg, sem(supp_sem_no).w^ ); 21140 623 8 ! ! 21150 624 9 ! ! WHILE msg^.u3 = dummy_route DO 21160 625 10 ! ! BEGIN 21170 626 11 ! ! ! return ( msg); 21180 627 12 ! ! ! wait ( msg, sem(supp_sem_no).w^ ) 21190 628 13 ! ! END; 21200 629 14 ! END 21210 630 15 ! 21220 631 16 END; 21230 632 21240 633 \f tssuplst 81.06.16. 09.17. page 24 22010 634 (*---------------------- make log --------------------------*) 22020 635 22030 636 PROCEDURE make_log ( VAR msg : reference ); 22040 637 (* makes a copy of msg.data and send to dc. *) 22050 638 22060 639 TYPE 22070 640 logshape = PACKED RECORD 22080 641 ! head : alarmlabel; 22090 642 ! extra : integer; 22100 643 ! byno : integer; 22110 644 ! data : ARRAY (1..logleng) OF byte; 22120 645 END; 22130 646 rawshape = PACKED RECORD 22140 647 ! bytes : integer; 22150 648 ! rawdata : ARRAY (1..rawleng) OF byte; 22160 649 END; 22170 650 22180 651 VAR 22190 652 cnt : 1..rawleng; 22200 653 length : integer; 22210 654 logm : reference; 22220 655 22230 656 BEGIN 22240 657 1 ! LOCK msg AS head : alarmlabel DO head.op_code:= msg^.u4; 22250 658 2 ! (* if ( logmin <= msg^.u4) and ( msg^.u4 <= logmax ) then +++++++ 22260 659 3 ! begin -------------------------------------------------------*) 22270 660 4 ! waitlog ( logm ); 22280 661 5 ! IF nil ( logm) THEN to_queue ( msg) ELSE 22290 662 6 ! BEGIN 22300 663 7 ! ! IF msg^.u4 = refuse_code THEN (* make copy 1.0 *) 22310 664 8 ! ! BEGIN 22320 665 9 ! ! ! LOCK logm AS copy: flawshape DO 22330 666 10 ! ! ! LOCK msg AS buf: flawshape DO 22340 667 11 ! ! ! BEGIN 22350 668 12 ! ! ! ! copy:= buf; 22360 669 13 ! ! ! ! copy.head.rec.macro:= netaddr(dc).macro; 22370 670 14 ! ! ! ! copy.head.rec.micro:= dc_erh_mic_addr; 22380 671 15 ! ! ! END; 22390 672 16 ! ! ! send_up ( logm, nb_code) 22400 673 17 ! ! END 22410 674 18 ! ! ELSE 22420 675 19 ! ! \f tssuplst 81.06.16. 09.17. page 25 23010 676 20 ! ! BEGIN (* make log 0.0 *) 23020 677 21 ! ! ! LOCK logm AS log : logshape DO 23030 678 22 ! ! ! LOCK msg AS buf : rawshape DO 23040 679 23 ! ! ! BEGIN 23050 680 24 ! ! ! ! length:= label_length; 23060 681 25 ! ! ! ! IF ( buf.bytes > label_length ) 23070 682 26 ! ! ! ! AND ( buf.bytes <= rawleng ) 23080 683 27 ! ! ! ! AND ( buf.bytes <= logleng ) THEN length:= buf.bytes; 23090 684 28 ! ! ! ! 23100 685 29 ! ! ! ! WITH log, head DO 23110 686 30 ! ! ! ! BEGIN 23120 687 31 ! ! ! ! ! no_of_by:= label_length+2+length; 23130 688 32 ! ! ! ! ! rec.macro:= netaddr(dc).macro; 23140 689 33 ! ! ! ! ! rec.micro:= dc_log_mic_addr; 23150 690 34 ! ! ! ! ! send:= here; 23160 691 35 ! ! ! ! ! update:= insert_code; 23170 692 36 ! ! ! ! ! ts_add:= gettime; 23180 693 37 ! ! ! ! END; 23190 694 38 ! ! ! ! log.extra:= quelen; 23200 695 39 ! ! ! ! log.byno:= buf.bytes; 23210 696 40 ! ! ! ! FOR cnt:= 1 TO length DO log.data(cnt):= buf.rawdata(cnt); 23220 697 41 ! ! ! END; 23230 698 42 ! ! ! send_up ( logm, log_code) 23240 699 43 ! ! END 23250 700 44 ! END 23260 701 45 ! (* end --------------------------------------- ++++++++++++++++*) 23270 702 46 END; 23280 703 \f tssuplst 81.06.16. 09.17. page 26 24010 704 (*--------------------- refuse --------------------------*) 24020 705 24030 706 PROCEDURE refuse ( VAR msg : reference; cause : result_range ); 24040 707 (* send opcode 1.2 back *) 24050 708 CONST 24060 709 newleng = 2*label_length+2; 24070 710 24080 711 VAR 24090 712 receiver : macroaddr; 24100 713 who : integer; 24110 714 24120 715 BEGIN 24130 716 1 ! LOCK msg AS buf : flawshape DO 24140 717 2 ! WITH buf DO 24150 718 3 ! BEGIN 24160 719 4 ! ! data:= head; 24170 720 5 ! ! data.op_code:= msg^.u4; 24180 721 6 ! ! WITH head DO 24190 722 7 ! ! BEGIN 24200 723 8 ! ! ! no_of_by:= newleng; 24210 724 9 ! ! ! rec:= send; 24220 725 10 ! ! ! receiver:= rec.macro; 24230 726 11 ! ! ! who:= rec.micro; 24240 727 12 ! ! ! send:= here; 24250 728 13 ! ! ! result:= cause; 24260 729 14 ! ! ! ts_add:= gettime 24270 730 15 ! ! END 24280 731 16 ! END; 24290 732 17 ! 24300 733 18 ! IF receiver <> here.macro THEN 24310 734 19 ! send_up ( msg, refuse_code) 24320 735 20 ! ELSE 24330 736 21 ! BEGIN 24340 737 22 ! ! IF who < vc_addr_limit THEN msg^.u3:= netc_route1 24350 738 23 ! ! ELSE msg^.u3:= netc_route; 24360 739 24 ! ! msg^.u4:= refuse_code; 24370 740 25 ! ! CASE route ( who) OF 24380 741 26 ! ! ! ath: signal ( msg, sem(ath_sem_no).s^); 24390 742 27 ! ! ! vch: signal ( msg, sem(vch_sem_no).s^); 24400 743 28 ! ! ! OTHERWISE 24410 744 29 ! ! ! send_up ( msg, refuse_code) 24420 745 30 ! ! END; 24430 746 31 ! END; 24440 747 32 END; 24450 748 \f tssuplst 81.06.16. 09.17. page 27 25010 749 (*---------------- downwards ----------------------------*) 25020 750 25030 751 PROCEDURE downwards ( 25040 752 VAR msg : reference; (* a msg from net *) 25050 753 VAR modul : modulref); (* tells what to do later *) 25060 754 VAR 25070 755 receiver : macroaddr; 25080 756 from : alarmnetaddr; 25090 757 xmt_dc : 0..15; 25100 758 who : integer; 25110 759 25120 760 BEGIN 25130 761 1 ! LOCK msg AS head : alarmlabel DO 25140 762 2 ! WITH head DO 25150 763 3 ! BEGIN 25160 764 4 ! ! receiver:= rec.macro; 25170 765 5 ! ! who := rec.micro; 25180 766 6 ! ! xmt_dc := send.macro.dc_addr; 25190 767 7 ! ! from := send; 25200 768 8 ! END; 25210 769 9 ! 25220 770 10 ! IF ( debug MOD 32 ) >= 16 THEN display ( msg); 25230 771 11 ! 25240 772 12 ! IF receiver <> here.macro THEN (* not for me *) 25250 773 13 ! IF msg^.u4 = refuse_code THEN modul:= empty ELSE 25260 774 14 ! BEGIN 25270 775 15 ! ! refuse ( msg, unknown_receiver); 25280 776 16 ! ! modul:= dummy 25290 777 17 ! END 25300 778 18 ! ELSE 25310 779 19 ! BEGIN (* addr ok *) 25320 780 20 ! ! IF (xmt_dc <> here.macro.dc_addr) AND 25330 781 21 ! ! running(dc) THEN make_log ( msg ); 25340 782 22 ! ! IF from = netaddr(dc) THEN running(dc):= true; 25350 783 23 ! ! IF nil ( msg) THEN modul:= dummy ELSE 25360 784 24 ! ! BEGIN 25370 785 25 ! ! ! modul:= route ( who ); 25380 786 26 ! ! ! IF who < vc_addr_limit THEN msg^.u3:= netc_route1; 25390 787 27 ! ! END 25400 788 28 ! END 25410 789 29 END; (* of downwards *) 25420 790 25430 791 25440 792 \f tssuplst 81.06.16. 09.17. page 28 26010 793 (*---------------- upwards -------------------------*) 26020 794 26030 795 PROCEDURE upwards ( 26040 796 VAR msg : reference; (* a msg from ath or vch *) 26050 797 VAR modul : modulref); (* tells what to do later *) 26060 798 26070 799 VAR 26080 800 receiver : macroaddr; 26090 801 who : integer; 26100 802 26110 803 BEGIN 26120 804 1 ! LOCK msg AS head : alarmlabel DO 26130 805 2 ! BEGIN 26140 806 3 ! ! head.ts_add:= gettime; 26150 807 4 ! ! receiver:= head.rec.macro; 26160 808 5 ! ! who:= head.rec.micro 26170 809 6 ! END; 26180 810 7 ! 26190 811 8 ! IF receiver <> netaddr(dc).macro THEN (* log *) 26200 812 9 ! IF running(dc) THEN make_log ( msg ); 26210 813 10 ! 26220 814 11 ! IF nil ( msg) THEN modul:= dummy ELSE 26230 815 12 ! BEGIN 26240 816 13 ! ! IF receiver = here.macro THEN 26250 817 14 ! ! BEGIN 26260 818 15 ! ! ! modul:= route ( who ); 26270 819 16 ! ! ! IF modul < tss THEN 26280 820 17 ! ! ! IF who < vc_addr_limit THEN msg^.u3:= netc_route1 26290 821 18 ! ! ! ELSE msg^.u3:= netc_route 26300 822 19 ! ! END 26310 823 20 ! ! ELSE modul:= netc 26320 824 21 ! END 26330 825 22 END; 26340 826 26350 827 26360 828 26370 829 \f tssuplst 81.06.16. 09.17. page 29 27010 830 (*----------------------- rec broadcast ---------------------------*) 27020 831 27030 832 PROCEDURE rec_broadcast ( VAR msg : reference ); 27040 833 (* handle received broadcast *) 27050 834 TYPE 27060 835 ncaddr = RECORD 27070 836 ! dcpart : 0..15; 27080 837 ! ncpart : 0..63 27090 838 END; 27100 839 27110 840 VAR 27120 841 cnt : integer; 27130 842 unit : alarmnetaddr; 27140 843 own_dc, unit_dc : 0..15; 27150 844 own_nc, unit_nc : ncaddr; 27160 845 bm1, bm2 : reference; 27170 846 27180 847 BEGIN 27190 848 1 ! sensesem ( bm1, sem(free_sem_no).w^); 27200 849 2 ! IF nil ( bm1) THEN 27210 850 3 ! BEGIN (* try later *) 27220 851 4 ! ! to_queue ( msg) 27230 852 5 ! END ELSE 27240 853 6 ! 27250 854 7 ! BEGIN 27260 855 8 ! ! 27270 856 9 ! ! LOCK msg AS buf: note DO 27280 857 10 ! ! WITH buf DO 27290 858 11 ! ! BEGIN 27300 859 12 ! ! ! unit:= component; 27310 860 13 ! ! ! cnt := count 27320 861 14 ! ! END; 27330 862 15 ! ! own_dc:= here.macro.dc_addr; 27340 863 16 ! ! own_nc.dcpart:= own_dc; 27350 864 17 ! ! own_nc.ncpart:= here.macro.nc_addr; 27360 865 18 ! ! unit_dc:= unit.macro.dc_addr; 27370 866 19 ! ! unit_nc.dcpart:= unit_dc; 27380 867 20 ! ! unit_nc.ncpart:= unit.macro.nc_addr; 27390 868 21 ! ! 27400 869 22 ! ! CASE msg^.u4 OF 27410 870 23 ! ! ! dc_down: IF unit_dc = own_dc THEN running(dc):= false; 27420 871 24 ! ! ! dc_up: IF unit_dc = own_dc THEN running(dc):= true; 27430 872 25 ! ! ! nc_down: IF unit_nc = own_nc THEN running(nc):= false; 27440 873 26 ! ! ! nc_up: IF unit_nc = own_nc THEN running(nc):= true 27450 874 27 ! ! ! OTHERWISE 27460 875 28 ! ! END; \f tssuplst 81.06.16. 09.17. page 30 27470 876 29 ! ! 27480 877 30 ! ! CASE msg^.u3 OF 27490 878 31 ! ! ! netc_route1: BEGIN (* from net *) 27500 879 32 ! ! ! ! testout ( console, "from net ", msg^.u3); 27510 880 33 ! ! ! ! broadcast ( bm1, unit, cnt, msg^.u4, vch); 27520 881 34 ! ! ! ! broadcast ( msg, unit, cnt, msg^.u4, ath) 27530 882 35 ! ! ! END; 27540 883 36 ! ! ! 27550 884 37 ! ! ! at_route, 27560 885 38 ! ! ! at_route1: BEGIN (* from at *) 27570 886 39 ! ! ! ! testout ( console, "from at ", msg^.u3); 27580 887 40 ! ! ! ! broadcast ( bm1, unit, cnt, msg^.u4, netc); 27590 888 41 ! ! ! ! broadcast ( msg, unit, cnt, msg^.u4, vch) 27600 889 42 ! ! ! END; 27610 890 43 ! ! ! 27620 891 44 ! ! ! vca_route, 27630 892 45 ! ! ! vca_route1, 27640 893 46 ! ! ! vci_route, 27650 894 47 ! ! ! vci_route1: BEGIN (* from vc *) 27660 895 48 ! ! ! ! testout ( console, "from vc ", msg^.u3); 27670 896 49 ! ! ! ! broadcast ( bm1, unit, cnt, msg^.u4, netc); 27680 897 50 ! ! ! ! broadcast ( msg, unit, cnt, msg^.u4, ath) 27690 898 51 ! ! ! END 27700 899 52 ! ! ! OTHERWISE 27710 900 53 ! ! ! BEGIN 27720 901 54 ! ! ! ! return ( bm1); 27730 902 55 ! ! ! ! return ( msg) 27740 903 56 ! ! ! END 27750 904 57 ! ! END; (* case *) 27760 905 58 ! ! 27770 906 59 ! END 27780 907 60 END; (* of rec broadcast *) 27790 908 27800 909 \f tssuplst 81.06.16. 09.17. page 31 28010 910 (*------------------------ new lam ---------------------------------*) 28020 911 28030 912 PROCEDURE new_lam ( VAR msg : reference ); 28040 913 (* start or check lam driver incarnation *) 28050 914 28060 915 CONST 28070 916 top = max_lam+1; 28080 917 28090 918 VAR nr, level : integer; 28100 919 index : 0..top; 28110 920 28120 921 BEGIN 28130 922 1 ! IF msg^.u4 = newlam_code THEN 28140 923 2 ! BEGIN 28150 924 3 ! ! (*q if debug >= 1 then testout ( console,"new lam ", msg^.u4); q*) 28160 925 4 ! ! LOCK msg AS buf: lammess DO WITH buf, head DO 28170 926 5 ! ! BEGIN 28180 927 6 ! ! ! result:= rejected; 28190 928 7 ! ! ! nr:= lam_num; 28200 929 8 ! ! ! level:= lam_level; 28210 930 9 ! ! ! 28220 931 10 ! ! ! index:= 0; 28230 932 11 ! ! ! 28240 933 12 ! ! ! WHILE leveltable(index) <> level DO index:= index+1; 28250 934 13 ! ! ! 28260 935 14 ! ! ! IF update = start_code THEN (* start lam driver *) 28270 936 15 ! ! ! BEGIN 28280 937 16 ! ! ! ! IF index = top THEN start_lam ( nr, level); 28290 938 17 ! ! ! ! IF leveltable(nr) = level THEN result:= accepted; 28300 939 18 ! ! ! END ELSE 28310 940 19 ! ! ! BEGIN (* stop lam driver *) 28320 941 20 ! ! ! ! IF leveltable(nr) = level THEN 28330 942 21 ! ! ! ! BEGIN 28340 943 22 ! ! ! ! ! remove ( proc_lam(nr)); 28350 944 23 ! ! ! ! ! leveltable(nr):= 0; 28360 945 24 ! ! ! ! ! result:= accepted 28370 946 25 ! ! ! ! END 28380 947 26 ! ! ! END; 28390 948 27 ! ! ! 28400 949 28 ! ! ! rec:= send; 28410 950 29 ! ! ! send:= here; 28420 951 30 ! ! ! ts_add:= gettime; 28430 952 31 ! ! END; 28440 953 32 ! ! send_up ( msg, anslam_code) 28450 954 33 ! END ELSE refuse ( msg, unknown_opcode) 28460 955 34 END; \f tssuplst 81.06.16. 09.17. page 32 28470 956 28480 957 28490 958 \f tssuplst 81.06.16. 09.17. page 33 29010 959 (*----------------------- rec returned ----------------------------*) 29020 960 29030 961 PROCEDURE rec_returned ( VAR msg : reference ); 29040 962 (* handle op codes 1.0 1.2 *) 29050 963 29060 964 BEGIN 29070 965 1 ! (* not yet specified *) 29080 966 2 ! 29090 967 3 ! IF debug >= 1 THEN testout ( console, "returned ", msg^.u4); 29100 968 4 ! 29110 969 5 ! IF debug >= 1 THEN 29120 970 6 ! LOCK msg AS buf: flawshape DO 29130 971 7 ! WITH buf DO 29140 972 8 ! testout ( console, "orig op-code", data.op_code); 29150 973 9 ! 29160 974 10 ! count ( lost); 29170 975 11 ! return ( msg ) 29180 976 12 ! 29190 977 13 END; 29200 978 29210 979 29220 980 \f tssuplst 81.06.16. 09.17. page 34 30010 981 (*----------------------- tss var update ----------------------------*) 30020 982 30030 983 PROCEDURE var_update ( VAR msg : reference ); 30040 984 (* the buffer contains a new ts-macro-address *) 30050 985 TYPE 30060 986 table = PACKED RECORD 30070 987 ! head : alarmlabel; 30080 988 ! adr : macroaddr; 30090 989 ! cn: integer 30100 990 END; 30110 991 30120 992 BEGIN 30130 993 1 ! IF msg^.u4 = new_addr_code THEN 30140 994 2 ! BEGIN 30150 995 3 ! ! LOCK msg AS buf : table DO WITH buf, head DO 30160 996 4 ! ! BEGIN 30170 997 5 ! ! ! here.macro:= adr; 30180 998 6 ! ! ! netaddr(dc).macro.dc_addr:= here.macro.dc_addr; 30190 999 7 ! ! ! netaddr(nc).macro.dc_addr:= here.macro.dc_addr; 30200 1000 8 ! ! ! netaddr(nc).macro.nc_addr:= here.macro.nc_addr; 30210 1001 9 ! ! ! debug:= cn; 30220 1002 10 ! ! ! (* generate answer *) 30230 1003 11 ! ! ! rec:= send; 30240 1004 12 ! ! ! send:= here; 30250 1005 13 ! ! ! ts_add:= gettime; 30260 1006 14 ! ! ! result:= accepted; 30270 1007 15 ! ! END; 30280 1008 16 ! ! (* 30290 1009 17 ! ! if debug>=3 then display ( msg); 30300 1010 18 ! ! *) 30310 1011 19 ! ! running(dc):= true; 30320 1012 20 ! ! running(nc):= true; 30330 1013 21 ! ! send_up ( msg, new_ans_code); 30340 1014 22 ! ! 30350 1015 23 ! END ELSE refuse ( msg, unknown_opcode) 30360 1016 24 END; (* of table update *) 30370 1017 30380 1018 \f tssuplst 81.06.16. 09.17. page 35 31010 1019 (*----------------------- watch -----------------------------------*) 31020 1020 31030 1021 PROCEDURE watch ( VAR msg : reference ); 31040 1022 (* nodetest received, so send node test answer *) 31050 1023 31060 1024 VAR 31070 1025 node : modulref; 31080 1026 node_up : byte; 31090 1027 31100 1028 BEGIN 31110 1029 1 ! IF msg^.u4 = nodetest_code THEN (* node test *) 31120 1030 2 ! BEGIN 31130 1031 3 ! ! LOCK msg AS buf : testshape DO 31140 1032 4 ! ! WITH buf, head DO 31150 1033 5 ! ! BEGIN 31160 1034 6 ! ! ! rec:= send; 31170 1035 7 ! ! ! send:= here; 31180 1036 8 ! ! ! result:= accepted; 31190 1037 9 ! ! ! ts_add:= gettime; 31200 1038 10 ! ! ! nc_long:= data(2); 31210 1039 11 ! ! ! data(2):= quelen; 31220 1040 12 ! ! ! data(3):= queput; 31230 1041 13 ! ! ! data(4):= maxqueue; 31240 1042 14 ! ! ! data(5):= lost; 31250 1043 15 ! ! END; 31260 1044 16 ! ! send_up ( msg, nodeans_code) 31270 1045 17 ! END ELSE 31280 1046 18 ! IF msg^.u4 = nodeans_code THEN (* node test answer *) 31290 1047 19 ! BEGIN 31300 1048 20 ! ! LOCK msg AS buf: testshape DO 31310 1049 21 ! ! IF buf.head.send.macro.nc_addr = 0 THEN 31320 1050 22 ! ! BEGIN node_up:= dc_up; node:= dc END ELSE 31330 1051 23 ! ! BEGIN node_up:= nc_up; node:= nc END; 31340 1052 24 ! ! timerupdate ( t_up(node), -1, 31350 1053 25 ! ! sem(timeout_sem_no).s^, sem(done).w^); 31360 1054 26 ! ! IF NOT running(node) THEN (* node running again *) 31370 1055 27 ! ! BEGIN 31380 1056 28 ! ! ! (* broadcast ( ms1, netaddr(node), node_up, ath); 31390 1057 29 ! ! ! broadcast ( msg, netaddr(node), node_up, vch); *) 31400 1058 30 ! ! ! running(node):= true 31410 1059 31 ! ! END; 31420 1060 32 ! ! return ( msg); 31430 1061 33 ! END ELSE refuse ( msg, unknown_opcode) 31440 1062 34 END; (* of watch *) 31450 1063 \f tssuplst 81.06.16. 09.17. page 36 32010 1064 (*------------------------- tss function --------------------------*) 32020 1065 32030 1066 PROCEDURE tss_function ( VAR msg : reference ); 32040 1067 (* msg : received message for ts-supervisor *) 32050 1068 32060 1069 32070 1070 VAR 32080 1071 group : func_grp; 32090 1072 32100 1073 BEGIN 32110 1074 1 ! (*q if debug>= 3 then testout ( console,"tss gets ", msg^.u4); q*) 32120 1075 2 ! group:= msg^.u4 DIV maxno; 32130 1076 3 ! 32140 1077 4 ! CASE group OF 32150 1078 5 ! ! 0: (* returned log *) 32160 1079 6 ! ! BEGIN return ( msg); 32170 1080 7 ! ! ! testout ( console, "log retur ", lost ); 32180 1081 8 ! ! END; 32190 1082 9 ! ! 1: (* returns *) rec_returned ( msg ); 32200 1083 10 ! ! 2: (* broadcast *) rec_broadcast( msg ); 32210 1084 11 ! ! 9: (* new lam *) new_lam ( msg ); 32220 1085 12 ! ! 11: (* update var *) var_update ( msg); 32230 1086 13 ! ! 12: (* watch *) watch ( msg ) 32240 1087 14 ! ! OTHERWISE (* refuse *) refuse ( msg, unknown_opcode) 32250 1088 15 ! END; 32260 1089 16 ! 32270 1090 17 END; (* of tss function *) 32280 1091 32290 1092 \f tssuplst 81.06.16. 09.17. page 37 33010 1093 (*-------------------- exception ---------------------------------*) 33020 1094 33030 1095 PROCEDURE exception ( cause : integer); 33040 1096 BEGIN 33050 1097 1 ! trace ( cause); 33060 1098 2 ! 33070 1099 3 ! IF NOT nil ( ms1) THEN return ( ms1); 33080 1100 4 ! IF NOT nil ( ms ) THEN refuse ( ms, breaked); 33090 1101 5 ! 33100 1102 6 ! sensesem ( ms, sem(queue).w^); 33110 1103 7 ! WHILE NOT nil ( ms) DO 33120 1104 8 ! BEGIN 33130 1105 9 ! ! refuse ( ms, breaked); 33140 1106 10 ! ! sensesem ( ms, sem(queue).w^) 33150 1107 11 ! END; 33160 1108 12 ! 33170 1109 13 ! FOR module:= netc TO ath DO 33180 1110 14 ! BEGIN 33190 1111 15 ! ! wait ( ms, sem(free_sem_no).w^); 33200 1112 16 ! ! broadcast ( ms, here, lost, ts_down, module) 33210 1113 17 ! END; 33220 1114 18 ! 33230 1115 19 ! REPEAT 33240 1116 20 ! ! wait ( ms, sem(tssup_sem_no).w^); 33250 1117 21 ! ! IF ms^.u4 < #h30 THEN return ( ms) ELSE 33260 1118 22 ! ! refuse ( ms, breaked) 33270 1119 23 ! UNTIL false; 33280 1120 24 ! 33290 1121 25 END; 33300 1122 33310 1123 \f tssuplst 81.06.16. 09.17. page 38 34010 1124 (*---------------------------------------------------------------*) 34020 1125 (* *) 34030 1126 (* main program *) 34040 1127 (* *) 34050 1128 (*---------------------------------------------------------------*) 34060 1129 34070 1130 BEGIN 34080 1131 1 ! 34090 1132 2 ! testopen ( console, own.incname, opsem); 34100 1133 3 ! IF debug>=0 THEN testout ( console, version, al_env_version); 34110 1134 4 ! 34120 1135 5 ! here.macro:= macroaddr(0,0,0); 34130 1136 6 ! here.micro:= tss_mic_addr; 34140 1137 7 ! netaddr(dc):= here; 34150 1138 8 ! netaddr(nc):= here; 34160 1139 9 ! 34170 1140 10 ! (**demo get buffers for log and clock **) 34180 1141 11 ! FOR cnt:= 1 TO no_req_supp DO 34190 1142 12 ! BEGIN 34200 1143 13 ! ! alloc ( ms, suppool, sem(supp_sem_no).s^); 34210 1144 14 ! ! ms^.u3:= tss_route; 34220 1145 15 ! ! signal ( ms, sem(supp_sem_no).s^ ) 34230 1146 16 ! END; 34240 1147 17 ! alloc ( clock_msg, clockpool, sem(done).s^); 34250 1148 18 ! clock_msg^.u1:= read_clock; 34260 1149 19 ! clock_msg^.u3:= tss_route; 34270 1150 20 ! 34280 1151 21 ! no(netc):= netc_sem_no; 34290 1152 22 ! no( vch):= vch_sem_no; 34300 1153 23 ! no( ath):= ath_sem_no; 34310 1154 24 ! 34320 1155 25 ! cv:= link ("lam ", lam); 34330 1156 26 ! IF cv <> 0 THEN testout ( console, "link lam = ", cv); 34340 1157 27 ! start_lam ( 0, 5); 34350 1158 28 ! 34360 1159 29 ! start_timeout; 34370 1160 30 ! \f tssuplst 81.06.16. 09.17. page 39 35010 1161 31 ! 35020 1162 32 ! (*-------- wait for a node-test ------------ *) 35030 1163 33 ! 35040 1164 34 ! REPEAT 35050 1165 35 ! ! wait ( ms, sem(tssup_sem_no).w^); 35060 1166 36 ! ! CASE ms^.u3 OF 35070 1167 37 ! ! ! netc_route1, 35080 1168 38 ! ! ! dummy_route: return ( ms); 35090 1169 39 ! ! ! 35100 1170 40 ! ! ! netc_route: 35110 1171 41 ! ! ! BEGIN 35120 1172 42 ! ! ! ! LOCK ms AS head: alarmlabel DO 35130 1173 43 ! ! ! ! cv:= head.rec.micro; 35140 1174 44 ! ! ! ! IF cv = netc_mic_addr THEN 35150 1175 45 ! ! ! ! BEGIN 35160 1176 46 ! ! ! ! ! ms^.u3:= netc_route1; 35170 1177 47 ! ! ! ! ! signal ( ms, sem(netc_sem_no).s^); 35180 1178 48 ! ! ! ! END ELSE 35190 1179 49 ! ! ! ! IF cv = tss_mic_addr THEN 35200 1180 50 ! ! ! ! IF (ms^.u4 = new_addr_code) OR 35210 1181 51 ! ! ! ! (ms^.u4 = nodetest_code) THEN 35220 1182 52 ! ! ! ! BEGIN 35230 1183 53 ! ! ! ! ! LOCK ms AS head: alarmlabel DO 35240 1184 54 ! ! ! ! ! WITH head DO 35250 1185 55 ! ! ! ! ! BEGIN 35260 1186 56 ! ! ! ! ! ! IF ms^.u4 = new_addr_code THEN 35270 1187 57 ! ! ! ! ! ! BEGIN 35280 1188 58 ! ! ! ! ! ! ! here:= rec; 35290 1189 59 ! ! ! ! ! ! ! result:= accepted; 35300 1190 60 ! ! ! ! ! ! END ELSE 35310 1191 61 ! ! ! ! ! ! result:= not_ready; 35320 1192 62 ! ! ! ! ! ! who:= rec; 35330 1193 63 ! ! ! ! ! ! rec:= send; 35340 1194 64 ! ! ! ! ! ! send:= who; 35350 1195 65 ! ! ! ! ! ! ts_add:= gettime; 35360 1196 66 ! ! ! ! ! END; 35370 1197 67 ! ! ! ! ! send_up ( ms, ms^.u4+1); 35380 1198 68 ! ! ! ! END ELSE 35390 1199 69 ! ! ! ! refuse ( ms, unknown_opcode) 35400 1200 70 ! ! ! ! ELSE 35410 1201 71 ! ! ! ! refuse ( ms, not_ready); 35420 1202 72 ! ! ! END; 35430 1203 73 ! ! ! OTHERWISE 35440 1204 74 ! ! ! send_up ( ms, ms^.u4); 35450 1205 75 ! ! END (* case *) 35460 1206 76 ! UNTIL here.macro <> macroaddr(0,0,0); \f tssuplst 81.06.16. 09.17. page 40 35470 1207 77 ! 35480 1208 78 ! netaddr(dc).macro.dc_addr:= here.macro.dc_addr; 35490 1209 79 ! netaddr(nc).macro.dc_addr:= here.macro.dc_addr; 35500 1210 80 ! netaddr(nc).macro.nc_addr:= here.macro.nc_addr; 35510 1211 81 ! running(dc):= true; 35520 1212 82 ! running(nc):= true; 35530 1213 83 ! 35540 1214 84 ! (*----------- now started -------------*) 35550 1215 85 ! 35560 1216 86 ! \f tssuplst 81.06.16. 09.17. page 41 36010 1217 87 ! 36020 1218 88 ! FOR module:= netc TO dc DO 36030 1219 89 ! BEGIN 36040 1220 90 ! ! alloc ( t_out(module), t_pool, sem(tssup_sem_no).s^ ); 36050 1221 91 ! ! alloc ( t_up(module), u_pool, sem(done).s^); 36060 1222 92 ! ! t_up(module)^.u3:= tss_route; 36070 1223 93 ! ! timerbook ( t_up(module), t_out(module), -1, microadr(module), 36080 1224 94 ! ! sem(timeout_sem_no).s^, sem(done).w^) 36090 1225 95 ! END; 36100 1226 96 ! (* start_netcon; done by opsys *) 36110 1227 97 ! start_vchan; 36120 1228 98 ! start_athan; 36130 1229 99 ! 36140 1230 100 ! (* kun for ts-connector 36150 1231 101 ! wait ( ms, sem(free_sem_no).w^); 36160 1232 102 ! lock ms as head: alarmlabel do 36170 1233 103 ! begin 36180 1234 104 ! head.rec:= here; 36190 1235 105 ! head.send:= here; 36200 1236 106 ! end; 36210 1237 107 ! send_up ( ms, new_ans_code); *) 36220 1238 108 ! 36230 1239 109 ! (*q if debug>=1 then testout ( console,"init ok ", 820 ); q*) 36240 1240 110 ! \f tssuplst 81.06.16. 09.17. page 42 37010 1241 111 ! (*------------------ main loop -------------------------*) 37020 1242 112 ! 37030 1243 113 ! REPEAT (* until forever *) 37040 1244 114 ! ! 37050 1245 115 ! ! IF open ( sem(queue).w^) THEN sensesem ( ms1, sem(free_sem_no).w^); 37060 1246 116 ! ! IF open ( sem(queue).w^) AND NOT nil ( ms1) THEN (* take queue *) 37070 1247 117 ! ! BEGIN 37080 1248 118 ! ! ! wait ( ms, sem(queue).w^); 37090 1249 119 ! ! ! quelen:= quelen-1 37100 1250 120 ! ! END ELSE 37110 1251 121 ! ! BEGIN 37120 1252 122 ! ! ! (*q if (debug mod 8)>=4 then testout ( console,"wait mysem ", 960 ); q*) 37130 1253 123 ! ! ! wait ( ms, sem(tssup_sem_no).w^ ); 37140 1254 124 ! ! END; 37150 1255 125 ! ! (*q if (debug mod 8)>=4 then testout ( console,"handle ", msg_ready); q*) 37160 1256 126 ! ! 37170 1257 127 ! ! CASE ms^.u3 OF 37180 1258 128 ! ! ! dummy_route: module:= empty; 37190 1259 129 ! ! ! tim_route, 37200 1260 130 ! ! ! tim_route1: module_timeout ( ms, module ); 37210 1261 131 ! ! ! netc_route: downwards ( ms, module); 37220 1262 132 ! ! ! netc_route1: 37230 1263 133 ! ! ! BEGIN 37240 1264 134 ! ! ! ! LOCK ms AS buf: flawshape DO 37250 1265 135 ! ! ! ! IF buf.data.rec.macro = netaddr(dc).macro THEN running(dc):= false; 37260 1266 136 ! ! ! ! IF running(dc) THEN make_log ( ms); 37270 1267 137 ! ! ! ! IF nil ( ms) THEN module:= dummy ELSE 37280 1268 138 ! ! ! ! downwards ( ms, module); 37290 1269 139 ! ! ! END; 37300 1270 140 ! ! ! 37310 1271 141 ! ! ! OTHERWISE upwards ( ms, module ); 37320 1272 142 ! ! END; 37330 1273 143 ! ! 37340 1274 144 ! ! CASE module OF 37350 1275 145 ! ! ! dummy: ; (* no action *) 37360 1276 146 ! ! ! empty: return ( ms ); (* no data *) 37370 1277 147 ! ! ! tss: tss_function ( ms ); 37380 1278 148 ! ! ! vch: signal ( ms, sem(vch_sem_no).s^ ); 37390 1279 149 ! ! ! ath: signal ( ms, sem(ath_sem_no).s^ ); 37400 1280 150 ! ! ! netc: BEGIN 37410 1281 151 ! ! ! ! IF ( debug MOD 16 ) >= 8 THEN display ( ms); 37420 1282 152 ! ! ! ! signal ( ms, sem(netc_sem_no).s^ ); 37430 1283 153 ! ! ! END 37440 1284 154 ! ! ! OTHERWISE refuse ( ms, not_found) 37450 1285 155 ! ! END; (* case *) 37460 1286 156 ! ! \f tssuplst 81.06.16. 09.17. page 43 37470 1287 157 ! UNTIL forever 37480 1288 158 END . (* of ts supervisor program *) 37490 1289 \f tssuplst 81.06.16. 09.17. page 44 0 55* 56* 65* 65* 65* 167* 178* 179* 360 385 445 471 527 528 539 540 560 561 757* 836* 837* 843* 919* 931 944 1049 1078: 1133 1135 1135 1135 1156 1157 1206 1206 1206 1 56* 67* 70* 70* 70* 126* 161* 176* 195* 207* 214 214 217 241 270 531 543 565 644* 648* 652* 696 916* 933 967 969 1052 1082: 1141 1197 1223 1249 2 67* 105* 105* 105* 105* 106* 107* 111* 111* 112* 112* 178* 214 241 687 709* 709* 1038 1039 1083: 3 67* 72* 168* 1040 4 72* 111* 168* 379 1041 5 126* 380 1042 1157 6 320* 7 215 215 8 259 1281 9 1084: 10 379 380 11 1085: 12 46* 1086: 15 757* 836* 843* 16 205* 259 770 1281 24 60* 25 61* 26 62* 32 770 47 108* 63 837* abuf 207* 211 accepted 334 938 945 1006 1036 1189 adr 988* 997 alarmlabel 125* 132* 133* 139* 147* 641* 657 761 804 987* 1172 1183 alarmnetaddr 140* 160* 188* 314* 490* 756* 842* alfa 177* alloc 1143 1147 1220 1221 al_env_version <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 1133 anslam_code 94* 953 as 211: 232: 323: 503: 657: 665: 666: 677: 678: 716: 761: 804: 856: 925: 970: 995: 1031: 1048: 1172: 1183: 1264: ath 51* 52* 72* 72* 175* 525 530 531 540 560 600 603 741: 881 897 1109 1153 1279: ath_mic_addr 64* 523: 603 ath_pri 471 ath_sem_no 741 1153 1279 ath_size 470 \f tssuplst 81.06.16. 09.17. page 45 at_addr_limit <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 600 at_down 91* 527 528 at_handler 27* 463 465 475 at_route 884: at_route1 885: at_up 92* bm1 491* 494 495 499 499 527 539 560 584 845* 848 849 880 887 896 901 bm2 491* 496 497 528 540 561 585 845* book_id 67* boolean 54* 239* breaked 1100 1105 1118 broadcast 312* 527 528 539 540 560 561 880 881 887 888 896 897 1112 broadlength 320* 326 buf 211: 212 232: 232 323: 324 503: 503 666: 668 678: 681 682 683 683 695 696 716: 717 856: 857 925: 925 970: 971 995: 995 1031: 1032 1048: 1049 1264: 1265 byno 643* 695= byte 52* 56* 253* 316* 373* 644* 648* 1026* bytes 647* 681 682 683 683 695 by_father 108* cause 706* 728 1095* 1097 chr 379 380 clockpool 195* 1147 clock_form 228* 232 clock_msg 196* 230 231 232: 1147 1148 1149 cn 989* 1001 cnt 187* 315* 338 488* 652* 696= 696 696 841* 860= 880 881 887 888 896 897 1141= component 140* 337= 859 com_pool 113* conansw_code 101* console 171* 217 363 390 448 474 879 886 895 967 972 1080 1132 1133 1156 contest_code 100* copy 665: 668= 669 670 count 141* 269 338= 860 974 create 356 381 438 464 cv 162* 355= 356= 360 363 364= 381= 385 390 437= 438= 445 448 449= 463= 464= 471 474 475= 1155= 1156 1156 1173= 1174 1179 data 126* 133* 644* 696= 719= 720 972 1038 1039= 1040= 1041= 1042= 1265 dc 51* 188* 191* 440 466 562 606 669 688 781 782 782 811 812 870 871 998 1011 1050 1137 1208 1211 1218 1265 1265 1266 dca 28* 33* \f tssuplst 81.06.16. 09.17. page 46 dcpart 836* 863= 866= dc_addr 766 780 862 865 998= 998 999= 999 1208= 1208 1209= 1209 dc_down 83* 870: dc_erh_mic_addr <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 670 dc_ident 62* 65* dc_log_mic_addr <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 689 dc_up 84* 871: 1050 debug 161* 259 770 967 969 1001= 1133 1281 display 203* 259 770 1281 done 115* 231 532 544 566 1053 1147 1221 1224 downwards 751* 1261 1268 dummy 51* 589 776 783 814 1267 1275: dummy_route 624 1168: 1258: elem 490* 504 505 527 528 539 540 560 561 element 314* 337 empty 51* 773 1258 1276: exception 1095* external 20* 30* 35* 42* extra 642* 694= false 109* 168* 168* 530 541 562 563 870 872 1119 1265 flawshape 131* 665 666 716 970 1264 forever 109* 1287 free_sem_no 113* 494 496 848 1111 1245 from 72* 756* 767= 782 func_grp 50* 1071* gettime 226* 232= 336 692 729 806 951 1005 1037 1195 group 1071* 1075= 1077 grouptable 50* h00 80* h10 81* h12 82* h20 83* h21 84* h22 85* h23 86* h24 87* h25 88* h26 89* h27 90* h28 91* h29 92* h30 1117 \f tssuplst 81.06.16. 09.17. page 47 h9c 93* h9d 94* hb0 95* hb1 96* hc0 97* hc1 98* hc5 99* hc8 100* hc9 101* head 125* 132* 139* 147* 324 641* 657: 657 669 670 685 719 721 761: 762 804: 806 807 808 925 987* 995 1032 1049 1172: 1173 1183: 1184 here 160* 329 332 441 467 504 690 727 733 772 780 816 862 864 950 997 998 999 1000 1004 1035 1112 1135 1136 1137 1138 1188= 1206 1208 1209 1210 i 209* 217= 217 incname 1132 index 919* 931= 933 933= 933 937 input_code 99* insert_code 333 691 integer 19* 39* 50* 53* 126* 141* 149* 161* 167* 175* 176* 187* 207* 209* 239* 315* 489* 597* 642* 643* 647* 653* 713* 758* 801* 841* 918* 989* 1095* interval 69* label_length 110* 111* 320* 680 681 687 709* label_size 110* lam 38* 382 1155 lammess 146* 925 lamname 177* 379= 380= 381 lam_level 149* 929 lam_num 148* 928 lam_pri 387 lam_sem_no 383 lam_size 384 lastword 205* 207* 216 216 length 653* 680= 683= 687 696 level 39* 373* 382 388 918* 929= 933 937 938 941 leveltab 56* 178* 178* leveltable 178* 388= 933 938 941 944= link 355 437 463 1155 lock 211: 232: 323: 503: 657: 665: 666: 677: 678: 716: 761: 804: 856: 925: 970: 995: 1031: 1048: 1172: 1183: 1264: log 677: 685 694 695 696 logleng 111* 644* 683 logm 654* 660 661 665: 672 677: 698 logshape 640* 677 \f tssuplst 81.06.16. 09.17. page 48 log_code 80* 698 lost 163* 974 1042 1080 1112 m 19* 209* 214= 215 215= 216 216= 217 macro 440 441 466 467 504= 504 669= 669 688= 688 725 733 764 766 772 780 807 811 816 862 864 865 867 997= 998 998 999 999 1000 1000 1049 1135= 1206 1208 1208 1209 1209 1210 1210 1265 1265 macroaddr 28* 33* 712* 755* 800* 988* 1135 1206 main_sem 40* make_log 636* 781 812 1266 maxno 105* 1075 maxqueue 165* 271 271= 1041 maxroute 46* 55* max_lam 56* 178* 179* 916* micro 330= 505= 670= 689= 726 765 808 1136= 1173 microadr 64* 330 597* 600 601 602 603 604 605 1223 modul 753* 773= 776= 783= 785= 797* 814= 818= 819 823= module 189* 1109= 1112 1218= 1220 1221 1222 1223 1223 1223 1258= 1260 1261 1267= 1268 1271 1274 module_timeout <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 483* 1260 modulident 52* 67* 74* modulref 51* 53* 54* 55* 189* 317* 485* 598* 753* 797* 1025* modulroute 55* 72* modulstate 54* 168* 168* modultable 53* 64* 69* ms 170* 1100 1100 1102 1103 1105 1106 1111 1112 1116 1117 1117 1118 1143 1144 1145 1165 1166 1168 1172: 1176 1177 1180 1181 1183: 1186 1197 1197 1199 1201 1204 1204 1248 1253 1257 1260 1261 1264: 1266 1267 1268 1271 1276 1277 1278 1279 1281 1282 1284 ms1 169* 1099 1099 1245 1246 msg 203* 211: 252* 256 257 258 259 260 267* 272 313* 323: 340 341 341 342 343 484* 500 503: 531 543 565 613* 622 624 626 627 636* 657: 657 661 663 666: 678: 706* 716: 720 734 737 738 739 741 742 744 752* 761: 770 773 775 781 783 786 796* 804: 812 814 820 821 832* 851 856: 869 877 879 880 881 881 886 887 888 888 895 896 897 897 902 912* 922 925: 953 954 961* 967 970: 975 983* 993 995: 1013 1015 1021* 1029 1031: 1044 1046 1048: 1060 1061 1066* 1075 1079 1082 1083 1084 1085 1086 1087 nb_code 81* 672 nc 51* 188* 327 558 563 565 872 873 999 1000 1012 1051 1138 1209 1210 1212 ncaddr 835* 844* ncpart 837* 864= 867= nc_addr 864 867 1000= 1000 1049 1210= 1210 \f tssuplst 81.06.16. 09.17. page 49 nc_down 85* 560 561 872: nc_ident 61* 65* 556: nc_long 186* 1038= nc_short 186* nc_up 86* 873: 1051 netaddr 188* 327 440 466 669 688 782 811 998 999 1000 1137= 1138= 1208 1209 1210 1265 netc 51* 52* 72* 72* 175* 191* 327 341 527 539 604 823 887 896 1109 1151 1218 1280: netc_mic_addr <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 64* 604 1174 netc_route 74* 74* 738 821 1170: 1261: netc_route1 74* 341 737 786 820 878: 1167: 1176 1262: netc_sem_no 260 1151 1177 1282 newlam_code 93* 922 newleng 709* 723 new_addr_code <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 95* 993 1180 1186 new_ans_code 96* 1013 new_lam 912* 1084 no 175* 343 1151= 1152= 1153= node 1025* 1050= 1051= 1052 1054 1058 nodeans_code 98* 1044 1046 nodetest_cnt 167* nodetest_code <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 97* 1029 1181 node_up 1026* 1050= 1051= note 138* 323 856 not_found 1284 not_ready 1191 1201 no_of_by 326= 687= 723= no_req_supp 176* 1141 no_tss_tim 192* 193* nr 373* 377 379 380 383 384 387 388 918* 928= 937 938 941 943 944 number 239* 241 object 503 odd 239* 241= open 619 1245 1246 operation 253* 258 316* 335 342 opsem 9* 18* 27* 32* 38* 357 382 439 465 1132 op_code 335= 657= 720= 972 ord 379 380 own 1132 own_dc 843* 862= 863 870 871 \f tssuplst 81.06.16. 09.17. page 50 own_nc 844* 863 864 872 873 pool 176* 192* 193* 195* process 8* 18* 27* 32* 38* proc_athan 182* 461 470 471 proc_lam 179* 377 384 387 943 proc_timeout 180* 353 359 360 proc_vchan 181* 435 444 445 pu 39* pu_no 382 quelen 164* 270= 270 271 271 694 1039 1249= 1249 queput 166* 269 1040 queue 114* 272 1102 1106 1245 1246 1248 rawdata 648* 696 rawleng 112* 648* 652* 682 rawshape 646* 678 read_clock 106* 1148 rec 327= 329= 330 669 670 688 689 724= 725 726 764 765 807 808 949= 1003= 1034= 1173 1188 1192 1193= 1265 receiver 712* 725= 733 755* 764= 772 800* 807= 811 816 recip 317* 327 330 341 343 rec_broadcast <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 832* 1083 rec_returned 961* 1082 reference 170* 191* 196* 203* 252* 267* 313* 484* 491* 613* 636* 654* 706* 752* 796* 832* 845* 912* 961* 983* 1021* 1066* refuse 706* 775 954 1015 1061 1087 1100 1105 1118 1199 1201 1284 refuse_code 82* 663 734 739 744 773 rejected 927 remove 943 res 485* 589= result 334= 728= 927= 938= 945= 1006= 1036= 1189= 1191= result_range 706* return 499 584 585 626 901 902 975 1060 1079 1099 1117 1168 1276 route 596* 600= 601= 602= 603= 604= 605= 606= 740 785 818 running 168* 525 530= 537 541= 558 562= 563= 781 782= 812 870= 871= 872= 873= 1011= 1012= 1054 1058= 1211= 1212= 1265= 1266 s 230 260 272 343 532 544 566 741 742 1053 1143 1145 1147 1177 1220 1221 1224 1278 1279 1282 sem 10* 29* 34* 230 231 260 272 343 358 383 442 468 494 496 532 532 544 544 566 566 619 622 627 741 742 848 1053 1053 1102 1106 1111 1116 1143 1145 1147 1165 1177 1220 1221 1224 1224 1245 1245 1246 1248 1253 1278 1279 1282 sempointer 9* 18* 27* 32* 38* send 332= 690= 724 727= 766 767 949 950= 1003 1004= 1034 1035= 1049 1193 1194= \f tssuplst 81.06.16. 09.17. page 51 send_up 251* 672 698 734 744 953 1013 1044 1197 1204 sensesem 494 496 848 1102 1106 1245 shadow 179* 182* signal 230 260 272 343 741 742 1145 1177 1278 1279 1282 size_listen 112* size_supp 111* 176* start 360 387 445 471 start_athan 459* 1228 start_code 935 start_lam 373* 937 1157 start_timeout <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 351* 1159 start_vchan 433* 1227 suppool 176* 1143 supp_sem_no 116* 619 622 627 1143 1145 t 19* table 986* 995 testopen 1132 testout 217 363 390 448 474 879 886 895 967 972 1080 1133 1156 testshape 124* 1031 1048 tim 19* time 228* 232 timeout_l 358 timeout_sem_no <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 230 358 532 544 566 1053 1224 timerbook 531 543 565 1223 timers 193* 503 timerupdate 1052 time_out_unit <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 358 timout 18* 355 357 364 tim_pri 360 tim_route 1259: tim_route1 1260: tim_size 359 top 916* 919* 937 to_queue 267* 500 661 851 trace 1097 traffic 51* traffic_id 60* 65* true 168* 168* 782 871 873 1011 1012 1058 1211 1212 tsa 28* 33* tss 51* 72* 72* 72* 605 819 1277: tssupervisor 8* \f tssuplst 81.06.16. 09.17. page 52 tssup_int1 114* tssup_int2 115* tssup_int3 116* tssup_sem_no 1116 1165 1220 1253 tss_ath_time 69* tss_dc_stime 70* tss_function 1066* 1277 tss_mic_addr 605 1136 1179 tss_nc_ltime 70* tss_nc_stime 70* tss_netc_time <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 69* tss_route 257 341 1144 1149 1222 tss_vch_time 69* ts_add 336= 692= 729= 806= 951= 1005= 1037= 1195= ts_down 87* 1112 ts_pointer 19* 40* ts_pointer_vector <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 10* 29* 34* ts_time 195* 226* 228* ts_up 88* t_out 190* 1220 1223 t_pool 193* 1220 t_up 191* 531 543 565 1052 1221 1222 1223 u1 256= 340= 1148= u3 257= 341= 341= 624 737= 738= 786= 820= 821= 877 879 886 895 1144= 1149= 1166 1176= 1222= 1257 u3val 74* u4 258= 342= 657 663 720 739= 773 869 880 881 887 888 896 897 922 967 993 1029 1046 1075 1117 1180 1181 1186 1197 1204 unit 842* 859= 865 867 880 881 887 888 896 897 unit_dc 843* 865= 866 870 871 unit_nc 844* 866 867 872 873 unknown_opcode <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 954 1015 1061 1087 1199 unknown_receiver <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 775 unlink 364 449 475 update 333= 691= 935 updates 192* upwards 795* 1271 u_pool 192* 1221 var_update 983* 1085 vca_route 891: \f tssuplst 81.06.16. 09.17. page 53 vca_route1 892: vch 51* 72* 528 537 541 543 561 601 602 742: 880 888 1152 1278: vch_mic_addr 64* 535: 602 vch_pri 445 vch_sem_no 742 1152 1278 vch_size 444 vci_route 893: vci_route1 894: vc_addr_limit <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 601 737 786 820 vc_down 89* 539 540 vc_handler 32* 437 439 449 vc_up 90* version 14* 1133 w 207* 214 217 231 494 496 532 544 566 619 622 627 848 1053 1102 1106 1111 1116 1165 1224 1245 1245 1246 1248 1253 wait 231 622 627 1111 1116 1165 1248 1253 waitlog 612* 660 watch 1021* 1086 who 159* 489* 503= 505 506 531 543 565 713* 726= 737 740 758* 765= 785 786 801* 808= 818 820 1192= 1194 write 107* 256 340 xmt_dc 757* 766= 780 zone 171* \f tssuplst 81.06.16. 09.17. page 54 AND 4 ARRAY 15 BEGIN 97 CASE 8 CONST 7 DIV 3 DO 41 ELSE 37 END 115 FOR 5 FUNCTION 3 IF 77 MOD 5 NIL 16 NOT 7 OF 27 OR 1 OTHERWISE 8 PACKED 7 PROCEDURE 21 RECORD 10 REPEAT 3 THEN 77 TO 5 TYPE 7 UNTIL 3 VAR 37 WHILE 3 WITH 12 ts supervisor 81.06.16. 09.18. pascal80 version 1981.04.01 name headline beginline endline appetite(words) display 205 211 219 : 30 gettime 228 230 232 : 9 odd 240 242 242 : 4 send_up 254 256 261 : 10 to_queue 268 269 272 : 10 broadcast 320 323 343 : 20 start_timeou 352 354 367 : 36 start_lam 375 378 392 : 38 start_vchan 434 436 452 : 38 start_athan 460 462 478 : 38 module_timeo 488 494 590 : 35 route 599 600 607 : 3 waitlog 615 620 631 : 8 make_log 640 657 702 : 30 refuse 709 716 747 : 22 downwards 755 761 789 : 20 upwards 800 804 825 : 20 rec_broadcas 835 848 907 : 34 new_lam 916 923 954 : 24 rec_returned 964 967 975 : 22 var_update 986 994 1015 : 20 watch 1025 1030 1061 : 25 tss_function 1071 1075 1090 : 18 exception 1096 1097 1121 : 18 tssupervisor 14 1132 1288 : 372 code: 8 . 1128 = 10728 bytes end of PASCAL80 compilation end blocksread = 53 ▶EOF◀