|
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: 53760 (0xd200) Types: TextFile Names: »festrlst«
└─⟦a41ae585a⟧ Bits:30001842 SW-save af projekt 1000, Alarm-system └─⟦72244f0ef⟧ └─⟦this⟧ »festrlst«
\f festrlst 81.05.13. 11.35. page 1 10 1 PROCESS streamer( 20 2 VAR input_sem, xmitter, receiver : ! ts_pointer; 30 3 retrans_max : integer; 40 4 op : sempointer); 50 5 60 6 70 7 CONST 80 8 version = "vers 1.01 /"; 90 9 output_buffers = 1; 100 10 input_buffers = 1; 110 11 own_data_size = 8; (* bytes *) 120 12 130 13 sense_com = 0; 140 14 write_data = 2; 150 15 write_read_data= 3; 160 16 regret_input = 4; 170 17 input = 5; 180 18 output = 6; <* output = input + 1 is demanded *> 190 19 tell_next_notice=8; 200 20 read_stream = 9; 210 21 write_stream =10; 220 22 regret_output =12; 230 23 240 24 CONST 250 25 chain_in = 8; 260 26 chain_out = 8; 270 27 restart_notices= 1; 280 28 noticed_output = 2; 290 29 received_input = 3; 300 30 ready_request = 4; 310 31 free_in = 5; 320 32 free_out = 6; 330 33 chain_max = 6 + chain_in + chain_out; 340 34 350 35 TYPE 360 36 chain_rec = RECORD 370 37 ! next, prev, c_stream, c_func : byte; 380 38 ! ref : reference; 390 39 END; 400 40 chain_mem = ARRAY(1..chain_max) OF chain_rec; 410 41 420 42 VAR 430 43 chain : chain_mem; 440 44 450 45 z : zone; 460 46 \f festrlst 81.05.13. 11.35. page 2 470 47 CONST 480 48 request = 0; 490 49 notice = 0; 500 50 master_out = 1; 510 51 no_stream = 0; 520 52 max_stream =63; 530 53 540 54 stream_size =max_stream + 1; 550 55 master_block = 256 DIV stream_size - 1; 560 56 master_size = 2; 570 57 buffer_size = stream_size DIV master_size; 580 58 590 59 ok_result = 0; 600 60 rejected = 1; 610 61 soft_error = 2; 620 62 (* *) blocklength_error = 64; 630 63 hard_error = 3; 640 64 un_intelligible= 4; 650 65 master = 5; 660 66 overload = 6; 670 67 680 68 max_integer = 32767; 690 69 700 70 TYPE 710 71 data_buffer = RECORD 720 72 ! first, last, next : integer; 730 73 END; 740 74 own_data = RECORD 750 75 ! first, last, next : integer; 760 76 ! d : ARRAY(1..own_data_size DIV 2) OF integer; 770 77 END; 780 78 790 79 VAR 800 80 header, sense_device, desc_header, message : reference; 810 81 820 82 waiting_output, 830 83 out_desc_sem, 840 84 pending_input, in_desc_sem : semaphore; 850 85 860 86 output_stopped, input_stopped: boolean; 870 87 notices_received: PACKED ARRAY(0..max_stream) OF byte ; 880 88 890 89 xmit_pool : pool output_buffers + output_buffers; 900 90 sense_pool : pool input_buffers + output_buffers; 910 91 receive_pool : pool input_buffers + buffer_size; 920 92 message_pool : pool input_buffers OF own_data; \f festrlst 81.05.13. 11.35. page 3 930 93 940 94 operation, result, status, stream , result_modif, 950 95 output_block_no, input_block_no : integer; 960 96 970 97 980 98 PROCEDURE move_element(from, into : integer); 990 99 VAR fn, fp, tn : integer; 1000 100 BEGIN 1010 101 1 ! WITH chain(into) DO 1020 102 2 ! BEGIN 1030 103 3 ! ! tn := next; next := from; 1040 104 4 ! END; 1050 105 5 ! WITH chain(from) DO 1060 106 6 ! BEGIN 1070 107 7 ! ! fn := next; fp := prev; 1080 108 8 ! ! next := tn ; prev := into; 1090 109 9 ! END; 1100 110 10 ! chain(fp).next := fn ; 1110 111 11 ! chain(fn).prev := fp ; 1120 112 12 ! chain(tn).prev := from; 1130 113 13 END (* procedure move chain-element *) ; 1140 114 1150 115 1160 116 FUNCTION search_sem(VAR s: semaphore): integer; 1170 117 VAR stream, stop : byte; 1180 118 BEGIN 1190 119 1 ! WITH message^ DO 1200 120 2 ! BEGIN 1210 121 3 ! ! stop := u1; stream := u3; 1220 122 4 ! END; 1230 123 5 ! search_sem := 0; 1240 124 6 ! REPEAT 1250 125 7 ! ! signal(message, s); 1260 126 8 ! ! wait(message, s); 1270 127 9 ! ! WITH message^ DO 1280 128 10 ! ! IF u1 <> stop THEN 1290 129 11 ! ! IF u3 DIV stream_size <> master_block THEN 1300 130 12 ! ! IF u3 MOD stream_size = stream THEN search_sem := 1; 1310 131 13 ! UNTIL stop = message^.u1; 1320 132 14 END (* procedure to find a specific stream request on a semaphore *) ; 1330 133 1340 134 1350 135 FUNCTION search_chain(start, stream, func_code : integer; no_regret:boolean) : integer; 1360 136 VAR last, s, f : byte; 1370 137 BEGIN 1380 138 1 ! search_chain := 0; \f festrlst 81.05.13. 11.35. page 4 1390 139 2 ! last := start; 1400 140 3 ! start := chain(start).next; 1410 141 4 ! WHILE start <> last DO 1420 142 5 ! WITH chain(start) DO 1430 143 6 ! BEGIN 1440 144 7 ! ! IF nil(ref) THEN 1450 145 8 ! ! BEGIN 1460 146 9 ! ! ! s := c_stream; f := c_func; 1470 147 10 ! ! ! IF no_regret THEN f := sense_com; 1480 148 11 ! ! END ELSE 1490 149 12 ! ! WITH ref^ DO 1500 150 13 ! ! BEGIN 1510 151 14 ! ! ! s := u3; f := u1; 1520 152 15 ! ! END; 1530 153 16 ! ! IF (s = stream) AND (f = func_code) THEN 1540 154 17 ! ! BEGIN 1550 155 18 ! ! ! search_chain := start; 1560 156 19 ! ! ! start := last ; 1570 157 20 ! ! END ELSE 1580 158 21 ! ! BEGIN 1590 159 22 ! ! ! start := next ; 1600 160 23 ! ! END; 1610 161 24 ! END; 1620 162 25 END (* procedure search chain for stream-number *) ; 1630 163 1640 164 1650 165 PROCEDURE decode_message(VAR operation, result : integer); 1660 166 VAR user_result, block_no : integer; 1670 167 LABEL comp_result; 1680 168 BEGIN 1690 169 1 ! pop(header, message); 1700 170 2 ! WITH header^ DO 1710 171 3 ! BEGIN 1720 172 4 ! ! result := u2 MOD 8; 1730 173 5 ! ! result_modif := u2 - result; 1740 174 6 ! ! IF u1 = write_read_data THEN 1750 175 7 ! ! BEGIN 1760 176 8 ! ! ! user_result := ok_result; 1770 177 9 ! ! ! operation := u4 MOD master_size + input; 1780 178 10 ! ! ! comp_result: 1790 179 11 ! ! ! CASE result OF 1800 180 12 ! ! ! ! ok_result, soft_error: 1810 181 13 ! ! ! ! BEGIN 1820 182 14 ! ! ! ! ! block_no := u3 DIV stream_size; 1830 183 15 ! ! ! ! ! IF block_no = master_block THEN 1840 184 16 ! ! ! ! ! BEGIN \f festrlst 81.05.13. 11.35. page 5 1850 185 17 ! ! ! ! ! ! result := master; 1860 186 18 ! ! ! ! ! END ELSE 1870 187 19 ! ! ! ! ! IF block_no <> u4 DIV stream_size THEN 1880 188 20 ! ! ! ! ! BEGIN 1890 189 21 ! ! ! ! ! ! result := master; 1900 190 22 ! ! ! ! ! END; 1910 191 23 ! ! ! ! END; 1920 192 24 ! ! ! ! hard_error: ; 1930 193 25 ! ! ! ! rejected : ; 1940 194 26 ! ! ! ! OTHERWISE BEGIN 1950 195 27 ! ! ! ! ! user_result := un_intelligible; 1960 196 28 ! ! ! ! ! result := result - un_intelligible; 1970 197 29 ! ! ! ! ! GOTO comp_result; 1980 198 30 ! ! ! ! END; 1990 199 31 ! ! ! END; 2000 200 32 ! ! END ELSE 2010 201 33 ! ! BEGIN 2020 202 34 ! ! ! operation := u1; 2030 203 35 ! ! ! user_result:= u2; 2040 204 36 ! ! ! push(header, message); 2050 205 37 ! ! END; 2060 206 38 ! END; 2070 207 39 ! IF NOT nil(message) THEN 2080 208 40 ! BEGIN 2090 209 41 ! ! message^.u2 := user_result; 2100 210 42 ! END; 2110 211 43 END (* decode the received message *) ; 2120 212 2130 213 2140 214 PROCEDURE next_notice(VAR stream : integer); 2150 215 VAR r : reference; 2160 216 ptr : integer; 2170 217 BEGIN 2180 218 1 ! WITH chain(restart_notices) DO 2190 219 2 ! IF prev <> restart_notices THEN 2200 220 3 ! BEGIN 2210 221 4 ! ! stream := chain(next).ref^.u3; 2220 222 5 ! ! move_element(next, chain(noticed_output).prev); 2230 223 6 ! END ELSE 2240 224 7 ! WITH chain(free_out) DO 2250 225 8 ! IF prev = free_out THEN 2260 226 9 ! BEGIN 2270 227 10 ! ! stream := no_stream; 2280 228 11 ! END ELSE 2290 229 12 ! BEGIN 2300 230 13 ! ! sensesem(r, waiting_output); \f festrlst 81.05.13. 11.35. page 6 2310 231 14 ! ! IF nil(r) THEN 2320 232 15 ! ! BEGIN 2330 233 16 ! ! ! stream := no_stream; 2340 234 17 ! ! END ELSE 2350 235 18 ! ! BEGIN 2360 236 19 ! ! ! stream := r^.u3; 2370 237 20 ! ! ! ptr := search_chain(noticed_output, stream, write_stream, false); 2380 238 21 ! ! ! IF ptr = 0 THEN ptr := next ELSE 2390 239 22 ! ! ! IF NOT nil(chain(ptr).ref) THEN ptr := next; 2400 240 23 ! ! ! chain(ptr).ref :=: r; 2410 241 24 ! ! ! IF ptr = next THEN 2420 242 25 ! ! ! move_element(next, chain(noticed_output).prev) ELSE 2430 243 26 ! ! ! stream := no_stream; 2440 244 27 ! ! END; 2450 245 28 ! END; 2460 246 29 END (* procedure to find the next notice *) ; 2470 247 2480 248 2490 249 PROCEDURE return_output(result : integer); 2500 250 BEGIN 2510 251 1 ! IF NOT nil(message) THEN 2520 252 2 ! BEGIN 2530 253 3 ! ! WITH message^ DO u2 := u2 + result; 2540 254 4 ! ! return(message); 2550 255 5 ! END; 2560 256 6 END (* procedure to return output-data to the user *) ; 2570 257 2580 258 2590 259 PROCEDURE xqt_request; 2600 260 VAR stream, ptr : integer; 2610 261 BEGIN 2620 262 1 ! stream := header^.u3 MOD stream_size; 2630 263 2 ! IF stream <> no_stream THEN 2640 264 3 ! BEGIN 2650 265 4 ! ! ptr := search_chain(noticed_output, stream, write_stream, false); 2660 266 5 ! ! message :=: chain(ptr).ref ; 2670 267 6 ! ! move_element(ptr, free_out); 2680 268 7 ! END; 2690 269 8 END (* procedure to find the requested data *) ; 2700 270 2710 271 2720 272 PROCEDURE xmit(operation, status : integer); 2730 273 VAR block_no, stream, buffers : integer; 2740 274 BEGIN 2750 275 1 ! IF operation = notice THEN 2760 276 2 ! BEGIN \f festrlst 81.05.13. 11.35. page 7 2770 277 3 ! ! block_no := output_block_no MOD 3; 2780 278 4 ! ! buffers := 0; 2790 279 5 ! ! next_notice(stream); 2800 280 6 ! END ELSE 2810 281 7 ! BEGIN 2820 282 8 ! ! stream := output_buffers*master_size + status; 2830 283 9 ! ! block_no:= master_block; 2840 284 10 ! ! buffers := output_buffers; 2850 285 11 ! ! alloc(sense_device, sense_pool, input_sem.s^); 2860 286 12 ! ! sense_device^.u1 := sense_com; 2870 287 13 ! ! signal(sense_device, xmitter.s^); 2880 288 14 ! END; 2890 289 15 ! desc_header^.u3 := block_no*stream_size + stream; 2900 290 16 ! WITH header^ DO 2910 291 17 ! BEGIN 2920 292 18 ! ! u1 := write_read_data; 2930 293 19 ! ! u3 := desc_header^.u3; 2940 294 20 ! ! u4 := block_no*stream_size + buffers*master_size + 1; 2950 295 21 ! END; 2960 296 22 ! signal(desc_header, out_desc_sem); 2970 297 23 ! push(header, message); 2980 298 24 ! signal(message, xmitter.s^); 2990 299 25 ! IF output_block_no = max_integer THEN output_block_no := -1; 3000 300 26 ! output_block_no := output_block_no + 1; 3010 301 27 END (* procedure to send a new data-buffer to the transmitter *) ; 3020 302 3030 303 3040 304 PROCEDURE restart_xmitter(receiver_buffers : integer); 3050 305 VAR ptr : integer; 3060 306 BEGIN 3070 307 1 ! ptr := restart_notices; 3080 308 2 ! WITH chain(noticed_output) DO 3090 309 3 ! WHILE noticed_output <> prev DO 3100 310 4 ! BEGIN 3110 311 5 ! ! move_element(next, ptr); 3120 312 6 ! ! ptr := chain(ptr).next ; 3130 313 7 ! END; 3140 314 8 ! output_stopped := false; 3150 315 9 ! output_block_no := 0; 3160 316 10 ! FOR ptr := 1 TO output_buffers DO 3170 317 11 ! BEGIN 3180 318 12 ! ! alloc(desc_header, xmit_pool, out_desc_sem); 3190 319 13 ! ! alloc(header, xmit_pool , input_sem.s^); 3200 320 14 ! ! xmit(notice, 0); 3210 321 15 ! END; 3220 322 16 END (* restart of the transmitter *) ; \f festrlst 81.05.13. 11.35. page 8 3230 323 3240 324 3250 325 FUNCTION master_match(VAR received, xmitted : integer): boolean; 3260 326 BEGIN 3270 327 1 ! master_match := false; 3280 328 2 ! WITH desc_header^ DO 3290 329 3 ! IF u3 DIV stream_size = master_block THEN 3300 330 4 ! BEGIN 3310 331 5 ! ! master_match := true; 3320 332 6 ! ! xmitted := u3 MOD master_size; 3330 333 7 ! ! IF received = master THEN 3340 334 8 ! ! received := header^.u3 MOD master_size ELSE 3350 335 9 ! ! received := -1; 3360 336 10 ! END; 3370 337 11 END (* procedure to test if a master-out is answered with master-in *) ; 3380 338 3390 339 3400 340 PROCEDURE return_input(result : integer); 3410 341 BEGIN 3420 342 1 ! IF NOT nil(message) THEN 3430 343 2 ! BEGIN 3440 344 3 ! ! LOCK message AS d:data_buffer DO WITH d DO 3450 345 4 ! ! IF next - first <= 1 THEN 3460 346 5 ! ! BEGIN 3470 347 6 ! ! ! next := first; 3480 348 7 ! ! ! IF result = ok_result THEN result := rejected; 3490 349 8 ! ! END; 3500 350 9 ! ! WITH message^ DO u2 := u2 + result; 3510 351 10 ! ! return(message); 3520 352 11 ! END; 3530 353 12 END (* procedure to return input buffers to the user *) ; 3540 354 3550 355 3560 356 PROCEDURE xqt_notice; 3570 357 VAR stream, ptr, notice_no : integer; 3580 358 BEGIN 3590 359 1 ! stream := header^.u3 MOD stream_size; 3600 360 2 ! IF stream <> no_stream THEN 3610 361 3 ! BEGIN 3620 362 4 ! ! notice_no := notices_received(stream); 3630 363 5 ! ! IF notice_no = 0 THEN 3640 364 6 ! ! BEGIN 3650 365 7 ! ! ! ptr := search_chain(received_input, stream, read_stream, false); 3660 366 8 ! ! ! IF ptr = 0 THEN 3670 367 9 ! ! ! BEGIN 3680 368 10 ! ! ! ! notice_no := 1; \f festrlst 81.05.13. 11.35. page 9 3690 369 11 ! ! ! ! ptr := search_chain(received_input, stream, tell_next_notice, false); 3700 370 12 ! ! ! ! IF ptr <> 0 THEN 3710 371 13 ! ! ! ! BEGIN 3720 372 14 ! ! ! ! ! message :=: chain(ptr).ref; 3730 373 15 ! ! ! ! ! message^.u2 := ok_result; 3740 374 16 ! ! ! ! ! return(message); 3750 375 17 ! ! ! ! ! move_element(ptr, free_in); 3760 376 18 ! ! ! ! END; 3770 377 19 ! ! ! END ELSE 3780 378 20 ! ! ! BEGIN 3790 379 21 ! ! ! ! move_element(ptr, chain(ready_request).prev); 3800 380 22 ! ! ! END; 3810 381 23 ! ! END ELSE 3820 382 24 ! ! BEGIN 3830 383 25 ! ! ! notice_no := notice_no + 1; 3840 384 26 ! ! END; 3850 385 27 ! ! notices_received(stream) := notice_no; 3860 386 28 ! END; 3870 387 29 END (* procedure to execute a notice *) ; 3880 388 3890 389 3900 390 PROCEDURE place_input(el:integer; VAR in_ref: reference); 3910 391 VAR stream, n : integer; 3920 392 BEGIN 3930 393 1 ! stream := in_ref^.u3; 3940 394 2 ! n := notices_received(stream); 3950 395 3 ! IF n > 0 THEN 3960 396 4 ! BEGIN 3970 397 5 ! ! IF in_ref^.u1 = tell_next_notice THEN 3980 398 6 ! ! BEGIN 3990 399 7 ! ! ! n := 0; 4000 400 8 ! ! END ELSE 4010 401 9 ! ! BEGIN 4020 402 10 ! ! ! notices_received(stream) := n -1; 4030 403 11 ! ! ! n := ready_request; 4040 404 12 ! ! END; 4050 405 13 ! END ELSE 4060 406 14 ! BEGIN 4070 407 15 ! ! n := received_input; 4080 408 16 ! END; 4090 409 17 ! IF n > 0 THEN 4100 410 18 ! BEGIN 4110 411 19 ! ! chain(el).ref :=: in_ref; 4120 412 20 ! ! move_element(el, chain(n).prev); 4130 413 21 ! END ELSE 4140 414 22 ! BEGIN \f festrlst 81.05.13. 11.35. page 10 4150 415 23 ! ! in_ref^.u2 := ok_result; 4160 416 24 ! ! return(in_ref); 4170 417 25 ! END; 4180 418 26 END (* procedure to place incoming input-request *) ; 4190 419 4200 420 4210 421 PROCEDURE next_request(VAR stream : integer); 4220 422 BEGIN 4230 423 1 ! WITH chain(ready_request) DO 4240 424 2 ! IF prev = ready_request THEN 4250 425 3 ! BEGIN 4260 426 4 ! ! stream := no_stream; 4270 427 5 ! END ELSE 4280 428 6 ! BEGIN 4290 429 7 ! ! message :=: chain(next).ref; 4300 430 8 ! ! stream := message^.u3; 4310 431 9 ! ! move_element(next, free_in); 4320 432 10 ! END; 4330 433 11 END (* procedure to find the next request *) ; 4340 434 4350 435 4360 436 PROCEDURE send_input; 4370 437 BEGIN 4380 438 1 ! wait(message, pending_input); 4390 439 2 ! pop(desc_header, message); 4400 440 3 ! signal(desc_header, in_desc_sem); 4410 441 4 ! LOCK header AS buf:own_data DO 4420 442 5 ! WITH buf DO 4430 443 6 ! BEGIN 4440 444 7 ! ! first := 6; 4450 445 8 ! ! IF nil(message) THEN last := own_data_size ELSE last := 0; 4460 446 9 ! ! last := first + last - 1; 4470 447 10 ! ! next := first; 4480 448 11 ! END; 4490 449 12 ! push(header, message); 4500 450 13 ! signal(message, receiver.s^); 4510 451 14 ! input_block_no := (input_block_no + 1) MOD 3; 4520 452 15 END (* procedure to send the next input message *) ; 4530 453 4540 454 4550 455 PROCEDURE receive(operation, status : integer); 4560 456 VAR block_no, stream, buffers, expected_block : integer; 4570 457 BEGIN 4580 458 1 ! IF operation = request THEN 4590 459 2 ! BEGIN 4600 460 3 ! ! buffers := 0; \f festrlst 81.05.13. 11.35. page 11 4610 461 4 ! ! block_no := input_block_no; 4620 462 5 ! ! expected_block := (block_no+1)MOD 3; 4630 463 6 ! ! next_request(stream); 4640 464 7 ! END ELSE 4650 465 8 ! BEGIN 4660 466 9 ! ! alloc(sense_device, sense_pool, input_sem.s^); 4670 467 10 ! ! sense_device^.u1 := sense_com; 4680 468 11 ! ! signal(sense_device, receiver.s^); 4690 469 12 ! ! buffers := input_buffers; 4700 470 13 ! ! stream := input_buffers*master_size + status; 4710 471 14 ! ! block_no:= master_block; 4720 472 15 ! ! expected_block := master_block; 4730 473 16 ! END; 4740 474 17 ! desc_header^.u3 := block_no*stream_size + stream; 4750 475 18 ! WITH header^ DO 4760 476 19 ! BEGIN 4770 477 20 ! ! u1 := write_read_data; 4780 478 21 ! ! u3 := desc_header^.u3; 4790 479 22 ! ! u4 := expected_block*stream_size + buffers*master_size; 4800 480 23 ! END; 4810 481 24 ! push(desc_header, message); 4820 482 25 ! signal(message, pending_input); 4830 483 26 ! send_input; 4840 484 27 END (* procedure to send the next receive-operation *) ; 4850 485 4860 486 4870 487 4880 488 PROCEDURE restart_receiver(buffering : integer); 4890 489 VAR ptr : integer; 4900 490 BEGIN 4910 491 1 ! ptr := received_input; 4920 492 2 ! WITH chain(ready_request) DO 4930 493 3 ! WHILE ready_request <> prev DO 4940 494 4 ! BEGIN 4950 495 5 ! ! move_element(next, ptr); 4960 496 6 ! ! ptr := chain(ptr).next; 4970 497 7 ! END; 4980 498 8 ! FOR ptr := 0 TO max_stream DO 4990 499 9 ! notices_received(ptr) := 0; 5000 500 10 ! 5010 501 11 ! FOR ptr := 1 TO buffering-1 DO 5020 502 12 ! BEGIN 5030 503 13 ! ! alloc(message, receive_pool, pending_input); 5040 504 14 ! ! WITH message^ DO 5050 505 15 ! ! BEGIN 5060 506 16 ! ! ! u1 := 0; u2 := 0; \f festrlst 81.05.13. 11.35. page 12 5070 507 17 ! ! ! u3 := no_stream ; 5080 508 18 ! ! END; 5090 509 19 ! ! return(message); 5100 510 20 ! END; 5110 511 21 ! ptr := 1; 5120 512 22 ! IF NOT nil(desc_header) THEN 5130 513 23 ! BEGIN 5140 514 24 ! ! WITH desc_header^ DO 5150 515 25 ! ! BEGIN 5160 516 26 ! ! ! u1 := 0; u2 := 0; u3 := no_stream; 5170 517 27 ! ! END; 5180 518 28 ! ! signal(desc_header, pending_input); 5190 519 29 ! ! WITH header^ DO 5200 520 30 ! ! BEGIN 5210 521 31 ! ! ! u3 := (master_block*stream_size + input_buffers*master_size); 5220 522 32 ! ! ! u4 := 0; 5230 523 33 ! ! END; 5240 524 34 ! ! send_input; 5250 525 35 ! ! ptr := 2; 5260 526 36 ! END; 5270 527 37 ! 5280 528 38 ! input_block_no := 0; input_stopped := false; 5290 529 39 ! FOR ptr := ptr TO input_buffers DO 5300 530 40 ! BEGIN 5310 531 41 ! ! alloc(desc_header, receive_pool, in_desc_sem); 5320 532 42 ! ! alloc(header, message_pool, input_sem.s^); 5330 533 43 ! ! receive(request, 0); 5340 534 44 ! END; 5350 535 45 END (* procedure to restart the receiver *) ; 5360 536 5370 537 5380 538 PROCEDURE test_master(trans_mitter : boolean; answer : integer); 5390 539 VAR sent, count : integer; 5400 540 BEGIN 5410 541 1 ! IF master_match(answer, sent) THEN 5420 542 2 ! BEGIN 5430 543 3 ! ! IF answer = 0 THEN 5440 544 4 ! ! BEGIN 5450 545 5 ! ! ! sent := (header^.u3 MOD stream_size) DIV master_size; 5460 546 6 ! ! ! IF trans_mitter THEN 5470 547 7 ! ! ! BEGIN 5480 548 8 ! ! ! ! release(header); release(desc_header); 5490 549 9 ! ! ! ! restart_xmitter(sent); 5500 550 10 ! ! ! END ELSE 5510 551 11 ! ! ! BEGIN 5520 552 12 ! ! ! ! restart_receiver(sent); \f festrlst 81.05.13. 11.35. page 13 5530 553 13 ! ! ! END; 5540 554 14 ! ! END ELSE 5550 555 15 ! ! BEGIN 5560 556 16 ! ! ! IF trans_mitter THEN count := -1 ELSE count := 0; 5570 557 17 ! ! ! IF answer <> sent THEN 5580 558 18 ! ! ! BEGIN 5590 559 19 ! ! ! ! sent := master_size; 5600 560 20 ! ! ! ! count:= -1; 5610 561 21 ! ! ! END; 5620 562 22 ! ! ! sent := sent + count; 5630 563 23 ! ! ! IF trans_mitter THEN xmit(master_out, sent) ELSE receive(master_out, sent); 5640 564 24 ! ! END; 5650 565 25 ! END ELSE 5660 566 26 ! BEGIN 5670 567 27 ! ! release(desc_header); 5680 568 28 ! ! sent := (header^.u4 MOD stream_size) DIV master_size; 5690 569 29 ! ! IF sent = 0 THEN 5700 570 30 ! ! BEGIN 5710 571 31 ! ! ! release(header); 5720 572 32 ! ! END ELSE 5730 573 33 ! ! BEGIN 5740 574 34 ! ! ! sent := sent*master_size + master_size - 1; 5750 575 35 ! ! ! header^.u3 := master_block*stream_size + sent; 5760 576 36 ! ! ! IF trans_mitter THEN signal(header, xmitter.s^) ELSE 5770 577 37 ! ! ! IF open(pending_input) THEN send_input ELSE 5780 578 38 ! ! ! signal(header, receiver.s^); 5790 579 39 ! ! END; 5800 580 40 ! END; 5810 581 41 END (* procedure to master-clear the transmitter *) ; 5820 582 5830 583 5840 584 PROCEDURE link_chain(head, start, stop : integer); 5850 585 VAR i : integer; 5860 586 BEGIN 5870 587 1 ! WITH chain(head) DO 5880 588 2 ! BEGIN 5890 589 3 ! ! next := start; prev := stop; 5900 590 4 ! END; 5910 591 5 ! FOR i := start TO stop DO 5920 592 6 ! WITH chain(i) DO 5930 593 7 ! BEGIN 5940 594 8 ! ! next := i + 1; 5950 595 9 ! ! prev := i - 1; 5960 596 10 ! ! IF i = start THEN prev := head; 5970 597 11 ! ! IF i = stop THEN next := head; 5980 598 12 ! END; \f festrlst 81.05.13. 11.35. page 14 5990 599 13 END (* procedure to initialize a chain *); 6000 600 6010 601 6020 602 BEGIN 6030 603 1 ! 6040 604 2 ! FOR input_block_no := 1 TO chain_max DO 6050 605 3 ! WITH chain(input_block_no) DO 6060 606 4 ! BEGIN 6070 607 5 ! ! next := input_block_no; prev := next; 6080 608 6 ! END; 6090 609 7 ! link_chain(free_in, 7, 6 + chain_in); 6100 610 8 ! link_chain(free_out, 7 + chain_in, chain_max); 6110 611 9 ! 6120 612 10 ! testopen( z, own.incname, op); 6130 613 11 ! testout( z, version, fe_env_version); 6140 614 12 ! 6150 615 13 ! restart_xmitter(1); 6160 616 14 ! restart_receiver(1); 6170 617 15 ! 6180 618 16 ! WHILE true DO 6190 619 17 ! BEGIN 6200 620 18 ! ! wait(message, input_sem.w^); 6210 621 19 ! ! decode_message(operation, result); 6220 622 20 ! ! CASE operation OF 6230 623 21 ! ! ! sense_com, 6240 624 22 ! ! ! write_data: 6250 625 23 ! ! ! release(message); 6260 626 24 ! ! ! regret_output: 6270 627 25 ! ! ! BEGIN 6280 628 26 ! ! ! ! status := search_sem(out_desc_sem); 6290 629 27 ! ! ! ! IF status = 0 THEN 6300 630 28 ! ! ! ! BEGIN 6310 631 29 ! ! ! ! ! status := search_chain(restart_notices, message^.u3, write_stream, true); 6320 632 30 ! ! ! ! ! IF status <> 0 THEN move_element(status, free_in) ELSE 6330 633 31 ! ! ! ! ! BEGIN 6340 634 32 ! ! ! ! ! ! status := search_chain(noticed_output, message^.u3, write_stream, true); 6350 635 33 ! ! ! ! ! ! IF status <> 0 THEN 6360 636 34 ! ! ! ! ! ! WITH chain(status), ref^ DO 6370 637 35 ! ! ! ! ! ! BEGIN 6380 638 36 ! ! ! ! ! ! ! c_func := u1; c_stream := u3; 6390 639 37 ! ! ! ! ! ! END; 6400 640 38 ! ! ! ! ! END; 6410 641 39 ! ! ! ! ! IF status <> 0 THEN sense_device :=: chain(status).ref ELSE 6420 642 40 ! ! ! ! ! BEGIN 6430 643 41 ! ! ! ! ! ! status := search_sem(waiting_output); 6440 644 42 ! ! ! ! ! ! IF status <> 0 THEN \f festrlst 81.05.13. 11.35. page 15 6450 645 43 ! ! ! ! ! ! BEGIN 6460 646 44 ! ! ! ! ! ! ! stream := message^.u3; 6470 647 45 ! ! ! ! ! ! ! REPEAT 6480 648 46 ! ! ! ! ! ! ! ! IF NOT nil(message) THEN signal(message, waiting_output); 6490 649 47 ! ! ! ! ! ! ! ! wait(message, waiting_output); 6500 650 48 ! ! ! ! ! ! ! ! operation := message^.u1; 6510 651 49 ! ! ! ! ! ! ! ! IF (message^.u3=stream) AND (nil(sense_device)) THEN 6520 652 50 ! ! ! ! ! ! ! ! sense_device :=: message; 6530 653 51 ! ! ! ! ! ! ! UNTIL operation = regret_output; 6540 654 52 ! ! ! ! ! ! END; 6550 655 53 ! ! ! ! ! END; 6560 656 54 ! ! ! ! ! IF status <> 0 THEN status := ok_result ELSE status := un_intelligible; 6570 657 55 ! ! ! ! END ELSE status := rejected; 6580 658 56 ! ! ! ! message^.u2 := status; 6590 659 57 ! ! ! ! push(message, sense_device); 6600 660 58 ! ! ! ! return(sense_device); 6610 661 59 ! ! ! END; 6620 662 60 ! ! ! regret_input: 6630 663 61 ! ! ! BEGIN 6640 664 62 ! ! ! ! status := search_sem(in_desc_sem); 6650 665 63 ! ! ! ! IF status = 0 THEN status := search_sem(pending_input); 6660 666 64 ! ! ! ! IF status = 0 THEN 6670 667 65 ! ! ! ! BEGIN 6680 668 66 ! ! ! ! ! status := search_chain(ready_request, message^.u3, read_stream, false); 6690 669 67 ! ! ! ! ! IF status = 0 THEN 6700 670 68 ! ! ! ! ! status := search_chain(received_input, message^.u3, read_stream, false); 6710 671 69 ! ! ! ! ! IF status = 0 THEN 6720 672 70 ! ! ! ! ! BEGIN 6730 673 71 ! ! ! ! ! ! status := un_intelligible; 6740 674 72 ! ! ! ! ! END ELSE 6750 675 73 ! ! ! ! ! BEGIN 6760 676 74 ! ! ! ! ! ! sense_device :=: chain(status).ref; 6770 677 75 ! ! ! ! ! ! move_element(status, free_in); 6780 678 76 ! ! ! ! ! ! status := ok_result; 6790 679 77 ! ! ! ! ! END; 6800 680 78 ! ! ! ! END ELSE 6810 681 79 ! ! ! ! BEGIN 6820 682 80 ! ! ! ! ! status := rejected; 6830 683 81 ! ! ! ! END; 6840 684 82 ! ! ! ! message^.u2 := status; 6850 685 83 ! ! ! ! push(message, sense_device); 6860 686 84 ! ! ! ! return(sense_device); 6870 687 85 ! ! ! END; 6880 688 86 ! ! ! write_stream: 6890 689 87 ! ! ! signal(message, waiting_output); 6900 690 88 ! ! ! read_stream, tell_next_notice: \f festrlst 81.05.13. 11.35. page 16 6910 691 89 ! ! ! WITH chain(free_in) DO 6920 692 90 ! ! ! IF free_in = prev THEN 6930 693 91 ! ! ! BEGIN 6940 694 92 ! ! ! ! WITH chain(received_input) DO 6950 695 93 ! ! ! ! IF prev <> received_input THEN place_input(next, message); 6960 696 94 ! ! ! ! message^.u2 := ok_result; 6970 697 95 ! ! ! ! return_input(overload); 6980 698 96 ! ! ! END ELSE 6990 699 97 ! ! ! BEGIN 7000 700 98 ! ! ! ! place_input(next, message); 7010 701 99 ! ! ! END; 7020 702 100 ! ! ! output: 7030 703 101 ! ! ! BEGIN 7040 704 102 ! ! ! ! wait(desc_header, out_desc_sem); 7050 705 103 ! ! ! ! IF output_stopped THEN 7060 706 104 ! ! ! ! BEGIN 7070 707 105 ! ! ! ! ! return_output(master); 7080 708 106 ! ! ! ! ! test_master(true, result); 7090 709 107 ! ! ! ! END ELSE 7100 710 108 ! ! ! ! BEGIN 7110 711 109 ! ! ! ! ! return_output(result + result_modif); 7120 712 110 ! ! ! ! ! CASE result OF 7130 713 111 ! ! ! ! ! ! ok_result, soft_error: 7140 714 112 ! ! ! ! ! ! BEGIN 7150 715 113 ! ! ! ! ! ! ! xqt_request; 7160 716 114 ! ! ! ! ! ! ! operation := notice; 7170 717 115 ! ! ! ! ! ! END; 7180 718 116 ! ! ! ! ! ! OTHERWISE 7190 719 117 ! ! ! ! ! ! BEGIN 7200 720 118 ! ! ! ! ! ! ! output_stopped := true; 7210 721 119 ! ! ! ! ! ! ! operation := master_out; 7220 722 120 ! ! ! ! ! ! ! status := master_size - 1; 7230 723 121 ! ! ! ! ! ! END; 7240 724 122 ! ! ! ! ! END; 7250 725 123 ! ! ! ! ! xmit(operation, status); 7260 726 124 ! ! ! ! END; 7270 727 125 ! ! ! END; 7280 728 126 ! ! ! input: 7290 729 127 ! ! ! BEGIN 7300 730 128 ! ! ! ! wait(desc_header, in_desc_sem); 7310 731 129 ! ! ! ! IF input_stopped THEN 7320 732 130 ! ! ! ! BEGIN 7330 733 131 ! ! ! ! ! return_input(master); 7340 734 132 ! ! ! ! ! test_master(false, result); 7350 735 133 ! ! ! ! END ELSE 7360 736 134 ! ! ! ! BEGIN \f festrlst 81.05.13. 11.35. page 17 7370 737 135 ! ! ! ! ! return_input(result+result_modif); 7380 738 136 ! ! ! ! ! CASE result OF 7390 739 137 ! ! ! ! ! ! ok_result, soft_error: 7400 740 138 ! ! ! ! ! ! BEGIN 7410 741 139 ! ! ! ! ! ! ! xqt_notice; 7420 742 140 ! ! ! ! ! ! ! operation := request; 7430 743 141 ! ! ! ! ! ! END; 7440 744 142 ! ! ! ! ! ! OTHERWISE 7450 745 143 ! ! ! ! ! ! BEGIN 7460 746 144 ! ! ! ! ! ! ! input_stopped := true; 7470 747 145 ! ! ! ! ! ! ! operation := master_out; 7480 748 146 ! ! ! ! ! ! ! status := master_size - 1; 7490 749 147 ! ! ! ! ! ! END; 7500 750 148 ! ! ! ! ! END; 7510 751 149 ! ! ! ! ! receive(operation, status); 7520 752 150 ! ! ! ! END; 7530 753 151 ! ! ! END; 7540 754 152 ! ! ! OTHERWISE 7550 755 153 ! ! ! BEGIN 7560 756 154 ! ! ! ! message^.u2 := un_intelligible; 7570 757 155 ! ! ! ! return(message); 7580 758 156 ! ! ! END; 7590 759 157 ! ! END; 7600 760 158 ! END; 7610 761 159 END. 7620 762 \f festrlst 81.05.13. 11.35. page 18 0 13* 48* 49* 51* 59* 87* 123 138 238 278 315 320 363 366 370 395 399 409 445 460 498 499 506 506 516 516 522 528 533 543 556 569 629 632 635 641 644 656 665 666 669 671 1 9* 10* 27* 40* 50* 54* 55* 60* 76* 130 294 299 300 316 335 345 368 383 402 446 451 462 501 501 511 556 560 574 594 595 604 615 616 722 748 2 14* 28* 56* 61* 76* 525 3 15* 29* 63* 277 451 462 4 16* 30* 64* 5 17* 31* 65* 6 18* 32* 33* 66* 444 609 7 609 610 8 11* 19* 25* 26* 172 9 20* 10 21* 12 22* 63 52* 64 62* 256 55* 32767 68* alloc 285 318 319 466 503 531 532 answer 538* 541 543 557 as 344: 441: blocklength_error <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 62* block_no 166* 182= 183 187 273* 277= 283= 289 294 456* 461= 462 471= 474 boolean 86* 135* 325* 538* buf 441: 442 buffering 488* 501 buffers 273* 278= 284= 294 456* 460= 469= 479 buffer_size 57* 91* byte 37* 87* 117* 136* chain 43* 101 105 110 111 112 140 142 218 221 222 224 239 240 242 266 308 312 372 379 411 412 423 429 492 496 587 592 605 636 641 676 691 694 chain_in 25* 33* 609 610 chain_max 33* 40* 604 610 chain_mem 40* 43* chain_out 26* 33* chain_rec 36* 40* comp_result 167* 178: 197 count 539* 556= 556= 560= 562 c_func 37* 146 638= c_stream 37* 146 638= \f festrlst 81.05.13. 11.35. page 19 d 76* 344: 344 data_buffer 71* 344 decode_message <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 165* 621 desc_header 80* 289 293 296 318 328 439 440 474 478 481 512 514 518 531 548 567 704 730 el 390* 411 412 expected_block <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 456* 462= 472= 479 f 136* 146= 147= 151= 153 false 237 265 314 327 365 369 528 668 670 734 fe_env_version <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 613 first 72* 75* 345 347 444= 446 447 fn 99* 107= 110 111 fp 99* 107= 110 111 free_in 31* 375 431 609 632 677 691 692 free_out 32* 224 225 267 610 from 98* 103 105 112 func_code 135* 153 hard_error 63* 192: head 584* 587 596 597 header 80* 169 170 204 262 290 297 319 334 359 441: 449 475 519 532 545 548 568 571 575 576 578 i 585* 591= 592 594 595 596 597 incname 612 input 17* 177 728: input_block_no <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 95* 451= 451 461 528= 604= 605 607 input_buffers <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 10* 90* 91* 92* 469 470 521 529 input_sem 2* 285 319 466 532 620 input_stopped <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 86* 528= 731 746= integer 3* 72* 75* 76* 95* 98* 99* 116* 135* 135* 165* 166* 214* 216* 249* 260* 272* 273* 304* 305* 325* 340* 357* 390* 391* 421* 455* 456* 488* 489* 538* 539* 584* 585* into 98* 101 108 in_desc_sem 84* 440 531 664 730 in_ref 390* 393 397 411 415 416 last 72* 75* 136* 139= 141 156 445= 445= 446= 446 link_chain 584* 609 610 lock 344: 441: master 65* 185 189 333 707 733 \f festrlst 81.05.13. 11.35. page 20 master_block 55* 129 183 283 329 471 472 521 575 master_match 325* 327= 331= 541 master_out 50* 563 563 721 747 master_size 56* 57* 177 282 294 332 334 470 479 521 545 559 568 574 574 722 748 max_integer 68* 299 max_stream 52* 54* 87* 498 message 80* 119 125 126 127 131 169 204 207 209 251 253 254 266= 297 298 342 344: 350 351 372= 373 374 429= 430 438 439 445 449 450 481 482 503 504 509 620 625 631 634 646 648 648 649 650 651 652 658 659 668 670 684 685 689 695 696 700 756 757 message_pool 92* 532 move_element 98* 222 242 267 311 375 379 412 431 495 632 677 n 391* 394= 395 399= 402 403= 407= 409 412 next 37* 72* 75* 103 103= 107 108= 110= 140 159 221 222 238 239 241 242 311 312 345 347= 429 431 447= 495 496 589= 594= 597= 607= 607 695 700 next_notice 214* 279 next_request 421* 463 notice 49* 275 320 716 noticed_output <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 28* 222 237 242 265 308 309 634 notices_received <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 87* 362 385= 394 402= 499= notice_no 357* 362= 363 368= 383= 383 385 no_regret 135* 147 no_stream 51* 227 233 243 263 360 426 507 516 ok_result 59* 176 180: 348 373 415 656 678 696 713: 739: op 4* 612 open 577 operation 94* 165* 177= 202= 272* 275 455* 458 621 622 650= 653 716= 721= 725 742= 747= 751 output 18* 702: output_block_no <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 95* 277 299 299= 300= 300 315= output_buffers <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 9* 89* 89* 90* 282 284 316 output_stopped <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 86* 314= 705 720= out_desc_sem 83* 296 318 628 704 overload 66* 697 own 612 own_data 74* 92* 441 own_data_size <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 11* 76* 445 \f festrlst 81.05.13. 11.35. page 21 pending_input <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 84* 438 482 503 518 577 665 place_input 390* 695 700 pool 89* 90* 91* 92* pop 169 439 prev 37* 107 108= 111= 112= 219 222 225 242 309 379 412 424 493 589= 595= 596= 607= 692 695 process 1* ptr 216* 237= 238 238= 239 239= 240 241 260* 265= 266 267 305* 307= 311 312= 312 316= 357* 365= 366 369= 370 372 375 379 489* 491= 495 496= 496 498= 499 501= 511= 525= 529= 529 push 204 297 449 481 659 685 r 215* 230 231 236 240 ready_request <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30* 379 403 423 424 492 493 668 read_stream 20* 365 668 670 690: receive 455* 533 563 751 received 325* 333 334= 335= received_input <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 29* 365 369 407 491 670 694 695 receiver 2* 450 468 578 receiver_buffers <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 304* receive_pool 91* 503 531 ref 38* 144 149 221 239 240= 266 372 411= 429 636 641 676 reference 38* 80* 215* 390* regret_input 16* 662: regret_output <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 22* 626: 653 rejected 60* 193: 348 657 682 release 548 548 567 571 625 request 48* 458 533 742 restart_notices <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 27* 218 219 307 631 restart_receiver <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 488* 552 616 restart_xmitter <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 304* 549 615 result 94* 165* 172= 173 179 185= 189= 196= 196 249* 253 340* 348 348= 350 621 708 711 712 734 737 738 result_modif 94* 173= 711 737 retrans_max 3* return 254 351 374 416 509 660 686 757 return_input 340* 697 733 737 \f festrlst 81.05.13. 11.35. page 22 return_output <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 249* 707 711 s 116* 125 126 136* 146= 151= 153 285 287 298 319 450 466 468 532 576 578 search_chain 135* 138= 155= 237 265 365 369 631 634 668 670 search_sem 116* 123= 130= 628 643 664 665 semaphore 84* 116* sempointer 4* send_input 436* 483 524 577 sensesem 230 sense_com 13* 147 286 467 623: sense_device 80* 285 286 287 466 467 468 641= 651 652= 659 660 676= 685 686 sense_pool 90* 285 466 sent 539* 541 545= 549 552 557 559= 562= 562 563 563 568= 569 574= 574 575 signal 125 287 296 298 440 450 468 482 518 576 578 648 689 soft_error 61* 180: 713: 739: start 135* 139 140= 140 141 142 155 156= 159= 584* 589 591 596 status 94* 272* 282 455* 470 628= 629 631= 632 632 634= 635 636 641 641 643= 644 656 656= 656= 657= 658 664= 665 665= 666 668= 669 670= 671 673= 676 677 678= 682= 684 722= 725 748= 751 stop 117* 121= 128 131 584* 589 591 597 stream 94* 117* 121= 130 135* 153 214* 221= 227= 233= 236= 237 243= 260* 262= 263 265 273* 279 282= 289 357* 359= 360 362 365 369 385 391* 393= 394 402 421* 426= 430= 456* 463 470= 474 646= 651 streamer 1* stream_size 54* 55* 57* 129 130 182 187 262 289 294 329 359 474 479 521 545 568 575 tell_next_notice <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 19* 369 397 690: testopen 612 testout 613 test_master 538* 708 734 tn 99* 103= 108 112 trans_mitter 538* 546 556 563 576 true 331 618 631 634 708 720 746 ts_pointer 2* u1 121 128 131 151 174 202 286= 292= 397 467= 477= 506= 516= 638 650 u2 172 173 203 209= 253= 253 350= 350 373= 415= 506= 516= 658= 684= 696= 756= u3 121 129 130 151 182 221 236 262 289= 293= 293 329 332 334 359 393 430 474= 478= 478 507= 516= 521= 545 575= 631 634 638 646 651 668 670 u4 177 187 294= 479= 522= 568 \f festrlst 81.05.13. 11.35. page 23 un_intelligible <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 64* 195 196 656 673 756 user_result 166* 176= 195= 203= 209 version 8* 613 w 620 wait 126 438 620 649 704 730 waiting_output <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 82* 230 643 648 649 689 write_data 14* 624: write_read_data <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 15* 174 292 477 write_stream 21* 237 265 631 634 688: xmit 272* 320 563 725 xmitted 325* 332= xmitter 2* 287 298 576 xmit_pool 89* 318 319 xqt_notice 356* 741 xqt_request 259* 715 z 45* 612 613 zone 45* \f festrlst 81.05.13. 11.35. page 24 AND 2 ARRAY 3 BEGIN 113 CASE 4 CONST 3 DIV 9 DO 40 ELSE 36 END 120 FOR 6 FUNCTION 3 GOTO 1 IF 63 LABEL 1 MOD 12 NIL 10 NOT 6 OF 8 OTHERWISE 4 PACKED 1 PROCEDURE 16 RECORD 3 REPEAT 2 THEN 63 TO 6 TYPE 2 UNTIL 2 VAR 23 WHILE 4 WITH 28 \f jg8 1981.05.13 11.37 festr program 81.05.13. 11.36. pascal80 version 1981.04.01 name headline beginline endline appetite(words) move_element 99 101 113 : 10 search_sem 117 119 132 : 7 search_chain 136 138 162 : 11 decode_messa 166 169 211 : 9 next_notice 215 218 246 : 24 return_outpu 250 252 256 : 7 xqt_request 260 262 269 : 17 xmit 273 276 301 : 19 restart_xmit 305 307 322 : 18 master_match 326 327 337 : 6 return_input 341 343 353 : 8 xqt_notice 357 359 387 : 18 place_input 391 393 418 : 16 next_request 422 423 433 : 12 send_input 437 438 452 : 10 receive 456 459 484 : 20 restart_rece 489 491 535 : 20 test_master 539 542 581 : 17 link_chain 585 587 599 : 11 streamer 8 604 761 : 315 code: 2 . 624 = 6624 bytes end of PASCAL80 compilation end blocksread = 53 ▶EOF◀