|
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: 36096 (0x8d00) Types: TextFile Names: »oplibtxt«
└─⟦a41ae585a⟧ Bits:30001842 SW-save af projekt 1000, Alarm-system └─⟦72244f0ef⟧ └─⟦this⟧ »oplibtxt«
\f oplibtxt 81.03.03. 16.36. page 1 10 1 \f oplibtxt 81.03.03. 16.36. page 2 1010 2 (*-------------------------- op lib -----------------------------------*) 1020 3 PREFIX openzone; 1030 4 PROCEDURE openzone ( (* opens a zone for driver comm. *) 1040 5 VAR z: zone; (* the zone to be opened *) 1050 6 driv: ^semaphore; (* driver process sem *) 1060 7 answ: ^semaphore; (* answers arrives here *) 1070 8 bufs : integer; (* no of buffers *) 1080 9 VAR home: pool 1; (* ownerpool for buffers *) 1090 10 v1, v2, v3, v4: byte ); (* u values in message headers *) 1100 11 1110 12 CONST 1120 13 output = 2; 1130 14 firstbuf = 6; (* general driver buffer *) 1140 15 lastbuf = firstbuf+80-1; 1150 16 1160 17 TYPE 1170 18 buffer = RECORD (* for driver comm. *) 1180 19 ! first, (* pointer to 1st char *) 1190 20 ! last, (* pointer to last output char *) 1200 21 ! next: integer; (* pointer to last+1 input char *) 1210 22 ! chars: ARRAY (firstbuf..lastbuf) OF char 1220 23 END; 1230 24 1240 25 BEGIN 1250 26 1 ! WITH z DO 1260 27 2 ! BEGIN 1270 28 3 ! ! driver:= driv; 1280 29 4 ! ! answer:= answ; 1290 30 5 ! ! u2val := v2; 1300 31 6 ! ! state := 0; 1310 32 7 ! ! readstate:= -1; 1320 33 8 ! ! nextp:= firstbuf; 1330 34 9 ! ! lastpos:= lastbuf; 1340 35 10 ! ! 1350 36 11 ! ! FOR bufs:= bufs DOWNTO 1 DO 1360 37 12 ! ! BEGIN 1370 38 13 ! ! ! alloc ( cur, home, answer^); 1380 39 14 ! ! ! cur^.u1:= v1; 1390 40 15 ! ! ! cur^.u2:= 0; 1400 41 16 ! ! ! cur^.u3:= v3; 1410 42 17 ! ! ! cur^.u4:= v4; 1420 43 18 ! ! ! LOCK cur AS buf: buffer DO WITH buf DO 1430 44 19 ! ! ! BEGIN 1440 45 20 ! ! ! ! first:= firstbuf; 1450 46 21 ! ! ! ! last:= lastbuf; 1460 47 22 ! ! ! ! next:= first \f oplibtxt 81.03.03. 16.36. page 3 1470 48 23 ! ! ! END; 1480 49 24 ! ! ! signal ( cur, free ) 1490 50 25 ! ! END 1500 51 26 ! END 1510 52 27 END ; (* of openzone *) 1520 53 1530 54 \f oplibtxt 81.03.03. 16.36. page 4 2010 55 PREFIX openopzone; 2020 56 PROCEDURE openopzone ( (* opens a zone for operator comm. *) 2030 57 VAR z: zone; (* the zone to be opened *) 2040 58 driv: ^semaphore; (* driver process sem *) 2050 59 answ: ^semaphore; (* answers arrives here *) 2060 60 bufs : integer; (* no of buffers *) 2070 61 VAR home: pool 1; (* ownerpool for buffers *) 2080 62 v1, v2, v3, v4: byte ); (* u values in message headers *) 2090 63 2100 64 CONST 2110 65 output = 2; 2120 66 firstbuf = 6+alfalength; (* operator buffer *) 2130 67 lastbuf = firstbuf+80-1; 2140 68 2150 69 TYPE 2160 70 opbuffer = RECORD (* for operator comm. *) 2170 71 ! first, (* pointer to 1st char *) 2180 72 ! last, (* pointer to last output char *) 2190 73 ! next: integer; (* pointer to last+1 input char *) 2200 74 ! name: alfa; (* process inc name *) 2210 75 ! chars: ARRAY (firstbuf..lastbuf) OF char 2220 76 END; 2230 77 2240 78 BEGIN 2250 79 1 ! WITH z DO 2260 80 2 ! BEGIN 2270 81 3 ! ! driver:= driv; 2280 82 4 ! ! answer:= answ; 2290 83 5 ! ! u2val := v2; 2300 84 6 ! ! state := 0; 2310 85 7 ! ! readstate:= -1; 2320 86 8 ! ! nextp:= firstbuf; 2330 87 9 ! ! lastpos:= lastbuf; 2340 88 10 ! ! 2350 89 11 ! ! FOR bufs:= bufs DOWNTO 1 DO 2360 90 12 ! ! BEGIN 2370 91 13 ! ! ! alloc ( cur, home, answer^); 2380 92 14 ! ! ! cur^.u1:= v1; 2390 93 15 ! ! ! cur^.u2:= 0; 2400 94 16 ! ! ! cur^.u3:= v3; 2410 95 17 ! ! ! cur^.u4:= v4; 2420 96 18 ! ! ! LOCK cur AS buf: opbuffer DO WITH buf DO 2430 97 19 ! ! ! BEGIN 2440 98 20 ! ! ! ! name:= own.incname; 2450 99 21 ! ! ! ! first:= firstbuf; 2460 100 22 ! ! ! ! last:= lastbuf; \f oplibtxt 81.03.03. 16.36. page 5 2470 101 23 ! ! ! ! next:= first 2480 102 24 ! ! ! END; 2490 103 25 ! ! ! signal ( cur, free ) 2500 104 26 ! ! END 2510 105 27 ! END 2520 106 28 END ; (* of openopzone *) 2530 107 2540 108 \f oplibtxt 81.03.03. 16.36. page 6 3010 109 PREFIX outend; 3020 110 PROCEDURE outend ( (* sends outputbuffer to driver *) 3030 111 VAR z: zone ); (* specifies the document *) 3040 112 3050 113 TYPE 3060 114 zonebuffer = RECORD 3070 115 ! first, last, next: integer; 3080 116 ! (* the rest is silence here *) 3090 117 END; 3100 118 3110 119 BEGIN 3120 120 1 ! WITH z DO 3130 121 2 ! IF NOT nil ( cur) THEN 3140 122 3 ! BEGIN 3150 123 4 ! ! LOCK cur AS buf: zonebuffer DO buf.last:= nextp-1; 3160 124 5 ! ! cur^.u2:= u2val; 3170 125 6 ! ! signal ( cur, driver^) 3180 126 7 ! END 3190 127 8 END ; (* of outend *) 3200 128 3210 129 \f oplibtxt 81.03.03. 16.36. page 7 4010 130 PREFIX outchar; 4020 131 PROCEDURE outchar ( (* writes 1 char in zone z *) 4030 132 VAR z: zone; (* specifies the document *) 4040 133 t: char ); (* character to be written *) 4050 134 4060 135 CONST 4070 136 opsize = 3+ (alfalength+80) DIV 2; 4080 137 4090 138 TYPE 4100 139 zonebuffer = RECORD 4110 140 ! first, last, next: integer; 4120 141 ! chars: ARRAY (6..6+80-1) OF char 4130 142 END; 4140 143 opbuffer = RECORD 4150 144 ! first, last, next: integer; 4160 145 ! name: alfa; 4170 146 ! chars: ARRAY (6+alfalength..6+alfalength+80-1) OF char 4180 147 END; 4190 148 4200 149 BEGIN 4210 150 1 ! WITH z DO 4220 151 2 ! BEGIN 4230 152 3 ! ! IF nil ( cur) THEN (* get a buffer *) 4240 153 4 ! ! BEGIN 4250 154 5 ! ! ! wait ( cur, free); 4260 155 6 ! ! ! state:= cur^.u2; 4270 156 7 ! ! ! LOCK cur AS buf: zonebuffer DO nextp:= buf.first; 4280 157 8 ! ! END; 4290 158 9 ! ! IF cur^.size >= opsize THEN 4300 159 10 ! ! LOCK cur AS buf: opbuffer DO buf.chars(nextp):= t 4310 160 11 ! ! ELSE 4320 161 12 ! ! LOCK cur AS buf: zonebuffer DO buf.chars(nextp):= t; 4330 162 13 ! ! nextp:= nextp+1; 4340 163 14 ! ! IF nextp > lastpos THEN outend ( z) 4350 164 15 ! END 4360 165 16 END ; (* of outchar *) 4370 166 4380 167 \f oplibtxt 81.03.03. 16.36. page 8 5010 168 PREFIX outtext; 5020 169 PROCEDURE outtext ( (* writes text on z *) 5030 170 VAR z: zone; (* specifies the document *) 5040 171 text: alfa ); (* text to be written 5050 172 # works as textstop *) 5060 173 5070 174 VAR 5080 175 i: byte:= 1; 5090 176 5100 177 BEGIN 5110 178 1 ! WHILE text(i) <> "#" DO 5120 179 2 ! BEGIN 5130 180 3 ! ! outchar ( z, text(i)); 5140 181 4 ! ! IF i = alfalength THEN text(i):= "#" ELSE i:= i+1 5150 182 5 ! END 5160 183 6 END ; (* of outtext *) 5170 184 5180 185 \f oplibtxt 81.03.03. 16.36. page 9 6010 186 PREFIX outfill; 6020 187 PROCEDURE outfill ( (* repeated outchar *) 6030 188 VAR z: zone; (* specifies the document *) 6040 189 filler: char; (* character to be written *) 6050 190 rep: integer ); (* repeat counter *) 6060 191 6070 192 BEGIN 6080 193 1 ! 6090 194 2 ! FOR rep:= rep DOWNTO 1 DO outchar ( z, filler) 6100 195 3 ! 6110 196 4 END ; (* of outfill *) 6120 197 6130 198 \f oplibtxt 81.03.03. 16.36. page 10 7010 199 PREFIX outnumber; 7020 200 PROCEDURE outnumber ( (* write an integer as decimal *) 7030 201 VAR z: zone; (* specifies the document *) 7040 202 num: integer; (* the integer *) 7050 203 pos: integer ); (* no of writepositions *) 7060 204 7070 205 (* 7080 206 pos may give some spaces before the number, but all 7090 207 digits are written. 7100 208 *) 7110 209 7120 210 VAR 7130 211 neg: boolean; 7140 212 i: byte:= 1; 7150 213 digits: ARRAY (1..5) OF char; 7160 214 7170 215 BEGIN 7180 216 1 ! IF num = -32768 THEN 7190 217 2 ! BEGIN 7200 218 3 ! ! outfill ( z, sp, pos-6); 7210 219 4 ! ! outtext ( z, "-32768# ") 7220 220 5 ! END 7230 221 6 ! ELSE 7240 222 7 ! BEGIN 7250 223 8 ! ! neg:= num < 0; 7260 224 9 ! ! IF neg THEN 7270 225 10 ! ! BEGIN 7280 226 11 ! ! ! pos:= pos-1; 7290 227 12 ! ! ! num:= -num 7300 228 13 ! ! END; 7310 229 14 ! ! 7320 230 15 ! ! REPEAT 7330 231 16 ! ! ! digits(i):= chr ( num MOD 10 + ord("0")); 7340 232 17 ! ! ! num:= num DIV 10; 7350 233 18 ! ! ! i:= i+1 7360 234 19 ! ! UNTIL num = 0; 7370 235 20 ! ! 7380 236 21 ! ! outfill ( z, sp, pos-i+1); 7390 237 22 ! ! IF neg THEN outchar ( z, "-"); 7400 238 23 ! ! FOR i:= i-1 DOWNTO 1 DO outchar ( z, digits(i)) 7410 239 24 ! END 7420 240 25 END ; (* of outnumber *) 7430 241 7440 242 \f oplibtxt 81.03.03. 16.36. page 11 8010 243 PREFIX outhex; 8020 244 PROCEDURE outhex ( (* writes an integer as hexadecimal *) 8030 245 VAR z: zone; (* specifies the document *) 8040 246 num: integer; (* number to be written *) 8050 247 pos: integer ); (* write positions *) 8060 248 8070 249 TYPE 8080 250 table = ARRAY (0..15) OF char; 8090 251 8100 252 CONST 8110 253 hextab = table ("0","1","2","3","4","5","6","7", 8120 254 "8","9","a","b","c","d","e","f" ); 8130 255 8140 256 VAR 8150 257 bit0: byte:= 0; 8160 258 8170 259 BEGIN 8180 260 1 ! IF num < 0 THEN 8190 261 2 ! BEGIN 8200 262 3 ! ! bit0:= 8; 8210 263 4 ! ! num:= num - (-32768); 8220 264 5 ! END; 8230 265 6 ! outfill ( z, sp, pos-4); 8240 266 7 ! outchar ( z, hextab(bit0+num DIV (16*16*16))); 8250 267 8 ! outchar ( z, hextab(num DIV (16*16) MOD 16)); 8260 268 9 ! outchar ( z, hextab(num DIV 16 MOD 16)); 8270 269 10 ! outchar ( z, hextab(num MOD 16)); 8280 270 11 END ; (* of outhex *) 8290 271 8300 272 \f oplibtxt 81.03.03. 16.36. page 12 9010 273 PREFIX opin; 9020 274 PROCEDURE opin ( VAR z: zone); (* request input *) 9030 275 9040 276 VAR 9050 277 msg: reference; 9060 278 9070 279 BEGIN 9080 280 1 ! WITH z DO 9090 281 2 ! IF open ( free) THEN 9100 282 3 ! BEGIN 9110 283 4 ! ! wait ( msg, free); 9120 284 5 ! ! msg^.u2:= u2val; 9130 285 6 ! ! signal ( msg, driver^) 9140 286 7 ! END 9150 287 8 END ; (* of opin *) 9160 288 9170 289 \f oplibtxt 81.03.03. 16.36. page 13 10010 290 PREFIX opanswer; 10020 291 PROCEDURE opanswer ( (* transfers a message to zone z *) 10030 292 VAR msg: reference; (* a message with operator input *) 10040 293 VAR z: zone ); (* an input zone *) 10050 294 10060 295 BEGIN 10070 296 1 ! 10080 297 2 ! signal ( msg, z.dataready) 10090 298 3 ! 10100 299 4 END ; (* of opanswer *) 10110 300 10120 301 \f oplibtxt 81.03.03. 16.36. page 14 11010 302 PREFIX optest; 11020 303 FUNCTION optest ( VAR z: zone ): boolean; 11030 304 (* 11040 305 optest is true if the zone has some data ready. 11050 306 i. e. opwait will not wait. 11060 307 *) 11070 308 11080 309 BEGIN 11090 310 1 ! 11100 311 2 ! optest := open ( z.dataready) 11110 312 3 ! 11120 313 4 END ; (* of optest *) 11130 314 11140 315 \f oplibtxt 81.03.03. 16.36. page 15 12010 316 PREFIX opwait; 12020 317 PROCEDURE opwait ( (* waits for input to z *) 12030 318 VAR z: zone; (* specifies the document *) 12040 319 VAR inputpool: pool 1 ); (* input buffer pool *) 12050 320 12060 321 CONST 12070 322 read = 1; 12080 323 12090 324 TYPE 12100 325 zonebuffer = RECORD 12110 326 ! first, last, next: integer 12120 327 END; 12130 328 12140 329 VAR 12150 330 n: integer:= 0; (* msg counter *) 12160 331 operatorinput: boolean; 12170 332 12180 333 BEGIN 12190 334 1 ! WITH z DO 12200 335 2 ! IF nil ( cur) THEN 12210 336 3 ! BEGIN 12220 337 4 ! ! IF NOT open ( dataready) THEN (* wait for input answer *) 12230 338 5 ! ! BEGIN 12240 339 6 ! ! ! REPEAT 12250 340 7 ! ! ! ! wait ( cur, answer^); 12260 341 8 ! ! ! ! operatorinput:= ownertest ( inputpool, cur) AND ( cur^.u1 MOD 8 = read); 12270 342 9 ! ! ! ! signal ( cur, dataready); 12280 343 10 ! ! ! ! n:= n+1 12290 344 11 ! ! ! UNTIL operatorinput; 12300 345 12 ! ! ! 12310 346 13 ! ! ! FOR n:= n DOWNTO 2 DO (* send other messages back into queue *) 12320 347 14 ! ! ! BEGIN 12330 348 15 ! ! ! ! wait ( cur, dataready); 12340 349 16 ! ! ! ! signal ( cur, answer^); 12350 350 17 ! ! ! END; 12360 351 18 ! ! END; 12370 352 19 ! ! wait ( cur, dataready); 12380 353 20 ! ! state:= cur^.u2; 12390 354 21 ! ! LOCK cur AS buf: zonebuffer DO nextp:= buf.first 12400 355 22 ! END 12410 356 23 END ; (* of opwait *) 12420 357 12430 358 \f oplibtxt 81.03.03. 16.36. page 16 13010 359 PREFIX readchar; 13020 360 PROCEDURE readchar ( (* reads next character *) 13030 361 VAR z: zone; (* specifies the document *) 13040 362 VAR t: char ); (* delivered character or nl *) 13050 363 13060 364 CONST 13070 365 opsize = 3 + (alfalength+80) DIV 2; 13080 366 13090 367 TYPE 13100 368 zonebuffer = RECORD 13110 369 ! first, last, next: integer; 13120 370 ! chars: ARRAY (6..6+80-1) OF char 13130 371 END; 13140 372 opbuffer = RECORD 13150 373 ! first, last, next: integer; 13160 374 ! name: alfa; 13170 375 ! chars: ARRAY (6+alfalength..6+alfalength+80-1) OF char 13180 376 END; 13190 377 13200 378 BEGIN 13210 379 1 ! t:= nl; 13220 380 2 ! WITH z DO 13230 381 3 ! IF nil ( cur) THEN readstate:= -1 13240 382 4 ! ELSE 13250 383 5 ! BEGIN 13260 384 6 ! ! readstate:= 0; 13270 385 7 ! ! IF cur^.size >= opsize THEN (* operator buffer *) 13280 386 8 ! ! LOCK cur AS buf: opbuffer DO 13290 387 9 ! ! BEGIN 13300 388 10 ! ! ! IF nextp < buf.next THEN 13310 389 11 ! ! ! t:= buf.chars(nextp) 13320 390 12 ! ! ! ELSE readstate:= -1 13330 391 13 ! ! END 13340 392 14 ! ! ELSE 13350 393 15 ! ! LOCK cur AS buf: zonebuffer DO 13360 394 16 ! ! IF nextp < buf.next THEN 13370 395 17 ! ! t:= buf.chars(nextp) 13380 396 18 ! ! ELSE readstate:= -1; 13390 397 19 ! ! 13400 398 20 ! ! IF readstate = -1 THEN signal ( cur, free) 13410 399 21 ! ! ELSE nextp:= nextp+1 13420 400 22 ! END 13430 401 23 END ; (* of readchar *) 13440 402 13450 403 \f oplibtxt 81.03.03. 16.36. page 17 14010 404 PREFIX readinteger; 14020 405 PROCEDURE readinteger ( (* reads a decimal number *) 14030 406 VAR z: zone; (* specifies the document *) 14040 407 VAR num: integer ); (* value read or 0 *) 14050 408 (* 14060 409 syntax: (0..n)*(not digit), (0..1)*sign, (1..5)*digit 14070 410 z.readstate = 0 if value assigned. 14080 411 *) 14090 412 CONST 14100 413 max = 3276; (* max integer div 10 *) 14110 414 digits = (. "0".."9" .); 14120 415 wanted = (. "0".."9", nl .); 14130 416 14140 417 VAR 14150 418 prev, t: char:= sp; 14160 419 d: byte:= 0; 14170 420 sign: integer; 14180 421 14190 422 BEGIN 14200 423 1 ! num:= 0; 14210 424 2 ! 14220 425 3 ! REPEAT 14230 426 4 ! ! prev:= t; 14240 427 5 ! ! readchar ( z, t) 14250 428 6 ! UNTIL t IN wanted; 14260 429 7 ! 14270 430 8 ! IF t <> nl THEN (* a number is met *) 14280 431 9 ! BEGIN 14290 432 10 ! ! IF prev = "-" THEN sign:= -1 ELSE sign:= +1; 14300 433 11 ! ! 14310 434 12 ! ! WHILE ( num < max ) AND ( t IN digits ) DO 14320 435 13 ! ! BEGIN 14330 436 14 ! ! ! num:= num*10 - ord("0") + ord( t); 14340 437 15 ! ! ! readchar ( z, t) 14350 438 16 ! ! END; 14360 439 17 ! ! 14370 440 18 ! ! IF ( num <= max ) AND ( t IN digits ) THEN (* include last digit *) 14380 441 19 ! ! BEGIN 14390 442 20 ! ! ! d:= ord ( t) - ord("0"); 14400 443 21 ! ! ! IF 2*d < 16-sign THEN (* accept *) 14410 444 22 ! ! ! BEGIN 14420 445 23 ! ! ! ! num:= num*10; 14430 446 24 ! ! ! ! z.nextp:= z.nextp+1 14440 447 25 ! ! ! END 14450 448 26 ! ! ! ELSE d:= 0 14460 449 27 ! ! END; \f oplibtxt 81.03.03. 16.36. page 18 14470 450 28 ! ! 14480 451 29 ! ! num:= sign*num + sign*d; 14490 452 30 ! ! z.readstate:= 0; 14500 453 31 ! ! z.nextp:= z.nextp-1 14510 454 32 ! END 14520 455 33 END ; (* of readinteger *) 14530 456 14540 457 \f oplibtxt 81.03.03. 16.36. page 19 15010 458 PREFIX readhex; 15020 459 PROCEDURE readhex ( (* reads a hexadecimal number *) 15030 460 VAR z: zone; (* specifies the document *) 15040 461 VAR num: integer ); (* value read or 0 *) 15050 462 15060 463 (* 15070 464 syntax: (0..n)*(not hexdigit), (1..4)*hexdigit 15080 465 z.readstate = 0 if value assigned. 15090 466 *) 15100 467 15110 468 CONST 15120 469 hexdigits = (. "0".."9", "a".."f" .); 15130 470 wanted = (. nl, "0".."9", "a".."f" .); 15140 471 15150 472 VAR 15160 473 t: char; 15170 474 a, b, c, d: byte:= 0; (* 4 digits *) 15180 475 15190 476 BEGIN 15200 477 1 ! num:= 0; 15210 478 2 ! 15220 479 3 ! REPEAT readchar ( z, t) UNTIL t IN wanted; 15230 480 4 ! 15240 481 5 ! IF t <> nl THEN (* a number is met *) 15250 482 6 ! BEGIN 15260 483 7 ! ! 15270 484 8 ! ! WHILE ( a = 0 ) AND ( t IN hexdigits ) DO 15280 485 9 ! ! BEGIN 15290 486 10 ! ! ! a:= b; b:= c; c:= d; 15300 487 11 ! ! ! IF ord ( t) <= ord ("9") THEN 15310 488 12 ! ! ! d:= ord ( t) - ord ("0") ELSE 15320 489 13 ! ! ! d:= ord ( t) - ord ("a") + 10; 15330 490 14 ! ! ! readchar ( z, t) 15340 491 15 ! ! END; 15350 492 16 ! ! 15360 493 17 ! ! num:= ((((a+8) MOD 16 -8)*16+b)*16+c)*16+d; 15370 494 18 ! ! z.readstate:= 0; 15380 495 19 ! ! z.nextp:= z.nextp-1 15390 496 20 ! END 15400 497 21 END ; (* of readhex *) 15410 498 15420 499 \f oplibtxt 81.03.03. 16.36. page 20 16010 500 PREFIX readname; 16020 501 PROCEDURE readname ( (* reads a name from z *) 16030 502 VAR z: zone; (* specifies the document *) 16040 503 VAR name: alfa ); (* read name *) 16050 504 16060 505 (* 16070 506 syntax: (0..n)*sp, 1*letter, (0..11)*alfanum 16080 507 readstate = 0 if name assigned. 16090 508 you may initialize name before readname. 16100 509 *) 16110 510 16120 511 CONST 16130 512 letters = (. "A".."Å", "a".."å" .); 16140 513 alfanum = (. "A".."Å", "a".."å", "0".."9" .); 16150 514 16160 515 VAR 16170 516 t: char; 16180 517 i: byte:= 0; 16190 518 16200 519 BEGIN 16210 520 1 ! 16220 521 2 ! REPEAT readchar ( z, t) UNTIL t <> sp; 16230 522 3 ! 16240 523 4 ! IF t IN letters THEN (* read the name *) 16250 524 5 ! BEGIN 16260 525 6 ! ! 16270 526 7 ! ! REPEAT 16280 527 8 ! ! ! i:= i+1; 16290 528 9 ! ! ! name(i):= t; 16300 529 10 ! ! ! readchar ( z, t); 16310 530 11 ! ! UNTIL ( i >= alfalength ) OR NOT ( t IN alfanum ); 16320 531 12 ! ! 16330 532 13 ! ! z.readstate:= 0; 16340 533 14 ! ! z.nextp:= z.nextp-1; 16350 534 15 ! END 16360 535 16 ! ELSE 16370 536 17 ! IF z.readstate = 0 THEN z.readstate:= 1 16380 537 18 ! 16390 538 19 END . (* of readname *) 16400 539 16410 540 (*------------------------- end of oplib -----------------------------*) 16420 541 \f oplibtxt 81.03.03. 16.36. page 21 0 31 40 84 93 223 234 250* 257* 260 330* 384 419* 423 448 452 474* 477 484 494 517* 532 536 1 9* 15* 32 36 61* 67* 85 89 123 141* 146* 162 175* 181 194 212* 213* 226 233 236 238 238 319* 322* 343 370* 375* 381 390 396 398 399 432 432 446 453 495 527 533 536 2 13* 65* 136* 346 365* 443 3 136* 365* 4 265 5 213* 6 14* 66* 141* 141* 146* 146* 218 370* 370* 375* 375* 8 262 341 493 493 10 231 232 436 445 489 15 250* 16 266 266 266 267 267 267 268 268 269 443 493 493 493 493 80 15* 67* 136* 141* 146* 365* 370* 375* 3276 413* 32768 216 263 a 474* 484 486= 493 alfa 74* 145* 171* 374* 503* alfalength 66* 136* 146* 146* 181 365* 375* 375* 530 alfanum 513* 530 alloc 38 91 answ 7* 29 59* 82 answer 29= 38 82= 91 340 349 as 43: 96: 123: 156: 159: 161: 354: 386: 393: b 474* 486 486= 493 bit0 257* 262= 266 boolean 211* 303* 331* buf 43: 43 96: 96 123: 123 156: 156 159: 159 161: 161 354: 354 386: 388 389 393: 394 395 buffer 18* 43 bufs 8* 36= 36 60* 89= 89 byte 10* 62* 175* 212* 257* 419* 474* 517* c 474* 486 486= 493 char 22* 75* 133* 141* 146* 189* 213* 250* 362* 370* 375* 418* 473* 516* chars 22* 75* 141* 146* 159= 161= 370* 375* 389 395 chr 231 cur 38 39 40 41 42 43: 49 91 92 93 94 95 96: 103 121 123: 124 125 152 154 155 156: 158 159: 161: 335 340 341 341 342 348 349 352 353 354: 381 385 386: 393: 398 d 419* 442= 443 448= 451 474* 486 488= 489= 493 dataready 297 311 337 342 348 352 digits 213* 231= 238 414* 434 440 driv 6* 28 58* 81 \f oplibtxt 81.03.03. 16.36. page 22 driver 28= 81= 125 285 filler 189* 194 first 19* 45= 47 71* 99= 101 115* 140* 144* 156 326* 354 369* 373* firstbuf 14* 15* 22* 33 45 66* 67* 75* 86 99 free 49 103 154 281 283 398 hexdigits 469* 484 hextab 253* 266 267 268 269 home 9* 38 61* 91 i 175* 178 180 181 181 181= 181 212* 231 233= 233 236 238= 238 238 517* 527= 527 528 530 incname 98 inputpool 319* 341 integer 8* 21* 60* 73* 115* 140* 144* 190* 202* 203* 246* 247* 326* 330* 369* 373* 407* 420* 461* last 20* 46= 72* 100= 115* 123= 140* 144* 326* 369* 373* lastbuf 15* 22* 34 46 67* 75* 87 100 lastpos 34= 87= 163 letters 512* 523 lock 43: 96: 123: 156: 159: 161: 354: 386: 393: max 413* 434 440 msg 277* 283 284 285 292* 297 n 330* 343= 343 346= 346 name 74* 98= 145* 374* 503* 528= neg 211* 223= 224 237 next 21* 47= 73* 101= 115* 140* 144* 326* 369* 373* 388 394 nextp 33= 86= 123 156= 159 161 162= 162 163 354= 388 389 394 395 399= 399 446= 446 453= 453 495= 495 533= 533 nl 379 415* 430 470* 481 num 202* 216 223 227= 227 231 232= 232 234 246* 260 263= 263 266 267 268 269 407* 423= 434 436= 436 440 445= 445 451= 451 461* 477= 493= opanswer 290* 291* opbuffer 70* 96 143* 159 372* 386 open 281 311 337 openopzone 55* 56* openzone 3* 4* operatorinput <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 331* 341= 344 opin 273* 274* opsize 136* 158 365* 385 optest 302* 303* 311= opwait 316* 317* ord 231 436 436 442 442 487 487 488 488 489 489 outchar 130* 131* 180 194 237 238 266 267 268 269 outend 109* 110* 163 \f oplibtxt 81.03.03. 16.36. page 23 outfill 186* 187* 218 236 265 outhex 243* 244* outnumber 199* 200* output 13* 65* outtext 168* 169* 219 own 98 ownertest 341 pool 9* 61* 319* pos 203* 218 226= 226 236 247* 265 prefix 3* 55* 109* 130* 168* 186* 199* 243* 273* 290* 302* 316* 359* 404* 458* 500* prev 418* 426= 432 read 322* 341 readchar 359* 360* 427 437 479 490 521 529 readhex 458* 459* readinteger 404* 405* readname 500* 501* readstate 32= 85= 381= 384= 390= 396= 398 452= 494= 532= 536 536= reference 277* 292* rep 190* 194= 194 semaphore 6* 7* 58* 59* sign 420* 432= 432= 443 451 451 signal 49 103 125 285 297 342 349 398 size 158 385 sp 218 236 265 418* 521 state 31= 84= 155= 353= t 133* 159 161 362* 379= 389= 395= 418* 426 427 428 430 434 436 437 440 442 473* 479 479 481 484 487 488 489 490 516* 521 521 523 528 529 530 table 250* 253* text 171* 178 180 181= u1 39= 92= 341 u2 40= 93= 124= 155 284= 353 u2val 30= 83= 124 284 u3 41= 94= u4 42= 95= v1 10* 39 62* 92 v2 10* 30 62* 83 v3 10* 41 62* 94 v4 10* 42 62* 95 wait 154 283 340 348 352 wanted 415* 428 470* 479 z 5* 26 57* 79 111* 120 132* 150 163 170* 180 188* 194 201* 218 219 236 237 238 245* 265 266 267 268 269 274* 280 293* 297 303* 311 318* 334 361* 380 406* 427 437 446 446 452 453 453 460* 479 490 494 495 495 502* 521 529 532 533 533 536 536 \f oplibtxt 81.03.03. 16.36. page 24 zone 5* 57* 111* 132* 170* 188* 201* 245* 274* 293* 303* 318* 361* 406* 460* 502* zonebuffer 114* 123 139* 156 161 325* 354 368* 393 \f oplibtxt 81.03.03. 16.36. page 25 AND 4 ARRAY 8 BEGIN 43 CONST 9 DIV 6 DO 26 DOWNTO 5 ELSE 12 END 51 FOR 5 FUNCTION 1 IF 25 IN 7 MOD 6 NIL 4 NOT 3 OF 8 OR 1 PROCEDURE 15 RECORD 8 REPEAT 6 THEN 25 TYPE 7 UNTIL 6 VAR 32 WHILE 3 WITH 9 op lib 81.03.03. 16.36. pascal80 version 1981.02.09 name headline beginline endline appetite(words) openzone 11 29 53 : 19 openopzone 63 82 107 : 19 outend 112 123 128 : 8 outchar 134 154 166 : 12 outtext 172 179 184 : 16 outfill 191 195 195 : 14 outnumber 204 218 241 : 23 outhex 248 262 271 : 16 opin 275 283 288 : 10 opanswer 294 298 298 : 4 optest 304 314 312 : 7 opwait 320 337 357 : 19 readchar 363 380 402 : 11 readinteger 408 424 456 : 16 readhex 462 478 498 : 16 readname 504 522 539 : 13 code: 0 . 276 = 276 bytes end of PASCAL80 compilation end blocksread = 52 ▶EOF◀