|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 134400 (0x20d00) Types: TextFile Names: »tsvaclst«
└─⟦a41ae585a⟧ Bits:30001842 SW-save af projekt 1000, Alarm-system └─⟦72244f0ef⟧ └─⟦this⟧ »tsvaclst«
\f tsvaclst 81.01.19. 16.20. page 1 10 1 \f tsvaclst 81.01.19. 16.20. 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.01.19. 16.20. 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_address : macroaddr; (*macro addresse own dc*) 2130 60 micadr : integer; (*micro adr for this vc(at)*) 2140 61 canno : byte); (*cannel number to lamdriver*) 2150 62 2160 63 2170 64 \f tsvaclst 81.01.19. 16.20. page 4 3010 65 CONST 3020 66 version = "vers 3.07 /"; 3030 67 max_lbuf_needed = 5; (*------ consts used by LAMSPEAK ------*) 3040 68 max_info_bytes = 2; 3050 69 3060 70 3070 71 TYPE 3080 72 mask_unknown = RECORD 3090 73 ! fix : alarmlabel; 3100 74 ! data: alarmlabel; 3110 75 END; 3120 76 3130 77 mask_service = RECORD 3140 78 ! fix : alarmlabel; 3150 79 ! data: integer; 3160 80 END; 3170 81 3180 82 mask_poll = RECORD 3190 83 ! fix : alarmlabel; 3200 84 ! error_count : integer; 3210 85 ! poll_rate : integer; 3220 86 END; 3230 87 3240 88 mask_vcm = RECORD 3250 89 ! fix : alarmlabel; 3260 90 ! data : alarmnetaddr; 3270 91 END; 3280 92 3290 93 mask_atvcdc = RECORD 3300 94 ! fix : alarmlabel; 3310 95 ! at : alarmnetaddr; 3320 96 ! vc : alarmnetaddr; 3330 97 ! dc : alarmnetaddr; 3340 98 END; 3350 99 3360 100 mask_atadr = RECORD 3370 101 ! fix : alarmlabel; 3380 102 ! entry: at_addr_e; 3390 103 END; 3400 104 3410 105 mask_atts = RECORD 3420 106 ! fix : alarmlabel; 3430 107 ! entry: at_ts_e; 3440 108 END; 3450 109 3460 110 mask_test = RECORD \f tsvaclst 81.01.19. 16.20. page 5 3470 111 ! fix : alarmlabel; 3480 112 ! data : ARRAY(1..5) OF integer; 3490 113 END; 3500 114 3510 115 ch_format = PACKED RECORD 3520 116 ! cntl_inf : byte; 3530 117 ! time_inf : byte; 3540 118 END; 3550 119 3560 120 state_type = (not_ready, (* initially table *) 3570 121 passive, (* waiting start poll *) 3580 122 active, (* polling state *) 3590 123 lam_talk, (* lamspeak active *) 3600 124 lam_need_buf, (* lamspeak waiting listenbuf *) 3610 125 vcatc_need_buf, (* vcatc waiting listenbuf *) 3620 126 wait_shorttime, (* waiting shorttime from vcath *) 3630 127 stop_poll); (* send stop poll mess *) 3640 128 3650 129 buf_type = (unknown, (*unknown buffer*) 3660 130 alarm , (*alarmbuffer*) 3670 131 listen , (*listen buffer*) 3680 132 table , (*buffer for update tables*) 3690 133 report , (*buffer to vc(at)*) 3700 134 service, (*buffer to vc(at)-connector*) 3710 135 testat , (*testbuffer to vc(at)*) 3720 136 operate, (*vc,dc operations*) 3730 137 clock , (*poll pulse*) 3740 138 ltime , (*longtime timeout*) 3750 139 stime , (*shorttime timeout*) 3760 140 lam , (*answer from lam-driver*) 3770 141 used , (*current buffer on inner semaphore*) 3780 142 empty , (*empty buffer to return*) 3790 143 permiss); (* dc to vc ask buffer *) 3800 144 3810 145 input_type = (from_sem , 3820 146 from_listen_ref, 3830 147 nothing ); 3840 148 3850 149 3860 150 (*------------- Types only used by the LAMSPEAK procedure ---------*) 3870 151 3880 152 to_telegram_type = PACKED RECORD 3890 153 ! to_data : 0..255; (* 8 bits *) 3900 154 ! to_opcode : 0.. 3; (* 2 bits *) 3910 155 ! to_serial_no : 0.. 1; (* 1 bit *) 3920 156 ! to_check : 0.. 31 (* 5 bits *) \f tsvaclst 81.01.19. 16.20. page 6 3930 157 END; 3940 158 3950 159 lbuf_kind_type = (log, norm); 3960 160 3970 161 lbuf_record = RECORD 3980 162 ! kind : lbuf_kind_type; 3990 163 ! noob : integer; 4000 164 ! reci : alarmnetaddr; 4010 165 ! opco : byte; 4020 166 ! upda : 0..15; 4030 167 ! resu : 0..15; 4040 168 ! dta1 : byte; 4050 169 ! dta2 : byte; 4060 170 ! addr : alarmnetaddr 4070 171 END; 4080 172 4090 173 oknok_type = (ok , nok); (* state of transmitter line *) 4100 174 \f tsvaclst 81.01.19. 16.20. page 7 5010 175 VAR 5020 176 test : boolean := true; 5030 177 buftype : buf_type; (* type of current buffer *) 5040 178 vcatc_state : state_type; 5050 179 old_state : state_type; 5060 180 input : input_type; 5070 181 line : oknok_type; (* transmitter line state *) 5080 182 lamspeak_state : (nottele, lettertovc, polling, letterfromvc, testi); 5090 183 5100 184 5110 185 (* no of record's in tables *) 5120 186 noatadr, 5130 187 noatts , 5140 188 novcm , 5150 189 novce : integer := 0; 5160 190 5170 191 (*tables*) 5180 192 atadrtable: ARRAY(1..vc_addr_l) OF at_addr_e;(*atadrcode <=> netadr*) 5190 193 attstable : ARRAY(1..at_ts_l ) OF at_ts_e; (*ts addresse for at*) 5200 194 vcmtable : ARRAY(1..vcmat_l ) OF vcmat_e; (*vc addresse for potentiel guard transfer*) 5210 195 vcetable : ARRAY(1..vce_l ) OF vce_e; (*vc addresse with guardtransfer to this connector*) 5220 196 5230 197 rute : byte; 5240 198 func, 5250 199 types : func_grp; 5260 200 found : boolean; (* auxiliary *) 5270 201 action, (* auxiliary *) 5280 202 intg_aux, (* auxiliary *) 5290 203 next : integer; (* auxiliary *) 5300 204 adr_code: byte; 5310 205 own_dc , 5320 206 cur_vcm , 5330 207 zero_addr, 5340 208 work : alarmnetaddr; 5350 209 listen_ref, (* unused listenbufs *) 5360 210 bookup_ref, (*booking or update timeout module*) 5370 211 clock_ref, (*unused clockbuffer*) 5380 212 timeout_ref, (*unused timeoutbuffer*) 5390 213 tolam_ref, (* unused lambuffer *) 5400 214 fromlam_ref, (* buffer from lamdriver *) 5410 215 mess_ref : reference; (* current buffer *) 5420 216 timeout_answer: semaphore; (* immediately answer from timeout modul *) 5430 217 5440 218 lam_pool : pool 1 OF integer; (* rettes til integer *) 5450 219 tim_pool : pool no_vcc_tim OF timers; (* rettes til timers *) 5460 220 book_pool : pool no_vcc_upd OF updates; (* rettes til updates *) \f tsvaclst 81.01.19. 16.20. page 8 5470 221 5480 222 (* counters *) 5490 223 pack_counter, (* no of mess to vch *) 5500 224 trans_ok , (* succession of ok telegram *) 5510 225 no_of_queue, (* no of bufs in queue *) 5520 226 line_error_count, (* total number of transmiterror *) 5530 227 no_of_listen, (* no of bufs on listensem *) 5540 228 no_of_returned, (* no of received returned bufs *) 5550 229 no_of_released, (* no of needless bufs released *) 5560 230 no_of_unknown : integer:= 0; (* no of unknown messages received *) 5570 231 5580 232 index,object: integer; (*param to book and update*) 5590 233 5600 234 (* limits *) 5610 235 serve_limit : integer := service_lim; 5620 236 stoppoll_limit : integer := stop_poll_lim; 5630 237 max_succ_errors : integer := max_succ_lin_err; 5640 238 fix_incr_on_err : integer := trans_err_rate; 5650 239 poll_delay : integer := poll_delay_time; 5660 240 5670 241 zout : zone; (* testoutput from modul *) 5680 242 5690 243 (*--------- Vars only used by the LAMSPEAK procedure ----------*) 5700 244 5710 245 speak_action : integer := 8; (* as p_ack in polling state *) 5720 246 keep_the_telegram : to_telegram_type; 5730 247 area_to_lam , 5740 248 area_from_lam : ARRAY (1..3) OF byte; 5750 249 lbuf_info : ARRAY (1..max_lbuf_needed) OF lbuf_record; 5760 250 keep_the_opcode : byte; 5770 251 teletxt : alfa; 5780 252 at_table_addr : alarmnetaddr; 5790 253 atts_table_index : integer; 5800 254 5810 255 serial_no , 5820 256 succ_line_errors, 5830 257 area_pointer , 5840 258 lbuf_needed : integer := 0; 5850 259 5860 260 below_serve_limit , 5870 261 below_stoppoll_limit, 5880 262 lamtest, 5890 263 boo : boolean := true; 5900 264 5910 265 \f tsvaclst 81.01.19. 16.20. page 9 6010 266 TYPE 6020 267 row = ARRAY(buf_type) OF integer; 6030 268 col = ARRAY(state_type) OF row; 6040 269 CONST 6050 270 acttable = col ( 6060 271 (* u s o p *) 6070 272 (* n l r e t p e *) 6080 273 (* k a i t e r e e c l s e r *) 6090 274 (* n l s a p v s r l t t u m m *) 6100 275 (* o a t b o i t a o i i l s p i *) 6110 276 (* w r e l r c a t c m m a e t s *) 6120 277 (* n m n e t e t e k e e m d y s *) 6130 278 (*not_ready *)row( 1, 2, 4, 5, 2, 2, 2, 2, 6, 6, 6, 6, 0,18, 2), 6140 279 (*passive *)row( 1, 3, 4, 5, 3, 7, 3,15, 6, 6, 6, 6, 0,18, 3), 6150 280 (*active *)row( 1, 8, 4, 5, 8, 7, 8,15, 8, 6, 6, 6, 0,18, 8), 6160 281 (*lam_talk *)row( 1, 9, 4, 9, 9, 7, 9,15,10,11,12, 8, 0,18, 9), 6170 282 (*lam_need_buf *)row( 1, 9, 8, 9, 9, 7, 9,15,19,11,12,17, 0,18, 9), 6180 283 (*vcatc_need_buf*)row( 1, 9,13, 9, 9, 7, 9, 9,10, 6,14,17, 0,18, 9), 6190 284 (*wait_shorttime*)row( 1, 9,16, 9, 9, 9, 9, 9,10, 6,14,17, 0,18, 9), 6200 285 (*stop_poll *)row( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)); 6210 286 \f tsvaclst 81.01.19. 16.20. page 10 7010 287 7020 288 PROCEDURE save_listen_buf; 7030 289 FORWARD; 7040 290 7050 291 PROCEDURE update(ticks: integer); 7060 292 (* update the booked timeoutbuffer *) 7070 293 BEGIN 7080 294 1 ! bookup_ref^.u1:= update_req; 7090 295 2 ! bookup_ref^.u4:= #hc4; 7100 296 3 ! LOCK bookup_ref AS buf: updates DO 7110 297 4 ! BEGIN 7120 298 5 ! ! buf.index := index; 7130 299 6 ! ! buf.count := ticks; 7140 300 7 ! ! buf.object:= object 7150 301 8 ! END; 7160 302 9 ! signal(bookup_ref,timeoutsem^); 7170 303 10 ! wait (bookup_ref,timeout_answer); 7180 304 11 ! (*q if test then testout(zout,"update ",ticks*10+bookup_ref^.u2); q*) 7190 305 12 END; 7200 306 7210 307 PROCEDURE book(ticks: integer); 7220 308 (* booking of one modultimeout *) 7230 309 BEGIN 7240 310 1 ! IF NOT nil( timeout_ref ) THEN 7250 311 2 ! BEGIN 7260 312 3 ! ! bookup_ref^.u1:= book_req; 7270 313 4 ! ! bookup_ref^.u4:= #hc3; 7280 314 5 ! ! LOCK bookup_ref AS buf: updates DO 7290 315 6 ! ! BEGIN 7300 316 7 ! ! ! buf.count:= ticks; 7310 317 8 ! ! ! buf.object:= ticks 7320 318 9 ! ! END; 7330 319 10 ! ! LOCK timeout_ref AS buf: timers DO 7340 320 11 ! ! buf.object:= ticks; 7350 321 12 ! ! push(timeout_ref,bookup_ref); 7360 322 13 ! ! signal(bookup_ref,timeoutsem^); 7370 323 14 ! ! wait(bookup_ref,timeout_answer); 7380 324 15 ! ! (*q if test then testout(zout,"book ",ticks*10+bookup_ref^.u2); q*) 7390 325 16 ! ! LOCK bookup_ref AS buf: updates DO 7400 326 17 ! ! BEGIN 7410 327 18 ! ! ! index := buf.index; 7420 328 19 ! ! ! object:= buf.object 7430 329 20 ! ! END 7440 330 21 ! END 7450 331 22 END; 7460 332 \f tsvaclst 81.01.19. 16.20. page 11 7470 333 7480 334 7490 335 \f tsvaclst 81.01.19. 16.20. page 12 8010 336 FUNCTION get_adr_code(atadr: alarmnetaddr; VAR code: byte): boolean; 8020 337 VAR 8030 338 found: boolean; 8040 339 BEGIN 8050 340 1 ! next:= 1; 8060 341 2 ! found:= false; 8070 342 3 ! WHILE (NOT found) AND (next<=noatadr) DO 8080 343 4 ! IF atadr=atadrtable(next).at_addr THEN 8090 344 5 ! BEGIN 8100 345 6 ! ! found:= true; 8110 346 7 ! ! code := atadrtable(next).addr_code 8120 347 8 ! END ELSE next:= next+1; 8130 348 9 ! get_adr_code:= found; 8140 349 10 END; 8150 350 8160 351 8170 352 8180 353 FUNCTION get_net_addr(VAR atadr: alarmnetaddr; code: byte): boolean; 8190 354 VAR 8200 355 found: boolean; 8210 356 BEGIN 8220 357 1 ! next:= 1; 8230 358 2 ! found:= false; 8240 359 3 ! WHILE (NOT found) AND (next<=noatadr) DO 8250 360 4 ! IF code = atadrtable(next).addr_code THEN 8260 361 5 ! BEGIN 8270 362 6 ! ! found:= true; 8280 363 7 ! ! atadr:= atadrtable(next).at_addr 8290 364 8 ! END ELSE next:= next+1; 8300 365 9 ! get_net_addr:= found; 8310 366 10 END; 8320 367 8330 368 \f tsvaclst 81.01.19. 16.20. page 13 9010 369 9020 370 FUNCTION get_atts_index(tsadr: macroaddr; VAR index: integer): boolean; 9030 371 VAR 9040 372 found: boolean; 9050 373 BEGIN 9060 374 1 ! next := 1; 9070 375 2 ! found:= false; 9080 376 3 ! WHILE (NOT found) AND (next<=noatts) DO 9090 377 4 ! IF tsadr = attstable(next).ts_addr THEN 9100 378 5 ! BEGIN 9110 379 6 ! ! found:= true; 9120 380 7 ! ! index:= attstable(next).index 9130 381 8 ! END ELSE next:= next+1; 9140 382 9 ! get_atts_index:= found; 9150 383 10 END; 9160 384 9170 385 \f tsvaclst 81.01.19. 16.20. page 14 10010 386 10020 387 PROCEDURE unknown_buf(error: byte); 10030 388 (* returning of one unknown buffer *) 10040 389 BEGIN 10050 390 1 ! buftype:= unknown; 10060 391 2 ! mess_ref^.u4:= #h10; 10070 392 3 ! LOCK mess_ref AS buf: mask_unknown DO 10080 393 4 ! WITH buf DO 10090 394 5 ! BEGIN 10100 395 6 ! ! data:= fix; 10110 396 7 ! ! fix.rec := own_dc; 10120 397 8 ! ! fix.send.micro:= micadr; 10130 398 9 ! ! fix.no_of_by := 2*label_size+2; 10140 399 10 ! ! fix.result := error 10150 400 11 ! END; 10160 401 12 ! no_of_unknown:= (no_of_unknown MOD max_int) + 1 10170 402 13 END; 10180 403 10190 404 10200 405 PROCEDURE return_buf( error: byte ); 10210 406 (* returned buffer to sender with error *) 10220 407 BEGIN 10230 408 1 ! LOCK mess_ref AS buf: alarmlabel DO 10240 409 2 ! WITH buf DO 10250 410 3 ! IF send.micro < at_addr_limit THEN 10260 411 4 ! BEGIN (* receipt with error *) 10270 412 5 ! ! buftype:= unknown; 10280 413 6 ! ! mess_ref^.u4:= mess_ref^.u4 + 1; 10290 414 7 ! ! rec := send; 10300 415 8 ! ! send.micro := micadr; 10310 416 9 ! ! result := error 10320 417 10 ! END; 10330 418 11 ! IF buftype <> unknown THEN unknown_buf( error); 10340 419 12 END; 10350 420 10360 421 \f tsvaclst 81.01.19. 16.20. page 15 11010 422 PROCEDURE send_to_vch; 11020 423 BEGIN 11030 424 1 ! CASE mess_ref^.u4 DIV 16 OF 11040 425 2 ! ! 4,8 : pack_counter:= (pack_counter+1) MOD max_int; 11050 426 3 ! ! OTHERWISE 11060 427 4 ! END; 11070 428 5 ! signal(mess_ref,vchsem^); 11080 429 6 END; 11090 430 11100 431 PROCEDURE restart_clock; 11110 432 BEGIN 11120 433 1 ! signal(mess_ref,timeoutsem^); 11130 434 2 ! IF no_of_listen<2 THEN 11140 435 3 ! BEGIN 11150 436 4 ! ! sensesem(mess_ref,com_pool^); 11160 437 5 ! ! IF NOT nil (mess_ref) THEN save_listen_buf; 11170 438 6 ! ! buftype:= clock; 11180 439 7 ! END 11190 440 8 END; 11200 441 \f tsvaclst 81.01.19. 16.20. page 16 12010 442 FUNCTION get_listen_buf: boolean; 12020 443 (* serving out one listenbuf from listen_ref *) 12030 444 BEGIN 12040 445 1 ! IF no_of_listen>0 THEN 12050 446 2 ! BEGIN 12060 447 3 ! ! pop(mess_ref,listen_ref); 12070 448 4 ! ! mess_ref^.u2:= 1; 12080 449 5 ! ! mess_ref^.u3:= netc_route; 12090 450 6 ! ! mess_ref^.u4:= #hc5; 12100 451 7 ! ! buftype:= listen; 12110 452 8 ! ! no_of_listen:= no_of_listen - 1; 12120 453 9 ! ! (*q if test then testout(zout," no of li : ",no_of_listen); q*) 12130 454 10 ! ! get_listen_buf:= true; 12140 455 11 ! END ELSE 12150 456 12 ! get_listen_buf:= false 12160 457 13 END; 12170 458 12180 459 12190 460 12200 461 PROCEDURE save_listen_buf; 12210 462 (* save listenbuf from mess_ref to listen_ref *) 12220 463 BEGIN 12230 464 1 ! push(mess_ref,listen_ref); 12240 465 2 ! buftype:= used; 12250 466 3 ! no_of_listen:= no_of_listen + 1; 12260 467 4 ! (*q if test then testout(zout," no of li : ", no_of_listen); q*) 12270 468 5 END; 12280 469 12290 470 12300 471 12310 472 12320 473 \f tsvaclst 81.01.19. 16.20. page 17 13010 474 13020 475 PROCEDURE lamspeak; 13030 476 13040 477 (*************************************************************** 13050 478 * * 13060 479 * Function: Lamspeak is responsible for the communication * 13070 480 * with VC(AT) via lamdriver, that is the protocol * 13080 481 * for telegram communication is administrated by * 13090 482 * lamspeak. * 13100 483 * The VC(AT)-Conn is in state LAM_TALK. Lamspeak * 13110 484 * can change vcatc_state to either ACTIVE or * 13120 485 * LAM_NEED_BUF, else vcatc_state is unchanged * 13130 486 * LAM_TALK. * 13140 487 * * 13150 488 * Externals: * 13160 489 * * 13170 490 * Parameters: None. 13180 491 * * 13190 492 * Semaphores: None. 13200 493 * * 13210 494 * Programmed june 1980 by SRS 13220 495 * * 13230 496 ***************************************************************) 13240 497 13250 498 13260 499 \f tsvaclst 81.01.19. 16.20. page 18 14010 500 CONST 14020 501 14030 502 p_ack = 0; data = 1; opr = 2; 14040 503 status = 3; d_ack = 4; t_ack = 5; 14050 504 nak = 6; free = 7; 14060 505 14070 506 TYPE 14080 507 14090 508 from_telegram_type = PACKED RECORD 14100 509 ! from_data : 0..255; (* 8 bits *) 14110 510 ! from_opcode : 0.. 7; (* 3 bits *) 14120 511 ! from_check : 0.. 31 (* 5 bits *) 14130 512 END; 14140 513 14150 514 mask_norm_lbuf = PACKED RECORD 14160 515 ! fix_label : alarmlabel; 14170 516 ! norm_inf : byte 14180 517 END; 14190 518 14200 519 mask_log_lbuf = PACKED RECORD 14210 520 ! fix_label : alarmlabel; 14220 521 ! log_addr : alarmnetaddr; 14230 522 ! log_opc : byte; 14240 523 ! log_alarm : byte 14250 524 END; 14260 525 14270 526 VAR 14280 527 14290 528 slave_opcode : integer; 14300 529 slave_data : byte; 14310 530 14320 531 numb_of_bytes : integer := label_size; 14330 532 lam_timeout : boolean := false; 14340 533 boo : boolean := true; 14350 534 14360 535 14370 536 \f tsvaclst 81.01.19. 16.20. page 19 15010 537 PROCEDURE calltest(VAR r : reference); 15020 538 BEGIN 15030 539 1 ! (*x lock r as telegram : to_telegram_type do 15040 540 2 ! begin 15050 541 3 ! if serial_no=0 then 15060 542 4 ! case telegram.to_opcode of 15070 543 5 ! 0: teletxt := " * POLL 0 "; 15080 544 6 ! 1: teletxt := " * DATA 0 "; 15090 545 7 ! 2: teletxt := " * TESTI 0 "; 15100 546 8 ! 3: teletxt := " * OPR 0 " 15110 547 9 ! end 15120 548 10 ! else 15130 549 11 ! case telegram.to_opcode of 15140 550 12 ! 0: teletxt := " * POLL 1 "; 15150 551 13 ! 1: teletxt := " * DATA 1 "; 15160 552 14 ! 2: teletxt := " * TESTI 1 "; 15170 553 15 ! 3: teletxt := " * OPR 1 " 15180 554 16 ! end; 15190 555 17 ! testout(zout, teletxt, telegram.to_data); 15200 556 18 ! end; x*) 15210 557 19 END; 15220 558 15230 559 \f tsvaclst 81.01.19. 16.20. page 20 16010 560 PROCEDURE build_same_telegram( VAR r: reference ); 16020 561 BEGIN 16030 562 1 ! r^.u2 := canno; 16040 563 2 ! 16050 564 3 ! LOCK r AS telegram : to_telegram_type DO 16060 565 4 ! telegram := keep_the_telegram; 16070 566 5 ! IF lamtest THEN calltest( r ); 16080 567 6 ! 16090 568 7 END (* of procedure build_same_telegram *); 16100 569 16110 570 16120 571 PROCEDURE build_serial_changed_telegram( VAR r: reference ); 16130 572 BEGIN (* build the same telegram, but change serial_no *) 16140 573 1 ! r^.u2 := canno; 16150 574 2 ! serial_no := 1 - serial_no; 16160 575 3 ! 16170 576 4 ! LOCK r AS telegram: to_telegram_type DO 16180 577 5 ! BEGIN 16190 578 6 ! ! telegram := keep_the_telegram; 16200 579 7 ! ! telegram.to_serial_no := serial_no 16210 580 8 ! END (* of lock statement *); 16220 581 9 ! 16230 582 10 ! boo := check5( r, generate); 16240 583 11 ! 16250 584 12 ! LOCK r AS telegram: to_telegram_type DO 16260 585 13 ! keep_the_telegram := telegram; 16270 586 14 ! 16280 587 15 END (* of procedure build_serial_changed_telegram *); 16290 588 16300 589 16310 590 \f tsvaclst 81.01.19. 16.20. page 21 17010 591 PROCEDURE build_a_poll_telegram( VAR r: reference ); 17020 592 BEGIN 17030 593 1 ! 17040 594 2 ! r^.u2 := canno; 17050 595 3 ! 17060 596 4 ! LOCK r AS telegram : to_telegram_type DO 17070 597 5 ! BEGIN 17080 598 6 ! ! (*----------------------------------- build up the buffer *) 17090 599 7 ! ! 17100 600 8 ! ! serial_no := 1 - serial_no; 17110 601 9 ! ! WITH telegram DO 17120 602 10 ! ! BEGIN 17130 603 11 ! ! ! (*------------------------------ build the telegram *) 17140 604 12 ! ! ! to_opcode := 0; 17150 605 13 ! ! ! to_serial_no:= serial_no; 17160 606 14 ! ! ! to_data := 0; 17170 607 15 ! ! ! IF serial_no = 0 THEN 17180 608 16 ! ! ! to_check := 10 (* as bits 01010 *) 17190 609 17 ! ! ! ELSE 17200 610 18 ! ! ! to_check := 19; (* as bits 10011 *) 17210 611 19 ! ! END; 17220 612 20 ! ! (*---------------------------------- keep the telegram *) 17230 613 21 ! ! keep_the_telegram := telegram; 17240 614 22 ! ! 17250 615 23 ! END (* of lock statement *); 17260 616 24 ! IF lamtest THEN calltest( r ); 17270 617 25 ! 17280 618 26 END (* of procedure build_a_poll_telegram *); 17290 619 17300 620 \f tsvaclst 81.01.19. 16.20. page 22 18010 621 PROCEDURE build_a_letter_telegram( VAR r: reference ); 18020 622 BEGIN 18030 623 1 ! serial_no := 1 - serial_no; 18040 624 2 ! r^.u2 := canno; 18050 625 3 ! 18060 626 4 ! LOCK r AS telegram : to_telegram_type DO 18070 627 5 ! BEGIN (* build up the buffer *) 18080 628 6 ! ! 18090 629 7 ! ! WITH telegram DO 18100 630 8 ! ! BEGIN 18110 631 9 ! ! ! IF area_pointer = 1 THEN 18120 632 10 ! ! ! to_opcode := 3 (* OPR master opcode *) 18130 633 11 ! ! ! ELSE 18140 634 12 ! ! ! to_opcode := 1; (* DATA master opcode *) 18150 635 13 ! ! ! to_serial_no := serial_no; 18160 636 14 ! ! ! to_data := area_to_lam( area_pointer ); 18170 637 15 ! ! END; 18180 638 16 ! END (* of lock statement *); 18190 639 17 ! IF lamtest THEN calltest( r ); 18200 640 18 ! 18210 641 19 ! boo := check5( r, generate ); (* complete the telegram *) 18220 642 20 ! 18230 643 21 ! (*---------------------------- keep the telegram *) 18240 644 22 ! LOCK r AS telegram : to_telegram_type DO 18250 645 23 ! keep_the_telegram := telegram; 18260 646 24 ! 18270 647 25 END (* of procedure build_a_letter_telegram *); 18280 648 18290 649 18300 650 18310 651 18320 652 \f tsvaclst 81.01.19. 16.20. page 23 19010 653 PROCEDURE build_line_dep_telegram( 19020 654 VAR r : reference; 19030 655 line_was: oknok_type 19040 656 ); 19050 657 19060 658 (* Maybe the serial number at VC(AT) has been changed * 19070 659 * of some unknown reason. Line_was = nok indicates * 19080 660 * that the serial_no must be changed. *) 19090 661 19100 662 BEGIN 19110 663 1 ! 19120 664 2 ! IF line_was = ok THEN 19130 665 3 ! build_same_telegram( r ) 19140 666 4 ! ELSE (* line was not ok *) 19150 667 5 ! build_serial_changed_telegram( r); 19160 668 6 ! 19170 669 7 END (* of procedure build_line_dep_telegram *); 19180 670 19190 671 19200 672 \f tsvaclst 81.01.19. 16.20. page 24 20010 673 PROCEDURE build_an_lbuf( 20020 674 VAR r : reference; 20030 675 x : lbuf_record 20040 676 ); 20050 677 20060 678 BEGIN 20070 679 1 ! r^.u4 := x.opco; 20080 680 2 ! 20090 681 3 ! CASE x.kind OF 20100 682 4 ! ! norm: 20110 683 5 ! ! LOCK r AS buf : mask_norm_lbuf DO 20120 684 6 ! ! BEGIN 20130 685 7 ! ! ! WITH buf.fix_label DO 20140 686 8 ! ! ! BEGIN 20150 687 9 ! ! ! ! no_of_by := x.noob; 20160 688 10 ! ! ! ! rec := x.reci; 20170 689 11 ! ! ! ! op_code := x.opco; 20180 690 12 ! ! ! ! update := x.upda; 20190 691 13 ! ! ! ! result := x.resu 20200 692 14 ! ! ! END; 20210 693 15 ! ! ! buf.norm_inf := x.dta1; 20220 694 16 ! ! END; 20230 695 17 ! ! 20240 696 18 ! ! log: 20250 697 19 ! ! LOCK r AS buf : mask_log_lbuf DO 20260 698 20 ! ! BEGIN 20270 699 21 ! ! ! WITH buf.fix_label DO 20280 700 22 ! ! ! BEGIN 20290 701 23 ! ! ! ! no_of_by := x.noob; 20300 702 24 ! ! ! ! rec := x.reci; 20310 703 25 ! ! ! ! op_code := x.opco; 20320 704 26 ! ! ! ! update := x.upda; 20330 705 27 ! ! ! ! result := x.resu 20340 706 28 ! ! ! END; 20350 707 29 ! ! ! buf.log_addr := x.addr; 20360 708 30 ! ! ! buf.log_opc := x.dta1; 20370 709 31 ! ! ! buf.log_alarm := x.dta2; 20380 710 32 ! ! END 20390 711 33 ! END (* of case on x.kind *); 20400 712 34 ! 20410 713 35 END (* of procedure build_an_lbuf *); 20420 714 20430 715 20440 716 \f tsvaclst 81.01.19. 16.20. page 25 21010 717 PROCEDURE demand_lbuf( 21020 718 d_kind : lbuf_kind_type; 21030 719 d_noob : integer; 21040 720 d_reci : alarmnetaddr; 21050 721 d_opco : byte; 21060 722 d_upda : 0..15; 21070 723 d_resu : 0..15; 21080 724 d_dta1 : byte; 21090 725 d_dta2 : byte; 21100 726 d_addr : alarmnetaddr 21110 727 ); 21120 728 21130 729 BEGIN 21140 730 1 ! 21150 731 2 ! lbuf_needed := lbuf_needed + 1; 21160 732 3 ! WITH lbuf_info( lbuf_needed ) DO 21170 733 4 ! BEGIN 21180 734 5 ! ! kind := d_kind; 21190 735 6 ! ! noob := label_size + d_noob; 21200 736 7 ! ! reci := d_reci; 21210 737 8 ! ! opco := d_opco; 21220 738 9 ! ! upda := d_upda; 21230 739 10 ! ! resu := d_resu; 21240 740 11 ! ! dta1 := d_dta1; 21250 741 12 ! ! dta2 := d_dta2; 21260 742 13 ! ! addr := d_addr 21270 743 14 ! END; 21280 744 15 ! 21290 745 16 END (* of procedure demand_lbuf *); 21300 746 \f tsvaclst 81.01.19. 16.20. page 26 22010 747 PROCEDURE fault_at_line; 22020 748 BEGIN 22030 749 1 ! 22040 750 2 ! IF succ_line_errors <> max_int THEN 22050 751 3 ! succ_line_errors := succ_line_errors + 1; 22060 752 4 ! 22070 753 5 ! IF succ_line_errors = max_succ_errors THEN 22080 754 6 ! BEGIN (*------ line alarm *) 22090 755 7 ! ! IF lam_timeout THEN (* timeout *) 22100 756 8 ! ! demand_lbuf( norm, 1, own_dc, #h31, 0, 0, 22110 757 9 ! ! at_tim_excess, 0, own_dc) 22120 758 10 ! ! ELSE (* not timeout *) 22130 759 11 ! ! demand_lbuf( norm, 1, own_dc, #h31, 0, 0, 22140 760 12 ! ! call, 0, own_dc ); 22150 761 13 ! ! lam_timeout := false; 22160 762 14 ! END; 22170 763 15 ! 22180 764 16 ! IF line_error_count <= (max_int - fix_incr_on_err) THEN 22190 765 17 ! line_error_count := line_error_count + fix_incr_on_err 22200 766 18 ! ELSE 22210 767 19 ! line_error_count := max_int; 22220 768 20 ! 22230 769 21 ! IF (line_error_count >= serve_limit) AND below_serve_limit THEN 22240 770 22 ! BEGIN (*------service alarm *) 22250 771 23 ! ! (* high counter *) 22260 772 24 ! ! demand_lbuf( norm, 1, own_dc, #h34, 0, 0, 22270 773 25 ! ! call, 0, own_dc ); 22280 774 26 ! ! below_serve_limit := false; 22290 775 27 ! END; 22300 776 28 ! 22310 777 29 ! IF (line_error_count >= stoppoll_limit) AND below_stoppoll_limit THEN 22320 778 30 ! BEGIN (*------ stoppoll alarm *) 22330 779 31 ! ! (* high counter *) 22340 780 32 ! ! demand_lbuf( norm, 1, own_dc, #h35, 0, 0, 22350 781 33 ! ! call, 0, own_dc ); 22360 782 34 ! ! below_stoppoll_limit := false; 22370 783 35 ! END; 22380 784 36 ! 22390 785 37 ! line := nok; 22400 786 38 ! 22410 787 39 END (* of fault_at_line *); 22420 788 \f tsvaclst 81.01.19. 16.20. page 27 23010 789 PROCEDURE ok_at_line; 23020 790 BEGIN 23030 791 1 ! line_error_count := line_error_count - 1; 23040 792 2 ! IF line_error_count < 0 THEN 23050 793 3 ! line_error_count := 0; (* Must not be negative *) 23060 794 4 ! 23070 795 5 ! IF (line_error_count < serve_limit) AND NOT(below_serve_limit) THEN 23080 796 6 ! BEGIN (*------ recall service alarm *) 23090 797 7 ! ! (* low counter *) 23100 798 8 ! ! demand_lbuf( norm, 1, own_dc, #h34, 0, 0, 23110 799 9 ! ! recall, 0, own_dc ); 23120 800 10 ! ! below_serve_limit := true; 23130 801 11 ! END; 23140 802 12 ! 23150 803 13 ! IF (line_error_count < stoppoll_limit) AND NOT(below_stoppoll_limit) THEN 23160 804 14 ! BEGIN (*------ recall stoppoll alarm *) 23170 805 15 ! ! (* low counter *) 23180 806 16 ! ! demand_lbuf( norm, 1, own_dc, #h35, 0, 0, 23190 807 17 ! ! recall, 0, own_dc ); 23200 808 18 ! ! below_stoppoll_limit := true; 23210 809 19 ! END; 23220 810 20 ! 23230 811 21 ! IF succ_line_errors >= max_succ_errors THEN 23240 812 22 ! BEGIN (*------recall line alarm *) 23250 813 23 ! ! demand_lbuf( norm, 1, own_dc, #h31, 0, 0, 23260 814 24 ! ! recall, 0, own_dc ); 23270 815 25 ! END; 23280 816 26 ! 23290 817 27 ! succ_line_errors := 0; 23300 818 28 ! 23310 819 29 ! line := ok; 23320 820 30 ! 23330 821 31 ! (*q if test then 23340 822 32 ! begin 23350 823 33 ! testout(zout,"line state: ",ord(line)); 23360 824 34 ! testout(zout,"succ lineerr",succ_line_errors); 23370 825 35 ! testout(zout,"lineerrcount",line_error_count); 23380 826 36 ! end; q*) 23390 827 37 ! 23400 828 38 END (* of ok_at_line *); 23410 829 23420 830 \f tsvaclst 81.01.19. 16.20. page 28 24010 831 PROCEDURE to_lam_driver; 24020 832 24030 833 (*********************************************************** 24040 834 * The buftype is alarm, report or testat. * 24050 835 * Send a letter to VC(AT). A letter is always 3 telegrams * 24060 836 * The reference to the message buffer is mess_ref and this * 24070 837 * buffer will be released, ie buftype = empty. * 24080 838 * The reference to the unused lam buffer is tolam_ref. * 24090 839 * The letter is stored in the area_to_lam array * 24100 840 ************************************************************) 24110 841 24120 842 BEGIN 24130 843 1 ! keep_the_opcode := func * 16 + types; 24140 844 2 ! 24150 845 3 ! CASE buftype OF 24160 846 4 ! ! 24170 847 5 ! ! testat : (* Send TESTI telegram by order of own DC *) 24180 848 6 ! ! BEGIN (* opcode 8,0 or 8,2 *) 24190 849 7 ! ! ! 24200 850 8 ! ! ! serial_no := 1 - serial_no; 24210 851 9 ! ! ! tolam_ref^.u2 := canno; 24220 852 10 ! ! ! 24230 853 11 ! ! ! (*----------------------- build the telegram of TESTI *) 24240 854 12 ! ! ! LOCK tolam_ref AS telegram : to_telegram_type DO 24250 855 13 ! ! ! BEGIN 24260 856 14 ! ! ! ! WITH telegram DO 24270 857 15 ! ! ! ! BEGIN 24280 858 16 ! ! ! ! ! to_opcode := 2; 24290 859 17 ! ! ! ! ! to_serial_no := serial_no; 24300 860 18 ! ! ! ! ! IF keep_the_opcode = #h80 THEN 24310 861 19 ! ! ! ! ! to_data := 0 24320 862 20 ! ! ! ! ! ELSE 24330 863 21 ! ! ! ! ! to_data := 1; 24340 864 22 ! ! ! ! END; 24350 865 23 ! ! ! END (* of lock statement *); 24360 866 24 ! ! ! IF lamtest THEN calltest( tolam_ref ); 24370 867 25 ! ! ! 24380 868 26 ! ! ! (*----------------------- complete the telegram *) 24390 869 27 ! ! ! boo := check5( tolam_ref, generate ); 24400 870 28 ! ! ! 24410 871 29 ! ! ! (*----------------------- keep the telegram *) 24420 872 30 ! ! ! LOCK tolam_ref AS telegram : to_telegram_type DO 24430 873 31 ! ! ! keep_the_telegram := telegram; 24440 874 32 ! ! ! 24450 875 33 ! ! ! lamspeak_state := testi; 24460 876 34 ! ! ! \f tsvaclst 81.01.19. 16.20. page 29 24470 877 35 ! ! ! signal( tolam_ref, lamsem^ ); 24480 878 36 ! ! END (* of testat *); 24490 879 37 ! ! 24500 880 38 ! ! alarm, 24510 881 39 ! ! report : (* Send a letter by order of an AT-CONNECTOR *) 24520 882 40 ! ! BEGIN 24530 883 41 ! ! ! 24540 884 42 ! ! ! area_pointer := 1; 24550 885 43 ! ! ! 24560 886 44 ! ! ! area_to_lam( 1 ) := keep_the_opcode; 24570 887 45 ! ! ! area_to_lam( 2 ) := adr_code; (* a lookup in the AT-addr_table * 24580 888 46 ! ! ! * is made outside lamspeak *) 24590 889 47 ! ! ! 24600 890 48 ! ! ! LOCK mess_ref AS buf : mask_norm_lbuf DO 24610 891 49 ! ! ! BEGIN 24620 892 50 ! ! ! ! numb_of_bytes := buf.fix_label.no_of_by; 24630 893 51 ! ! ! ! IF numb_of_bytes = label_size THEN 24640 894 52 ! ! ! ! area_to_lam( 3 ) := 0 24650 895 53 ! ! ! ! ELSE (* nbbbbb numb_of_bytes must be label_size + 1 here *) 24660 896 54 ! ! ! ! area_to_lam( 3 ) := buf.norm_inf; 24670 897 55 ! ! ! ! 24680 898 56 ! ! ! ! IF (keep_the_opcode=#h41) OR (keep_the_opcode=#h85) THEN 24690 899 57 ! ! ! ! CASE buf.fix_label.result OF 24700 900 58 ! ! ! ! ! 0: area_to_lam(1) := keep_the_opcode (* accepted *) 24710 901 59 ! ! ! ! ! OTHERWISE area_to_lam(1) := keep_the_opcode+1 (* rejected *) 24720 902 60 ! ! ! ! END (* of case *); 24730 903 61 ! ! ! ! 24740 904 62 ! ! ! END (* of lock statement *); 24750 905 63 ! ! ! 24760 906 64 ! ! ! build_a_letter_telegram( tolam_ref ); 24770 907 65 ! ! ! lamspeak_state := lettertovc; 24780 908 66 ! ! ! signal( tolam_ref, lamsem^ ); 24790 909 67 ! ! ! 24800 910 68 ! ! END; (* of alarm, report *) 24810 911 69 ! ! 24820 912 70 ! ! permiss : (* send a letter by order of own dc, opcode 6.4 *) 24830 913 71 ! ! BEGIN 24840 914 72 ! ! ! area_pointer := 1; 24850 915 73 ! ! ! area_to_lam(1) := keep_the_opcode; 24860 916 74 ! ! ! 24870 917 75 ! ! ! LOCK mess_ref AS buf: mask_vcm DO 24880 918 76 ! ! ! BEGIN 24890 919 77 ! ! ! ! area_to_lam(2) := adr_code; 24900 920 78 ! ! ! ! area_to_lam(3) := buf.fix.update; (* 0: says start at, 1: stop at *) 24910 921 79 ! ! ! END; (* of lock statement *) 24920 922 80 ! ! ! \f tsvaclst 81.01.19. 16.20. page 30 24930 923 81 ! ! ! build_a_letter_telegram( tolam_ref ); 24940 924 82 ! ! ! lamspeak_state := lettertovc; 24950 925 83 ! ! ! signal( tolam_ref, lamsem^ ); 24960 926 84 ! ! ! 24970 927 85 ! ! END (* of permiss *) 24980 928 86 ! ! 24990 929 87 ! END (* of case *); 25000 930 88 ! 25010 931 89 END (* of to_lam_driver *); 25020 932 25030 933 \f tsvaclst 81.01.19. 16.20. page 31 26010 934 PROCEDURE from_lam_driver; 26020 935 VAR 26030 936 hlp, i: integer; 26040 937 BEGIN 26050 938 1 ! 26060 939 2 ! CASE lamspeak_state OF 26070 940 3 ! ! 26080 941 4 ! ! lettertovc : (* master telegram is opr or data ================*) 26090 942 5 ! ! CASE slave_opcode OF 26100 943 6 ! ! ! 26110 944 7 ! ! ! p_ack, 26120 945 8 ! ! ! data , 26130 946 9 ! ! ! opr : (* non expected answer on opr or data *) 26140 947 10 ! ! ! speak_action := 1; 26150 948 11 ! ! ! 26160 949 12 ! ! ! status: 26170 950 13 ! ! ! speak_action := 14; 26180 951 14 ! ! ! 26190 952 15 ! ! ! d_ack: 26200 953 16 ! ! ! CASE area_pointer OF 26210 954 17 ! ! ! ! 1: (* non expected answer on opr *) 26220 955 18 ! ! ! ! speak_action := 1; 26230 956 19 ! ! ! ! 2: (* data sended for the first time *) 26240 957 20 ! ! ! ! speak_action := 3 26250 958 21 ! ! ! ! OTHERWISE (* data sended for the third time *) 26260 959 22 ! ! ! ! speak_action := 4 26270 960 23 ! ! ! END (* of case on area_pointer *); 26280 961 24 ! ! ! 26290 962 25 ! ! ! t_ack: 26300 963 26 ! ! ! CASE area_pointer OF 26310 964 27 ! ! ! ! 1: (* expected answer on opr *) 26320 965 28 ! ! ! ! speak_action := 3 26330 966 29 ! ! ! ! OTHERWISE (* non expected answer on data *) 26340 967 30 ! ! ! ! speak_action := 1 26350 968 31 ! ! ! END (* of case on area_pointer *); 26360 969 32 ! ! ! 26370 970 33 ! ! ! nak , 26380 971 34 ! ! ! free: 26390 972 35 ! ! ! speak_action := 2; 26400 973 36 ! ! ! 26410 974 37 ! ! END (* of case in lettertovc *); 26420 975 38 ! ! 26430 976 39 ! ! 26440 977 40 ! ! letterfromvc: (* master telegram is poll =====================*) 26450 978 41 ! ! CASE slave_opcode OF 26460 979 42 ! ! ! \f tsvaclst 81.01.19. 16.20. page 32 26470 980 43 ! ! ! p_ack: 26480 981 44 ! ! ! speak_action := 5; 26490 982 45 ! ! ! 26500 983 46 ! ! ! data : 26510 984 47 ! ! ! CASE area_pointer OF 26520 985 48 ! ! ! ! 1: 26530 986 49 ! ! ! ! speak_action := 1; 26540 987 50 ! ! ! ! 2: 26550 988 51 ! ! ! ! speak_action := 6; 26560 989 52 ! ! ! ! 3: 26570 990 53 ! ! ! ! speak_action := 7 26580 991 54 ! ! ! END (* of case *); 26590 992 55 ! ! ! 26600 993 56 ! ! ! opr , 26610 994 57 ! ! ! d_ack, 26620 995 58 ! ! ! t_ack: (* non expected answer on poll *) 26630 996 59 ! ! ! speak_action := 1; 26640 997 60 ! ! ! 26650 998 61 ! ! ! status: 26660 999 62 ! ! ! speak_action := 14; 26670 1000 63 ! ! ! 26680 1001 64 ! ! ! nak , 26690 1002 65 ! ! ! free : 26700 1003 66 ! ! ! speak_action := 2; 26710 1004 67 ! ! END (* of case in letterfromvc *); 26720 1005 68 ! ! 26730 1006 69 ! ! 26740 1007 70 ! ! polling: (* master telegram is poll ===========================*) 26750 1008 71 ! ! CASE slave_opcode OF 26760 1009 72 ! ! ! 26770 1010 73 ! ! ! p_ack: 26780 1011 74 ! ! ! speak_action := 8; 26790 1012 75 ! ! ! 26800 1013 76 ! ! ! data , 26810 1014 77 ! ! ! d_ack, 26820 1015 78 ! ! ! t_ack: (* non expected answer on poll *) 26830 1016 79 ! ! ! speak_action := 9; 26840 1017 80 ! ! ! 26850 1018 81 ! ! ! opr : 26860 1019 82 ! ! ! speak_action := 10; 26870 1020 83 ! ! ! 26880 1021 84 ! ! ! status: 26890 1022 85 ! ! ! speak_action := 14; 26900 1023 86 ! ! ! 26910 1024 87 ! ! ! nak , 26920 1025 88 ! ! ! free : \f tsvaclst 81.01.19. 16.20. page 33 26930 1026 89 ! ! ! speak_action := 11; 26940 1027 90 ! ! ! 26950 1028 91 ! ! END (* of case in polling *); 26960 1029 92 ! ! 26970 1030 93 ! ! 26980 1031 94 ! ! testi : (* master telegram is testi =============================*) 26990 1032 95 ! ! CASE slave_opcode OF 27000 1033 96 ! ! ! 27010 1034 97 ! ! ! p_ack , 27020 1035 98 ! ! ! data , 27030 1036 99 ! ! ! opr , 27040 1037 100 ! ! ! d_ack : (* non expected answer on testi *) 27050 1038 101 ! ! ! speak_action := 1; 27060 1039 102 ! ! ! 27070 1040 103 ! ! ! status: 27080 1041 104 ! ! ! speak_action := 14; 27090 1042 105 ! ! ! 27100 1043 106 ! ! ! t_ack : 27110 1044 107 ! ! ! speak_action := 12; 27120 1045 108 ! ! ! 27130 1046 109 ! ! ! nak , 27140 1047 110 ! ! ! free : 27150 1048 111 ! ! ! speak_action := 2; 27160 1049 112 ! ! ! 27170 1050 113 ! ! END (* of case in testi *) 27180 1051 114 ! END (* of case on lamspeak_state *); 27190 1052 115 ! 27200 1053 116 ! 27210 1054 117 ! CASE speak_action OF (* the treatment of: "speak_actions" =======*) 27220 1055 118 ! ! 27230 1056 119 ! ! 1: (* non expected answers *) 27240 1057 120 ! ! BEGIN 27250 1058 121 ! ! ! build_line_dep_telegram( tolam_ref, line ); 27260 1059 122 ! ! ! fault_at_line; 27270 1060 123 ! ! ! signal( tolam_ref, lamsem^ ) 27280 1061 124 ! ! END; 27290 1062 125 ! ! 27300 1063 126 ! ! 2: (* nak and free answers only *) 27310 1064 127 ! ! BEGIN 27320 1065 128 ! ! ! fault_at_line; 27330 1066 129 ! ! ! build_same_telegram( tolam_ref ); 27340 1067 130 ! ! ! signal( tolam_ref, lamsem^ ) 27350 1068 131 ! ! END; 27360 1069 132 ! ! 27370 1070 133 ! ! 3: (* letter not finished *) 27380 1071 134 ! ! BEGIN \f tsvaclst 81.01.19. 16.20. page 34 27390 1072 135 ! ! ! ok_at_line; 27400 1073 136 ! ! ! area_pointer := area_pointer + 1; 27410 1074 137 ! ! ! build_a_letter_telegram( tolam_ref ); 27420 1075 138 ! ! ! signal( tolam_ref, lamsem^ ) 27430 1076 139 ! ! END; 27440 1077 140 ! ! 27450 1078 141 ! ! 4: (* letter finished, make receipt *) 27460 1079 142 ! ! BEGIN 27470 1080 143 ! ! ! ok_at_line; 27480 1081 144 ! ! ! area_pointer := 1; 27490 1082 145 ! ! ! 27500 1083 146 ! ! ! CASE area_to_lam(1) OF 27510 1084 147 ! ! ! ! #h30, #h31, #h32 : (* make receipt of delivered alarm *) 27520 1085 148 ! ! ! ! BEGIN 27530 1086 149 ! ! ! ! ! boo := get_net_addr( at_table_addr, area_to_lam(2) ); 27540 1087 150 ! ! ! ! ! demand_lbuf( log, 6, own_dc, #h2, 0, 0, 27550 1088 151 ! ! ! ! ! area_to_lam(1), area_to_lam(3), at_table_addr ) 27560 1089 152 ! ! ! ! END 27570 1090 153 ! ! ! ! OTHERWISE (* nothing *) 27580 1091 154 ! ! ! END (* of case *); 27590 1092 155 ! ! ! 27600 1093 156 ! ! ! (* make master poll to handle response from vc *) 27610 1094 157 ! ! ! build_a_poll_telegram( tolam_ref ); 27620 1095 158 ! ! ! lamspeak_state := polling; 27630 1096 159 ! ! ! signal( tolam_ref, lamsem^ ) 27640 1097 160 ! ! END; 27650 1098 161 ! ! 27660 1099 162 ! ! 5: (* poll answers leading to poll sending *) 27670 1100 163 ! ! BEGIN 27680 1101 164 ! ! ! ok_at_line; 27690 1102 165 ! ! ! build_a_poll_telegram( tolam_ref ); 27700 1103 166 ! ! ! signal( tolam_ref, lamsem^ ) 27710 1104 167 ! ! END; 27720 1105 168 ! ! 27730 1106 169 ! ! 6: 27740 1107 170 ! ! BEGIN 27750 1108 171 ! ! ! area_from_lam(area_pointer) := slave_data; 27760 1109 172 ! ! ! area_pointer := area_pointer + 1; 27770 1110 173 ! ! ! ok_at_line; 27780 1111 174 ! ! ! build_a_poll_telegram( tolam_ref ); 27790 1112 175 ! ! ! signal( tolam_ref, lamsem^ ) 27800 1113 176 ! ! END; 27810 1114 177 ! ! 27820 1115 178 ! ! 7: (* three gathered telegrams, make lbuf *) 27830 1116 179 ! ! BEGIN 27840 1117 180 ! ! ! area_from_lam(area_pointer) := slave_data; \f tsvaclst 81.01.19. 16.20. page 35 27850 1118 181 ! ! ! ok_at_line; 27860 1119 182 ! ! ! area_pointer := 1; 27870 1120 183 ! ! ! lamspeak_state := nottele; 27880 1121 184 ! ! ! 27890 1122 185 ! ! ! (* send the letter via lbuf *) 27900 1123 186 ! ! ! hlp := area_from_lam(1); 27910 1124 187 ! ! ! 27920 1125 188 ! ! ! CASE get_net_addr( at_table_addr, area_from_lam(2)) OF 27930 1126 189 ! ! ! ! true : 27940 1127 190 ! ! ! ! BEGIN 27950 1128 191 ! ! ! ! ! IF (hlp = #h40) OR (hlp = #h84) THEN (* "styr" or "test" *) 27960 1129 192 ! ! ! ! ! demand_lbuf( norm, 1, at_table_addr, hlp, 0, 0, 27970 1130 193 ! ! ! ! ! area_from_lam(3), 0, own_dc ) 27980 1131 194 ! ! ! ! ! ELSE 27990 1132 195 ! ! ! ! ! IF (0 < hlp) AND (hlp < 5) THEN (* "start at", "stop at" "-start at" -*) 28000 1133 196 ! ! ! ! ! BEGIN 28010 1134 197 ! ! ! ! ! ! CASE hlp OF 28020 1135 198 ! ! ! ! ! ! ! 1, 3: i := 0; (* permission was "start at" *) 28030 1136 199 ! ! ! ! ! ! ! 2, 4: i := 1 (* permission was "stop at" *) 28040 1137 200 ! ! ! ! ! ! END (* of case *); 28050 1138 201 ! ! ! ! ! ! demand_lbuf( log, 4, own_dc, #h65, i, area_from_lam(3), 28060 1139 202 ! ! ! ! ! ! 0, 0, at_table_addr ); 28070 1140 203 ! ! ! ! ! END 28080 1141 204 ! ! ! ! ! ELSE 28090 1142 205 ! ! ! ! ! BEGIN (* refuse command *) 28100 1143 206 ! ! ! ! ! ! area_to_lam(1) := #h10; 28110 1144 207 ! ! ! ! ! ! area_to_lam(2) := area_from_lam(2); 28120 1145 208 ! ! ! ! ! ! area_to_lam(3) := area_from_lam(3); 28130 1146 209 ! ! ! ! ! ! lamspeak_state := lettertovc; 28140 1147 210 ! ! ! ! ! ! build_a_letter_telegram( tolam_ref ); 28150 1148 211 ! ! ! ! ! ! signal( tolam_ref, lamsem^ ); 28160 1149 212 ! ! ! ! ! END; 28170 1150 213 ! ! ! ! END; 28180 1151 214 ! ! ! ! 28190 1152 215 ! ! ! ! false: 28200 1153 216 ! ! ! ! BEGIN 28210 1154 217 ! ! ! ! ! IF (hlp = #h40) OR (hlp = #h84) THEN 28220 1155 218 ! ! ! ! ! area_to_lam(1) := hlp + 3 28230 1156 219 ! ! ! ! ! ELSE 28240 1157 220 ! ! ! ! ! IF (0<hlp) AND (hlp<5) THEN 28250 1158 221 ! ! ! ! ! area_to_lam(1) := #h65 28260 1159 222 ! ! ! ! ! ELSE 28270 1160 223 ! ! ! ! ! area_to_lam(1) := #h10; 28280 1161 224 ! ! ! ! ! area_to_lam(2) := area_from_lam(2); 28290 1162 225 ! ! ! ! ! area_to_lam(3) := area_from_lam(3); 28300 1163 226 ! ! ! ! ! lamspeak_state := lettertovc; \f tsvaclst 81.01.19. 16.20. page 36 28310 1164 227 ! ! ! ! ! build_a_letter_telegram( tolam_ref ); 28320 1165 228 ! ! ! ! ! signal( tolam_ref, lamsem^ ); 28330 1166 229 ! ! ! ! END (* of false *) 28340 1167 230 ! ! ! END (* of case on check *); 28350 1168 231 ! ! END (* of action 7 *); 28360 1169 232 ! ! 28370 1170 233 ! ! 8: (* a single poll caused by a clockpulse *) 28380 1171 234 ! ! BEGIN 28390 1172 235 ! ! ! ok_at_line; 28400 1173 236 ! ! ! buftype := used; 28410 1174 237 ! ! ! lamspeak_state := nottele 28420 1175 238 ! ! END (* of action 8 *); 28430 1176 239 ! ! 28440 1177 240 ! ! 9: (* non expected answers caused by a single poll *) 28450 1178 241 ! ! BEGIN 28460 1179 242 ! ! ! fault_at_line; 28470 1180 243 ! ! ! buftype := used; 28480 1181 244 ! ! ! lamspeak_state := nottele 28490 1182 245 ! ! END (* of action 9 *); 28500 1183 246 ! ! 28510 1184 247 ! ! 10: (* first telegram of a letter is comming *) 28520 1185 248 ! ! BEGIN 28530 1186 249 ! ! ! ok_at_line;; 28540 1187 250 ! ! ! area_from_lam(1) := slave_data; 28550 1188 251 ! ! ! area_pointer := 2; 28560 1189 252 ! ! ! build_a_poll_telegram( tolam_ref ); 28570 1190 253 ! ! ! lamspeak_state := letterfromvc; 28580 1191 254 ! ! ! signal ( tolam_ref, lamsem^ ) 28590 1192 255 ! ! END (* of action 10 *); 28600 1193 256 ! ! 28610 1194 257 ! ! 11: (* nak and free answers in polling state only *) 28620 1195 258 ! ! BEGIN 28630 1196 259 ! ! ! fault_at_line; 28640 1197 260 ! ! ! buftype := used; 28650 1198 261 ! ! ! lamspeak_state := nottele 28660 1199 262 ! ! END; 28670 1200 263 ! ! 28680 1201 264 ! ! 12: (* usable answers on master testi *) 28690 1202 265 ! ! BEGIN 28700 1203 266 ! ! ! 28710 1204 267 ! ! ! ok_at_line; 28720 1205 268 ! ! ! demand_lbuf( norm, 1, own_dc, keep_the_opcode+1, 0, accepted, 28730 1206 269 ! ! ! slave_data, 0, own_dc ); 28740 1207 270 ! ! ! (*------ 8.1 or 8.3 demanded *) 28750 1208 271 ! ! ! buftype := used; 28760 1209 272 ! ! ! lamspeak_state := nottele; \f tsvaclst 81.01.19. 16.20. page 37 28770 1210 273 ! ! ! 28780 1211 274 ! ! END (* of action 12 *); 28790 1212 275 ! ! 28800 1213 276 ! ! 13: (* empty *); 28810 1214 277 ! ! 28820 1215 278 ! ! 14: (* status answers *) 28830 1216 279 ! ! BEGIN 28840 1217 280 ! ! ! demand_lbuf( norm, 1, own_dc, #h32, 0, 0, 28850 1218 281 ! ! ! slave_data, 0, own_dc ); 28860 1219 282 ! ! ! ok_at_line; 28870 1220 283 ! ! ! build_serial_changed_telegram( tolam_ref); 28880 1221 284 ! ! ! signal( tolam_ref, lamsem^ ) 28890 1222 285 ! ! END (* of action 14 *); 28900 1223 286 ! ! 28910 1224 287 ! END (* of case on speak_action *); 28920 1225 288 ! 28930 1226 289 END (* of from_lam_driver procedure *); 28940 1227 28950 1228 \f tsvaclst 81.01.19. 16.20. page 38 29010 1229 BEGIN 29020 1230 1 ! (******************************************* 29030 1231 2 ! **** the body of the lamspeak procedure **** 29040 1232 3 ! ********************************************) 29050 1233 4 ! 29060 1234 5 ! (*q if test then testout(zout,"speak st in ",ord(lamspeak_state)); q*) 29070 1235 6 ! 29080 1236 7 ! CASE buftype OF 29090 1237 8 ! ! clock : (* <--------<< *) 29100 1238 9 ! ! (* ------ No nessage buffer is involved. * 29110 1239 10 ! ! * ------ The lam buffer is idle at tolam_ref. *) 29120 1240 11 ! ! 29130 1241 12 ! ! BEGIN 29140 1242 13 ! ! ! 29150 1243 14 ! ! ! build_a_poll_telegram( tolam_ref ); 29160 1244 15 ! ! ! lamspeak_state := polling; 29170 1245 16 ! ! ! signal( tolam_ref, lamsem^ ); 29180 1246 17 ! ! ! 29190 1247 18 ! ! END; 29200 1248 19 ! ! 29210 1249 20 ! ! permiss, 29220 1250 21 ! ! alarm, (* <--------<< *) 29230 1251 22 ! ! report, 29240 1252 23 ! ! testat: 29250 1253 24 ! ! (* the message buffer is involved at mess_ref. * 29260 1254 25 ! ! * return this buffer, ie buftype := empty. * 29270 1255 26 ! ! * The lam buffer is idle at tolam_ref. *) 29280 1256 27 ! ! BEGIN 29290 1257 28 ! ! ! to_lam_driver; 29300 1258 29 ! ! ! buftype := empty; 29310 1259 30 ! ! END; 29320 1260 31 ! ! 29330 1261 32 ! ! lam : 29340 1262 33 ! ! (* The message buffer is a lam buffer, that is * 29350 1263 34 ! ! * the lam buffer is not idle. * 29360 1264 35 ! ! * Transfer the reference, ie tolam_ref :=: mess_ref. *) 29370 1265 36 ! ! BEGIN 29380 1266 37 ! ! ! tolam_ref :=: mess_ref; 29390 1267 38 ! ! ! 29400 1268 39 ! ! ! LOCK tolam_ref AS telegram : from_telegram_type DO 29410 1269 40 ! ! ! BEGIN (*----- get all the information needed *) 29420 1270 41 ! ! ! ! slave_opcode := telegram.from_opcode; 29430 1271 42 ! ! ! ! slave_data := telegram.from_data; 29440 1272 43 ! ! ! END; 29450 1273 44 ! ! ! 29460 1274 45 ! ! ! (*x if lamtest then \f tsvaclst 81.01.19. 16.20. page 39 29470 1275 46 ! ! ! begin 29480 1276 47 ! ! ! case slave_opcode of 29490 1277 48 ! ! ! 0: teletxt := " P-ACK "; 29500 1278 49 ! ! ! 1: teletxt := " DATA "; 29510 1279 50 ! ! ! 2: teletxt := " OPR "; 29520 1280 51 ! ! ! 3: teletxt := " STATUS "; 29530 1281 52 ! ! ! 4: teletxt := " D-ACK "; 29540 1282 53 ! ! ! 5: teletxt := " T-ACK "; 29550 1283 54 ! ! ! 6: teletxt := " NAK "; 29560 1284 55 ! ! ! 7: teletxt := " FREE " 29570 1285 56 ! ! ! end; 29580 1286 57 ! ! ! testout(zout, teletxt, slave_data); 29590 1287 58 ! ! ! end; x*) 29600 1288 59 ! ! ! 29610 1289 60 ! ! ! IF check5( tolam_ref, check ) = false THEN 29620 1290 61 ! ! ! BEGIN 29630 1291 62 ! ! ! ! slave_opcode := free; 29640 1292 63 ! ! ! ! IF lamtest THEN testout(zout,"CHEHK5FAULT ",slave_opcode); 29650 1293 64 ! ! ! END; 29660 1294 65 ! ! ! 29670 1295 66 ! ! ! IF tolam_ref^.u2 <> 0 THEN 29680 1296 67 ! ! ! BEGIN 29690 1297 68 ! ! ! ! slave_opcode := free; 29700 1298 69 ! ! ! ! IF tolam_ref^.u2 = 5 THEN 29710 1299 70 ! ! ! ! BEGIN 29720 1300 71 ! ! ! ! ! lam_timeout := true; 29730 1301 72 ! ! ! ! ! (*x if lamtest then testout(zout,"LAMTIMEOUT ",slave_opcode); x*) 29740 1302 73 ! ! ! ! END; 29750 1303 74 ! ! ! ! (*x if lamtest then testout(zout,"LAMFAULT ",tolam_ref^.u2); x*) 29760 1304 75 ! ! ! END; 29770 1305 76 ! ! ! 29780 1306 77 ! ! ! from_lam_driver; 29790 1307 78 ! ! ! 29800 1308 79 ! ! END; 29810 1309 80 ! ! 29820 1310 81 ! ! listen : (* <--------<< *) 29830 1311 82 ! ! (* The listen buffer is refered to by mess_ref. *) 29840 1312 83 ! ! BEGIN 29850 1313 84 ! ! ! (*---- Nb ---- if lbuf_needed < 1 the program fault *) 29860 1314 85 ! ! ! 29870 1315 86 ! ! ! build_an_lbuf( mess_ref, lbuf_info( lbuf_needed ) ); 29880 1316 87 ! ! ! 29890 1317 88 ! ! ! lbuf_needed := lbuf_needed - 1; 29900 1318 89 ! ! ! 29910 1319 90 ! ! ! buftype := listen; 29920 1320 91 ! ! ! \f tsvaclst 81.01.19. 16.20. page 40 29930 1321 92 ! ! END 29940 1322 93 ! ! OTHERWISE 29950 1323 94 ! ! (*-------- Nb --- program fault *); 29960 1324 95 ! ! 29970 1325 96 ! END (* of case on buftype *); 29980 1326 97 ! 29990 1327 98 ! IF lamspeak_state = nottele THEN 30000 1328 99 ! vcatc_state := active; 30010 1329 100 ! 30020 1330 101 ! IF lbuf_needed > 0 THEN 30030 1331 102 ! BEGIN 30040 1332 103 ! ! (*q if test then testout(zout,"lbuf needed:",lbuf_needed); q*) 30050 1333 104 ! ! vcatc_state := lam_need_buf; 30060 1334 105 ! ! IF no_of_listen > 0 THEN 30070 1335 106 ! ! input := from_listen_ref; (* There is a lbuf *) 30080 1336 107 ! END; 30090 1337 108 ! 30100 1338 109 ! (*q if test then testout(zout,"speak st out",ord(lamspeak_state)); q*) 30110 1339 110 END (* of lamspeak procedure *); 30120 1340 \f tsvaclst 81.01.19. 16.20. page 41 31010 1341 BEGIN (***** main program *****) 31020 1342 1 ! 31030 1343 2 ! (* initier module *) 31040 1344 3 ! testopen(zout,own.incname,opsem); 31050 1345 4 ! testout(zout, version, al_env_version); 31060 1346 5 ! testout (zout, "chann/addr ", canno*1000+micadr); 31070 1347 6 ! 31080 1348 7 ! alloc(mess_ref,lam_pool,messem.s^); 31090 1349 8 ! WITH mess_ref^ DO 31100 1350 9 ! BEGIN 31110 1351 10 ! ! u1:= create_at_ch; 31120 1352 11 ! ! u2:= canno; 31130 1353 12 ! ! u3:= lam_route 31140 1354 13 ! END; 31150 1355 14 ! LOCK mess_ref AS buf : ch_format DO 31160 1356 15 ! WITH buf DO 31170 1357 16 ! BEGIN 31180 1358 17 ! ! cntl_inf:= at_control; 31190 1359 18 ! ! time_inf:= con_lam_time 31200 1360 19 ! END; 31210 1361 20 ! signal(mess_ref,lamsem^); 31220 1362 21 ! (* initier timeout buffers *) 31230 1363 22 ! alloc(bookup_ref,book_pool,timeout_answer); 31240 1364 23 ! bookup_ref^.u3:= tim_route1; 31250 1365 24 ! 31260 1366 25 ! alloc(clock_ref,tim_pool,messem.s^); 31270 1367 26 ! WITH clock_ref^ DO 31280 1368 27 ! BEGIN 31290 1369 28 ! ! u1:= delay_req; 31300 1370 29 ! ! u3:= tim_route; 31310 1371 30 ! ! u4:= #hc1 31320 1372 31 ! END; 31330 1373 32 ! LOCK clock_ref AS buf: timers DO 31340 1374 33 ! buf.object:= poll_delay; 31350 1375 34 ! 31360 1376 35 ! alloc(timeout_ref,tim_pool,messem.s^); 31370 1377 36 ! WITH timeout_ref^ DO 31380 1378 37 ! BEGIN 31390 1379 38 ! ! u1:= book_req; 31400 1380 39 ! ! u3:= tim_route1; 31410 1381 40 ! ! u4:= #hc2 31420 1382 41 ! END; 31430 1383 42 ! \f tsvaclst 81.01.19. 16.20. page 42 32010 1384 43 ! line := ok; 32020 1385 44 ! input := from_sem; 32030 1386 45 ! vcatc_state := not_ready; (* <--------<< *) 32040 1387 46 ! old_state := not_ready; 32050 1388 47 ! lamspeak_state := nottele; 32060 1389 48 ! zero_addr := alarmnetaddr(macroaddr(0,0,0),0); 32070 1390 49 ! cur_vcm := zero_addr; 32080 1391 50 ! own_dc.macro := dc_address; 32090 1392 51 ! own_dc.micro := 0; 32100 1393 52 ! 32110 1394 53 ! \f tsvaclst 81.01.19. 16.20. page 43 33010 1395 54 ! REPEAT 33020 1396 55 ! ! (* read one new buffer *) 33030 1397 56 ! ! (*q if test then 33040 1398 57 ! ! begin 33050 1399 58 ! ! testout(zout," input : ",ord(input)); 33060 1400 59 ! ! testout(zout," vcatc st : ",ord(vcatc_state)); 33070 1401 60 ! ! end; q*) 33080 1402 61 ! ! 33090 1403 62 ! ! buftype:= used; 33100 1404 63 ! ! 33110 1405 64 ! ! CASE input OF 33120 1406 65 ! ! ! from_sem : 33130 1407 66 ! ! ! CASE vcatc_state OF 33140 1408 67 ! ! ! ! not_ready..active : IF NOT nil(fromlam_ref) THEN 33150 1409 68 ! ! ! ! mess_ref :=: fromlam_ref ELSE 33160 1410 69 ! ! ! ! IF no_of_queue>0 THEN 33170 1411 70 ! ! ! ! BEGIN 33180 1412 71 ! ! ! ! ! wait(mess_ref,queuesem.w^); 33190 1413 72 ! ! ! ! ! no_of_queue:= no_of_queue - 1 33200 1414 73 ! ! ! ! END ELSE 33210 1415 74 ! ! ! ! wait(mess_ref,messem.w^); 33220 1416 75 ! ! ! ! lam_talk : IF NOT nil(fromlam_ref) THEN 33230 1417 76 ! ! ! ! mess_ref :=: fromlam_ref ELSE 33240 1418 77 ! ! ! ! wait(mess_ref,messem.w^); 33250 1419 78 ! ! ! ! OTHERWISE wait(mess_ref,messem.w^) 33260 1420 79 ! ! ! END; 33270 1421 80 ! ! ! from_listen_ref : 33280 1422 81 ! ! ! BEGIN 33290 1423 82 ! ! ! ! found:= get_listen_buf; 33300 1424 83 ! ! ! ! input:= from_sem 33310 1425 84 ! ! ! END; 33320 1426 85 ! ! ! nothing : input:= from_sem 33330 1427 86 ! ! ! OTHERWISE 33340 1428 87 ! ! END; 33350 1429 88 ! ! 33360 1430 89 ! ! 33370 1431 90 ! ! (* classify buffer *) 33380 1432 91 ! ! rute := mess_ref^.u3; 33390 1433 92 ! ! func := mess_ref^.u4 DIV 16; 33400 1434 93 ! ! types:= mess_ref^.u4 MOD 16; 33410 1435 94 ! ! 33420 1436 95 ! ! (*q if test then 33430 1437 96 ! ! begin 33440 1438 97 ! ! testout(zout," route : ",rute); 33450 1439 98 ! ! testout(zout," functype : ",func*100+types); 33460 1440 99 ! ! end; q*) \f tsvaclst 81.01.19. 16.20. page 44 33470 1441 100 ! ! 33480 1442 101 ! ! CASE rute OF 33490 1443 102 ! ! ! dummy_route : (*this buffer must bee returned*) 33500 1444 103 ! ! ! buftype:= empty; 33510 1445 104 ! ! ! tim_route : (* delay from timeoutmodule *) 33520 1446 105 ! ! ! CASE types OF 33530 1447 106 ! ! ! ! 1 : buftype:= clock 33540 1448 107 ! ! ! ! OTHERWISE unknown_buf(unknown_opcode) 33550 1449 108 ! ! ! END; 33560 1450 109 ! ! ! tim_route1 : (* timeout answer and longtimeout *) 33570 1451 110 ! ! ! CASE types OF 33580 1452 111 ! ! ! ! 2 : LOCK mess_ref AS buf : timers DO 33590 1453 112 ! ! ! ! IF buf.object = vcc_vch_ltime THEN 33600 1454 113 ! ! ! ! buftype:= ltime ELSE 33610 1455 114 ! ! ! ! IF buf.object = vcc_vch_stime THEN 33620 1456 115 ! ! ! ! buftype:= stime ELSE 33630 1457 116 ! ! ! ! unknown_buf(rejected) 33640 1458 117 ! ! ! ! OTHERWISE unknown_buf(unknown_opcode) 33650 1459 118 ! ! ! END; 33660 1460 119 ! ! ! netc_route : (*buffer from vch*) 33670 1461 120 ! ! ! CASE func OF 33680 1462 121 ! ! ! ! 3 : CASE types OF 33690 1463 122 ! ! ! ! ! 0,1,2 : buftype:= alarm (* at --> vcat *) 33700 1464 123 ! ! ! ! ! OTHERWISE unknown_buf(unknown_opcode) 33710 1465 124 ! ! ! ! END; 33720 1466 125 ! ! ! ! 4 : CASE types OF 33730 1467 126 ! ! ! ! ! 1 : buftype:= report (* at --> vcat *) 33740 1468 127 ! ! ! ! ! OTHERWISE unknown_buf(unknown_opcode) 33750 1469 128 ! ! ! ! END; 33760 1470 129 ! ! ! ! 6 : CASE types OF 33770 1471 130 ! ! ! ! ! 2 : return_buf( accepted); (* dc --> dc *) 33780 1472 131 ! ! ! ! ! 4 : buftype := permiss (* dc --> vc *) 33790 1473 132 ! ! ! ! ! OTHERWISE unknown_buf( unknown_opcode ) 33800 1474 133 ! ! ! ! END; 33810 1475 134 ! ! ! ! 8 : CASE types OF 33820 1476 135 ! ! ! ! ! 0,2 : buftype:= testat; (* dc --> vcat *) 33830 1477 136 ! ! ! ! ! 5 : buftype:= report (* at --> vcat *) 33840 1478 137 ! ! ! ! ! OTHERWISE unknown_buf(unknown_opcode) 33850 1479 138 ! ! ! ! END; 33860 1480 139 ! ! ! ! 9 : CASE types OF 33870 1481 140 ! ! ! ! ! 0 : buftype:= operate 33880 1482 141 ! ! ! ! ! OTHERWISE unknown_buf(unknown_opcode) 33890 1483 142 ! ! ! ! END; 33900 1484 143 ! ! ! ! 10 : CASE types OF 33910 1485 144 ! ! ! ! ! 2,4 : buftype:= table 33920 1486 145 ! ! ! ! ! OTHERWISE unknown_buf(unknown_opcode) \f tsvaclst 81.01.19. 16.20. page 45 33930 1487 146 ! ! ! ! END; 33940 1488 147 ! ! ! ! 11 : CASE types OF 33950 1489 148 ! ! ! ! ! 2,4,6,8,10,12,14 : buftype:= service 33960 1490 149 ! ! ! ! ! OTHERWISE unknown_buf(unknown_opcode) 33970 1491 150 ! ! ! ! END; 33980 1492 151 ! ! ! ! 12 : CASE types OF 33990 1493 152 ! ! ! ! ! 5 : buftype:= listen 34000 1494 153 ! ! ! ! ! OTHERWISE unknown_buf(unknown_opcode) 34010 1495 154 ! ! ! ! END 34020 1496 155 ! ! ! ! OTHERWISE unknown_buf(unknown_opcode) 34030 1497 156 ! ! ! END; 34040 1498 157 ! ! ! lam_route : (* buffer from lamdriver *) 34050 1499 158 ! ! ! buftype:= lam 34060 1500 159 ! ! ! OTHERWISE unknown_buf(unknown_route) 34070 1501 160 ! ! END; 34080 1502 161 ! ! 34090 1503 162 ! ! \f tsvaclst 81.01.19. 16.20. page 46 35010 1504 163 ! ! (* make action *) 35020 1505 164 ! ! action:= acttable(vcatc_state,buftype); 35030 1506 165 ! ! (*q if test then 35040 1507 166 ! ! begin 35050 1508 167 ! ! testout(zout," buftype : ",ord(buftype)); 35060 1509 168 ! ! testout(zout," action : ",action); 35070 1510 169 ! ! end; q*) 35080 1511 170 ! ! CASE action OF 35090 1512 171 ! ! ! 35100 1513 172 ! ! ! 1 : (* no action, has been taken *); 35110 1514 173 ! ! ! 35120 1515 174 ! ! ! 2 : (* not ready *) 35130 1516 175 ! ! ! return_buf(module_not_ready); 35140 1517 176 ! ! ! 35150 1518 177 ! ! ! 3 : (* passive , alarm/report/testat received *) 35160 1519 178 ! ! ! IF cur_vcm <> zero_addr THEN 35170 1520 179 ! ! ! (* send to current vcm *) 35180 1521 180 ! ! ! LOCK mess_ref AS buf: alarmlabel DO 35190 1522 181 ! ! ! buf.rec:= cur_vcm 35200 1523 182 ! ! ! ELSE 35210 1524 183 ! ! ! return_buf(module_passive); 35220 1525 184 ! ! ! 35230 1526 185 ! ! ! 4 : (* save listenbuf *) 35240 1527 186 ! ! ! save_listen_buf; 35250 1528 187 ! ! ! 35260 1529 188 ! ! ! 5 : (* update table *) 35270 1530 189 ! ! ! BEGIN 35280 1531 190 ! ! ! ! CASE types OF 35290 1532 191 ! ! ! ! ! 2 : (* at_addr *) 35300 1533 192 ! ! ! ! ! LOCK mess_ref AS buf : mask_atadr DO 35310 1534 193 ! ! ! ! ! WITH buf DO 35320 1535 194 ! ! ! ! ! IF fix.update = remove_code THEN 35330 1536 195 ! ! ! ! ! BEGIN (* delete *) 35340 1537 196 ! ! ! ! ! ! IF get_adr_code(entry.at_addr,adr_code) THEN 35350 1538 197 ! ! ! ! ! ! BEGIN (* found *) 35360 1539 198 ! ! ! ! ! ! ! atadrtable(next):= atadrtable(noatadr); 35370 1540 199 ! ! ! ! ! ! ! noatadr:= noatadr - 1; 35380 1541 200 ! ! ! ! ! ! ! fix.result:= accepted; 35390 1542 201 ! ! ! ! ! ! END ELSE 35400 1543 202 ! ! ! ! ! ! BEGIN (* not found *) 35410 1544 203 ! ! ! ! ! ! ! fix.result:= not_found; 35420 1545 204 ! ! ! ! ! ! END; 35430 1546 205 ! ! ! ! ! END ELSE 35440 1547 206 ! ! ! ! ! IF fix.update = insert_code THEN 35450 1548 207 ! ! ! ! ! BEGIN (* insert *) 35460 1549 208 ! ! ! ! ! ! IF noatadr < at_addr_l THEN \f tsvaclst 81.01.19. 16.20. page 47 35470 1550 209 ! ! ! ! ! ! BEGIN (* ok *) 35480 1551 210 ! ! ! ! ! ! ! noatadr:= noatadr + 1; 35490 1552 211 ! ! ! ! ! ! ! (*q if test then testout(zout," noatadr : ",noatadr); q*) 35500 1553 212 ! ! ! ! ! ! ! atadrtable(noatadr):= entry; 35510 1554 213 ! ! ! ! ! ! ! fix.result:= accepted; 35520 1555 214 ! ! ! ! ! ! END ELSE 35530 1556 215 ! ! ! ! ! ! BEGIN (* no room *) 35540 1557 216 ! ! ! ! ! ! ! fix.result:= no_room; 35550 1558 217 ! ! ! ! ! ! END; 35560 1559 218 ! ! ! ! ! END ELSE 35570 1560 219 ! ! ! ! ! fix.result:= update_error; 35580 1561 220 ! ! ! ! ! 4 : (* at-ts *) 35590 1562 221 ! ! ! ! ! LOCK mess_ref AS buf: mask_atts DO 35600 1563 222 ! ! ! ! ! WITH buf DO 35610 1564 223 ! ! ! ! ! IF fix.update = remove_code THEN 35620 1565 224 ! ! ! ! ! BEGIN (* delete *) 35630 1566 225 ! ! ! ! ! ! IF get_atts_index(entry.ts_addr,intg_aux) THEN 35640 1567 226 ! ! ! ! ! ! BEGIN (* found *) 35650 1568 227 ! ! ! ! ! ! ! attstable(next):= attstable(noatts); 35660 1569 228 ! ! ! ! ! ! ! noatts:= noatts-1; 35670 1570 229 ! ! ! ! ! ! ! fix.result:= accepted; 35680 1571 230 ! ! ! ! ! ! END ELSE 35690 1572 231 ! ! ! ! ! ! BEGIN (* not found *) 35700 1573 232 ! ! ! ! ! ! ! fix.result:= not_found; 35710 1574 233 ! ! ! ! ! ! END 35720 1575 234 ! ! ! ! ! END ELSE 35730 1576 235 ! ! ! ! ! IF fix.update = insert_code THEN 35740 1577 236 ! ! ! ! ! BEGIN (* insert *) 35750 1578 237 ! ! ! ! ! ! IF noatts < at_ts_l THEN 35760 1579 238 ! ! ! ! ! ! BEGIN (* ok *) 35770 1580 239 ! ! ! ! ! ! ! noatts:= noatts+1; 35780 1581 240 ! ! ! ! ! ! ! attstable(noatts):= entry; 35790 1582 241 ! ! ! ! ! ! ! fix.result:= accepted; 35800 1583 242 ! ! ! ! ! ! END ELSE 35810 1584 243 ! ! ! ! ! ! BEGIN (* no room *) 35820 1585 244 ! ! ! ! ! ! ! fix.result:= no_room; 35830 1586 245 ! ! ! ! ! ! END; 35840 1587 246 ! ! ! ! ! END ELSE 35850 1588 247 ! ! ! ! ! fix.result:= update_error; 35860 1589 248 ! ! ! ! ! 35870 1590 249 ! ! ! ! ! OTHERWISE (* nothing *) 35880 1591 250 ! ! ! ! ! 35890 1592 251 ! ! ! ! END; 35900 1593 252 ! ! ! END; 35910 1594 253 ! ! ! 35920 1595 254 ! ! ! 6 : (* save received buffer *) \f tsvaclst 81.01.19. 16.20. page 48 35930 1596 255 ! ! ! BEGIN 35940 1597 256 ! ! ! ! CASE buftype OF 35950 1598 257 ! ! ! ! ! clock : 35960 1599 258 ! ! ! ! ! BEGIN 35970 1600 259 ! ! ! ! ! ! clock_ref:=: mess_ref; 35980 1601 260 ! ! ! ! ! ! WHILE get_listen_buf DO 35990 1602 261 ! ! ! ! ! ! return(mess_ref) 36000 1603 262 ! ! ! ! ! END; 36010 1604 263 ! ! ! ! ! ltime, 36020 1605 264 ! ! ! ! ! stime : timeout_ref :=: mess_ref; 36030 1606 265 ! ! ! ! ! lam : 36040 1607 266 ! ! ! ! ! BEGIN 36050 1608 267 ! ! ! ! ! ! mess_ref^.u1:= write_read_at; 36060 1609 268 ! ! ! ! ! ! tolam_ref :=: mess_ref; 36070 1610 269 ! ! ! ! ! ! IF vcatc_state=not_ready THEN 36080 1611 270 ! ! ! ! ! ! BEGIN 36090 1612 271 ! ! ! ! ! ! ! (* book(vcc_vch_ltime); *) 36100 1613 272 ! ! ! ! ! ! ! vcatc_state:= passive (* <--------<< *) 36110 1614 273 ! ! ! ! ! ! END 36120 1615 274 ! ! ! ! ! END 36130 1616 275 ! ! ! ! ! OTHERWISE (* nothing *) 36140 1617 276 ! ! ! ! END; 36150 1618 277 ! ! ! ! buftype:= used 36160 1619 278 ! ! ! END; 36170 1620 279 ! ! ! 36180 1621 280 ! ! ! 7 : (* service on variable limit and counters *) 36190 1622 281 ! ! ! BEGIN 36200 1623 282 ! ! ! ! LOCK mess_ref AS buf: alarmlabel DO 36210 1624 283 ! ! ! ! buf.result:= accepted; 36220 1625 284 ! ! ! ! CASE types OF 36230 1626 285 ! ! ! ! ! 2 : (* read line error count *) 36240 1627 286 ! ! ! ! ! LOCK mess_ref AS buf: mask_service DO 36250 1628 287 ! ! ! ! ! WITH buf DO 36260 1629 288 ! ! ! ! ! BEGIN 36270 1630 289 ! ! ! ! ! ! fix.no_of_by:= label_size + 2; 36280 1631 290 ! ! ! ! ! ! CASE fix.update OF 36290 1632 291 ! ! ! ! ! ! ! read_code : data:= line_error_count; 36300 1633 292 ! ! ! ! ! ! ! insert_code: line_error_count:= data 36310 1634 293 ! ! ! ! ! ! ! OTHERWISE fix.result:= update_error 36320 1635 294 ! ! ! ! ! ! END 36330 1636 295 ! ! ! ! ! END; 36340 1637 296 ! ! ! ! ! 4 : (* read pack counter *) 36350 1638 297 ! ! ! ! ! LOCK mess_ref AS buf: mask_service DO 36360 1639 298 ! ! ! ! ! WITH buf DO 36370 1640 299 ! ! ! ! ! BEGIN 36380 1641 300 ! ! ! ! ! ! fix.no_of_by:= label_size + 2; \f tsvaclst 81.01.19. 16.20. page 49 36390 1642 301 ! ! ! ! ! ! CASE fix.update OF 36400 1643 302 ! ! ! ! ! ! ! read_code : data:= pack_counter 36410 1644 303 ! ! ! ! ! ! ! OTHERWISE fix.result:= update_error 36420 1645 304 ! ! ! ! ! ! END 36430 1646 305 ! ! ! ! ! END; 36440 1647 306 ! ! ! ! ! 6 : (* update service limit *) 36450 1648 307 ! ! ! ! ! LOCK mess_ref AS buf: mask_service DO 36460 1649 308 ! ! ! ! ! WITH buf DO 36470 1650 309 ! ! ! ! ! BEGIN 36480 1651 310 ! ! ! ! ! ! fix.no_of_by:= label_size + 2; 36490 1652 311 ! ! ! ! ! ! CASE fix.update OF 36500 1653 312 ! ! ! ! ! ! ! read_code : data:= serve_limit; 36510 1654 313 ! ! ! ! ! ! ! insert_code : serve_limit:= data 36520 1655 314 ! ! ! ! ! ! ! OTHERWISE fix.result:= update_error 36530 1656 315 ! ! ! ! ! ! END 36540 1657 316 ! ! ! ! ! END; 36550 1658 317 ! ! ! ! ! 8 : (* read current vcm *) 36560 1659 318 ! ! ! ! ! LOCK mess_ref AS buf: mask_vcm DO 36570 1660 319 ! ! ! ! ! WITH buf DO 36580 1661 320 ! ! ! ! ! BEGIN 36590 1662 321 ! ! ! ! ! ! fix.no_of_by:= label_size + 4; 36600 1663 322 ! ! ! ! ! ! CASE fix.update OF 36610 1664 323 ! ! ! ! ! ! ! read_code : data:= cur_vcm 36620 1665 324 ! ! ! ! ! ! ! OTHERWISE fix.result:= update_error 36630 1666 325 ! ! ! ! ! ! END 36640 1667 326 ! ! ! ! ! END; 36650 1668 327 ! ! ! ! ! 10 : (* update stoppoll limit *) 36660 1669 328 ! ! ! ! ! LOCK mess_ref AS buf: mask_service DO 36670 1670 329 ! ! ! ! ! WITH buf DO 36680 1671 330 ! ! ! ! ! BEGIN 36690 1672 331 ! ! ! ! ! ! fix.no_of_by:= label_size + 2; 36700 1673 332 ! ! ! ! ! ! CASE fix.update OF 36710 1674 333 ! ! ! ! ! ! ! read_code : data:= stoppoll_limit; 36720 1675 334 ! ! ! ! ! ! ! insert_code : stoppoll_limit:= data 36730 1676 335 ! ! ! ! ! ! ! OTHERWISE fix.result:= update_error 36740 1677 336 ! ! ! ! ! ! END 36750 1678 337 ! ! ! ! ! END; 36760 1679 338 ! ! ! ! ! 12 : (* update max succ errors *) 36770 1680 339 ! ! ! ! ! LOCK mess_ref AS buf: mask_service DO 36780 1681 340 ! ! ! ! ! WITH buf DO 36790 1682 341 ! ! ! ! ! BEGIN 36800 1683 342 ! ! ! ! ! ! fix.no_of_by:= label_size + 2; 36810 1684 343 ! ! ! ! ! ! CASE fix.update OF 36820 1685 344 ! ! ! ! ! ! ! read_code : data:= max_succ_errors; 36830 1686 345 ! ! ! ! ! ! ! insert_code : max_succ_errors:= data 36840 1687 346 ! ! ! ! ! ! ! OTHERWISE fix.result:= update_error \f tsvaclst 81.01.19. 16.20. page 50 36850 1688 347 ! ! ! ! ! ! END 36860 1689 348 ! ! ! ! ! END; 36870 1690 349 ! ! ! ! ! 14 : (* intern tests *) 36880 1691 350 ! ! ! ! ! LOCK mess_ref AS buf: mask_test DO 36890 1692 351 ! ! ! ! ! WITH buf DO 36900 1693 352 ! ! ! ! ! CASE fix.update OF 36910 1694 353 ! ! ! ! ! ! 0 : (* test off *) 36920 1695 354 ! ! ! ! ! ! test:= false; 36930 1696 355 ! ! ! ! ! ! 1 : (* test on *) 36940 1697 356 ! ! ! ! ! ! test:= true; 36950 1698 357 ! ! ! ! ! ! 2 : (* lamtest off *) 36960 1699 358 ! ! ! ! ! ! lamtest := false; 36970 1700 359 ! ! ! ! ! ! 3 : (* lamtest on *) 36980 1701 360 ! ! ! ! ! ! lamtest := true; 36990 1702 361 ! ! ! ! ! ! 4 : (* get variable *) 37000 1703 362 ! ! ! ! ! ! BEGIN 37010 1704 363 ! ! ! ! ! ! ! fix.no_of_by:= label_size + 10; 37020 1705 364 ! ! ! ! ! ! ! data(1):= no_of_listen; 37030 1706 365 ! ! ! ! ! ! ! data(2):= no_of_returned; 37040 1707 366 ! ! ! ! ! ! ! data(3):= no_of_released; 37050 1708 367 ! ! ! ! ! ! ! data(4):= no_of_unknown; 37060 1709 368 ! ! ! ! ! ! ! data(5):= no_of_queue; 37070 1710 369 ! ! ! ! ! ! END; 37080 1711 370 ! ! ! ! ! ! 5 : (* get states *) 37090 1712 371 ! ! ! ! ! ! BEGIN 37100 1713 372 ! ! ! ! ! ! ! fix.no_of_by:= label_size + 10; 37110 1714 373 ! ! ! ! ! ! ! data(1):= ord(vcatc_state); 37120 1715 374 ! ! ! ! ! ! ! data(2):= ord(old_state); 37130 1716 375 ! ! ! ! ! ! ! data(3):= ord(lamspeak_state); 37140 1717 376 ! ! ! ! ! ! ! data(4):= ord(input); 37150 1718 377 ! ! ! ! ! ! ! data(5):= poll_delay MOD 256; 37160 1719 378 ! ! ! ! ! ! END; 37170 1720 379 ! ! ! ! ! ! OTHERWISE fix.result:= update_error; 37180 1721 380 ! ! ! ! ! END; 37190 1722 381 ! ! ! ! ! OTHERWISE (* nothing *) 37200 1723 382 ! ! ! ! END 37210 1724 383 ! ! ! END; 37220 1725 384 ! ! ! 37230 1726 385 ! ! ! 8 : (* call lamspeak *) 37240 1727 386 ! ! ! BEGIN 37250 1728 387 ! ! ! ! found:= true; 37260 1729 388 ! ! ! ! CASE buftype OF 37270 1730 389 ! ! ! ! ! report, 37280 1731 390 ! ! ! ! ! alarm : LOCK mess_ref AS buf: alarmlabel DO 37290 1732 391 ! ! ! ! ! BEGIN 37300 1733 392 ! ! ! ! ! ! found:= get_adr_code(buf.send,adr_code); \f tsvaclst 81.01.19. 16.20. page 51 37310 1734 393 ! ! ! ! ! ! IF found THEN buf.op_code:= adr_code 37320 1735 394 ! ! ! ! ! END; 37330 1736 395 ! ! ! ! ! permiss: LOCK mess_ref AS buf: mask_vcm DO 37340 1737 396 ! ! ! ! ! BEGIN 37350 1738 397 ! ! ! ! ! ! found:= get_adr_code(buf.data,adr_code); 37360 1739 398 ! ! ! ! ! ! IF found THEN buf.fix.op_code:= adr_code 37370 1740 399 ! ! ! ! ! ! ELSE buf.fix.result:= not_found 37380 1741 400 ! ! ! ! ! END; 37390 1742 401 ! ! ! ! ! clock : restart_clock; 37400 1743 402 ! ! ! ! ! OTHERWISE (* nothing *) 37410 1744 403 ! ! ! ! END; 37420 1745 404 ! ! ! ! IF found THEN 37430 1746 405 ! ! ! ! BEGIN 37440 1747 406 ! ! ! ! ! vcatc_state:= lam_talk; (* <--------<< *) 37450 1748 407 ! ! ! ! ! lamspeak 37460 1749 408 ! ! ! ! END ELSE 37470 1750 409 ! ! ! ! IF buftype<>permiss THEN 37480 1751 410 ! ! ! ! unknown_buf(sender_error) 37490 1752 411 ! ! ! END; 37500 1753 412 ! ! ! 37510 1754 413 ! ! ! 9 : (* save mess_ref *) 37520 1755 414 ! ! ! BEGIN 37530 1756 415 ! ! ! ! signal(mess_ref,queuesem.s^); 37540 1757 416 ! ! ! ! no_of_queue:= no_of_queue + 1; 37550 1758 417 ! ! ! ! buftype:= used 37560 1759 418 ! ! ! END; 37570 1760 419 ! ! ! 37580 1761 420 ! ! ! 10 : (* restart clock *) 37590 1762 421 ! ! ! restart_clock; 37600 1763 422 ! ! ! 37610 1764 423 ! ! ! 11 : (* long timeout *) 37620 1765 424 ! ! ! BEGIN 37630 1766 425 ! ! ! ! timeout_ref :=: mess_ref; 37640 1767 426 ! ! ! ! buftype:= used; 37650 1768 427 ! ! ! ! old_state:= vcatc_state; 37660 1769 428 ! ! ! ! IF get_listen_buf THEN 37670 1770 429 ! ! ! ! BEGIN (* listenbuf found *) 37680 1771 430 ! ! ! ! ! mess_ref^.u2:= 0; (* empty databuffer *) 37690 1772 431 ! ! ! ! ! book(vcc_vch_stime); 37700 1773 432 ! ! ! ! ! vcatc_state:= wait_shorttime; (* <--------<< *) 37710 1774 433 ! ! ! ! END ELSE 37720 1775 434 ! ! ! ! BEGIN (* listenbuf not found *) 37730 1776 435 ! ! ! ! ! vcatc_state:= vcatc_need_buf; (* <--------<< *) 37740 1777 436 ! ! ! ! END 37750 1778 437 ! ! ! END; 37760 1779 438 ! ! ! \f tsvaclst 81.01.19. 16.20. page 52 37770 1780 439 ! ! ! 12 : (* book longtime *) 37780 1781 440 ! ! ! BEGIN 37790 1782 441 ! ! ! ! timeout_ref :=: mess_ref; 37800 1783 442 ! ! ! ! book(vcc_vch_ltime) 37810 1784 443 ! ! ! END; 37820 1785 444 ! ! ! 37830 1786 445 ! ! ! 13 : (* listenbuf ready to vcatc *) 37840 1787 446 ! ! ! BEGIN 37850 1788 447 ! ! ! ! mess_ref^.u2:= 0; (* empty databuffer *) 37860 1789 448 ! ! ! ! book(vcc_vch_stime); 37870 1790 449 ! ! ! ! vcatc_state:= wait_shorttime (* <--------<< *) 37880 1791 450 ! ! ! END; 37890 1792 451 ! ! ! 37900 1793 452 ! ! ! 14 : (* modul error *) 37910 1794 453 ! ! ! (* temporary solution *) 37920 1795 454 ! ! ! BEGIN 37930 1796 455 ! ! ! ! timeout_ref :=: mess_ref; 37940 1797 456 ! ! ! ! testout(zout,"timeout vch ",ord(vcatc_state)); 37950 1798 457 ! ! ! ! vcatc_state := passive; 37960 1799 458 ! ! ! ! book(vcc_vch_ltime) 37970 1800 459 ! ! ! END; 37980 1801 460 ! ! ! 37990 1802 461 ! ! ! 15 : (* dc or vc operations *) 38000 1803 462 ! ! ! CASE types OF 38010 1804 463 ! ! ! ! 0 : (* order to start or stop polling *) 38020 1805 464 ! ! ! ! LOCK mess_ref AS buf: mask_poll DO 38030 1806 465 ! ! ! ! WITH buf DO 38040 1807 466 ! ! ! ! CASE fix.update OF 38050 1808 467 ! ! ! ! ! stop_code : (* stop poll *) 38060 1809 468 ! ! ! ! ! IF vcatc_state <> passive THEN 38070 1810 469 ! ! ! ! ! BEGIN 38080 1811 470 ! ! ! ! ! ! area_pointer := 1; 38090 1812 471 ! ! ! ! ! ! lamspeak_state := nottele; (* lamspeak is initialized *) 38100 1813 472 ! ! ! ! ! ! vcatc_state:= passive; (* <--------<< *) 38110 1814 473 ! ! ! ! ! ! fix.result:= accepted; 38120 1815 474 ! ! ! ! ! END ELSE 38130 1816 475 ! ! ! ! ! fix.result:= rejected; 38140 1817 476 ! ! ! ! ! start_code : (* start poll *) 38150 1818 477 ! ! ! ! ! IF (vcatc_state=passive) AND (NOT nil(tolam_ref)) AND (NOT nil(clock_ref)) THEN 38160 1819 478 ! ! ! ! ! BEGIN 38170 1820 479 ! ! ! ! ! ! vcatc_state:= active; (* <--------<< *) 38180 1821 480 ! ! ! ! ! ! poll_delay:= poll_rate; 38190 1822 481 ! ! ! ! ! ! LOCK clock_ref AS cbuf: timers DO 38200 1823 482 ! ! ! ! ! ! cbuf.object:= poll_delay; 38210 1824 483 ! ! ! ! ! ! signal(clock_ref,timeoutsem^); (* start clock timeout *) 38220 1825 484 ! ! ! ! ! ! fix.result:= accepted; \f tsvaclst 81.01.19. 16.20. page 53 38230 1826 485 ! ! ! ! ! ! line_error_count:= error_count; 38240 1827 486 ! ! ! ! ! END ELSE 38250 1828 487 ! ! ! ! ! fix.result:= rejected; 38260 1829 488 ! ! ! ! ! OTHERWISE fix.result:= update_error; 38270 1830 489 ! ! ! ! END; 38280 1831 490 ! ! ! ! 2 : (* at-vc control *) 38290 1832 491 ! ! ! ! BEGIN 38300 1833 492 ! ! ! ! ! LOCK mess_ref AS buf: mask_atvcdc DO 38310 1834 493 ! ! ! ! ! WITH buf DO 38320 1835 494 ! ! ! ! ! BEGIN 38330 1836 495 ! ! ! ! ! ! buftype:= alarm; 38340 1837 496 ! ! ! ! ! ! IF fix.send = at THEN 38350 1838 497 ! ! ! ! ! ! BEGIN 38360 1839 498 ! ! ! ! ! ! ! fix.send:= fix.rec; 38370 1840 499 ! ! ! ! ! ! ! fix.rec := dc; 38380 1841 500 ! ! ! ! ! ! ! fix.result:= accepted; 38390 1842 501 ! ! ! ! ! ! END ELSE 38400 1843 502 ! ! ! ! ! ! IF fix.send = dc THEN 38410 1844 503 ! ! ! ! ! ! BEGIN 38420 1845 504 ! ! ! ! ! ! ! fix.send:= fix.rec; 38430 1846 505 ! ! ! ! ! ! ! fix.rec := at; 38440 1847 506 ! ! ! ! ! ! ! fix.result:= accepted; 38450 1848 507 ! ! ! ! ! ! END ELSE 38460 1849 508 ! ! ! ! ! ! buftype := unknown; 38470 1850 509 ! ! ! ! ! END; 38480 1851 510 ! ! ! ! ! IF buftype = unknown THEN unknown_buf( sender_error); 38490 1852 511 ! ! ! ! END 38500 1853 512 ! ! ! ! OTHERWISE (* nothing *) 38510 1854 513 ! ! ! END; 38520 1855 514 ! ! ! 38530 1856 515 ! ! ! 16 : (* one listenbuf arrived before shorttimeout *) 38540 1857 516 ! ! ! BEGIN 38550 1858 517 ! ! ! ! save_listen_buf; 38560 1859 518 ! ! ! ! input:= from_listen_ref; 38570 1860 519 ! ! ! ! vcatc_state:= old_state (* <--------<< *) 38580 1861 520 ! ! ! END; 38590 1862 521 ! ! ! 17 : (* lambuf arrived before lamspeak ready *) 38600 1863 522 ! ! ! fromlam_ref :=: mess_ref; 38610 1864 523 ! ! ! 18 : (* return buffer to pool *) 38620 1865 524 ! ! ! BEGIN 38630 1866 525 ! ! ! ! return(mess_ref); 38640 1867 526 ! ! ! ! no_of_returned:= (no_of_returned MOD max_int) + 1; 38650 1868 527 ! ! ! ! buftype:= used; 38660 1869 528 ! ! ! END; 38670 1870 529 ! ! ! 19 : (* lam need buf *) 38680 1871 530 ! ! ! BEGIN \f tsvaclst 81.01.19. 16.20. page 54 38690 1872 531 ! ! ! ! restart_clock; 38700 1873 532 ! ! ! ! IF no_of_listen>0 THEN 38710 1874 533 ! ! ! ! input:= from_listen_ref 38720 1875 534 ! ! ! ! ELSE 38730 1876 535 ! ! ! ! IF no_of_queue>5 THEN 38740 1877 536 ! ! ! ! BEGIN 38750 1878 537 ! ! ! ! ! wait(mess_ref,queuesem.w^); 38760 1879 538 ! ! ! ! ! no_of_queue:= no_of_queue - 1; 38770 1880 539 ! ! ! ! ! unknown_buf(pool_empty) 38780 1881 540 ! ! ! ! END 38790 1882 541 ! ! ! END 38800 1883 542 ! ! ! OTHERWISE unknown_buf(rejected) 38810 1884 543 ! ! END (* case *); 38820 1885 544 ! ! 38830 1886 545 ! ! \f tsvaclst 81.01.19. 16.20. page 55 39010 1887 546 ! ! (* send buffer *) 39020 1888 547 ! ! (*q if test then 39030 1889 548 ! ! testout(zout,"buftype out:",ord(buftype)); q*) 39040 1890 549 ! ! CASE buftype OF 39050 1891 550 ! ! ! operate, 39060 1892 551 ! ! ! table , 39070 1893 552 ! ! ! service, 39080 1894 553 ! ! ! permiss: 39090 1895 554 ! ! ! BEGIN (* receipt in current buffer , back to sender *) 39100 1896 555 ! ! ! ! mess_ref^.u3:= vca_route; 39110 1897 556 ! ! ! ! mess_ref^.u4:= mess_ref^.u4 + 1; 39120 1898 557 ! ! ! ! LOCK mess_ref AS buf: alarmlabel DO 39130 1899 558 ! ! ! ! BEGIN 39140 1900 559 ! ! ! ! ! buf.rec:= buf.send; 39150 1901 560 ! ! ! ! ! buf.send.micro:= micadr; 39160 1902 561 ! ! ! ! END; 39170 1903 562 ! ! ! ! send_to_vch 39180 1904 563 ! ! ! END; 39190 1905 564 ! ! ! unknown: 39200 1906 565 ! ! ! BEGIN (* send buffer to own dc or sender *) 39210 1907 566 ! ! ! ! mess_ref^.u3:= vca_route; 39220 1908 567 ! ! ! ! send_to_vch 39230 1909 568 ! ! ! END; 39240 1910 569 ! ! ! listen: 39250 1911 570 ! ! ! BEGIN (* new listenbuffer are used *) 39260 1912 571 ! ! ! ! mess_ref^.u3:= vca_route1; (* request listenbuffer *) 39270 1913 572 ! ! ! ! LOCK mess_ref AS buf: alarmlabel DO 39280 1914 573 ! ! ! ! buf.send.micro:= micadr; 39290 1915 574 ! ! ! ! send_to_vch 39300 1916 575 ! ! ! END; 39310 1917 576 ! ! ! report, 39320 1918 577 ! ! ! testat, 39330 1919 578 ! ! ! alarm: 39340 1920 579 ! ! ! BEGIN (* send to other receiver *) 39350 1921 580 ! ! ! ! mess_ref^.u3:= vca_route; 39360 1922 581 ! ! ! ! send_to_vch 39370 1923 582 ! ! ! END; 39380 1924 583 ! ! ! empty: 39390 1925 584 ! ! ! BEGIN (* buffer is empty, release to pool *) 39400 1926 585 ! ! ! ! mess_ref^.u2:= 0; 39410 1927 586 ! ! ! ! mess_ref^.u3:= vca_route; 39420 1928 587 ! ! ! ! IF no_of_listen<2 THEN 39430 1929 588 ! ! ! ! save_listen_buf ELSE 39440 1930 589 ! ! ! ! return(mess_ref) 39450 1931 590 ! ! ! END 39460 1932 591 ! ! ! OTHERWISE (* nothing *) \f tsvaclst 81.01.19. 16.20. page 56 39470 1933 592 ! ! END (* send buffer *); 39480 1934 593 ! ! 39490 1935 594 ! ! IF input <> nothing THEN 39500 1936 595 ! ! IF NOT nil(mess_ref) THEN 39510 1937 596 ! ! BEGIN (* needless buffer , possible program error *) 39520 1938 597 ! ! ! (*q if test then testout(zout,"released : ",mess_ref^.u4); q*) 39530 1939 598 ! ! ! no_of_released:= (no_of_released MOD max_int) + 1; 39540 1940 599 ! ! ! return(mess_ref); 39550 1941 600 ! ! END; 39560 1942 601 ! ! 39570 1943 602 ! UNTIL false; 39580 1944 603 END. 39590 1945 39600 1946 \f tsvaclst 81.01.19. 16.20. page 57 0 153* 154* 155* 156* 166* 167* 189* 230* 258* 278* 279* 280* 281* 282* 283* 284* 285* 285* 285* 285* 285* 285* 285* 285* 285* 285* 285* 285* 285* 285* 285* 445 502* 509* 510* 511* 604 606 607 722* 723* 756 756 757 759 759 760 772 772 773 780 780 781 792 793 798 798 799 806 806 807 813 813 814 817 861 894 900: 1087 1087 1129 1129 1130 1132 1135 1139 1139 1157 1205 1206 1217 1217 1218 1295 1330 1334 1389 1389 1389 1389 1392 1410 1463: 1476: 1481: 1694: 1771 1788 1804: 1873 1926 1 112* 155* 192* 193* 194* 195* 218* 248* 249* 278* 279* 280* 281* 282* 283* 284* 340 347 357 364 374 381 401 413 425 448 452 466 502* 574 600 623 631 634 731 751 756 759 772 780 791 798 806 813 850 863 884 886 900 901 901 914 915 947 954: 955 964: 967 985: 986 996 1038 1056: 1073 1081 1083 1088 1109 1119 1123 1129 1135: 1136 1143 1155 1158 1160 1187 1205 1205 1217 1317 1413 1447: 1463: 1467: 1513: 1540 1551 1569 1580 1696: 1705 1714 1757 1811 1867 1879 1897 1939 2 68* 278* 278* 278* 278* 278* 278* 398 398 434 502* 858 887 919 956: 972 987: 1003 1048 1063: 1086 1125 1136: 1144 1144 1161 1161 1188 1452: 1463: 1471: 1476: 1485: 1489: 1515: 1532: 1626: 1630 1641 1651 1672 1683 1698: 1706 1715 1831: 1928 3 154* 248* 279* 279* 279* 279* 503* 632 894 896 920 957 965 989: 1070: 1088 1130 1135: 1138 1145 1145 1155 1162 1162 1462: 1518: 1700: 1707 1716 4 278* 279* 280* 281* 425: 503* 959 1078: 1136: 1138 1466: 1472: 1485: 1489: 1526: 1561: 1637: 1662 1702: 1708 1717 5 67* 112* 278* 279* 280* 503* 981 1099: 1132 1157 1298 1477: 1493: 1529: 1709 1711: 1718 1876 6 278* 278* 278* 278* 279* 279* 279* 279* 280* 280* 280* 283* 284* 504* 988 1087 1106: 1470: 1489: 1595: 1647: 7 279* 280* 281* 282* 283* 504* 510* 990 1115: 1621: 8 245* 280* 280* 280* 280* 280* 281* 282* 425: 1011 1170: 1475: 1489: 1658: 1726: 9 281* 281* 281* 281* 281* 282* 282* 282* 282* 282* 283* 283* 283* 283* 283* 283* 284* 284* 284* 284* 284* 284* 284* 1016 1177: 1480: 1754: 10 281* 283* 284* 608 1019 1184: 1484: 1489: 1668: 1704 1713 1761: 11 281* 282* 1026 1194: 1488: 1764: 12 281* 282* 1044 1201: 1489: 1492: 1679: 1780: 13 283* 1213: 1786: 14 283* 284* 950 999 1022 1041 1215: 1489: 1690: 1793: 15 166* 167* 279* 280* 281* 282* 722* 723* 1802: 16 284* 424 843 1433 1434 1856: 17 282* 283* 284* 1862: 18 278* 279* 280* 281* 282* 283* 284* 1864: 19 282* 610 1870: 31 156* 511* 255 153* 509* 256 1718 1000 1346 \f tsvaclst 81.01.19. 16.20. page 58 accepted 1205 1471 1541 1554 1570 1582 1624 1814 1825 1841 1847 action 201* 1505= 1511 active 122* 1328 1408: 1820 acttable 270* 1505 addr 170* 707 742= addr_code 346 360 adr_code 204* 887 919 1537 1733 1734 1738 1739 alarm 130* 880: 1250: 1463 1731: 1836 1919: alarmlabel 73* 74* 78* 83* 89* 94* 101* 106* 111* 408 515* 520* 1521 1623 1731 1898 1913 alarmnetaddr 90* 95* 96* 97* 164* 170* 208* 252* 336* 353* 521* 720* 726* 1389 alfa 251* alloc 1348 1363 1366 1376 al_env_version <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 1345 area_from_lam <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 248* 1108= 1117= 1123 1125 1130 1138 1144 1145 1161 1162 1187= area_pointer 257* 631 636 884= 914= 953 963 984 1073= 1073 1081= 1108 1109= 1109 1117 1119= 1188= 1811= area_to_lam 247* 636 886= 887= 894= 896= 900= 901= 915= 919= 920= 1083 1086 1088 1088 1143= 1144= 1145= 1155= 1158= 1160= 1161= 1162= as 296: 314: 319: 325: 392: 408: 564: 576: 584: 596: 626: 644: 683: 697: 854: 872: 890: 917: 1268: 1355: 1373: 1452: 1521: 1533: 1562: 1623: 1627: 1638: 1648: 1659: 1669: 1680: 1691: 1731: 1736: 1805: 1822: 1833: 1898: 1913: at 95* 1837 1846 atadr 336* 343 353* 363= atadrtable 192* 343 346 360 363 1539= 1539 1553= attstable 193* 377 380 1568= 1568 1581= atts_table_index <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 253* at_addr 343 363 1537 at_addr_e 102* 192* at_addr_l 1549 at_addr_limit <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 410 at_control 1358 at_table_addr <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 252* 1086 1088 1125 1129 1139 at_tim_excess <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 757 at_ts_e 107* 193* at_ts_l 193* 1578 below_serve_limit <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 260* 769 774= 795 800= \f tsvaclst 81.01.19. 16.20. page 59 below_stoppoll_limit <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 261* 777 782= 803 808= boo 263* 533* 582= 641= 869= 1086= book 307* 1772 1783 1789 1799 bookup_ref 210* 294 295 296: 302 303 312 313 314: 321 322 323 325: 1363 1364 book_pool 220* 1363 book_req 312 1379 boolean 176* 200* 263* 336* 338* 353* 355* 370* 372* 442* 532* 533* buf 296: 298 299 300 314: 316 317 319: 320 325: 327 328 392: 393 408: 409 683: 685 693 697: 699 707 708 709 890: 892 896 899 917: 920 1355: 1356 1373: 1374 1452: 1453 1455 1521: 1522 1533: 1534 1562: 1563 1623: 1624 1627: 1628 1638: 1639 1648: 1649 1659: 1660 1669: 1670 1680: 1681 1691: 1692 1731: 1733 1734 1736: 1738 1739 1740 1805: 1806 1833: 1834 1898: 1900 1900 1901 1913: 1914 buftype 177* 390= 412= 418 438= 451= 465= 845 1173= 1180= 1197= 1208= 1236 1258= 1319= 1403= 1444= 1447= 1454= 1456= 1463= 1467= 1472= 1476= 1477= 1481= 1485= 1489= 1493= 1499= 1505 1597 1618= 1729 1750 1758= 1767= 1836= 1849= 1851 1868= 1890 buf_type 129* 177* 267* build_an_lbuf <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 673* 1315 build_a_letter_telegram <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 621* 906 923 1074 1147 1164 build_a_poll_telegram <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 591* 1094 1102 1111 1189 1243 build_line_dep_telegram <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 653* 1058 build_same_telegram <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 560* 665 1066 build_serial_changed_telegram <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 571* 667 1220 byte 61* 116* 117* 165* 168* 169* 197* 204* 248* 250* 336* 353* 387* 405* 516* 522* 523* 529* 721* 724* 725* call 760 773 781 calltest 537* 566 616 639 866 canno 61* 562 573 594 624 851 1346 1352 cbuf 1822: 1823 check 1289 check5 582 641 869 1289 ch_format 115* 1355 clock 137* 438 1237: 1447 1598: 1742: clock_ref 211* 1366 1367 1373: 1600= 1818 1822: 1824 cntl_inf 116* 1358= code 336* 346= 353* 360 col 268* 270* \f tsvaclst 81.01.19. 16.20. page 60 com_pool 57* 436 con_lam_time 1359 count 299= 316= create_at_ch 1351 cur_vcm 206* 1390= 1519 1522 1664 data 74* 79* 90* 112* 395= 502* 945: 983: 1013: 1035: 1632= 1633 1643= 1653= 1654 1664= 1674= 1675 1685= 1686 1705= 1706= 1707= 1708= 1709= 1714= 1715= 1716= 1717= 1718= 1738 dc 97* 1840 1843 dc_address 59* 1391 delay_req 1369 demand_lbuf 717* 756 759 772 780 798 806 813 1087 1129 1138 1205 1217 dta1 168* 693 708 740= dta2 169* 709 741= dummy_route 1443: d_ack 503* 952: 994: 1014: 1037: d_addr 726* 742 d_dta1 724* 740 d_dta2 725* 741 d_kind 718* 734 d_noob 719* 735 d_opco 721* 737 d_reci 720* 736 d_resu 723* 739 d_upda 722* 738 empty 142* 1258 1444 1924: entry 102* 107* 1537 1553 1566 1581 error 387* 399 405* 416 418 error_count 84* 1826 false 341 358 375 456 532* 761 774 782 1152: 1289 1695 1699 1943 fault_at_line <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 747* 1059 1065 1179 1196 fix 73* 78* 83* 89* 94* 101* 106* 111* 395 396 397 398 399 920 1535 1541 1544 1547 1554 1557 1560 1564 1570 1573 1576 1582 1585 1588 1630 1631 1634 1641 1642 1644 1651 1652 1655 1662 1663 1665 1672 1673 1676 1683 1684 1687 1693 1704 1713 1720 1739 1740 1807 1814 1816 1825 1828 1829 1837 1839 1839 1840 1841 1843 1845 1845 1846 1847 fix_incr_on_err <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 238* 764 765 fix_label 515* 520* 685 699 892 899 found 200* 338* 341= 342 345= 348 355* 358= 359 362= 365 372* 375= 376 379= 382 1423= 1728= 1733= 1734 1738= 1739 1745 free 504* 971: 1002: 1025: 1047: 1291 1297 fromlam_ref 214* 1408 1409 1416 1417 1863= \f tsvaclst 81.01.19. 16.20. page 61 from_check 511* from_data 509* 1271 from_lam_driver <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 934* 1306 from_listen_ref <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 146* 1335 1421: 1859 1874 from_opcode 510* 1270 from_sem 145* 1385 1406: 1424 1426 from_telegram_type <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 508* 1268 func 198* 843 1433= 1461 func_grp 199* generate 582 641 869 get_adr_code 336* 348= 1537 1733 1738 get_atts_index <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 370* 382= 1566 get_listen_buf <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 442* 454= 456= 1423 1601 1769 get_net_addr 353* 365= 1086 1125 h10 391 1143 1160 h2 1087 h30 1084 h31 756 759 813 1084 h32 1084: 1217 h34 772 798 h35 780 806 h40 1128 1154 h41 898 h65 1138 1158 h80 860 h84 1128 1154 h85 898 hc1 1371 hc2 1381 hc3 313 hc4 295 hc5 450 hlp 936* 1123= 1128 1128 1129 1132 1132 1134 1154 1154 1155 1157 1157 i 936* 1135= 1136= 1138 incname 1344 index 232* 298= 298 327= 327 370* 380= 380 input 180* 1335= 1385= 1405 1424= 1426= 1717 1859= 1874= 1935 input_type 145* 180* insert_code 1547 1576 1633: 1654: 1675: 1686: \f tsvaclst 81.01.19. 16.20. page 62 integer 60* 79* 84* 85* 112* 163* 189* 203* 218* 230* 232* 235* 236* 237* 238* 239* 245* 253* 258* 267* 291* 307* 370* 528* 531* 719* 936* intg_aux 202* 1566 keep_the_opcode <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 250* 843= 860 886 898 898 900 901 915 1205 keep_the_telegram <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 246* 565 578 585= 613= 645= 873= kind 162* 681 734= label_size 398 531* 735 893 1630 1641 1651 1662 1672 1683 1704 1713 lam 140* 1261: 1499 1606: lamsem 55* 877 908 925 1060 1067 1075 1096 1103 1112 1148 1165 1191 1221 1245 1361 lamspeak 475* 1748 lamspeak_state <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 182* 875= 907= 924= 939 1095= 1120= 1146= 1163= 1174= 1181= 1190= 1198= 1209= 1244= 1327 1388= 1716 1812= lamtest 262* 566 616 639 866 1292 1699= 1701= lam_need_buf 124* 1333 lam_pool 218* 1348 lam_route 1353 1498: lam_talk 123* 1416: 1747 lam_timeout 532* 755 761= 1300= lbuf_info 249* 732 1315 lbuf_kind_type <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 159* 162* 718* lbuf_needed 258* 731= 731 732 1315 1317= 1317 1330 lbuf_record 161* 249* 675* letterfromvc 182* 977: 1190 lettertovc 182* 907 924 941: 1146 1163 line 181* 785= 819= 1058 1384= line_error_count <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 226* 764 765= 765 767= 769 777 791= 791 792 793= 795 803 1632 1633= 1826= line_was 655* 664 listen 131* 451 1310: 1319 1493 1910: listen_ref 209* 447 464 lock 296: 314: 319: 325: 392: 408: 564: 576: 584: 596: 626: 644: 683: 697: 854: 872: 890: 917: 1268: 1355: 1373: 1452: 1521: 1533: 1562: 1623: 1627: 1638: 1648: 1659: 1669: 1680: 1691: 1731: 1736: 1805: 1822: 1833: 1898: 1913: log 159* 696: 1087 1138 log_addr 521* 707= log_alarm 523* 709= log_opc 522* 708= ltime 138* 1454 1604: \f tsvaclst 81.01.19. 16.20. page 63 macro 1391= macroaddr 59* 370* 1389 mask_atadr 100* 1533 mask_atts 105* 1562 mask_atvcdc 93* 1833 mask_log_lbuf <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 519* 697 mask_norm_lbuf <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 514* 683 890 mask_poll 82* 1805 mask_service 77* 1627 1638 1648 1669 1680 mask_test 110* 1691 mask_unknown 72* 392 mask_vcm 88* 917 1659 1736 max_info_bytes <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 68* max_int 401 425 750 764 767 1867 1939 max_lbuf_needed <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 67* 249* max_succ_errors <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 237* 753 811 1685 1686= max_succ_lin_err <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 237* messem 51* 1348 1366 1376 1415 1418 1419 mess_ref 215* 391 392: 408: 413 413 424 428 433 436 437 447 448 449 450 464 890: 917: 1266 1315 1348 1349 1355: 1361 1409= 1412 1415 1417= 1418 1419 1432 1433 1434 1452: 1521: 1533: 1562: 1600 1602 1605 1608 1609 1623: 1627: 1638: 1648: 1659: 1669: 1680: 1691: 1731: 1736: 1756 1766 1771 1782 1788 1796 1805: 1833: 1863 1866 1878 1896 1897 1897 1898: 1907 1912 1913: 1921 1926 1927 1930 1936 1940 micadr 60* 397 415 1346 1901 1914 micro 397= 410 415= 1392= 1901= 1914= module_not_ready <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 1516 module_passive <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 1524 nak 504* 970: 1001: 1024: 1046: netc_route 449 1460: next 203* 340= 342 343 346 347= 347 357= 359 360 363 364= 364 374= 376 377 380 381= 381 1539 1568 noatadr 186* 342 359 1539 1540= 1540 1549 1551= 1551 1553 noatts 187* 376 1568 1569= 1569 1578 1580= 1580 1581 nok 173* 785 noob 163* 687 701 735= \f tsvaclst 81.01.19. 16.20. page 64 norm 159* 682: 756 759 772 780 798 806 813 1129 1205 1217 norm_inf 516* 693= 896 nothing 147* 1426: 1935 nottele 182* 1120 1174 1181 1198 1209 1327 1388 1812 not_found 1544 1573 1740 not_ready 120* 1386 1387 1408 1610 novce 189* novcm 188* no_of_by 398= 687= 701= 892 1630= 1641= 1651= 1662= 1672= 1683= 1704= 1713= no_of_listen 227* 434 445 452= 452 466= 466 1334 1705 1873 1928 no_of_queue 225* 1410 1413= 1413 1709 1757= 1757 1876 1879= 1879 no_of_released <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 229* 1707 1939= 1939 no_of_returned <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 228* 1706 1867= 1867 no_of_unknown <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 230* 401= 401 1708 no_room 1557 1585 no_vcc_tim 219* no_vcc_upd 220* numb_of_bytes <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 531* 892= 893 object 232* 300= 300 317= 320= 328= 328 1374= 1453 1455 1823= ok 173* 664 819 1384 oknok_type 173* 181* 655* ok_at_line 789* 1072 1080 1101 1110 1118 1172 1186 1204 1219 old_state 179* 1387= 1715 1768= 1860 opco 165* 679 689 703 737= operate 136* 1481 1891: opr 502* 946: 993: 1018: 1036: opsem 49* 1344 op_code 689= 703= 1734= 1739= ord 1714 1715 1716 1717 1797 own 1344 own_dc 205* 396 756 757 759 760 772 773 780 781 798 799 806 807 813 814 1087 1130 1138 1205 1206 1217 1218 1391 1392 pack_counter 223* 425= 425 1643 passive 121* 1613 1798 1809 1813 1818 permiss 143* 912: 1249: 1472 1736: 1750 1894: polling 182* 1007: 1095 1244 poll_delay 239* 1374 1718 1821= 1823 poll_delay_time <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 239* poll_rate 85* 1821 \f tsvaclst 81.01.19. 16.20. page 65 pool 218* 219* 220* pool_empty 1880 pop 447 process 48* push 321 464 p_ack 502* 944: 980: 1010: 1034: queuesem 52* 1412 1756 1878 r 537* 560* 562 564: 566 571* 573 576: 582 584: 591* 594 596: 616 621* 624 626: 639 641 644: 654* 665 667 674* 679 683: 697: read_code 1632: 1643: 1653: 1664: 1674: 1685: rec 396= 414= 688= 702= 1522= 1839 1840= 1845 1846= 1900= recall 799 807 814 reci 164* 688 702 736= reference 215* 537* 560* 571* 591* 621* 654* 674* rejected 1457 1816 1828 1883 remove_code 1535 1564 report 133* 881: 1251: 1467 1477 1730: 1917: restart_clock <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 431* 1742 1762 1872 resu 167* 691 705 739= result 399= 416= 691= 705= 899 1541= 1544= 1554= 1557= 1560= 1570= 1573= 1582= 1585= 1588= 1624= 1634= 1644= 1655= 1665= 1676= 1687= 1720= 1740= 1814= 1816= 1825= 1828= 1829= 1841= 1847= return 1602 1866 1930 1940 return_buf 405* 1471 1516 1524 row 267* 268* 278* 279* 280* 281* 282* 283* 284* 285* rute 197* 1432= 1442 s 1348 1366 1376 1756 save_listen_buf <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 288* 437 461* 1527 1858 1929 semaphore 216* sempointer 49* 57* send 397 410 414 415 1733 1837 1839= 1843 1845= 1900 1901 1914 sender_error 1751 1851 send_to_vch 422* 1903 1908 1915 1922 sensesem 436 serial_no 255* 574= 574 579 600= 600 605 607 623= 623 635 850= 850 859 serve_limit 235* 769 795 1653 1654= service 134* 1489 1893: service_lim 235* signal 302 322 428 433 877 908 925 1060 1067 1075 1096 1103 1112 1148 1165 1191 1221 1245 1361 1756 1824 slave_data 529* 1108 1117 1187 1206 1218 1271= slave_opcode 528* 942 978 1008 1032 1270= 1291= 1292 1297= \f tsvaclst 81.01.19. 16.20. page 66 speak_action 245* 947= 950= 955= 957= 959= 965= 967= 972= 981= 986= 988= 990= 996= 999= 1003= 1011= 1016= 1019= 1022= 1026= 1038= 1041= 1044= 1048= 1054 start_code 1817: state_type 120* 178* 179* 268* status 503* 949: 998: 1021: 1040: stime 139* 1456 1605: stoppoll_limit <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 236* 777 803 1674 1675= stop_code 1808: stop_poll 127* stop_poll_lim <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 236* succ_line_errors <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 256* 750 751= 751 753 811 817= table 132* 1485 1892: telegram 564: 565= 576: 578= 579 584: 585 596: 601 613 626: 629 644: 645 854: 856 872: 873 1268: 1270 1271 teletxt 251* test 176* 1695= 1697= testat 135* 847: 1252: 1476 1918: testi 182* 875 1031: testopen 1344 testout 1292 1345 1346 1797 ticks 291* 299 307* 316 317 320 timeoutsem 56* 302 322 433 1824 timeout_answer <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 216* 303 323 1363 timeout_ref 212* 310 319: 321 1376 1377 1605= 1766= 1782= 1796= timers 219* 319 1373 1452 1822 time_inf 117* 1359= tim_pool 219* 1366 1376 tim_route 1370 1445: tim_route1 1364 1380 1450: tolam_ref 213* 851 854: 866 869 872: 877 906 908 923 925 1058 1060 1066 1067 1074 1075 1094 1096 1102 1103 1111 1112 1147 1148 1164 1165 1189 1191 1220 1221 1243 1245 1266= 1268: 1289 1295 1298 1609= 1818 to_check 156* 608= 610= to_data 153* 606= 636= 861= 863= to_lam_driver <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 831* 1257 to_opcode 154* 604= 632= 634= 858= to_serial_no 155* 579= 605= 635= 859= to_telegram_type <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 152* 246* 564 576 584 596 626 644 854 872 \f tsvaclst 81.01.19. 16.20. page 67 trans_err_rate <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 238* trans_ok 224* true 176* 263* 345 362 379 454 533* 800 808 1126: 1300 1697 1701 1728 tsadr 370* 377 ts_addr 377 1566 ts_pointer 52* types 199* 843 1434= 1446 1451 1462 1466 1470 1475 1480 1484 1488 1492 1531 1625 1803 t_ack 503* 962: 995: 1015: 1043: u1 294= 312= 1351= 1369= 1379= 1608= u2 448= 562= 573= 594= 624= 851= 1295 1298 1352= 1771= 1788= 1926= u3 449= 1353= 1364= 1370= 1380= 1432 1896= 1907= 1912= 1921= 1927= u4 295= 313= 391= 413= 413 424 450= 679= 1371= 1381= 1433 1434 1897= 1897 unknown 129* 390 412 418 1849 1851 1905: unknown_buf 387* 418 1448 1457 1458 1464 1468 1473 1478 1482 1486 1490 1494 1496 1500 1751 1851 1880 1883 unknown_opcode <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 1448 1458 1464 1468 1473 1478 1482 1486 1490 1494 1496 unknown_route <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 1500 upda 166* 690 704 738= update 291* 690= 704= 920 1535 1547 1564 1576 1631 1642 1652 1663 1673 1684 1693 1807 updates 220* 296 314 325 update_error 1560 1588 1634 1644 1655 1665 1676 1687 1720 1829 update_req 294 used 141* 465 1173 1180 1197 1208 1403 1618 1758 1767 1868 vc 96* vcatc 48* vcatc_need_buf <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 125* 1776 vcatc_state 178* 1328= 1333= 1386= 1407 1505 1610 1613= 1714 1747= 1768 1773= 1776= 1790= 1797 1798= 1809 1813= 1818 1820= 1860= vca_route 1896 1907 1921 1927 vca_route1 1912 vcc_vch_ltime <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 1453 1783 1799 vcc_vch_stime <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 1455 1772 1789 vcetable 195* vce_e 195* vce_l 195* vchsem 54* 428 \f tsvaclst 81.01.19. 16.20. page 68 vcmat_e 194* vcmat_l 194* vcmtable 194* vc_addr_l 192* version 66* 1345 w 1412 1415 1418 1419 1878 wait 303 323 1412 1415 1418 1419 1878 wait_shorttime <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 126* 1773 1790 work 208* write_read_at <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 1608 x 675* 679 681 687 688 689 690 691 693 701 702 703 704 705 707 708 709 zero_addr 207* 1389= 1390 1519 zone 241* zout 241* 1292 1344 1345 1346 1797 \f tsvaclst 81.01.19. 16.20. page 69 AND 11 ARRAY 9 BEGIN 146 CASE 46 CONST 3 DIV 2 DO 67 ELSE 38 END 206 FORWARD 1 FUNCTION 4 IF 70 MOD 6 NIL 7 NOT 12 OF 58 OR 3 OTHERWISE 35 PACKED 5 PROCEDURE 21 RECORD 14 REPEAT 1 THEN 70 TYPE 3 UNTIL 1 VAR 19 WHILE 4 WITH 23 \f srs9 1981.01.19 16.22 tsvac program 81.01.19. 16.22. pascal80 version 1980.12.16 name headline beginline endline appetite(words) update 291 294 305 : 7 book 307 311 331 : 7 get_adr_code 336 340 349 : 8 get_net_addr 353 357 366 : 8 get_atts_ind 370 374 383 : 8 unknown_buf 387 390 402 : 9 return_buf 405 408 419 : 13 send_to_vch 422 425 429 : 4 restart_cloc 431 433 440 : 9 get_listen_b 442 446 457 : 4 save_listen_ 461 464 468 : 4 calltest 533 557 557 : 2 build_same_t 560 562 568 : 12 build_serial 571 573 587 : 15 build_a_poll 591 594 618 : 12 build_a_lett 621 623 647 : 15 build_line_d 655 665 669 : 10 build_an_lbu 675 679 713 : 11 demand_lbuf 726 731 745 : 7 fault_at_lin 747 751 787 : 19 ok_at_line 789 791 828 : 19 to_lam_drive 831 843 931 : 15 from_lam_dri 934 941 1226 : 24 lamspeak 475 1237 1339 : 25 vcatc 65 1344 1944 : 311 code: 4 . 656 = 12656 bytes end of PASCAL80 compilation end blocksread = 54 ▶EOF◀