|
|
DataMuseum.dkPresents historical artifacts from the history of: RC3500 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC3500 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 48384 (0xbd00)
Types: TextFileVerbose
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»