|
DataMuseum.dkPresents historical artifacts from the history of: RC3500 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC3500 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 161280 (0x27600) Types: TextFileVerbose Names: »tsvaclst«
└─⟦a41ae585a⟧ Bits:30001842 SW-save af projekt 1000, Alarm-system └─⟦72244f0ef⟧ └─⟦this⟧ »tsvaclst«
\f tsvaclst 81.06.16. 13.41. page 1 10 1 \f tsvaclst 81.06.16. 13.41. page 2 1010 2 (* vc(at)-connector alarmsystem *) 1020 3 1030 4 (**** short decription of process ***** 1040 5 1050 6 PROCESS vcatc ( param ); 1060 7 declarations; 1070 8 procedures; 1080 9 functions; 1090 10 1100 11 BEGIN 1110 12 start of lam-driver; 1120 13 alloc of buffers; 1130 14 initialiser variables; 1140 15 1150 16 REPEAT 1160 17 read buffer to mess_ref; 1170 18 rute , func , types := depend of u3 and u4; 1180 19 1190 20 *** classify buffer *** 1200 21 CASE rute of 1210 22 CASE types of 1220 23 1230 24 : buftype:= 1240 25 1250 26 END 1260 27 END 1270 28 1280 29 action:= acttable ( vcatc_state , buftype ); 1290 30 1300 31 *** make action *** 1310 32 CASE action of 1320 33 1 : 1330 34 2 : 1340 35 8 : lamspeak; 1350 36 16 : 1360 37 END 1370 38 1380 39 *** send buffer *** 1390 40 CASE buftype of 1400 41 1410 42 1420 43 END 1430 44 UNTIL FALSE 1440 45 END. 1450 46 ***) 1460 47 \f tsvaclst 81.06.16. 13.41. page 3 2010 48 PROCESS vcatc( 2020 49 opsem : sempointer; 2030 50 VAR 2040 51 messem , (*input to connector*) 2050 52 queuesem : !ts_pointer; (*queue of unprocessed messages*) 2060 53 VAR 2070 54 vchsem , (*output to vc-handler*) 2080 55 lamsem , (*message to lam-driver*) 2090 56 timeoutsem , (*for booking and update*) 2100 57 com_pool : !sempointer; 2110 58 VAR 2120 59 dc_macro, (*macro for own dc*) 2130 60 ts_macro: !macroaddr; (*macro for own ts*) 2140 61 micadr : integer; (*micro adr for this vc(at)*) 2150 62 canno : byte); (*cannel number to lamdriver*) 2160 63 2170 64 2180 65 \f tsvaclst 81.06.16. 13.41. page 4 3010 66 CONST 3020 67 version = "vers 3.20 /"; 3030 68 max_lbuf_needed = 5; (*------ consts used by LAMSPEAK ------*) 3040 69 max_info_bytes = 2; 3050 70 3060 71 3070 72 TYPE 3080 73 mask_unknown = RECORD 3090 74 ! fix : alarmlabel; 3100 75 ! data: alarmlabel; 3110 76 END; 3120 77 3130 78 mask_byte = RECORD 3140 79 ! fix : alarmlabel; 3150 80 ! data: ARRAY (1..4) OF byte; 3160 81 END; 3170 82 3180 83 mask_broad = RECORD 3190 84 ! fix : alarmlabel; 3200 85 ! data: alarmnetaddr; 3210 86 END; 3220 87 3230 88 mask_service = RECORD 3240 89 ! fix : alarmlabel; 3250 90 ! data: integer; 3260 91 END; 3270 92 3280 93 mask_poll = RECORD 3290 94 ! fix : alarmlabel; 3300 95 ! error_count : integer; 3310 96 ! poll_rate : integer; 3320 97 END; 3330 98 3340 99 mask_vcm = RECORD 3350 100 ! fix : alarmlabel; 3360 101 ! data : alarmnetaddr; 3370 102 ! datab: byte 3380 103 END; 3390 104 3400 105 mask_atvcdc = RECORD 3410 106 ! fix : alarmlabel; 3420 107 ! at : alarmnetaddr; 3430 108 ! vc : alarmnetaddr; 3440 109 ! dc : alarmnetaddr; 3450 110 END; 3460 111 \f tsvaclst 81.06.16. 13.41. page 5 3470 112 mask_atadr = RECORD 3480 113 ! fix : alarmlabel; 3490 114 ! entry: at_addr_e; 3500 115 END; 3510 116 3520 117 mask_atts = RECORD 3530 118 ! fix : alarmlabel; 3540 119 ! entry: at_ts_e; 3550 120 END; 3560 121 3570 122 mask_vcmat = RECORD 3580 123 ! fix : alarmlabel; 3590 124 ! entry: vcmat_e; 3600 125 END; 3610 126 3620 127 mask_test = RECORD 3630 128 ! fix : alarmlabel; 3640 129 ! data : ARRAY(1..5) OF integer; 3650 130 END; 3660 131 3670 132 ch_format = PACKED RECORD 3680 133 ! cntl_inf : byte; 3690 134 ! time_inf : byte; 3700 135 END; 3710 136 3720 137 state_type = (notready, (* initially table *) 3730 138 passive, (* waiting start poll *) 3740 139 active, (* polling state *) 3750 140 lam_talk, (* lamspeak active *) 3760 141 lam_need_buf, (* lamspeak waiting listenbuf *) 3770 142 vcatc_need_buf, (* vcatc waiting listenbuf *) 3780 143 wait_shorttime, (* waiting shorttime from vcath *) 3790 144 stop_poll); (* send stop poll mess *) 3800 145 3810 146 buf_type = (unknown, (*unknown buffer*) 3820 147 alarm , (*alarmbuffer*) 3830 148 listen , (*listen buffer*) 3840 149 table , (*buffer for update tables*) 3850 150 report , (*buffer to vc(at)*) 3860 151 service, (*buffer to vc(at)-connector*) 3870 152 testat , (*testbuffer to vc(at)*) 3880 153 operate, (*vc,dc operations*) 3890 154 clock , (*poll pulse*) 3900 155 ltime , (*longtime timeout*) 3910 156 stime , (*shorttime timeout*) 3920 157 lam , (*answer from lam-driver*) \f tsvaclst 81.06.16. 13.41. page 6 3930 158 used , (*current buffer on inner semaphore*) 3940 159 empty , (*empty buffer to return*) 3950 160 broad , (*broadcast*) 3960 161 permiss); (* dc to vc mess buffer *) 3970 162 3980 163 input_type = (from_sem , 3990 164 from_listen_ref, 4000 165 nothing ); 4010 166 4020 167 4030 168 (*------------- Types only used by the LAMSPEAK procedure ---------*) 4040 169 4050 170 to_telegram_type = PACKED RECORD 4060 171 ! to_data : 0..255; (* 8 bits *) 4070 172 ! to_opcode : 0.. 3; (* 2 bits *) 4080 173 ! to_serial_no : 0.. 1; (* 1 bit *) 4090 174 ! to_check : 0.. 31 (* 5 bits *) 4100 175 END; 4110 176 4120 177 lbuf_kind_type = (log, norm); 4130 178 4140 179 lbuf_record = RECORD 4150 180 ! kind : lbuf_kind_type; 4160 181 ! noob : integer; 4170 182 ! reci : alarmnetaddr; 4180 183 ! opco : byte; 4190 184 ! upda : 0..15; 4200 185 ! resu : 0..15; 4210 186 ! dta1 : byte; 4220 187 ! dta2 : byte; 4230 188 ! addr : alarmnetaddr 4240 189 END; 4250 190 4260 191 oknok_type = (ok , nok); (* state of transmitter line *) 4270 192 \f tsvaclst 81.06.16. 13.41. page 7 5010 193 VAR 5020 194 test : boolean := true; 5030 195 buftype : buf_type; (* type of current buffer *) 5040 196 vcatc_state : state_type; 5050 197 old_state : state_type; 5060 198 input : input_type; 5070 199 line : oknok_type; (* transmitter line state *) 5080 200 lamspeak_state : (nottele, lettertovc, polling, letterfromvc, testi); 5090 201 5100 202 5110 203 (* no of record's in tables *) 5120 204 noatadr, 5130 205 noatts , 5140 206 novcm : integer := 0; 5150 207 5160 208 (*tables*) 5170 209 atadrtable: ARRAY(1..at_addr_l) OF at_addr_e;(*atadrcode <=> netadr*) 5180 210 attstable : ARRAY(1..at_ts_l ) OF at_ts_e; (*ts addresse for at*) 5190 211 vcmtable : ARRAY(1..vcmat_l ) OF vcmat_e; (*vc addresse for potentiel guard transfer*) 5200 212 5210 213 (* DC addres *) 5220 214 own_dc, 5230 215 own_dc_log : alarmnetaddr; 5240 216 rute : byte; 5250 217 func, 5260 218 types : func_grp; 5270 219 found : boolean; (* auxiliary *) 5280 220 action, (* auxiliary *) 5290 221 intg_aux, (* auxiliary *) 5300 222 next : integer; (* auxiliary *) 5310 223 adr_code: byte; 5320 224 cur_vcm , 5330 225 zero_addr, 5340 226 work : alarmnetaddr; 5350 227 listen_ref, (* unused listenbufs *) 5360 228 bookup_ref, (*booking or update timeout module*) 5370 229 clock_ref, (*unused clockbuffer*) 5380 230 timeout_ref, (*unused timeoutbuffer*) 5390 231 tolam_ref, (* unused lambuffer *) 5400 232 fromlam_ref, (* buffer from lamdriver *) 5410 233 mess_ref : reference; (* current buffer *) 5420 234 timeout_answer: semaphore; (* immediately answer from timeout modul *) 5430 235 5440 236 lam_pool : pool 1 OF integer; (* rettes til integer *) 5450 237 tim_pool : pool no_vcc_tim OF timers; (* rettes til timers *) 5460 238 book_pool : pool no_vcc_upd OF updates; (* rettes til updates *) \f tsvaclst 81.06.16. 13.41. page 8 5470 239 5480 240 (* counters *) 5490 241 pack_counter, (* no of mess to vch *) 5500 242 trans_ok , (* succession of ok telegram *) 5510 243 no_of_queue, (* no of bufs in queue *) 5520 244 line_error_count, (* total number of transmiterror *) 5530 245 no_of_listen, (* no of bufs on listensem *) 5540 246 no_of_returned, (* no of received returned bufs *) 5550 247 no_of_released, (* no of needless bufs released *) 5560 248 no_of_unknown : integer:= 0; (* no of unknown messages received *) 5570 249 5580 250 index,object: integer; (*param to book and update*) 5590 251 5600 252 (* limits *) 5610 253 serve_limit : integer := service_lim; 5620 254 stoppoll_limit : integer := stop_poll_lim; 5630 255 max_succ_errors : integer := max_succ_lin_err; 5640 256 fix_incr_on_err : integer := trans_err_rate; 5650 257 poll_delay : integer := poll_delay_time; 5660 258 5670 259 zout : zone; (* testoutput from modul *) 5680 260 5690 261 (*--------- Vars only used by the LAMSPEAK procedure ----------*) 5700 262 5710 263 speak_action : integer := 8; (* as p_ack in polling state *) 5720 264 keep_the_telegram : to_telegram_type; 5730 265 area_to_lam , 5740 266 area_from_lam : ARRAY (1..3) OF byte; 5750 267 lbuf_info : ARRAY (1..max_lbuf_needed) OF lbuf_record; 5760 268 keep_the_opcode : byte; 5770 269 keep_sender : alarmnetaddr; 5780 270 teletxt : alfa; 5790 271 at_table_addr : alarmnetaddr; 5800 272 atts_table_index : integer; 5810 273 5820 274 serial_no , 5830 275 succ_line_errors, 5840 276 area_pointer , 5850 277 lbuf_needed : integer := 0; 5860 278 5870 279 below_serve_limit , 5880 280 below_stoppoll_limit, 5890 281 lamtest, 5900 282 boo : boolean := true; 5910 283 5920 284 \f tsvaclst 81.06.16. 13.41. page 9 6010 285 TYPE 6020 286 row = ARRAY(buf_type) OF integer; 6030 287 col = ARRAY(state_type) OF row; 6040 288 CONST 6050 289 acttable = col ( 6060 290 (* u s o p *) 6070 291 (* n l r e t p e *) 6080 292 (* k a i t e r e e c l s e b r *) 6090 293 (* n l s a p v s r l t t u m r m *) 6100 294 (* o a t b o i t a o i i l s p o i *) 6110 295 (* w r e l r c a t c m m a e t a s *) 6120 296 (* n m n e t e t e k e e m d y d s *) 6130 297 (*not_ready *)row( 1, 2, 4, 5, 2, 2, 2, 2, 6, 6, 6, 6, 0,18,19, 2), 6140 298 (*passive *)row( 1, 3, 4, 5, 3, 7, 3,15, 6, 6, 6, 6, 0,18,19, 3), 6150 299 (*active *)row( 1, 8, 4, 5, 8, 7, 8,15, 8, 6, 6, 6, 0,18,19, 8), 6160 300 (*lam_talk *)row( 1, 9, 4, 9, 9, 7, 9,15,10,11,12, 8, 0,18,19, 9), 6170 301 (*lam_need_buf *)row( 1, 9, 8, 9, 9, 7, 9,15,19,11,12,17, 0,18,19, 9), 6180 302 (*vcatc_need_buf*)row( 1, 9,13, 9, 9, 7, 9, 9,10, 6,14,17, 0,18,19, 9), 6190 303 (*wait_shorttime*)row( 1, 9,16, 9, 9, 9, 9, 9,10, 6,14,17, 0,18,19, 9), 6200 304 (*stop_poll *)row( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)); 6210 305 \f tsvaclst 81.06.16. 13.41. page 10 7010 306 7020 307 PROCEDURE save_listen_buf; 7030 308 FORWARD; 7040 309 7050 310 PROCEDURE update(ticks: integer); 7060 311 (* update the booked timeoutbuffer *) 7070 312 BEGIN 7080 313 1 ! bookup_ref^.u1:= update_req; 7090 314 2 ! bookup_ref^.u4:= #hc4; 7100 315 3 ! LOCK bookup_ref AS buf: updates DO 7110 316 4 ! BEGIN 7120 317 5 ! ! buf.index := index; 7130 318 6 ! ! buf.count := ticks; 7140 319 7 ! ! buf.object:= object 7150 320 8 ! END; 7160 321 9 ! signal(bookup_ref,timeoutsem^); 7170 322 10 ! wait (bookup_ref,timeout_answer); 7180 323 11 ! (*q if test then testout(zout,"update ",ticks*10+bookup_ref^.u2); q*) 7190 324 12 END; 7200 325 7210 326 PROCEDURE book(ticks: integer); 7220 327 (* booking of one modultimeout *) 7230 328 BEGIN 7240 329 1 ! IF NOT nil( timeout_ref ) THEN 7250 330 2 ! BEGIN 7260 331 3 ! ! bookup_ref^.u1:= book_req; 7270 332 4 ! ! bookup_ref^.u4:= #hc3; 7280 333 5 ! ! LOCK bookup_ref AS buf: updates DO 7290 334 6 ! ! BEGIN 7300 335 7 ! ! ! buf.count:= ticks; 7310 336 8 ! ! ! buf.object:= ticks 7320 337 9 ! ! END; 7330 338 10 ! ! LOCK timeout_ref AS buf: timers DO 7340 339 11 ! ! buf.object:= ticks; 7350 340 12 ! ! push(timeout_ref,bookup_ref); 7360 341 13 ! ! signal(bookup_ref,timeoutsem^); 7370 342 14 ! ! wait(bookup_ref,timeout_answer); 7380 343 15 ! ! (*q if test then testout(zout,"book ",ticks*10+bookup_ref^.u2); q*) 7390 344 16 ! ! LOCK bookup_ref AS buf: updates DO 7400 345 17 ! ! BEGIN 7410 346 18 ! ! ! index := buf.index; 7420 347 19 ! ! ! object:= buf.object 7430 348 20 ! ! END 7440 349 21 ! END 7450 350 22 END; 7460 351 \f tsvaclst 81.06.16. 13.41. page 11 7470 352 FUNCTION get_macro_atts(adr: macroaddr; func: byte): boolean; 7480 353 VAR 7490 354 found: boolean:= false; 7500 355 BEGIN 7510 356 1 ! next:= 1; 7520 357 2 ! WHILE (NOT found) AND (next<=noatts) DO 7530 358 3 ! BEGIN 7540 359 4 ! ! IF (adr.dc_addr=attstable(next).ts_addr.dc_addr) AND 7550 360 5 ! ! (attstable(next).ts_type=ts_type_pvc) THEN 7560 361 6 ! ! IF func=1 THEN found:= true ELSE 7570 362 7 ! ! IF adr.nc_addr=attstable(next).ts_addr.nc_addr THEN 7580 363 8 ! ! IF func=2 THEN found:= true ELSE 7590 364 9 ! ! IF adr.ts_addr=attstable(next).ts_addr.ts_addr THEN 7600 365 10 ! ! found:= true; 7610 366 11 ! ! IF NOT found THEN next:= next + 1; 7620 367 12 ! END; 7630 368 13 ! get_macro_atts:= found; 7640 369 14 END; 7650 370 7660 371 FUNCTION get_macro_at(adr: macroaddr; func: byte): boolean; 7670 372 VAR 7680 373 found: boolean:= false; 7690 374 BEGIN 7700 375 1 ! next:= 1; 7710 376 2 ! WHILE (NOT found) AND (next<=noatadr) DO 7720 377 3 ! BEGIN 7730 378 4 ! ! IF adr.dc_addr=atadrtable(next).at_addr.macro.dc_addr THEN 7740 379 5 ! ! IF func=1 THEN found:= true ELSE 7750 380 6 ! ! IF adr.nc_addr=atadrtable(next).at_addr.macro.nc_addr THEN 7760 381 7 ! ! IF func=2 THEN found:= true ELSE 7770 382 8 ! ! IF adr=atadrtable(next).at_addr.macro THEN 7780 383 9 ! ! found:= true; 7790 384 10 ! ! IF NOT found THEN next:= next + 1; 7800 385 11 ! END; 7810 386 12 ! get_macro_at:= found; 7820 387 13 END; 7830 388 \f tsvaclst 81.06.16. 13.41. page 12 8010 389 FUNCTION get_vc_code(vcadr: alarmnetaddr; VAR code: byte): boolean; 8020 390 VAR 8030 391 found: boolean:= false; 8040 392 BEGIN 8050 393 1 ! next:= 1; 8060 394 2 ! WHILE (NOT found) AND (next<=novcm) DO 8070 395 3 ! IF vcadr=vcmtable(next).vc_addr THEN 8080 396 4 ! BEGIN 8090 397 5 ! ! found:= true; 8100 398 6 ! ! code:= vcmtable(next).vc_code 8110 399 7 ! END ELSE next:= next+1; 8120 400 8 ! get_vc_code:= found; 8130 401 9 END; 8140 402 8150 403 FUNCTION get_vc_netaddr(VAR vcadr: alarmnetaddr; code: byte): boolean; 8160 404 VAR 8170 405 found: boolean:= false; 8180 406 BEGIN 8190 407 1 ! next:= 1; 8200 408 2 ! WHILE (NOT found) AND (next<=novcm) DO 8210 409 3 ! IF code=vcmtable(next).vc_code THEN 8220 410 4 ! BEGIN 8230 411 5 ! ! found:= true; 8240 412 6 ! ! vcadr:= vcmtable(next).vc_addr 8250 413 7 ! END ELSE next:= next+1; 8260 414 8 ! get_vc_netaddr:= found; 8270 415 9 END; 8280 416 \f tsvaclst 81.06.16. 13.41. page 13 9010 417 FUNCTION get_adr_code(atadr: alarmnetaddr; VAR code: byte): boolean; 9020 418 VAR 9030 419 found: boolean:= false; 9040 420 BEGIN 9050 421 1 ! next:= 1; 9060 422 2 ! WHILE (NOT found) AND (next<=noatadr) DO 9070 423 3 ! IF atadr=atadrtable(next).at_addr THEN 9080 424 4 ! BEGIN 9090 425 5 ! ! found:= true; 9100 426 6 ! ! code := atadrtable(next).addr_code 9110 427 7 ! END ELSE next:= next+1; 9120 428 8 ! get_adr_code:= found; 9130 429 9 END; 9140 430 9150 431 9160 432 9170 433 FUNCTION get_net_addr(VAR atadr: alarmnetaddr; code: byte): boolean; 9180 434 VAR 9190 435 found: boolean:= false; 9200 436 BEGIN 9210 437 1 ! next:= 1; 9220 438 2 ! WHILE (NOT found) AND (next<=noatadr) DO 9230 439 3 ! IF code = atadrtable(next).addr_code THEN 9240 440 4 ! BEGIN 9250 441 5 ! ! found:= true; 9260 442 6 ! ! atadr:= atadrtable(next).at_addr 9270 443 7 ! END ELSE next:= next+1; 9280 444 8 ! get_net_addr:= found; 9290 445 9 END; 9300 446 9310 447 \f tsvaclst 81.06.16. 13.41. page 14 10010 448 10020 449 FUNCTION get_atts_index(tsadr: macroaddr; VAR index: integer): boolean; 10030 450 VAR 10040 451 found: boolean:= false; 10050 452 BEGIN 10060 453 1 ! next := 1; 10070 454 2 ! WHILE (NOT found) AND (next<=noatts) DO 10080 455 3 ! IF tsadr = attstable(next).ts_addr THEN 10090 456 4 ! BEGIN 10100 457 5 ! ! found:= true; 10110 458 6 ! ! index:= attstable(next).index 10120 459 7 ! END ELSE next:= next+1; 10130 460 8 ! get_atts_index:= found; 10140 461 9 END; 10150 462 10160 463 FUNCTION pack_dc_macro ( adr: alarmnetaddr ): macroaddr; 10170 464 BEGIN 10180 465 1 ! pack_dc_macro.dc_addr:= adr.macro.dc_addr; 10190 466 2 ! pack_dc_macro.nc_addr:= 0; 10200 467 3 ! pack_dc_macro.ts_addr:= 0; 10210 468 4 END; 10220 469 10230 470 10240 471 \f tsvaclst 81.06.16. 13.41. page 15 11010 472 11020 473 PROCEDURE unknown_buf(error: byte); 11030 474 (* returning of one unknown buffer *) 11040 475 BEGIN 11050 476 1 ! IF mess_ref^.u4=#h12 THEN buftype:= empty ELSE 11060 477 2 ! LOCK mess_ref AS buf: mask_unknown DO 11070 478 3 ! WITH buf DO 11080 479 4 ! BEGIN 11090 480 5 ! ! fix.op_code:= mess_ref^.u4; 11100 481 6 ! ! data:= fix; 11110 482 7 ! ! mess_ref^.u4:= #h12; 11120 483 8 ! ! fix.rec := fix.send;; 11130 484 9 ! ! fix.send.macro:= ts_macro; 11140 485 10 ! ! fix.send.micro:= micadr; 11150 486 11 ! ! fix.no_of_by := 2*label_size+2; 11160 487 12 ! ! fix.update := 0; 11170 488 13 ! ! fix.result := error; 11180 489 14 ! ! buftype:= unknown 11190 490 15 ! END; 11200 491 16 ! no_of_unknown:= (no_of_unknown MOD max_int) + 1 11210 492 17 END; 11220 493 11230 494 \f tsvaclst 81.06.16. 13.41. page 16 12010 495 PROCEDURE send_to_vch; 12020 496 BEGIN 12030 497 1 ! CASE mess_ref^.u4 DIV 16 OF 12040 498 2 ! ! 4,8 : pack_counter:= (pack_counter+1) MOD max_int; 12050 499 3 ! ! OTHERWISE 12060 500 4 ! END; 12070 501 5 ! signal(mess_ref,vchsem^); 12080 502 6 END; 12090 503 12100 504 PROCEDURE restart_clock; 12110 505 BEGIN 12120 506 1 ! signal(mess_ref,timeoutsem^); 12130 507 2 ! IF no_of_listen<2 THEN 12140 508 3 ! BEGIN 12150 509 4 ! ! sensesem(mess_ref,com_pool^); 12160 510 5 ! ! IF NOT nil (mess_ref) THEN save_listen_buf; 12170 511 6 ! ! buftype:= clock; 12180 512 7 ! END 12190 513 8 END; 12200 514 \f tsvaclst 81.06.16. 13.41. page 17 13010 515 FUNCTION get_listen_buf: boolean; 13020 516 (* serving out one listenbuf from listen_ref *) 13030 517 BEGIN 13040 518 1 ! IF no_of_listen>0 THEN 13050 519 2 ! BEGIN 13060 520 3 ! ! pop(mess_ref,listen_ref); 13070 521 4 ! ! mess_ref^.u2:= 1; 13080 522 5 ! ! mess_ref^.u3:= netc_route; 13090 523 6 ! ! mess_ref^.u4:= #hc5; 13100 524 7 ! ! buftype:= listen; 13110 525 8 ! ! no_of_listen:= no_of_listen - 1; 13120 526 9 ! ! (*q if test then testout(zout," no of li : ",no_of_listen); q*) 13130 527 10 ! ! get_listen_buf:= true; 13140 528 11 ! END ELSE 13150 529 12 ! get_listen_buf:= false 13160 530 13 END; 13170 531 13180 532 13190 533 13200 534 PROCEDURE save_listen_buf; 13210 535 (* save listenbuf from mess_ref to listen_ref *) 13220 536 BEGIN 13230 537 1 ! push(mess_ref,listen_ref); 13240 538 2 ! buftype:= used; 13250 539 3 ! no_of_listen:= no_of_listen + 1; 13260 540 4 ! (*q if test then testout(zout," no of li : ", no_of_listen); q*) 13270 541 5 END; 13280 542 13290 543 13300 544 13310 545 13320 546 \f tsvaclst 81.06.16. 13.41. page 18 14010 547 14020 548 PROCEDURE lamspeak; 14030 549 14040 550 (*************************************************************** 14050 551 * * 14060 552 * Function: Lamspeak is responsible for the communication * 14070 553 * with VC(AT) via lamdriver, that is the protocol * 14080 554 * for telegram communication is administrated by * 14090 555 * lamspeak. * 14100 556 * The VC(AT)-Conn is in state LAM_TALK. Lamspeak * 14110 557 * can change vcatc_state to either ACTIVE or * 14120 558 * LAM_NEED_BUF, else vcatc_state is unchanged * 14130 559 * LAM_TALK. * 14140 560 * * 14150 561 * Externals: * 14160 562 * * 14170 563 * Parameters: None. 14180 564 * * 14190 565 * Semaphores: None. 14200 566 * * 14210 567 * Programmed june 1980 by SRS 14220 568 * * 14230 569 ***************************************************************) 14240 570 14250 571 14260 572 \f tsvaclst 81.06.16. 13.41. page 19 15010 573 CONST 15020 574 15030 575 p_ack = 0; data = 1; opr = 2; 15040 576 status = 3; d_ack = 4; t_ack = 5; 15050 577 nak = 6; free = 7; 15060 578 15070 579 TYPE 15080 580 15090 581 from_telegram_type = PACKED RECORD 15100 582 ! from_data : 0..255; (* 8 bits *) 15110 583 ! from_opcode : 0.. 7; (* 3 bits *) 15120 584 ! from_check : 0.. 31 (* 5 bits *) 15130 585 END; 15140 586 15150 587 mask_norm_lbuf = PACKED RECORD 15160 588 ! fix_label : alarmlabel; 15170 589 ! norm_inf : byte; 15180 590 ! norm_inf1 : byte 15190 591 END; 15200 592 15210 593 mask_log_lbuf = PACKED RECORD 15220 594 ! fix_label : alarmlabel; 15230 595 ! log_addr : alarmnetaddr; 15240 596 ! log_opc : byte; 15250 597 ! log_alarm : byte 15260 598 END; 15270 599 15280 600 VAR 15290 601 15300 602 slave_opcode : integer; 15310 603 slave_data : byte; 15320 604 15330 605 numb_of_bytes : integer := label_size; 15340 606 lam_timeout : boolean := false; 15350 607 boo : boolean := true; 15360 608 15370 609 15380 610 \f tsvaclst 81.06.16. 13.41. page 20 16010 611 PROCEDURE calltest(VAR r : reference); 16020 612 BEGIN 16030 613 1 ! (*x lock r as telegram : to_telegram_type do 16040 614 2 ! begin 16050 615 3 ! if serial_no=0 then 16060 616 4 ! case telegram.to_opcode of 16070 617 5 ! 0: teletxt := " * POLL 0 "; 16080 618 6 ! 1: teletxt := " * DATA 0 "; 16090 619 7 ! 2: teletxt := " * TESTI 0 "; 16100 620 8 ! 3: teletxt := " * OPR 0 " 16110 621 9 ! end 16120 622 10 ! else 16130 623 11 ! case telegram.to_opcode of 16140 624 12 ! 0: teletxt := " * POLL 1 "; 16150 625 13 ! 1: teletxt := " * DATA 1 "; 16160 626 14 ! 2: teletxt := " * TESTI 1 "; 16170 627 15 ! 3: teletxt := " * OPR 1 " 16180 628 16 ! end; 16190 629 17 ! testout(zout, teletxt, telegram.to_data); 16200 630 18 ! end; x*) 16210 631 19 END; 16220 632 16230 633 \f tsvaclst 81.06.16. 13.41. page 21 17010 634 PROCEDURE build_same_telegram( VAR r: reference ); 17020 635 BEGIN 17030 636 1 ! r^.u2 := canno; 17040 637 2 ! 17050 638 3 ! LOCK r AS telegram : to_telegram_type DO 17060 639 4 ! telegram := keep_the_telegram; 17070 640 5 ! IF lamtest THEN calltest( r ); 17080 641 6 ! 17090 642 7 END (* of procedure build_same_telegram *); 17100 643 17110 644 17120 645 PROCEDURE build_serial_changed_telegram( VAR r: reference ); 17130 646 BEGIN (* build the same telegram, but change serial_no *) 17140 647 1 ! r^.u2 := canno; 17150 648 2 ! serial_no := 1 - serial_no; 17160 649 3 ! 17170 650 4 ! LOCK r AS telegram: to_telegram_type DO 17180 651 5 ! BEGIN 17190 652 6 ! ! telegram := keep_the_telegram; 17200 653 7 ! ! telegram.to_serial_no := serial_no 17210 654 8 ! END (* of lock statement *); 17220 655 9 ! 17230 656 10 ! boo := check5( r, generate); 17240 657 11 ! 17250 658 12 ! LOCK r AS telegram: to_telegram_type DO 17260 659 13 ! keep_the_telegram := telegram; 17270 660 14 ! 17280 661 15 END (* of procedure build_serial_changed_telegram *); 17290 662 17300 663 17310 664 \f tsvaclst 81.06.16. 13.41. page 22 18010 665 PROCEDURE build_a_poll_telegram( VAR r: reference ); 18020 666 BEGIN 18030 667 1 ! 18040 668 2 ! r^.u2 := canno; 18050 669 3 ! 18060 670 4 ! LOCK r AS telegram : to_telegram_type DO 18070 671 5 ! BEGIN 18080 672 6 ! ! (*----------------------------------- build up the buffer *) 18090 673 7 ! ! 18100 674 8 ! ! serial_no := 1 - serial_no; 18110 675 9 ! ! WITH telegram DO 18120 676 10 ! ! BEGIN 18130 677 11 ! ! ! (*------------------------------ build the telegram *) 18140 678 12 ! ! ! to_opcode := 0; 18150 679 13 ! ! ! to_serial_no:= serial_no; 18160 680 14 ! ! ! to_data := 0; 18170 681 15 ! ! ! IF serial_no = 0 THEN 18180 682 16 ! ! ! to_check := 10 (* as bits 01010 *) 18190 683 17 ! ! ! ELSE 18200 684 18 ! ! ! to_check := 19; (* as bits 10011 *) 18210 685 19 ! ! END; 18220 686 20 ! ! (*---------------------------------- keep the telegram *) 18230 687 21 ! ! keep_the_telegram := telegram; 18240 688 22 ! ! 18250 689 23 ! END (* of lock statement *); 18260 690 24 ! IF lamtest THEN calltest( r ); 18270 691 25 ! 18280 692 26 END (* of procedure build_a_poll_telegram *); 18290 693 18300 694 \f tsvaclst 81.06.16. 13.41. page 23 19010 695 PROCEDURE build_a_letter_telegram( VAR r: reference ); 19020 696 BEGIN 19030 697 1 ! serial_no := 1 - serial_no; 19040 698 2 ! r^.u2 := canno; 19050 699 3 ! 19060 700 4 ! LOCK r AS telegram : to_telegram_type DO 19070 701 5 ! BEGIN (* build up the buffer *) 19080 702 6 ! ! 19090 703 7 ! ! WITH telegram DO 19100 704 8 ! ! BEGIN 19110 705 9 ! ! ! IF area_pointer = 1 THEN 19120 706 10 ! ! ! to_opcode := 3 (* OPR master opcode *) 19130 707 11 ! ! ! ELSE 19140 708 12 ! ! ! to_opcode := 1; (* DATA master opcode *) 19150 709 13 ! ! ! to_serial_no := serial_no; 19160 710 14 ! ! ! to_data := area_to_lam( area_pointer ); 19170 711 15 ! ! END; 19180 712 16 ! END (* of lock statement *); 19190 713 17 ! IF lamtest THEN calltest( r ); 19200 714 18 ! 19210 715 19 ! boo := check5( r, generate ); (* complete the telegram *) 19220 716 20 ! 19230 717 21 ! (*---------------------------- keep the telegram *) 19240 718 22 ! LOCK r AS telegram : to_telegram_type DO 19250 719 23 ! keep_the_telegram := telegram; 19260 720 24 ! 19270 721 25 END (* of procedure build_a_letter_telegram *); 19280 722 19290 723 19300 724 19310 725 19320 726 \f tsvaclst 81.06.16. 13.41. page 24 20010 727 PROCEDURE build_line_dep_telegram( 20020 728 VAR r : reference; 20030 729 line_was: oknok_type 20040 730 ); 20050 731 20060 732 (* Maybe the serial number at VC(AT) has been changed * 20070 733 * of some unknown reason. Line_was = nok indicates * 20080 734 * that the serial_no must be changed. *) 20090 735 20100 736 BEGIN 20110 737 1 ! 20120 738 2 ! IF line_was = ok THEN 20130 739 3 ! build_same_telegram( r ) 20140 740 4 ! ELSE (* line was not ok *) 20150 741 5 ! build_serial_changed_telegram( r); 20160 742 6 ! 20170 743 7 END (* of procedure build_line_dep_telegram *); 20180 744 20190 745 20200 746 \f tsvaclst 81.06.16. 13.41. page 25 21010 747 PROCEDURE build_an_lbuf( 21020 748 VAR r : reference; 21030 749 x : lbuf_record 21040 750 ); 21050 751 21060 752 BEGIN 21070 753 1 ! r^.u4 := x.opco; 21080 754 2 ! 21090 755 3 ! CASE x.kind OF 21100 756 4 ! ! norm: 21110 757 5 ! ! LOCK r AS buf : mask_norm_lbuf DO 21120 758 6 ! ! BEGIN 21130 759 7 ! ! ! WITH buf.fix_label DO 21140 760 8 ! ! ! BEGIN 21150 761 9 ! ! ! ! no_of_by := x.noob; 21160 762 10 ! ! ! ! rec := x.reci; 21170 763 11 ! ! ! ! op_code := x.opco; 21180 764 12 ! ! ! ! update := x.upda; 21190 765 13 ! ! ! ! result := x.resu 21200 766 14 ! ! ! END; 21210 767 15 ! ! ! buf.norm_inf := x.dta1; 21220 768 16 ! ! ! buf.norm_inf1:= x.dta2 21230 769 17 ! ! END; 21240 770 18 ! ! 21250 771 19 ! ! log: 21260 772 20 ! ! LOCK r AS buf : mask_log_lbuf DO 21270 773 21 ! ! BEGIN 21280 774 22 ! ! ! WITH buf.fix_label DO 21290 775 23 ! ! ! BEGIN 21300 776 24 ! ! ! ! no_of_by := x.noob; 21310 777 25 ! ! ! ! rec := x.reci; 21320 778 26 ! ! ! ! op_code := x.opco; 21330 779 27 ! ! ! ! update := x.upda; 21340 780 28 ! ! ! ! result := x.resu 21350 781 29 ! ! ! END; 21360 782 30 ! ! ! buf.log_addr := x.addr; 21370 783 31 ! ! ! buf.log_opc := x.dta1; 21380 784 32 ! ! ! buf.log_alarm := x.dta2; 21390 785 33 ! ! END 21400 786 34 ! END (* of case on x.kind *); 21410 787 35 ! 21420 788 36 END (* of procedure build_an_lbuf *); 21430 789 21440 790 21450 791 \f tsvaclst 81.06.16. 13.41. page 26 22010 792 PROCEDURE demand_lbuf( 22020 793 d_kind : lbuf_kind_type; 22030 794 d_noob : integer; 22040 795 d_reci : alarmnetaddr; 22050 796 d_opco : byte; 22060 797 d_upda : update_range; 22070 798 d_resu : result_range; 22080 799 d_dta1 : byte; 22090 800 d_dta2 : byte; 22100 801 d_addr : alarmnetaddr 22110 802 ); 22120 803 22130 804 BEGIN 22140 805 1 ! 22150 806 2 ! lbuf_needed := lbuf_needed + 1; 22160 807 3 ! WITH lbuf_info( lbuf_needed ) DO 22170 808 4 ! BEGIN 22180 809 5 ! ! kind := d_kind; 22190 810 6 ! ! noob := label_size + d_noob; 22200 811 7 ! ! reci := d_reci; 22210 812 8 ! ! opco := d_opco; 22220 813 9 ! ! upda := d_upda; 22230 814 10 ! ! resu := d_resu; 22240 815 11 ! ! dta1 := d_dta1; 22250 816 12 ! ! dta2 := d_dta2; 22260 817 13 ! ! addr := d_addr 22270 818 14 ! END; 22280 819 15 ! 22290 820 16 END (* of procedure demand_lbuf *); 22300 821 \f tsvaclst 81.06.16. 13.41. page 27 23010 822 PROCEDURE fault_at_line; 23020 823 BEGIN 23030 824 1 ! 23040 825 2 ! IF succ_line_errors <> max_int THEN 23050 826 3 ! succ_line_errors := succ_line_errors + 1; 23060 827 4 ! 23070 828 5 ! IF succ_line_errors = max_succ_errors THEN 23080 829 6 ! BEGIN (*------ line alarm *) 23090 830 7 ! ! IF lam_timeout THEN (* timeout *) 23100 831 8 ! ! demand_lbuf( norm, 1, own_dc, #h31, 0, 0, 23110 832 9 ! ! at_tim_excess, 0, own_dc) 23120 833 10 ! ! ELSE (* not timeout *) 23130 834 11 ! ! demand_lbuf( norm, 1, own_dc, #h31, 0, 0, 23140 835 12 ! ! call, 0, own_dc ); 23150 836 13 ! ! lam_timeout := false; 23160 837 14 ! END; 23170 838 15 ! 23180 839 16 ! IF line_error_count <= (max_int - fix_incr_on_err) THEN 23190 840 17 ! line_error_count := line_error_count + fix_incr_on_err 23200 841 18 ! ELSE 23210 842 19 ! line_error_count := max_int; 23220 843 20 ! 23230 844 21 ! IF (line_error_count >= serve_limit) AND below_serve_limit THEN 23240 845 22 ! BEGIN (*------service alarm *) 23250 846 23 ! ! (* high counter *) 23260 847 24 ! ! demand_lbuf( norm, 1, own_dc, #h34, 0, 0, 23270 848 25 ! ! call, 0, own_dc ); 23280 849 26 ! ! below_serve_limit := false; 23290 850 27 ! END; 23300 851 28 ! 23310 852 29 ! IF (line_error_count >= stoppoll_limit) AND below_stoppoll_limit THEN 23320 853 30 ! BEGIN (*------ stoppoll alarm *) 23330 854 31 ! ! (* high counter *) 23340 855 32 ! ! demand_lbuf( norm, 1, own_dc, #h35, 0, 0, 23350 856 33 ! ! call, 0, own_dc ); 23360 857 34 ! ! below_stoppoll_limit := false; 23370 858 35 ! END; 23380 859 36 ! 23390 860 37 ! line := nok; 23400 861 38 ! 23410 862 39 END (* of fault_at_line *); 23420 863 \f tsvaclst 81.06.16. 13.41. page 28 24010 864 PROCEDURE ok_at_line; 24020 865 BEGIN 24030 866 1 ! line_error_count := line_error_count - 1; 24040 867 2 ! IF line_error_count < 0 THEN 24050 868 3 ! line_error_count := 0; (* Must not be negative *) 24060 869 4 ! 24070 870 5 ! IF (line_error_count < serve_limit) AND NOT(below_serve_limit) THEN 24080 871 6 ! BEGIN (*------ recall service alarm *) 24090 872 7 ! ! (* low counter *) 24100 873 8 ! ! demand_lbuf( norm, 1, own_dc, #h34, 0, 0, 24110 874 9 ! ! recall, 0, own_dc ); 24120 875 10 ! ! below_serve_limit := true; 24130 876 11 ! END; 24140 877 12 ! 24150 878 13 ! IF (line_error_count < stoppoll_limit) AND NOT(below_stoppoll_limit) THEN 24160 879 14 ! BEGIN (*------ recall stoppoll alarm *) 24170 880 15 ! ! (* low counter *) 24180 881 16 ! ! demand_lbuf( norm, 1, own_dc, #h35, 0, 0, 24190 882 17 ! ! recall, 0, own_dc ); 24200 883 18 ! ! below_stoppoll_limit := true; 24210 884 19 ! END; 24220 885 20 ! 24230 886 21 ! IF succ_line_errors >= max_succ_errors THEN 24240 887 22 ! BEGIN (*------recall line alarm *) 24250 888 23 ! ! demand_lbuf( norm, 1, own_dc, #h31, 0, 0, 24260 889 24 ! ! recall, 0, own_dc ); 24270 890 25 ! END; 24280 891 26 ! 24290 892 27 ! succ_line_errors := 0; 24300 893 28 ! 24310 894 29 ! line := ok; 24320 895 30 ! 24330 896 31 ! (*q if test then 24340 897 32 ! begin 24350 898 33 ! testout(zout,"line state: ",ord(line)); 24360 899 34 ! testout(zout,"succ lineerr",succ_line_errors); 24370 900 35 ! testout(zout,"lineerrcount",line_error_count); 24380 901 36 ! end; q*) 24390 902 37 ! 24400 903 38 END (* of ok_at_line *); 24410 904 24420 905 \f tsvaclst 81.06.16. 13.41. page 29 25010 906 PROCEDURE to_lam_driver; 25020 907 25030 908 (*********************************************************** 25040 909 * The buftype is alarm, report or testat. * 25050 910 * Send a letter to VC(AT). A letter is always 3 telegrams * 25060 911 * The reference to the message buffer is mess_ref and this * 25070 912 * buffer will be released, ie buftype = empty. * 25080 913 * The reference to the unused lam buffer is tolam_ref. * 25090 914 * The letter is stored in the area_to_lam array * 25100 915 ************************************************************) 25110 916 25120 917 BEGIN 25130 918 1 ! 25140 919 2 ! CASE buftype OF 25150 920 3 ! ! 25160 921 4 ! ! testat : (* Send TESTI telegram by order of own DC *) 25170 922 5 ! ! BEGIN (* opcode 8,0 or 8,2 *) 25180 923 6 ! ! ! 25190 924 7 ! ! ! serial_no := 1 - serial_no; 25200 925 8 ! ! ! tolam_ref^.u2 := canno; 25210 926 9 ! ! ! 25220 927 10 ! ! ! (*----------------------- build the telegram of TESTI *) 25230 928 11 ! ! ! LOCK tolam_ref AS telegram : to_telegram_type DO 25240 929 12 ! ! ! BEGIN 25250 930 13 ! ! ! ! WITH telegram DO 25260 931 14 ! ! ! ! BEGIN 25270 932 15 ! ! ! ! ! to_opcode := 2; 25280 933 16 ! ! ! ! ! to_serial_no := serial_no; 25290 934 17 ! ! ! ! ! IF keep_the_opcode = #h80 THEN 25300 935 18 ! ! ! ! ! to_data := 0 25310 936 19 ! ! ! ! ! ELSE 25320 937 20 ! ! ! ! ! to_data := 1; 25330 938 21 ! ! ! ! END; 25340 939 22 ! ! ! END (* of lock statement *); 25350 940 23 ! ! ! IF lamtest THEN calltest( tolam_ref ); 25360 941 24 ! ! ! 25370 942 25 ! ! ! (*----------------------- complete the telegram *) 25380 943 26 ! ! ! boo := check5( tolam_ref, generate ); 25390 944 27 ! ! ! 25400 945 28 ! ! ! (*----------------------- keep the telegram *) 25410 946 29 ! ! ! LOCK tolam_ref AS telegram : to_telegram_type DO 25420 947 30 ! ! ! keep_the_telegram := telegram; 25430 948 31 ! ! ! 25440 949 32 ! ! ! lamspeak_state := testi; 25450 950 33 ! ! ! 25460 951 34 ! ! ! signal( tolam_ref, lamsem^ ); \f tsvaclst 81.06.16. 13.41. page 30 25470 952 35 ! ! END (* of testat *); 25480 953 36 ! ! 25490 954 37 ! ! alarm, 25500 955 38 ! ! report : (* Send a letter by order of an AT-CONNECTOR *) 25510 956 39 ! ! BEGIN 25520 957 40 ! ! ! 25530 958 41 ! ! ! area_pointer := 1; 25540 959 42 ! ! ! 25550 960 43 ! ! ! area_to_lam( 1 ) := keep_the_opcode; 25560 961 44 ! ! ! area_to_lam( 2 ) := adr_code; (* a lookup in the AT-addr_table * 25570 962 45 ! ! ! * is made outside lamspeak *) 25580 963 46 ! ! ! 25590 964 47 ! ! ! LOCK mess_ref AS buf : mask_norm_lbuf DO 25600 965 48 ! ! ! BEGIN 25610 966 49 ! ! ! ! numb_of_bytes := buf.fix_label.no_of_by; 25620 967 50 ! ! ! ! IF numb_of_bytes = label_size THEN 25630 968 51 ! ! ! ! area_to_lam( 3 ) := 0 25640 969 52 ! ! ! ! ELSE (* nbbbbb numb_of_bytes must be label_size + 1 here *) 25650 970 53 ! ! ! ! area_to_lam( 3 ) := buf.norm_inf; 25660 971 54 ! ! ! ! 25670 972 55 ! ! ! ! IF (keep_the_opcode=#h41) OR (keep_the_opcode=#h85) THEN 25680 973 56 ! ! ! ! CASE buf.fix_label.result OF 25690 974 57 ! ! ! ! ! 0: area_to_lam(1) := keep_the_opcode (* accepted *) 25700 975 58 ! ! ! ! ! OTHERWISE area_to_lam(1) := keep_the_opcode+1 (* rejected *) 25710 976 59 ! ! ! ! END (* of case *); 25720 977 60 ! ! ! ! 25730 978 61 ! ! ! END (* of lock statement *); 25740 979 62 ! ! ! 25750 980 63 ! ! ! build_a_letter_telegram( tolam_ref ); 25760 981 64 ! ! ! lamspeak_state := lettertovc; 25770 982 65 ! ! ! signal( tolam_ref, lamsem^ ); 25780 983 66 ! ! ! 25790 984 67 ! ! END; (* of alarm, report *) 25800 985 68 ! ! 25810 986 69 ! ! permiss : (* send a letter by order of own dc, opcode 0.1-6.2-6.4 *) 25820 987 70 ! ! BEGIN 25830 988 71 ! ! ! area_pointer := 1; 25840 989 72 ! ! ! area_to_lam(1) := keep_the_opcode; 25850 990 73 ! ! ! 25860 991 74 ! ! ! IF (func=2) OR (func=9) THEN 25870 992 75 ! ! ! LOCK mess_ref AS buf: mask_byte DO 25880 993 76 ! ! ! WITH buf DO 25890 994 77 ! ! ! CASE func OF 25900 995 78 ! ! ! ! 2 : BEGIN 25910 996 79 ! ! ! ! ! area_to_lam(2):= fix.op_code; 25920 997 80 ! ! ! ! ! area_to_lam(3):= fix.update \f tsvaclst 81.06.16. 13.41. page 31 25930 998 81 ! ! ! ! END; 25940 999 82 ! ! ! ! 9 : BEGIN 25950 1000 83 ! ! ! ! ! area_to_lam(2):= fix.op_code; 25960 1001 84 ! ! ! ! ! area_to_lam(3):= data(1) 25970 1002 85 ! ! ! ! END 25980 1003 86 ! ! ! END ELSE 25990 1004 87 ! ! ! LOCK mess_ref AS buf: mask_vcm DO 26000 1005 88 ! ! ! WITH buf DO 26010 1006 89 ! ! ! BEGIN 26020 1007 90 ! ! ! ! CASE func OF 26030 1008 91 ! ! ! ! ! 0: BEGIN 26040 1009 92 ! ! ! ! ! ! area_to_lam(2):= fix.op_code; 26050 1010 93 ! ! ! ! ! ! area_to_lam(3):= datab; 26060 1011 94 ! ! ! ! ! END; 26070 1012 95 ! ! ! ! ! 1: BEGIN 26080 1013 96 ! ! ! ! ! ! area_to_lam(2):= fix.op_code; 26090 1014 97 ! ! ! ! ! ! area_to_lam(3):= fix.result; 26100 1015 98 ! ! ! ! ! END; 26110 1016 99 ! ! ! ! ! 6: BEGIN 26120 1017 100 ! ! ! ! ! ! area_to_lam(2) := fix.op_code; 26130 1018 101 ! ! ! ! ! ! area_to_lam(3) := fix.update; (* 0: says start at, 1: stop at *) 26140 1019 102 ! ! ! ! ! END; 26150 1020 103 ! ! ! ! ! 7: BEGIN 26160 1021 104 ! ! ! ! ! ! area_to_lam(2):= 0; 26170 1022 105 ! ! ! ! ! ! area_to_lam(3):= 0; 26180 1023 106 ! ! ! ! ! END; 26190 1024 107 ! ! ! ! END; (* of case *) 26200 1025 108 ! ! ! END; (* of lock statement *) 26210 1026 109 ! ! ! 26220 1027 110 ! ! ! build_a_letter_telegram( tolam_ref ); 26230 1028 111 ! ! ! lamspeak_state := lettertovc; 26240 1029 112 ! ! ! signal( tolam_ref, lamsem^ ); 26250 1030 113 ! ! ! 26260 1031 114 ! ! END (* of permiss *) 26270 1032 115 ! ! 26280 1033 116 ! END (* of case *); 26290 1034 117 ! 26300 1035 118 END (* of to_lam_driver *); 26310 1036 26320 1037 \f tsvaclst 81.06.16. 13.41. page 32 27010 1038 PROCEDURE from_lam_driver; 27020 1039 VAR 27030 1040 hlp, i: integer; 27040 1041 BEGIN 27050 1042 1 ! 27060 1043 2 ! CASE lamspeak_state OF 27070 1044 3 ! ! 27080 1045 4 ! ! lettertovc : (* master telegram is opr or data ================*) 27090 1046 5 ! ! CASE slave_opcode OF 27100 1047 6 ! ! ! 27110 1048 7 ! ! ! p_ack, 27120 1049 8 ! ! ! data , 27130 1050 9 ! ! ! opr : (* non expected answer on opr or data *) 27140 1051 10 ! ! ! speak_action := 1; 27150 1052 11 ! ! ! 27160 1053 12 ! ! ! status: 27170 1054 13 ! ! ! speak_action := 14; 27180 1055 14 ! ! ! 27190 1056 15 ! ! ! d_ack: 27200 1057 16 ! ! ! CASE area_pointer OF 27210 1058 17 ! ! ! ! 1: (* non expected answer on opr *) 27220 1059 18 ! ! ! ! speak_action := 1; 27230 1060 19 ! ! ! ! 2: (* data sended for the first time *) 27240 1061 20 ! ! ! ! speak_action := 3 27250 1062 21 ! ! ! ! OTHERWISE (* data sended for the third time *) 27260 1063 22 ! ! ! ! speak_action := 4 27270 1064 23 ! ! ! END (* of case on area_pointer *); 27280 1065 24 ! ! ! 27290 1066 25 ! ! ! t_ack: 27300 1067 26 ! ! ! CASE area_pointer OF 27310 1068 27 ! ! ! ! 1: (* expected answer on opr *) 27320 1069 28 ! ! ! ! speak_action := 3 27330 1070 29 ! ! ! ! OTHERWISE (* non expected answer on data *) 27340 1071 30 ! ! ! ! speak_action := 1 27350 1072 31 ! ! ! END (* of case on area_pointer *); 27360 1073 32 ! ! ! 27370 1074 33 ! ! ! nak , 27380 1075 34 ! ! ! free: 27390 1076 35 ! ! ! speak_action := 2; 27400 1077 36 ! ! ! 27410 1078 37 ! ! END (* of case in lettertovc *); 27420 1079 38 ! ! 27430 1080 39 ! ! 27440 1081 40 ! ! letterfromvc: (* master telegram is poll =====================*) 27450 1082 41 ! ! CASE slave_opcode OF 27460 1083 42 ! ! ! \f tsvaclst 81.06.16. 13.41. page 33 27470 1084 43 ! ! ! p_ack: 27480 1085 44 ! ! ! speak_action := 5; 27490 1086 45 ! ! ! 27500 1087 46 ! ! ! data : 27510 1088 47 ! ! ! CASE area_pointer OF 27520 1089 48 ! ! ! ! 1: 27530 1090 49 ! ! ! ! speak_action := 1; 27540 1091 50 ! ! ! ! 2: 27550 1092 51 ! ! ! ! speak_action := 6; 27560 1093 52 ! ! ! ! 3: 27570 1094 53 ! ! ! ! speak_action := 7 27580 1095 54 ! ! ! END (* of case *); 27590 1096 55 ! ! ! 27600 1097 56 ! ! ! opr , 27610 1098 57 ! ! ! d_ack, 27620 1099 58 ! ! ! t_ack: (* non expected answer on poll *) 27630 1100 59 ! ! ! speak_action := 1; 27640 1101 60 ! ! ! 27650 1102 61 ! ! ! status: 27660 1103 62 ! ! ! speak_action := 14; 27670 1104 63 ! ! ! 27680 1105 64 ! ! ! nak , 27690 1106 65 ! ! ! free : 27700 1107 66 ! ! ! speak_action := 2; 27710 1108 67 ! ! END (* of case in letterfromvc *); 27720 1109 68 ! ! 27730 1110 69 ! ! 27740 1111 70 ! ! polling: (* master telegram is poll ===========================*) 27750 1112 71 ! ! CASE slave_opcode OF 27760 1113 72 ! ! ! 27770 1114 73 ! ! ! p_ack: 27780 1115 74 ! ! ! speak_action := 8; 27790 1116 75 ! ! ! 27800 1117 76 ! ! ! data , 27810 1118 77 ! ! ! d_ack, 27820 1119 78 ! ! ! t_ack: (* non expected answer on poll *) 27830 1120 79 ! ! ! speak_action := 9; 27840 1121 80 ! ! ! 27850 1122 81 ! ! ! opr : 27860 1123 82 ! ! ! speak_action := 10; 27870 1124 83 ! ! ! 27880 1125 84 ! ! ! status: 27890 1126 85 ! ! ! speak_action := 14; 27900 1127 86 ! ! ! 27910 1128 87 ! ! ! nak , 27920 1129 88 ! ! ! free : \f tsvaclst 81.06.16. 13.41. page 34 27930 1130 89 ! ! ! speak_action := 11; 27940 1131 90 ! ! ! 27950 1132 91 ! ! END (* of case in polling *); 27960 1133 92 ! ! 27970 1134 93 ! ! 27980 1135 94 ! ! testi : (* master telegram is testi =============================*) 27990 1136 95 ! ! CASE slave_opcode OF 28000 1137 96 ! ! ! 28010 1138 97 ! ! ! p_ack , 28020 1139 98 ! ! ! data , 28030 1140 99 ! ! ! opr , 28040 1141 100 ! ! ! d_ack : (* non expected answer on testi *) 28050 1142 101 ! ! ! speak_action := 1; 28060 1143 102 ! ! ! 28070 1144 103 ! ! ! status: 28080 1145 104 ! ! ! speak_action := 14; 28090 1146 105 ! ! ! 28100 1147 106 ! ! ! t_ack : 28110 1148 107 ! ! ! speak_action := 12; 28120 1149 108 ! ! ! 28130 1150 109 ! ! ! nak , 28140 1151 110 ! ! ! free : 28150 1152 111 ! ! ! speak_action := 2; 28160 1153 112 ! ! ! 28170 1154 113 ! ! END (* of case in testi *) 28180 1155 114 ! END (* of case on lamspeak_state *); 28190 1156 115 ! 28200 1157 116 ! 28210 1158 117 ! CASE speak_action OF (* the treatment of: "speak_actions" =======*) 28220 1159 118 ! ! 28230 1160 119 ! ! 1: (* non expected answers *) 28240 1161 120 ! ! BEGIN 28250 1162 121 ! ! ! build_line_dep_telegram( tolam_ref, line ); 28260 1163 122 ! ! ! fault_at_line; 28270 1164 123 ! ! ! signal( tolam_ref, lamsem^ ) 28280 1165 124 ! ! END; 28290 1166 125 ! ! 28300 1167 126 ! ! 2: (* nak and free answers only *) 28310 1168 127 ! ! BEGIN 28320 1169 128 ! ! ! fault_at_line; 28330 1170 129 ! ! ! build_same_telegram( tolam_ref ); 28340 1171 130 ! ! ! signal( tolam_ref, lamsem^ ) 28350 1172 131 ! ! END; 28360 1173 132 ! ! 28370 1174 133 ! ! 3: (* letter not finished *) 28380 1175 134 ! ! BEGIN \f tsvaclst 81.06.16. 13.41. page 35 28390 1176 135 ! ! ! ok_at_line; 28400 1177 136 ! ! ! area_pointer := area_pointer + 1; 28410 1178 137 ! ! ! build_a_letter_telegram( tolam_ref ); 28420 1179 138 ! ! ! signal( tolam_ref, lamsem^ ) 28430 1180 139 ! ! END; 28440 1181 140 ! ! 28450 1182 141 ! ! 4: (* letter finished, make receipt *) 28460 1183 142 ! ! BEGIN 28470 1184 143 ! ! ! ok_at_line; 28480 1185 144 ! ! ! area_pointer := 1; 28490 1186 145 ! ! ! 28500 1187 146 ! ! ! CASE area_to_lam(1) OF 28510 1188 147 ! ! ! ! #h30, #h31, #h32 : (* make receipt of delivered alarm *) 28520 1189 148 ! ! ! ! BEGIN 28530 1190 149 ! ! ! ! ! boo := get_net_addr( at_table_addr, area_to_lam(2) ); 28540 1191 150 ! ! ! ! ! demand_lbuf( log, 6, own_dc_log, #h2, 0, 0, 28550 1192 151 ! ! ! ! ! area_to_lam(1), area_to_lam(3), at_table_addr ) 28560 1193 152 ! ! ! ! END; 28570 1194 153 ! ! ! ! #h62 : (* make receipt of other *) 28580 1195 154 ! ! ! ! BEGIN 28590 1196 155 ! ! ! ! ! boo:= get_net_addr ( at_table_addr, area_to_lam(2)); 28600 1197 156 ! ! ! ! ! work.macro:= pack_dc_macro ( at_table_addr ); 28610 1198 157 ! ! ! ! ! work.micro:= dc_test_mic_addr; 28620 1199 158 ! ! ! ! ! demand_lbuf ( log, 4, work, #h63, 28630 1200 159 ! ! ! ! ! 0, 0, 0, 0, at_table_addr ); 28640 1201 160 ! ! ! ! END; 28650 1202 161 ! ! ! ! OTHERWISE (* nothing *) 28660 1203 162 ! ! ! END (* of case *); 28670 1204 163 ! ! ! 28680 1205 164 ! ! ! (* make master poll to handle response from vc *) 28690 1206 165 ! ! ! build_a_poll_telegram( tolam_ref ); 28700 1207 166 ! ! ! lamspeak_state := polling; 28710 1208 167 ! ! ! signal( tolam_ref, lamsem^ ) 28720 1209 168 ! ! END; 28730 1210 169 ! ! 28740 1211 170 ! ! 5: (* poll answers leading to poll sending *) 28750 1212 171 ! ! BEGIN 28760 1213 172 ! ! ! ok_at_line; 28770 1214 173 ! ! ! build_a_poll_telegram( tolam_ref ); 28780 1215 174 ! ! ! signal( tolam_ref, lamsem^ ) 28790 1216 175 ! ! END; 28800 1217 176 ! ! 28810 1218 177 ! ! 6: 28820 1219 178 ! ! BEGIN 28830 1220 179 ! ! ! area_from_lam(area_pointer) := slave_data; 28840 1221 180 ! ! ! area_pointer := area_pointer + 1; \f tsvaclst 81.06.16. 13.41. page 36 28850 1222 181 ! ! ! ok_at_line; 28860 1223 182 ! ! ! build_a_poll_telegram( tolam_ref ); 28870 1224 183 ! ! ! signal( tolam_ref, lamsem^ ) 28880 1225 184 ! ! END; 28890 1226 185 ! ! 28900 1227 186 ! ! 7: (* three gathered telegrams, make lbuf *) 28910 1228 187 ! ! BEGIN 28920 1229 188 ! ! ! area_from_lam(area_pointer) := slave_data; 28930 1230 189 ! ! ! ok_at_line; 28940 1231 190 ! ! ! area_pointer := 1; 28950 1232 191 ! ! ! lamspeak_state := nottele; 28960 1233 192 ! ! ! 28970 1234 193 ! ! ! (* send the letter via lbuf *) 28980 1235 194 ! ! ! hlp := area_from_lam(1); 28990 1236 195 ! ! ! found:= true; 29000 1237 196 ! ! ! 29010 1238 197 ! ! ! IF (hlp<7) OR (hlp=#h40) OR (hlp=#h84) THEN 29020 1239 198 ! ! ! found:= get_net_addr( at_table_addr, area_from_lam(2)) ELSE 29030 1240 199 ! ! ! IF hlp=#h20 THEN 29040 1241 200 ! ! ! found:= get_vc_netaddr( work, area_from_lam(2)); 29050 1242 201 ! ! ! CASE found OF 29060 1243 202 ! ! ! ! true : 29070 1244 203 ! ! ! ! BEGIN 29080 1245 204 ! ! ! ! ! CASE hlp OF 29090 1246 205 ! ! ! ! ! ! #h40, #h84 : (* "styr" or "test" *) 29100 1247 206 ! ! ! ! ! ! demand_lbuf( norm, 1, at_table_addr, hlp, 0, 0, 29110 1248 207 ! ! ! ! ! ! area_from_lam(3), 0, own_dc ); 29120 1249 208 ! ! ! ! ! ! 7, 8 : (* nedl{g VC *) 29130 1250 209 ! ! ! ! ! ! demand_lbuf( norm, 0, own_dc, #h73, 0, area_from_lam(3) MOD 2, 29140 1251 210 ! ! ! ! ! ! 0, 0, at_table_addr); 29150 1252 211 ! ! ! ! ! ! #h20 : (* message *) 29160 1253 212 ! ! ! ! ! ! demand_lbuf( norm, 1, work, #h98, 0, 0, 29170 1254 213 ! ! ! ! ! ! area_from_lam(3), 0, own_dc); 29180 1255 214 ! ! ! ! ! ! 1..6 : (* "start AT", "stop AT", "-start AT" *) 29190 1256 215 ! ! ! ! ! ! (* "-stop AT", "nlat" , "-nlat" *) 29200 1257 216 ! ! ! ! ! ! BEGIN 29210 1258 217 ! ! ! ! ! ! ! CASE hlp OF 29220 1259 218 ! ! ! ! ! ! ! ! 1, 3: i := start_code; (* permission was "start at" *) 29230 1260 219 ! ! ! ! ! ! ! ! 2, 4: i := stop_code; (* permission was "stop at" *) 29240 1261 220 ! ! ! ! ! ! ! ! 5: i:= accepted; 29250 1262 221 ! ! ! ! ! ! ! ! 6: i:= not_accepted 29260 1263 222 ! ! ! ! ! ! ! END (* of case *); 29270 1264 223 ! ! ! ! ! ! ! work.macro:= pack_dc_macro ( at_table_addr ); 29280 1265 224 ! ! ! ! ! ! ! work.micro:= dc_poll_mic_addr; 29290 1266 225 ! ! ! ! ! ! ! CASE hlp OF 29300 1267 226 ! ! ! ! ! ! ! ! 1,2,3,4: \f tsvaclst 81.06.16. 13.41. page 37 29310 1268 227 ! ! ! ! ! ! ! ! demand_lbuf( log, 4, work, #h64, i, area_from_lam(3) MOD 2, 29320 1269 228 ! ! ! ! ! ! ! ! 0, 0, at_table_addr ); 29330 1270 229 ! ! ! ! ! ! ! ! 5,6: 29340 1271 230 ! ! ! ! ! ! ! ! demand_lbuf( log, 4, work, #h67, 0, i, 29350 1272 231 ! ! ! ! ! ! ! ! 0, 0, at_table_addr ); 29360 1273 232 ! ! ! ! ! ! ! END (* case *); 29370 1274 233 ! ! ! ! ! ! END 29380 1275 234 ! ! ! ! ! ! OTHERWISE 29390 1276 235 ! ! ! ! ! ! BEGIN (* refuse command *) 29400 1277 236 ! ! ! ! ! ! ! area_to_lam(1) := #h10; 29410 1278 237 ! ! ! ! ! ! ! area_to_lam(2) := area_from_lam(2); 29420 1279 238 ! ! ! ! ! ! ! area_to_lam(3) := area_from_lam(3); 29430 1280 239 ! ! ! ! ! ! ! lamspeak_state := lettertovc; 29440 1281 240 ! ! ! ! ! ! ! build_a_letter_telegram( tolam_ref ); 29450 1282 241 ! ! ! ! ! ! ! signal( tolam_ref, lamsem^ ); 29460 1283 242 ! ! ! ! ! ! END; 29470 1284 243 ! ! ! ! ! END (* end case hlp *); 29480 1285 244 ! ! ! ! END; 29490 1286 245 ! ! ! ! 29500 1287 246 ! ! ! ! false: 29510 1288 247 ! ! ! ! BEGIN 29520 1289 248 ! ! ! ! ! IF (hlp = #h40) OR (hlp = #h84) THEN 29530 1290 249 ! ! ! ! ! area_to_lam(1) := #hf0 29540 1291 250 ! ! ! ! ! ELSE 29550 1292 251 ! ! ! ! ! IF hlp=#h20 THEN 29560 1293 252 ! ! ! ! ! area_to_lam(1):= #hf1 29570 1294 253 ! ! ! ! ! ELSE 29580 1295 254 ! ! ! ! ! IF (0<hlp) AND (hlp<7) THEN 29590 1296 255 ! ! ! ! ! area_to_lam(1) := #hf0 29600 1297 256 ! ! ! ! ! ELSE 29610 1298 257 ! ! ! ! ! area_to_lam(1) := #h10; 29620 1299 258 ! ! ! ! ! area_to_lam(2) := area_from_lam(2); 29630 1300 259 ! ! ! ! ! area_to_lam(3) := area_from_lam(3); 29640 1301 260 ! ! ! ! ! lamspeak_state := lettertovc; 29650 1302 261 ! ! ! ! ! build_a_letter_telegram( tolam_ref ); 29660 1303 262 ! ! ! ! ! signal( tolam_ref, lamsem^ ); 29670 1304 263 ! ! ! ! END (* of false *) 29680 1305 264 ! ! ! END (* of case on check *) 29690 1306 265 ! ! END (* of action 7 *); 29700 1307 266 ! ! 29710 1308 267 ! ! 8: (* a single poll caused by a clockpulse *) 29720 1309 268 ! ! BEGIN 29730 1310 269 ! ! ! ok_at_line; 29740 1311 270 ! ! ! buftype := used; 29750 1312 271 ! ! ! lamspeak_state := nottele 29760 1313 272 ! ! END (* of action 8 *); \f tsvaclst 81.06.16. 13.41. page 38 29770 1314 273 ! ! 29780 1315 274 ! ! 9: (* non expected answers caused by a single poll *) 29790 1316 275 ! ! BEGIN 29800 1317 276 ! ! ! fault_at_line; 29810 1318 277 ! ! ! buftype := used; 29820 1319 278 ! ! ! lamspeak_state := nottele 29830 1320 279 ! ! END (* of action 9 *); 29840 1321 280 ! ! 29850 1322 281 ! ! 10: (* first telegram of a letter is comming *) 29860 1323 282 ! ! BEGIN 29870 1324 283 ! ! ! ok_at_line;; 29880 1325 284 ! ! ! area_from_lam(1) := slave_data; 29890 1326 285 ! ! ! area_pointer := 2; 29900 1327 286 ! ! ! build_a_poll_telegram( tolam_ref ); 29910 1328 287 ! ! ! lamspeak_state := letterfromvc; 29920 1329 288 ! ! ! signal ( tolam_ref, lamsem^ ) 29930 1330 289 ! ! END (* of action 10 *); 29940 1331 290 ! ! 29950 1332 291 ! ! 11: (* nak and free answers in polling state only *) 29960 1333 292 ! ! BEGIN 29970 1334 293 ! ! ! fault_at_line; 29980 1335 294 ! ! ! buftype := used; 29990 1336 295 ! ! ! lamspeak_state := nottele 30000 1337 296 ! ! END; 30010 1338 297 ! ! 30020 1339 298 ! ! 12: (* usable answers on master testi *) 30030 1340 299 ! ! BEGIN 30040 1341 300 ! ! ! 30050 1342 301 ! ! ! ok_at_line; 30060 1343 302 ! ! ! demand_lbuf( norm, 1, keep_sender, keep_the_opcode+1, 0, accepted, 30070 1344 303 ! ! ! slave_data, 0, own_dc ); 30080 1345 304 ! ! ! (*------ 8.1 or 8.3 demanded *) 30090 1346 305 ! ! ! buftype := used; 30100 1347 306 ! ! ! lamspeak_state := nottele; 30110 1348 307 ! ! ! 30120 1349 308 ! ! END (* of action 12 *); 30130 1350 309 ! ! 30140 1351 310 ! ! 13: (* empty *); 30150 1352 311 ! ! 30160 1353 312 ! ! 14: (* status answers *) 30170 1354 313 ! ! BEGIN 30180 1355 314 ! ! ! demand_lbuf( norm, 1, own_dc, #h32, 0, 0, 30190 1356 315 ! ! ! slave_data, 0, own_dc ); 30200 1357 316 ! ! ! ok_at_line; 30210 1358 317 ! ! ! build_serial_changed_telegram( tolam_ref); 30220 1359 318 ! ! ! signal( tolam_ref, lamsem^ ) \f tsvaclst 81.06.16. 13.41. page 39 30230 1360 319 ! ! END (* of action 14 *); 30240 1361 320 ! ! 30250 1362 321 ! END (* of case on speak_action *); 30260 1363 322 ! 30270 1364 323 END (* of from_lam_driver procedure *); 30280 1365 30290 1366 \f tsvaclst 81.06.16. 13.41. page 40 31010 1367 BEGIN 31020 1368 1 ! (******************************************* 31030 1369 2 ! **** the body of the lamspeak procedure **** 31040 1370 3 ! ********************************************) 31050 1371 4 ! 31060 1372 5 ! (*q if test then testout(zout,"speak st in ",ord(lamspeak_state)); q*) 31070 1373 6 ! 31080 1374 7 ! CASE buftype OF 31090 1375 8 ! ! clock : (* <--------<< *) 31100 1376 9 ! ! (* ------ No nessage buffer is involved. * 31110 1377 10 ! ! * ------ The lam buffer is idle at tolam_ref. *) 31120 1378 11 ! ! 31130 1379 12 ! ! BEGIN 31140 1380 13 ! ! ! 31150 1381 14 ! ! ! build_a_poll_telegram( tolam_ref ); 31160 1382 15 ! ! ! lamspeak_state := polling; 31170 1383 16 ! ! ! signal( tolam_ref, lamsem^ ); 31180 1384 17 ! ! ! 31190 1385 18 ! ! END; 31200 1386 19 ! ! 31210 1387 20 ! ! permiss, 31220 1388 21 ! ! alarm, (* <--------<< *) 31230 1389 22 ! ! report, 31240 1390 23 ! ! testat: 31250 1391 24 ! ! (* the message buffer is involved at mess_ref. * 31260 1392 25 ! ! * return this buffer, ie buftype := empty. * 31270 1393 26 ! ! * The lam buffer is idle at tolam_ref. *) 31280 1394 27 ! ! BEGIN 31290 1395 28 ! ! ! keep_the_opcode:= mess_ref^.u4; 31300 1396 29 ! ! ! to_lam_driver; 31310 1397 30 ! ! ! buftype := empty; 31320 1398 31 ! ! END; 31330 1399 32 ! ! 31340 1400 33 ! ! lam : 31350 1401 34 ! ! (* The message buffer is a lam buffer, that is * 31360 1402 35 ! ! * the lam buffer is not idle. * 31370 1403 36 ! ! * Transfer the reference, ie tolam_ref :=: mess_ref. *) 31380 1404 37 ! ! BEGIN 31390 1405 38 ! ! ! tolam_ref :=: mess_ref; 31400 1406 39 ! ! ! 31410 1407 40 ! ! ! LOCK tolam_ref AS telegram : from_telegram_type DO 31420 1408 41 ! ! ! BEGIN (*----- get all the information needed *) 31430 1409 42 ! ! ! ! slave_opcode := telegram.from_opcode; 31440 1410 43 ! ! ! ! slave_data := telegram.from_data; 31450 1411 44 ! ! ! END; 31460 1412 45 ! ! ! \f tsvaclst 81.06.16. 13.41. page 41 31470 1413 46 ! ! ! (*x if lamtest then 31480 1414 47 ! ! ! begin 31490 1415 48 ! ! ! case slave_opcode of 31500 1416 49 ! ! ! 0: teletxt := " P-ACK "; 31510 1417 50 ! ! ! 1: teletxt := " DATA "; 31520 1418 51 ! ! ! 2: teletxt := " OPR "; 31530 1419 52 ! ! ! 3: teletxt := " STATUS "; 31540 1420 53 ! ! ! 4: teletxt := " D-ACK "; 31550 1421 54 ! ! ! 5: teletxt := " T-ACK "; 31560 1422 55 ! ! ! 6: teletxt := " NAK "; 31570 1423 56 ! ! ! 7: teletxt := " FREE " 31580 1424 57 ! ! ! end; 31590 1425 58 ! ! ! testout(zout, teletxt, slave_data); 31600 1426 59 ! ! ! end; x*) 31610 1427 60 ! ! ! 31620 1428 61 ! ! ! IF check5( tolam_ref, check ) = false THEN 31630 1429 62 ! ! ! BEGIN 31640 1430 63 ! ! ! ! slave_opcode := free; 31650 1431 64 ! ! ! ! IF lamtest THEN testout(zout,"CHEHK5FAULT ",slave_opcode); 31660 1432 65 ! ! ! END; 31670 1433 66 ! ! ! 31680 1434 67 ! ! ! IF tolam_ref^.u2 <> 0 THEN 31690 1435 68 ! ! ! BEGIN 31700 1436 69 ! ! ! ! slave_opcode := free; 31710 1437 70 ! ! ! ! IF tolam_ref^.u2 = 5 THEN 31720 1438 71 ! ! ! ! BEGIN 31730 1439 72 ! ! ! ! ! lam_timeout := true; 31740 1440 73 ! ! ! ! ! (*x if lamtest then testout(zout,"LAMTIMEOUT ",slave_opcode); x*) 31750 1441 74 ! ! ! ! END; 31760 1442 75 ! ! ! ! (*x if lamtest then testout(zout,"LAMFAULT ",tolam_ref^.u2); x*) 31770 1443 76 ! ! ! END; 31780 1444 77 ! ! ! 31790 1445 78 ! ! ! from_lam_driver; 31800 1446 79 ! ! ! 31810 1447 80 ! ! END; 31820 1448 81 ! ! 31830 1449 82 ! ! listen : (* <--------<< *) 31840 1450 83 ! ! (* The listen buffer is refered to by mess_ref. *) 31850 1451 84 ! ! BEGIN 31860 1452 85 ! ! ! (*---- Nb ---- if lbuf_needed < 1 the program fault *) 31870 1453 86 ! ! ! 31880 1454 87 ! ! ! build_an_lbuf( mess_ref, lbuf_info( lbuf_needed ) ); 31890 1455 88 ! ! ! 31900 1456 89 ! ! ! lbuf_needed := lbuf_needed - 1; 31910 1457 90 ! ! ! 31920 1458 91 ! ! ! buftype := listen; \f tsvaclst 81.06.16. 13.41. page 42 31930 1459 92 ! ! ! 31940 1460 93 ! ! END 31950 1461 94 ! ! OTHERWISE 31960 1462 95 ! ! (*-------- Nb --- program fault *); 31970 1463 96 ! ! 31980 1464 97 ! END (* of case on buftype *); 31990 1465 98 ! 32000 1466 99 ! IF lamspeak_state = nottele THEN 32010 1467 100 ! vcatc_state := active; 32020 1468 101 ! 32030 1469 102 ! IF lbuf_needed > 0 THEN 32040 1470 103 ! BEGIN 32050 1471 104 ! ! (*q if test then testout(zout,"lbuf needed:",lbuf_needed); q*) 32060 1472 105 ! ! vcatc_state := lam_need_buf; 32070 1473 106 ! ! IF no_of_listen > 0 THEN 32080 1474 107 ! ! input := from_listen_ref; (* There is a lbuf *) 32090 1475 108 ! END; 32100 1476 109 ! 32110 1477 110 ! (*q if test then testout(zout,"speak st out",ord(lamspeak_state)); q*) 32120 1478 111 END (* of lamspeak procedure *); 32130 1479 \f tsvaclst 81.06.16. 13.41. page 43 33010 1480 BEGIN (***** main program *****) 33020 1481 1 ! 33030 1482 2 ! (* initier module *) 33040 1483 3 ! testopen(zout,own.incname,opsem); 33050 1484 4 ! testout(zout, version, al_env_version); 33060 1485 5 ! testout (zout, "chann/addr ", canno*1000+micadr); 33070 1486 6 ! 33080 1487 7 ! alloc(mess_ref,lam_pool,messem.s^); 33090 1488 8 ! WITH mess_ref^ DO 33100 1489 9 ! BEGIN 33110 1490 10 ! ! u1:= create_at_ch; 33120 1491 11 ! ! u2:= canno; 33130 1492 12 ! ! u3:= lam_route 33140 1493 13 ! END; 33150 1494 14 ! LOCK mess_ref AS buf : ch_format DO 33160 1495 15 ! WITH buf DO 33170 1496 16 ! BEGIN 33180 1497 17 ! ! cntl_inf:= at_control; 33190 1498 18 ! ! time_inf:= con_lam_time 33200 1499 19 ! END; 33210 1500 20 ! signal(mess_ref,lamsem^); 33220 1501 21 ! (* initier timeout buffers *) 33230 1502 22 ! alloc(bookup_ref,book_pool,timeout_answer); 33240 1503 23 ! bookup_ref^.u3:= tim_route1; 33250 1504 24 ! 33260 1505 25 ! alloc(clock_ref,tim_pool,messem.s^); 33270 1506 26 ! WITH clock_ref^ DO 33280 1507 27 ! BEGIN 33290 1508 28 ! ! u1:= delay_req; 33300 1509 29 ! ! u3:= tim_route; 33310 1510 30 ! ! u4:= #hc1 33320 1511 31 ! END; 33330 1512 32 ! LOCK clock_ref AS buf: timers DO 33340 1513 33 ! buf.object:= poll_delay; 33350 1514 34 ! 33360 1515 35 ! alloc(timeout_ref,tim_pool,messem.s^); 33370 1516 36 ! WITH timeout_ref^ DO 33380 1517 37 ! BEGIN 33390 1518 38 ! ! u1:= book_req; 33400 1519 39 ! ! u3:= tim_route1; 33410 1520 40 ! ! u4:= #hc2 33420 1521 41 ! END; 33430 1522 42 ! \f tsvaclst 81.06.16. 13.41. page 44 34010 1523 43 ! line := ok; 34020 1524 44 ! input := from_sem; 34030 1525 45 ! vcatc_state := notready; (* <--------<< *) 34040 1526 46 ! old_state := notready; 34050 1527 47 ! lamspeak_state := nottele; 34060 1528 48 ! zero_addr := alarmnetaddr(macroaddr(0,0,0),0); 34070 1529 49 ! cur_vcm := zero_addr; 34080 1530 50 ! own_dc.macro := dc_macro; 34090 1531 51 ! own_dc.micro := dc_erh_mic_addr; 34100 1532 52 ! own_dc_log.macro := dc_macro; 34110 1533 53 ! own_dc_log.micro := dc_log_mic_addr; 34120 1534 54 ! 34130 1535 55 ! novcm:= 1; 34140 1536 56 ! vcmtable(novcm).vc_code:= 0; 34150 1537 57 ! vcmtable(novcm).vc_addr:= own_dc; 34160 1538 58 ! vcmtable(novcm).vc_arrange:= 0; 34170 1539 59 ! vcmtable(novcm).vc_relief := false; 34180 1540 60 ! 34190 1541 61 ! \f tsvaclst 81.06.16. 13.41. page 45 35010 1542 62 ! REPEAT 35020 1543 63 ! ! (* read one new buffer *) 35030 1544 64 ! ! (*q if test then 35040 1545 65 ! ! begin 35050 1546 66 ! ! testout(zout," input : ",ord(input)); 35060 1547 67 ! ! testout(zout," vcatc st : ",ord(vcatc_state)); 35070 1548 68 ! ! end; q*) 35080 1549 69 ! ! 35090 1550 70 ! ! 35100 1551 71 ! ! CASE input OF 35110 1552 72 ! ! ! from_sem : 35120 1553 73 ! ! ! BEGIN 35130 1554 74 ! ! ! ! CASE vcatc_state OF 35140 1555 75 ! ! ! ! ! notready..active : IF NOT nil(fromlam_ref) THEN 35150 1556 76 ! ! ! ! ! mess_ref :=: fromlam_ref ELSE 35160 1557 77 ! ! ! ! ! IF no_of_queue>0 THEN 35170 1558 78 ! ! ! ! ! BEGIN 35180 1559 79 ! ! ! ! ! ! wait(mess_ref,queuesem.w^); 35190 1560 80 ! ! ! ! ! ! no_of_queue:= no_of_queue - 1 35200 1561 81 ! ! ! ! ! END ELSE 35210 1562 82 ! ! ! ! ! wait(mess_ref,messem.w^); 35220 1563 83 ! ! ! ! ! lam_talk : IF NOT nil(fromlam_ref) THEN 35230 1564 84 ! ! ! ! ! mess_ref :=: fromlam_ref ELSE 35240 1565 85 ! ! ! ! ! wait(mess_ref,messem.w^); 35250 1566 86 ! ! ! ! ! OTHERWISE wait(mess_ref,messem.w^) 35260 1567 87 ! ! ! ! END; 35270 1568 88 ! ! ! ! buftype:= unknown; 35280 1569 89 ! ! ! END; 35290 1570 90 ! ! ! from_listen_ref : 35300 1571 91 ! ! ! BEGIN 35310 1572 92 ! ! ! ! found:= get_listen_buf; 35320 1573 93 ! ! ! ! input:= from_sem; 35330 1574 94 ! ! ! ! buftype:= unknown; 35340 1575 95 ! ! ! END; 35350 1576 96 ! ! ! nothing : input:= from_sem 35360 1577 97 ! ! ! OTHERWISE 35370 1578 98 ! ! END; 35380 1579 99 ! ! 35390 1580 100 ! ! 35400 1581 101 ! ! (* classify buffer *) 35410 1582 102 ! ! rute := mess_ref^.u3; 35420 1583 103 ! ! func := mess_ref^.u4 DIV 16; 35430 1584 104 ! ! types:= mess_ref^.u4 MOD 16; 35440 1585 105 ! ! 35450 1586 106 ! ! (*q if test then 35460 1587 107 ! ! begin \f tsvaclst 81.06.16. 13.41. page 46 35470 1588 108 ! ! testout(zout," route : ",rute); 35480 1589 109 ! ! testout(zout," functype : ",func*100+types); 35490 1590 110 ! ! end; q*) 35500 1591 111 ! ! 35510 1592 112 ! ! IF buftype=unknown THEN 35520 1593 113 ! ! CASE rute OF 35530 1594 114 ! ! ! dummy_route : (*this buffer must bee returned*) 35540 1595 115 ! ! ! buftype:= empty; 35550 1596 116 ! ! ! tim_route : (* delay from timeoutmodule *) 35560 1597 117 ! ! ! CASE types OF 35570 1598 118 ! ! ! ! 1 : buftype:= clock 35580 1599 119 ! ! ! ! OTHERWISE unknown_buf(unknown_opcode) 35590 1600 120 ! ! ! END; 35600 1601 121 ! ! ! tim_route1 : (* timeout answer and longtimeout *) 35610 1602 122 ! ! ! CASE types OF 35620 1603 123 ! ! ! ! 2 : LOCK mess_ref AS buf : timers DO 35630 1604 124 ! ! ! ! IF buf.object = vcc_vch_ltime THEN 35640 1605 125 ! ! ! ! buftype:= ltime ELSE 35650 1606 126 ! ! ! ! IF buf.object = vcc_vch_stime THEN 35660 1607 127 ! ! ! ! buftype:= stime ELSE 35670 1608 128 ! ! ! ! unknown_buf(rejected) 35680 1609 129 ! ! ! ! OTHERWISE unknown_buf(unknown_opcode) 35690 1610 130 ! ! ! END; 35700 1611 131 ! ! ! netc_route : (*buffer from vch*) 35710 1612 132 ! ! ! CASE func OF 35720 1613 133 ! ! ! ! 0 : CASE types OF 35730 1614 134 ! ! ! ! ! 1 : buftype:= permiss (* dc --> vc *) 35740 1615 135 ! ! ! ! ! OTHERWISE unknown_buf(unknown_opcode); 35750 1616 136 ! ! ! ! END; 35760 1617 137 ! ! ! ! 1 : CASE types OF 35770 1618 138 ! ! ! ! ! 2 : buftype:= permiss (* xxx --> vc *) 35780 1619 139 ! ! ! ! ! OTHERWISE unknown_buf(unknown_opcode); 35790 1620 140 ! ! ! ! END; 35800 1621 141 ! ! ! ! 2 : CASE types OF 35810 1622 142 ! ! ! ! ! 0,1, 35820 1623 143 ! ! ! ! ! 2,3, 35830 1624 144 ! ! ! ! ! 4,5, 35840 1625 145 ! ! ! ! ! 6,7, 35850 1626 146 ! ! ! ! ! 8,9 : buftype:= broad 35860 1627 147 ! ! ! ! ! OTHERWISE unknown_buf(unknown_opcode) 35870 1628 148 ! ! ! ! END; 35880 1629 149 ! ! ! ! 3 : CASE types OF 35890 1630 150 ! ! ! ! ! 0,1,2 : buftype:= alarm (* at --> vcat *) 35900 1631 151 ! ! ! ! ! OTHERWISE unknown_buf(unknown_opcode) 35910 1632 152 ! ! ! ! END; 35920 1633 153 ! ! ! ! 4 : CASE types OF \f tsvaclst 81.06.16. 13.41. page 47 35930 1634 154 ! ! ! ! ! 1 : buftype:= report (* at --> vcat *) 35940 1635 155 ! ! ! ! ! OTHERWISE unknown_buf(unknown_opcode) 35950 1636 156 ! ! ! ! END; 35960 1637 157 ! ! ! ! 6 : CASE types OF 35970 1638 158 ! ! ! ! ! 2 , 35980 1639 159 ! ! ! ! ! 4 , 35990 1640 160 ! ! ! ! ! 6 : buftype := permiss (* dc --> vc *) 36000 1641 161 ! ! ! ! ! OTHERWISE unknown_buf( unknown_opcode ) 36010 1642 162 ! ! ! ! END; 36020 1643 163 ! ! ! ! 7 : CASE types OF 36030 1644 164 ! ! ! ! ! 2 : buftype:= permiss (* dc --> vc *) 36040 1645 165 ! ! ! ! ! OTHERWISE unknown_buf(unknown_opcode) 36050 1646 166 ! ! ! ! END; 36060 1647 167 ! ! ! ! 8 : CASE types OF 36070 1648 168 ! ! ! ! ! 0,2 : buftype:= testat; (* dc --> vcat *) 36080 1649 169 ! ! ! ! ! 5 : buftype:= report (* at --> vcat *) 36090 1650 170 ! ! ! ! ! OTHERWISE unknown_buf(unknown_opcode) 36100 1651 171 ! ! ! ! END; 36110 1652 172 ! ! ! ! 9 : CASE types OF 36120 1653 173 ! ! ! ! ! 0 , 36130 1654 174 ! ! ! ! ! 2 : buftype:= operate; 36140 1655 175 ! ! ! ! ! 8 : buftype:= permiss 36150 1656 176 ! ! ! ! ! OTHERWISE unknown_buf(unknown_opcode) 36160 1657 177 ! ! ! ! END; 36170 1658 178 ! ! ! ! 10 : CASE types OF 36180 1659 179 ! ! ! ! ! 2,4,6 : buftype:= table 36190 1660 180 ! ! ! ! ! OTHERWISE unknown_buf(unknown_opcode) 36200 1661 181 ! ! ! ! END; 36210 1662 182 ! ! ! ! 11 : CASE types OF 36220 1663 183 ! ! ! ! ! 2,4,6,8,10,12,14 : buftype:= service 36230 1664 184 ! ! ! ! ! OTHERWISE unknown_buf(unknown_opcode) 36240 1665 185 ! ! ! ! END; 36250 1666 186 ! ! ! ! 12 : CASE types OF 36260 1667 187 ! ! ! ! ! 5 : buftype:= listen; 36270 1668 188 ! ! ! ! ! 8 : buftype:= service 36280 1669 189 ! ! ! ! ! OTHERWISE unknown_buf(unknown_opcode) 36290 1670 190 ! ! ! ! END 36300 1671 191 ! ! ! ! OTHERWISE unknown_buf(unknown_opcode) 36310 1672 192 ! ! ! END; 36320 1673 193 ! ! ! lam_route : (* buffer from lamdriver *) 36330 1674 194 ! ! ! buftype:= lam 36340 1675 195 ! ! ! OTHERWISE unknown_buf(unknown_route) 36350 1676 196 ! ! END; 36360 1677 197 ! ! 36370 1678 198 ! ! \f tsvaclst 81.06.16. 13.41. page 48 37010 1679 199 ! ! (* make action *) 37020 1680 200 ! ! action:= acttable(vcatc_state,buftype); 37030 1681 201 ! ! (*q if test then 37040 1682 202 ! ! begin 37050 1683 203 ! ! testout(zout," buftype : ",ord(buftype)); 37060 1684 204 ! ! testout(zout," action : ",action); 37070 1685 205 ! ! end; q*) 37080 1686 206 ! ! CASE action OF 37090 1687 207 ! ! ! 37100 1688 208 ! ! ! 1 : (* no action, has been taken *); 37110 1689 209 ! ! ! 37120 1690 210 ! ! ! 2 : (* not ready *) 37130 1691 211 ! ! ! unknown_buf(not_ready); 37140 1692 212 ! ! ! 37150 1693 213 ! ! ! 3 : (* passive , alarm/report/testat received *) 37160 1694 214 ! ! ! IF cur_vcm <> zero_addr THEN 37170 1695 215 ! ! ! (* send to current vcm *) 37180 1696 216 ! ! ! LOCK mess_ref AS buf: alarmlabel DO 37190 1697 217 ! ! ! buf.rec:= cur_vcm 37200 1698 218 ! ! ! ELSE 37210 1699 219 ! ! ! unknown_buf(passivated); 37220 1700 220 ! ! ! 37230 1701 221 ! ! ! 4 : (* save listenbuf *) 37240 1702 222 ! ! ! save_listen_buf; 37250 1703 223 ! ! ! 37260 1704 224 ! ! ! 5 : (* update table *) 37270 1705 225 ! ! ! BEGIN 37280 1706 226 ! ! ! ! CASE types OF 37290 1707 227 ! ! ! ! ! 2 : (* at_addr *) 37300 1708 228 ! ! ! ! ! LOCK mess_ref AS buf : mask_atadr DO 37310 1709 229 ! ! ! ! ! WITH buf DO 37320 1710 230 ! ! ! ! ! BEGIN 37330 1711 231 ! ! ! ! ! ! fix.result:= accepted; 37340 1712 232 ! ! ! ! ! ! IF get_adr_code(entry.at_addr, adr_code) THEN 37350 1713 233 ! ! ! ! ! ! CASE fix.update OF 37360 1714 234 ! ! ! ! ! ! ! read_code: BEGIN 37370 1715 235 ! ! ! ! ! ! ! ! entry:= atadrtable(next); 37380 1716 236 ! ! ! ! ! ! ! ! fix.no_of_by:= label_size + 5; 37390 1717 237 ! ! ! ! ! ! ! END; 37400 1718 238 ! ! ! ! ! ! ! insert_code : BEGIN 37410 1719 239 ! ! ! ! ! ! ! ! atadrtable(next):= atadrtable(noatadr); 37420 1720 240 ! ! ! ! ! ! ! ! noatadr:= noatadr - 1; 37430 1721 241 ! ! ! ! ! ! ! ! IF get_net_addr(work, entry.addr_code) THEN 37440 1722 242 ! ! ! ! ! ! ! ! atadrtable(next):= entry ELSE 37450 1723 243 ! ! ! ! ! ! ! ! BEGIN 37460 1724 244 ! ! ! ! ! ! ! ! ! noatadr:= noatadr + 1; \f tsvaclst 81.06.16. 13.41. page 49 37470 1725 245 ! ! ! ! ! ! ! ! ! atadrtable(noatadr):= entry 37480 1726 246 ! ! ! ! ! ! ! ! END; 37490 1727 247 ! ! ! ! ! ! ! END; 37500 1728 248 ! ! ! ! ! ! ! remove_code: BEGIN 37510 1729 249 ! ! ! ! ! ! ! ! atadrtable(next):= atadrtable(noatadr); 37520 1730 250 ! ! ! ! ! ! ! ! noatadr:= noatadr - 1; 37530 1731 251 ! ! ! ! ! ! ! ! IF get_net_addr(work, entry.addr_code) THEN 37540 1732 252 ! ! ! ! ! ! ! ! BEGIN 37550 1733 253 ! ! ! ! ! ! ! ! ! atadrtable(next):= atadrtable(noatadr); 37560 1734 254 ! ! ! ! ! ! ! ! ! noatadr:= noatadr - 1; 37570 1735 255 ! ! ! ! ! ! ! ! END; 37580 1736 256 ! ! ! ! ! ! ! END; 37590 1737 257 ! ! ! ! ! ! ! OTHERWISE fix.result:= unknown_update; 37600 1738 258 ! ! ! ! ! ! END (* case found *) 37610 1739 259 ! ! ! ! ! ! ELSE 37620 1740 260 ! ! ! ! ! ! CASE fix.update OF 37630 1741 261 ! ! ! ! ! ! ! read_code: 37640 1742 262 ! ! ! ! ! ! ! IF get_net_addr(work, entry.addr_code) THEN 37650 1743 263 ! ! ! ! ! ! ! BEGIN 37660 1744 264 ! ! ! ! ! ! ! ! entry:= atadrtable(next); 37670 1745 265 ! ! ! ! ! ! ! ! fix.no_of_by:= label_size + 5; 37680 1746 266 ! ! ! ! ! ! ! END ELSE 37690 1747 267 ! ! ! ! ! ! ! fix.result:= not_found; 37700 1748 268 ! ! ! ! ! ! ! insert_code: 37710 1749 269 ! ! ! ! ! ! ! IF get_net_addr(work, entry.addr_code) THEN 37720 1750 270 ! ! ! ! ! ! ! atadrtable(next):= entry ELSE 37730 1751 271 ! ! ! ! ! ! ! IF noatadr<at_addr_l THEN 37740 1752 272 ! ! ! ! ! ! ! BEGIN 37750 1753 273 ! ! ! ! ! ! ! ! noatadr:= noatadr + 1; 37760 1754 274 ! ! ! ! ! ! ! ! atadrtable(noatadr):= entry 37770 1755 275 ! ! ! ! ! ! ! END ELSE 37780 1756 276 ! ! ! ! ! ! ! fix.result:= no_room; 37790 1757 277 ! ! ! ! ! ! ! remove_code: 37800 1758 278 ! ! ! ! ! ! ! IF get_net_addr(work, entry.addr_code) THEN 37810 1759 279 ! ! ! ! ! ! ! BEGIN 37820 1760 280 ! ! ! ! ! ! ! ! atadrtable(next):= atadrtable(noatadr); 37830 1761 281 ! ! ! ! ! ! ! ! noatadr:= noatadr - 1; 37840 1762 282 ! ! ! ! ! ! ! END ELSE 37850 1763 283 ! ! ! ! ! ! ! fix.result:= not_found; 37860 1764 284 ! ! ! ! ! ! ! OTHERWISE 37870 1765 285 ! ! ! ! ! ! ! fix.result:= unknown_update; 37880 1766 286 ! ! ! ! ! ! END (* case not found *) 37890 1767 287 ! ! ! ! ! END; (* with buf *) 37900 1768 288 ! ! ! ! ! 4 : (* at-ts *) 37910 1769 289 ! ! ! ! ! LOCK mess_ref AS buf: mask_atts DO 37920 1770 290 ! ! ! ! ! WITH buf DO \f tsvaclst 81.06.16. 13.41. page 50 37930 1771 291 ! ! ! ! ! BEGIN 37940 1772 292 ! ! ! ! ! ! fix.result:= accepted; 37950 1773 293 ! ! ! ! ! ! IF get_atts_index( entry.ts_addr, intg_aux) THEN 37960 1774 294 ! ! ! ! ! ! CASE fix.update OF 37970 1775 295 ! ! ! ! ! ! ! read_code: 37980 1776 296 ! ! ! ! ! ! ! BEGIN 37990 1777 297 ! ! ! ! ! ! ! ! entry:= attstable(next); 38000 1778 298 ! ! ! ! ! ! ! ! fix.no_of_by:= label_size + 5; 38010 1779 299 ! ! ! ! ! ! ! END; 38020 1780 300 ! ! ! ! ! ! ! insert_code: 38030 1781 301 ! ! ! ! ! ! ! attstable(next):= entry; 38040 1782 302 ! ! ! ! ! ! ! remove_code: 38050 1783 303 ! ! ! ! ! ! ! BEGIN 38060 1784 304 ! ! ! ! ! ! ! ! attstable(next):= attstable(noatts); 38070 1785 305 ! ! ! ! ! ! ! ! noatts:= noatts - 1; 38080 1786 306 ! ! ! ! ! ! ! END; 38090 1787 307 ! ! ! ! ! ! ! OTHERWISE fix.result:= unknown_update; 38100 1788 308 ! ! ! ! ! ! END (* case found *) 38110 1789 309 ! ! ! ! ! ! ELSE 38120 1790 310 ! ! ! ! ! ! CASE fix.update OF 38130 1791 311 ! ! ! ! ! ! ! read_code: 38140 1792 312 ! ! ! ! ! ! ! fix.result:= not_found; 38150 1793 313 ! ! ! ! ! ! ! insert_code: 38160 1794 314 ! ! ! ! ! ! ! IF noatts<at_ts_l THEN 38170 1795 315 ! ! ! ! ! ! ! BEGIN 38180 1796 316 ! ! ! ! ! ! ! ! noatts:= noatts + 1; 38190 1797 317 ! ! ! ! ! ! ! ! attstable(noatts):= entry; 38200 1798 318 ! ! ! ! ! ! ! END ELSE 38210 1799 319 ! ! ! ! ! ! ! fix.result:= no_room; 38220 1800 320 ! ! ! ! ! ! ! remove_code: 38230 1801 321 ! ! ! ! ! ! ! fix.result:= not_found; 38240 1802 322 ! ! ! ! ! ! ! OTHERWISE fix.result:= unknown_update; 38250 1803 323 ! ! ! ! ! ! END (* case not found *) 38260 1804 324 ! ! ! ! ! END; (* with buf *) 38270 1805 325 ! ! ! ! ! 6 : (* vcmat *) 38280 1806 326 ! ! ! ! ! LOCK mess_ref AS buf : mask_vcmat DO 38290 1807 327 ! ! ! ! ! WITH buf DO 38300 1808 328 ! ! ! ! ! BEGIN 38310 1809 329 ! ! ! ! ! ! fix.result:= accepted; 38320 1810 330 ! ! ! ! ! ! IF get_vc_code(entry.vc_addr, adr_code) THEN 38330 1811 331 ! ! ! ! ! ! CASE fix.update OF 38340 1812 332 ! ! ! ! ! ! ! read_code: 38350 1813 333 ! ! ! ! ! ! ! BEGIN 38360 1814 334 ! ! ! ! ! ! ! ! entry:=vcmtable(next); 38370 1815 335 ! ! ! ! ! ! ! ! fix.no_of_by:= label_size + 5; 38380 1816 336 ! ! ! ! ! ! ! END; \f tsvaclst 81.06.16. 13.41. page 51 38390 1817 337 ! ! ! ! ! ! ! insert_code: 38400 1818 338 ! ! ! ! ! ! ! vcmtable(next):= entry; 38410 1819 339 ! ! ! ! ! ! ! remove_code: 38420 1820 340 ! ! ! ! ! ! ! BEGIN 38430 1821 341 ! ! ! ! ! ! ! ! vcmtable(next):= vcmtable(novcm); 38440 1822 342 ! ! ! ! ! ! ! ! novcm:= novcm - 1; 38450 1823 343 ! ! ! ! ! ! ! END; 38460 1824 344 ! ! ! ! ! ! ! OTHERWISE fix.result:= unknown_update; 38470 1825 345 ! ! ! ! ! ! END (* case found *) 38480 1826 346 ! ! ! ! ! ! ELSE 38490 1827 347 ! ! ! ! ! ! CASE fix.update OF 38500 1828 348 ! ! ! ! ! ! ! read_code: 38510 1829 349 ! ! ! ! ! ! ! fix.result:= not_found; 38520 1830 350 ! ! ! ! ! ! ! insert_code: 38530 1831 351 ! ! ! ! ! ! ! IF novcm<vcmat_l THEN 38540 1832 352 ! ! ! ! ! ! ! BEGIN 38550 1833 353 ! ! ! ! ! ! ! ! novcm:= novcm + 1; 38560 1834 354 ! ! ! ! ! ! ! ! vcmtable(novcm):= entry; 38570 1835 355 ! ! ! ! ! ! ! END ELSE 38580 1836 356 ! ! ! ! ! ! ! fix.result:= no_room; 38590 1837 357 ! ! ! ! ! ! ! remove_code: 38600 1838 358 ! ! ! ! ! ! ! fix.result:= not_found; 38610 1839 359 ! ! ! ! ! ! ! OTHERWISE fix.result:= unknown_update; 38620 1840 360 ! ! ! ! ! ! END (* case not found *) 38630 1841 361 ! ! ! ! ! END; (* with buf *) 38640 1842 362 ! ! ! ! ! 38650 1843 363 ! ! ! ! ! OTHERWISE (* nothing *) 38660 1844 364 ! ! ! ! ! 38670 1845 365 ! ! ! ! END; 38680 1846 366 ! ! ! END; 38690 1847 367 ! ! ! 38700 1848 368 ! ! ! 6 : (* save received buffer *) 38710 1849 369 ! ! ! BEGIN 38720 1850 370 ! ! ! ! CASE buftype OF 38730 1851 371 ! ! ! ! ! clock : 38740 1852 372 ! ! ! ! ! BEGIN 38750 1853 373 ! ! ! ! ! ! clock_ref:=: mess_ref; 38760 1854 374 ! ! ! ! ! ! WHILE get_listen_buf DO 38770 1855 375 ! ! ! ! ! ! return(mess_ref) 38780 1856 376 ! ! ! ! ! END; 38790 1857 377 ! ! ! ! ! ltime, 38800 1858 378 ! ! ! ! ! stime : timeout_ref :=: mess_ref; 38810 1859 379 ! ! ! ! ! lam : 38820 1860 380 ! ! ! ! ! BEGIN 38830 1861 381 ! ! ! ! ! ! mess_ref^.u1:= write_read_at; 38840 1862 382 ! ! ! ! ! ! tolam_ref :=: mess_ref; \f tsvaclst 81.06.16. 13.41. page 52 38850 1863 383 ! ! ! ! ! ! IF vcatc_state=notready THEN 38860 1864 384 ! ! ! ! ! ! BEGIN 38870 1865 385 ! ! ! ! ! ! ! (* book(vcc_vch_ltime); *) 38880 1866 386 ! ! ! ! ! ! ! vcatc_state:= passive (* <--------<< *) 38890 1867 387 ! ! ! ! ! ! END 38900 1868 388 ! ! ! ! ! END 38910 1869 389 ! ! ! ! ! OTHERWISE (* nothing *) 38920 1870 390 ! ! ! ! END; 38930 1871 391 ! ! ! ! buftype:= used 38940 1872 392 ! ! ! END; 38950 1873 393 ! ! ! 38960 1874 394 ! ! ! 7 : (* service on variable limit and counters *) 38970 1875 395 ! ! ! BEGIN 38980 1876 396 ! ! ! ! IF func=12 THEN types:=0; 38990 1877 397 ! ! ! ! LOCK mess_ref AS buf: alarmlabel DO 39000 1878 398 ! ! ! ! buf.result:= accepted; 39010 1879 399 ! ! ! ! CASE types OF 39020 1880 400 ! ! ! ! ! 0 : (* return with reciept *); 39030 1881 401 ! ! ! ! ! 2 : (* read line error count *) 39040 1882 402 ! ! ! ! ! LOCK mess_ref AS buf: mask_service DO 39050 1883 403 ! ! ! ! ! WITH buf DO 39060 1884 404 ! ! ! ! ! BEGIN 39070 1885 405 ! ! ! ! ! ! fix.no_of_by:= label_size + 2; 39080 1886 406 ! ! ! ! ! ! CASE fix.update OF 39090 1887 407 ! ! ! ! ! ! ! read_code : data:= line_error_count; 39100 1888 408 ! ! ! ! ! ! ! insert_code: line_error_count:= data 39110 1889 409 ! ! ! ! ! ! ! OTHERWISE fix.result:= unknown_update 39120 1890 410 ! ! ! ! ! ! END 39130 1891 411 ! ! ! ! ! END; 39140 1892 412 ! ! ! ! ! 4 : (* read pack counter *) 39150 1893 413 ! ! ! ! ! LOCK mess_ref AS buf: mask_service DO 39160 1894 414 ! ! ! ! ! WITH buf DO 39170 1895 415 ! ! ! ! ! BEGIN 39180 1896 416 ! ! ! ! ! ! fix.no_of_by:= label_size + 2; 39190 1897 417 ! ! ! ! ! ! CASE fix.update OF 39200 1898 418 ! ! ! ! ! ! ! read_code : data:= pack_counter 39210 1899 419 ! ! ! ! ! ! ! OTHERWISE fix.result:= unknown_update 39220 1900 420 ! ! ! ! ! ! END 39230 1901 421 ! ! ! ! ! END; 39240 1902 422 ! ! ! ! ! 6 : (* update service limit *) 39250 1903 423 ! ! ! ! ! LOCK mess_ref AS buf: mask_service DO 39260 1904 424 ! ! ! ! ! WITH buf DO 39270 1905 425 ! ! ! ! ! BEGIN 39280 1906 426 ! ! ! ! ! ! fix.no_of_by:= label_size + 2; 39290 1907 427 ! ! ! ! ! ! CASE fix.update OF 39300 1908 428 ! ! ! ! ! ! ! read_code : data:= serve_limit; \f tsvaclst 81.06.16. 13.41. page 53 39310 1909 429 ! ! ! ! ! ! ! insert_code : serve_limit:= data 39320 1910 430 ! ! ! ! ! ! ! OTHERWISE fix.result:= unknown_update 39330 1911 431 ! ! ! ! ! ! END 39340 1912 432 ! ! ! ! ! END; 39350 1913 433 ! ! ! ! ! 8 : (* read current vcm *) 39360 1914 434 ! ! ! ! ! LOCK mess_ref AS buf: mask_vcm DO 39370 1915 435 ! ! ! ! ! WITH buf DO 39380 1916 436 ! ! ! ! ! BEGIN 39390 1917 437 ! ! ! ! ! ! fix.no_of_by:= label_size + 4; 39400 1918 438 ! ! ! ! ! ! CASE fix.update OF 39410 1919 439 ! ! ! ! ! ! ! read_code : data:= cur_vcm 39420 1920 440 ! ! ! ! ! ! ! OTHERWISE fix.result:= unknown_update 39430 1921 441 ! ! ! ! ! ! END 39440 1922 442 ! ! ! ! ! END; 39450 1923 443 ! ! ! ! ! 10 : (* update stoppoll limit *) 39460 1924 444 ! ! ! ! ! LOCK mess_ref AS buf: mask_service DO 39470 1925 445 ! ! ! ! ! WITH buf DO 39480 1926 446 ! ! ! ! ! BEGIN 39490 1927 447 ! ! ! ! ! ! fix.no_of_by:= label_size + 2; 39500 1928 448 ! ! ! ! ! ! CASE fix.update OF 39510 1929 449 ! ! ! ! ! ! ! read_code : data:= stoppoll_limit; 39520 1930 450 ! ! ! ! ! ! ! insert_code : stoppoll_limit:= data 39530 1931 451 ! ! ! ! ! ! ! OTHERWISE fix.result:= unknown_update 39540 1932 452 ! ! ! ! ! ! END 39550 1933 453 ! ! ! ! ! END; 39560 1934 454 ! ! ! ! ! 12 : (* update max succ errors *) 39570 1935 455 ! ! ! ! ! LOCK mess_ref AS buf: mask_service DO 39580 1936 456 ! ! ! ! ! WITH buf DO 39590 1937 457 ! ! ! ! ! BEGIN 39600 1938 458 ! ! ! ! ! ! fix.no_of_by:= label_size + 2; 39610 1939 459 ! ! ! ! ! ! CASE fix.update OF 39620 1940 460 ! ! ! ! ! ! ! read_code : data:= max_succ_errors; 39630 1941 461 ! ! ! ! ! ! ! insert_code : max_succ_errors:= data 39640 1942 462 ! ! ! ! ! ! ! OTHERWISE fix.result:= unknown_update 39650 1943 463 ! ! ! ! ! ! END 39660 1944 464 ! ! ! ! ! END; 39670 1945 465 ! ! ! ! ! 14 : (* intern tests *) 39680 1946 466 ! ! ! ! ! LOCK mess_ref AS buf: mask_test DO 39690 1947 467 ! ! ! ! ! WITH buf DO 39700 1948 468 ! ! ! ! ! CASE fix.update OF 39710 1949 469 ! ! ! ! ! ! 0 : (* test off *) 39720 1950 470 ! ! ! ! ! ! test:= false; 39730 1951 471 ! ! ! ! ! ! 1 : (* test on *) 39740 1952 472 ! ! ! ! ! ! test:= true; 39750 1953 473 ! ! ! ! ! ! 2 : (* lamtest off *) 39760 1954 474 ! ! ! ! ! ! lamtest := false; \f tsvaclst 81.06.16. 13.41. page 54 39770 1955 475 ! ! ! ! ! ! 3 : (* lamtest on *) 39780 1956 476 ! ! ! ! ! ! lamtest := true; 39790 1957 477 ! ! ! ! ! ! 4 : (* get variable *) 39800 1958 478 ! ! ! ! ! ! BEGIN 39810 1959 479 ! ! ! ! ! ! ! fix.no_of_by:= label_size + 10; 39820 1960 480 ! ! ! ! ! ! ! data(1):= no_of_listen; 39830 1961 481 ! ! ! ! ! ! ! data(2):= no_of_returned; 39840 1962 482 ! ! ! ! ! ! ! data(3):= no_of_released; 39850 1963 483 ! ! ! ! ! ! ! data(4):= no_of_unknown; 39860 1964 484 ! ! ! ! ! ! ! data(5):= no_of_queue; 39870 1965 485 ! ! ! ! ! ! END; 39880 1966 486 ! ! ! ! ! ! 5 : (* get states *) 39890 1967 487 ! ! ! ! ! ! BEGIN 39900 1968 488 ! ! ! ! ! ! ! fix.no_of_by:= label_size + 10; 39910 1969 489 ! ! ! ! ! ! ! data(1):= ord(vcatc_state); 39920 1970 490 ! ! ! ! ! ! ! data(2):= ord(old_state); 39930 1971 491 ! ! ! ! ! ! ! data(3):= ord(lamspeak_state); 39940 1972 492 ! ! ! ! ! ! ! data(4):= ord(input); 39950 1973 493 ! ! ! ! ! ! ! data(5):= poll_delay MOD 256; 39960 1974 494 ! ! ! ! ! ! END; 39970 1975 495 ! ! ! ! ! ! OTHERWISE fix.result:= unknown_update; 39980 1976 496 ! ! ! ! ! END; 39990 1977 497 ! ! ! ! ! OTHERWISE (* nothing *) 40000 1978 498 ! ! ! ! END 40010 1979 499 ! ! ! END; 40020 1980 500 ! ! ! 40030 1981 501 ! ! ! 8 : (* call lamspeak *) 40040 1982 502 ! ! ! BEGIN 40050 1983 503 ! ! ! ! found:= true; 40060 1984 504 ! ! ! ! CASE buftype OF 40070 1985 505 ! ! ! ! ! report, 40080 1986 506 ! ! ! ! ! alarm : LOCK mess_ref AS buf: alarmlabel DO 40090 1987 507 ! ! ! ! ! BEGIN 40100 1988 508 ! ! ! ! ! ! found:= get_adr_code(buf.send,adr_code); 40110 1989 509 ! ! ! ! ! ! IF found THEN buf.op_code:= adr_code 40120 1990 510 ! ! ! ! ! END; 40130 1991 511 ! ! ! ! ! permiss: 40140 1992 512 ! ! ! ! ! IF func=1 THEN 40150 1993 513 ! ! ! ! ! LOCK mess_ref AS buf: mask_unknown DO 40160 1994 514 ! ! ! ! ! WITH buf DO 40170 1995 515 ! ! ! ! ! BEGIN 40180 1996 516 ! ! ! ! ! ! fix.op_code:= data.op_code; 40190 1997 517 ! ! ! ! ! END 40200 1998 518 ! ! ! ! ! ELSE 40210 1999 519 ! ! ! ! ! LOCK mess_ref AS buf: mask_vcm DO 40220 2000 520 ! ! ! ! ! WITH buf DO \f tsvaclst 81.06.16. 13.41. page 55 40230 2001 521 ! ! ! ! ! BEGIN 40240 2002 522 ! ! ! ! ! ! CASE func OF 40250 2003 523 ! ! ! ! ! ! ! 0 : BEGIN 40260 2004 524 ! ! ! ! ! ! ! ! found:= get_adr_code( fix.send, adr_code); 40270 2005 525 ! ! ! ! ! ! ! ! IF found THEN fix.op_code:= adr_code 40280 2006 526 ! ! ! ! ! ! ! ! ELSE fix.result:= unknown_sender 40290 2007 527 ! ! ! ! ! ! ! END; 40300 2008 528 ! ! ! ! ! ! ! 6 : BEGIN 40310 2009 529 ! ! ! ! ! ! ! ! found:= get_adr_code(data,adr_code); 40320 2010 530 ! ! ! ! ! ! ! ! IF found THEN fix.op_code:= adr_code 40330 2011 531 ! ! ! ! ! ! ! ! ELSE fix.result:= not_found 40340 2012 532 ! ! ! ! ! ! ! END; 40350 2013 533 ! ! ! ! ! ! ! 2,7 : (* nothing *); 40360 2014 534 ! ! ! ! ! ! ! 9 : BEGIN 40370 2015 535 ! ! ! ! ! ! ! ! found:= get_vc_code( fix.send, adr_code); 40380 2016 536 ! ! ! ! ! ! ! ! IF found THEN fix.op_code:= adr_code 40390 2017 537 ! ! ! ! ! ! ! ! ELSE fix.result:= unknown_sender 40400 2018 538 ! ! ! ! ! ! ! END; 40410 2019 539 ! ! ! ! ! ! END; (* case *) 40420 2020 540 ! ! ! ! ! END; (* lock *) 40430 2021 541 ! ! ! ! ! testat: LOCK mess_ref AS buf: alarmlabel DO 40440 2022 542 ! ! ! ! ! keep_sender := buf.send; 40450 2023 543 ! ! ! ! ! clock : restart_clock; 40460 2024 544 ! ! ! ! ! OTHERWISE (* nothing *) 40470 2025 545 ! ! ! ! END; 40480 2026 546 ! ! ! ! IF found THEN 40490 2027 547 ! ! ! ! BEGIN 40500 2028 548 ! ! ! ! ! vcatc_state:= lam_talk; (* <--------<< *) 40510 2029 549 ! ! ! ! ! lamspeak 40520 2030 550 ! ! ! ! END ELSE 40530 2031 551 ! ! ! ! unknown_buf(unknown_sender) 40540 2032 552 ! ! ! END; 40550 2033 553 ! ! ! 40560 2034 554 ! ! ! 9 : (* save mess_ref *) 40570 2035 555 ! ! ! BEGIN 40580 2036 556 ! ! ! ! signal(mess_ref,queuesem.s^); 40590 2037 557 ! ! ! ! no_of_queue:= no_of_queue + 1; 40600 2038 558 ! ! ! ! buftype:= used 40610 2039 559 ! ! ! END; 40620 2040 560 ! ! ! 40630 2041 561 ! ! ! 10 : (* restart clock *) 40640 2042 562 ! ! ! restart_clock; 40650 2043 563 ! ! ! 40660 2044 564 ! ! ! 11 : (* long timeout *) 40670 2045 565 ! ! ! BEGIN 40680 2046 566 ! ! ! ! timeout_ref :=: mess_ref; \f tsvaclst 81.06.16. 13.41. page 56 40690 2047 567 ! ! ! ! buftype:= used; 40700 2048 568 ! ! ! ! old_state:= vcatc_state; 40710 2049 569 ! ! ! ! IF get_listen_buf THEN 40720 2050 570 ! ! ! ! BEGIN (* listenbuf found *) 40730 2051 571 ! ! ! ! ! mess_ref^.u2:= 0; (* empty databuffer *) 40740 2052 572 ! ! ! ! ! book(vcc_vch_stime); 40750 2053 573 ! ! ! ! ! vcatc_state:= wait_shorttime; (* <--------<< *) 40760 2054 574 ! ! ! ! END ELSE 40770 2055 575 ! ! ! ! BEGIN (* listenbuf not found *) 40780 2056 576 ! ! ! ! ! vcatc_state:= vcatc_need_buf; (* <--------<< *) 40790 2057 577 ! ! ! ! END 40800 2058 578 ! ! ! END; 40810 2059 579 ! ! ! 40820 2060 580 ! ! ! 12 : (* book longtime *) 40830 2061 581 ! ! ! BEGIN 40840 2062 582 ! ! ! ! timeout_ref :=: mess_ref; 40850 2063 583 ! ! ! ! book(vcc_vch_ltime) 40860 2064 584 ! ! ! END; 40870 2065 585 ! ! ! 40880 2066 586 ! ! ! 13 : (* listenbuf ready to vcatc *) 40890 2067 587 ! ! ! BEGIN 40900 2068 588 ! ! ! ! mess_ref^.u2:= 0; (* empty databuffer *) 40910 2069 589 ! ! ! ! book(vcc_vch_stime); 40920 2070 590 ! ! ! ! vcatc_state:= wait_shorttime (* <--------<< *) 40930 2071 591 ! ! ! END; 40940 2072 592 ! ! ! 40950 2073 593 ! ! ! 14 : (* modul error *) 40960 2074 594 ! ! ! (* temporary solution *) 40970 2075 595 ! ! ! BEGIN 40980 2076 596 ! ! ! ! timeout_ref :=: mess_ref; 40990 2077 597 ! ! ! ! testout(zout,"timeout vch ",ord(vcatc_state)); 41000 2078 598 ! ! ! ! vcatc_state := passive; 41010 2079 599 ! ! ! ! book(vcc_vch_ltime) 41020 2080 600 ! ! ! END; 41030 2081 601 ! ! ! 41040 2082 602 ! ! ! 15 : (* dc or vc operations *) 41050 2083 603 ! ! ! CASE types OF 41060 2084 604 ! ! ! ! 0 : (* order to start or stop polling *) 41070 2085 605 ! ! ! ! LOCK mess_ref AS buf: mask_poll DO 41080 2086 606 ! ! ! ! WITH buf DO 41090 2087 607 ! ! ! ! CASE fix.update OF 41100 2088 608 ! ! ! ! ! stop_code : (* stop poll *) 41110 2089 609 ! ! ! ! ! IF vcatc_state <> passive THEN 41120 2090 610 ! ! ! ! ! BEGIN 41130 2091 611 ! ! ! ! ! ! area_pointer := 1; 41140 2092 612 ! ! ! ! ! ! lamspeak_state := nottele; (* lamspeak is initialized *) \f tsvaclst 81.06.16. 13.41. page 57 41150 2093 613 ! ! ! ! ! ! vcatc_state:= passive; (* <--------<< *) 41160 2094 614 ! ! ! ! ! ! fix.result:= accepted; 41170 2095 615 ! ! ! ! ! END ELSE 41180 2096 616 ! ! ! ! ! fix.result:= rejected; 41190 2097 617 ! ! ! ! ! start_code : (* start poll *) 41200 2098 618 ! ! ! ! ! IF (vcatc_state=passive) AND (NOT nil(tolam_ref)) AND (NOT nil(clock_ref)) THEN 41210 2099 619 ! ! ! ! ! BEGIN 41220 2100 620 ! ! ! ! ! ! vcatc_state:= active; (* <--------<< *) 41230 2101 621 ! ! ! ! ! ! poll_delay:= poll_rate; 41240 2102 622 ! ! ! ! ! ! LOCK clock_ref AS cbuf: timers DO 41250 2103 623 ! ! ! ! ! ! cbuf.object:= poll_delay; 41260 2104 624 ! ! ! ! ! ! signal(clock_ref,timeoutsem^); (* start clock timeout *) 41270 2105 625 ! ! ! ! ! ! fix.result:= accepted; 41280 2106 626 ! ! ! ! ! ! line_error_count:= error_count; 41290 2107 627 ! ! ! ! ! END ELSE 41300 2108 628 ! ! ! ! ! fix.result:= rejected; 41310 2109 629 ! ! ! ! ! OTHERWISE fix.result:= unknown_update; 41320 2110 630 ! ! ! ! END; 41330 2111 631 ! ! ! ! 2 : (* at-vc control *) 41340 2112 632 ! ! ! ! BEGIN 41350 2113 633 ! ! ! ! ! LOCK mess_ref AS buf: mask_atvcdc DO 41360 2114 634 ! ! ! ! ! WITH buf DO 41370 2115 635 ! ! ! ! ! BEGIN 41380 2116 636 ! ! ! ! ! ! buftype:= alarm; 41390 2117 637 ! ! ! ! ! ! IF fix.send = at THEN 41400 2118 638 ! ! ! ! ! ! BEGIN 41410 2119 639 ! ! ! ! ! ! ! mess_ref^.u4:= mess_ref^.u4 + 1; 41420 2120 640 ! ! ! ! ! ! ! fix.send:= fix.rec; 41430 2121 641 ! ! ! ! ! ! ! fix.rec := dc; 41440 2122 642 ! ! ! ! ! ! ! fix.result:= accepted; 41450 2123 643 ! ! ! ! ! ! END ELSE 41460 2124 644 ! ! ! ! ! ! IF fix.send = dc THEN 41470 2125 645 ! ! ! ! ! ! BEGIN 41480 2126 646 ! ! ! ! ! ! ! fix.send:= fix.rec; 41490 2127 647 ! ! ! ! ! ! ! fix.rec := at; 41500 2128 648 ! ! ! ! ! ! ! fix.result:= accepted; 41510 2129 649 ! ! ! ! ! ! END ELSE 41520 2130 650 ! ! ! ! ! ! buftype := unknown; 41530 2131 651 ! ! ! ! ! END; 41540 2132 652 ! ! ! ! ! IF buftype = unknown THEN unknown_buf( unknown_sender ); 41550 2133 653 ! ! ! ! END 41560 2134 654 ! ! ! ! OTHERWISE (* nothing *) 41570 2135 655 ! ! ! END; 41580 2136 656 ! ! ! 41590 2137 657 ! ! ! 16 : (* one listenbuf arrived before shorttimeout *) 41600 2138 658 ! ! ! BEGIN \f tsvaclst 81.06.16. 13.41. page 58 41610 2139 659 ! ! ! ! save_listen_buf; 41620 2140 660 ! ! ! ! input:= from_listen_ref; 41630 2141 661 ! ! ! ! vcatc_state:= old_state (* <--------<< *) 41640 2142 662 ! ! ! END; 41650 2143 663 ! ! ! 17 : (* lambuf arrived before lamspeak ready *) 41660 2144 664 ! ! ! fromlam_ref :=: mess_ref; 41670 2145 665 ! ! ! 18 : (* return buffer to pool *) 41680 2146 666 ! ! ! BEGIN 41690 2147 667 ! ! ! ! return(mess_ref); 41700 2148 668 ! ! ! ! no_of_returned:= (no_of_returned MOD max_int) + 1; 41710 2149 669 ! ! ! ! buftype:= used; 41720 2150 670 ! ! ! END; 41730 2151 671 ! ! ! 19 : (* broadcast *) 41740 2152 672 ! ! ! BEGIN 41750 2153 673 ! ! ! ! buftype:= permiss; 41760 2154 674 ! ! ! ! LOCK mess_ref AS buf: mask_broad DO 41770 2155 675 ! ! ! ! WITH buf DO 41780 2156 676 ! ! ! ! CASE types OF 41790 2157 677 ! ! ! ! ! 0,1 : (* DC *) 41800 2158 678 ! ! ! ! ! BEGIN 41810 2159 679 ! ! ! ! ! ! fix.update:= 1; 41820 2160 680 ! ! ! ! ! ! IF dc_macro=data.macro THEN 41830 2161 681 ! ! ! ! ! ! fix.op_code:= 0 ELSE 41840 2162 682 ! ! ! ! ! ! IF get_macro_atts(data.macro,1) THEN 41850 2163 683 ! ! ! ! ! ! IF get_macro_at(data.macro,1) THEN 41860 2164 684 ! ! ! ! ! ! fix.op_code:= atadrtable(next).addr_code 41870 2165 685 ! ! ! ! ! ! ELSE buftype:= empty 41880 2166 686 ! ! ! ! ! ! ELSE buftype:= empty; 41890 2167 687 ! ! ! ! ! END; 41900 2168 688 ! ! ! ! ! 2,3 : (* NC *) 41910 2169 689 ! ! ! ! ! BEGIN 41920 2170 690 ! ! ! ! ! ! fix.update:= 2; 41930 2171 691 ! ! ! ! ! ! mess_ref^.u4:= mess_ref^.u4 - 2; 41940 2172 692 ! ! ! ! ! ! IF (dc_macro.dc_addr=data.macro.dc_addr) AND 41950 2173 693 ! ! ! ! ! ! (dc_macro.nc_addr=data.macro.nc_addr) THEN 41960 2174 694 ! ! ! ! ! ! fix.op_code:= 0 ELSE 41970 2175 695 ! ! ! ! ! ! IF get_macro_atts(data.macro,2) THEN 41980 2176 696 ! ! ! ! ! ! IF get_macro_at(data.macro,2) THEN 41990 2177 697 ! ! ! ! ! ! fix.op_code:= atadrtable(next).addr_code 42000 2178 698 ! ! ! ! ! ! ELSE buftype:= empty 42010 2179 699 ! ! ! ! ! ! ELSE buftype:= empty; 42020 2180 700 ! ! ! ! ! END; 42030 2181 701 ! ! ! ! ! 4,5 : (* TS *) 42040 2182 702 ! ! ! ! ! BEGIN 42050 2183 703 ! ! ! ! ! ! fix.update:= 3; 42060 2184 704 ! ! ! ! ! ! mess_ref^.u4:= mess_ref^.u4 - 4; \f tsvaclst 81.06.16. 13.41. page 59 42070 2185 705 ! ! ! ! ! ! IF ts_macro=data.macro THEN 42080 2186 706 ! ! ! ! ! ! fix.op_code:= 0 ELSE 42090 2187 707 ! ! ! ! ! ! IF get_macro_atts(data.macro,3) THEN 42100 2188 708 ! ! ! ! ! ! IF get_macro_at(data.macro,3) THEN 42110 2189 709 ! ! ! ! ! ! fix.op_code:= atadrtable(next).addr_code 42120 2190 710 ! ! ! ! ! ! ELSE buftype:= empty 42130 2191 711 ! ! ! ! ! ! ELSE buftype:= empty; 42140 2192 712 ! ! ! ! ! END; 42150 2193 713 ! ! ! ! ! 6,7 : (* VC *) 42160 2194 714 ! ! ! ! ! buftype:= empty; 42170 2195 715 ! ! ! ! ! 8,9 : (* AT *) 42180 2196 716 ! ! ! ! ! BEGIN 42190 2197 717 ! ! ! ! ! ! fix.update:= 0; 42200 2198 718 ! ! ! ! ! ! IF get_adr_code(data,adr_code) THEN 42210 2199 719 ! ! ! ! ! ! fix.op_code:= adr_code ELSE 42220 2200 720 ! ! ! ! ! ! buftype:= empty; 42230 2201 721 ! ! ! ! ! END; 42240 2202 722 ! ! ! ! ! OTHERWISE (* nothing *); 42250 2203 723 ! ! ! ! END (* case *); 42260 2204 724 ! ! ! ! IF buftype=permiss THEN 42270 2205 725 ! ! ! ! input:= nothing; 42280 2206 726 ! ! ! END; 42290 2207 727 ! ! ! 20 : (* lam need buf *) 42300 2208 728 ! ! ! BEGIN 42310 2209 729 ! ! ! ! restart_clock; 42320 2210 730 ! ! ! ! IF no_of_listen>0 THEN 42330 2211 731 ! ! ! ! input:= from_listen_ref 42340 2212 732 ! ! ! ! ELSE 42350 2213 733 ! ! ! ! IF no_of_queue>5 THEN 42360 2214 734 ! ! ! ! BEGIN 42370 2215 735 ! ! ! ! ! wait(mess_ref,queuesem.w^); 42380 2216 736 ! ! ! ! ! no_of_queue:= no_of_queue - 1; 42390 2217 737 ! ! ! ! ! unknown_buf(no_resources) 42400 2218 738 ! ! ! ! END 42410 2219 739 ! ! ! END 42420 2220 740 ! ! ! OTHERWISE unknown_buf(rejected) 42430 2221 741 ! ! END (* case *); 42440 2222 742 ! ! 42450 2223 743 ! ! \f tsvaclst 81.06.16. 13.41. page 60 43010 2224 744 ! ! (* send buffer *) 43020 2225 745 ! ! (*q if test then 43030 2226 746 ! ! testout(zout,"buftype out:",ord(buftype)); q*) 43040 2227 747 ! ! CASE buftype OF 43050 2228 748 ! ! ! operate, 43060 2229 749 ! ! ! table , 43070 2230 750 ! ! ! service: 43080 2231 751 ! ! ! BEGIN (* receipt in current buffer , back to sender *) 43090 2232 752 ! ! ! ! mess_ref^.u3:= vca_route; 43100 2233 753 ! ! ! ! mess_ref^.u4:= mess_ref^.u4 + 1; 43110 2234 754 ! ! ! ! LOCK mess_ref AS buf: alarmlabel DO 43120 2235 755 ! ! ! ! BEGIN 43130 2236 756 ! ! ! ! ! buf.rec:= buf.send; 43140 2237 757 ! ! ! ! ! buf.send.macro:= ts_macro; 43150 2238 758 ! ! ! ! ! buf.send.micro:= micadr; 43160 2239 759 ! ! ! ! END; 43170 2240 760 ! ! ! ! send_to_vch 43180 2241 761 ! ! ! END; 43190 2242 762 ! ! ! unknown: 43200 2243 763 ! ! ! BEGIN (* send buffer to own dc or sender *) 43210 2244 764 ! ! ! ! mess_ref^.u3:= vca_route; 43220 2245 765 ! ! ! ! send_to_vch 43230 2246 766 ! ! ! END; 43240 2247 767 ! ! ! listen: 43250 2248 768 ! ! ! BEGIN (* new listenbuffer are used *) 43260 2249 769 ! ! ! ! mess_ref^.u3:= vca_route1; (* request listenbuffer *) 43270 2250 770 ! ! ! ! LOCK mess_ref AS buf: alarmlabel DO 43280 2251 771 ! ! ! ! BEGIN 43290 2252 772 ! ! ! ! ! buf.send.macro:= ts_macro; 43300 2253 773 ! ! ! ! ! buf.send.micro:= micadr; 43310 2254 774 ! ! ! ! END; 43320 2255 775 ! ! ! ! send_to_vch 43330 2256 776 ! ! ! END; 43340 2257 777 ! ! ! report, 43350 2258 778 ! ! ! testat, 43360 2259 779 ! ! ! alarm: 43370 2260 780 ! ! ! BEGIN (* send to other receiver *) 43380 2261 781 ! ! ! ! mess_ref^.u3:= vca_route; 43390 2262 782 ! ! ! ! send_to_vch 43400 2263 783 ! ! ! END; 43410 2264 784 ! ! ! empty: 43420 2265 785 ! ! ! BEGIN (* buffer is empty, release to pool *) 43430 2266 786 ! ! ! ! mess_ref^.u2:= 0; 43440 2267 787 ! ! ! ! mess_ref^.u3:= vca_route; 43450 2268 788 ! ! ! ! IF no_of_listen<2 THEN 43460 2269 789 ! ! ! ! save_listen_buf ELSE \f tsvaclst 81.06.16. 13.41. page 61 43470 2270 790 ! ! ! ! return(mess_ref) 43480 2271 791 ! ! ! END 43490 2272 792 ! ! ! OTHERWISE (* nothing *) 43500 2273 793 ! ! END (* send buffer *); 43510 2274 794 ! ! 43520 2275 795 ! ! IF input <> nothing THEN 43530 2276 796 ! ! IF NOT nil(mess_ref) THEN 43540 2277 797 ! ! BEGIN (* needless buffer , possible program error *) 43550 2278 798 ! ! ! (*q if test then testout(zout,"released : ",mess_ref^.u4); q*) 43560 2279 799 ! ! ! no_of_released:= (no_of_released MOD max_int) + 1; 43570 2280 800 ! ! ! return(mess_ref); 43580 2281 801 ! ! END; 43590 2282 802 ! ! 43600 2283 803 ! UNTIL false; 43610 2284 804 END. 43620 2285 43630 2286 \f tsvaclst 81.06.16. 13.41. page 62 0 171* 172* 173* 174* 184* 185* 206* 248* 277* 297* 298* 299* 300* 301* 302* 303* 304* 304* 304* 304* 304* 304* 304* 304* 304* 304* 304* 304* 304* 304* 304* 304* 466 467 487 518 575* 582* 583* 584* 678 680 681 831 831 832 834 834 835 847 847 848 855 855 856 867 868 873 873 874 881 881 882 888 888 889 892 935 968 974: 1008: 1021 1022 1191 1191 1200 1200 1200 1200 1247 1247 1248 1250 1250 1251 1251 1253 1253 1254 1269 1269 1271 1272 1272 1295 1343 1344 1355 1355 1356 1434 1469 1473 1528 1528 1528 1528 1536 1538 1557 1613: 1622: 1630: 1648: 1653: 1876 1880: 1949: 2003: 2051 2068 2084: 2157: 2161 2174 2186 2197 2210 2266 1 80* 129* 173* 209* 210* 211* 236* 266* 267* 297* 298* 299* 300* 301* 302* 303* 356 361 366 375 379 384 393 399 407 413 421 427 437 443 453 459 491 498 521 525 539 575* 648 674 697 705 708 806 826 831 834 847 855 866 873 881 888 924 937 958 960 974 975 975 988 989 1001 1012: 1051 1058: 1059 1068: 1071 1089: 1090 1100 1142 1160: 1177 1185 1187 1192 1221 1231 1235 1247 1253 1255 1259: 1267: 1277 1290 1293 1296 1298 1325 1343 1343 1355 1456 1535 1560 1598: 1614: 1617: 1622: 1630: 1634: 1688: 1720 1724 1730 1734 1753 1761 1785 1796 1822 1833 1951: 1960 1969 1992 2037 2091 2119 2148 2157: 2159 2162 2163 2216 2233 2279 2 69* 297* 297* 297* 297* 297* 297* 363 381 486 486 507 575* 932 961 991 995: 996 1000 1009 1013 1017 1021 1060: 1076 1091: 1107 1152 1167: 1190 1196 1239 1241 1250 1260: 1267: 1268 1278 1278 1299 1299 1326 1603: 1618: 1621: 1623: 1630: 1638: 1644: 1648: 1654: 1659: 1663: 1690: 1707: 1881: 1885 1896 1906 1927 1938 1953: 1961 1970 2013: 2111: 2168: 2170 2171 2175 2176 2268 3 172* 266* 298* 298* 298* 298* 576* 706 968 970 997 1001 1010 1014 1018 1022 1061 1069 1093: 1174: 1192 1248 1250 1254 1259: 1267: 1268 1279 1279 1300 1300 1623: 1629: 1693: 1955: 1962 1971 2168: 2183 2187 2188 4 80* 297* 298* 299* 300* 498: 576* 1063 1182: 1199 1260: 1267: 1268 1271 1624: 1633: 1639: 1659: 1663: 1701: 1768: 1892: 1917 1957: 1963 1972 2181: 2184 5 68* 129* 297* 298* 299* 576* 1085 1211: 1261: 1270: 1437 1624: 1649: 1667: 1704: 1716 1745 1778 1815 1964 1966: 1973 2181: 2213 6 297* 297* 297* 297* 298* 298* 298* 298* 299* 299* 299* 302* 303* 577* 1016: 1092 1191 1218: 1255: 1262: 1270: 1625: 1637: 1640: 1659: 1663: 1805: 1848: 1902: 2008: 2193: 7 298* 299* 300* 301* 302* 577* 583* 1020: 1094 1227: 1238 1249: 1295 1625: 1643: 1874: 2013: 2193: 8 263* 299* 299* 299* 299* 299* 300* 301* 498: 1115 1249: 1308: 1626: 1647: 1655: 1663: 1668: 1913: 1981: 2195: 9 300* 300* 300* 300* 300* 301* 301* 301* 301* 301* 302* 302* 302* 302* 302* 302* 303* 303* 303* 303* 303* 303* 303* 991 999: 1120 1315: 1626: 1652: 2014: 2034: 2195: 10 300* 302* 303* 682 1123 1322: 1658: 1663: 1923: 1959 1968 2041: 11 300* 301* 1130 1332: 1662: 2044: 12 300* 301* 1148 1339: 1663: 1666: 1876 1934: 2060: 13 302* 1351: 2066: \f tsvaclst 81.06.16. 13.41. page 63 14 302* 303* 1054 1103 1126 1145 1353: 1663: 1945: 2073: 15 184* 185* 298* 299* 300* 301* 2082: 16 303* 497 1583 1584 2137: 17 301* 302* 303* 2143: 18 297* 298* 299* 300* 301* 302* 303* 2145: 19 297* 298* 299* 300* 301* 301* 302* 303* 684 2151: 20 2207: 31 174* 584* 255 171* 582* 256 1973 1000 1485 accepted 1261 1343 1711 1772 1809 1878 2094 2105 2122 2128 action 220* 1680= 1686 active 139* 1467 1555: 2100 acttable 289* 1680 addr 188* 782 817= addr_code 426 439 1721 1731 1742 1749 1758 2164 2177 2189 adr 352* 359 362 364 371* 378 380 382 463* 465 adr_code 223* 961 1712 1810 1988 1989 2004 2005 2009 2010 2015 2016 2198 2199 alarm 147* 954: 1388: 1630 1986: 2116 2259: alarmlabel 74* 75* 79* 84* 89* 94* 100* 106* 113* 118* 123* 128* 588* 594* 1696 1877 1986 2021 2234 2250 alarmnetaddr 85* 101* 107* 108* 109* 182* 188* 215* 226* 269* 271* 389* 403* 417* 433* 463* 595* 795* 801* 1528 alfa 270* alloc 1487 1502 1505 1515 al_env_version <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 1484 area_from_lam <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 266* 1220= 1229= 1235 1239 1241 1248 1250 1254 1268 1278 1279 1299 1300 1325= area_pointer 276* 705 710 958= 988= 1057 1067 1088 1177= 1177 1185= 1220 1221= 1221 1229 1231= 1326= 2091= area_to_lam 265* 710 960= 961= 968= 970= 974= 975= 989= 996= 997= 1000= 1001= 1009= 1010= 1013= 1014= 1017= 1018= 1021= 1022= 1187 1190 1192 1192 1196 1277= 1278= 1279= 1290= 1293= 1296= 1298= 1299= 1300= as 315: 333: 338: 344: 477: 638: 650: 658: 670: 700: 718: 757: 772: 928: 946: 964: 992: 1004: 1407: 1494: 1512: 1603: 1696: 1708: 1769: 1806: 1877: 1882: 1893: 1903: 1914: 1924: 1935: 1946: 1986: 1993: 1999: 2021: 2085: 2102: 2113: 2154: 2234: 2250: at 107* 2117 2127 atadr 417* 423 433* 442= atadrtable 209* 378 380 382 423 426 439 442 1715 1719= 1719 1722= 1725= 1729= 1729 1733= 1733 1744 1750= 1754= 1760= 1760 2164 2177 2189 attstable 210* 359 360 362 364 455 458 1777 1781= 1784= 1784 1797= atts_table_index <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 272* \f tsvaclst 81.06.16. 13.41. page 64 at_addr 378 380 382 423 442 1712 at_addr_e 114* 209* at_addr_l 209* 1751 at_control 1497 at_table_addr <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 271* 1190 1192 1196 1197 1200 1239 1247 1251 1264 1269 1272 at_tim_excess <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 832 at_ts_e 119* 210* at_ts_l 210* 1794 below_serve_limit <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 279* 844 849= 870 875= below_stoppoll_limit <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 280* 852 857= 878 883= boo 282* 607* 656= 715= 943= 1190= 1196= book 326* 2052 2063 2069 2079 bookup_ref 228* 313 314 315: 321 322 331 332 333: 340 341 342 344: 1502 1503 book_pool 238* 1502 book_req 331 1518 boolean 194* 219* 282* 352* 354* 371* 373* 389* 391* 403* 405* 417* 419* 433* 435* 449* 451* 515* 606* 607* broad 160* 1626 buf 315: 317 318 319 333: 335 336 338: 339 344: 346 347 477: 478 757: 759 767 768 772: 774 782 783 784 964: 966 970 973 992: 993 1004: 1005 1494: 1495 1512: 1513 1603: 1604 1606 1696: 1697 1708: 1709 1769: 1770 1806: 1807 1877: 1878 1882: 1883 1893: 1894 1903: 1904 1914: 1915 1924: 1925 1935: 1936 1946: 1947 1986: 1988 1989 1993: 1994 1999: 2000 2021: 2022 2085: 2086 2113: 2114 2154: 2155 2234: 2236 2236 2237 2238 2250: 2252 2253 buftype 195* 476= 489= 511= 524= 538= 919 1311= 1318= 1335= 1346= 1374 1397= 1458= 1568= 1574= 1592 1595= 1598= 1605= 1607= 1614= 1618= 1626= 1630= 1634= 1640= 1644= 1648= 1649= 1654= 1655= 1659= 1663= 1667= 1668= 1674= 1680 1850 1871= 1984 2038= 2047= 2116= 2130= 2132 2149= 2153= 2165= 2166= 2178= 2179= 2190= 2191= 2194= 2200= 2204 2227 buf_type 146* 195* 286* build_an_lbuf <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 747* 1454 build_a_letter_telegram <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 695* 980 1027 1178 1281 1302 build_a_poll_telegram <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 665* 1206 1214 1223 1327 1381 build_line_dep_telegram <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 727* 1162 build_same_telegram <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 634* 739 1170 build_serial_changed_telegram <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 645* 741 1358 \f tsvaclst 81.06.16. 13.41. page 65 byte 62* 80* 102* 133* 134* 183* 186* 187* 216* 223* 266* 268* 352* 371* 389* 403* 417* 433* 473* 589* 590* 596* 597* 603* 796* 799* 800* call 835 848 856 calltest 611* 640 690 713 940 canno 62* 636 647 668 698 925 1485 1491 cbuf 2102: 2103 check 1428 check5 656 715 943 1428 ch_format 132* 1494 clock 154* 511 1375: 1598 1851: 2023: clock_ref 229* 1505 1506 1512: 1853= 2098 2102: 2104 cntl_inf 133* 1497= code 389* 398= 403* 409 417* 426= 433* 439 col 287* 289* com_pool 57* 509 con_lam_time 1498 count 318= 335= create_at_ch 1490 cur_vcm 224* 1529= 1694 1697 1919 data 75* 80* 85* 90* 101* 129* 481= 575* 1001 1049: 1087: 1117: 1139: 1887= 1888 1898= 1908= 1909 1919= 1929= 1930 1940= 1941 1960= 1961= 1962= 1963= 1964= 1969= 1970= 1971= 1972= 1973= 1996 2009 2160 2162 2163 2172 2173 2175 2176 2185 2187 2188 2198 datab 102* 1010 dc 109* 2121 2124 dc_addr 359 359 378 378 465= 465 2172 2172 dc_erh_mic_addr <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 1531 dc_log_mic_addr <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 1533 dc_macro 59* 1530 1532 2160 2172 2173 dc_poll_mic_addr <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 1265 dc_test_mic_addr <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 1198 delay_req 1508 demand_lbuf 792* 831 834 847 855 873 881 888 1191 1199 1247 1250 1253 1268 1271 1343 1355 dta1 186* 767 783 815= dta2 187* 768 784 816= dummy_route 1594: d_ack 576* 1056: 1098: 1118: 1141: d_addr 801* 817 d_dta1 799* 815 \f tsvaclst 81.06.16. 13.41. page 66 d_dta2 800* 816 d_kind 793* 809 d_noob 794* 810 d_opco 796* 812 d_reci 795* 811 d_resu 798* 814 d_upda 797* 813 empty 159* 476 1397 1595 2165 2166 2178 2179 2190 2191 2194 2200 2264: entry 114* 119* 124* 1712 1715= 1721 1722 1725 1731 1742 1744= 1749 1750 1754 1758 1773 1777= 1781 1797 1810 1814= 1818 1834 error 473* 488 error_count 95* 2106 false 354* 373* 391* 405* 419* 435* 451* 529 606* 836 849 857 1287: 1428 1539 1950 1954 2283 fault_at_line <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 822* 1163 1169 1317 1334 fix 74* 79* 84* 89* 94* 100* 106* 113* 118* 123* 128* 480 481 483 483 484 485 486 487 488 996 997 1000 1009 1013 1014 1017 1018 1711 1713 1716 1737 1740 1745 1747 1756 1763 1765 1772 1774 1778 1787 1790 1792 1799 1801 1802 1809 1811 1815 1824 1827 1829 1836 1838 1839 1885 1886 1889 1896 1897 1899 1906 1907 1910 1917 1918 1920 1927 1928 1931 1938 1939 1942 1948 1959 1968 1975 1996 2004 2005 2006 2010 2011 2015 2016 2017 2087 2094 2096 2105 2108 2109 2117 2120 2120 2121 2122 2124 2126 2126 2127 2128 2159 2161 2164 2170 2174 2177 2183 2186 2189 2197 2199 fix_incr_on_err <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 256* 839 840 fix_label 588* 594* 759 774 966 973 found 219* 354* 357 361= 363= 365= 366 368 373* 376 379= 381= 383= 384 386 391* 394 397= 400 405* 408 411= 414 419* 422 425= 428 435* 438 441= 444 451* 454 457= 460 1236= 1239= 1241= 1242 1572= 1983= 1988= 1989 2004= 2005 2009= 2010 2015= 2016 2026 free 577* 1075: 1106: 1129: 1151: 1430 1436 fromlam_ref 232* 1555 1556 1563 1564 2144= from_check 584* from_data 582* 1410 from_lam_driver <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 1038* 1445 from_listen_ref <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 164* 1474 1570: 2140 2211 from_opcode 583* 1409 from_sem 163* 1524 1552: 1573 1576 from_telegram_type <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 581* 1407 func 217* 352* 361 363 371* 379 381 991 991 994 1007 1583= 1612 1876 1992 2002 \f tsvaclst 81.06.16. 13.41. page 67 func_grp 218* generate 656 715 943 get_adr_code 417* 428= 1712 1988 2004 2009 2198 get_atts_index <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 449* 460= 1773 get_listen_buf <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 515* 527= 529= 1572 1854 2049 get_macro_at 371* 386= 2163 2176 2188 get_macro_atts <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 352* 368= 2162 2175 2187 get_net_addr 433* 444= 1190 1196 1239 1721 1731 1742 1749 1758 get_vc_code 389* 400= 1810 2015 get_vc_netaddr <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 403* 414= 1241 h10 1277 1298 h12 476 482 h2 1191 h20 1240 1252: 1292 h30 1188 h31 831 834 888 1188 h32 1188: 1355 h34 847 873 h35 855 881 h40 1238 1246 1289 h41 972 h62 1194: h63 1199 h64 1268 h67 1271 h73 1250 h80 934 h84 1238 1246: 1289 h85 972 h98 1253 hc1 1510 hc2 1520 hc3 332 hc4 314 hc5 523 hf0 1290 1296 hf1 1293 hlp 1040* 1235= 1238 1238 1238 1240 1245 1247 1258 1266 1289 1289 1292 1295 1295 i 1040* 1259= 1260= 1261= 1262= 1268 1271 incname 1483 \f tsvaclst 81.06.16. 13.41. page 68 index 250* 317= 317 346= 346 449* 458= 458 input 198* 1474= 1524= 1551 1573= 1576= 1972 2140= 2205= 2211= 2275 input_type 163* 198* insert_code 1718: 1748: 1780: 1793: 1817: 1830: 1888: 1909: 1930: 1941: integer 61* 90* 95* 96* 129* 181* 206* 222* 236* 248* 250* 253* 254* 255* 256* 257* 263* 272* 277* 286* 310* 326* 449* 602* 605* 794* 1040* intg_aux 221* 1773 keep_sender 269* 1343 2022= keep_the_opcode <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 268* 934 960 972 972 974 975 989 1343 1395= keep_the_telegram <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 264* 639 652 659= 687= 719= 947= kind 180* 755 809= label_size 486 605* 810 967 1716 1745 1778 1815 1885 1896 1906 1917 1927 1938 1959 1968 lam 157* 1400: 1674 1859: lamsem 55* 951 982 1029 1164 1171 1179 1208 1215 1224 1282 1303 1329 1359 1383 1500 lamspeak 548* 2029 lamspeak_state <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 200* 949= 981= 1028= 1043 1207= 1232= 1280= 1301= 1312= 1319= 1328= 1336= 1347= 1382= 1466 1527= 1971 2092= lamtest 281* 640 690 713 940 1431 1954= 1956= lam_need_buf 141* 1472 lam_pool 236* 1487 lam_route 1492 1673: lam_talk 140* 1563: 2028 lam_timeout 606* 830 836= 1439= lbuf_info 267* 807 1454 lbuf_kind_type <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 177* 180* 793* lbuf_needed 277* 806= 806 807 1454 1456= 1456 1469 lbuf_record 179* 267* 749* letterfromvc 200* 1081: 1328 lettertovc 200* 981 1028 1045: 1280 1301 line 199* 860= 894= 1162 1523= line_error_count <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 244* 839 840= 840 842= 844 852 866= 866 867 868= 870 878 1887 1888= 2106= line_was 729* 738 listen 148* 524 1449: 1458 1667 2247: listen_ref 227* 520 537 lock 315: 333: 338: 344: 477: 638: 650: 658: 670: 700: 718: 757: 772: 928: 946: 964: 992: 1004: 1407: 1494: 1512: 1603: 1696: 1708: 1769: 1806: 1877: 1882: 1893: 1903: 1914: 1924: 1935: 1946: 1986: 1993: 1999: 2021: 2085: 2102: 2113: 2154: 2234: 2250: \f tsvaclst 81.06.16. 13.41. page 69 log 177* 771: 1191 1199 1268 1271 log_addr 595* 782= log_alarm 597* 784= log_opc 596* 783= ltime 155* 1605 1857: macro 378 380 382 465 484= 1197= 1264= 1530= 1532= 2160 2162 2163 2172 2173 2175 2176 2185 2187 2188 2237= 2252= macroaddr 60* 352* 371* 449* 463* 1528 mask_atadr 112* 1708 mask_atts 117* 1769 mask_atvcdc 105* 2113 mask_broad 83* 2154 mask_byte 78* 992 mask_log_lbuf <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 593* 772 mask_norm_lbuf <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 587* 757 964 mask_poll 93* 2085 mask_service 88* 1882 1893 1903 1924 1935 mask_test 127* 1946 mask_unknown 73* 477 1993 mask_vcm 99* 1004 1914 1999 mask_vcmat 122* 1806 max_info_bytes <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 69* max_int 491 498 825 839 842 2148 2279 max_lbuf_needed <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 68* 267* max_succ_errors <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 255* 828 886 1940 1941= max_succ_lin_err <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 255* messem 51* 1487 1505 1515 1562 1565 1566 mess_ref 233* 476 477: 480 482 497 501 506 509 510 520 521 522 523 537 964: 992: 1004: 1395 1405 1454 1487 1488 1494: 1500 1556= 1559 1562 1564= 1565 1566 1582 1583 1584 1603: 1696: 1708: 1769: 1806: 1853 1855 1858 1861 1862 1877: 1882: 1893: 1903: 1914: 1924: 1935: 1946: 1986: 1993: 1999: 2021: 2036 2046 2051 2062 2068 2076 2085: 2113: 2119 2119 2144 2147 2154: 2171 2171 2184 2184 2215 2232 2233 2233 2234: 2244 2249 2250: 2261 2266 2267 2270 2276 2280 micadr 61* 485 1485 2238 2253 micro 485= 1198= 1265= 1531= 1533= 2238= 2253= nak 577* 1074: 1105: 1128: 1150: nc_addr 362 362 380 380 466= 2173 2173 netc_route 522 1611: \f tsvaclst 81.06.16. 13.41. page 70 next 222* 356= 357 359 360 362 364 366= 366 375= 376 378 380 382 384= 384 393= 394 395 398 399= 399 407= 408 409 412 413= 413 421= 422 423 426 427= 427 437= 438 439 442 443= 443 453= 454 455 458 459= 459 1715 1719 1722 1729 1733 1744 1750 1760 1777 1781 1784 1814 1818 1821 2164 2177 2189 noatadr 204* 376 422 438 1719 1720= 1720 1724= 1724 1725 1729 1730= 1730 1733 1734= 1734 1751 1753= 1753 1754 1760 1761= 1761 noatts 205* 357 454 1784 1785= 1785 1794 1796= 1796 1797 nok 191* 860 noob 181* 761 776 810= norm 177* 756: 831 834 847 855 873 881 888 1247 1250 1253 1343 1355 norm_inf 589* 767= 970 norm_inf1 590* 768= nothing 165* 1576: 2205 2275 notready 137* 1525 1526 1555 1863 nottele 200* 1232 1312 1319 1336 1347 1466 1527 2092 not_accepted 1262 not_found 1747 1763 1792 1801 1829 1838 2011 not_ready 1691 novcm 206* 394 408 1535= 1536 1537 1538 1539 1821 1822= 1822 1831 1833= 1833 1834 no_of_by 486= 761= 776= 966 1716= 1745= 1778= 1815= 1885= 1896= 1906= 1917= 1927= 1938= 1959= 1968= no_of_listen 245* 507 518 525= 525 539= 539 1473 1960 2210 2268 no_of_queue 243* 1557 1560= 1560 1964 2037= 2037 2213 2216= 2216 no_of_released <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 247* 1962 2279= 2279 no_of_returned <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 246* 1961 2148= 2148 no_of_unknown <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 248* 491= 491 1963 no_resources 2217 no_room 1756 1799 1836 no_vcc_tim 237* no_vcc_upd 238* numb_of_bytes <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 605* 966= 967 object 250* 319= 319 336= 339= 347= 347 1513= 1604 1606 2103= ok 191* 738 894 1523 oknok_type 191* 199* 729* ok_at_line 864* 1176 1184 1213 1222 1230 1310 1324 1342 1357 old_state 197* 1526= 1970 2048= 2141 opco 183* 753 763 778 812= operate 153* 1654 2228: opr 575* 1050: 1097: 1122: 1140: \f tsvaclst 81.06.16. 13.41. page 71 opsem 49* 1483 op_code 480= 763= 778= 996 1000 1009 1013 1017 1989= 1996= 1996 2005= 2010= 2016= 2161= 2164= 2174= 2177= 2186= 2189= 2199= ord 1969 1970 1971 1972 2077 own 1483 own_dc 214* 831 832 834 835 847 848 855 856 873 874 881 882 888 889 1248 1250 1254 1344 1355 1356 1530 1531 1537 own_dc_log 215* 1191 1532 1533 pack_counter 241* 498= 498 1898 pack_dc_macro <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 463* 465 466 467 1197 1264 passivated 1699 passive 138* 1866 2078 2089 2093 2098 permiss 161* 986: 1387: 1614 1618 1640 1644 1655 1991: 2153 2204 polling 200* 1111: 1207 1382 poll_delay 257* 1513 1973 2101= 2103 poll_delay_time <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 257* poll_rate 96* 2101 pool 236* 237* 238* pop 520 process 48* push 340 537 p_ack 575* 1048: 1084: 1114: 1138: queuesem 52* 1559 2036 2215 r 611* 634* 636 638: 640 645* 647 650: 656 658: 665* 668 670: 690 695* 698 700: 713 715 718: 728* 739 741 748* 753 757: 772: read_code 1714: 1741: 1775: 1791: 1812: 1828: 1887: 1898: 1908: 1919: 1929: 1940: rec 483= 762= 777= 1697= 2120 2121= 2126 2127= 2236= recall 874 882 889 reci 182* 762 777 811= reference 233* 611* 634* 645* 665* 695* 728* 748* rejected 1608 2096 2108 2220 remove_code 1728: 1757: 1782: 1800: 1819: 1837: report 150* 955: 1389: 1634 1649 1985: 2257: restart_clock <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 504* 2023 2042 2209 resu 185* 765 780 814= result 488= 765= 780= 973 1014 1711= 1737= 1747= 1756= 1763= 1765= 1772= 1787= 1792= 1799= 1801= 1802= 1809= 1824= 1829= 1836= 1838= 1839= 1878= 1889= 1899= 1910= 1920= 1931= 1942= 1975= 2006= 2011= 2017= 2094= 2096= 2105= 2108= 2109= 2122= 2128= result_range 798* return 1855 2147 2270 2280 row 286* 287* 297* 298* 299* 300* 301* 302* 303* 304* \f tsvaclst 81.06.16. 13.41. page 72 rute 216* 1582= 1593 s 1487 1505 1515 2036 save_listen_buf <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 307* 510 534* 1702 2139 2269 semaphore 234* sempointer 49* 57* send 483 484 485 1988 2004 2015 2022 2117 2120= 2124 2126= 2236 2237 2238 2252 2253 send_to_vch 495* 2240 2245 2255 2262 sensesem 509 serial_no 274* 648= 648 653 674= 674 679 681 697= 697 709 924= 924 933 serve_limit 253* 844 870 1908 1909= service 151* 1663 1668 2230: service_lim 253* signal 321 341 501 506 951 982 1029 1164 1171 1179 1208 1215 1224 1282 1303 1329 1359 1383 1500 2036 2104 slave_data 603* 1220 1229 1325 1344 1356 1410= slave_opcode 602* 1046 1082 1112 1136 1409= 1430= 1431 1436= speak_action 263* 1051= 1054= 1059= 1061= 1063= 1069= 1071= 1076= 1085= 1090= 1092= 1094= 1100= 1103= 1107= 1115= 1120= 1123= 1126= 1130= 1142= 1145= 1148= 1152= 1158 start_code 1259 2097: state_type 137* 196* 197* 287* status 576* 1053: 1102: 1125: 1144: stime 156* 1607 1858: stoppoll_limit <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 254* 852 878 1929 1930= stop_code 1260 2088: stop_poll 144* stop_poll_lim <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 254* succ_line_errors <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 275* 825 826= 826 828 886 892= table 149* 1659 2229: telegram 638: 639= 650: 652= 653 658: 659 670: 675 687 700: 703 718: 719 928: 930 946: 947 1407: 1409 1410 teletxt 270* test 194* 1950= 1952= testat 152* 921: 1390: 1648 2021: 2258: testi 200* 949 1135: testopen 1483 testout 1431 1484 1485 2077 ticks 310* 318 326* 335 336 339 timeoutsem 56* 321 341 506 2104 timeout_answer <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 234* 322 342 1502 \f tsvaclst 81.06.16. 13.41. page 73 timeout_ref 230* 329 338: 340 1515 1516 1858= 2046= 2062= 2076= timers 237* 338 1512 1603 2102 time_inf 134* 1498= tim_pool 237* 1505 1515 tim_route 1509 1596: tim_route1 1503 1519 1601: tolam_ref 231* 925 928: 940 943 946: 951 980 982 1027 1029 1162 1164 1170 1171 1178 1179 1206 1208 1214 1215 1223 1224 1281 1282 1302 1303 1327 1329 1358 1359 1381 1383 1405= 1407: 1428 1434 1437 1862= 2098 to_check 174* 682= 684= to_data 171* 680= 710= 935= 937= to_lam_driver <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 906* 1396 to_opcode 172* 678= 706= 708= 932= to_serial_no 173* 653= 679= 709= 933= to_telegram_type <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 170* 264* 638 650 658 670 700 718 928 946 trans_err_rate <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 256* trans_ok 242* true 194* 282* 361 363 365 379 381 383 397 411 425 441 457 527 607* 875 883 1236 1243: 1439 1952 1956 1983 tsadr 449* 455 ts_addr 359 362 364 364 364 455 467= 1773 ts_macro 60* 484 2185 2237 2252 ts_pointer 52* ts_type 360 ts_type_pvc 360 types 218* 1584= 1597 1602 1613 1617 1621 1629 1633 1637 1643 1647 1652 1658 1662 1666 1706 1876= 1879 2083 2156 t_ack 576* 1066: 1099: 1119: 1147: u1 313= 331= 1490= 1508= 1518= 1861= u2 521= 636= 647= 668= 698= 925= 1434 1437 1491= 2051= 2068= 2266= u3 522= 1492= 1503= 1509= 1519= 1582 2232= 2244= 2249= 2261= 2267= u4 314= 332= 476 480 482= 497 523= 753= 1395 1510= 1520= 1583 1584 2119= 2119 2171= 2171 2184= 2184 2233= 2233 unknown 146* 489 1568 1574 1592 2130 2132 2242: unknown_buf 473* 1599 1608 1609 1615 1619 1627 1631 1635 1641 1645 1650 1656 1660 1664 1669 1671 1675 1691 1699 2031 2132 2217 2220 unknown_opcode <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 1599 1609 1615 1619 1627 1631 1635 1641 1645 1650 1656 1660 1664 1669 1671 unknown_route <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 1675 unknown_sender <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 2006 2017 2031 2132 \f tsvaclst 81.06.16. 13.41. page 74 unknown_update <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 1737 1765 1787 1802 1824 1839 1889 1899 1910 1920 1931 1942 1975 2109 upda 184* 764 779 813= update 310* 487= 764= 779= 997 1018 1713 1740 1774 1790 1811 1827 1886 1897 1907 1918 1928 1939 1948 2087 2159= 2170= 2183= 2197= updates 238* 315 333 344 update_range 797* update_req 313 used 158* 538 1311 1318 1335 1346 1871 2038 2047 2149 vc 108* vcadr 389* 395 403* 412= vcatc 48* vcatc_need_buf <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 142* 2056 vcatc_state 196* 1467= 1472= 1525= 1554 1680 1863 1866= 1969 2028= 2048 2053= 2056= 2070= 2077 2078= 2089 2093= 2098 2100= 2141= vca_route 2232 2244 2261 2267 vca_route1 2249 vcc_vch_ltime <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 1604 2063 2079 vcc_vch_stime <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 1606 2052 2069 vchsem 54* 501 vcmat_e 124* 211* vcmat_l 211* 1831 vcmtable 211* 395 398 409 412 1536 1537 1538 1539 1814 1818= 1821= 1821 1834= vc_addr 395 412 1537= 1810 vc_arrange 1538= vc_code 398 409 1536= vc_relief 1539= version 67* 1484 w 1559 1562 1565 1566 2215 wait 322 342 1559 1562 1565 1566 2215 wait_shorttime <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 143* 2053 2070 work 226* 1197 1198 1199 1241 1253 1264 1265 1268 1271 1721 1731 1742 1749 1758 write_read_at <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 1861 x 749* 753 755 761 762 763 764 765 767 768 776 777 778 779 780 782 783 784 zero_addr 225* 1528= 1529 1694 zone 259* zout 259* 1431 1483 1484 1485 2077 \f tsvaclst 81.06.16. 13.41. page 75 AND 16 ARRAY 9 BEGIN 176 CASE 62 CONST 3 DIV 2 DO 80 ELSE 61 END 255 FORWARD 1 FUNCTION 9 IF 103 MOD 8 NIL 7 NOT 18 OF 74 OR 5 OTHERWISE 47 PACKED 5 PROCEDURE 20 RECORD 17 REPEAT 1 THEN 103 TYPE 3 UNTIL 1 VAR 25 WHILE 8 WITH 28 \f jg6 1981.06.16 13.44 tsvac program 81.06.16. 13.44. pascal80 version 1981.04.01 name headline beginline endline appetite(words) update 312 313 324 : 7 book 328 330 350 : 7 get_macro_at 354 356 369 : 7 get_macro_at 373 375 387 : 8 get_vc_code 391 393 401 : 8 get_vc_netad 405 407 415 : 8 get_adr_code 419 421 429 : 8 get_net_addr 435 437 445 : 8 get_atts_ind 451 453 461 : 8 pack_dc_macr 464 465 468 : 5 unknown_buf 475 476 492 : 9 send_to_vch 496 498 502 : 4 restart_cloc 505 506 513 : 9 get_listen_b 517 519 530 : 4 save_listen_ 536 537 541 : 4 calltest 612 631 631 : 2 build_same_t 635 636 642 : 12 build_serial 646 647 661 : 15 build_a_poll 666 668 692 : 12 build_a_lett 696 697 721 : 15 build_line_d 736 739 743 : 10 build_an_lbu 752 753 788 : 11 demand_lbuf 804 806 820 : 7 fault_at_lin 823 826 862 : 19 ok_at_line 865 866 903 : 19 to_lam_drive 917 921 1035 : 15 from_lam_dri 1040 1045 1364 : 24 lamspeak 575 1375 1478 : 24 vcatc 67 1483 2284 : 292 code: 5 . 2612 = 17612 bytes end of PASCAL80 compilation end blocksread = 53 «eof»