|
DataMuseum.dkPresents historical artifacts from the history of: RC3500 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC3500 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 65280 (0xff00) Types: TextFileVerbose Names: »tsvaslst«
└─⟦a41ae585a⟧ Bits:30001842 SW-save af projekt 1000, Alarm-system └─⟦72244f0ef⟧ └─⟦this⟧ »tsvaslst«
\f tsvaslst 81.06.15. 15.00. page 1 10 1 vagt_env; 20 2 30 3 (*----------------------------------------------------*) 40 4 (* *) 50 5 (* vagt for demo system *) 60 6 (* *) 70 7 (*----------------------------------------------------*) 80 8 (* 90 9 100 10 function. 110 11 --------- 120 12 this program acts as the lam_driver for the vc_connector. 130 13 ( u1 = 8 or u1 = 11 ) 140 14 150 15 160 16 requests from other programs. 170 17 ------------------------------ 180 18 190 19 these must obey the at-protocol. correct telegrams are printed 200 20 on tty in alarm format, and answers are send. 210 21 220 22 230 23 output 240 24 ------ 250 25 alarm <clock> <text> <oper> <adr> <info> alarm received. 260 26 ready <clock> klar connected to ts. 270 27 timeout *<bel> disconnected. 280 28 empty <clock> command is send. 290 29 error <clock> <text> ?? command rejected. 300 30 310 31 <clock> ::= hh.mm.ss 320 32 <text> ::= name of alarm 330 33 <oper> ::= ff.nn opkode of alarm 340 34 <adr> ::= sending at. 0..255 350 35 <info> ::= information 0..255 360 36 370 37 380 38 input 390 39 ----- 400 40 <inputline> ::= <command>: <adr> <info> <cr> 410 41 <command> ::= styr / test / tid: / star / stop / -sta / -sto / 420 42 vagt / flyt / -fly / modt / -mod / 430 43 nlat / -nla / nlvc / -nlv / 440 44 <adr> ::= 0..255 receiving at 450 45 <info> ::= 0..255 information 460 46 in tid command: adr = hh and info = mm \f tsvaslst 81.06.15. 15.00. page 2 470 47 *) 480 48 \f tsvaslst 81.06.15. 15.00. page 3 1010 49 (*------------------------ constants -------------------------------*) 1020 50 1030 51 CONST 1040 52 version = "vers 3.10 /"; 1050 53 inc_size = 355; 1060 54 1070 55 ok = 0; 1080 56 ille = 4; 1090 57 p_ack = 0; (* in answers *) 1100 58 vc_data= 1; 1110 59 vc_opr = 2; 1120 60 status = 3; 1130 61 d_ack = 4; 1140 62 t_ack = 5; 1150 63 vc_nak = 6; 1160 64 test_ok = 6; 1170 65 test_error= 21; 1180 66 maxtime = 2; (* maxtime*delay1 seconds between poll *) 1190 67 pagesize = 44; 1200 68 ttylength = 80; (* line length in tty buffer *) 1210 69 last_text_no = 27; (* last tekst number *) 1220 70 last_com_no = 18; (* last command no +1 *) 1230 71 headn = 4; 1240 72 no_reads = 1; 1250 73 no_writes = 3; 1260 74 delay1 = 10; 1270 75 delay2 = 10; (* 1024 m seconds *) 1280 76 forever = false; 1290 77 \f tsvaslst 81.06.15. 15.00. page 4 2010 78 (*---------------------------- types -------------------------------*) 2020 79 2030 80 TYPE 2040 81 command = ARRAY (1..4) OF char; 2050 82 commands = ARRAY (1..last_com_no) OF command; 2060 83 opcodes = ARRAY (1..last_com_no) OF byte; 2070 84 funktion = ( poll, data, test_i, opr ); 2080 85 replycode = 0..7; 2090 86 replycodes = ARRAY (0..4) OF replycode; 2100 87 errortext = ARRAY (1..3) OF alfa; 2110 88 alarmtext = RECORD no: byte; tx: alfa END; 2120 89 textarray = ARRAY (1..last_text_no) OF alarmtext; 2130 90 headarray = ARRAY (1..headn) OF alfa; 2140 91 statusarray = ARRAY (0..7) OF alfa; 2150 92 2160 93 createshape = PACKED RECORD 2170 94 ! contr, timer : byte 2180 95 END; 2190 96 2200 97 telegram = PACKED RECORD (* from vccon *) 2210 98 ! inf: byte; 2220 99 ! fnc: funktion; 2230 100 ! lnr: 0..1; 2240 101 ! cbits: 0..31 2250 102 END; 2260 103 2270 104 respons = PACKED RECORD (* to vccon *) 2280 105 ! info: byte; 2290 106 ! opko: replycode; 2300 107 ! cbits: 0..31 2310 108 END; 2320 109 2330 110 filebuffer = RECORD 2340 111 ! first, last, nextfree : integer; 2350 112 ! text : ARRAY ( 1..ttylength) OF char 2360 113 END; 2370 114 2380 115 filezone = RECORD 2390 116 ! driver, answer_sem, 2400 117 ! free: integer; 2410 118 ! cur : reference; 2420 119 ! u1val, u2val : byte; 2430 120 ! next, top : integer 2440 121 END; 2450 122 \f tsvaslst 81.06.15. 15.00. page 5 3010 123 CONST 3020 124 reply = replycodes ( p_ack, vc_data, vc_data, vc_opr, vc_nak); 3030 125 3040 126 whatx = errortext ("kommandofejl","atnr fejl ","info fejl "); 3050 127 3060 128 empty = " > "; 3070 129 klar = "klar "; 3080 130 head = headarray ( 3090 131 " klokken ","tekst "," opkode atn","r info "); 3100 132 3110 133 tekst = textarray( 3120 134 alarmtext ( #h01, "log fra aVC "), 3130 135 alarmtext ( #h10, "returneret "), 3140 136 alarmtext ( #h12, "afvisning!!!"), 3150 137 alarmtext ( #h20, "knudeudfald "), 3160 138 alarmtext ( #h21, "knuderetabl."), 3170 139 alarmtext ( #h28, "AT udfald "), 3180 140 alarmtext ( #h29, "AT retabl. "), 3190 141 alarmtext ( #h30, "au-alarm "), 3200 142 alarmtext ( #h31, "liniealarm "), 3210 143 alarmtext ( #h32, "statusalarm "), 3220 144 alarmtext ( #h41, "styr udf|rt "), 3230 145 alarmtext ( #h42, "styr afvist "), 3240 146 alarmtext ( #h50, "flytning? "), 3250 147 alarmtext ( #h53, "flytning ok "), 3260 148 alarmtext ( #h54, "returnering?"), 3270 149 alarmtext ( #h57, "vagt retur "), 3280 150 alarmtext ( #h62, "AT er ok "), 3290 151 alarmtext ( #h64, "start AT? "), 3300 152 alarmtext ( #h65, "stop AT? "), 3310 153 alarmtext ( #h66, "nedl{g AT? "), 3320 154 alarmtext ( #h72, "nedl{g VC? "), 3330 155 alarmtext ( #h85, "test udf|rt "), 3340 156 alarmtext ( #h86, "test afvist "), 3350 157 alarmtext ( #h98, "meddelelse "), 3360 158 alarmtext ( #hf0, "AT ukendt "), 3370 159 alarmtext ( #hf1, "VC ukendt "), 3380 160 alarmtext ( #hff, "ukendt alarm") ); 3390 161 \f tsvaslst 81.06.15. 15.00. page 6 4010 162 statustxt = statusarray( 4020 163 ": afmelding ", 4030 164 ": timeout ", 4040 165 ": hs fejl ", 4050 166 ": au fejl ", 4060 167 ": serif fejl", 4070 168 ": genstart ", 4080 169 ": batteri ud", 4090 170 ": batteri "); 4100 171 4110 172 menu = commands 4120 173 ("styr","test","tid:","star", 4130 174 "stop","-sta","-sto", 4140 175 "vagt","flyt","-fly","modt","-mod", 4150 176 "nlat","-nla","nlvc","-nlv","medd", 4160 177 " "); 4170 178 4180 179 opkode = opcodes 4190 180 ( #h40, #h84, #hc4, #h01, 4200 181 #h02, #h03, #h04, 4210 182 #h15, #h16, #h17, #h18, #h19, 4220 183 #h05, #h06, #h07, #h08, #h20, 4230 184 0 ); 4240 185 . 4250 186 \f tsvaslst 81.06.15. 15.00. page 7 5010 187 PROCESS atvagtsim( 5020 188 op_sem : sempointer; 5030 189 VAR 5040 190 sem : !ts_pointer_vector (* ts semaphores *) 5050 191 ); 5060 192 5070 193 5080 194 TYPE 5090 195 descriptor_ix = 1..vc_l; 5100 196 5110 197 VAR 5120 198 inc_name : alfa; 5130 199 desc_ix : descriptor_ix := 1; 5140 200 no_of_inc : 0..vc_l := 0; 5150 201 result : result_range := accepted; 5160 202 5170 203 ch_desc : ARRAY( descriptor_ix ) OF 5180 204 RECORD 5190 205 ! chann : byte; 5200 206 ! main : integer; 5210 207 ! shad : shadow 5220 208 END; 5230 209 5240 210 msg : reference; 5250 211 opzone : zone; 5260 212 \f tsvaslst 81.06.15. 15.00. page 8 6010 213 PROCESS vagt_sim( op_sem: sempointer; 6020 214 VAR 6030 215 sem: !ts_pointer_vector; 6040 216 main, vagt_int1, vagt_int2, vagt_int3, vagt_int4, lam_sem_no: !integer ); 6050 217 6060 218 6070 219 VAR 6080 220 l, vl : 0..1; (* l|benumre *) 6090 221 lamstate, 6100 222 oldstate, 6110 223 austate, 6120 224 databits : byte:= 0; 6130 225 func: funktion; 6140 226 lastanswer, 6150 227 answer: respons := respons ( 0, 0, 10 ); 6160 228 sample, 6170 229 newdata, 6180 230 timeout, 6190 231 h : integer := 0; 6200 232 dummy, 6210 233 line_ready : boolean := false; 6220 234 letter, (* message from keyboard *) 6230 235 note : ARRAY (0..4) OF byte; (* message from vccon *) 6240 236 msg: reference; 6250 237 6260 238 writepool: pool no_writes OF filebuffer; 6270 239 readpool : pool no_reads OF filebuffer; 6280 240 timerpool : pool 1; 6290 241 6300 242 opzone : zone; 6310 243 6320 244 portno: byte; (* lam channel *) 6330 245 linecount : integer:= 0; 6340 246 6350 247 tty : filezone := filezone ( ?, ?, ?, ?, 18, 1, 1, ttylength ); 6360 248 kb : filezone := filezone ( ?, ?, ?, ?, 17, 1, 1, ttylength ); 6370 249 6380 250 clockpool : pool 1 OF ts_time; (* to get time *) 6390 251 clock_msg : reference; 6400 252 \f tsvaslst 81.06.15. 15.00. page 9 7010 253 PROCEDURE open_file ( VAR f: filezone; driv, answ, vacant: integer; 7020 254 bufs : integer; VAR reso : pool 1; v1, v2: byte ); 7030 255 BEGIN 7040 256 1 ! WITH f DO 7050 257 2 ! BEGIN 7060 258 3 ! ! driver:= driv; 7070 259 4 ! ! answer_sem:= answ; 7080 260 5 ! ! free:= vacant; 7090 261 6 ! ! u1val:= v1; 7100 262 7 ! ! u2val:= v2; 7110 263 8 ! ! WHILE bufs > 0 DO 7120 264 9 ! ! BEGIN 7130 265 10 ! ! ! alloc ( cur, reso, sem(answer_sem).s^); 7140 266 11 ! ! ! cur^.u1:= u1val; 7150 267 12 ! ! ! cur^.u2:= 0; 7160 268 13 ! ! ! signal ( cur, sem(free).s^ ); 7170 269 14 ! ! ! bufs:= bufs-1 7180 270 15 ! ! END; 7190 271 16 ! END 7200 272 17 END; 7210 273 7220 274 7230 275 7240 276 PROCEDURE outblock ( VAR f: filezone); 7250 277 BEGIN 7260 278 1 ! WITH f DO 7270 279 2 ! BEGIN 7280 280 3 ! ! (*q testout ( opzone, "outblock ", next-1 ); q*) 7290 281 4 ! ! LOCK cur AS buf: filebuffer DO 7300 282 5 ! ! BEGIN 7310 283 6 ! ! ! buf.first:= 1; 7320 284 7 ! ! ! buf.last:= next-1; 7330 285 8 ! ! END; 7340 286 9 ! ! cur^.u1:= u1val; 7350 287 10 ! ! cur^.u2:= u2val; 7360 288 11 ! ! signal ( cur, sem(driver).s^) 7370 289 12 ! END 7380 290 13 END; 7390 291 \f tsvaslst 81.06.15. 15.00. page 10 8010 292 PROCEDURE file_error ( VAR f: filezone); 8020 293 BEGIN 8030 294 1 ! lamstate:= f.cur^.u2; 8040 295 2 ! IF (lamstate<>0) AND (lamstate<>5) THEN 8050 296 3 ! austate:= lamstate; 8060 297 4 END; 8070 298 8080 299 8090 300 8100 301 PROCEDURE outchar ( VAR f: filezone; character: char ); 8110 302 BEGIN 8120 303 1 ! WITH f DO 8130 304 2 ! BEGIN 8140 305 3 ! ! IF nil ( cur ) THEN 8150 306 4 ! ! BEGIN 8160 307 5 ! ! ! wait ( cur, sem(answer_sem).w^); 8170 308 6 ! ! ! lamstate:= 0; 8180 309 7 ! ! ! IF cur^.u2 <> ok THEN file_error ( f) ELSE austate:= 0; 8190 310 8 ! ! ! next:= 1 8200 311 9 ! ! END; 8210 312 10 ! ! LOCK cur AS buf: filebuffer DO buf.text(next):= character; 8220 313 11 ! ! next:= next+1; 8230 314 12 ! ! IF next > top THEN outblock ( f); 8240 315 13 ! END; 8250 316 14 END; 8260 317 8270 318 8280 319 8290 320 PROCEDURE print_head ( j: integer); 8300 321 FORWARD; 8310 322 8320 323 PROCEDURE outnewline ( VAR f: filezone ); 8330 324 BEGIN 8340 325 1 ! IF linecount > pagesize THEN print_head ( 14); 8350 326 2 ! outchar ( f, nl); 8360 327 3 ! outchar ( f, cr); 8370 328 4 ! linecount := linecount + 1; 8380 329 5 END; 8390 330 \f tsvaslst 81.06.15. 15.00. page 11 9010 331 9020 332 PROCEDURE outinteger ( VAR f: filezone; bin: integer ); 9030 333 BEGIN 9040 334 1 END; 9050 335 9060 336 9070 337 9080 338 PROCEDURE outalfa ( VAR f: filezone; text: alfa); 9090 339 VAR i: integer; 9100 340 BEGIN 9110 341 1 ! FOR i:= 1 TO alfalength DO outchar ( f, text(i)); 9120 342 2 END; 9130 343 9140 344 9150 345 PROCEDURE outfill ( VAR f: filezone; filler: char; rep: integer ); 9160 346 BEGIN 9170 347 1 ! WHILE rep > 0 DO 9180 348 2 ! BEGIN 9190 349 3 ! ! outchar ( f, filler); 9200 350 4 ! ! rep:= rep-1 9210 351 5 ! END; 9220 352 6 END; 9230 353 9240 354 PROCEDURE inblock ( VAR f: filezone; VAR res: reference ); 9250 355 (* called when res is an read_answer *) 9260 356 BEGIN 9270 357 1 ! WITH f DO 9280 358 2 ! BEGIN 9290 359 3 ! ! IF NOT nil ( cur) THEN signal ( cur, sem(free).s^); 9300 360 4 ! ! cur :=: res; 9310 361 5 ! ! lamstate:= 0; 9320 362 6 ! ! IF cur^.u2 <> ok THEN file_error ( f) ELSE austate:= 0; 9330 363 7 ! ! next:= 1 9340 364 8 ! END; 9350 365 9 END; 9360 366 9370 367 FUNCTION readchar ( VAR f: filezone): char; 9380 368 BEGIN 9390 369 1 ! WITH f DO 9400 370 2 ! LOCK cur AS buf: filebuffer DO WITH buf DO 9410 371 3 ! IF next < nextfree THEN 9420 372 4 ! BEGIN 9430 373 5 ! ! readchar:= text(next); next:= next+1 9440 374 6 ! END ELSE readchar:= cr 9450 375 7 END; 9460 376 \f tsvaslst 81.06.15. 15.00. page 12 10010 377 FUNCTION readinteger ( VAR f: filezone): integer; 10020 378 CONST 10030 379 digits = (. "0".."9" .); 10040 380 VAR 10050 381 t: char; 10060 382 i, v: integer:= 0; 10070 383 BEGIN 10080 384 1 ! WITH f DO 10090 385 2 ! BEGIN 10100 386 3 ! ! REPEAT 10110 387 4 ! ! ! t:= readchar ( f) 10120 388 5 ! ! UNTIL ( t IN digits ) OR (t = cr ); 10130 389 6 ! ! IF t = cr THEN readinteger := -1 ELSE 10140 390 7 ! ! BEGIN 10150 391 8 ! ! ! WHILE t IN digits DO 10160 392 9 ! ! ! IF i = 4 THEN (* only 4 digits allowed *) 10170 393 10 ! ! ! t:= cr 10180 394 11 ! ! ! ELSE 10190 395 12 ! ! ! BEGIN 10200 396 13 ! ! ! ! i:= i + 1; 10210 397 14 ! ! ! ! v:= 10*v+ord(t)-ord("0"); 10220 398 15 ! ! ! ! t:= readchar ( f) 10230 399 16 ! ! ! END; 10240 400 17 ! ! ! readinteger:= v 10250 401 18 ! ! END 10260 402 19 ! END 10270 403 20 END; 10280 404 \f tsvaslst 81.06.15. 15.00. page 13 11010 405 FUNCTION gettime : ts_time; 11020 406 BEGIN 11030 407 1 ! signal ( clock_msg, sem(timeout_sem_no).s^ ); 11040 408 2 ! wait ( clock_msg, sem(vagt_int2).w^ ); 11050 409 3 ! LOCK clock_msg AS buf: ts_time DO 11060 410 4 ! gettime:= buf; 11070 411 5 END; 11080 412 11090 413 11100 414 11110 415 PROCEDURE puttime ( hh, mm : integer ); 11120 416 (* set time in timeout module *) 11130 417 BEGIN 11140 418 1 ! clock_msg^.u1:= 5; (* writecontrol *) 11150 419 2 ! LOCK clock_msg AS buf: RECORD h,m: integer END DO 11160 420 3 ! BEGIN 11170 421 4 ! ! buf.h:= hh; 11180 422 5 ! ! buf.m:= 100*mm 11190 423 6 ! END; 11200 424 7 ! signal ( clock_msg, sem(timeout_sem_no).s^ ); 11210 425 8 ! wait ( clock_msg, sem(vagt_int2).w^ ); 11220 426 9 ! clock_msg^.u1:= 2 11230 427 10 END; 11240 428 11250 429 11260 430 PROCEDURE bindec ( bin: integer; VAR digits: alfa); 11270 431 (* binary to decimal conversion, at least 2 digits *) 11280 432 CONST 11290 433 blank = " "; 11300 434 VAR 11310 435 sign : char := " "; 11320 436 pos: integer:= alfalength; (* index in digits *) 11330 437 negative : boolean; 11340 438 11350 439 BEGIN 11360 440 1 ! digits:= blank; 11370 441 2 ! negative:= bin<0; 11380 442 3 ! bin:= abs( bin); 11390 443 4 ! REPEAT 11400 444 5 ! ! digits(pos):= chr(bin MOD 10 + ord("0")); 11410 445 6 ! ! bin:= bin DIV 10; 11420 446 7 ! ! pos:= pos-1 11430 447 8 ! UNTIL (bin=0) AND (pos<=12-2); 11440 448 9 ! IF negative THEN digits(pos):= "-"; 11450 449 10 END; 11460 450 \f tsvaslst 81.06.15. 15.00. page 14 12010 451 PROCEDURE print_num ( bin: integer; leng: integer); 12020 452 VAR i: integer; 12030 453 number: alfa; 12040 454 BEGIN 12050 455 1 ! bindec ( bin, number); 12060 456 2 ! FOR i:= alfalength+1-leng TO alfalength DO outchar ( tty, number(i)); 12070 457 3 END; 12080 458 12090 459 12100 460 PROCEDURE print_time; 12110 461 FORWARD; 12120 462 12130 463 PROCEDURE printbell; (* called at poll timeout *) 12140 464 BEGIN 12150 465 1 ! IF line_ready THEN 12160 466 2 ! BEGIN 12170 467 3 ! ! outnewline ( tty); 12180 468 4 ! ! print_time; 12190 469 5 ! ! outalfa ( tty, "vagt stoppet"); 12200 470 6 ! ! outchar ( tty, sp) 12210 471 7 ! END; 12220 472 8 ! outchar ( tty, "*"); 12230 473 9 ! outchar ( tty, bel); 12240 474 10 ! outblock ( tty); 12250 475 11 ! timeout:= maxtime; 12260 476 12 ! line_ready:= false 12270 477 13 END; 12280 478 12290 479 PROCEDURE print_head ( j: integer); 12300 480 VAR i : integer; 12310 481 BEGIN 12320 482 1 ! outfill ( tty, nl, j); 12330 483 2 ! outchar ( tty, cr); 12340 484 3 ! FOR i:= 1 TO headn DO outalfa ( tty, head(i)); 12350 485 4 ! outchar ( tty, nl); 12360 486 5 ! outchar ( tty, cr); 12370 487 6 ! outblock ( tty); 12380 488 7 ! linecount:= 9 12390 489 8 END; 12400 490 \f tsvaslst 81.06.15. 15.00. page 15 13010 491 PROCEDURE print_time; 13020 492 VAR time: ts_time; 13030 493 BEGIN 13040 494 1 ! time:= gettime; 13050 495 2 ! outfill ( tty, sp, 2); 13060 496 3 ! print_num ( time(0), 2); 13070 497 4 ! outchar ( tty, "."); 13080 498 5 ! print_num ( time(1) DIV 100, 2); 13090 499 6 ! outchar ( tty, "."); 13100 500 7 ! print_num ( time(1) MOD 100, 2); 13110 501 8 ! outfill ( tty, sp, 2); 13120 502 9 END; 13130 503 13140 504 PROCEDURE print_alfa ( text: alfa ); (* print clock and alfa *) 13150 505 BEGIN 13160 506 1 ! print_time; 13170 507 2 ! outalfa ( tty, text); 13180 508 3 ! outnewline ( tty); 13190 509 4 ! outalfa ( tty, empty); 13200 510 5 ! outblock ( tty); 13210 511 6 END; 13220 512 \f tsvaslst 81.06.15. 15.00. page 16 14010 513 PROCEDURE print_alarm; 14020 514 VAR i, n: integer; 14030 515 BEGIN 14040 516 1 ! outnewline ( tty); 14050 517 2 ! print_time; 14060 518 3 ! IF ( note(1)=#h64 ) AND ( note(3)=stop_code ) THEN note(1):= #h65; 14070 519 4 ! (* search text *) 14080 520 5 ! i:= 0; 14090 521 6 ! REPEAT 14100 522 7 ! ! i:= i+1; 14110 523 8 ! UNTIL (tekst(i).no=note(1)) OR (i=last_text_no); 14120 524 9 ! 14130 525 10 ! (* the next cannot be done by a real vagt *) 14140 526 11 ! 14150 527 12 ! outalfa ( tty, tekst(i).tx); 14160 528 13 ! outfill ( tty, sp, 2); 14170 529 14 ! print_num ( note(1) DIV 16, 2); 14180 530 15 ! outchar ( tty, "."); 14190 531 16 ! print_num ( note(1) MOD 16, 2); 14200 532 17 ! CASE note(1) OF 14210 533 18 ! ! #h72 : (* nothing *) 14220 534 19 ! ! OTHERWISE 14230 535 20 ! ! BEGIN 14240 536 21 ! ! ! outfill ( tty, sp, 2); 14250 537 22 ! ! ! print_num ( note(2), 3); 14260 538 23 ! ! END; 14270 539 24 ! END; 14280 540 25 ! CASE note(1) OF 14290 541 26 ! ! #h62,#h64,#h65,#h66,#h72 : (* nothing *) 14300 542 27 ! ! OTHERWISE 14310 543 28 ! ! BEGIN 14320 544 29 ! ! ! outfill ( tty, sp, 3); 14330 545 30 ! ! ! print_num ( note(3), 3); 14340 546 31 ! ! END; 14350 547 32 ! END; 14360 548 33 ! outblock ( tty); 14370 549 34 ! 14380 550 35 ! IF note(1) = #h32 THEN (* statusalarm *) 14390 551 36 ! BEGIN 14400 552 37 ! ! n := note(3); 14410 553 38 ! ! IF n = 0 THEN 14420 554 39 ! ! BEGIN 14430 555 40 ! ! ! outnewline ( tty); 14440 556 41 ! ! ! outfill ( tty, sp, 12); 14450 557 42 ! ! ! outalfa ( tty, statustxt(0)); 14460 558 43 ! ! ! outblock ( tty) \f tsvaslst 81.06.15. 15.00. page 17 14470 559 44 ! ! END 14480 560 45 ! ! ELSE 14490 561 46 ! ! FOR i := 7 DOWNTO 1 DO 14500 562 47 ! ! BEGIN 14510 563 48 ! ! ! IF (n MOD 2) = 1 THEN 14520 564 49 ! ! ! BEGIN 14530 565 50 ! ! ! ! outnewline ( tty); 14540 566 51 ! ! ! ! outfill ( tty, sp, 12); 14550 567 52 ! ! ! ! outalfa ( tty, statustxt(i)); 14560 568 53 ! ! ! ! outblock ( tty) 14570 569 54 ! ! ! END; 14580 570 55 ! ! ! n := n DIV 2 14590 571 56 ! ! END; 14600 572 57 ! END; 14610 573 58 ! outnewline ( tty); 14620 574 59 ! outalfa ( tty, empty); 14630 575 60 ! outblock ( tty); 14640 576 61 ! sample:= 0; 14650 577 62 END; 14660 578 14670 579 \f tsvaslst 81.06.15. 15.00. page 18 15010 580 PROCEDURE print_text_val ( text: alfa; val: integer ); 15020 581 BEGIN 15030 582 1 ! print_num ( val, 3); 15040 583 2 ! outalfa ( tty, text ); 15050 584 3 ! outnewline ( tty); 15060 585 4 END; 15070 586 15080 587 PROCEDURE send_read ( VAR f: filezone); 15090 588 BEGIN 15100 589 1 ! WITH f DO 15110 590 2 ! BEGIN 15120 591 3 ! ! IF open ( sem(free).w^) THEN wait ( cur, sem(free).w^); 15130 592 4 ! ! IF NOT nil(cur) THEN 15140 593 5 ! ! BEGIN 15150 594 6 ! ! ! LOCK cur AS buf: filebuffer DO 15160 595 7 ! ! ! BEGIN 15170 596 8 ! ! ! ! buf.first:= 1; 15180 597 9 ! ! ! ! buf.last:= top-1; 15190 598 10 ! ! ! ! buf.nextfree:= 1 15200 599 11 ! ! ! END; 15210 600 12 ! ! ! cur^.u1:= u1val; 15220 601 13 ! ! ! cur^.u2:= u2val; 15230 602 14 ! ! ! signal ( cur, sem(driver).s^); 15240 603 15 ! ! END 15250 604 16 ! END 15260 605 17 END; 15270 606 \f tsvaslst 81.06.15. 15.00. page 19 16010 607 PROCEDURE read_command ( VAR newdata: integer); 16020 608 VAR 16030 609 error, i : integer; 16040 610 com: command; 16050 611 16060 612 BEGIN 16070 613 1 ! newdata:= 0; 16080 614 2 ! FOR i:= 1 TO 4 DO com(i):= readchar( kb); 16090 615 3 ! error:= 0; 16100 616 4 ! linecount := linecount + 1; 16110 617 5 ! IF com(1) <> cr THEN 16120 618 6 ! BEGIN 16130 619 7 ! ! i:= 0; 16140 620 8 ! ! REPEAT 16150 621 9 ! ! ! i:=i+1 16160 622 10 ! ! UNTIL (menu(i)=com) OR (i=last_com_no); 16170 623 11 ! ! IF i < last_com_no THEN letter(3):= opkode(i) 16180 624 12 ! ! ELSE error:= 1; 16190 625 13 ! ! 16200 626 14 ! ! IF error=0 THEN 16210 627 15 ! ! BEGIN 16220 628 16 ! ! ! IF (letter(3)=7) OR (letter(3)=8) THEN 16230 629 17 ! ! ! i:= 0 16240 630 18 ! ! ! ELSE 16250 631 19 ! ! ! i:= readinteger ( kb); 16260 632 20 ! ! ! IF (i<0) OR (255<i) THEN error:= 2 ELSE 16270 633 21 ! ! ! BEGIN 16280 634 22 ! ! ! ! letter(2):= i; 16290 635 23 ! ! ! ! (* make default letter(1) *) 16300 636 24 ! ! ! ! CASE letter(3) OF 16310 637 25 ! ! ! ! ! 1,2, 16320 638 26 ! ! ! ! ! 5,7, 16330 639 27 ! ! ! ! ! 21,22, 16340 640 28 ! ! ! ! ! 24: letter(1):= 0; 16350 641 29 ! ! ! ! ! 3,4, 16360 642 30 ! ! ! ! ! 6,8, 16370 643 31 ! ! ! ! ! 23,25 : letter(1):= 1 16380 644 32 ! ! ! ! ! OTHERWISE 16390 645 33 ! ! ! ! ! BEGIN 16400 646 34 ! ! ! ! ! ! i:= readinteger ( kb); 16410 647 35 ! ! ! ! ! ! IF (i<0) OR (255<i) THEN error:= 3 ELSE 16420 648 36 ! ! ! ! ! ! letter(1):= i; 16430 649 37 ! ! ! ! ! END 16440 650 38 ! ! ! ! END 16450 651 39 ! ! ! END; 16460 652 40 ! ! END; \f tsvaslst 81.06.15. 15.00. page 20 16470 653 41 ! ! signal ( kb.cur, sem(kb.free).s^); 16480 654 42 ! ! 16490 655 43 ! ! IF error > 0 THEN 16500 656 44 ! ! BEGIN 16510 657 45 ! ! ! print_alfa ( whatx(error)); 16520 658 46 ! ! ! send_read ( kb) 16530 659 47 ! ! END 16540 660 48 ! ! ELSE 16550 661 49 ! ! IF letter(3) = #hc4 THEN (* set time *) 16560 662 50 ! ! BEGIN 16570 663 51 ! ! ! puttime ( letter(2), letter(1)); 16580 664 52 ! ! END ELSE 16590 665 53 ! ! newdata:= 3; 16600 666 54 ! END; 16610 667 55 ! 16620 668 56 ! IF (newdata = 0) AND (error = 0) THEN 16630 669 57 ! BEGIN 16640 670 58 ! ! outnewline ( tty); 16650 671 59 ! ! outalfa ( tty, empty); 16660 672 60 ! ! outblock( tty); 16670 673 61 ! ! send_read ( kb) 16680 674 62 ! END; 16690 675 63 END; 16700 676 16710 677 \f tsvaslst 81.06.15. 15.00. page 21 17010 678 17020 679 (*----------------------- main program ----------------------------*) 17030 680 17040 681 BEGIN 17050 682 1 ! 17060 683 2 ! testopen ( opzone, own.incname, op_sem); 17070 684 3 ! testout ( opzone, own.incname, al_env_version); 17080 685 4 ! 17090 686 5 ! 17100 687 6 ! (* wait for lam reservation *) 17110 688 7 ! 17120 689 8 ! vl := 1; 17130 690 9 ! timeout:= 40; 17140 691 10 ! h:= ille; 17150 692 11 ! REPEAT 17160 693 12 ! ! wait ( msg, sem( main).w^ ); 17170 694 13 ! ! IF msg^.u1 = create_at_ch THEN (* start at lam channel *) 17180 695 14 ! ! BEGIN 17190 696 15 ! ! ! portno:= msg^.u2; 17200 697 16 ! ! ! alloc ( clock_msg, clockpool, sem(vagt_int2).s^ ); 17210 698 17 ! ! ! clock_msg^.u1:= create_tty_ch; 17220 699 18 ! ! ! clock_msg^.u2:= portno; 17230 700 19 ! ! ! clock_msg^.u3:= 33; (* <> 0 *) 17240 701 20 ! ! ! LOCK clock_msg AS buf: createshape DO 17250 702 21 ! ! ! BEGIN 17260 703 22 ! ! ! ! buf.contr:= 2+4+16+32; (* even 7bit 2stop 300 bps *) 17270 704 23 ! ! ! ! buf.timer:= 60; 17280 705 24 ! ! ! END; 17290 706 25 ! ! ! signal ( clock_msg, sem(lam_sem_no).s^ ); 17300 707 26 ! ! ! wait ( clock_msg, sem(vagt_int2).w^ ); 17310 708 27 ! ! ! msg^.u2:= clock_msg^.u2; 17320 709 28 ! ! ! return ( msg); 17330 710 29 ! ! ! h:= ok; 17340 711 30 ! ! END ELSE 17350 712 31 ! ! BEGIN 17360 713 32 ! ! ! msg^.u2:= ille; return( msg) 17370 714 33 ! ! END 17380 715 34 ! UNTIL h = ok; 17390 716 35 ! \f tsvaslst 81.06.15. 15.00. page 22 18010 717 36 ! open_file ( kb, lam_sem_no, main, vagt_int4, no_reads, readpool, 17, portno); 18020 718 37 ! open_file ( tty, lam_sem_no, vagt_int1, vagt_int3, no_writes, writepool, 18, portno); 18030 719 38 ! 18040 720 39 ! WITH tty DO 18050 721 40 ! WHILE open ( sem(free).w^) DO 18060 722 41 ! BEGIN 18070 723 42 ! ! wait ( msg, sem(free).w^ ); 18080 724 43 ! ! signal ( msg, sem(answer_sem).s^ ) 18090 725 44 ! END; 18100 726 45 ! 18110 727 46 ! clock_msg^.u1:= 2; (* read *) 18120 728 47 ! 18130 729 48 ! alloc ( msg, timerpool, sem( main ).s^ ); 18140 730 49 ! msg^.u1:= read_write; msg^.u2:= 0; 18150 731 50 ! msg^.u3:= delay1; msg^.u4:= delay2; 18160 732 51 ! sendtimer ( msg); 18170 733 52 ! outchar( tty, cr); 18180 734 53 ! outalfa( tty, "/ vagt "); 18190 735 54 ! outalfa( tty, version); 18200 736 55 ! print_head ( 2); 18210 737 56 ! \f tsvaslst 81.06.15. 15.00. page 23 19010 738 57 ! 19020 739 58 ! (*----------------------- main loop ---------------------------*) 19030 740 59 ! 19040 741 60 ! REPEAT 19050 742 61 ! ! 19060 743 62 ! ! wait ( msg, sem( main ).w^ ); 19070 744 63 ! ! 19080 745 64 ! ! IF ownertest ( readpool, msg) THEN (* read terminated *) 19090 746 65 ! ! BEGIN 19100 747 66 ! ! ! (*q testout ( opzone, "keyboard ", msg^.u2 ); q*) 19110 748 67 ! ! ! inblock ( kb, msg); 19120 749 68 ! ! ! IF lamstate <> 0 THEN 19130 750 69 ! ! ! send_read ( kb ) 19140 751 70 ! ! ! ELSE 19150 752 71 ! ! ! read_command ( newdata); 19160 753 72 ! ! END ELSE 19170 754 73 ! ! 19180 755 74 ! ! IF ownertest ( timerpool, msg) THEN (* from timer *) 19190 756 75 ! ! BEGIN 19200 757 76 ! ! ! msg^.u1:= 6; msg^.u2:= 0; 19210 758 77 ! ! ! msg^.u3:= delay1; msg^.u4:= delay2; 19220 759 78 ! ! ! sendtimer ( msg); 19230 760 79 ! ! ! IF timeout > 0 THEN 19240 761 80 ! ! ! BEGIN 19250 762 81 ! ! ! ! timeout:= timeout-1; 19260 763 82 ! ! ! ! IF timeout = 0 THEN printbell (* no poll in maxtime*delay1 sec *) 19270 764 83 ! ! ! END 19280 765 84 ! ! END ELSE 19290 766 85 ! ! 19300 767 86 ! ! IF msg^.u3 = dummy_route THEN return ( msg) 19310 768 87 ! ! ELSE 19320 769 88 ! ! 19330 770 89 ! ! IF msg^.u1 = 11 THEN (* from vccon *) 19340 771 90 ! ! BEGIN 19350 772 91 ! ! ! LOCK msg AS buf: telegram DO WITH buf DO 19360 773 92 ! ! ! BEGIN 19370 774 93 ! ! ! ! databits:= inf; 19380 775 94 ! ! ! ! func := fnc; 19390 776 95 ! ! ! ! l := lnr 19400 777 96 ! ! ! END; 19410 778 97 ! ! ! \f tsvaslst 81.06.15. 15.00. page 24 20010 779 98 ! ! ! 20020 780 99 ! ! ! (*------------------- at protocol answer ----------------------------*) 20030 781 100 ! ! ! 20040 782 101 ! ! ! IF NOT line_ready THEN vl:= l; (* all l accepted *) 20050 783 102 ! ! ! IF l <> vl THEN 20060 784 103 ! ! ! BEGIN 20070 785 104 ! ! ! ! testout ( opzone, "l <> vl ", vl); 20080 786 105 ! ! ! ! answer:= lastanswer 20090 787 106 ! ! ! END 20100 788 107 ! ! ! ELSE 20110 789 108 ! ! ! BEGIN 20120 790 109 ! ! ! ! vl:= 1-vl; 20130 791 110 ! ! ! ! WITH answer DO 20140 792 111 ! ! ! ! IF austate <> oldstate THEN (* status *) 20150 793 112 ! ! ! ! BEGIN 20160 794 113 ! ! ! ! ! info:= austate; 20170 795 114 ! ! ! ! ! opko:= status; 20180 796 115 ! ! ! ! ! oldstate:= austate 20190 797 116 ! ! ! ! END ELSE 20200 798 117 ! ! ! ! CASE func OF 20210 799 118 ! ! ! ! ! 20220 800 119 ! ! ! ! ! poll: BEGIN 20230 801 120 ! ! ! ! ! ! timeout:= maxtime; 20240 802 121 ! ! ! ! ! ! IF NOT line_ready THEN 20250 803 122 ! ! ! ! ! ! BEGIN 20260 804 123 ! ! ! ! ! ! ! outnewline ( tty); 20270 805 124 ! ! ! ! ! ! ! print_alfa ( klar ); 20280 806 125 ! ! ! ! ! ! END; 20290 807 126 ! ! ! ! ! ! line_ready:= true; 20300 808 127 ! ! ! ! ! ! IF newdata = 0 THEN info:= 0 ELSE 20310 809 128 ! ! ! ! ! ! info:= letter(newdata); 20320 810 129 ! ! ! ! ! ! opko:= reply(newdata); 20330 811 130 ! ! ! ! ! ! IF newdata > 0 THEN 20340 812 131 ! ! ! ! ! ! BEGIN 20350 813 132 ! ! ! ! ! ! ! newdata:= newdata-1; 20360 814 133 ! ! ! ! ! ! ! IF newdata = 0 THEN (* message send *) 20370 815 134 ! ! ! ! ! ! ! BEGIN 20380 816 135 ! ! ! ! ! ! ! ! outalfa ( tty, empty); 20390 817 136 ! ! ! ! ! ! ! ! outblock ( tty) 20400 818 137 ! ! ! ! ! ! ! END; 20410 819 138 ! ! ! ! ! ! END; 20420 820 139 ! ! ! ! ! ! IF newdata = 0 THEN send_read ( kb); 20430 821 140 ! ! ! ! ! END; (* poll *) 20440 822 141 ! ! ! ! ! 20450 823 142 ! ! ! ! ! data: BEGIN 20460 824 143 ! ! ! ! ! ! timeout:= maxtime; \f tsvaslst 81.06.15. 15.00. page 25 20470 825 144 ! ! ! ! ! ! IF sample > 0 THEN 20480 826 145 ! ! ! ! ! ! BEGIN 20490 827 146 ! ! ! ! ! ! ! sample:= sample+1; 20500 828 147 ! ! ! ! ! ! ! note(sample):= databits 20510 829 148 ! ! ! ! ! ! END; 20520 830 149 ! ! ! ! ! ! IF sample = 3 THEN print_alarm; 20530 831 150 ! ! ! ! ! ! info:= databits; 20540 832 151 ! ! ! ! ! ! opko:= d_ack 20550 833 152 ! ! ! ! ! END; 20560 834 153 ! ! ! ! ! 20570 835 154 ! ! ! ! ! opr: BEGIN 20580 836 155 ! ! ! ! ! ! timeout:= maxtime; 20590 837 156 ! ! ! ! ! ! sample:= 1; 20600 838 157 ! ! ! ! ! ! note(1):= databits; 20610 839 158 ! ! ! ! ! ! info:= databits; 20620 840 159 ! ! ! ! ! ! opko:= t_ack 20630 841 160 ! ! ! ! ! END; 20640 842 161 ! ! ! ! ! 20650 843 162 ! ! ! ! ! test_i: BEGIN 20660 844 163 ! ! ! ! ! ! timeout:= maxtime; 20670 845 164 ! ! ! ! ! ! IF austate = 0 THEN info:= test_ok ELSE info:= test_error; 20680 846 165 ! ! ! ! ! ! opko:= t_ack 20690 847 166 ! ! ! ! ! END 20700 848 167 ! ! ! ! END (* of case on func *) 20710 849 168 ! ! ! END; (* l=vl *) 20720 850 169 ! ! ! 20730 851 170 ! ! ! lastanswer:= answer; 20740 852 171 ! ! ! letter(0):= answer.info; 20750 853 172 ! ! ! msg^.u2 := ok; 20760 854 173 ! ! ! 20770 855 174 ! ! ! LOCK msg AS buf : respons DO 20780 856 175 ! ! ! buf:= answer; 20790 857 176 ! ! ! dummy:= check5 ( msg, generate); 20800 858 177 ! ! ! 20810 859 178 ! ! ! return ( msg) 20820 860 179 ! ! END (* from vccon *) ELSE 20830 861 180 ! ! 20840 862 181 ! ! BEGIN 20850 863 182 ! ! ! testout ( opzone, "illegal msg ", msg^.u1 ); 20860 864 183 ! ! ! msg^.u2:= ille; return ( msg) 20870 865 184 ! ! END 20880 866 185 ! ! 20890 867 186 ! UNTIL forever 20900 868 187 ! 20910 869 188 END; (* process vagt_sim *) 20920 870 \f tsvaslst 81.06.15. 15.00. page 26 21010 871 FUNCTION find_ch( ch: byte; VAR desc_ix: descriptor_ix ): boolean; 21020 872 21030 873 BEGIN 21040 874 1 ! desc_ix:= 1; 21050 875 2 ! 21060 876 3 ! WHILE ( desc_ix < vc_l ) AND ( ch <> ch_desc( desc_ix ).chann ) DO 21070 877 4 ! desc_ix:= desc_ix + 1; 21080 878 5 ! 21090 879 6 ! find_ch:= ( ch = ch_desc( desc_ix ).chann ) 21100 880 7 END; (* function find_ch *) 21110 881 \f tsvaslst 81.06.15. 15.00. page 27 22010 882 22020 883 BEGIN (* process vagt *) 22030 884 1 ! testopen( opzone, own.incname, op_sem ); 22040 885 2 ! testout( opzone, version, al_env_version ); 22050 886 3 ! 22060 887 4 ! FOR desc_ix:= 1 TO vc_l DO 22070 888 5 ! WITH ch_desc( desc_ix ) DO 22080 889 6 ! chann:= 255; 22090 890 7 ! 22100 891 8 ! REPEAT (* forever *) 22110 892 9 ! ! 22120 893 10 ! ! wait( msg, sem( vas_sem_no ).w^ ); 22130 894 11 ! ! 22140 895 12 ! ! WITH msg^ DO 22150 896 13 ! ! BEGIN 22160 897 14 ! ! ! IF ( u1 = create_at_ch ) THEN 22170 898 15 ! ! ! BEGIN 22180 899 16 ! ! ! ! IF find_ch( u2, desc_ix ) THEN 22190 900 17 ! ! ! ! BEGIN 22200 901 18 ! ! ! ! ! 22210 902 19 ! ! ! ! ! testout( opzone, "reuse chann ", u2 ); 22220 903 20 ! ! ! ! ! u2:= 0; 22230 904 21 ! ! ! ! ! return( msg ) 22240 905 22 ! ! ! ! ! 22250 906 23 ! ! ! ! END 22260 907 24 ! ! ! ! ELSE 22270 908 25 ! ! ! ! BEGIN 22280 909 26 ! ! ! ! ! IF ( no_of_inc = vc_l ) THEN 22290 910 27 ! ! ! ! ! BEGIN 22300 911 28 ! ! ! ! ! ! testout( opzone, "vagt_sim > ", vc_l ); 22310 912 29 ! ! ! ! ! ! release( msg ) (* <<<<<<<<<<<<<<<<<<<<<<<< OBS! *) 22320 913 30 ! ! ! ! ! END 22330 914 31 ! ! ! ! ! ELSE 22340 915 32 ! ! ! ! ! BEGIN 22350 916 33 ! ! ! ! ! ! no_of_inc:= no_of_inc + 1; 22360 917 34 ! ! ! ! ! ! WITH ch_desc( no_of_inc ) DO 22370 918 35 ! ! ! ! ! ! BEGIN 22380 919 36 ! ! ! ! ! ! ! chann:= u2; 22390 920 37 ! ! ! ! ! ! ! main:= vagt_int + ( no_of_inc - 1 ) * 5; 22400 921 38 ! ! ! ! ! ! ! inc_name:= "vagt ch "; 22410 922 39 ! ! ! ! ! ! ! inc_name( 9 ):= chr( u2 DIV 10 + ord( "0" ) ); 22420 923 40 ! ! ! ! ! ! ! inc_name( 10 ):= chr( u2 MOD 10 + ord( "0" ) ); 22430 924 41 ! ! ! ! ! ! ! 22440 925 42 ! ! ! ! ! ! ! result:= create( inc_name, vagt_sim( op_sem, sem, main, 22450 926 43 ! ! ! ! ! ! ! main + 1, main + 2, main + 3, main + 4, lam_sem_no ), 22460 927 44 ! ! ! ! ! ! ! shad, inc_size ); \f tsvaslst 81.06.15. 15.00. page 28 22470 928 45 ! ! ! ! ! ! ! 22480 929 46 ! ! ! ! ! ! ! IF result = 0 THEN 22490 930 47 ! ! ! ! ! ! ! BEGIN 22500 931 48 ! ! ! ! ! ! ! ! start( shad, vc_sim_pri ); 22510 932 49 ! ! ! ! ! ! ! ! signal( msg, sem( main ).s^ ) 22520 933 50 ! ! ! ! ! ! ! END 22530 934 51 ! ! ! ! ! ! ! ELSE 22540 935 52 ! ! ! ! ! ! ! testout( opzone, "create error", result ) 22550 936 53 ! ! ! ! ! ! ! ; 22560 937 54 ! ! ! ! ! ! END 22570 938 55 ! ! ! ! ! END 22580 939 56 ! ! ! ! END 22590 940 57 ! ! ! END 22600 941 58 ! ! ! ELSE 22610 942 59 ! ! ! BEGIN 22620 943 60 ! ! ! ! IF find_ch( u2, desc_ix ) THEN 22630 944 61 ! ! ! ! signal( msg, sem( ch_desc( desc_ix ).main ).s^ ) 22640 945 62 ! ! ! ! ELSE 22650 946 63 ! ! ! ! testout( opzone, "channel ", u2 ) 22660 947 64 ! ! ! END 22670 948 65 ! ! END (* with msg^ *) 22680 949 66 ! ! 22690 950 67 ! UNTIL forever 22700 951 68 ! 22710 952 69 END. (* process vagt *) 22720 953 \f tsvaslst 81.06.15. 15.00. page 29 0 55* 57* 85* 86* 91* 100* 101* 107* 184* 200* 200* 220* 224* 227* 227* 231* 235* 245* 263 267 295 308 309 347 361 362 382* 441 447 496 520 553 557 576 613 615 619 626 629 632 640 647 655 668 668 730 749 757 760 763 808 808 811 814 820 825 845 852 903 929 1 58* 72* 81* 82* 83* 87* 89* 90* 100* 112* 195* 199* 220* 240* 247* 247* 248* 248* 250* 254* 269 283 284 310 313 328 341 350 363 373 389 396 446 456 484 498 500 518 518 522 523 529 531 532 540 550 561 563 596 597 598 614 616 617 621 624 637: 640 643 643 648 663 689 762 790 813 827 837 838 874 877 887 916 920 926 2 59* 66* 426 447 495 496 498 500 501 528 529 531 536 537 563 570 632 634 637: 663 703 727 736 926 3 60* 73* 87* 518 537 544 545 545 552 582 623 628 628 636 641: 647 661 665 830 926 4 56* 61* 71* 81* 86* 235* 392 614 641: 703 926 5 62* 295 418 638: 920 6 63* 64* 642: 757 7 85* 91* 561 628 638: 8 628 642: 9 488 922 10 74* 75* 227* 397 444 445 922 923 923 11 770 12 447 556 566 14 325 16 529 531 703 17 248* 717 18 70* 247* 718 21 65* 639: 22 639: 23 643: 24 640: 25 643: 27 69* 31 101* 107* 32 703 33 700 40 690 44 67* 60 704 80 68* 100 422 498 500 255 632 647 889 355 53* abs 442 accepted 201* \f tsvaslst 81.06.15. 15.00. page 30 alarmtext 88* 89* 134* 135* 136* 137* 138* 139* 140* 141* 142* 143* 144* 145* 146* 147* 148* 149* 150* 151* 152* 153* 154* 155* 156* 157* 158* 159* 160* alfa 87* 88* 90* 91* 198* 338* 430* 453* 504* 580* alfalength 341 436* 456 456 alloc 265 697 729 al_env_version <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 684 885 answ 253* 259 answer 227* 786= 791 851 852 856 answer_sem 116* 259= 265 307 724 as 281: 312: 370: 409: 419: 594: 701: 772: 855: atvagtsim 187* austate 223* 296= 309= 362= 792 794 796 845 bel 473 bin 332* 430* 441 442= 442 444 445= 445 447 451* 455 bindec 430* 455 blank 433* 440 boolean 233* 437* 871* buf 281: 283 284 312: 312 370: 370 409: 410 419: 421 422 594: 596 597 598 701: 703 704 772: 772 855: 856= bufs 254* 263 269= 269 byte 83* 88* 94* 98* 105* 119* 205* 224* 235* 244* 254* 871* cbits 101* 107* ch 871* 876 879 chann 205* 876 879 889= 919= char 81* 112* 301* 345* 367* 381* 435* character 301* 312 check5 857 chr 444 922 923 ch_desc 203* 876 879 888 917 944 clockpool 250* 697 clock_msg 251* 407 408 409: 418 419: 424 425 426 697 698 699 700 701: 706 707 708 727 com 610* 614= 617 622 command 81* 82* 610* commands 82* 172* contr 94* 703= cr 327 374 388 389 393 483 486 617 733 create 925 createshape 93* 701 create_at_ch 694 897 create_tty_ch <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 698 cur 118* 265 266 267 268 281: 286 287 288 294 305 307 309 312: 359 359 360= 362 370: 591 592 594: 600 601 602 653 \f tsvaslst 81.06.15. 15.00. page 31 data 84* 823: databits 224* 774= 828 831 838 839 delay1 74* 731 758 delay2 75* 731 758 descriptor_ix <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 195* 199* 203* 871* desc_ix 199* 871* 874= 876 876 877= 877 879 887= 888 899 943 944 digits 379* 388 391 430* 440= 444= 448= driv 253* 258 driver 116* 258= 288 602 dummy 232* 857= dummy_route 767 d_ack 61* 832 empty 128* 509 574 671 816 error 609* 615= 624= 626 632= 647= 655 657 668 errortext 87* 126* f 253* 256 276* 278 292* 294 301* 303 309 314 323* 326 327 332* 338* 341 345* 349 354* 357 362 367* 369 377* 384 387 398 587* 589 false 76* 233* 476 filebuffer 110* 238* 239* 281 312 370 594 filezone 115* 247* 247* 248* 248* 253* 276* 292* 301* 323* 332* 338* 345* 354* 367* 377* 587* file_error 292* 309 362 filler 345* 349 find_ch 871* 879= 899 943 first 111* 283= 596= fnc 99* 775 forever 76* 867 950 free 117* 260= 268 359 591 591 653 721 723 func 225* 775= 798 funktion 84* 99* 225* generate 857 gettime 405* 410= 494 h 231* 419: 421= 691= 710= 715 h01 134* 180* h02 181* h03 181* h04 181* h05 183* h06 183* h07 183* h08 183* h10 135* h12 136* \f tsvaslst 81.06.15. 15.00. page 32 h15 182* h16 182* h17 182* h18 182* h19 182* h20 137* 183* h21 138* h28 139* h29 140* h30 141* h31 142* h32 143* 550 h40 180* h41 144* h42 145* h50 146* h53 147* h54 148* h57 149* h62 150* 541 h64 151* 518 541 h65 152* 518 541 h66 153* 541 h72 154* 533: 541: h84 180* h85 155* h86 156* h98 157* hc4 180* 661 head 130* 484 headarray 90* 130* headn 71* 90* 484 hf0 158* hf1 159* hff 160* hh 415* 421 i 339* 341= 341 382* 392 396= 396 452* 456= 456 480* 484= 484 514* 520= 522= 522 523 523 527 561= 567 609* 614= 614 619= 621= 621 622 622 623 623 629= 631= 632 632 634 646= 647 647 648 ille 56* 691 713 864 inblock 354* 748 incname 683 684 884 inc_name 198* 921= 922= 923= 925 inc_size 53* 927 \f tsvaslst 81.06.15. 15.00. page 33 inf 98* 774 info 105* 794= 808= 809= 831= 839= 845= 845= 852 integer 111* 117* 120* 206* 216* 231* 245* 253* 254* 320* 332* 339* 345* 377* 382* 415* 419 430* 436* 451* 451* 452* 479* 480* 514* 580* 607* 609* j 320* 479* 482 kb 248* 614 631 646 653 653 658 673 717 748 750 820 klar 129* 805 l 220* 776= 782 783 lamstate 221* 294= 295 295 296 308= 361= 749 lam_sem_no 216* 706 717 718 926 last 111* 284= 597= lastanswer 226* 786 851= last_com_no 70* 82* 83* 622 623 last_text_no 69* 89* 523 leng 451* 456 letter 234* 623= 628 628 634= 636 640= 643= 648= 661 663 663 809 852= linecount 245* 325 328= 328 488= 616= 616 line_ready 233* 465 476= 782 802 807= lnr 100* 776 lock 281: 312: 370: 409: 419: 594: 701: 772: 855: m 419: 422= main 206* 216* 693 717 729 743 920= 925 926 926 926 926 932 944 maxtime 66* 475 801 824 836 844 menu 172* 622 mm 415* 422 msg 210* 236* 693 694 696 708 709 713 713 723 724 729 730 730 731 731 732 743 745 748 755 757 757 758 758 759 767 767 770 772: 853 855: 857 859 863 864 864 893 895 904 912 932 944 n 514* 552= 553 563 570= 570 negative 437* 441= 448 newdata 229* 607* 613= 665= 668 752 808 809 810 811 813= 813 814 820 next 120* 284 310= 312 313= 313 314 363= 371 373 373= 373 nextfree 111* 371 598= nl 326 482 485 no 88* 523 note 235* 518 518 518= 523 529 531 532 537 540 545 550 552 828= 838= no_of_inc 200* 909 916= 916 917 920 no_reads 72* 239* 717 no_writes 73* 238* 718 number 453* 455 456 ok 55* 309 362 710 715 853 oldstate 222* 792 796= opcodes 83* 179* open 591 721 \f tsvaslst 81.06.15. 15.00. page 34 open_file 253* 717 718 opko 106* 795= 810= 832= 840= 846= opkode 179* 623 opr 84* 835: opzone 211* 242* 683 684 785 863 884 885 902 911 935 946 op_sem 188* 213* 683 884 925 ord 397 397 444 922 923 outalfa 338* 469 484 507 509 527 557 567 574 583 671 734 735 816 outblock 276* 314 474 487 510 548 558 568 575 672 817 outchar 301* 326 327 341 349 456 470 472 473 483 485 486 497 499 530 733 outfill 345* 482 495 501 528 536 544 556 566 outinteger 332* outnewline 323* 467 508 516 555 565 573 584 670 804 own 683 684 884 ownertest 745 755 pagesize 67* 325 poll 84* 800: pool 238* 239* 240* 250* 254* portno 244* 696= 699 717 718 pos 436* 444 446= 446 447 448 printbell 463* 763 print_alarm 513* 830 print_alfa 504* 657 805 print_head 320* 325 479* 736 print_num 451* 496 498 500 529 531 537 545 582 print_text_val <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 580* print_time 460* 468 491* 506 517 process 187* 213* puttime 415* 663 p_ack 57* 124* readchar 367* 373= 374= 387 398 614 readinteger 377* 389= 400= 631 646 readpool 239* 717 745 read_command 607* 752 read_write 730 reference 118* 210* 236* 251* 354* release 912 rep 345* 347 350= 350 reply 124* 810 replycode 85* 86* 106* replycodes 86* 124* res 354* 360 \f tsvaslst 81.06.15. 15.00. page 35 reso 254* 265 respons 104* 227* 227* 855 result 201* 925= 929 935 result_range 201* return 709 713 767 859 864 904 s 265 268 288 359 407 424 602 653 697 706 724 729 932 944 sample 228* 576= 825 827= 827 828 830 837= sem 190* 215* 265 268 288 307 359 407 408 424 425 591 591 602 653 693 697 706 707 721 723 724 729 743 893 925 932 944 sempointer 188* 213* sendtimer 732 759 send_read 587* 658 673 750 820 shad 207* 927 931 shadow 207* sign 435* signal 268 288 359 407 424 602 653 706 724 932 944 sp 470 495 501 528 536 544 556 566 start 931 status 60* 795 statusarray 91* 162* statustxt 162* 557 567 stop_code 518 t 381* 387= 388 388 389 391 393= 397 398= tekst 133* 523 527 telegram 97* 772 testopen 683 884 testout 684 785 863 885 902 911 935 946 test_error 65* 845 test_i 84* 843: test_ok 64* 845 text 112* 312= 338* 341 373 504* 507 580* 583 textarray 89* 133* time 492* 494= 496 498 500 timeout 230* 475= 690= 760 762= 762 763 801= 824= 836= 844= timeout_sem_no <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 407 424 timer 94* 704= timerpool 240* 729 755 top 120* 314 597 true 807 ts_pointer_vector <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 190* 215* ts_time 250* 405* 409 492* tty 247* 456 467 469 470 472 473 474 482 483 484 485 486 487 495 497 499 501 507 508 509 510 516 527 528 530 536 544 548 555 556 557 558 565 566 567 568 573 574 575 583 584 670 671 672 \f tsvaslst 81.06.15. 15.00. page 36 718 720 733 734 735 804 816 817 ttylength 68* 112* 247* 248* tx 88* 527 t_ack 62* 840 846 u1 266= 286= 418= 426= 600= 694 698= 727= 730= 757= 770 863 897 u1val 119* 261= 266 286 600 u2 267= 287= 294 309 362 601= 696 699= 708= 708 713= 730= 757= 853= 864= 899 902 903= 919 922 923 943 946 u2val 119* 262= 287 601 u3 700= 731= 758= 767 u4 731= 758= v 382* 397= 397 400 v1 254* 261 v2 254* 262 vacant 253* 260 vagt_env 1* vagt_int 920 vagt_int1 216* 718 vagt_int2 216* 408 425 697 707 vagt_int3 216* 718 vagt_int4 216* 717 vagt_sim 213* 925 val 580* 582 vas_sem_no 893 vc_data 58* 124* 124* vc_l 195* 200* 876 887 909 911 vc_nak 63* 124* vc_opr 59* 124* vc_sim_pri 931 version 52* 735 885 vl 220* 689= 782= 783 785 790= 790 w 307 408 425 591 591 693 707 721 723 743 893 wait 307 408 425 591 693 707 723 743 893 whatx 126* 657 writepool 238* 718 zone 211* 242* \f tsvaslst 81.06.15. 15.00. page 37 AND 5 ARRAY 11 BEGIN 86 CASE 4 CONST 4 DIV 5 DO 34 DOWNTO 1 ELSE 27 END 98 FOR 6 FORWARD 2 FUNCTION 4 IF 51 IN 2 MOD 5 NIL 3 NOT 4 OF 18 OR 6 OTHERWISE 3 PACKED 3 PROCEDURE 22 RECORD 8 REPEAT 7 THEN 51 TO 5 TYPE 2 UNTIL 7 VAR 29 WHILE 5 WITH 14 \f jg9 1981.06.15 15.00 tsvas program 81.06.15. 15.00. pascal80 version 1981.04.01 name headline beginline endline appetite(words) open_file 70 73 87 : 17 outblock 92 96 105 : 9 file_error 108 109 112 : 3 outchar 117 121 131 : 12 outnewline 139 140 144 : 11 outinteger 148 149 149 : 2 outalfa 154 156 157 : 19 outfill 161 162 167 : 11 inblock 171 174 180 : 11 readchar 183 185 190 : 11 readinteger 194 202 218 : 16 gettime 221 222 226 : 9 puttime 232 233 242 : 9 bindec 248 255 264 : 9 print_num 267 270 272 : 25 printbell 279 281 292 : 16 print_head 295 297 304 : 20 print_time 307 309 317 : 17 print_alfa 320 321 326 : 16 print_alarm 329 331 392 : 21 print_text_v 396 397 400 : 16 send_read 403 406 420 : 9 read_command 424 428 490 : 24 vagt_sim 35 498 684 : 157 find_ch 688 689 694 : 8 atvagtsim 10 699 767 : 159 code: 1 . 1072 = 9264 bytes end of PASCAL80 compilation end blocksread = 53 «eof»