|
|
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»