|
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: 48384 (0xbd00) Types: TextFile Names: »ncsuplst«
└─⟦a41ae585a⟧ Bits:30001842 SW-save af projekt 1000, Alarm-system └─⟦72244f0ef⟧ └─⟦this⟧ »ncsuplst«
\f ncsuplst 81.06.22. 11.34. page 1 10 1 \f ncsuplst 81.06.22. 11.34. page 2 1010 2 1020 3 PROCESS ncsupervisor ( 1030 4 opsem : sempointer; (* operator *) 1040 5 VAR main_sem : !ts_pointer; (* my input semaphore *) 1050 6 VAR free_sem : !ts_pointer; (* nc buffer pool *) 1060 7 VAR done : !ts_pointer; (* answer from timeout *) 1070 8 VAR net_sem, (* netconnector *) 1080 9 timeout_sem : !sempointer (* timeout module *) 1090 10 ); 1100 11 1110 12 CONST 1120 13 1130 14 version = "vers 0.16 /"; 1140 15 1150 16 \f ncsuplst 81.06.22. 11.34. page 3 2010 17 2020 18 CONST 2030 19 2040 20 2050 21 no_nc_talk = 7; (* number of buffers for nc *) 2060 22 last_node = 63; (* max number of ts addresses *) 2070 23 max_node = last_node+1; 2080 24 dc = 0; 2090 25 2100 26 copy_code = #h10; 2110 27 refuse_code = #h12; 2120 28 dc_down = #h20; 2130 29 dc_up = #h21; 2140 30 nc_down = #h22; 2150 31 nc_up = #h23; 2160 32 ts_down = #h24; 2170 33 ts_up = #h25; 2180 34 tablerequest= #hae; 2190 35 var_code = #hb0; 2200 36 var_answ = #hb1; 2210 37 nodetest_code=#hc0; 2220 38 nodetest_answ=#hc1; 2230 39 connect_code= #hc8; 2240 40 connect_answ= #hc9; 2250 41 finis_code = #hce; 2260 42 2270 43 words = size_listen - 1 - ( label_size DIV 2); 2280 44 refuse_length = 2*label_size+2; 2290 45 bc_length = label_size + 4 + 2; 2300 46 ae_length = label_size + 4; 2310 47 test_length = label_size + 10; 2320 48 2330 49 delay1 = 250; (* 1 sec = 1000 m sec *) 2340 50 delay2 = 2; 2350 51 margin = 5; (* timeout tolerance *) 2360 52 read_clock = 2; 2370 53 writetimer = 6; 2380 54 2390 55 write = 2; 2400 56 \f ncsuplst 81.06.22. 11.34. page 4 3010 57 3020 58 TYPE 3030 59 3040 60 status = ( down, starting, sleep, ready ); 3050 61 3060 62 node_range = 0..max_node; 3070 63 3080 64 flawshape = PACKED RECORD (* for 1.0 and 1.2 *) 3090 65 ! head, 3100 66 ! data: alarmlabel 3110 67 END; 3120 68 3130 69 3140 70 note = PACKED RECORD (* for 2.xx and 10.14 *) 3150 71 ! head: alarmlabel; 3160 72 ! comp: alarmnetaddr; 3170 73 ! cnt : integer 3180 74 END; 3190 75 3200 76 3210 77 form11= PACKED RECORD (* for 11.0 and 11.1 *) 3220 78 ! head: alarmlabel; 3230 79 ! address: macroaddr; 3240 80 END; 3250 81 3260 82 3270 83 testshape = PACKED RECORD (* for 12.0, 12.1, 12.8, 12.9 *) 3280 84 ! head: alarmlabel; 3290 85 ! testno, peri : integer; 3300 86 ! data: ARRAY ( 3..words) OF integer; 3310 87 END; 3320 88 3330 89 3340 90 3350 91 \f ncsuplst 81.06.22. 11.34. page 5 4010 92 4020 93 VAR 4030 94 4040 95 tickmess : pool 1; (* 1 sec ticks *) 4050 96 clockpool: pool 1 OF ts_time; (* timing *) 4060 97 bufferpool: pool no_nc_talk OF testshape; 4070 98 4080 99 clock_msg, 4090 100 ms, msg : reference; 4100 101 4110 102 n, ts, nodes : node_range := 0; 4120 103 4130 104 index : ARRAY ( node_range) OF node_range; 4140 105 addr: ARRAY ( node_range) OF alarmnetaddr; 4150 106 state: ARRAY ( node_range) OF status; 4160 107 tests: ARRAY ( node_range) OF integer; 4170 108 4180 109 who, (* message receiver *) 4190 110 here : alarmnetaddr := (* my addr *) 4200 111 alarmnetaddr(macroaddr(0,0,0),0); 4210 112 4220 113 from : macroaddr; (* message sender *) 4230 114 4240 115 periode: integer:= 5*60; (* timeout periode *) 4250 116 rest_time : integer:= 5*60; (* rest # sec to timeout *) 4260 117 4270 118 loading: boolean:= true; (* nc-up not received yet *) 4280 119 4290 120 h : integer; 4300 121 cause : result_range; 4310 122 4320 123 console : zone; 4330 124 4340 125 4350 126 4360 127 PROCEDURE readram ( VAR w: byte; adr: integer); 4370 128 EXTERNAL; 4380 129 4390 130 4400 131 PROCEDURE writeram ( adr, w: integer); 4410 132 EXTERNAL; 4420 133 4430 134 \f ncsuplst 81.06.22. 11.34. page 6 5010 135 5020 136 FUNCTION gettime : ts_time; 5030 137 5040 138 TYPE 5050 139 clock_form = RECORD time: ts_time END; 5060 140 5070 141 BEGIN 5080 142 1 ! 5090 143 2 ! signal ( clock_msg, timeout_sem^); 5100 144 3 ! wait ( clock_msg, done.w^); 5110 145 4 ! LOCK clock_msg AS buf: clock_form DO 5120 146 5 ! gettime:= buf.time 5130 147 6 ! 5140 148 7 END; 5150 149 5160 150 5170 151 5180 152 \f ncsuplst 81.06.22. 11.34. page 7 6010 153 6020 154 PROCEDURE xmit ( VAR m: reference; u4val: byte ); 6030 155 6040 156 BEGIN 6050 157 1 ! m^.u1:= write; 6060 158 2 ! m^.u3:= nc_route; 6070 159 3 ! m^.u4:= u4val; 6080 160 4 ! signal ( m, net_sem^) 6090 161 5 END; 6100 162 6110 163 6120 164 6130 165 6140 166 6150 167 6160 168 PROCEDURE answer ( 6170 169 VAR m : reference; 6180 170 cause : result_range; 6190 171 oper : byte ); 6200 172 6210 173 BEGIN 6220 174 1 ! LOCK m AS head: alarmlabel DO 6230 175 2 ! WITH head DO 6240 176 3 ! BEGIN 6250 177 4 ! ! rec:= send; 6260 178 5 ! ! send:= here; 6270 179 6 ! ! result:= cause; 6280 180 7 ! ! ts_add:= gettime; 6290 181 8 ! END; 6300 182 9 ! xmit ( m, oper); 6310 183 10 END; 6320 184 6330 185 6340 186 \f ncsuplst 81.06.22. 11.34. page 8 7010 187 7020 188 7030 189 PROCEDURE refuse ( VAR m : reference; cause : result_range ); 7040 190 7050 191 BEGIN 7060 192 1 ! 7070 193 2 ! LOCK m AS buf : flawshape DO 7080 194 3 ! WITH buf DO 7090 195 4 ! BEGIN 7100 196 5 ! ! data:= head; 7110 197 6 ! ! data.op_code:= m^.u4; 7120 198 7 ! ! head.no_of_by:= refuse_length; 7130 199 8 ! ! head.rec:= head.send; 7140 200 9 ! ! head.send:= here; 7150 201 10 ! ! head.result:= cause; 7160 202 11 ! ! head.ts_add:= gettime; 7170 203 12 ! ! 7180 204 13 ! ! sensesem ( ms, free_sem.w^); 7190 205 14 ! ! IF NOT nil ( ms) THEN 7200 206 15 ! ! BEGIN 7210 207 16 ! ! ! LOCK ms AS new : flawshape DO 7220 208 17 ! ! ! BEGIN 7230 209 18 ! ! ! ! new:= buf; 7240 210 19 ! ! ! ! new.head.rec:= addr(dc); 7250 211 20 ! ! ! END; 7260 212 21 ! ! ! xmit ( ms, copy_code); 7270 213 22 ! ! END; 7280 214 23 ! ! 7290 215 24 ! END; 7300 216 25 ! xmit ( m, refuse_code); 7310 217 26 ! 7320 218 27 END; 7330 219 7340 220 7350 221 \f ncsuplst 81.06.22. 11.34. page 9 8010 222 8020 223 PROCEDURE insert ( new: macroaddr; newstate: status ); 8030 224 8040 225 VAR t: node_range; 8050 226 BEGIN 8060 227 1 ! 8070 228 2 ! IF ( new.dc_addr = here.macro.dc_addr ) AND 8080 229 3 ! ( new.nc_addr = here.macro.nc_addr ) AND 8090 230 4 ! ( new.ts_addr <> 0 ) THEN 8100 231 5 ! BEGIN (* new is one of my ts *) 8110 232 6 ! ! addr(nodes+1).macro:= new; 8120 233 7 ! ! t:= index(new.ts_addr); 8130 234 8 ! ! IF t = max_node THEN 8140 235 9 ! ! BEGIN 8150 236 10 ! ! ! t:= nodes+1; 8160 237 11 ! ! ! index(new.ts_addr):= t; 8170 238 12 ! ! ! nodes:= t; 8180 239 13 ! ! END; 8190 240 14 ! ! IF msg^.u4 = ts_down THEN state(t):= down ELSE 8200 241 15 ! ! IF msg^.u4 = ts_up THEN state(t):= ready ELSE 8210 242 16 ! ! state(t):= newstate; 8220 243 17 ! END; 8230 244 18 ! 8240 245 19 END; 8250 246 8260 247 8270 248 \f ncsuplst 81.06.22. 11.34. page 10 9010 249 PROCEDURE update ( VAR msg: reference); 9020 250 9030 251 BEGIN (* 11.0 from dc *) 9040 252 1 ! 9050 253 2 ! LOCK msg AS buf: form11 DO 9060 254 3 ! WITH buf DO 9070 255 4 ! BEGIN 9080 256 5 ! ! insert ( address, starting); 9090 257 6 ! ! here:= buf.head.rec; 9100 258 7 ! END; 9110 259 8 ! answer ( msg, accepted, var_answ); 9120 260 9 ! 9130 261 10 END; 9140 262 9150 263 \f ncsuplst 81.06.22. 11.34. page 11 10010 264 10020 265 10030 266 PROCEDURE first ( VAR m : reference ); 10040 267 10050 268 VAR res : byte; 10060 269 10070 270 BEGIN 10080 271 1 ! 10090 272 2 ! LOCK m AS buf : testshape DO 10100 273 3 ! WITH buf, head DO 10110 274 4 ! BEGIN 10120 275 5 ! ! IF ( m^.u4 = nodetest_code) AND (* 12.0 from dc *) 10130 276 6 ! ! ( rec.macro.ts_addr = 0 ) AND 10140 277 7 ! ! ( send.macro.nc_addr = 0 ) AND 10150 278 8 ! ! ( send.macro.ts_addr = 0 ) THEN 10160 279 9 ! ! BEGIN 10170 280 10 ! ! ! here.macro:= rec.macro; 10180 281 11 ! ! ! periode:= abs ( peri); 10190 282 12 ! ! ! rest_time:= periode; 10200 283 13 ! ! ! addr(dc).macro.dc_addr:= here.macro.dc_addr; 10210 284 14 ! ! ! state(dc):= ready; 10220 285 15 ! ! ! cause:= not_ready; 10230 286 16 ! ! ! res:= nodetest_answ; 10240 287 17 ! ! END ELSE 10250 288 18 ! ! BEGIN 10260 289 19 ! ! ! cause:= unknown_opcode; 10270 290 20 ! ! ! res:= refuse_code; 10280 291 21 ! ! END; 10290 292 22 ! END; 10300 293 23 ! 10310 294 24 ! answer ( m, cause, res); 10320 295 25 ! 10330 296 26 END; 10340 297 10350 298 10360 299 \f ncsuplst 81.06.22. 11.34. page 12 11010 300 11020 301 PROCEDURE restart ( where: alarmnetaddr); 11030 302 11040 303 BEGIN (* send 10.14 to dc *) 11050 304 1 ! 11060 305 2 ! wait ( ms, free_sem.w^); 11070 306 3 ! LOCK ms AS buf: note DO 11080 307 4 ! WITH buf, head DO 11090 308 5 ! BEGIN 11100 309 6 ! ! no_of_by:= ae_length; 11110 310 7 ! ! rec:= addr(dc); 11120 311 8 ! ! send:= here; 11130 312 9 ! ! update:= insert_code; 11140 313 10 ! ! result:= accepted; 11150 314 11 ! ! ts_add:= gettime; 11160 315 12 ! ! comp:= where; 11170 316 13 ! END; 11180 317 14 ! xmit ( ms, tablerequest); 11190 318 15 ! 11200 319 16 END; 11210 320 11220 321 \f ncsuplst 81.06.22. 11.34. page 13 12010 322 12020 323 12030 324 PROCEDURE broadcast ( 12040 325 operation : byte; (* op code *) 12050 326 who : alarmnetaddr; (* receiver *) 12060 327 where : alarmnetaddr; (* component *) 12070 328 c : integer (* count *) 12080 329 ); 12090 330 12100 331 BEGIN 12110 332 1 ! 12120 333 2 ! wait ( ms, free_sem.w^); 12130 334 3 ! LOCK ms AS buf : note DO 12140 335 4 ! WITH buf, head DO 12150 336 5 ! BEGIN 12160 337 6 ! ! no_of_by:= bc_length; 12170 338 7 ! ! rec:= who; 12180 339 8 ! ! send:= here; 12190 340 9 ! ! update:= insert_code; 12200 341 10 ! ! ts_add:= gettime; 12210 342 11 ! ! comp:= where; 12220 343 12 ! ! cnt:= c 12230 344 13 ! END; 12240 345 14 ! 12250 346 15 ! xmit ( ms, operation) 12260 347 16 ! 12270 348 17 END; 12280 349 12290 350 12300 351 12310 352 \f ncsuplst 81.06.22. 11.34. page 14 13010 353 13020 354 PROCEDURE test_all; 13030 355 13040 356 BEGIN (* test all ts *) 13050 357 1 ! 13060 358 2 ! FOR ts:= 1 TO nodes DO 13070 359 3 ! BEGIN 13080 360 4 ! ! 13090 361 5 ! ! IF state(ts) = sleep THEN (* answer missing *) 13100 362 6 ! ! BEGIN 13110 363 7 ! ! ! state(ts):= down; 13120 364 8 ! ! ! FOR n:= 0 TO nodes DO 13130 365 9 ! ! ! IF n <> ts THEN 13140 366 10 ! ! ! broadcast ( ts_down, addr(n), addr(ts), 0); 13150 367 11 ! ! END; 13160 368 12 ! ! 13170 369 13 ! ! wait ( ms, free_sem.w^); 13180 370 14 ! ! LOCK ms AS buf: testshape DO 13190 371 15 ! ! WITH buf, head DO 13200 372 16 ! ! BEGIN 13210 373 17 ! ! ! no_of_by:= test_length; 13220 374 18 ! ! ! rec:= addr(ts); 13230 375 19 ! ! ! send:= here; 13240 376 20 ! ! ! update:= insert_code; 13250 377 21 ! ! ! ts_add:= gettime; 13260 378 22 ! ! ! count ( tests(ts)); 13270 379 23 ! ! ! testno:= tests(ts); 13280 380 24 ! ! ! peri:= periode+margin; 13290 381 25 ! ! END; 13300 382 26 ! ! IF state(ts) = ready THEN state(ts):= sleep; 13310 383 27 ! ! xmit ( ms, nodetest_code) 13320 384 28 ! ! 13330 385 29 ! END 13340 386 30 END; 13350 387 13360 388 13370 389 \f ncsuplst 81.06.22. 11.34. page 15 14010 390 14020 391 (*--------------------- exception for nc-sup -------------------------*) 14030 392 14040 393 PROCEDURE exception ( cause : integer); 14050 394 14060 395 VAR switch: byte; 14070 396 14080 397 BEGIN 14090 398 1 ! trace ( cause); (* shows where I was *) 14100 399 2 ! 14110 400 3 ! (* clear resources *) 14120 401 4 ! IF NOT nil ( msg) THEN refuse ( msg, breaked); 14130 402 5 ! IF nil ( ms) THEN wait ( ms, free_sem.w^); 14140 403 6 ! 14150 404 7 ! LOCK ms AS buf: testshape DO 14160 405 8 ! WITH buf, head DO 14170 406 9 ! BEGIN 14180 407 10 ! ! no_of_by:= label_size + 2; 14190 408 11 ! ! send:= addr(dc); 14200 409 12 ! ! testno:= cause 14210 410 13 ! END; 14220 411 14 ! answer ( ms, breaked, finis_code); 14230 412 15 ! 14240 413 16 ! FOR h:= 1 TO no_nc_talk DO 14250 414 17 ! BEGIN 14260 415 18 ! ! wait ( ms, free_sem.w^); 14270 416 19 ! ! release ( ms) 14280 417 20 ! END; 14290 418 21 ! 14300 419 22 ! (* exception loop *) 14310 420 23 ! h:= 0; 14320 421 24 ! REPEAT 14330 422 25 ! ! wait ( msg, main_sem.w^); 14340 423 26 ! ! IF ownertest ( tickmess, msg) THEN 14350 424 27 ! ! release ( msg) 14360 425 28 ! ! ELSE 14370 426 29 ! ! refuse ( msg, breaked); 14380 427 30 ! ! h:= h+1; 14390 428 31 ! ! 14400 429 32 ! ! IF h>2 THEN 14410 430 33 ! ! BEGIN (* autoload *) 14420 431 34 ! ! ! readram ( switch, 10); 14430 432 35 ! ! ! IF switch DIV 16 = 6 THEN 14440 433 36 ! ! ! BEGIN 14450 434 37 ! ! ! ! writeram ( 6,0); writeram ( 5,1); 14460 435 38 ! ! ! ! WHILE true DO ; \f ncsuplst 81.06.22. 11.34. page 16 14470 436 39 ! ! ! END 14480 437 40 ! ! END; 14490 438 41 ! UNTIL false 14500 439 42 ! 14510 440 43 END; 14520 441 14530 442 14540 443 \f ncsuplst 81.06.22. 11.34. page 17 15010 444 (*-------------------- main program -----------------------------*) 15020 445 15030 446 BEGIN 15040 447 1 ! testopen ( console, own.incname, opsem); 15050 448 2 ! testout ( console, version, al_env_version); 15060 449 3 ! 15070 450 4 ! 15080 451 5 ! 15090 452 6 ! FOR ts:= 0 TO max_node DO 15100 453 7 ! BEGIN 15110 454 8 ! ! index(ts):= max_node; 15120 455 9 ! ! addr(ts).macro:= macroaddr(0,0,0); 15130 456 10 ! ! addr(ts).micro:= tss_mic_addr; 15140 457 11 ! ! state(ts):= down; 15150 458 12 ! ! tests(ts):= 0 15160 459 13 ! END; 15170 460 14 ! addr(dc).micro:= dc_erh_mic_addr; 15180 461 15 ! 15190 462 16 ! FOR h:= 1 TO no_nc_talk DO 15200 463 17 ! BEGIN 15210 464 18 ! ! alloc ( msg, bufferpool, free_sem.s^); 15220 465 19 ! ! msg^.u3:= nc_route; 15230 466 20 ! ! signal( msg, free_sem.s^) 15240 467 21 ! END; 15250 468 22 ! 15260 469 23 ! alloc ( clock_msg, clockpool, done.s^); 15270 470 24 ! clock_msg^.u1:= read_clock; 15280 471 25 ! clock_msg^.u3:= nc_route; 15290 472 26 ! 15300 473 27 ! (* wait for 12.00 *) 15310 474 28 ! REPEAT 15320 475 29 ! ! wait ( msg, main_sem.w^); 15330 476 30 ! ! CASE msg^.u3 OF 15340 477 31 ! ! ! dummy_route: return ( msg); 15350 478 32 ! ! ! netc_route1: return ( msg); (* refused *) 15360 479 33 ! ! ! netc_route: first ( msg); 15370 480 34 ! ! ! OTHERWISE signal ( msg, net_sem^); 15380 481 35 ! ! END (* case *) 15390 482 36 ! UNTIL state(dc) = ready; 15400 483 37 ! 15410 484 38 ! restart ( here); 15420 485 39 ! alloc ( msg, tickmess, main_sem.s^); 15430 486 40 ! msg^.u1:= writetimer; 15440 487 41 ! msg^.u3:= delay1; 15450 488 42 ! msg^.u4:= delay2; 15460 489 43 ! sendtimer ( msg); \f ncsuplst 81.06.22. 11.34. page 18 15470 490 44 ! 15480 491 45 ! (*q trace ( 370); (* only for debug *) 15490 492 46 ! \f ncsuplst 81.06.22. 11.34. page 19 16010 493 47 ! 16020 494 48 ! (*------------------------ main loop ----------------------------------*) 16030 495 49 ! 16040 496 50 ! REPEAT 16050 497 51 ! ! 16060 498 52 ! ! wait ( msg, main_sem.w^); 16070 499 53 ! ! 16080 500 54 ! ! IF ownertest ( tickmess, msg) THEN (* timer *) 16090 501 55 ! ! BEGIN 16100 502 56 ! ! ! rest_time:= rest_time - 1; 16110 503 57 ! ! ! msg^.u3:= delay1; 16120 504 58 ! ! ! msg^.u4:= delay2; 16130 505 59 ! ! ! sendtimer ( msg); 16140 506 60 ! ! ! 16150 507 61 ! ! ! IF rest_time <= 0 THEN (* timeout *) 16160 508 62 ! ! ! BEGIN 16170 509 63 ! ! ! ! <* skip UNTIL dc makes nodetest ---------------------------- *> 16180 510 64 ! ! ! ! IF state(dc) <> down THEN 16190 511 65 ! ! ! ! BEGIN 16200 512 66 ! ! ! ! ! state(dc):= down; 16210 513 67 ! ! ! ! ! FOR ts:= 1 TO nodes DO 16220 514 68 ! ! ! ! ! broadcast ( dc_down, addr(ts), addr(dc), 0); 16230 515 69 ! ! ! ! END; 16240 516 70 ! ! ! ! <* ----------------------------------------------------------------*> 16250 517 71 ! ! ! ! test_all; 16260 518 72 ! ! ! ! rest_time:= periode; 16270 519 73 ! ! ! ! 16280 520 74 ! ! ! END (* timeout *) 16290 521 75 ! ! END (* timer *) 16300 522 76 ! ! ELSE 16310 523 77 ! ! 16320 524 78 ! ! IF msg^.u3 = dummy_route THEN 16330 525 79 ! ! return ( msg) 16340 526 80 ! ! ELSE 16350 527 81 ! ! 16360 528 82 ! ! \f ncsuplst 81.06.22. 11.34. page 20 17010 529 83 ! ! 17020 530 84 ! ! BEGIN (* other messages *) 17030 531 85 ! ! ! 17040 532 86 ! ! ! LOCK msg AS head: alarmlabel DO 17050 533 87 ! ! ! BEGIN 17060 534 88 ! ! ! ! who:= head.rec; 17070 535 89 ! ! ! ! from:= head.send.macro 17080 536 90 ! ! ! END; 17090 537 91 ! ! ! 17100 538 92 ! ! ! IF who = here THEN (* for me *) 17110 539 93 ! ! ! BEGIN 17120 540 94 ! ! ! ! CASE msg^.u4 OF 17130 541 95 ! ! ! ! ! 17140 542 96 ! ! ! ! ! refuse_code: 17150 543 97 ! ! ! ! ! BEGIN 17160 544 98 ! ! ! ! ! ! LOCK msg AS buf: testshape DO 17170 545 99 ! ! ! ! ! ! WITH buf DO 17180 546 100 ! ! ! ! ! ! IF state(index(peri MOD 64)) >= sleep THEN 17190 547 101 ! ! ! ! ! ! BEGIN 17200 548 102 ! ! ! ! ! ! ! testout ( console, "msg to ", peri); 17210 549 103 ! ! ! ! ! ! ! testout ( console, "returned ", data(6)); 17220 550 104 ! ! ! ! ! ! END; 17230 551 105 ! ! ! ! ! ! return ( msg) 17240 552 106 ! ! ! ! ! END; 17250 553 107 ! ! ! ! ! 17260 554 108 ! ! ! ! ! #h20..#h23, 17270 555 109 ! ! ! ! ! #h26..#h29: 17280 556 110 ! ! ! ! ! BEGIN (* broadcast *) 17290 557 111 ! ! ! ! ! ! LOCK msg AS buf: note DO 17300 558 112 ! ! ! ! ! ! WITH buf DO 17310 559 113 ! ! ! ! ! ! BEGIN 17320 560 114 ! ! ! ! ! ! ! IF from = addr(dc).macro THEN 17330 561 115 ! ! ! ! ! ! ! BEGIN 17340 562 116 ! ! ! ! ! ! ! ! head.send.micro:= addr(dc).micro; 17350 563 117 ! ! ! ! ! ! ! ! IF ( msg^.u4 = nc_up ) AND 17360 564 118 ! ! ! ! ! ! ! ! ( comp = here ) THEN loading:= false; 17370 565 119 ! ! ! ! ! ! ! END; 17380 566 120 ! ! ! ! ! ! ! FOR ts:= 0 TO nodes DO 17390 567 121 ! ! ! ! ! ! ! IF head.send <> addr(ts) THEN 17400 568 122 ! ! ! ! ! ! ! broadcast ( msg^.u4, addr(ts), comp, cnt) 17410 569 123 ! ! ! ! ! ! END; 17420 570 124 ! ! ! ! ! ! return ( msg); 17430 571 125 ! ! ! ! ! END; 17440 572 126 ! ! ! ! ! 17450 573 127 ! ! ! ! ! \f ncsuplst 81.06.22. 11.34. page 21 18010 574 128 ! ! ! ! ! 18020 575 129 ! ! ! ! ! ts_down, 18030 576 130 ! ! ! ! ! ts_up : 18040 577 131 ! ! ! ! ! BEGIN (* ts broadcast *) 18050 578 132 ! ! ! ! ! ! LOCK msg AS buf: note DO 18060 579 133 ! ! ! ! ! ! WITH buf, head DO 18070 580 134 ! ! ! ! ! ! BEGIN 18080 581 135 ! ! ! ! ! ! ! 18090 582 136 ! ! ! ! ! ! ! insert ( comp.macro, ready); 18100 583 137 ! ! ! ! ! ! ! 18110 584 138 ! ! ! ! ! ! ! IF from = addr(dc).macro THEN head.send.micro:= addr(dc).micro; 18120 585 139 ! ! ! ! ! ! ! FOR ts:= 0 TO nodes DO 18130 586 140 ! ! ! ! ! ! ! IF head.send<> addr(ts) THEN 18140 587 141 ! ! ! ! ! ! ! broadcast ( msg^.u4, addr(ts), comp, cnt); 18150 588 142 ! ! ! ! ! ! END; 18160 589 143 ! ! ! ! ! ! return ( msg); 18170 590 144 ! ! ! ! ! ! 18180 591 145 ! ! ! ! ! END; 18190 592 146 ! ! ! ! ! 18200 593 147 ! ! ! ! ! var_code: 18210 594 148 ! ! ! ! ! IF from = addr(dc).macro THEN (* 11.0 *) 18220 595 149 ! ! ! ! ! update ( msg) ELSE 18230 596 150 ! ! ! ! ! refuse ( msg, unknown_sender); 18240 597 151 ! ! ! ! ! 18250 598 152 ! ! ! ! ! \f ncsuplst 81.06.22. 11.34. page 22 19010 599 153 ! ! ! ! ! 19020 600 154 ! ! ! ! ! nodetest_code: 19030 601 155 ! ! ! ! ! BEGIN (* 12.0 *) 19040 602 156 ! ! ! ! ! ! IF from = addr(dc).macro THEN 19050 603 157 ! ! ! ! ! ! BEGIN 19060 604 158 ! ! ! ! ! ! ! LOCK msg AS buf: testshape DO 19070 605 159 ! ! ! ! ! ! ! periode:= abs ( buf.peri); 19080 606 160 ! ! ! ! ! ! ! rest_time:= periode; 19090 607 161 ! ! ! ! ! ! ! answer ( msg, accepted, nodetest_answ); 19100 608 162 ! ! ! ! ! ! ! IF state(dc) = down THEN 19110 609 163 ! ! ! ! ! ! ! BEGIN 19120 610 164 ! ! ! ! ! ! ! ! FOR ts:= 1 TO nodes DO 19130 611 165 ! ! ! ! ! ! ! ! broadcast ( dc_up, addr(ts), addr(dc), 0); 19140 612 166 ! ! ! ! ! ! ! END; 19150 613 167 ! ! ! ! ! ! ! IF loading THEN restart ( here); 19160 614 168 ! ! ! ! ! ! ! state(dc):= ready; 19170 615 169 ! ! ! ! ! ! ! test_all; 19180 616 170 ! ! ! ! ! ! ! rest_time:= periode; 19190 617 171 ! ! ! ! ! ! END 19200 618 172 ! ! ! ! ! ! ELSE 19210 619 173 ! ! ! ! ! ! refuse ( msg, unknown_sender) 19220 620 174 ! ! ! ! ! END; 19230 621 175 ! ! ! ! ! 19240 622 176 ! ! ! ! ! 19250 623 177 ! ! ! ! ! 19260 624 178 ! ! ! ! ! <* *> 19270 625 179 ! ! ! ! ! (*-------------- only for debug of own exception ------------------*) 19280 626 180 ! ! ! ! ! 19290 627 181 ! ! ! ! ! #h0b: (* 0.11 *) 19300 628 182 ! ! ! ! ! BEGIN 19310 629 183 ! ! ! ! ! ! h:= h DIV msg^.u1; (* if u1 = 0 *) 19320 630 184 ! ! ! ! ! ! exception ( msg^.u2); (* or use u2 *) 19330 631 185 ! ! ! ! ! END; 19340 632 186 ! ! ! ! ! 19350 633 187 ! ! ! ! ! <* *> 19360 634 188 ! ! ! ! ! 19370 635 189 ! ! ! ! ! 19380 636 190 ! ! ! ! ! \f ncsuplst 81.06.22. 11.34. page 23 20010 637 191 ! ! ! ! ! 20020 638 192 ! ! ! ! ! nodetest_answ: (* 12.1 *) 20030 639 193 ! ! ! ! ! BEGIN 20040 640 194 ! ! ! ! ! ! LOCK msg AS buf: testshape DO 20050 641 195 ! ! ! ! ! ! WITH buf DO 20060 642 196 ! ! ! ! ! ! BEGIN 20070 643 197 ! ! ! ! ! ! ! ts:= index(head.send.macro.ts_addr); 20080 644 198 ! ! ! ! ! ! ! IF ts <= nodes THEN (* found *) 20090 645 199 ! ! ! ! ! ! ! BEGIN 20100 646 200 ! ! ! ! ! ! ! ! IF head.result = not_ready THEN 20110 647 201 ! ! ! ! ! ! ! ! BEGIN 20120 648 202 ! ! ! ! ! ! ! ! ! restart ( head.send); 20130 649 203 ! ! ! ! ! ! ! ! ! IF state(ts) >= sleep THEN (* ts autoloaded *) 20140 650 204 ! ! ! ! ! ! ! ! ! FOR n:= 0 TO nodes DO 20150 651 205 ! ! ! ! ! ! ! ! ! IF n <> ts THEN 20160 652 206 ! ! ! ! ! ! ! ! ! broadcast ( ts_down, addr(n), addr(ts), 0); 20170 653 207 ! ! ! ! ! ! ! ! ! state(ts):= starting; 20180 654 208 ! ! ! ! ! ! ! ! END ELSE 20190 655 209 ! ! ! ! ! ! ! ! BEGIN 20200 656 210 ! ! ! ! ! ! ! ! ! IF state(ts) = down THEN 20210 657 211 ! ! ! ! ! ! ! ! ! BEGIN 20220 658 212 ! ! ! ! ! ! ! ! ! ! FOR n:= 0 TO nodes DO 20230 659 213 ! ! ! ! ! ! ! ! ! ! IF n <> ts THEN 20240 660 214 ! ! ! ! ! ! ! ! ! ! broadcast ( ts_up, addr(n), addr(ts), 0) 20250 661 215 ! ! ! ! ! ! ! ! ! END; 20260 662 216 ! ! ! ! ! ! ! ! ! state(ts):= ready; 20270 663 217 ! ! ! ! ! ! ! ! END; 20280 664 218 ! ! ! ! ! ! ! ! IF tests(ts) <> testno THEN 20290 665 219 ! ! ! ! ! ! ! ! BEGIN 20300 666 220 ! ! ! ! ! ! ! ! ! testout ( console, "send no. ", tests(ts)); 20310 667 221 ! ! ! ! ! ! ! ! ! testout ( console, "received ", testno); 20320 668 222 ! ! ! ! ! ! ! ! END; 20330 669 223 ! ! ! ! ! ! ! ! (* look at data(2..8) *) 20340 670 224 ! ! ! ! ! ! ! END 20350 671 225 ! ! ! ! ! ! ! ELSE 20360 672 226 ! ! ! ! ! ! ! insert ( from, starting); 20370 673 227 ! ! ! ! ! ! END; 20380 674 228 ! ! ! ! ! ! return ( msg); 20390 675 229 ! ! ! ! ! END; 20400 676 230 ! ! ! ! ! 20410 677 231 ! ! ! ! ! connect_code: (* 12.8 *) 20420 678 232 ! ! ! ! ! BEGIN 20430 679 233 ! ! ! ! ! ! answer ( msg, accepted, connect_answ) 20440 680 234 ! ! ! ! ! END 20450 681 235 ! ! ! ! ! 20460 682 236 ! ! ! ! ! OTHERWISE \f ncsuplst 81.06.22. 11.34. page 24 20470 683 237 ! ! ! ! ! refuse ( msg, unknown_opcode) 20480 684 238 ! ! ! ! ! 20490 685 239 ! ! ! ! END (* case *) 20500 686 240 ! ! ! END (* who = here *) 20510 687 241 ! ! ! 20520 688 242 ! ! ! \f ncsuplst 81.06.22. 11.34. page 25 21010 689 243 ! ! ! 21020 690 244 ! ! ! ELSE 21030 691 245 ! ! ! 21040 692 246 ! ! ! IF ( msg^.u3 = netc_route1 ) THEN (* refused by netc *) 21050 693 247 ! ! ! return ( msg) ELSE 21060 694 248 ! ! ! 21070 695 249 ! ! ! IF ( msg^.u3 = netc_route2 ) THEN (* answer from netc *) 21080 696 250 ! ! ! signal ( msg, net_sem^) 21090 697 251 ! ! ! ELSE 21100 698 252 ! ! ! 21110 699 253 ! ! ! IF who.micro = netc_mic_addr THEN (* to netc *) 21120 700 254 ! ! ! BEGIN 21130 701 255 ! ! ! ! msg^.u3:= netc_route1; 21140 702 256 ! ! ! ! signal ( msg, net_sem^); 21150 703 257 ! ! ! END ELSE 21160 704 258 ! ! ! 21170 705 259 ! ! ! IF ( from = addr(dc).macro ) 21180 706 260 ! ! ! AND ( msg^.u4 = var_code) 21190 707 261 ! ! ! AND ( who.micro = tss_mic_addr ) THEN 21200 708 262 ! ! ! update ( msg) 21210 709 263 ! ! ! ELSE 21220 710 264 ! ! ! refuse ( msg, unknown_receiver); 21230 711 265 ! ! END 21240 712 266 ! ! 21250 713 267 ! UNTIL false; 21260 714 268 ! 21270 715 269 END . (* of nc - supervisor *) 21280 716 21290 717 21300 718 \f ncsuplst 81.06.22. 11.34. page 26 0 24* 62* 102* 111* 111* 111* 111* 230 276 277 278 364 366 420 434 452 455 455 455 458 507 514 566 585 611 650 652 658 660 1 23* 43* 95* 96* 232 236 358 413 427 434 462 502 513 610 2 43* 44* 44* 45* 50* 52* 55* 407 429 3 86* 4 45* 46* 5 51* 115* 116* 434 6 53* 432 434 549 7 21* 10 47* 431 16 432 60 115* 116* 63 22* 64 546 250 49* abs 281 605 accepted 259 313 607 679 addr 105* 210 232 283 310 366 366 374 408 455 456 460 514 514 560 562 567 568 584 584 586 587 594 602 611 611 652 652 660 660 705 address 79* 256 adr 127* 131* ae_length 46* 309 alarmlabel 66* 71* 78* 84* 174 532 alarmnetaddr 72* 105* 110* 111* 301* 326* 327* alloc 464 469 485 al_env_version <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 448 answer 168* 259 294 411 607 679 as 145: 174: 193: 207: 253: 272: 306: 334: 370: 404: 532: 544: 557: 578: 604: 640: bc_length 45* 337 boolean 118* breaked 401 411 426 broadcast 324* 366 514 568 587 611 652 660 buf 145: 146 193: 194 209 253: 254 257 272: 273 306: 307 334: 335 370: 371 404: 405 544: 545 557: 558 578: 579 604: 605 640: 641 bufferpool 97* 464 byte 127* 154* 171* 268* 325* 395* c 328* 343 cause 121* 170* 179 189* 201 285= 289= 294 393* 398 409 clockpool 96* 469 clock_form 139* 145 clock_msg 99* 143 144 145: 469 470 471 \f ncsuplst 81.06.22. 11.34. page 27 cnt 73* 343= 568 587 comp 72* 315= 342= 564 568 582 587 connect_answ 40* 679 connect_code 39* 677: console 123* 447 448 548 549 666 667 copy_code 26* 212 count 378 data 66* 86* 196= 197 549 dc 24* 210 283 284 310 408 460 482 510 512 514 560 562 584 584 594 602 608 611 614 705 dc_addr 228 228 283= 283 dc_down 28* 514 dc_erh_mic_addr <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 460 dc_up 29* 611 delay1 49* 487 503 delay2 50* 488 504 done 7* 144 469 down 60* 240 363 457 510 512 608 656 dummy_route 477: 524 exception 393* 630 external 128* 132* false 438 564 713 finis_code 41* 411 first 266* 479 flawshape 64* 193 207 form11 77* 253 free_sem 6* 204 305 333 369 402 415 464 466 from 113* 535= 560 584 594 602 672 705 gettime 136* 146= 180 202 314 341 377 h 120* 413= 420= 427= 427 429 462= 629= 629 h0b 627: h10 26* h12 27* h20 28* 554 h21 29* h22 30* h23 31* 554 h24 32* h25 33* h26 555 h29 555: hae 34* hb0 35* \f ncsuplst 81.06.22. 11.34. page 28 hb1 36* hc0 37* hc1 38* hc8 39* hc9 40* hce 41* head 65* 71* 78* 84* 174: 175 196 198 199 199 200 201 202 210 257 273 307 335 371 405 532: 534 535 562 567 579 584 586 643 646 648 here 110* 178 200 228 229 257= 280 283 311 339 375 484 538 564 613 incname 447 index 104* 233 237= 454= 546 643 insert 223* 256 582 672 insert_code 312 340 376 integer 73* 85* 86* 107* 115* 116* 120* 127* 131* 328* 393* label_size 43* 44* 45* 46* 47* 407 last_node 22* 23* loading 118* 564= 613 lock 145: 174: 193: 207: 253: 272: 306: 334: 370: 404: 532: 544: 557: 578: 604: 640: m 154* 157 158 159 160 169* 174: 182 189* 193: 197 216 266* 272: 275 294 macro 228 229 232= 276 277 278 280= 280 283 283 455= 535 560 582 584 594 602 643 705 macroaddr 79* 111* 113* 223* 455 main_sem 5* 422 475 485 498 margin 51* 380 max_node 23* 62* 234 452 454 micro 456= 460= 562= 562 584= 584 699 707 ms 100* 204 205 207: 212 305 306: 317 333 334: 346 369 370: 383 402 402 404: 411 415 416 msg 100* 240 241 249* 253: 259 401 401 422 423 424 426 464 465 466 475 476 477 478 479 480 485 486 487 488 489 498 500 503 504 505 524 525 532: 540 544: 551 557: 563 568 570 578: 587 589 595 596 604: 607 619 629 630 640: 674 679 683 692 693 695 696 701 702 706 708 710 n 102* 364= 365 366 650= 651 652 658= 659 660 ncsupervisor 3* nc_addr 229 229 277 nc_down 30* nc_route 158 465 471 nc_up 31* 563 netc_mic_addr <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 699 \f ncsuplst 81.06.22. 11.34. page 29 netc_route 479: netc_route1 478: 692 701 netc_route2 695 net_sem 8* 160 480 696 702 new 207: 209= 210 223* 228 229 230 232 233 237 newstate 223* 242 nodes 102* 232 236 238= 358 364 513 566 585 610 644 650 658 nodetest_answ <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 38* 286 607 638: nodetest_code <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 37* 275 383 600: node_range 62* 102* 104* 104* 105* 106* 107* 225* note 70* 306 334 557 578 not_ready 285 646 no_nc_talk 21* 97* 413 462 no_of_by 198= 309= 337= 373= 407= oper 171* 182 operation 325* 346 opsem 4* 447 op_code 197= own 447 ownertest 423 500 peri 85* 281 380= 546 548 605 periode 115* 281= 282 380 518 605= 606 616 pool 95* 96* 97* process 3* readram 127* 431 ready 60* 241 284 382 482 582 614 662 read_clock 52* 470 rec 177= 199= 210= 257 276 280 310= 338= 374= 534 reference 100* 154* 169* 189* 249* 266* refuse 189* 401 426 596 619 683 710 refuse_code 27* 216 290 542: refuse_length <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 44* 198 release 416 424 res 268* 286= 290= 294 restart 301* 484 613 648 rest_time 116* 282= 502= 502 507 518= 606= 616= result 179= 201= 313= 646 result_range 121* 170* 189* return 477 478 525 551 570 589 674 693 s 464 466 469 485 sempointer 4* 9* \f ncsuplst 81.06.22. 11.34. page 30 send 177 178= 199 200= 277 278 311= 339= 375= 408= 535 562 567 584 586 643 648 sendtimer 489 505 sensesem 204 signal 143 160 466 480 696 702 size_listen 43* sleep 60* 361 382 546 649 starting 60* 256 653 672 state 106* 240= 241= 242= 284= 361 363= 382 382= 457= 482 510 512= 546 608 614= 649 653= 656 662= status 60* 106* 223* switch 395* 431 432 t 225* 233= 234 236= 237 238 240 241 242 tablerequest 34* 317 testno 85* 379= 409= 664 667 testopen 447 testout 448 548 549 666 667 tests 107* 378 379 458= 664 666 testshape 83* 97* 272 370 404 544 604 640 test_all 354* 517 615 test_length 47* 373 tickmess 95* 423 485 500 time 139* 146 timeout_sem 9* 143 trace 398 true 118* 435 ts 102* 358= 361 363 365 366 374 378 379 382 382 452= 454 455 456 457 458 513= 514 566= 567 568 585= 586 587 610= 611 643= 644 649 651 652 653 656 659 660 662 664 666 tss_mic_addr 456 707 ts_add 180= 202= 314= 341= 377= ts_addr 230 233 237 276 278 643 ts_down 32* 240 366 575: 652 ts_pointer 5* 6* 7* ts_time 96* 136* 139* ts_up 33* 241 576: 660 u1 157= 470= 486= 629 u2 630 u3 158= 465= 471= 476 487= 503= 524 692 695 701= u4 159= 197 240 241 275 488= 504= 540 563 568 587 706 u4val 154* 159 unknown_opcode <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 289 683 unknown_receiver <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 710 \f ncsuplst 81.06.22. 11.34. page 31 unknown_sender <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 596 619 update 249* 312= 340= 376= 595 708 var_answ 36* 259 var_code 35* 593: 706 version 14* 448 w 127* 131* 144 204 305 333 369 402 415 422 475 498 wait 144 305 333 369 402 415 422 475 498 where 301* 315 327* 342 who 109* 326* 338 534= 538 699 707 words 43* 86* write 55* 157 writeram 131* 434 434 writetimer 53* 486 xmit 154* 182 212 216 317 346 383 zone 123* \f ncsuplst 81.06.22. 11.34. page 32 AND 8 ARRAY 5 BEGIN 59 CASE 2 CONST 2 DIV 3 DO 40 ELSE 15 END 66 FOR 11 FUNCTION 1 IF 40 MOD 1 NIL 3 NOT 2 OF 9 OTHERWISE 2 PACKED 4 PROCEDURE 12 RECORD 5 REPEAT 3 THEN 40 TO 11 TYPE 2 UNTIL 3 VAR 14 WHILE 1 WITH 12 nc supervisor 81.06.22. 11.35. pascal80 version 1981.04.01 name headline beginline endline appetite(words) gettime 139 143 146 : 9 xmit 156 157 160 : 5 answer 173 174 183 : 18 refuse 191 193 218 : 18 insert 225 231 245 : 6 update 251 253 261 : 14 first 268 272 296 : 20 restart 303 305 319 : 20 broadcast 331 333 346 : 20 test_all 356 358 386 : 25 exception 395 398 440 : 19 ncsupervisor 14 447 715 : 400 code: 8 . 362 = 6762 bytes end of PASCAL80 compilation end blocksread = 53 ▶EOF◀