|
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: 102912 (0x19200) Types: TextFile Names: »hjlaplst«
└─⟦a41ae585a⟧ Bits:30001842 SW-save af projekt 1000, Alarm-system └─⟦72244f0ef⟧ └─⟦this⟧ »hjlaplst«
\f hjlaplst 81.05.04. 08.25. page 1 10 1 \f hjlaplst 81.05.04. 08.25. page 2 1010 2 PROCESS lam( 1020 3 opsem: sempointer; 1030 4 pu: integer; 1040 5 level:integer; 1050 6 VAR mainsem: !ts_pointer 1060 7 ); 1070 8 1080 9 (********************************************************* 1090 10 * * 1100 11 * lam-driver * 1110 12 * programmed by oer * 1120 13 **********************************************************) 1130 14 1140 15 (*------------------------------------------------------- 1150 16 . terms 1160 17 . 1170 18 . port refers to a port on the physical lam 1180 19 . channel refers to a channel in the lamdriver 1190 20 . where there are two channels for each port 1200 21 . i e one for output and one for input 1210 22 . 1220 23 .--------------------------------------------------------*) 1230 24 1240 25 CONST 1250 26 1260 27 version = "vers 4.00 /"; 1270 28 1280 29 max_port_no=15; 1290 30 max_channel_no= 2*max_port_no+1; 1300 31 1310 32 (*--- values used when creating high level lam-driver ---*) 1320 33 mask = 0; 1330 34 prio = 2; 1340 35 store = 200; 1350 36 (*--- number of lambuffers, one is used as channelmessage ---*) 1360 37 no_of_lambufs = 32; 1370 38 1380 39 1390 40 long_time = 10; 1400 41 normal_time = 7; 1410 42 short_time = 4; 1420 43 no_time = 1; 1430 44 1440 45 forever = false; 1450 46 1460 47 \f hjlaplst 81.05.04. 08.25. page 3 1470 48 (* controlebits to lam *) 1480 49 requesttosend = 7*32; 1490 50 readytoread = 5*32; 1500 51 1510 52 (* statuswords from lam *) 1520 53 write_read_ok = 40; 1530 54 overrun=41; 1540 55 parity=44; 1550 56 overrun_and_parity=45; 1560 57 readytosend = 24; 1570 58 1580 59 (* alc-functions *) 1590 60 1600 61 alc_write = write_it; 1610 62 alc_read = read_it; 1620 63 write_alc_read = write_read_it; 1630 64 create_alc_ch = create_it_ch; 1640 65 op_codes = (. 5, 19, 20, 21, 28, 29 .); 1650 66 \f hjlaplst 81.05.04. 08.25. page 4 2010 67 (*--- channelkinds ---*) 2020 68 2030 69 not_created = 0; 2040 70 at_write_channel = 1; 2050 71 at_write_wait = 2; 2060 72 at_read_channel = 3; 2070 73 at_read_wait = 4; 2080 74 alc_write_channel = 5; 2090 75 alc_read_channel = 6; 2100 76 tty_write_channel = 7; 2110 77 tty_read_channel = 8; 2120 78 echo_nl_on_channel = 9; 2130 79 tty_wait_cr = 10; 2140 80 tty_wait_nl = 11; 2150 81 tty_wait_input = 12; 2160 82 2170 83 2180 84 (*--- delays used on at-channels ---*) 2190 85 2200 86 rts_delay_u3 = 10; 2210 87 rts_delay_u4 = 5; 2220 88 2230 89 rtr_delay_u3 = 13; 2240 90 rtr_delay_u4 = 5; 2250 91 2260 92 2270 93 (*--- byte-compatible values for special characters ---*) 2280 94 2290 95 stx = 2; 2300 96 etx = 3; 2310 97 bs = 8; 2320 98 nl = 10; 2330 99 cr = 13; 2340 100 cs = 19; (* crtl + small s *) 2350 101 esc = 27; 2360 102 sp = 32; 2370 103 del = 127; 2380 104 2390 105 command = 28; 2400 106 \f hjlaplst 81.05.04. 08.25. page 5 3010 107 3020 108 (* result codes *) 3030 109 (* specified in u2 overwriting portno *) 3040 110 (* other resultcodes are given in alarmenv *) 3050 111 3060 112 transient_error = transi_err; 3070 113 persistent_error = persi_err; 3080 114 illegal_function = ill_func; 3090 115 write_error = 2*8 + transient_error; 3100 116 write_read_mixed = create_done; 3110 117 buffer_too_small = illegal_function; 3120 118 go_on_read = 6; 3130 119 (*------------------- 3140 120 results modified for 3150 121 transient errors 3160 122 3170 123 2*8 +2 = write-error 3180 124 3*8 +2 = parity or overrun 3190 125 4*8 +2 = checksum error 3200 126 5*8 +2 = read bbl too big 3210 127 6*8 +2 = etx missing 3220 128 3230 129 ---------------------*) 3240 130 3250 131 (**************************************** 3260 132 * 3270 133 * params that should be used in create channel 3280 134 * 3290 135 * +0 odd parity 3300 136 * 1 stop element 3310 137 * 5 databits/char 3320 138 * 110 bps 3330 139 * +1 no parity 3340 140 * +2 even parity 3350 141 * +3 no parity 3360 142 * +4 2 stop elements 3370 143 * +8 6 databits 3380 144 * +16 7 databits 3390 145 * +24 8 databits 3400 146 * +32 300 bps 3410 147 * +64 600 bps 3420 148 * +96 1200 bps 3430 149 * 3440 150 ****************************************) 3450 151 \f hjlaplst 81.05.04. 08.25. page 6 4010 152 TYPE 4020 153 (* no of input+output devices on one lam-driver *) 4030 154 channelset = 0..max_channel_no; 4040 155 4050 156 portset = 0..max_port_no; 4060 157 4070 158 (* format of a buffer send to/from a vcit *) 4080 159 drvbuffer 4090 160 = RECORD 4100 161 ! first, last, next : integer; 4110 162 END; 4120 163 4130 164 (* format of a buffer send to/from a vcat or at *) 4140 165 atbuffer 4150 166 = ARRAY(0..1) OF byte; 4160 167 4170 168 4180 169 (* one word to write in writeword *) 4190 170 4200 171 lamword 4210 172 = PACKED RECORD 4220 173 ! data : byte; 4230 174 ! std : 0..7; 4240 175 ! port_and_bit15 : channelset; 4250 176 END; 4260 177 4270 178 (* one description for each device *) 4280 179 4290 180 channelrecord 4300 181 = RECORD 4310 182 ! request:reference; (* current message *) 4320 183 ! channel_kind : 0..15; 4330 184 ! old_result : byte; 4340 185 ! interruptable : boolean; 4350 186 ! reading_tty : boolean; 4360 187 ! checksum: integer; 4370 188 ! timeout, 4380 189 ! next, 4390 190 ! top: integer; 4400 191 ! status : integer; 4410 192 END; 4420 193 \f hjlaplst 81.05.04. 08.25. page 7 5010 194 VAR 5020 195 (* ref for channelmsg *) 5030 196 channelmessage,ref: reference; 5040 197 (* shadow for lam at high level *) 5050 198 driver: shadow; 5060 199 5070 200 lamsem : semaphore; 5080 201 (*--- pools ---*) 5090 202 5100 203 delaypool : pool 16; 5110 204 timerpool: pool 1; 5120 205 (* buffers for handling interrupts *) 5130 206 lampool: pool no_of_lambufs; 5140 207 5150 208 (* devicenumber *) 5160 209 channel_no: integer; 5170 210 (* zone used by testopen and testout *) 5180 211 z: zone; 5190 212 (* all devicedescriptors in one array *) 5200 213 5210 214 channel_descriptor: ARRAY(channelset) OF channelrecord; 5220 215 5230 216 queue : ARRAY(channelset) OF semaphore; 5240 217 5250 218 (* timeoutperiode and controlword for each device *) 5260 219 time,controle_byte: ARRAY(portset)OF byte; 5270 220 5280 221 i,j,k : integer; 5290 222 test_b : boolean; 5300 223 tst : integer := 0; 5310 224 \f hjlaplst 81.05.04. 08.25. page 8 6010 225 (*************** externals ***********************************) 6020 226 6030 227 FUNCTION copychm(VAR x,y: reference): integer; EXTERNAL; 6040 228 (* makes a copy of a channelmessage *) 6050 229 6060 230 PROCEDURE testopen(VAR x:zone; y:alfa; z:^semaphore); EXTERNAL; 6070 231 (* opens testmode *) 6080 232 6090 233 PROCEDURE testout(VAR x:zone; y:alfa; z:integer); EXTERNAL; 6100 234 (* writes text for test *) 6110 235 6120 236 PROCEDURE control( x: integer; VAR y: reference); EXTERNAL; 6130 237 (* writes one controlword *) 6140 238 6150 239 PROCEDURE outword( x: lamword; VAR y: reference); EXTERNAL; 6160 240 (* writes one word *) 6170 241 6180 242 6190 243 PROCEDURE sense(VAR x:integer; y:integer; VAR z:reference); EXTERNAL; 6200 244 6210 245 6220 246 (*************** procedures ***********************************) 6230 247 6240 248 PROCEDURE stop_actual_request 6250 249 ( result: byte; channel_no: channelset ); 6260 250 FORWARD; 6270 251 6280 252 6290 253 \f hjlaplst 81.05.04. 08.25. page 9 7010 254 PROCEDURE start_rts_delay(channel_no : integer); 7020 255 (********************************************* 7030 256 * rts-delay * 7040 257 **********************************************) 7050 258 7060 259 VAR ref:reference; 7070 260 BEGIN 7080 261 1 ! alloc(ref, delaypool, mainsem.s^); 7090 262 2 ! ref^.u3 := rts_delay_u3; 7100 263 3 ! ref^.u4 := rts_delay_u4; 7110 264 4 ! ref^.u1 := channel_no*2; 7120 265 5 ! (*q if test_b then 7130 266 6 ! testout( z, "rts-delay ", ref^.u1); q*) 7140 267 7 ! sendtimer(ref); 7150 268 8 END; 7160 269 7170 270 7180 271 7190 272 7200 273 7210 274 PROCEDURE start_rtr_delay(channel_no : integer); 7220 275 (********************************************* 7230 276 * rtr-delay * 7240 277 **********************************************) 7250 278 7260 279 VAR ref:reference; 7270 280 BEGIN 7280 281 1 ! alloc(ref, delaypool, mainsem.s^); 7290 282 2 ! ref^.u3:=rtr_delay_u3; 7300 283 3 ! ref^.u4:=rtr_delay_u4; 7310 284 4 ! ref^.u1 :=channel_no*2+1; 7320 285 5 ! (*q if test_b then 7330 286 6 ! testout( z, "rtr-delay ", ref^.u1); q*) 7340 287 7 ! sendtimer(ref); 7350 288 8 END; 7360 289 7370 290 \f hjlaplst 81.05.04. 08.25. page 10 8010 291 PROCEDURE createchannel( w_kind, r_kind: 0..15 ); 8020 292 (*********************************************** 8030 293 * createchannel * 8040 294 ************************************************) 8050 295 8060 296 VAR i: integer; 8070 297 BEGIN 8080 298 1 ! i:=ref^.u2; 8090 299 2 ! channel_descriptor(i*2).channel_kind:=w_kind; 8100 300 3 ! channel_descriptor(i*2+1).channel_kind:=r_kind; 8110 301 4 ! 8120 302 5 ! channel_descriptor(i*2).status := write_read_ok; 8130 303 6 ! channel_descriptor(i*2+1).status := write_read_ok; 8140 304 7 ! 8150 305 8 ! LOCK ref AS buf:atbuffer DO 8160 306 9 ! BEGIN 8170 307 10 ! ! controle_byte(i):=buf(0) MOD 128; 8180 308 11 ! ! time(i):=buf(1); 8190 309 12 ! END; 8200 310 13 ! 8210 311 14 ! ref^.u2:=ok_result; 8220 312 15 ! return(ref); 8230 313 16 ! 8240 314 17 ! (*q if test_b then 8250 315 18 ! begin 8260 316 19 ! testout( z, "chn created ", i); 8270 317 20 ! testout( z, "controlebyte", controle_byte(i)); 8280 318 21 ! end; q*) 8290 319 22 END; 8300 320 \f hjlaplst 81.05.04. 08.25. page 11 9010 321 9020 322 (******************************************************* 9030 323 * start_next_request * 9040 324 9050 325 * initializes next, top, and timeout in * 9060 326 * channeldescriptor(channel_no) * 9070 327 * and channel if it is used for output * 9080 328 * * 9090 329 * called when - not finished with write/read * 9100 330 * - more requests after stop_actual_request 9110 331 * - timeout on write * 9120 332 * - no requests when a new userbuffer * 9130 333 * is comming * 9140 334 ********************************************************) 9150 335 9160 336 9170 337 PROCEDURE start_next_request( channel_no:channelset); 9180 338 VAR c : integer; 9190 339 BEGIN 9200 340 1 ! WITH channel_descriptor(channel_no) DO 9210 341 2 ! BEGIN 9220 342 3 ! ! 9230 343 4 ! ! timeout:= time(channel_no DIV 2); 9240 344 5 ! ! 9250 345 6 ! ! (*q if test_b then 9260 346 7 ! ! begin 9270 347 8 ! ! testout( z,"sta-nxt-req ", channel_no); 9280 348 9 ! ! testout( z,"chn-kind ",channel_kind); 9290 349 10 ! ! end; q*) 9300 350 11 ! ! 9310 351 12 ! ! IF channel_kind = at_write_channel THEN 9320 352 13 ! ! BEGIN 9330 353 14 ! ! ! (* set up for output *) 9340 354 15 ! ! ! c:=controle_byte(channel_no DIV 2)*256+requesttosend+channel_no; 9350 355 16 ! ! ! control(c,channelmessage); 9360 356 17 ! ! ! (*q if test_b then 9370 357 18 ! ! ! testout(z,"rts-init ",c); q*) 9380 358 19 ! ! ! start_rts_delay(channel_no); 9390 359 20 ! ! ! channel_kind := at_write_wait; 9400 360 21 ! ! END 9410 361 22 ! ! \f hjlaplst 81.05.04. 08.25. page 12 10010 362 23 ! ! ELSE 10020 363 24 ! ! BEGIN 10030 364 25 ! ! ! IF channel_kind = tty_read_channel THEN 10040 365 26 ! ! ! channel_descriptor(channel_no-1).reading_tty:=true; 10050 366 27 ! ! ! interruptable:=true; 10060 367 28 ! ! END; 10070 368 29 ! ! 10080 369 30 ! ! IF request^.u1 > write_alc_read THEN 10090 370 31 ! ! BEGIN 10100 371 32 ! ! ! LOCK request AS buf: drvbuffer DO 10110 372 33 ! ! ! BEGIN 10120 373 34 ! ! ! ! next:= buf.next; 10130 374 35 ! ! ! ! top:= buf.last+1; 10140 375 36 ! ! ! END; 10150 376 37 ! ! END 10160 377 38 ! ! 10170 378 39 ! ! ELSE 10180 379 40 ! ! IF request^.u1 <= write_read_at THEN 10190 380 41 ! ! BEGIN 10200 381 42 ! ! ! next := 0; 10210 382 43 ! ! ! top := 2; 10220 383 44 ! ! END 10230 384 45 ! ! ELSE 10240 385 46 ! ! BEGIN (* alc mode *) 10250 386 47 ! ! ! IF request^.u3 >= command THEN 10260 387 48 ! ! ! LOCK request AS buf : drvbuffer DO 10270 388 49 ! ! ! BEGIN 10280 389 50 ! ! ! ! buf.next := buf.first; 10290 390 51 ! ! ! END; 10300 391 52 ! ! ! top := 1; 10310 392 53 ! ! ! IF channel_kind = alc_read_channel THEN 10320 393 54 ! ! ! timeout := timeout * 10; 10330 394 55 ! ! END; 10340 395 56 ! END; 10350 396 57 END; 10360 397 \f hjlaplst 81.05.04. 08.25. page 13 11010 398 (******************************************************* 11020 399 * stop_actual_request 11030 400 * 11040 401 * sends answer back to user 11050 402 * if we shall go on read the request is send to * 11060 403 * queue at channel_no+1 * 11070 404 ********************************************************) 11080 405 11090 406 PROCEDURE stop_actual_request 11100 407 ( result:byte; channel_no:channelset); 11110 408 11120 409 VAR c : integer; 11130 410 11140 411 11150 412 BEGIN 11160 413 1 ! 11170 414 2 ! WITH channel_descriptor(channel_no) DO 11180 415 3 ! 11190 416 4 ! CASE channel_kind OF 11200 417 5 ! ! 11210 418 6 ! ! at_write_channel: 11220 419 7 ! ! BEGIN 11230 420 8 ! ! ! start_rtr_delay(channel_no); 11240 421 9 ! ! ! channel_kind := at_read_wait; 11250 422 10 ! ! ! old_result := result; 11260 423 11 ! ! END; 11270 424 12 ! ! 11280 425 13 ! ! at_read_wait: 11290 426 14 ! ! BEGIN 11300 427 15 ! ! ! c:=controle_byte(channel_no DIV 2)*256+readytoread+channel_no; 11310 428 16 ! ! ! control(c,channelmessage); 11320 429 17 ! ! ! channel_kind := at_write_channel; 11330 430 18 ! ! ! result:= old_result; 11340 431 19 ! ! ! (*q if test_b then 11350 432 20 ! ! ! testout( z,"rtr-answer ", c); q*) 11360 433 21 ! ! END 11370 434 22 ! ! OTHERWISE; 11380 435 23 ! END; 11390 436 24 ! \f hjlaplst 81.05.04. 08.25. page 14 12010 437 25 ! IF channel_descriptor(channel_no).channel_kind <> at_read_wait THEN 12020 438 26 ! BEGIN 12030 439 27 ! ! 12040 440 28 ! ! IF result = go_on_read THEN 12050 441 29 ! ! BEGIN 12060 442 30 ! ! ! 12070 443 31 ! ! ! (*q if test_b then 12080 444 32 ! ! ! testout( z,"go on read ", channel_no); q*) 12090 445 33 ! ! ! 12100 446 34 ! ! ! WHILE NOT nil( channel_descriptor(channel_no+1).request) DO 12110 447 35 ! ! ! WITH channel_descriptor(channel_no+1) DO 12120 448 36 ! ! ! BEGIN 12130 449 37 ! ! ! ! request^.u2:=write_read_mixed; 12140 450 38 ! ! ! ! return(request); 12150 451 39 ! ! ! ! sensesem( request, queue(channel_no+1)); 12160 452 40 ! ! ! END; 12170 453 41 ! ! ! channel_descriptor(channel_no+1).request:=:channel_descriptor(channel_no).request; 12180 454 42 ! ! ! start_next_request(channel_no+1); 12190 455 43 ! ! END 12200 456 44 ! ! ELSE 12210 457 45 ! ! BEGIN 12220 458 46 ! ! ! WITH channel_descriptor( channel_no) DO 12230 459 47 ! ! ! IF (( channel_kind=alc_read_channel) OR (channel_kind=alc_write_channel)) THEN 12240 460 48 ! ! ! BEGIN 12250 461 49 ! ! ! ! <*t 12260 462 50 ! ! ! ! IF result <> 0 THEN 12270 463 51 ! ! ! ! BEGIN 12280 464 52 ! ! ! ! IF channel_kind=alc_read_channel THEN 12290 465 53 ! ! ! ! testout(z,"ui-r ", result) 12300 466 54 ! ! ! ! ELSE 12310 467 55 ! ! ! ! testout(z,"uo-r ", result); 12320 468 56 ! ! ! ! testout(z,"opc ", request^.u3); 12330 469 57 ! ! ! ! END; 12340 470 58 ! ! ! ! t*> 12350 471 59 ! ! ! ! 12360 472 60 ! ! ! ! request^.u4 := status MOD 256; 12370 473 61 ! ! ! END; 12380 474 62 ! ! ! channel_descriptor(channel_no).request^.u2:=result; 12390 475 63 ! ! ! 12400 476 64 ! ! ! (*q if test_b then 12410 477 65 ! ! ! testout( z, "returning ", channel_no); q*) 12420 478 66 ! ! ! return(channel_descriptor(channel_no).request); 12430 479 67 ! ! END; 12440 480 68 ! ! \f hjlaplst 81.05.04. 08.25. page 15 13010 481 69 ! ! WITH channel_descriptor(channel_no) DO 13020 482 70 ! ! BEGIN 13030 483 71 ! ! ! timeout:=0; 13040 484 72 ! ! ! sensesem(request,queue(channel_no)); 13050 485 73 ! ! ! IF channel_kind = tty_read_channel THEN 13060 486 74 ! ! ! BEGIN 13070 487 75 ! ! ! ! IF nil(channel_descriptor(channel_no-1).request) THEN 13080 488 76 ! ! ! ! BEGIN (* no writes are waiting *) 13090 489 77 ! ! ! ! ! IF nil(request) THEN 13100 490 78 ! ! ! ! ! channel_descriptor(channel_no-1).reading_tty := false 13110 491 79 ! ! ! ! ! ELSE 13120 492 80 ! ! ! ! ! start_next_request( channel_no) 13130 493 81 ! ! ! ! END 13140 494 82 ! ! ! ! ELSE 13150 495 83 ! ! ! ! BEGIN (* writes are waiting *) 13160 496 84 ! ! ! ! ! channel_descriptor(channel_no-1).reading_tty:=false; 13170 497 85 ! ! ! ! ! start_next_request(channel_no-1); 13180 498 86 ! ! ! ! END 13190 499 87 ! ! ! END 13200 500 88 ! ! ! ELSE 13210 501 89 ! ! ! IF channel_kind = tty_write_channel THEN 13220 502 90 ! ! ! BEGIN 13230 503 91 ! ! ! ! IF nil( request) THEN 13240 504 92 ! ! ! ! BEGIN (* no more writes look for reads *) 13250 505 93 ! ! ! ! ! IF NOT nil(channel_descriptor(channel_no+1).request) THEN 13260 506 94 ! ! ! ! ! start_next_request(channel_no+1) 13270 507 95 ! ! ! ! END 13280 508 96 ! ! ! ! ELSE 13290 509 97 ! ! ! ! start_next_request(channel_no); 13300 510 98 ! ! ! END 13310 511 99 ! ! ! ELSE 13320 512 100 ! ! ! IF nil(request) THEN interruptable:=false 13330 513 101 ! ! ! ELSE start_next_request(channel_no); 13340 514 102 ! ! END; 13350 515 103 ! END; 13360 516 104 END; 13370 517 \f hjlaplst 81.05.04. 08.25. page 16 14010 518 14020 519 FUNCTION packed_word ( databits: byte; channel_no: channelset): lamword; 14030 520 (******************************************************** 14040 521 * makes a word ready for outword * 14050 522 *********************************************************) 14060 523 VAR w: lamword; 14070 524 BEGIN 14080 525 1 ! w.data:= databits; 14090 526 2 ! w.std := 0; 14100 527 3 ! w.port_and_bit15:=channel_no; 14110 528 4 ! packed_word:= w 14120 529 5 END; 14130 530 \f hjlaplst 81.05.04. 08.25. page 17 15010 531 PROCEDURE set_lam_control( channel_no : channelset); 15020 532 VAR c : integer; 15030 533 BEGIN 15040 534 1 ! channel_no := channel_no - channel_no MOD 2; 15050 535 2 ! c := controle_byte( channel_no DIV 2) *256 + channel_no; 15060 536 3 ! IF channel_descriptor(channel_no).channel_kind = at_write_channel THEN 15070 537 4 ! c := c+readytoread 15080 538 5 ! ELSE 15090 539 6 ! c:= c+ requesttosend; 15100 540 7 ! 15110 541 8 ! control( c, channelmessage); 15120 542 9 END; 15130 543 \f hjlaplst 81.05.04. 08.25. page 18 16010 544 PROCEDURE start_new_channel(channel_no: channelset); 16020 545 (******************************************************** 16030 546 * start_new_channel * 16040 547 * called when - channel is created * 16050 548 * - persistent status error * 16060 549 * - timeout on write or write/read * 16070 550 *********************************************************) 16080 551 16090 552 BEGIN 16100 553 1 ! set_lam_control( channel_no); 16110 554 2 ! channel_descriptor(channel_no).status:= write_read_ok; 16120 555 3 ! 16130 556 4 ! WITH channel_descriptor(channel_no) DO 16140 557 5 ! WHILE NOT nil(request) DO 16150 558 6 ! stop_actual_request 16160 559 7 ! (create_done, channel_no); 16170 560 8 ! 16180 561 9 ! channel_no:= channel_no+1; 16190 562 10 ! WITH channel_descriptor(channel_no) DO 16200 563 11 ! WHILE NOT nil(request) DO 16210 564 12 ! stop_actual_request 16220 565 13 ! (create_done, channel_no); 16230 566 14 END; 16240 567 \f hjlaplst 81.05.04. 08.25. page 19 17010 568 FUNCTION ready_to_send( channel_no:channelset):boolean; 17020 569 (******************************************************** 17030 570 * ready-to-send * 17040 571 *********************************************************) 17050 572 17060 573 BEGIN 17070 574 1 ! WITH channel_descriptor(channel_no) DO 17080 575 2 ! BEGIN 17090 576 3 ! ! sense( status, channel_no, channelmessage); 17100 577 4 ! ! 17110 578 5 ! ! IF status MOD 32 DIV 8 = 3 THEN 17120 579 6 ! ! ready_to_send := true 17130 580 7 ! ! ELSE 17140 581 8 ! ! ready_to_send:=false 17150 582 9 ! END; 17160 583 10 END; 17170 584 \f hjlaplst 81.05.04. 08.25. page 20 18010 585 PROCEDURE handle_ok_lam_int(data_byte: byte; channel_no: channelset); 18020 586 (******************************************************** 18030 587 * handle_ok_lam_int * 18040 588 * handles the buffer pointed to by request * 18050 589 * * 18060 590 * if it is a writebuffer the byte pointed to by next * 18070 591 * is output * 18080 592 * * 18090 593 * if it is a readbuffer the data_byte is put into * 18100 594 * the buffer at the byte pointed to by next * 18110 595 * * 18120 596 *********************************************************) 18130 597 18140 598 18150 599 BEGIN 18160 600 1 ! (*q if test_b then 18170 601 2 ! testout(z, "hndl-o-l-int", channel_no); q*) 18180 602 3 ! 18190 603 4 ! WITH channel_descriptor(channel_no) DO 18200 604 5 ! 18210 605 6 ! CASE channel_kind OF 18220 606 7 ! ! \f hjlaplst 81.05.04. 08.25. page 21 19010 607 8 ! ! at_write_channel : 19020 608 9 ! ! 19030 609 10 ! ! IF next >= top THEN 19040 610 11 ! ! BEGIN 19050 611 12 ! ! ! (*q if test_b then 19060 612 13 ! ! ! testout( z, "next = top ", 0); q*) 19070 613 14 ! ! ! IF request^.u1 = write_read_at THEN 19080 614 15 ! ! ! stop_actual_request 19090 615 16 ! ! ! ( go_on_read, channel_no) 19100 616 17 ! ! ! ELSE stop_actual_request 19110 617 18 ! ! ! ( ok_result, channel_no); 19120 618 19 ! ! END 19130 619 20 ! ! ELSE 19140 620 21 ! ! BEGIN 19150 621 22 ! ! ! <*rif ready_to_send(channel_no) THEN 19160 622 23 ! ! ! r*> 19170 623 24 ! ! ! LOCK request AS buf:atbuffer DO 19180 624 25 ! ! ! BEGIN 19190 625 26 ! ! ! ! 19200 626 27 ! ! ! ! (*q if test_b then 19210 627 28 ! ! ! ! begin 19220 628 29 ! ! ! ! testout( z, "at-w-next ", next); 19230 629 30 ! ! ! ! testout( z, "at-w-ch ", buf(next)); 19240 630 31 ! ! ! ! end; q*) 19250 631 32 ! ! ! ! 19260 632 33 ! ! ! ! outword( packed_word( buf(next), channel_no), channelmessage); 19270 633 34 ! ! ! ! next:=next+1; 19280 634 35 ! ! ! END 19290 635 36 ! ! ! <*r 19300 636 37 ! ! ! ELSE 19310 637 38 ! ! ! stop_actual_request 19320 638 39 ! ! ! ( write_error, channel_no) 19330 639 40 ! ! ! r*> 19340 640 41 ! ! END; 19350 641 42 ! ! \f hjlaplst 81.05.04. 08.25. page 22 20010 642 43 ! ! at_read_channel : 20020 643 44 ! ! 20030 644 45 ! ! BEGIN 20040 645 46 ! ! ! LOCK request AS buf:atbuffer DO 20050 646 47 ! ! ! buf(next):=data_byte; 20060 647 48 ! ! ! (*q if test_b then 20070 648 49 ! ! ! begin 20080 649 50 ! ! ! testout( z, "at-r-next ", next); 20090 650 51 ! ! ! testout( z,"at-r-ch ", data_byte); 20100 651 52 ! ! ! end; q*) 20110 652 53 ! ! ! next:=next+1; 20120 653 54 ! ! ! IF next >= top THEN 20130 654 55 ! ! ! stop_actual_request 20140 655 56 ! ! ! ( ok_result, channel_no); 20150 656 57 ! ! END; 20160 657 58 ! ! \f hjlaplst 81.05.04. 08.25. page 23 21010 658 59 ! ! alc_read_channel : 21020 659 60 ! ! 21030 660 61 ! ! BEGIN 21040 661 62 ! ! ! (* top controls position i format *) 21050 662 63 ! ! ! CASE top OF 21060 663 64 ! ! ! ! 21070 664 65 ! ! ! ! 1 : (* stx should be read *) 21080 665 66 ! ! ! ! 21090 666 67 ! ! ! ! IF data_byte = stx THEN top:= 2; 21100 667 68 ! ! ! ! 21110 668 69 ! ! ! ! 2 : (* opcode should be read *) 21120 669 70 ! ! ! ! BEGIN 21130 670 71 ! ! ! ! ! old_result := data_byte; 21140 671 72 ! ! ! ! ! checksum := 0; 21150 672 73 ! ! ! ! ! IF (data_byte IN op_codes) THEN 21160 673 74 ! ! ! ! ! IF data_byte < command THEN top:= 5 ELSE top:= 3 21170 674 75 ! ! ! ! ! ELSE top:= 1; (* illegal opk *) 21180 675 76 ! ! ! ! END; 21190 676 77 ! ! ! ! 21200 677 78 ! ! ! ! 3 : (* bbl should be read *) 21210 678 79 ! ! ! ! BEGIN 21220 679 80 ! ! ! ! ! 21230 680 81 ! ! ! ! ! next:= data_byte; (* points to etx *) 21240 681 82 ! ! ! ! ! top:= 4; 21250 682 83 ! ! ! ! ! 21260 683 84 ! ! ! ! ! (*qtestout(z,"reci-bbl ", data_byte);q*) 21270 684 85 ! ! ! ! END; 21280 685 86 ! ! ! ! 21290 686 87 ! ! ! ! 4: 21300 687 88 ! ! ! ! BEGIN (* info is read *) 21310 688 89 ! ! ! ! ! 21320 689 90 ! ! ! ! ! i := request^.size; 21330 690 91 ! ! ! ! ! LOCK request AS buf : RECORD 21340 691 92 ! ! ! ! ! ! first, last, next : integer; 21350 692 93 ! ! ! ! ! ! info : ARRAY (6..i-1+i) OF byte; 21360 693 94 ! ! ! ! ! END DO 21370 694 95 ! ! ! ! ! BEGIN 21380 695 96 ! ! ! ! ! ! buf.info(buf.next) := data_byte; 21390 696 97 ! ! ! ! ! ! buf.next := buf.next +1; 21400 697 98 ! ! ! ! ! ! next:= next-1; 21410 698 99 ! ! ! ! ! ! IF next < 0 THEN top:= 5 ELSE 21420 699 100 ! ! ! ! ! ! IF buf.next > buf.last THEN (* buffer too small *) 21430 700 101 ! ! ! ! ! ! top:= 1 21440 701 102 ! ! ! ! ! END; 21450 702 103 ! ! ! ! ! IF top = 1 THEN 21460 703 104 ! ! ! ! ! stop_actual_request ( 5*8+transient_error, channel_no); \f hjlaplst 81.05.04. 08.25. page 24 21470 704 105 ! ! ! ! END; 21480 705 106 ! ! ! ! \f hjlaplst 81.05.04. 08.25. page 25 22010 706 107 ! ! ! ! 5: (*--- etx should be read *) 22020 707 108 ! ! ! ! BEGIN 22030 708 109 ! ! ! ! ! 22040 709 110 ! ! ! ! ! IF data_byte <> etx THEN 22050 710 111 ! ! ! ! ! BEGIN (* start again *) 22060 711 112 ! ! ! ! ! ! IF request^.u3 >= command THEN 22070 712 113 ! ! ! ! ! ! LOCK request AS buf : drvbuffer DO 22080 713 114 ! ! ! ! ! ! BEGIN 22090 714 115 ! ! ! ! ! ! ! buf.next := buf.first; 22100 715 116 ! ! ! ! ! ! END; 22110 716 117 ! ! ! ! ! ! top := 1; 22120 717 118 ! ! ! ! ! END ELSE 22130 718 119 ! ! ! ! ! top:= 6; 22140 719 120 ! ! ! ! ! 22150 720 121 ! ! ! ! END; 22160 721 122 ! ! ! ! 22170 722 123 ! ! ! ! 6: 22180 723 124 ! ! ! ! (* chs should be read *) 22190 724 125 ! ! ! ! 22200 725 126 ! ! ! ! IF data_byte <> checksum THEN 22210 726 127 ! ! ! ! BEGIN 22220 727 128 ! ! ! ! ! stop_actual_request 22230 728 129 ! ! ! ! ! ( 4*8 + transient_error, channel_no); 22240 729 130 ! ! ! ! END ELSE 22250 730 131 ! ! ! ! BEGIN 22260 731 132 ! ! ! ! ! 22270 732 133 ! ! ! ! ! request^.u3 := old_result; 22280 733 134 ! ! ! ! ! 22290 734 135 ! ! ! ! ! stop_actual_request 22300 735 136 ! ! ! ! ! ( ok_result, channel_no); 22310 736 137 ! ! ! ! ! 22320 737 138 ! ! ! ! ! (*qtestout(z,"release-ui ", 0);q*) 22330 738 139 ! ! ! ! END; 22340 739 140 ! ! ! END; (* case *) 22350 740 141 ! ! ! 22360 741 142 ! ! ! checksum := (checksum + data_byte) MOD 256; 22370 742 143 ! ! ! 22380 743 144 ! ! END; 22390 744 145 ! ! \f hjlaplst 81.05.04. 08.25. page 26 23010 745 146 ! ! alc_write_channel : 23020 746 147 ! ! BEGIN 23030 747 148 ! ! ! <*r 23040 748 149 ! ! ! IF ready_to_send ( channel_no) THEN 23050 749 150 ! ! ! r*> 23060 750 151 ! ! ! BEGIN 23070 751 152 ! ! ! ! 23080 752 153 ! ! ! ! CASE top OF 23090 753 154 ! ! ! ! ! 23100 754 155 ! ! ! ! ! 1 : (* stx is send *) 23110 755 156 ! ! ! ! ! BEGIN 23120 756 157 ! ! ! ! ! ! 23130 757 158 ! ! ! ! ! ! data_byte := stx; 23140 758 159 ! ! ! ! ! ! top:= 2; 23150 759 160 ! ! ! ! ! END; 23160 760 161 ! ! ! ! ! 23170 761 162 ! ! ! ! ! 2 : (* opcode is send *) 23180 762 163 ! ! ! ! ! BEGIN 23190 763 164 ! ! ! ! ! ! data_byte := request^.u3; 23200 764 165 ! ! ! ! ! ! checksum:= 0; 23210 765 166 ! ! ! ! ! ! IF data_byte < command THEN top:= 5 ELSE top:= 3 23220 766 167 ! ! ! ! ! END; 23230 767 168 ! ! ! ! ! 23240 768 169 ! ! ! ! ! 3 : (* bbl is send *) 23250 769 170 ! ! ! ! ! LOCK request AS buf : drvbuffer DO 23260 770 171 ! ! ! ! ! BEGIN (* bbl *) 23270 771 172 ! ! ! ! ! ! data_byte := buf.last - buf.first; 23280 772 173 ! ! ! ! ! ! top:= 4; 23290 773 174 ! ! ! ! ! ! (*qtestout(z,"send-bbl ", data_byte);q*) 23300 774 175 ! ! ! ! ! END; 23310 775 176 ! ! ! ! ! 23320 776 177 ! ! ! ! ! 4: (* send info *) 23330 777 178 ! ! ! ! ! BEGIN 23340 778 179 ! ! ! ! ! ! i:= request^.size; 23350 779 180 ! ! ! ! ! ! LOCK request AS buf : RECORD 23360 780 181 ! ! ! ! ! ! ! first, last, next : integer; 23370 781 182 ! ! ! ! ! ! ! info : ARRAY (6..i-1+i) OF byte; 23380 782 183 ! ! ! ! ! ! END DO 23390 783 184 ! ! ! ! ! ! BEGIN 23400 784 185 ! ! ! ! ! ! ! data_byte := buf.info( buf.next); 23410 785 186 ! ! ! ! ! ! ! buf.next := buf.next +1; 23420 786 187 ! ! ! ! ! ! ! IF buf.next > buf.last THEN top:= 5; 23430 787 188 ! ! ! ! ! ! ! (*qtestout(z,"send-info ", buf.info(buf.next));q*) 23440 788 189 ! ! ! ! ! ! END; 23450 789 190 ! ! ! ! ! END; 23460 790 191 ! ! ! ! ! \f hjlaplst 81.05.04. 08.25. page 27 24010 791 192 ! ! ! ! ! 5: (* send etx *) 24020 792 193 ! ! ! ! ! BEGIN 24030 793 194 ! ! ! ! ! ! data_byte := etx; 24040 794 195 ! ! ! ! ! ! top:= 6; 24050 795 196 ! ! ! ! ! ! (*qtestout(z,"send-etx ", checksum);q*) 24060 796 197 ! ! ! ! ! END; 24070 797 198 ! ! ! ! ! 24080 798 199 ! ! ! ! ! 24090 799 200 ! ! ! ! ! 6: 24100 800 201 ! ! ! ! ! (* chs is send *) 24110 801 202 ! ! ! ! ! BEGIN 24120 802 203 ! ! ! ! ! ! data_byte := checksum; 24130 803 204 ! ! ! ! ! ! top:= 7; 24140 804 205 ! ! ! ! ! ! (*qtestout(z,"send-chs ", etx);q*) 24150 805 206 ! ! ! ! ! ! 24160 806 207 ! ! ! ! ! END; 24170 807 208 ! ! ! ! ! 24180 808 209 ! ! ! ! ! 7: (* user buffer is released *) 24190 809 210 ! ! ! ! ! BEGIN 24200 810 211 ! ! ! ! ! ! stop_actual_request 24210 811 212 ! ! ! ! ! ! ( ok_result, channel_no); 24220 812 213 ! ! ! ! ! ! 24230 813 214 ! ! ! ! ! ! (*qtestout(z,"release uo ",next);q*) 24240 814 215 ! ! ! ! ! END; 24250 815 216 ! ! ! ! ! 24260 816 217 ! ! ! ! END; (* case *) 24270 817 218 ! ! ! ! <*r 24280 818 219 ! ! ! ! ELSE 24290 819 220 ! ! ! ! stop_actual_request 24300 820 221 ! ! ! ! (write_error, channel_no); 24310 821 222 ! ! ! ! r*> 24320 822 223 ! ! ! ! 24330 823 224 ! ! ! ! outword( packed_word( data_byte, channel_no), channelmessage); 24340 824 225 ! ! ! ! checksum := (checksum + data_byte) MOD 256; 24350 825 226 ! ! ! ! 24360 826 227 ! ! ! END; 24370 827 228 ! ! END; 24380 828 229 ! ! \f hjlaplst 81.05.04. 08.25. page 28 25010 829 230 ! ! tty_read_channel : 25020 830 231 ! ! 25030 831 232 ! ! BEGIN 25040 832 233 ! ! ! 25050 833 234 ! ! ! (*q if test_b then 25060 834 235 ! ! ! begin 25070 835 236 ! ! ! testout( z,"tty-r-next ", next); 25080 836 237 ! ! ! testout( z,"tty-r-ch ", data_byte); 25090 837 238 ! ! ! end; q*) 25100 838 239 ! ! ! 25110 839 240 ! ! ! 25120 840 241 ! ! ! CASE data_byte OF 25130 841 242 ! ! ! ! 25140 842 243 ! ! ! ! esc : 25150 843 244 ! ! ! ! BEGIN 25160 844 245 ! ! ! ! ! WITH channel_descriptor( channel_no-1) DO 25170 845 246 ! ! ! ! ! IF NOT reading_tty THEN 25180 846 247 ! ! ! ! ! BEGIN 25190 847 248 ! ! ! ! ! ! timeout:=0; 25200 848 249 ! ! ! ! ! ! channel_kind:=tty_wait_cr; 25210 849 250 ! ! ! ! ! ! LOCK request AS buf:drvbuffer DO 25220 850 251 ! ! ! ! ! ! IF next > 1 THEN 25230 851 252 ! ! ! ! ! ! buf.next:=next-1 25240 852 253 ! ! ! ! ! ! ELSE 25250 853 254 ! ! ! ! ! ! buf.next:=next; 25260 854 255 ! ! ! ! ! END 25270 855 256 ! ! ! ! ! ELSE 25280 856 257 ! ! ! ! ! channel_kind := tty_wait_nl; 25290 857 258 ! ! ! ! ! outword( packed_word( cr, channel_no), channelmessage); 25300 858 259 ! ! ! ! ! start_next_request( channel_no); 25310 859 260 ! ! ! ! ! (*ttestout(z,"esc ",timeout);t*) 25320 860 261 ! ! ! ! END; 25330 861 262 ! ! ! ! 25340 862 263 ! ! ! ! cs : 25350 863 264 ! ! ! ! WITH channel_descriptor(channel_no-1) DO 25360 864 265 ! ! ! ! IF NOT reading_tty THEN 25370 865 266 ! ! ! ! BEGIN 25380 866 267 ! ! ! ! ! WHILE NOT nil(request) DO 25390 867 268 ! ! ! ! ! BEGIN 25400 868 269 ! ! ! ! ! ! request^.u2:=create_done; 25410 869 270 ! ! ! ! ! ! return(request); 25420 870 271 ! ! ! ! ! ! sensesem(request,queue(channel_no-1)) 25430 871 272 ! ! ! ! ! END; 25440 872 273 ! ! ! ! ! timeout:=0; 25450 873 274 ! ! ! ! ! IF NOT nil(channel_descriptor(channel_no).request) THEN 25460 874 275 ! ! ! ! ! start_next_request(channel_no); \f hjlaplst 81.05.04. 08.25. page 29 25470 875 276 ! ! ! ! END 25480 876 277 ! ! ! ! ELSE (* reading tty *) 25490 877 278 ! ! ! ! BEGIN 25500 878 279 ! ! ! ! ! WITH channel_descriptor( channel_no) DO 25510 879 280 ! ! ! ! ! BEGIN 25520 880 281 ! ! ! ! ! ! i:= request^.size; 25530 881 282 ! ! ! ! ! ! 25540 882 283 ! ! ! ! ! ! LOCK request AS buf : RECORD 25550 883 284 ! ! ! ! ! ! ! first, last, next : integer; 25560 884 285 ! ! ! ! ! ! ! text : ARRAY (1..i-6+i) OF byte; 25570 885 286 ! ! ! ! ! ! END DO 25580 886 287 ! ! ! ! ! ! BEGIN 25590 887 288 ! ! ! ! ! ! ! IF next > (i-6+i) THEN next := (i-6+i); 25600 888 289 ! ! ! ! ! ! ! buf.text(next):=cs; 25610 889 290 ! ! ! ! ! ! ! next:=next+1; 25620 890 291 ! ! ! ! ! ! ! IF next>=top THEN 25630 891 292 ! ! ! ! ! ! ! buf.next:=next; 25640 892 293 ! ! ! ! ! ! END; 25650 893 294 ! ! ! ! ! ! IF next>=top THEN 25660 894 295 ! ! ! ! ! ! stop_actual_request 25670 895 296 ! ! ! ! ! ! ( ok_result, channel_no); 25680 896 297 ! ! ! ! ! END; 25690 897 298 ! ! ! ! ! outword(packed_word(cr,channel_no), channelmessage); 25700 898 299 ! ! ! ! ! (*ttestout(z,"cs ",timeout);t*) 25710 899 300 ! ! ! ! ! channel_kind:=echo_nl_on_channel; 25720 900 301 ! ! ! ! END; 25730 901 302 ! ! ! ! 25740 902 303 ! ! ! ! del,bs : 25750 903 304 ! ! ! ! IF channel_descriptor(channel_no-1).reading_tty THEN 25760 904 305 ! ! ! ! BEGIN 25770 905 306 ! ! ! ! ! LOCK request AS buf:drvbuffer DO 25780 906 307 ! ! ! ! ! IF next > buf.first THEN (* erase *) 25790 907 308 ! ! ! ! ! next:=next-1; 25800 908 309 ! ! ! ! ! outword( packed_word( bs, channel_no), channelmessage); 25810 909 310 ! ! ! ! END; 25820 910 311 ! ! ! ! cr: (* return works as line-end *) 25830 911 312 ! ! ! ! IF channel_descriptor(channel_no-1).reading_tty THEN 25840 912 313 ! ! ! ! BEGIN 25850 913 314 ! ! ! ! ! i := request^.size; 25860 914 315 ! ! ! ! ! 25870 915 316 ! ! ! ! ! LOCK request AS buf : RECORD 25880 916 317 ! ! ! ! ! ! first, last, next : integer; 25890 917 318 ! ! ! ! ! ! text : ARRAY (1..i-6+i) OF byte; 25900 918 319 ! ! ! ! ! END DO 25910 919 320 ! ! ! ! ! BEGIN 25920 920 321 ! ! ! ! ! ! channel_descriptor(channel_no-1).channel_kind:=echo_nl_on_channel; \f hjlaplst 81.05.04. 08.25. page 30 25930 921 322 ! ! ! ! ! ! buf.text(next):=data_byte; 25940 922 323 ! ! ! ! ! ! IF next<top-1 THEN 25950 923 324 ! ! ! ! ! ! BEGIN 25960 924 325 ! ! ! ! ! ! ! buf.text(next+1):=nl; 25970 925 326 ! ! ! ! ! ! ! buf.next:=next+2 25980 926 327 ! ! ! ! ! ! END 25990 927 328 ! ! ! ! ! ! ELSE 26000 928 329 ! ! ! ! ! ! buf.next:=next+1; 26010 929 330 ! ! ! ! ! ! outword( packed_word( cr, channel_no), channelmessage); 26020 930 331 ! ! ! ! ! ! (*ttestout(z,"cr ",timeout);t*) 26030 931 332 ! ! ! ! ! END 26040 932 333 ! ! ! ! END 26050 933 334 ! ! ! ! \f hjlaplst 81.05.04. 08.25. page 31 27010 934 335 ! ! ! ! OTHERWISE (* packed_word character *) 27020 935 336 ! ! ! ! 27030 936 337 ! ! ! ! IF channel_descriptor(channel_no-1).reading_tty THEN 27040 937 338 ! ! ! ! BEGIN 27050 938 339 ! ! ! ! ! i := request^.size; 27060 939 340 ! ! ! ! ! 27070 940 341 ! ! ! ! ! LOCK request AS buf : RECORD 27080 941 342 ! ! ! ! ! ! first, last, next : integer; 27090 942 343 ! ! ! ! ! ! text : ARRAY (1..i-6+i) OF byte; 27100 943 344 ! ! ! ! ! END DO 27110 944 345 ! ! ! ! ! BEGIN 27120 945 346 ! ! ! ! ! ! (* index error has been seen here, next=81 *) 27130 946 347 ! ! ! ! ! ! IF next > (i-6+i) THEN next := (i-6+i); 27140 947 348 ! ! ! ! ! ! buf.text(next):=data_byte; 27150 948 349 ! ! ! ! ! ! next:=next+1; 27160 949 350 ! ! ! ! ! ! IF next >= top THEN 27170 950 351 ! ! ! ! ! ! buf.next:=next; 27180 951 352 ! ! ! ! ! END; 27190 952 353 ! ! ! ! ! IF next>=top THEN 27200 953 354 ! ! ! ! ! stop_actual_request 27210 954 355 ! ! ! ! ! ( ok_result, channel_no); 27220 955 356 ! ! ! ! ! outword( packed_word( data_byte, channel_no), channelmessage); 27230 956 357 ! ! ! ! END 27240 957 358 ! ! ! END; 27250 958 359 ! ! ! IF channel_descriptor(channel_no-1).reading_tty THEN 27260 959 360 ! ! ! IF timeout<normal_time THEN 27270 960 361 ! ! ! timeout:=normal_time; 27280 961 362 ! ! END; (* case read_tty *) 27290 962 363 ! ! \f hjlaplst 81.05.04. 08.25. page 32 28010 963 364 ! ! tty_write_channel : 28020 964 365 ! ! 28030 965 366 ! ! IF NOT reading_tty THEN 28040 966 367 ! ! <*r 28050 967 368 ! ! IF ready_to_send(channel_no) THEN 28060 968 369 ! ! r*> 28070 969 370 ! ! BEGIN 28080 970 371 ! ! ! i:= request^.size; 28090 971 372 ! ! ! 28100 972 373 ! ! ! LOCK request AS buf : RECORD 28110 973 374 ! ! ! ! first, last, next : integer; 28120 974 375 ! ! ! ! text : ARRAY (1..i-6+i) OF byte; 28130 975 376 ! ! ! END DO 28140 976 377 ! ! ! BEGIN 28150 977 378 ! ! ! ! 28160 978 379 ! ! ! ! (*q if test_b then 28170 979 380 ! ! ! ! begin 28180 980 381 ! ! ! ! testout( z, "tty-w-next ", next); 28190 981 382 ! ! ! ! testout( z, "tty-w-ch ", buf.text(next)); 28200 982 383 ! ! ! ! end; q*) 28210 983 384 ! ! ! ! 28220 984 385 ! ! ! ! outword ( packed_word( buf.text(next), channel_no), channelmessage); 28230 985 386 ! ! ! ! next:= next+1; 28240 986 387 ! ! ! ! IF next>= top THEN (* terminate *) 28250 987 388 ! ! ! ! buf.next:= next; 28260 988 389 ! ! ! END; 28270 989 390 ! ! ! IF next>=top THEN 28280 990 391 ! ! ! stop_actual_request 28290 991 392 ! ! ! ( ok_result, channel_no) 28300 992 393 ! ! END; 28310 993 394 ! ! <*r 28320 994 395 ! ! ELSE 28330 995 396 ! ! stop_actual_request 28340 996 397 ! ! ( write_error, channel_no); 28350 997 398 ! ! r*> 28360 998 399 ! ! 28370 999 400 ! ! \f hjlaplst 81.05.04. 08.25. page 33 29010 1000 401 ! ! echo_nl_on_channel : 29020 1001 402 ! ! BEGIN 29030 1002 403 ! ! ! (*ttestout(z,"nl ",timeout);t*) 29040 1003 404 ! ! ! outword( packed_word( nl, channel_no), channelmessage); 29050 1004 405 ! ! ! IF reading_tty THEN 29060 1005 406 ! ! ! stop_actual_request( ok_result, channel_no+1); 29070 1006 407 ! ! ! channel_kind:=tty_write_channel; 29080 1007 408 ! ! END; 29090 1008 409 ! ! 29100 1009 410 ! ! tty_wait_cr : 29110 1010 411 ! ! BEGIN 29120 1011 412 ! ! ! outword(packed_word(cr,channel_no),channelmessage); 29130 1012 413 ! ! ! channel_kind:=tty_wait_nl; 29140 1013 414 ! ! ! (*ttestout(z,"esc cr ",timeout);t*) 29150 1014 415 ! ! END; 29160 1015 416 ! ! 29170 1016 417 ! ! tty_wait_nl : 29180 1017 418 ! ! BEGIN 29190 1018 419 ! ! ! outword(packed_word(nl,channel_no),channelmessage); 29200 1019 420 ! ! ! channel_kind:=tty_wait_input; 29210 1020 421 ! ! ! (*ttestout(z,"esc nl ",timeout);t*) 29220 1021 422 ! ! END; 29230 1022 423 ! ! 29240 1023 424 ! ! tty_wait_input : 29250 1024 425 ! ! BEGIN 29260 1025 426 ! ! END; 29270 1026 427 ! ! OTHERWISE 29280 1027 428 ! ! BEGIN 29290 1028 429 ! ! END 29300 1029 430 ! END; 29310 1030 431 END; 29320 1031 \f hjlaplst 81.05.04. 08.25. page 34 30010 1032 (*********************************************************** 30020 1033 * * 30030 1034 * high level lam-driver * 30040 1035 * * 30050 1036 * converts an interrupt to a signal to the level-0-driver * 30060 1037 * * 30070 1038 * handles input only * 30080 1039 ************************************************************) 30090 1040 30100 1041 PROCESS highlevellamdriver( VAR lamsem: semaphore); 30110 1042 30120 1043 CONST 30130 1044 readytosend= 24; 30140 1045 startscanner = -1; 30150 1046 interrupt_ok=40; 30160 1047 no_input=255; 30170 1048 30180 1049 TYPE 30190 1050 dataword 30200 1051 = PACKED RECORD 30210 1052 ! data:byte; 30220 1053 ! unused:0..3; 30230 1054 ! error:boolean; 30240 1055 ! port_and_bit15: 0..31; 30250 1056 END; 30260 1057 30270 1058 VAR 30280 1059 channelmessage,ref: reference; 30290 1060 indata: dataword; 30300 1061 status: integer; 30310 1062 30320 1063 PROCEDURE controlclr(x:integer; VAR y:reference); EXTERNAL; 30330 1064 (* writes controle and clears interrupt *) 30340 1065 30350 1066 PROCEDURE inword( VAR x: dataword; VAR y: reference); EXTERNAL; 30360 1067 (* reads one word *) 30370 1068 30380 1069 PROCEDURE sense( VAR x:integer; y:integer; VAR z:reference); EXTERNAL; 30390 1070 (* gets status *) 30400 1071 \f hjlaplst 81.05.04. 08.25. page 35 31010 1072 BEGIN 31020 1073 1 ! 31030 1074 2 ! wait(channelmessage,lamsem); 31040 1075 3 ! (* wait for a channelmessage to arrive *) 31050 1076 4 ! 31060 1077 5 ! CHANNEL channelmessage DO 31070 1078 6 ! WHILE true DO 31080 1079 7 ! BEGIN 31090 1080 8 ! ! controlclr(startscanner,channelmessage); 31100 1081 9 ! ! (* write control and clear interrupt *) 31110 1082 10 ! ! inword(indata,channelmessage); 31120 1083 11 ! ! (* read one word of input *) 31130 1084 12 ! ! wait(ref,lamsem); 31140 1085 13 ! ! (* wait for inputbuffer at lamsem *) 31150 1086 14 ! ! WITH indata,ref^ DO 31160 1087 15 ! ! BEGIN 31170 1088 16 ! ! ! u2:=interrupt_ok; 31180 1089 17 ! ! ! IF (port_and_bit15 MOD 2) = 0 THEN 31190 1090 18 ! ! ! (* it is an outputinterrupt *) 31200 1091 19 ! ! ! u3:=no_input 31210 1092 20 ! ! ! ELSE 31220 1093 21 ! ! ! IF error THEN 31230 1094 22 ! ! ! BEGIN 31240 1095 23 ! ! ! ! sense(status, port_and_bit15, channelmessage); 31250 1096 24 ! ! ! ! u2 := status MOD 64; 31260 1097 25 ! ! ! END 31270 1098 26 ! ! ! ELSE 31280 1099 27 ! ! ! u3:=data; 31290 1100 28 ! ! ! u4:=port_and_bit15; 31300 1101 29 ! ! ! 31310 1102 30 ! ! ! (******************************* 31320 1103 31 ! ! ! * +1 overrun 31330 1104 32 ! ! ! * +2 framing error 31340 1105 33 ! ! ! * status = 0 +4 parity error 31350 1106 34 ! ! ! * +8 data set ready 31360 1107 35 ! ! ! * +16 ready for sending 31370 1108 36 ! ! ! * +32 data carrier detector 31380 1109 37 ! ! ! ********************************) 31390 1110 38 ! ! ! 31400 1111 39 ! ! END; 31410 1112 40 ! ! return(ref); 31420 1113 41 ! END 31430 1114 42 END; 31440 1115 \f hjlaplst 81.05.04. 08.25. page 36 32010 1116 (******************************************************** 32020 1117 * initialization * 32030 1118 *********************************************************) 32040 1119 32050 1120 BEGIN 32060 1121 1 ! 32070 1122 2 ! testopen(z, own.incname, opsem); 32080 1123 3 ! 32090 1124 4 ! testout( z, version, al_env_version); 32100 1125 5 ! 32110 1126 6 ! (* create and start high level lamdriver *) 32120 1127 7 ! IF create( "highlevellam", highlevellamdriver(lamsem), driver, store ) = 0 32130 1128 8 ! THEN start(driver,prio) 32140 1129 9 ! (*q else 32150 1130 10 ! if test_b then 32160 1131 11 ! testout(z,"create error",0) q*) ; 32170 1132 12 ! 32180 1133 13 ! (* first buffer from lampool is used as a copy of channelmess *) 32190 1134 14 ! (*q if test_b then 32200 1135 15 ! testout(z, "lam-h start ", 0); q*) 32210 1136 16 ! 32220 1137 17 ! alloc(ref,lampool,mainsem.s^); 32230 1138 18 ! 32240 1139 19 ! IF (reservech(channelmessage, level,mask) + copychm(ref,channelmessage) <> 1) AND test_b THEN 32250 1140 20 ! (*q testout(z,"res.ch error",reservech(channelmessage, level,mask)) q*) ; 32260 1141 21 ! (* if reservation of channel went well, send copy of channelmess to lamdriver *) 32270 1142 22 ! signal(ref,lamsem); 32280 1143 23 ! 32290 1144 24 ! (* get one timeoutbuffer *) 32300 1145 25 ! alloc(ref,timerpool,mainsem.s^); 32310 1146 26 ! (* delay is set to u3*2**u4 = 1 sec *) 32320 1147 27 ! ref^.u1 := 6; 32330 1148 28 ! ref^.u3:=250; ref^.u4:=2; 32340 1149 29 ! (* send to systemtimer *) 32350 1150 30 ! sendtimer(ref); 32360 1151 31 ! \f hjlaplst 81.05.04. 08.25. page 37 33010 1152 32 ! (* get rest of inputbuffers and send them to lamdriver *) 33020 1153 33 ! 33030 1154 34 ! FOR channel_no:=2 TO no_of_lambufs DO 33040 1155 35 ! BEGIN 33050 1156 36 ! ! alloc(ref, lampool, mainsem.s^); 33060 1157 37 ! ! ref^.u1 := 6; 33070 1158 38 ! ! signal(ref,lamsem); 33080 1159 39 ! END; 33090 1160 40 ! 33100 1161 41 ! (* all devicedescriptors are initialized *) 33110 1162 42 ! 33120 1163 43 ! FOR channel_no:=0 TO max_channel_no DO 33130 1164 44 ! WITH channel_descriptor( channel_no) DO 33140 1165 45 ! BEGIN 33150 1166 46 ! ! timeout := 0; 33160 1167 47 ! ! channel_kind := not_created; 33170 1168 48 ! ! interruptable := false; 33180 1169 49 ! ! reading_tty := false; 33190 1170 50 ! END; 33200 1171 51 ! \f hjlaplst 81.05.04. 08.25. page 38 34010 1172 52 ! (******************************************************** 34020 1173 53 ! * level-0-lam * 34030 1174 54 ! * * 34040 1175 55 ! * sends output directly to the channel * 34050 1176 56 ! * handles inputbuffers from highlevel lamdriver * 34060 1177 57 ! * * 34070 1178 58 ! *********************************************************) 34080 1179 59 ! 34090 1180 60 ! REPEAT (* main loop *) 34100 1181 61 ! ! (* wait for buffer on inputsemaphore *) 34110 1182 62 ! ! 34120 1183 63 ! ! wait(ref,mainsem.w^); 34130 1184 64 ! ! \f hjlaplst 81.05.04. 08.25. page 39 35010 1185 65 ! ! IF ownertest(lampool,ref) THEN 35020 1186 66 ! ! BEGIN 35030 1187 67 ! ! ! (*q if test_b then 35040 1188 68 ! ! ! testout( z, "interrupt on", ref^.u4); q*) 35050 1189 69 ! ! ! 35060 1190 70 ! ! ! WITH channel_descriptor(ref^.u4) DO 35070 1191 71 ! ! ! 35080 1192 72 ! ! ! IF interruptable THEN 35090 1193 73 ! ! ! IF (NOT nil(request)) OR (channel_kind>=echo_nl_on_channel) THEN 35100 1194 74 ! ! ! BEGIN 35110 1195 75 ! ! ! ! status := ref^.u2; 35120 1196 76 ! ! ! ! IF status = write_read_ok THEN 35130 1197 77 ! ! ! ! handle_ok_lam_int(ref^.u3, ref^.u4) 35140 1198 78 ! ! ! ! ELSE 35150 1199 79 ! ! ! ! BEGIN 35160 1200 80 ! ! ! ! ! stop_actual_request 35170 1201 81 ! ! ! ! ! (3*8 + transient_error,ref^.u4); 35180 1202 82 ! ! ! ! ! set_lam_control( ref^.u4); 35190 1203 83 ! ! ! ! ! <* 35200 1204 84 ! ! ! ! ! END 35210 1205 85 ! ! ! ! ! OTHERWISE 35220 1206 86 ! ! ! ! ! BEGIN 35230 1207 87 ! ! ! ! ! stop_actual_request 35240 1208 88 ! ! ! ! ! (persistent_error, ref^.u4); 35250 1209 89 ! ! ! ! ! status := ref^.u2; 35260 1210 90 ! ! ! ! ! start_new_channel(ref^.u4); 35270 1211 91 ! ! ! ! ! (*q if test_b then 35280 1212 92 ! ! ! ! ! testout(z,"hwstatus= 8.",((ref^.u2 div 8)*10+(ref^.u2 mod 8))*100+ref^.u4); q*) 35290 1213 93 ! ! ! ! ! *> 35300 1214 94 ! ! ! ! END; 35310 1215 95 ! ! ! END; 35320 1216 96 ! ! ! 35330 1217 97 ! ! ! signal(ref,lamsem); 35340 1218 98 ! ! END 35350 1219 99 ! ! \f hjlaplst 81.05.04. 08.25. page 40 36010 1220 100 ! ! ELSE 36020 1221 101 ! ! (* it is a timeoutbuffer from systemtimer *) 36030 1222 102 ! ! IF ownertest(timerpool,ref) THEN 36040 1223 103 ! ! BEGIN 36050 1224 104 ! ! ! ref^.u3:=250; ref^.u4:=2; 36060 1225 105 ! ! ! sendtimer(ref); 36070 1226 106 ! ! ! FOR channel_no:=0 TO 31 DO WITH channel_descriptor(channel_no) DO 36080 1227 107 ! ! ! IF timeout>0 THEN 36090 1228 108 ! ! ! BEGIN 36100 1229 109 ! ! ! ! timeout:=timeout-1; 36110 1230 110 ! ! ! ! IF timeout=0 THEN 36120 1231 111 ! ! ! ! IF request^.u1=read_tty THEN 36130 1232 112 ! ! ! ! IF NOT nil(channel_descriptor(channel_no-1).request) THEN 36140 1233 113 ! ! ! ! BEGIN 36150 1234 114 ! ! ! ! ! channel_descriptor(channel_no-1).reading_tty := false; 36160 1235 115 ! ! ! ! ! start_next_request(channel_no-1); 36170 1236 116 ! ! ! ! ! 36180 1237 117 ! ! ! ! ! LOCK request AS buf:drvbuffer DO 36190 1238 118 ! ! ! ! ! BEGIN 36200 1239 119 ! ! ! ! ! ! IF channel_descriptor(channel_no).next>buf.first THEN 36210 1240 120 ! ! ! ! ! ! outword( packed_word( 60, channel_no), channelmessage) 36220 1241 121 ! ! ! ! ! ! ELSE 36230 1242 122 ! ! ! ! ! ! outword( packed_word(del, channel_no), channelmessage); 36240 1243 123 ! ! ! ! ! END 36250 1244 124 ! ! ! ! END 36260 1245 125 ! ! ! ! ELSE 36270 1246 126 ! ! ! ! stop_actual_request 36280 1247 127 ! ! ! ! ( timeout_err, channel_no) 36290 1248 128 ! ! ! ! ELSE 36300 1249 129 ! ! ! ! BEGIN 36310 1250 130 ! ! ! ! ! stop_actual_request 36320 1251 131 ! ! ! ! ! ( timeout_err, channel_no); 36330 1252 132 ! ! ! ! ! IF channel_no MOD 2 = 0 THEN start_new_channel ( channel_no) 36340 1253 133 ! ! ! ! END; 36350 1254 134 ! ! ! END; 36360 1255 135 ! ! END 36370 1256 136 ! ! \f hjlaplst 81.05.04. 08.25. page 41 37010 1257 137 ! ! ELSE 37020 1258 138 ! ! (* it is a delaybuffer from systemtimer *) 37030 1259 139 ! ! IF ownertest( delaypool, ref) THEN 37040 1260 140 ! ! BEGIN 37050 1261 141 ! ! ! channel_no:=ref^.u1 DIV 2; 37060 1262 142 ! ! ! WITH channel_descriptor(channel_no) DO 37070 1263 143 ! ! ! BEGIN 37080 1264 144 ! ! ! ! 37090 1265 145 ! ! ! ! CASE (ref^.u1 MOD 2) OF 37100 1266 146 ! ! ! ! ! 0: 37110 1267 147 ! ! ! ! ! BEGIN 37120 1268 148 ! ! ! ! ! ! (*q if test_b then 37130 1269 149 ! ! ! ! ! ! testout( z, "end-rts-dlay", channel_no); q*) 37140 1270 150 ! ! ! ! ! ! channel_kind:=at_write_channel; 37150 1271 151 ! ! ! ! ! ! interruptable := true; 37160 1272 152 ! ! ! ! ! ! handle_ok_lam_int( 0,channel_no); 37170 1273 153 ! ! ! ! ! END; 37180 1274 154 ! ! ! ! ! 1: 37190 1275 155 ! ! ! ! ! BEGIN 37200 1276 156 ! ! ! ! ! ! (*q if test_b then 37210 1277 157 ! ! ! ! ! ! testout( z, "end-rtr-dlay", channel_no); q*) 37220 1278 158 ! ! ! ! ! ! IF request^.u1 = write_at THEN stop_actual_request 37230 1279 159 ! ! ! ! ! ! ( ok_result, channel_no) 37240 1280 160 ! ! ! ! ! ! ELSE stop_actual_request 37250 1281 161 ! ! ! ! ! ! ( go_on_read, channel_no); 37260 1282 162 ! ! ! ! ! END; 37270 1283 163 ! ! ! ! ! OTHERWISE (*q testout( z, "timer fault ", channel_no) q*); 37280 1284 164 ! ! ! ! END; 37290 1285 165 ! ! ! ! 37300 1286 166 ! ! ! ! release(ref); 37310 1287 167 ! ! ! END 37320 1288 168 ! ! END 37330 1289 169 ! ! 37340 1290 170 ! ! ELSE 37350 1291 171 ! ! IF ref^.u3 = dummy_route THEN return ( ref) 37360 1292 172 ! ! \f hjlaplst 81.05.04. 08.25. page 42 38010 1293 173 ! ! ELSE 38020 1294 174 ! ! (* it is a userbuffer *) 38030 1295 175 ! ! 38040 1296 176 ! ! BEGIN 38050 1297 177 ! ! ! (* devicenumber is equal to portno *2 *) 38060 1298 178 ! ! ! channel_no:=ref^.u2 * 2; 38070 1299 179 ! ! ! 38080 1300 180 ! ! ! (* if command is pure read the devicenumber is uneven *) 38090 1301 181 ! ! ! IF ref^.u1 MOD 4 = 1 THEN channel_no:=channel_no+1; 38100 1302 182 ! ! ! 38110 1303 183 ! ! ! CASE ref^.u1 OF 38120 1304 184 ! ! ! ! 38130 1305 185 ! ! ! ! create_at_ch: 38140 1306 186 ! ! ! ! BEGIN 38150 1307 187 ! ! ! ! ! createchannel(at_write_channel, at_read_channel); 38160 1308 188 ! ! ! ! ! start_new_channel(channel_no); 38170 1309 189 ! ! ! ! END; 38180 1310 190 ! ! ! ! 38190 1311 191 ! ! ! ! create_alc_ch: 38200 1312 192 ! ! ! ! BEGIN 38210 1313 193 ! ! ! ! ! createchannel(alc_write_channel, alc_read_channel); 38220 1314 194 ! ! ! ! ! start_new_channel(channel_no); 38230 1315 195 ! ! ! ! END; 38240 1316 196 ! ! ! ! 38250 1317 197 ! ! ! ! create_tty_ch: 38260 1318 198 ! ! ! ! BEGIN 38270 1319 199 ! ! ! ! ! createchannel(tty_write_channel, tty_read_channel); 38280 1320 200 ! ! ! ! ! channel_descriptor(channel_no).interruptable:=true; 38290 1321 201 ! ! ! ! ! channel_descriptor(channel_no+1).interruptable:=true; 38300 1322 202 ! ! ! ! ! start_new_channel(channel_no); 38310 1323 203 ! ! ! ! END; 38320 1324 204 ! ! ! ! 38330 1325 205 ! ! ! ! 38340 1326 206 ! ! ! ! \f hjlaplst 81.05.04. 08.25. page 43 39010 1327 207 ! ! ! ! read_at, write_at, write_read_at : 39020 1328 208 ! ! ! ! 39030 1329 209 ! ! ! ! WITH channel_descriptor(channel_no) DO 39040 1330 210 ! ! ! ! IF (channel_kind<at_write_channel) OR (channel_kind > at_read_wait) THEN 39050 1331 211 ! ! ! ! BEGIN 39060 1332 212 ! ! ! ! ! ref^.u2 := illegal_function; 39070 1333 213 ! ! ! ! ! return( ref) 39080 1334 214 ! ! ! ! END 39090 1335 215 ! ! ! ! ELSE 39100 1336 216 ! ! ! ! IF NOT nil(request) THEN signal(ref,queue(channel_no)) 39110 1337 217 ! ! ! ! ELSE 39120 1338 218 ! ! ! ! BEGIN 39130 1339 219 ! ! ! ! ! request:=:ref; 39140 1340 220 ! ! ! ! ! start_next_request(channel_no); 39150 1341 221 ! ! ! ! END; 39160 1342 222 ! ! ! ! \f hjlaplst 81.05.04. 08.25. page 44 40010 1343 223 ! ! ! ! alc_read, alc_write, write_alc_read : 40020 1344 224 ! ! ! ! 40030 1345 225 ! ! ! ! BEGIN 40040 1346 226 ! ! ! ! ! IF ref^.u3 >= command THEN 40050 1347 227 ! ! ! ! ! BEGIN 40060 1348 228 ! ! ! ! ! ! LOCK ref AS buf : drvbuffer DO 40070 1349 229 ! ! ! ! ! ! BEGIN 40080 1350 230 ! ! ! ! ! ! ! i := buf.first; 40090 1351 231 ! ! ! ! ! ! ! j := buf.last; 40100 1352 232 ! ! ! ! ! ! END; 40110 1353 233 ! ! ! ! ! ! k:= ref^.size; 40120 1354 234 ! ! ! ! ! ! 40130 1355 235 ! ! ! ! ! ! IF (i<6) OR (j<i) OR (j > (k-1+k)) THEN 40140 1356 236 ! ! ! ! ! ! BEGIN 40150 1357 237 ! ! ! ! ! ! ! (*q if test_b then 40160 1358 238 ! ! ! ! ! ! ! testout( z,"buffer small", ref^.size); q*) 40170 1359 239 ! ! ! ! ! ! ! ref^.u2:=buffer_too_small; 40180 1360 240 ! ! ! ! ! ! ! return( ref); 40190 1361 241 ! ! ! ! ! ! END; 40200 1362 242 ! ! ! ! ! END; 40210 1363 243 ! ! ! ! ! 40220 1364 244 ! ! ! ! ! 40230 1365 245 ! ! ! ! ! IF NOT nil( ref) THEN 40240 1366 246 ! ! ! ! ! WITH channel_descriptor(channel_no) DO 40250 1367 247 ! ! ! ! ! IF (channel_kind<alc_write_channel) OR (channel_kind>alc_read_channel) THEN 40260 1368 248 ! ! ! ! ! BEGIN 40270 1369 249 ! ! ! ! ! ! ref^.u2:=illegal_function; 40280 1370 250 ! ! ! ! ! ! return( ref); 40290 1371 251 ! ! ! ! ! END 40300 1372 252 ! ! ! ! ! ELSE 40310 1373 253 ! ! ! ! ! BEGIN 40320 1374 254 ! ! ! ! ! ! 40330 1375 255 ! ! ! ! ! ! IF NOT nil(request) THEN signal( ref, queue(channel_no)) 40340 1376 256 ! ! ! ! ! ! ELSE 40350 1377 257 ! ! ! ! ! ! BEGIN 40360 1378 258 ! ! ! ! ! ! ! request :=: ref; 40370 1379 259 ! ! ! ! ! ! ! start_next_request(channel_no); 40380 1380 260 ! ! ! ! ! ! ! IF channel_kind=alc_write_channel THEN handle_ok_lam_int(0,channel_no); 40390 1381 261 ! ! ! ! ! ! END; 40400 1382 262 ! ! ! ! ! END 40410 1383 263 ! ! ! ! END; 40420 1384 264 ! ! ! ! \f hjlaplst 81.05.04. 08.25. page 45 41010 1385 265 ! ! ! ! read_tty: 41020 1386 266 ! ! ! ! 41030 1387 267 ! ! ! ! WITH channel_descriptor(channel_no) DO 41040 1388 268 ! ! ! ! IF channel_kind < tty_write_channel THEN 41050 1389 269 ! ! ! ! BEGIN 41060 1390 270 ! ! ! ! ! ref^.u2:=illegal_function; 41070 1391 271 ! ! ! ! ! return(ref); 41080 1392 272 ! ! ! ! END 41090 1393 273 ! ! ! ! ELSE 41100 1394 274 ! ! ! ! BEGIN 41110 1395 275 ! ! ! ! ! LOCK ref AS buf : drvbuffer DO 41120 1396 276 ! ! ! ! ! BEGIN 41130 1397 277 ! ! ! ! ! ! i:= buf.first; 41140 1398 278 ! ! ! ! ! ! j:= buf.last; 41150 1399 279 ! ! ! ! ! END; 41160 1400 280 ! ! ! ! ! IF (j<i) 41170 1401 281 ! ! ! ! ! OR (i<1) 41180 1402 282 ! ! ! ! ! OR (j-i >= 2*ref^.size-6) THEN 41190 1403 283 ! ! ! ! ! BEGIN 41200 1404 284 ! ! ! ! ! ! ref^.u2 := illegal_function; 41210 1405 285 ! ! ! ! ! ! return( ref); 41220 1406 286 ! ! ! ! ! END; 41230 1407 287 ! ! ! ! ! 41240 1408 288 ! ! ! ! ! IF NOT nil( ref) THEN 41250 1409 289 ! ! ! ! ! IF NOT nil ( request) THEN signal ( ref, queue(channel_no)) 41260 1410 290 ! ! ! ! ! ELSE 41270 1411 291 ! ! ! ! ! BEGIN (* start now *) 41280 1412 292 ! ! ! ! ! ! request :=: ref; 41290 1413 293 ! ! ! ! ! ! (* look if write_tty is going on *) 41300 1414 294 ! ! ! ! ! ! IF nil(channel_descriptor(channel_no-1).request) THEN 41310 1415 295 ! ! ! ! ! ! start_next_request(channel_no) 41320 1416 296 ! ! ! ! ! END; 41330 1417 297 ! ! ! ! END; 41340 1418 298 ! ! ! ! \f hjlaplst 81.05.04. 08.25. page 46 42010 1419 299 ! ! ! ! write_tty: 42020 1420 300 ! ! ! ! 42030 1421 301 ! ! ! ! WITH channel_descriptor(channel_no) DO 42040 1422 302 ! ! ! ! IF channel_kind<tty_write_channel THEN 42050 1423 303 ! ! ! ! BEGIN 42060 1424 304 ! ! ! ! ! ref^.u2:=illegal_function; 42070 1425 305 ! ! ! ! ! return(ref); 42080 1426 306 ! ! ! ! END 42090 1427 307 ! ! ! ! ELSE 42100 1428 308 ! ! ! ! BEGIN 42110 1429 309 ! ! ! ! ! LOCK ref AS buf : drvbuffer DO 42120 1430 310 ! ! ! ! ! BEGIN 42130 1431 311 ! ! ! ! ! ! i := buf.first; 42140 1432 312 ! ! ! ! ! ! j := buf.last; 42150 1433 313 ! ! ! ! ! ! buf.next:=buf.first; 42160 1434 314 ! ! ! ! ! END; 42170 1435 315 ! ! ! ! ! IF (j<i) 42180 1436 316 ! ! ! ! ! OR (i<1) 42190 1437 317 ! ! ! ! ! OR (j-i >= 2*ref^.size-6) THEN 42200 1438 318 ! ! ! ! ! BEGIN 42210 1439 319 ! ! ! ! ! ! ref^.u2 := illegal_function; 42220 1440 320 ! ! ! ! ! ! return( ref); 42230 1441 321 ! ! ! ! ! END; 42240 1442 322 ! ! ! ! ! IF NOT nil( ref) THEN 42250 1443 323 ! ! ! ! ! IF NOT nil (request) THEN 42260 1444 324 ! ! ! ! ! signal ( ref, queue(channel_no)) 42270 1445 325 ! ! ! ! ! ELSE 42280 1446 326 ! ! ! ! ! BEGIN 42290 1447 327 ! ! ! ! ! ! request :=: ref; 42300 1448 328 ! ! ! ! ! ! (* look if read_tty is going on *) 42310 1449 329 ! ! ! ! ! ! 42320 1450 330 ! ! ! ! ! ! IF channel_kind <> tty_wait_input THEN 42330 1451 331 ! ! ! ! ! ! IF reading_tty THEN 42340 1452 332 ! ! ! ! ! ! WITH channel_descriptor(channel_no+1) DO 42350 1453 333 ! ! ! ! ! ! LOCK request AS buf:drvbuffer DO 42360 1454 334 ! ! ! ! ! ! BEGIN 42370 1455 335 ! ! ! ! ! ! ! IF next>buf.first THEN 42380 1456 336 ! ! ! ! ! ! ! timeout:=normal_time 42390 1457 337 ! ! ! ! ! ! ! ELSE 42400 1458 338 ! ! ! ! ! ! ! timeout:=no_time 42410 1459 339 ! ! ! ! ! ! END 42420 1460 340 ! ! ! ! ! ! ELSE 42430 1461 341 ! ! ! ! ! ! BEGIN 42440 1462 342 ! ! ! ! ! ! ! start_next_request(channel_no); 42450 1463 343 ! ! ! ! ! ! ! IF NOT nil( request) THEN 42460 1464 344 ! ! ! ! ! ! ! handle_ok_lam_int ( 0, channel_no); \f hjlaplst 81.05.04. 08.25. page 47 42470 1465 345 ! ! ! ! ! ! END; 42480 1466 346 ! ! ! ! ! END; 42490 1467 347 ! ! ! ! END 42500 1468 348 ! ! ! ! \f hjlaplst 81.05.04. 08.25. page 48 43010 1469 349 ! ! ! ! OTHERWISE 43020 1470 350 ! ! ! ! BEGIN 43030 1471 351 ! ! ! ! ! (*q if test_b then 43040 1472 352 ! ! ! ! ! testout ( z, "unknown ", ref^.u1); q*) 43050 1473 353 ! ! ! ! ! ref^.u2:=illegal_function; 43060 1474 354 ! ! ! ! ! return(ref); 43070 1475 355 ! ! ! ! END 43080 1476 356 ! ! ! END; 43090 1477 357 ! ! ! 43100 1478 358 ! ! END (* user request *) 43110 1479 359 ! ! 43120 1480 360 ! UNTIL forever 43130 1481 361 ! 43140 1482 362 END. (* lam driver *) 43150 1483 \f hjlaplst 81.05.04. 08.25. page 49 0 33* 69* 154* 156* 166* 174* 183* 223* 291* 307 381 483 526 671 698 764 847 872 1053* 1055* 1089 1127 1163 1166 1226 1227 1230 1252 1266: 1272 1380 1464 1 30* 43* 70* 166* 204* 284 300 303 308 365 374 391 446 447 451 453 454 487 490 496 497 505 506 561 633 652 664: 674 692 696 697 700 702 716 754: 781 785 844 850 851 863 870 884 889 903 907 911 917 920 922 924 928 936 942 948 958 974 985 1005 1045* 1139 1229 1232 1234 1235 1274: 1301 1301 1321 1355 1401 1414 1436 1452 2 30* 34* 71* 95* 115* 264 284 299 300 302 303 343 354 382 427 534 535 666 668: 758 761: 925 1089 1148 1154 1224 1252 1261 1265 1298 1402 1437 3 72* 96* 578 673 677: 765 768: 1053* 1201 4 42* 73* 681 686: 728 772 776: 1301 5 50* 65* 74* 87* 90* 673 698 703 706: 765 786 791: 6 75* 118* 692 718 722: 781 794 799: 884 887 887 917 942 946 946 974 1147 1157 1355 1402 1437 7 41* 49* 76* 174* 803 808: 8 77* 97* 115* 578 703 728 1201 9 78* 10 40* 79* 86* 98* 393 11 80* 12 81* 13 89* 99* 15 29* 183* 291* 16 203* 19 65* 100* 20 65* 21 65* 24 57* 1044* 27 101* 28 65* 105* 29 65* 31 1055* 1226 32 37* 49* 50* 102* 578 40 53* 1046* 41 54* 44 55* 45 56* 60 1240 64 1096 127 103* 128 307 200 35* 250 1148 1224 \f hjlaplst 81.05.04. 08.25. page 50 255 1047* 256 354 427 472 535 741 824 alc_read 62* 1343: alc_read_channel <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 75* 392 459 658: 1313 1367 alc_write 61* 1343: alc_write_channel <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 74* 459 745: 1313 1367 1380 alfa 230* 233* alloc 261 281 1137 1145 1156 al_env_version <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 1124 as 305: 371: 387: 623: 645: 690: 712: 769: 779: 849: 882: 905: 915: 940: 972: 1237: 1348: 1395: 1429: 1453: atbuffer 165* 305 623 645 at_read_channel <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 72* 642: 1307 at_read_wait 73* 421 425: 437 1330 at_write_channel <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 70* 351 418: 429 536 607: 1270 1307 1330 at_write_wait <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 71* 359 boolean 185* 186* 222* 568* 1054* bs 97* 902: 908 buf 305: 307 308 371: 373 374 387: 389 389 623: 632 645: 646= 690: 695 695 696 696 699 699 712: 714 714 769: 771 771 779: 784 784 785 785 786 786 849: 851 853 882: 888 891 905: 906 915: 921 924 925 928 940: 947 950 972: 984 987 1237: 1239 1348: 1350 1351 1395: 1397 1398 1429: 1431 1432 1433 1433 1453: 1455 buffer_too_small <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 117* 1359 byte 166* 173* 184* 219* 249* 407* 519* 585* 692 781 884 917 942 974 1052* c 338* 354= 355 409* 427= 428 532* 535= 537= 537 539= 539 541 channel 1077 channelmessage <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 196* 355 428 541 576 632 823 857 897 908 929 955 984 1003 1011 1018 1059* 1074 1077 1080 1082 1095 1139 1139 1240 1242 channelrecord <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 180* 214* channelset 154* 175* 214* 216* 249* 337* 407* 519* 531* 544* 568* 585* channel_descriptor <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 214* 299 300 302 303 340 365 414 437 446 447 453 453 458 474 478 481 487 490 496 505 536 554 556 562 574 603 844 863 873 878 903 911 920 936 958 1164 1190 1226 1232 1234 1239 1262 1320 1321 1329 1366 1387 1414 1421 1452 \f hjlaplst 81.05.04. 08.25. page 51 channel_kind 183* 299= 300= 351 359= 364 392 416 421= 429= 437 459 459 485 501 536 605 848= 856= 899= 920= 1006= 1012= 1019= 1167= 1193 1270= 1330 1330 1367 1367 1380 1388 1422 1450 channel_no 209* 249* 254* 264 274* 284 337* 340 343 354 354 358 365 407* 414 420 427 427 437 446 447 451 453 453 454 458 474 478 481 484 487 490 492 496 497 505 506 509 513 519* 527 531* 534= 534 534 535 535 536 544* 553 554 556 559 561= 561 562 565 568* 574 576 585* 603 615 617 632 655 703 728 735 811 823 844 857 858 863 870 873 874 878 895 897 903 908 911 920 929 936 954 955 958 984 991 1003 1005 1011 1018 1154= 1163= 1164 1226= 1226 1232 1234 1235 1239 1240 1242 1247 1251 1252 1252 1261= 1262 1272 1279 1281 1298= 1301= 1301 1308 1314 1320 1321 1322 1329 1336 1340 1366 1375 1379 1380 1387 1409 1414 1415 1421 1444 1452 1462 1464 checksum 187* 671= 725 741= 741 764= 802 824= 824 command 105* 386 673 711 765 1346 control 236* 355 428 541 controlclr 1063* 1080 controle_byte <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 219* 307= 354 427 535 copychm 227* 1139 cr 99* 857 897 910: 929 1011 create 1127 createchannel <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 291* 1307 1313 1319 create_alc_ch <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 64* 1311: create_at_ch 1305: create_done 116* 559 565 868 create_it_ch 64* create_tty_ch <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 1317: cs 100* 862: 888 data 173* 525= 1052* 1099 databits 519* 525 dataword 1050* 1060* 1066* data_byte 585* 646 666 670 672 673 680 695 709 725 741 757= 763= 765 771= 784= 793= 802= 823 824 840 921 947 955 del 103* 902: 1242 delaypool 203* 261 281 1259 driver 198* 1127 1128 drvbuffer 159* 371 387 712 769 849 905 1237 1348 1395 1429 1453 dummy_route 1291 echo_nl_on_channel <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 78* 899 920 1000: 1193 \f hjlaplst 81.05.04. 08.25. page 52 error 1054* 1093 esc 101* 842: etx 96* 709 793 external 227* 230* 233* 236* 239* 243* 1063* 1066* 1069* false 45* 490 496 512 581 1168 1169 1234 first 161* 389 691: 714 771 780: 883: 906 916: 941: 973: 1239 1350 1397 1431 1433 1455 forever 45* 1480 go_on_read 118* 440 615 1281 handle_ok_lam_int <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 585* 1197 1272 1380 1464 highlevellamdriver <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 1041* 1127 i 221* 296* 298= 299 300 302 303 307 308 689= 692 692 778= 781 781 880= 884 884 887 887 887 887 913= 917 917 938= 942 942 946 946 946 946 970= 974 974 1350= 1355 1355 1397= 1400 1401 1402 1431= 1435 1436 1437 illegal_function <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 114* 117* 1332 1369 1390 1404 1424 1439 1473 ill_func 114* incname 1122 indata 1060* 1082 1086 info 692: 695= 781: 784 integer 4* 5* 161* 187* 190* 191* 209* 221* 223* 227* 233* 236* 243* 243* 254* 274* 296* 338* 409* 532* 691 780 883 916 941 973 1061* 1063* 1069* 1069* interruptable <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 185* 366= 512= 1168= 1192 1271= 1320= 1321= interrupt_ok 1046* 1088 inword 1066* 1082 j 221* 1351= 1355 1355 1398= 1400 1402 1432= 1435 1437 k 221* 1353= 1355 1355 lam 2* lampool 206* 1137 1156 1185 lamsem 200* 1041* 1074 1084 1127 1142 1158 1217 lamword 171* 239* 519* 523* last 161* 374 691: 699 771 780: 786 883: 916: 941: 973: 1351 1398 1432 level 5* 1139 lock 305: 371: 387: 623: 645: 690: 712: 769: 779: 849: 882: 905: 915: 940: 972: 1237: 1348: 1395: 1429: 1453: long_time 40* mainsem 6* 261 281 1137 1145 1156 1183 mask 33* 1139 max_channel_no <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30* 154* 1163 \f hjlaplst 81.05.04. 08.25. page 53 max_port_no 29* 30* 156* next 161* 189* 373= 373 381= 389= 609 632 633= 633 646 652= 652 653 680= 691: 695 696= 696 697= 697 698 699 714= 780: 784 785= 785 786 850 851= 851 853= 853 883: 887 887= 888 889= 889 890 891= 891 893 906 907= 907 916: 921 922 924 925= 925 928= 928 941: 946 946= 947 948= 948 949 950= 950 952 973: 984 985= 985 986 987= 987 989 1239 1433= 1455 nl 98* 924 1003 1018 normal_time 41* 959 960 1456 not_created 69* 1167 no_input 1047* 1091 no_of_lambufs <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 37* 206* 1154 no_time 43* 1458 ok_result 311 617 655 735 811 895 954 991 1005 1279 old_result 184* 422= 430 670= 732 opsem 3* 1122 op_codes 65* 672 outword 239* 632 823 857 897 908 929 955 984 1003 1011 1018 1240 1242 overrun 54* overrun_and_parity <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 56* own 1122 ownertest 1185 1222 1259 packed_word 519* 528= 632 823 857 897 908 929 955 984 1003 1011 1018 1240 1242 parity 55* persistent_error <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 113* persi_err 113* pool 203* 204* 206* portset 156* 219* port_and_bit15 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 175* 527= 1055* 1089 1095 1100 prio 34* 1128 process 2* 1041* pu 4* queue 216* 451 484 870 1336 1375 1409 1444 reading_tty 186* 365= 490= 496= 845 864 903 911 936 958 965 1004 1169= 1234= 1451 readytoread 50* 427 537 readytosend 57* 1044* ready_to_send <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 568* 579= 581= read_at 1327: read_it 62* \f hjlaplst 81.05.04. 08.25. page 54 read_tty 1231 1385: ref 196* 259* 261 262 263 264 267 279* 281 282 283 284 287 298 305: 311 312 1059* 1084 1086 1112 1137 1139 1142 1145 1147 1148 1148 1150 1156 1157 1158 1183 1185 1190 1195 1197 1197 1201 1202 1217 1222 1224 1224 1225 1259 1261 1265 1286 1291 1291 1298 1301 1303 1332 1333 1336 1339 1346 1348: 1353 1359 1360 1365 1369 1370 1375 1378 1390 1391 1395: 1402 1404 1405 1408 1409 1412 1424 1425 1429: 1437 1439 1440 1442 1444 1447 1473 1474 reference 182* 196* 227* 236* 239* 243* 259* 279* 1059* 1063* 1066* 1069* release 1286 request 182* 369 371: 379 386 387: 446 449 450 451 453= 453 472 474 478 484 487 489 503 505 512 557 563 613 623: 645: 689 690: 711 712: 732 763 769: 778 779: 849: 866 868 869 870 873 880 882: 905: 913 915: 938 940: 970 972: 1193 1231 1232 1237: 1278 1336 1339= 1375 1378= 1409 1412= 1414 1443 1447= 1453: 1463 requesttosend <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 49* 354 539 reservech 1139 result 249* 407* 422 430= 440 474 return 312 450 478 869 1112 1291 1333 1360 1370 1391 1405 1425 1440 1474 rtr_delay_u3 89* 282 rtr_delay_u4 90* 283 rts_delay_u3 86* 262 rts_delay_u4 87* 263 r_kind 291* 300 s 261 281 1137 1145 1156 semaphore 200* 216* 230* 1041* sempointer 3* sendtimer 267 287 1150 1225 sense 243* 576 1069* 1095 sensesem 451 484 870 set_lam_control <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 531* 553 1202 shadow 198* short_time 42* signal 1142 1158 1217 1336 1375 1409 1444 size 689 778 880 913 938 970 1353 1402 1437 sp 102* start 1128 startscanner 1045* 1080 start_new_channel <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 544* 1252 1308 1314 1322 start_next_request <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 337* 454 492 497 506 509 513 858 874 1235 1340 1379 1415 1462 start_rtr_delay <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 274* 420 \f hjlaplst 81.05.04. 08.25. page 55 start_rts_delay <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 254* 358 status 191* 302= 303= 472 554= 576 578 1061* 1095 1096 1195= 1196 std 174* 526= stop_actual_request <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 248* 406* 558 564 614 616 654 703 727 734 810 894 953 990 1005 1200 1246 1250 1278 1280 store 35* 1127 stx 95* 666 757 testopen 230* 1122 testout 233* 1124 test_b 222* 1139 text 884: 888= 917: 921= 924= 942: 947= 974: 984 time 219* 308= 343 timeout 188* 343= 393= 393 483= 847= 872= 959 960= 1166= 1227 1229= 1229 1230 1456= 1458= timeout_err 1247 1251 timerpool 204* 1145 1222 top 190* 374= 382= 391= 609 653 662 666= 673= 673= 674= 681= 698= 700= 702 716= 718= 752 758= 765= 765= 772= 786= 794= 803= 890 893 922 949 952 986 989 transient_error <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 112* 115* 703 728 1201 transi_err 112* true 365 366 579 1078 1271 1320 1321 tst 223* ts_pointer 6* tty_read_channel <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 77* 364 485 829: 1319 tty_wait_cr 79* 848 1009: tty_wait_input <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 81* 1019 1023: 1450 tty_wait_nl 80* 856 1012 1016: tty_write_channel <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 76* 501 963: 1006 1319 1388 1422 u1 264= 284= 369 379 613 1147= 1157= 1231 1261 1265 1278 1301 1303 u2 298 311= 449= 474= 868= 1088= 1096= 1195 1298 1332= 1359= 1369= 1390= 1404= 1424= 1439= 1473= u3 262= 282= 386 711 732= 763 1091= 1099= 1148= 1197 1224= 1291 1346 u4 263= 283= 472= 1100= 1148= 1190 1197 1201 1202 1224= unused 1053* version 27* 1124 w 523* 525 526 527 528 1183 wait 1074 1084 1183 \f hjlaplst 81.05.04. 08.25. page 56 write_alc_read <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 63* 369 1343: write_at 1278 1327: write_error 115* write_it 61* write_read_at <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 379 613 1327: write_read_it <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 63* write_read_mixed <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 116* 449 write_read_ok <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 53* 302 303 554 1196 write_tty 1419: w_kind 291* 299 x 227* 230* 233* 236* 239* 243* 1063* 1066* 1069* y 227* 230* 233* 236* 239* 243* 1063* 1066* 1069* z 211* 230* 233* 243* 1069* 1122 1124 zone 211* 230* 233* \f hjlaplst 81.05.04. 08.25. page 57 AND 1 ARRAY 10 BEGIN 123 CASE 7 CONST 2 DIV 6 DO 51 ELSE 45 END 140 FOR 3 FORWARD 1 FUNCTION 3 IF 93 IN 1 MOD 11 NIL 21 NOT 19 OF 17 OR 10 OTHERWISE 5 PACKED 2 PROCEDURE 17 RECORD 10 REPEAT 1 THEN 93 TO 3 TYPE 2 UNTIL 1 VAR 23 WHILE 5 WITH 22 81.05.04. 08.25. pascal80 version 1981.04.01 name headline beginline endline appetite(words) start_rts_de 259 261 268 : 18 start_rtr_de 279 281 288 : 18 createchanne 296 298 319 : 12 start_next_r 338 340 396 : 14 stop_actual_ 409 414 516 : 15 packed_word 523 525 529 : 6 set_lam_cont 532 534 542 : 6 start_new_ch 552 553 566 : 15 ready_to_sen 573 574 583 : 7 handle_ok_la 599 603 1030 : 70 highlevellam 1044 1074 1114 : 77 lam 27 1122 1482 : 647 code: 1 . 2000 = 10000 bytes end of PASCAL80 compilation end blocksread = 53 ▶EOF◀