|
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: 96768 (0x17a00) Types: TextFileVerbose Names: »tstoslst«
└─⟦a41ae585a⟧ Bits:30001842 SW-save af projekt 1000, Alarm-system └─⟦72244f0ef⟧ └─⟦this⟧ »tstoslst«
\f tstoslst 81.02.26. 13.07. page 1 10 1 20 2 30 3 40 4 PROCESS tsopsys(VAR semvector: system_vector); 50 5 60 6 (*************************************************** 70 7 * 80 8 * function: the test module is used to initialise buffers, 90 9 * signal them to semaphores, and to write their 100 10 * contents, when they have been handled by another 110 11 * 120 12 * externals: none 130 13 * 140 14 * var params: none 150 15 * 160 16 * semaphores: the module sends to the system semaphore 170 17 * "operatorsem". 180 18 * 190 19 * 200 20 * programmed may 1980 by wib and stb 210 21 * 220 22 ***************************************************) 230 23 240 24 CONST 250 25 version = "vers 3.16 /"; 260 26 270 27 280 28 \f tstoslst 81.02.26. 13.07. page 2 1010 29 CONST 1020 30 opbufsize = 80; (* no. of bytes in buffers to the operator module *) 1030 31 (*** bufs ***) 1040 32 messbufsize= size_listen; (*words*) 1050 33 testbufsize= size_listen*5; 1060 34 maxbufsize= size_listen*3; 1070 35 minbufsize= 1; 1080 36 noofmodules= 16; 1090 37 noofsemaphores= ts_sem_total; 1100 38 pu= 0; (* processing unit number *) 1110 39 pr= -1; (* timeslicing priority *) 1120 40 1130 41 valparam= "param val "; 1140 42 noparam= " no param "; 1150 43 alreadyexists= " already exists "; 1160 44 doesntexist= " doesn't exist "; 1170 45 illegalno= "illegal no"; 1180 46 createerror= "error in createcall "; 1190 47 1200 48 linelength= 80; 1210 49 firstindex= 6 + alfalength; 1220 50 lastindex= firstindex + (linelength - 1); 1230 51 ok= 0; (* result from operator *) 1240 52 1250 53 1260 54 TYPE 1270 55 opbuftype= 1280 56 RECORD 1290 57 ! first, 1300 58 ! last, 1310 59 ! next: integer; 1320 60 ! name: alfa; 1330 61 ! data: ARRAY (firstindex..lastindex) OF char 1340 62 END; 1350 63 1360 64 (*** bufs ***) 1370 65 messbuftype= ARRAY (1..messbufsize) OF integer; 1380 66 testbuftype= ARRAY (1..testbufsize) OF integer; 1390 67 minbuftype = ARRAY (1.. minbufsize) OF integer; 1400 68 maxbuftype = ARRAY (1.. maxbufsize) OF integer; 1410 69 1420 70 createchtype= 1430 71 RECORD 1440 72 ! controlinfo, timeout: byte 1450 73 END; 1460 74 \f tstoslst 81.02.26. 13.07. page 3 1470 75 atbuffer= ARRAY (0..1) OF byte; 1480 76 1490 77 1500 78 alfa10= ARRAY (1..10) OF char; 1510 79 alfa20= ARRAY (1..20) OF char; 1520 80 1530 81 (* type necessary to compare sempointers *) 1540 82 point_rec = RECORD 1550 83 ! a: sempointer; 1560 84 END; 1570 85 1580 86 VAR 1590 87 (********* pools *********) 1600 88 opbufpool: pool 3 OF opbuftype; 1610 89 (*** bufs ***) 1620 90 testbufpool: pool 12 OF testbuftype; 1630 91 messbufpool: pool no_listen OF messbuftype; 1640 92 1650 93 (********** semaphores **********) 1660 94 countsem, (* used by "t"-command *) 1670 95 wsem, (* buffers written by the operatormodule is 1680 96 returned here *) 1690 97 wrsem (* buffers with content read by the operator 1700 98 module is returned here *) 1710 99 : semaphore; 1720 100 ts_sem : ARRAY (1..ts_sem_total) OF semaphore; 1730 101 1740 102 (********** references **********) 1750 103 countref, (* used by "t"-command *) 1760 104 opinref, (* ref. to buffer from operator *) 1770 105 opoutref, (* ref. to buffer to operator *) 1780 106 cur (* ref. to current buffer *) 1790 107 : reference; 1800 108 1810 109 (********** pointers **********) 1820 110 opsem: sempointer; 1830 111 worksem: sempointer; 1840 112 sem : ts_pointer_vector; 1850 113 1860 114 (********** zones **********) 1870 115 z: zone; 1880 116 1890 117 (********** char **********) 1900 118 command: char; (* the first char the operator typed *) 1910 119 1920 120 \f tstoslst 81.02.26. 13.07. page 4 1930 121 (********** integers **********) 1940 122 base, (* number base for input and output *) 1950 123 firstword, (* used by "o"-command *) 1960 124 i, 1970 125 incharsleft, (* no. of not yet read chars in opinbuffer *) 1980 126 j, 1990 127 k, 2000 128 lastword, (* used by "o"-command *) 2010 129 leftbyte, (* used by "p"-command *) 2020 130 moduleno, (* tested module *) 2030 131 noofparams, (* no. of params in operator line *) 2040 132 oldbase, (* used by the "b" command *) 2050 133 rightbyte, (* used by "p"-command *) 2060 134 semno, (* typed semaphore number *) 2070 135 curbufsize, (* in words *) 2080 136 curbuftype, (* 0 - 4 *) 2090 137 st (* storage requirements *) 2100 138 : integer; 2110 139 2120 140 (********** booleans **********) 2130 141 readok, (* indicates if the last call of readinteger 2140 142 yielded a result *) 2150 143 testmode 2160 144 : boolean; 2170 145 2180 146 (********** arrays **********) 2190 147 params: ARRAY(1..50) OF integer; (* holds parameters from operator *) 2200 148 sh: ARRAY(1..noofmodules) OF shadow; (* ref. to process incarn. *) 2210 149 2220 150 (********** param to use in create **********) 2230 151 dc_addr: macroaddr := macroaddr(7,0,0); 2240 152 nc_addr: macroaddr := macroaddr(7,5,0); 2250 153 ts_addr: macroaddr := macroaddr(7,5,4); 2260 154 2270 155 (*** auxiliary to compare sempointers ***) 2280 156 ap,bp : point_rec; 2290 157 \f tstoslst 81.02.26. 13.07. page 5 3010 158 (********** externals **********) 3020 159 PROCESS tssuper( 3030 160 op: sempointer; 3040 161 VAR ts_sem : !ts_pointer_vector); 3050 162 EXTERNAL; 3060 163 3070 164 PROCESS at_handler( 3080 165 op: sempointer; 3090 166 VAR 3100 167 dc_addr, 3110 168 ts_addr: !macroaddr; 3120 169 VAR ts_sem : !ts_pointer_vector); 3130 170 EXTERNAL; 3140 171 3150 172 PROCESS vc_handler( 3160 173 op: sempointer; 3170 174 VAR 3180 175 dc_addr, 3190 176 ts_addr: !macroaddr; 3200 177 VAR ts_sem : !ts_pointer_vector); 3210 178 EXTERNAL; 3220 179 3230 180 PROCESS timeout( 3240 181 opsem: sempointer; 3250 182 VAR timeoutsem: !ts_pointer; 3260 183 ticklength, max: integer); 3270 184 EXTERNAL; 3280 185 3290 186 PROCESS atconnector( 3300 187 opsem: sempointer; 3310 188 VAR 3320 189 atcsem, 3330 190 quesem : !ts_pointer; 3340 191 VAR 3350 192 athsem, 3360 193 driversem, 3370 194 timsem, 3380 195 com_sem: !sempointer; 3390 196 VAR 3400 197 dc_addr, 3410 198 ts_addr: !macroaddr; 3420 199 ownaddr: integer; 3430 200 channelno: byte); 3440 201 EXTERNAL; 3450 202 3460 203 PROCESS vcc( \f tstoslst 81.02.26. 13.07. page 6 3470 204 opsem: sempointer; 3480 205 VAR 3490 206 messem, 3500 207 quesem : !ts_pointer; 3510 208 VAR 3520 209 vchsem, 3530 210 lamsem, 3540 211 timeoutsem, 3550 212 com_sem: !sempointer; 3560 213 VAR 3570 214 dcaddr, 3580 215 tsaddr: !macroaddr; 3590 216 micaddr: integer; 3600 217 channelno: byte); 3610 218 EXTERNAL; 3620 219 3630 220 PROCESS tsconnector( 3640 221 opsem: sempointer; 3650 222 VAR 3660 223 tsssem, 3670 224 dcsem, 3680 225 ncsem, 3690 226 lamsem, 3700 227 timeoutsem, 3710 228 com_sem: !sempointer; 3720 229 VAR 3730 230 inputsem, 3740 231 semint1, 3750 232 semint2, 3760 233 semint3, 3770 234 semint4: !ts_pointer); 3780 235 EXTERNAL; 3790 236 3800 237 PROCESS lam( 3810 238 opsem: sempointer; 3820 239 pu, level: integer; 3830 240 VAR inputsem: !ts_pointer); 3840 241 EXTERNAL; 3850 242 3860 243 PROCESS vagt( 3870 244 opsem: sempointer; 3880 245 VAR sem: !ts_pointer_vector); 3890 246 EXTERNAL; 3900 247 3910 248 PROCESS dcmodule( 3920 249 opsem: sempointer; \f tstoslst 81.02.26. 13.07. page 7 3930 250 VAR sem1,sem2,sem3,sem4: !sempointer; 3940 251 VAR sem5,sem6,sem7,sem8: !ts_pointer); 3950 252 EXTERNAL; 3960 253 3970 254 PROCESS tap( 3980 255 opsem: sempointer; 3990 256 VAR tab_sem: !ts_pointer); 4000 257 EXTERNAL; 4010 258 4020 259 PROCESS ncsup( 4030 260 opsem: sempointer; 4040 261 VAR 4050 262 main, 4060 263 free, 4070 264 done: !ts_pointer; 4080 265 VAR 4090 266 net_sem, 4100 267 timeoutsem: !sempointer); 4110 268 EXTERNAL; 4120 269 4130 270 PROCEDURE setoflowmask( oflow: boolean); 4140 271 EXTERNAL; 4150 272 4160 273 4170 274 (********** forwards **********) 4180 275 4190 276 PROCEDURE getparams; 4200 277 FORWARD; 4210 278 4220 279 PROCEDURE outdecimal(int,positions: integer); 4230 280 FORWARD; 4240 281 4250 282 PROCEDURE outinteger(int,positions: integer); 4260 283 FORWARD; 4270 284 4280 285 PROCEDURE outstring10(text: alfa10); 4290 286 FORWARD; 4300 287 4310 288 PROCEDURE outstring12(text: alfa); 4320 289 FORWARD; 4330 290 4340 291 PROCEDURE outstring20(text: alfa20); 4350 292 FORWARD; 4360 293 4370 294 FUNCTION readchar: char; 4380 295 FORWARD; \f tstoslst 81.02.26. 13.07. page 8 4390 296 4400 297 FUNCTION readinteger: integer; 4410 298 FORWARD; 4420 299 4430 300 PROCEDURE repeatchar; 4440 301 FORWARD; 4450 302 4460 303 PROCEDURE testmodeout (text: alfa20; i: integer); 4470 304 FORWARD; 4480 305 4490 306 PROCEDURE writenl; 4500 307 FORWARD; 4510 308 \f tstoslst 81.02.26. 13.07. page 9 5010 309 PROCEDURE get_curbuftype; 5020 310 BEGIN 5030 311 1 ! IF cur^.size < minbufsize THEN 5040 312 2 ! curbuftype:= 0 ELSE 5050 313 3 ! IF cur^.size < messbufsize THEN 5060 314 4 ! curbuftype:= 1 ELSE 5070 315 5 ! IF cur^.size < maxbufsize THEN 5080 316 6 ! curbuftype:= 2 ELSE 5090 317 7 ! IF cur^.size < testbufsize THEN 5100 318 8 ! curbuftype:= 3 ELSE 5110 319 9 ! curbuftype:= 4; 5120 320 10 ! 5130 321 11 ! CASE curbuftype OF 5140 322 12 ! ! 0: curbufsize:= 0; 5150 323 13 ! ! 1: curbufsize:= minbufsize; 5160 324 14 ! ! 2: curbufsize:= messbufsize; 5170 325 15 ! ! 3: curbufsize:= maxbufsize; 5180 326 16 ! ! 4: curbufsize:= testbufsize; 5190 327 17 ! END; 5200 328 18 END; 5210 329 \f tstoslst 81.02.26. 13.07. page 10 6010 330 PROCEDURE getinput; 6020 331 (* reads input from console into opinref^ *) 6030 332 BEGIN 6040 333 1 ! 6050 334 2 ! testmodeout ("getinput called ",0); 6060 335 3 ! 6070 336 4 ! REPEAT 6080 337 5 ! ! LOCK opinref AS opbuf: opbuftype DO 6090 338 6 ! ! opbuf.next:= firstindex; 6100 339 7 ! ! signal (opinref, opsem^); 6110 340 8 ! ! wait (opinref, wrsem); 6120 341 9 ! UNTIL opinref^.u2= ok (* 0*); 6130 342 10 ! 6140 343 11 ! LOCK opinref AS opbuf: opbuftype DO 6150 344 12 ! WITH opbuf DO 6160 345 13 ! BEGIN 6170 346 14 ! ! incharsleft:= next - first; 6180 347 15 ! ! next:= firstindex; 6190 348 16 ! END; 6200 349 17 ! command:= readchar; 6210 350 18 ! 6220 351 19 ! testmodeout ("command read: ",ord(command)); 6230 352 20 ! 6240 353 21 ! getparams; 6250 354 22 END (* getinput *); 6260 355 \f tstoslst 81.02.26. 13.07. page 11 7010 356 PROCEDURE getparams; 7020 357 (* reads integer parameters *) 7030 358 VAR newbase: boolean; 7040 359 BEGIN 7050 360 1 ! testmodeout ("getparams called ",0); 7060 361 2 ! 7070 362 3 ! noofparams:= 0; 7080 363 4 ! 7090 364 5 ! IF command IN (."a","b","c","e","f","k","o","p","s","t","w","x".) 7100 365 6 ! THEN 7110 366 7 ! BEGIN (* change to decimal *) 7120 367 8 ! ! oldbase:= base; 7130 368 9 ! ! base:= 10; 7140 369 10 ! ! newbase:= true; 7150 370 11 ! END 7160 371 12 ! ELSE 7170 372 13 ! newbase:= false; 7180 373 14 ! 7190 374 15 ! REPEAT 7200 375 16 ! ! noofparams:= noofparams + 1; 7210 376 17 ! ! params(noofparams):= readinteger; 7220 377 18 ! ! testmodeout ("parameter read: ",params(noofparams)); 7230 378 19 ! ! IF (noofparams=1) THEN 7240 379 20 ! ! IF command IN (."f","p".) THEN 7250 380 21 ! ! BEGIN (* change to old *) 7260 381 22 ! ! ! base:= oldbase; 7270 382 23 ! ! ! newbase:= false; 7280 383 24 ! ! END; 7290 384 25 ! ! 7300 385 26 ! UNTIL (NOT readok) OR (noofparams= 50); 7310 386 27 ! 7320 387 28 ! noofparams:= noofparams - 1; 7330 388 29 ! 7340 389 30 ! IF newbase THEN 7350 390 31 ! (* change back to old base *) 7360 391 32 ! base:= oldbase; 7370 392 33 END (* getparams *); 7380 393 \f tstoslst 81.02.26. 13.07. page 12 8010 394 PROCEDURE init_proc( 8020 395 index: integer; 8030 396 name, 8040 397 inc_name : alfa; 8050 398 p : processrec; 8060 399 size, 8070 400 prio : integer); 8080 401 VAR 8090 402 okl, 8100 403 ok : integer; 8110 404 BEGIN 8120 405 1 ! IF NOT nil(sh(index)) THEN 8130 406 2 ! outstring20(alreadyexists) ELSE 8140 407 3 ! BEGIN 8150 408 4 ! ! IF noofparams<2 THEN st:= size; 8160 409 5 ! ! okl:= link(name,p.processref^); 8170 410 6 ! ! ok:= create(inc_name,p,sh(index),st); 8180 411 7 ! ! IF ok=0 THEN 8190 412 8 ! ! start(sh(index),prio) ELSE 8200 413 9 ! ! BEGIN 8210 414 10 ! ! ! ok:= ok*100+okl; 8220 415 11 ! ! ! outstring20(createerror); 8230 416 12 ! ! ! outstring12(inc_name); 8240 417 13 ! ! ! outdecimal(ok,5); 8250 418 14 ! ! ! writenl; 8260 419 15 ! ! ! okl:= unlink(p.processref^); 8270 420 16 ! ! END; 8280 421 17 ! END; 8290 422 18 END; 8300 423 \f tstoslst 81.02.26. 13.07. page 13 9010 424 PROCEDURE init_modul(index: integer); 9020 425 CONST 9030 426 n1 = "tssupervisor"; 9040 427 n2 = "at_handler "; 9050 428 n3 = "vc_handler "; 9060 429 n4 = "timeout "; 9070 430 n5 = "atconnector "; 9080 431 n6 = "vcatc "; 9090 432 n7 = "tsconnector "; 9100 433 n8 = "atvagtsim "; 9110 434 n9 = "lam "; 9120 435 n10= "tap "; 9130 436 n11= "dcmodule "; 9140 437 n13= "ncsupervisor"; 9150 438 n14= "vcitc "; 9160 439 n15= "itvagtsim "; 9170 440 n16= "alc "; 9180 441 BEGIN 9190 442 1 ! CASE index OF 9200 443 2 ! ! 1: (* tssup *) 9210 444 3 ! ! init_proc(index, n1, n1, 9220 445 4 ! ! tssuper( opsem, sem), 9230 446 5 ! ! tss_size,tss_pri); 9240 447 6 ! ! 2: (* ath *) 9250 448 7 ! ! init_proc(index, n2, n2, 9260 449 8 ! ! at_handler( opsem, dc_addr, ts_addr, sem), 9270 450 9 ! ! ath_size,ath_pri); 9280 451 10 ! ! 3: (* vch *) 9290 452 11 ! ! init_proc(index, n3, n3, 9300 453 12 ! ! vc_handler( opsem, dc_addr, ts_addr, sem), 9310 454 13 ! ! vch_size,vch_pri); 9320 455 14 ! ! 4: (* timeout *) 9330 456 15 ! ! init_proc(index, n4, n4, 9340 457 16 ! ! timeout( opsem, sem(timeout_sem_no), time_out_unit, 40), 9350 458 17 ! ! tim_size,tim_pri); 9360 459 18 ! ! 5: (* atc *) 9370 460 19 ! ! init_proc(index, n5, n5, 9380 461 20 ! ! atconnector( opsem, sem(atc_sem_no), sem(atc_sem_no+1), 9390 462 21 ! ! sem(ath_sem_no).s, sem(lam_sem_no).s, sem(timeout_sem_no).s, 9400 463 22 ! ! sem(com_pool).w, dc_addr, ts_addr, 257, 7), 9410 464 23 ! ! atc_size,atc_pri); 9420 465 24 ! ! 6: (* vcatc *) 9430 466 25 ! ! init_proc(index, n6, n6, 9440 467 26 ! ! vcc( opsem, sem(vcc_sem_no), sem(vcc_sem_no+1), 9450 468 27 ! ! sem(vch_sem_no).s, sem(vas_sem_no).s, sem(timeout_sem_no).s, 9460 469 28 ! ! sem(com_pool).w, dc_addr, ts_addr, 63, 2), \f tstoslst 81.02.26. 13.07. page 14 9470 470 29 ! ! vac_size, vcc_pri); 9480 471 30 ! ! 7: (* tsc *) 9490 472 31 ! ! init_proc(index, n7, n7, 9500 473 32 ! ! tsconnector( opsem, sem(tssup_sem_no).s, 9510 474 33 ! ! sem(dc_sem_no).s, 9520 475 34 ! ! sem(nc_sem_no).s, sem(lam_sem_no).s, sem(timeout_sem_no).s, 9530 476 35 ! ! sem(com_pool).w, sem(netc_sem_no), 9540 477 36 ! ! sem(net_int1), sem(net_int2), 9550 478 37 ! ! sem(net_int3), sem(net_int4)), 9560 479 38 ! ! tsc_size, tsc_pri); 9570 480 39 ! ! 8: (* atvagtsim *) 9580 481 40 ! ! init_proc(index, n8, n8, 9590 482 41 ! ! vagt( opsem, sem), 9600 483 42 ! ! vas_size, vc_sim_pri); 9610 484 43 ! ! 9: (* lam *) 9620 485 44 ! ! init_proc(index, n9, n9, 9630 486 45 ! ! lam( opsem, pu, 5, sem(lam_sem_no)), 9640 487 46 ! ! lam_size, lam_pri); 9650 488 47 ! ! 10: (* tap *) 9660 489 48 ! ! init_proc(index, n10, n10, 9670 490 49 ! ! tap( opsem, sem(tap_sem_no)), 9680 491 50 ! ! 512, 0); 9690 492 51 ! ! 11: (* dc *) 9700 493 52 ! ! init_proc(index, n11, n11, 9710 494 53 ! ! dcmodule( opsem, sem(lam_sem_no).s, sem(netc_sem_no).s, 9720 495 54 ! ! sem(com_pool).w, sem(timeout_sem_no).s, 9730 496 55 ! ! sem(dc_sem_no), sem(dc_int1), sem(dc_int2), sem(dc_int3)), 9740 497 56 ! ! dc_sim_size, dc_sim_pri); 9750 498 57 ! ! 12: (* tap01 *) 9760 499 58 ! ! init_proc(index, n10, "tap01 ", 9770 500 59 ! ! tap ( opsem, sem(tap1_sem_no)), 9780 501 60 ! ! 512, 0); 9790 502 61 ! ! 13: (* ncsupervisor *) 9800 503 62 ! ! init_proc(index, n13, n13, 9810 504 63 ! ! ncsup( opsem, sem(nc_sem_no), sem(ncsup_int1), sem(ncsup_int2), 9820 505 64 ! ! sem(netc_sem_no).s, sem(timeout_sem_no).s), 9830 506 65 ! ! nc_sup_size, tss_pri); 9840 507 66 ! ! 14: (* vcitc *) 9850 508 67 ! ! init_proc(index, n14, n14, 9860 509 68 ! ! vcc( opsem, sem(vcc_sem_no+2), sem(vcc_sem_no+3), 9870 510 69 ! ! sem(vch_sem_no).s, sem(vis_sem_no).s, sem(timeout_sem_no).s, 9880 511 70 ! ! sem(com_pool).w, dc_addr, ts_addr, 64, 3), 9890 512 71 ! ! vic_size, vcc_pri); 9900 513 72 ! ! 15: (* itvagtsim *) 9910 514 73 ! ! init_proc(index, n15, n15, 9920 515 74 ! ! vagt( opsem, sem), \f tstoslst 81.02.26. 13.07. page 15 9930 516 75 ! ! vis_size, vc_sim_pri); 9940 517 76 ! ! OTHERWISE 9950 518 77 ! ! BEGIN 9960 519 78 ! ! ! outdecimal(index,4); 9970 520 79 ! ! ! outstring10(illegalno); 9980 521 80 ! ! END; 9990 522 81 ! END (* case *) 10000 523 82 END; 10010 524 \f tstoslst 81.02.26. 13.07. page 16 11010 525 FUNCTION moduleready(moduleno: integer): boolean; 11020 526 (* tests if an incarnation of the module is existing 11030 527 and writes an errormessage if so *) 11040 528 BEGIN 11050 529 1 ! IF nil( sh( moduleno) ) THEN moduleready:=true 11060 530 2 ! ELSE 11070 531 3 ! BEGIN (* module is already existing *) 11080 532 4 ! ! outdecimal(moduleno,4); 11090 533 5 ! ! outstring20(alreadyexists); 11100 534 6 ! ! moduleready:=false; 11110 535 7 ! END; 11120 536 8 END (* module ready *); 11130 537 11140 538 11150 539 \f tstoslst 81.02.26. 13.07. page 17 12010 540 PROCEDURE outchar(ch:char); 12020 541 (* writes ch into the output buffer *) 12030 542 BEGIN 12040 543 1 ! LOCK opoutref AS opbuf: opbuftype DO 12050 544 2 ! WITH opbuf DO 12060 545 3 ! BEGIN 12070 546 4 ! ! last:= last + 1; 12080 547 5 ! ! data (last):= ch; 12090 548 6 ! END; 12100 549 7 END (* outchar *); 12110 550 \f tstoslst 81.02.26. 13.07. page 18 13010 551 PROCEDURE outdecimal (int, positions: integer); 13020 552 (* writes the integer "int" decimally into opbuf starting 13030 553 at "last", which is updated accordingly *) 13040 554 13050 555 BEGIN 13060 556 1 ! oldbase:= base; 13070 557 2 ! base:= 10; 13080 558 3 ! outinteger(int,positions); 13090 559 4 ! base:= oldbase; 13100 560 5 END (* outdecimal *); 13110 561 \f tstoslst 81.02.26. 13.07. page 19 14010 562 PROCEDURE outinteger(int,positions:integer); 14020 563 (* writes the integer "int" into opbuf starting at 14030 564 "last", which is updated accordingly *) 14040 565 CONST 14050 566 maxpos = 20; (* max number of positions in layout *) 14060 567 14070 568 VAR 14080 569 bits: ARRAY(0..15) OF bit; 14090 570 digits:ARRAY(1..maxpos) OF char; 14100 571 curdigit, (* current pos. in digits-array to be filled out *) 14110 572 curpos, (* cur. pos. in the nunber being computed *) 14120 573 h, i, 14130 574 m, newm, 14140 575 noofdig, (* no. of digits in the resulting number *) 14150 576 noofpos, (* no. of pos. from bits-array for one number *) 14160 577 res, (* resulting number *) 14170 578 used: integer; 14180 579 14190 580 negative, zeroes: boolean; 14200 581 14210 582 BEGIN 14220 583 1 ! used:= 1; 14230 584 2 ! 14240 585 3 ! (* first we initialise the digits array *) 14250 586 4 ! FOR i:=1 TO maxpos DO digits(i):=sp; 14260 587 5 ! 14270 588 6 ! IF base= 10 THEN 14280 589 7 ! BEGIN 14290 590 8 ! ! i:=maxpos; 14300 591 9 ! ! 14310 592 10 ! ! negative:= int<0; 14320 593 11 ! ! 14330 594 12 ! ! REPEAT 14340 595 13 ! ! ! (* now we unpack the digits backwards and put them 14350 596 14 ! ! ! into the digits array *) 14360 597 15 ! ! ! 14370 598 16 ! ! ! digits(i):= chr (abs(int MOD base) + ord("0")); 14380 599 17 ! ! ! int:=int DIV base; 14390 600 18 ! ! ! i:=i-1; 14400 601 19 ! ! UNTIL (i=1) OR (int=0); 14410 602 20 ! ! 14420 603 21 ! ! IF negative THEN 14430 604 22 ! ! BEGIN 14440 605 23 ! ! ! digits(i):="-"; 14450 606 24 ! ! ! i:=i-1; 14460 607 25 ! ! END; \f tstoslst 81.02.26. 13.07. page 20 14470 608 26 ! ! 14480 609 27 ! ! used:=maxpos-i; 14490 610 28 ! ! 14500 611 29 ! ! IF int <> 0 THEN digits(1):= "*"; 14510 612 30 ! END (* if base= 10 *) 14520 613 31 ! 14530 614 32 ! ELSE (* base= 2, 8, or 16 *) 14540 615 33 ! BEGIN 14550 616 34 ! ! (* initialise bits-array *) 14560 617 35 ! ! IF int>=0 THEN 14570 618 36 ! ! BEGIN 14580 619 37 ! ! ! FOR i:= 15 DOWNTO 1 DO 14590 620 38 ! ! ! BEGIN 14600 621 39 ! ! ! ! bits(i):= int MOD 2; 14610 622 40 ! ! ! ! int:= int DIV 2; 14620 623 41 ! ! ! END; 14630 624 42 ! ! ! bits(0):= int MOD 2; 14640 625 43 ! ! ! int:= int DIV 2; 14650 626 44 ! ! END 14660 627 45 ! ! ELSE 14670 628 46 ! ! (* int<0 *) 14680 629 47 ! ! BEGIN 14690 630 48 ! ! ! (* subtract abs(int) from 1111111...1 *) 14700 631 49 ! ! ! FOR i:= 15 DOWNTO 1 DO 14710 632 50 ! ! ! BEGIN 14720 633 51 ! ! ! ! bits(i):= 1+(int MOD 2); 14730 634 52 ! ! ! ! int:= int DIV 2; 14740 635 53 ! ! ! END; 14750 636 54 ! ! ! bits(0):= 1+(int MOD 2); 14760 637 55 ! ! ! int:= int DIV 2; 14770 638 56 ! ! ! 14780 639 57 ! ! ! (* add 1 *) 14790 640 58 ! ! ! m:= 1; 14800 641 59 ! ! ! FOR i:= 15 DOWNTO 1 DO 14810 642 60 ! ! ! BEGIN 14820 643 61 ! ! ! ! newm:= (bits(i)+m) DIV 2; 14830 644 62 ! ! ! ! bits(i):= (bits(i)+m) MOD 2; 14840 645 63 ! ! ! ! m:= newm; 14850 646 64 ! ! ! END; 14860 647 65 ! ! ! newm:= (bits(0)+m) DIV 2; 14870 648 66 ! ! ! bits(0):= (bits(0)+m) MOD 2; 14880 649 67 ! ! ! m:= newm; 14890 650 68 ! ! END (*int<0*); 14900 651 69 ! ! 14910 652 70 ! ! (* compute digits-array *) 14920 653 71 ! ! CASE base OF \f tstoslst 81.02.26. 13.07. page 21 14930 654 72 ! ! ! 2: BEGIN 14940 655 73 ! ! ! ! noofpos:= 1; 14950 656 74 ! ! ! ! noofdig:= 16; 14960 657 75 ! ! ! END; 14970 658 76 ! ! ! 14980 659 77 ! ! ! 8: BEGIN 14990 660 78 ! ! ! ! noofpos:= 3; 15000 661 79 ! ! ! ! noofdig:= 6; 15010 662 80 ! ! ! END; 15020 663 81 ! ! ! 15030 664 82 ! ! ! 16: BEGIN 15040 665 83 ! ! ! ! noofpos:= 4; 15050 666 84 ! ! ! ! noofdig:= 4; 15060 667 85 ! ! ! END; 15070 668 86 ! ! END (* case *); 15080 669 87 ! ! 15090 670 88 ! ! curdigit:= maxpos -noofdig +1; 15100 671 89 ! ! 15110 672 90 ! ! IF base= 8 15120 673 91 ! ! THEN curpos:= 3 15130 674 92 ! ! ELSE curpos:= 1; 15140 675 93 ! ! res:= 0; 15150 676 94 ! ! zeroes:= true; 15160 677 95 ! ! 15170 678 96 ! ! FOR h:= 0 TO 15 DO 15180 679 97 ! ! BEGIN 15190 680 98 ! ! ! res:= res*2 + bits(h); 15200 681 99 ! ! ! IF curpos= noofpos THEN 15210 682 100 ! ! ! BEGIN (* time to fill out a pos. in digits-array *) 15220 683 101 ! ! ! ! IF zeroes AND (res=0) THEN 15230 684 102 ! ! ! ! BEGIN 15240 685 103 ! ! ! ! ! IF curdigit=maxpos 15250 686 104 ! ! ! ! ! THEN digits(curdigit):= "0" 15260 687 105 ! ! ! ! ! (*else digits (curdigit):= " "*); 15270 688 106 ! ! ! ! END 15280 689 107 ! ! ! ! ELSE 15290 690 108 ! ! ! ! IF res<=9 15300 691 109 ! ! ! ! THEN digits(curdigit):= chr (res + ord ("0")) 15310 692 110 ! ! ! ! ELSE digits(curdigit):= chr (res + ord ("7")); 15320 693 111 ! ! ! ! IF (res<>0) AND zeroes THEN 15330 694 112 ! ! ! ! BEGIN 15340 695 113 ! ! ! ! ! zeroes:= false; 15350 696 114 ! ! ! ! ! used:= maxpos - curdigit + 1; 15360 697 115 ! ! ! ! END; 15370 698 116 ! ! ! ! res:= 0; 15380 699 117 ! ! ! ! curpos:= 0; \f tstoslst 81.02.26. 13.07. page 22 15390 700 118 ! ! ! ! curdigit:= curdigit + 1; 15400 701 119 ! ! ! END; 15410 702 120 ! ! ! curpos:= curpos + 1; 15420 703 121 ! ! END; 15430 704 122 ! END (* base= 2, 8, of 16 *); 15440 705 123 ! 15450 706 124 ! IF positions<used THEN outchar(sp); 15460 707 125 ! 15470 708 126 ! IF (NOT (positions IN (. 1 .. maxpos .)) ) 15480 709 127 ! OR (positions < used) THEN 15490 710 128 ! positions:=used; 15500 711 129 ! 15510 712 130 ! FOR i:=maxpos+1-positions TO maxpos DO 15520 713 131 ! BEGIN 15530 714 132 ! ! outchar( digits(i) ); 15540 715 133 ! END 15550 716 134 ! 15560 717 135 END (* out integer *); 15570 718 15580 719 15590 720 \f tstoslst 81.02.26. 13.07. page 23 16010 721 PROCEDURE outstring10(text: alfa10); 16020 722 (* writes the text into opbuf starting at outputpointer 16030 723 which is updated accordingly *) 16040 724 VAR 16050 725 i: integer; 16060 726 BEGIN 16070 727 1 ! FOR i:=1 TO 10 DO 16080 728 2 ! outchar( text(i) ); 16090 729 3 END (* out string 10 *); 16100 730 16110 731 PROCEDURE outstring12(text: alfa); 16120 732 VAR 16130 733 i: integer; 16140 734 BEGIN 16150 735 1 ! FOR i:=1 TO 12 DO 16160 736 2 ! outchar(text(i)); 16170 737 3 END; 16180 738 \f tstoslst 81.02.26. 13.07. page 24 17010 739 PROCEDURE outstring20(text: alfa20); 17020 740 (* analogue to outstring10 *) 17030 741 VAR 17040 742 i: integer; 17050 743 BEGIN 17060 744 1 ! FOR i:=1 TO 20 DO 17070 745 2 ! outchar( text(i) ); 17080 746 3 END (* out string 20 *); 17090 747 17100 748 17110 749 17120 750 \f tstoslst 81.02.26. 13.07. page 25 18010 751 FUNCTION readchar: char; 18020 752 (* reads the next char from opinref^. 18030 753 next is incremented and charsleft is 18040 754 decremented *) 18050 755 BEGIN 18060 756 1 ! LOCK opinref AS opbuf: opbuftype DO 18070 757 2 ! WITH opbuf DO 18080 758 3 ! BEGIN 18090 759 4 ! ! readchar:= data(next); 18100 760 5 ! ! next:= next + 1; 18110 761 6 ! END; 18120 762 7 ! incharsleft:=incharsleft-1; 18130 763 8 END (* readchar *); 18140 764 18150 765 18160 766 18170 767 \f tstoslst 81.02.26. 13.07. page 26 19010 768 FUNCTION readinteger : integer; 19020 769 (* reads the next integer from opinref^ starting 19030 770 at "inputpoint". upon return "inputpoint" will be 19040 771 the position just after the last char read. 19050 772 19060 773 the global boolean "readok" will be true if an 19070 774 integer was read and false otherwise *) 19080 775 19090 776 CONST 19100 777 digits = (. "0" .. "9" .); 19110 778 hexdigits = (. "a" .. "f" .); 19120 779 signs = (. "+" , "-" .); 19130 780 19140 781 VAR 19150 782 negative, digit: boolean; 19160 783 19170 784 curdigit, noofdigit, 19180 785 result: integer; 19190 786 19200 787 ch,lastchar: char; 19210 788 19220 789 19230 790 BEGIN 19240 791 1 ! readok:=false; 19250 792 2 ! lastchar:=nul; 19260 793 3 ! ch:=nul; 19270 794 4 ! digit:=false; 19280 795 5 ! 19290 796 6 ! (* now skip until a digit is encountered *) 19300 797 7 ! 19310 798 8 ! IF incharsleft > 0 THEN 19320 799 9 ! REPEAT 19330 800 10 ! ! lastchar:=ch; 19340 801 11 ! ! ch:=readchar; 19350 802 12 ! ! digit:= (ch IN digits) OR 19360 803 13 ! ! ((base= 16) AND (ch IN hexdigits)) 19370 804 14 ! UNTIL digit OR (incharsleft<=0); 19380 805 15 ! 19390 806 16 ! result:=0; 19400 807 17 ! IF base= 10 THEN 19410 808 18 ! negative:= lastchar= "-" 19420 809 19 ! ELSE negative:= false; 19430 810 20 ! 19440 811 21 ! 19450 812 22 ! IF digit THEN 19460 813 23 ! BEGIN \f tstoslst 81.02.26. 13.07. page 27 19470 814 24 ! ! IF ch IN digits 19480 815 25 ! ! THEN result:= ord (ch) - ord ("0") 19490 816 26 ! ! ELSE result:= ord (ch) - 87 (*ord ("W")*); 19500 817 27 ! ! readok:=true; 19510 818 28 ! END; 19520 819 29 ! 19530 820 30 ! IF base=10 THEN 19540 821 31 ! BEGIN 19550 822 32 ! ! WHILE digit AND (incharsleft>0) DO 19560 823 33 ! ! BEGIN (* read the digits *) 19570 824 34 ! ! ! ch:= readchar; 19580 825 35 ! ! ! 19590 826 36 ! ! ! digit:= (ch IN digits) OR 19600 827 37 ! ! ! ((base= 16) AND (ch IN hexdigits)); 19610 828 38 ! ! ! IF digit THEN 19620 829 39 ! ! ! BEGIN 19630 830 40 ! ! ! ! IF negative AND (result=3276) AND (ch="8") 19640 831 41 ! ! ! ! THEN BEGIN 19650 832 42 ! ! ! ! ! result:= -32768; 19660 833 43 ! ! ! ! ! negative:= false; 19670 834 44 ! ! ! ! END 19680 835 45 ! ! ! ! ELSE 19690 836 46 ! ! ! ! BEGIN 19700 837 47 ! ! ! ! ! IF ch IN digits 19710 838 48 ! ! ! ! ! THEN result:= result*base+(ord(ch)-ord("0")) 19720 839 49 ! ! ! ! ! ELSE result:= result*base+(ord(ch)-87(*ord("W")*)); 19730 840 50 ! ! ! ! END; 19740 841 51 ! ! ! END; 19750 842 52 ! ! END (* while *); 19760 843 53 ! ! 19770 844 54 ! ! IF negative THEN result:= - result; 19780 845 55 ! ! 19790 846 56 ! END (* base= 10 *) 19800 847 57 ! 19810 848 58 ! ELSE 19820 849 59 ! BEGIN (* base= 2, 8, or 16 *) 19830 850 60 ! ! 19840 851 61 ! ! CASE base OF 19850 852 62 ! ! ! 2:BEGIN 19860 853 63 ! ! ! ! IF ch="1" THEN negative:= true; 19870 854 64 ! ! ! ! noofdigit:= 16; 19880 855 65 ! ! ! END; 19890 856 66 ! ! ! 19900 857 67 ! ! ! 8: BEGIN 19910 858 68 ! ! ! ! IF ch="1" THEN negative:= true; 19920 859 69 ! ! ! ! noofdigit:= 6; \f tstoslst 81.02.26. 13.07. page 28 19930 860 70 ! ! ! END; 19940 861 71 ! ! ! 19950 862 72 ! ! ! 16: BEGIN 19960 863 73 ! ! ! ! IF ch>="8" THEN negative:= true; 19970 864 74 ! ! ! ! noofdigit:= 4; 19980 865 75 ! ! ! END; 19990 866 76 ! ! END (*case*); 20000 867 77 ! ! curdigit:= 1; 20010 868 78 ! ! 20020 869 79 ! ! WHILE digit AND (incharsleft>0) DO 20030 870 80 ! ! BEGIN 20040 871 81 ! ! ! ch:= readchar; 20050 872 82 ! ! ! digit:= (ch IN digits) OR 20060 873 83 ! ! ! ((base=16) AND (ch IN hexdigits)); 20070 874 84 ! ! ! IF digit 20080 875 85 ! ! ! THEN BEGIN 20090 876 86 ! ! ! ! curdigit:= curdigit+1; 20100 877 87 ! ! ! ! IF (curdigit=noofdigit) AND negative THEN 20110 878 88 ! ! ! ! BEGIN 20120 879 89 ! ! ! ! ! CASE base OF 20130 880 90 ! ! ! ! ! ! 2: result:= result - 16384 (*2^14*); 20140 881 91 ! ! ! ! ! ! 8: result:= result - 4096 (*2^12*); 20150 882 92 ! ! ! ! ! ! 16:result:= result - 2048 (*2^11*); 20160 883 93 ! ! ! ! ! END (*case*) 20170 884 94 ! ! ! ! END; 20180 885 95 ! ! ! ! IF ch IN digits THEN 20190 886 96 ! ! ! ! result:= result*base + (ord(ch)-ord("0")) 20200 887 97 ! ! ! ! ELSE 20210 888 98 ! ! ! ! result:= result*base + (ord(ch)-87 (*ord("W")*)); 20220 889 99 ! ! ! ! IF (curdigit=noofdigit) AND negative 20230 890 100 ! ! ! ! THEN BEGIN 20240 891 101 ! ! ! ! ! IF result=0 20250 892 102 ! ! ! ! ! THEN result:= -32768 20260 893 103 ! ! ! ! ! ELSE result:= -((32767-result)+1); 20270 894 104 ! ! ! ! END; 20280 895 105 ! ! ! END (*if digit*); 20290 896 106 ! ! END (*while digit*); 20300 897 107 ! END (* base= 2, 8, or 16 *); 20310 898 108 ! IF incharsleft > 0 THEN 20320 899 109 ! (* we read one char too many - spit it out *) 20330 900 110 ! repeatchar; 20340 901 111 ! 20350 902 112 ! readinteger:=result; 20360 903 113 END (* read integer *); 20370 904 \f tstoslst 81.02.26. 13.07. page 29 21010 905 PROCEDURE repeatchar; 21020 906 BEGIN 21030 907 1 ! LOCK opinref AS opbuf: opbuftype DO 21040 908 2 ! opbuf.next:= opbuf.next - 1; 21050 909 3 ! incharsleft:= incharsleft + 1; 21060 910 4 END; 21070 911 \f tstoslst 81.02.26. 13.07. page 30 22010 912 FUNCTION testinterval (i,first,last: integer): boolean; 22020 913 (* true if first<=i<=last *) 22030 914 BEGIN 22040 915 1 ! IF (i<first) OR (i>last) THEN 22050 916 2 ! BEGIN 22060 917 3 ! ! outstring10(illegalno); 22070 918 4 ! ! outinteger(i,4); 22080 919 5 ! ! writenl; 22090 920 6 ! ! testinterval:= false 22100 921 7 ! END 22110 922 8 ! ELSE 22120 923 9 ! testinterval:= true; 22130 924 10 END; 22140 925 \f tstoslst 81.02.26. 13.07. page 31 23010 926 PROCEDURE testmodeout (text: alfa20; i: integer); 23020 927 BEGIN 23030 928 1 ! IF testmode THEN 23040 929 2 ! BEGIN 23050 930 3 ! ! outstring20 (text); 23060 931 4 ! ! outinteger (i, 4); 23070 932 5 ! ! writenl; 23080 933 6 ! END; 23090 934 7 END (* testout *); 23100 935 \f tstoslst 81.02.26. 13.07. page 32 24010 936 PROCEDURE testsem(i: integer); 24020 937 (* test the semaphore "sem( semno)", and 24030 938 writes its status on the console if it is 24040 939 non-passive *) 24050 940 VAR more: boolean; 24060 941 BEGIN 24070 942 1 ! 24080 943 2 ! ap.a := sem(i).s; 24090 944 3 ! bp.a := sem(i).w; 24100 945 4 ! IF open (ts_sem(i)) THEN 24110 946 5 ! BEGIN (* user semaphore no. i is open *) 24120 947 6 ! ! IF ap=bp THEN 24130 948 7 ! ! outchar(" ") ELSE outchar("^"); 24140 949 8 ! ! outdecimal(i,3); 24150 950 9 ! ! outchar(":"); 24160 951 10 ! ! more:= true; 24170 952 11 ! ! 24180 953 12 ! ! (* now count the no. of buffers on this semaphore *) 24190 954 13 ! ! j:=0; (* j is the counter *) 24200 955 14 ! ! WHILE more DO 24210 956 15 ! ! BEGIN 24220 957 16 ! ! ! sensesem(countref, ts_sem(i)); 24230 958 17 ! ! ! IF nil(countref) THEN 24240 959 18 ! ! ! more:= false 24250 960 19 ! ! ! ELSE 24260 961 20 ! ! ! BEGIN 24270 962 21 ! ! ! ! signal(countref,countsem); 24280 963 22 ! ! ! ! j:=j+1; 24290 964 23 ! ! ! END 24300 965 24 ! ! END; 24310 966 25 ! ! 24320 967 26 ! ! outdecimal(j,3); 24330 968 27 ! ! WHILE open(countsem) DO 24340 969 28 ! ! BEGIN (* return the buffers to sem(i) *) 24350 970 29 ! ! ! wait(countref,countsem); 24360 971 30 ! ! ! signal(countref, ts_sem(i)); 24370 972 31 ! ! END; 24380 973 32 ! ! 24390 974 33 ! ! writenl; 24400 975 34 ! END (* open *) 24410 976 35 ! ELSE 24420 977 36 ! IF locked( ts_sem(i)) THEN 24430 978 37 ! BEGIN (* user semaphore no. i is locked *) 24440 979 38 ! ! IF ap=bp THEN 24450 980 39 ! ! outchar(" ") ELSE outchar("^"); 24460 981 40 ! ! outdecimal(i,3); \f tstoslst 81.02.26. 13.07. page 33 24470 982 41 ! ! outchar(":"); 24480 983 42 ! ! outstring10(" locked "); 24490 984 43 ! ! writenl; 24500 985 44 ! END; 24510 986 45 END (* testsem *); 24520 987 24530 988 24540 989 24550 990 24560 991 \f tstoslst 81.02.26. 13.07. page 34 25010 992 PROCEDURE writenl; 25020 993 (* prepares opbuf for output to the operator and signals 25030 994 it to operator module *) 25040 995 BEGIN 25050 996 1 ! IF NOT nil(opoutref) THEN 25060 997 2 ! BEGIN 25070 998 3 ! ! outchar(nl); 25080 999 4 ! ! signal(opoutref, opsem^) 25090 1000 5 ! END; 25100 1001 6 ! wait(opoutref, wsem); 25110 1002 7 ! LOCK opoutref AS opbuf: opbuftype DO 25120 1003 8 ! opbuf.last:= firstindex; 25130 1004 9 END (* writenl *); 25140 1005 25150 1006 \f tstoslst 81.02.26. 13.07. page 35 26010 1007 26020 1008 26030 1009 26040 1010 (**************************************** 26050 1011 * * 26060 1012 * m a i n p r o g r a m * 26070 1013 * * 26080 1014 ****************************************) 26090 1015 26100 1016 26110 1017 26120 1018 26130 1019 26140 1020 26150 1021 BEGIN 26160 1022 1 ! 26170 1023 2 ! opsem:= semvector(operatorsem); 26180 1024 3 ! testmode:= false; 26190 1025 4 ! testopen (z,"test-opsys ",opsem); 26200 1026 5 ! testout(z,version,al_env_version); 26210 1027 6 ! 26220 1028 7 ! (* initialise pointers *) 26230 1029 8 ! FOR i:=1 TO ts_sem_total DO 26240 1030 9 ! BEGIN 26250 1031 10 ! ! sem(i).s:= ref(ts_sem(i)); 26260 1032 11 ! ! sem(i).w:= sem(i).s; 26270 1033 12 ! END; 26280 1034 13 ! 26290 1035 14 ! (* initialise buffers *) 26300 1036 15 ! FOR i:= 1 TO 2 DO 26310 1037 16 ! BEGIN 26320 1038 17 ! ! alloc (opoutref, opbufpool, wsem); 26330 1039 18 ! ! opoutref^.u1:=2; (* write *) 26340 1040 19 ! ! LOCK opoutref AS opbuf: opbuftype DO 26350 1041 20 ! ! WITH opbuf DO 26360 1042 21 ! ! BEGIN 26370 1043 22 ! ! ! first:= firstindex; 26380 1044 23 ! ! ! name:= "test "; 26390 1045 24 ! ! ! data(firstindex):= "!"; 26400 1046 25 ! ! END; 26410 1047 26 ! ! return (opoutref); 26420 1048 27 ! END; 26430 1049 28 ! writenl; 26440 1050 29 ! 26450 1051 30 ! alloc(opinref, opbufpool, wrsem); 26460 1052 31 ! \f tstoslst 81.02.26. 13.07. page 36 26470 1053 32 ! opinref^.u1:=1; (* read *) 26480 1054 33 ! 26490 1055 34 ! LOCK opinref AS opbuf: opbuftype DO 26500 1056 35 ! WITH opbuf DO 26510 1057 36 ! BEGIN 26520 1058 37 ! ! first:= firstindex; 26530 1059 38 ! ! last:= lastindex; 26540 1060 39 ! ! name:= "test "; 26550 1061 40 ! END; 26560 1062 41 ! 26570 1063 42 ! FOR i:= 1 TO no_listen DO 26580 1064 43 ! BEGIN 26590 1065 44 ! ! alloc(cur,messbufpool,sem(com_pool).s^); 26600 1066 45 ! ! return(cur); 26610 1067 46 ! END; 26620 1068 47 ! st:= 1024; 26630 1069 48 ! base:= 10; 26640 1070 49 ! firstword:= 1; 26650 1071 50 ! lastword:= 10; 26660 1072 51 ! 26670 1073 52 ! setoflowmask(true); 26680 1074 53 ! 26690 1075 54 ! noofparams:= 0; 26700 1076 55 ! (* insert auto create with edit here *) 26710 1077 56 ! 26720 1078 57 ! REPEAT 26730 1079 58 ! ! (* read a line of input from the operator and execute it *) 26740 1080 59 ! ! 26750 1081 60 ! ! getinput; 26760 1082 61 ! ! 26770 1083 62 ! ! CASE command OF 26780 1084 63 ! ! ! 26790 1085 64 ! ! ! ";": (* comment command *) 26800 1086 65 ! ! ! BEGIN 26810 1087 66 ! ! ! END; 26820 1088 67 ! ! ! \f tstoslst 81.02.26. 13.07. page 37 27010 1089 68 ! ! ! "a": (* alloc *) 27020 1090 69 ! ! ! (* a buffer is allocated from the messbufpool to the current 27030 1091 70 ! ! ! reference "cur". 27040 1092 71 ! ! ! 1st param is the answersem *) 27050 1093 72 ! ! ! BEGIN 27060 1094 73 ! ! ! ! semno:= params(1); 27070 1095 74 ! ! ! ! 27080 1096 75 ! ! ! ! IF noofparams >= 1 THEN 27090 1097 76 ! ! ! ! IF nil(cur) THEN 27100 1098 77 ! ! ! ! IF (1<=semno) AND (semno<=noofsemaphores) THEN 27110 1099 78 ! ! ! ! BEGIN 27120 1100 79 ! ! ! ! ! alloc (cur, testbufpool, sem(semno).s^); 27130 1101 80 ! ! ! ! ! WITH cur^ DO 27140 1102 81 ! ! ! ! ! BEGIN 27150 1103 82 ! ! ! ! ! ! u1:= 0; 27160 1104 83 ! ! ! ! ! ! u2:= 0; 27170 1105 84 ! ! ! ! ! ! u3:= 0; 27180 1106 85 ! ! ! ! ! ! u4:= 0; 27190 1107 86 ! ! ! ! ! END; 27200 1108 87 ! ! ! ! ! get_curbuftype; 27210 1109 88 ! ! ! ! ! outstring10(" bufsize "); 27220 1110 89 ! ! ! ! ! outinteger(curbufsize, 5); 27230 1111 90 ! ! ! ! ! outinteger(cur^.size, 5) 27240 1112 91 ! ! ! ! END 27250 1113 92 ! ! ! ! ELSE outstring10(illegalno) 27260 1114 93 ! ! ! ! ELSE outstring20("you already have one") 27270 1115 94 ! ! ! ! ELSE outstring10(noparam) 27280 1116 95 ! ! ! END (* alloc*); 27290 1117 96 ! ! ! \f tstoslst 81.02.26. 13.07. page 38 28010 1118 97 ! ! ! "b": (* base *) 28020 1119 98 ! ! ! (* defines the number base for input as well as output *) 28030 1120 99 ! ! ! (* the base is always read decimally *) 28040 1121 100 ! ! ! BEGIN 28050 1122 101 ! ! ! ! IF noofparams < 1 THEN 28060 1123 102 ! ! ! ! BEGIN 28070 1124 103 ! ! ! ! ! base:= oldbase; 28080 1125 104 ! ! ! ! ! outstring10(noparam) 28090 1126 105 ! ! ! ! END 28100 1127 106 ! ! ! ! ELSE 28110 1128 107 ! ! ! ! 28120 1129 108 ! ! ! ! IF NOT (params(1) IN (. 2, 8, 10, 16 .) ) THEN 28130 1130 109 ! ! ! ! BEGIN (* illegal base *) 28140 1131 110 ! ! ! ! ! outstring20("illegal base "); 28150 1132 111 ! ! ! ! ! base:= oldbase; 28160 1133 112 ! ! ! ! END 28170 1134 113 ! ! ! ! ELSE 28180 1135 114 ! ! ! ! base:= params(1); 28190 1136 115 ! ! ! END; 28200 1137 116 ! ! ! \f tstoslst 81.02.26. 13.07. page 39 29010 1138 117 ! ! ! "c": (* create *) 29020 1139 118 ! ! ! (* an incarnation of each of the predefined modules to be tested 29030 1140 119 ! ! ! is created and started. 29040 1141 120 ! ! ! params are nos. of the modules to be created and started *) 29050 1142 121 ! ! ! 29060 1143 122 ! ! ! IF noofparams >= 1 THEN 29070 1144 123 ! ! ! 29080 1145 124 ! ! ! BEGIN 29090 1146 125 ! ! ! ! moduleno:= params(1); 29100 1147 126 ! ! ! ! 29110 1148 127 ! ! ! ! IF noofparams>1 THEN st:= params(2); 29120 1149 128 ! ! ! ! 29130 1150 129 ! ! ! ! IF (moduleno<1) OR (moduleno > noofmodules) THEN 29140 1151 130 ! ! ! ! BEGIN (* illegal no *) 29150 1152 131 ! ! ! ! ! outdecimal(moduleno,4); 29160 1153 132 ! ! ! ! ! outstring10(illegalno); 29170 1154 133 ! ! ! ! END 29180 1155 134 ! ! ! ! ELSE 29190 1156 135 ! ! ! ! IF moduleready(moduleno) THEN init_modul(moduleno); 29200 1157 136 ! ! ! END (* if noofparams >= 1 *) 29210 1158 137 ! ! ! ELSE outstring10 (noparam); 29220 1159 138 ! ! ! (* end create *) 29230 1160 139 ! ! ! \f tstoslst 81.02.26. 13.07. page 40 30010 1161 140 ! ! ! "f": (* fill *) 30020 1162 141 ! ! ! (* fills integers into current buffer. 30030 1163 142 ! ! ! 1st param: first word no. to be filled, 30040 1164 143 ! ! ! following: values to be assigned *) 30050 1165 144 ! ! ! BEGIN 30060 1166 145 ! ! ! ! IF noofparams < 2 THEN 30070 1167 146 ! ! ! ! outstring10("param ") 30080 1168 147 ! ! ! ! ELSE 30090 1169 148 ! ! ! ! IF (params(1) < 1) THEN 30100 1170 149 ! ! ! ! outstring20("illegal start ") 30110 1171 150 ! ! ! ! ELSE 30120 1172 151 ! ! ! ! IF nil(cur) THEN 30130 1173 152 ! ! ! ! outstring10("no buffer ") 30140 1174 153 ! ! ! ! ELSE 30150 1175 154 ! ! ! ! BEGIN (* params are ok *) 30160 1176 155 ! ! ! ! ! i:= params(1); (* i points into the messbuf *) 30170 1177 156 ! ! ! ! ! 30180 1178 157 ! ! ! ! ! FOR j:= 2 TO noofparams DO 30190 1179 158 ! ! ! ! ! (* j points into the param list *) 30200 1180 159 ! ! ! ! ! IF i <= curbufsize THEN 30210 1181 160 ! ! ! ! ! BEGIN 30220 1182 161 ! ! ! ! ! ! CASE curbuftype OF 30230 1183 162 ! ! ! ! ! ! ! 1: LOCK cur AS minbuf: minbuftype DO 30240 1184 163 ! ! ! ! ! ! ! minbuf(i):= params(j); 30250 1185 164 ! ! ! ! ! ! ! 2: LOCK cur AS messbuf: messbuftype DO 30260 1186 165 ! ! ! ! ! ! ! messbuf(i):= params(j); 30270 1187 166 ! ! ! ! ! ! ! 3: LOCK cur AS maxbuf: maxbuftype DO 30280 1188 167 ! ! ! ! ! ! ! maxbuf(i):= params(j); 30290 1189 168 ! ! ! ! ! ! ! 4: LOCK cur AS testbuf: testbuftype DO 30300 1190 169 ! ! ! ! ! ! ! testbuf(i):= params(j); 30310 1191 170 ! ! ! ! ! ! ! OTHERWISE 30320 1192 171 ! ! ! ! ! ! END; 30330 1193 172 ! ! ! ! ! ! i:= i + 1; 30340 1194 173 ! ! ! ! ! END; 30350 1195 174 ! ! ! ! ! 30360 1196 175 ! ! ! ! END (* params ok *) 30370 1197 176 ! ! ! END (* fill *); 30380 1198 177 ! ! ! \f tstoslst 81.02.26. 13.07. page 41 31010 1199 178 ! ! ! "h": (* help *) 31020 1200 179 ! ! ! (* lists possible commands and no. of parameters *) 31030 1201 180 ! ! ! BEGIN 31040 1202 181 ! ! ! ! outstring20("comm and no of param"); writenl; 31050 1203 182 ! ! ! ! outstring20("a: allocate 1 "); writenl; 31060 1204 183 ! ! ! ! outstring20("b: base 1 "); writenl; 31070 1205 184 ! ! ! ! outstring20("c: create >=1 "); writenl; 31080 1206 185 ! ! ! ! outstring20("e: execute 1 "); writenl; 31090 1207 186 ! ! ! ! outstring20("f: fill 2 "); writenl; 31100 1208 187 ! ! ! ! outstring20("h: help 0 "); writenl; 31110 1209 188 ! ! ! ! outstring20("i: init point 0 "); writenl; 31120 1210 189 ! ! ! ! outstring20("k: kill >=1 "); writenl; 31130 1211 190 ! ! ! ! outstring20("o: output 0 to 2"); writenl; 31140 1212 191 ! ! ! ! outstring20("p: partial >=3 "); writenl; 31150 1213 192 ! ! ! ! outstring20("r: return 0 "); writenl; 31160 1214 193 ! ! ! ! outstring20("s: signal 1 "); writenl; 31170 1215 194 ! ! ! ! outstring20("t: test 0 or 1"); writenl; 31180 1216 195 ! ! ! ! outstring20("u: user param 1 to 4"); writenl; 31190 1217 196 ! ! ! ! outstring20("w: wait 1 "); writenl; 31200 1218 197 ! ! ! ! outstring20("x: exch point 2 "); writenl; 31210 1219 198 ! ! ! ! outstring20(";: comment "); 31220 1220 199 ! ! ! END; 31230 1221 200 ! ! ! \f tstoslst 81.02.26. 13.07. page 42 32010 1222 201 ! ! ! "i": (* initialise pointers *) 32020 1223 202 ! ! ! IF noofparams=0 THEN 32030 1224 203 ! ! ! FOR i:=1 TO noofsemaphores DO sem(i).w:= sem(i).s ELSE 32040 1225 204 ! ! ! IF (params(1)>0) AND (params(1)<=noofsemaphores) THEN 32050 1226 205 ! ! ! sem(params(1)).w:= sem(params(1)).s ELSE 32060 1227 206 ! ! ! outstring10(valparam); 32070 1228 207 ! ! ! \f tstoslst 81.02.26. 13.07. page 43 33010 1229 208 ! ! ! "e", (* exception *) 33020 1230 209 ! ! ! (* call of exception routine in one or more incarnations *) 33030 1231 210 ! ! ! "k": (* kill *) 33040 1232 211 ! ! ! (* removes incarnation of tested module(s) 33050 1233 212 ! ! ! params are nos. of modules to be removed *) 33060 1234 213 ! ! ! 33070 1235 214 ! ! ! IF noofparams >= 1 THEN 33080 1236 215 ! ! ! FOR i:= 1 TO noofparams DO 33090 1237 216 ! ! ! BEGIN 33100 1238 217 ! ! ! ! moduleno:= params(i); 33110 1239 218 ! ! ! ! IF (1<=moduleno) AND (moduleno<=noofmodules) THEN 33120 1240 219 ! ! ! ! IF NOT nil(sh(moduleno)) THEN 33130 1241 220 ! ! ! ! IF command="e" THEN 33140 1242 221 ! ! ! ! break(sh(moduleno),#h2f) ELSE 33150 1243 222 ! ! ! ! remove (sh(moduleno)) 33160 1244 223 ! ! ! ! ELSE 33170 1245 224 ! ! ! ! BEGIN 33180 1246 225 ! ! ! ! ! outdecimal (moduleno, 4); 33190 1247 226 ! ! ! ! ! outstring10(" not alive"); 33200 1248 227 ! ! ! ! ! writenl; 33210 1249 228 ! ! ! ! END 33220 1250 229 ! ! ! ! ELSE 33230 1251 230 ! ! ! ! BEGIN 33240 1252 231 ! ! ! ! ! outdecimal (moduleno, 4); 33250 1253 232 ! ! ! ! ! outstring10(illegalno); 33260 1254 233 ! ! ! ! ! writenl; 33270 1255 234 ! ! ! ! END 33280 1256 235 ! ! ! END 33290 1257 236 ! ! ! ELSE outstring10("no params "); 33300 1258 237 ! ! ! \f tstoslst 81.02.26. 13.07. page 44 34010 1259 238 ! ! ! "m": (* testmode *) 34020 1260 239 ! ! ! testmode:= NOT testmode; 34030 1261 240 ! ! ! \f tstoslst 81.02.26. 13.07. page 45 35010 1262 241 ! ! ! "o": (* output *) 35020 1263 242 ! ! ! (* outputs current buffer incl. user parameters 35030 1264 243 ! ! ! 1st param is firstword, 35040 1265 244 ! ! ! 2nd param is lastword *) 35050 1266 245 ! ! ! BEGIN 35060 1267 246 ! ! ! ! IF nil(cur) THEN 35070 1268 247 ! ! ! ! outstring10 ("no buffer ") 35080 1269 248 ! ! ! ! ELSE 35090 1270 249 ! ! ! ! BEGIN 35100 1271 250 ! ! ! ! ! outchar("u"); 35110 1272 251 ! ! ! ! ! outchar(":"); 35120 1273 252 ! ! ! ! ! 35130 1274 253 ! ! ! ! ! outinteger(cur^.u1,4); 35140 1275 254 ! ! ! ! ! outinteger(cur^.u2,4); 35150 1276 255 ! ! ! ! ! outinteger(cur^.u3,4); 35160 1277 256 ! ! ! ! ! outinteger(cur^.u4,4); 35170 1278 257 ! ! ! ! ! writenl; 35180 1279 258 ! ! ! ! ! 35190 1280 259 ! ! ! ! ! IF (noofparams>=1) AND (params(1)>=1) 35200 1281 260 ! ! ! ! ! AND (params(1)<= curbufsize) THEN 35210 1282 261 ! ! ! ! ! firstword:= params(1); 35220 1283 262 ! ! ! ! ! 35230 1284 263 ! ! ! ! ! IF (noofparams>=2) AND (params(2)<=curbufsize) THEN 35240 1285 264 ! ! ! ! ! lastword:= params(2); 35250 1286 265 ! ! ! ! ! IF lastword>curbufsize THEN 35260 1287 266 ! ! ! ! ! lastword:= curbufsize; 35270 1288 267 ! ! ! ! ! 35280 1289 268 ! ! ! ! ! IF cur^.size<curbufsize THEN 35290 1290 269 ! ! ! ! ! outstring20("too small buffer ") ELSE 35300 1291 270 ! ! ! ! ! FOR i:= firstword TO lastword DO 35310 1292 271 ! ! ! ! ! BEGIN 35320 1293 272 ! ! ! ! ! ! outdecimal(i,3); 35330 1294 273 ! ! ! ! ! ! outchar(":"); 35340 1295 274 ! ! ! ! ! ! CASE curbuftype OF 35350 1296 275 ! ! ! ! ! ! ! 1: LOCK cur AS minbuf: minbuftype DO 35360 1297 276 ! ! ! ! ! ! ! j:= minbuf(i); 35370 1298 277 ! ! ! ! ! ! ! 2: LOCK cur AS messbuf: messbuftype DO 35380 1299 278 ! ! ! ! ! ! ! j:= messbuf(i); 35390 1300 279 ! ! ! ! ! ! ! 3: LOCK cur AS maxbuf: maxbuftype DO 35400 1301 280 ! ! ! ! ! ! ! j:= maxbuf(i); 35410 1302 281 ! ! ! ! ! ! ! 4: LOCK cur AS testbuf: testbuftype DO 35420 1303 282 ! ! ! ! ! ! ! j:= testbuf(i); 35430 1304 283 ! ! ! ! ! ! ! OTHERWISE 35440 1305 284 ! ! ! ! ! ! ! j:= 0; 35450 1306 285 ! ! ! ! ! ! END; 35460 1307 286 ! ! ! ! ! ! IF base= 2 THEN \f tstoslst 81.02.26. 13.07. page 46 35470 1308 287 ! ! ! ! ! ! outinteger(j,17) 35480 1309 288 ! ! ! ! ! ! ELSE 35490 1310 289 ! ! ! ! ! ! outinteger(j,7); 35500 1311 290 ! ! ! ! ! ! writenl; 35510 1312 291 ! ! ! ! ! END; 35520 1313 292 ! ! ! ! END (* ok *); 35530 1314 293 ! ! ! END (* output *); 35540 1315 294 ! ! ! \f tstoslst 81.02.26. 13.07. page 47 36010 1316 295 ! ! ! "p": (* partial words *) 36020 1317 296 ! ! ! (* fills partial words i.e. bytes into current buffer. 36030 1318 297 ! ! ! 1st param: word no. in which to start 36040 1319 298 ! ! ! 2nd param: byte no. (of 1st word) in which to start: 36050 1320 299 ! ! ! - 0: left byte 36060 1321 300 ! ! ! - 1: right byte 36070 1322 301 ! ! ! following: byte values to be assigned *) 36080 1323 302 ! ! ! BEGIN 36090 1324 303 ! ! ! ! IF noofparams<2 THEN 36100 1325 304 ! ! ! ! outstring10("param ") 36110 1326 305 ! ! ! ! ELSE 36120 1327 306 ! ! ! ! IF (params(1)<1) THEN 36130 1328 307 ! ! ! ! outstring20("illegal start-word ") 36140 1329 308 ! ! ! ! ELSE 36150 1330 309 ! ! ! ! IF NOT (params(2) IN (.0,1.)) THEN 36160 1331 310 ! ! ! ! outstring20 ("2nd must be 0 or 1 ") 36170 1332 311 ! ! ! ! ELSE 36180 1333 312 ! ! ! ! IF nil (cur) THEN 36190 1334 313 ! ! ! ! outstring10 ("no buffer ") 36200 1335 314 ! ! ! ! ELSE 36210 1336 315 ! ! ! ! BEGIN (* params are ok *) 36220 1337 316 ! ! ! ! ! i:= params(1); (* i points into current buffer *) 36230 1338 317 ! ! ! ! ! j:= params(2); 36240 1339 318 ! ! ! ! ! 36250 1340 319 ! ! ! ! ! IF cur^.size<messbufsize THEN 36260 1341 320 ! ! ! ! ! outstring20("too small buffer ") ELSE 36270 1342 321 ! ! ! ! ! LOCK cur AS messbuf: messbuftype DO 36280 1343 322 ! ! ! ! ! BEGIN 36290 1344 323 ! ! ! ! ! ! IF messbuf(i)<0 THEN 36300 1345 324 ! ! ! ! ! ! leftbyte:= (messbuf(i)+255) DIV 256 36310 1346 325 ! ! ! ! ! ! ELSE 36320 1347 326 ! ! ! ! ! ! leftbyte:= messbuf(i) DIV 256; 36330 1348 327 ! ! ! ! ! ! 36340 1349 328 ! ! ! ! ! ! FOR k:= 3 TO noofparams DO 36350 1350 329 ! ! ! ! ! ! (* k points into the parameter list *) 36360 1351 330 ! ! ! ! ! ! IF i<= messbufsize THEN 36370 1352 331 ! ! ! ! ! ! BEGIN 36380 1353 332 ! ! ! ! ! ! ! CASE j OF 36390 1354 333 ! ! ! ! ! ! ! ! 0: 36400 1355 334 ! ! ! ! ! ! ! ! BEGIN (* left *) 36410 1356 335 ! ! ! ! ! ! ! ! ! rightbyte:= abs(messbuf(i) MOD 256); 36420 1357 336 ! ! ! ! ! ! ! ! ! leftbyte := params (k); 36430 1358 337 ! ! ! ! ! ! ! ! END; 36440 1359 338 ! ! ! ! ! ! ! ! 1: 36450 1360 339 ! ! ! ! ! ! ! ! BEGIN (* right *) 36460 1361 340 ! ! ! ! ! ! ! ! ! rightbyte:= params (k); \f tstoslst 81.02.26. 13.07. page 48 36470 1362 341 ! ! ! ! ! ! ! ! ! IF leftbyte>=128 THEN 36480 1363 342 ! ! ! ! ! ! ! ! ! BEGIN 36490 1364 343 ! ! ! ! ! ! ! ! ! ! messbuf(i):= (leftbyte-128)*256 + rightbyte; 36500 1365 344 ! ! ! ! ! ! ! ! ! ! IF messbuf(i)>0 THEN 36510 1366 345 ! ! ! ! ! ! ! ! ! ! messbuf(i):= -((32767-messbuf(i))+1) 36520 1367 346 ! ! ! ! ! ! ! ! ! ! ELSE messbuf(i):= -32768; 36530 1368 347 ! ! ! ! ! ! ! ! ! END 36540 1369 348 ! ! ! ! ! ! ! ! ! ELSE 36550 1370 349 ! ! ! ! ! ! ! ! ! messbuf(i):= leftbyte*256 + rightbyte; 36560 1371 350 ! ! ! ! ! ! ! ! ! i:= i+1; 36570 1372 351 ! ! ! ! ! ! ! ! END; 36580 1373 352 ! ! ! ! ! ! ! ! 36590 1374 353 ! ! ! ! ! ! ! END (* case *); 36600 1375 354 ! ! ! ! ! ! ! 36610 1376 355 ! ! ! ! ! ! ! j:= 1-j; 36620 1377 356 ! ! ! ! ! ! END; 36630 1378 357 ! ! ! ! ! ! 36640 1379 358 ! ! ! ! ! ! IF (j=1) AND (i<=messbufsize) THEN 36650 1380 359 ! ! ! ! ! ! IF leftbyte>=128 THEN 36660 1381 360 ! ! ! ! ! ! BEGIN 36670 1382 361 ! ! ! ! ! ! ! IF messbuf(i)>0 THEN 36680 1383 362 ! ! ! ! ! ! ! messbuf(i):= (leftbyte-128)*256 + rightbyte 36690 1384 363 ! ! ! ! ! ! ! ELSE messbuf(i):= - 32768; 36700 1385 364 ! ! ! ! ! ! ! messbuf(i):= -((32767-messbuf(i))+1); 36710 1386 365 ! ! ! ! ! ! END 36720 1387 366 ! ! ! ! ! ! ELSE 36730 1388 367 ! ! ! ! ! ! messbuf(i):= leftbyte*256 + rightbyte; 36740 1389 368 ! ! ! ! ! END (* lock *); 36750 1390 369 ! ! ! ! END (* params ok *); 36760 1391 370 ! ! ! END (* partial *); 36770 1392 371 ! ! ! \f tstoslst 81.02.26. 13.07. page 49 37010 1393 372 ! ! ! "r": (* return *) 37020 1394 373 ! ! ! (* returns current buffer *) 37030 1395 374 ! ! ! IF nil(cur) 37040 1396 375 ! ! ! THEN outstring10("no buffer ") 37050 1397 376 ! ! ! ELSE return(cur); 37060 1398 377 ! ! ! \f tstoslst 81.02.26. 13.07. page 50 38010 1399 378 ! ! ! "s": (* signal *) 38020 1400 379 ! ! ! (* signals current buffer to one of the predefined semaphores. 38030 1401 380 ! ! ! 1st param is semno *) 38040 1402 381 ! ! ! BEGIN 38050 1403 382 ! ! ! ! semno:= params(1); 38060 1404 383 ! ! ! ! 38070 1405 384 ! ! ! ! IF noofparams >= 1 THEN 38080 1406 385 ! ! ! ! IF (1<=semno) AND (semno<=noofsemaphores) THEN 38090 1407 386 ! ! ! ! IF NOT nil(cur) THEN 38100 1408 387 ! ! ! ! signal (cur,sem(semno).s^) 38110 1409 388 ! ! ! ! ELSE outstring10("no buffer ") 38120 1410 389 ! ! ! ! ELSE outstring10(illegalno) 38130 1411 390 ! ! ! ! ELSE outstring10(noparam) 38140 1412 391 ! ! ! END (* signal *); 38150 1413 392 ! ! ! \f tstoslst 81.02.26. 13.07. page 51 39010 1414 393 ! ! ! "t": (* testsem *) 39020 1415 394 ! ! ! (* tests the status of the specified semaphores. 39030 1416 395 ! ! ! if none is specified, the status of all the 39040 1417 396 ! ! ! user semaphores is given. 39050 1418 397 ! ! ! in both cases nothing will be written for a semaphore 39060 1419 398 ! ! ! if it is passive. *) 39070 1420 399 ! ! ! BEGIN 39080 1421 400 ! ! ! ! IF noofparams=0 THEN 39090 1422 401 ! ! ! ! BEGIN (* test all semaphores *) 39100 1423 402 ! ! ! ! ! 39110 1424 403 ! ! ! ! ! FOR i:=1 TO noofsemaphores DO 39120 1425 404 ! ! ! ! ! testsem(i) 39130 1426 405 ! ! ! ! END (* test all *) 39140 1427 406 ! ! ! ! ELSE 39150 1428 407 ! ! ! ! BEGIN (* test the specified semaphores *) 39160 1429 408 ! ! ! ! ! 39170 1430 409 ! ! ! ! ! FOR i:=1 TO noofparams DO 39180 1431 410 ! ! ! ! ! IF (params(i)<1) OR (params(i)>noofsemaphores) THEN 39190 1432 411 ! ! ! ! ! BEGIN (* illegal no. *) 39200 1433 412 ! ! ! ! ! ! outstring20("illegal no.: "); 39210 1434 413 ! ! ! ! ! ! outdecimal(params(i),3); 39220 1435 414 ! ! ! ! ! ! writenl; 39230 1436 415 ! ! ! ! ! END (* illegal no *) 39240 1437 416 ! ! ! ! ! ELSE 39250 1438 417 ! ! ! ! ! testsem( params(i) ); 39260 1439 418 ! ! ! ! END (* test the specified semaphores *) 39270 1440 419 ! ! ! END (* testsem *); 39280 1441 420 ! ! ! 39290 1442 421 ! ! ! \f tstoslst 81.02.26. 13.07. page 52 40010 1443 422 ! ! ! "u": (* user parameters *) 40020 1444 423 ! ! ! (* inserts user param into header of current buffer 40030 1445 424 ! ! ! 1st param is u1 40040 1446 425 ! ! ! 2nd param is u2 40050 1447 426 ! ! ! 3rd param is u3 40060 1448 427 ! ! ! 4th param is u4 *) 40070 1449 428 ! ! ! BEGIN 40080 1450 429 ! ! ! ! IF nil(cur) 40090 1451 430 ! ! ! ! THEN outstring10("no buffer ") 40100 1452 431 ! ! ! ! ELSE 40110 1453 432 ! ! ! ! IF noofparams = 0 THEN 40120 1454 433 ! ! ! ! outstring10(noparam) 40130 1455 434 ! ! ! ! ELSE 40140 1456 435 ! ! ! ! WITH cur^ DO 40150 1457 436 ! ! ! ! BEGIN 40160 1458 437 ! ! ! ! ! IF testinterval (params(1),0,255) THEN u1:= params(1); 40170 1459 438 ! ! ! ! ! IF (noofparams>=2) THEN IF testinterval(params(2),0,255) THEN 40180 1460 439 ! ! ! ! ! u2:= params(2); 40190 1461 440 ! ! ! ! ! IF (noofparams>=3) THEN IF testinterval(params(3),0,255) THEN 40200 1462 441 ! ! ! ! ! u3:= params(3); 40210 1463 442 ! ! ! ! ! IF (noofparams>=4) THEN IF testinterval(params(4),0,255) THEN 40220 1464 443 ! ! ! ! ! u4:= params(4); 40230 1465 444 ! ! ! ! END 40240 1466 445 ! ! ! END; (* end user parameters *) 40250 1467 446 ! ! ! 40260 1468 447 ! ! ! \f tstoslst 81.02.26. 13.07. page 53 41010 1469 448 ! ! ! "w": (* wait *) 41020 1470 449 ! ! ! (* waits for semaphore semno. 41030 1471 450 ! ! ! 1st param is semno *) 41040 1472 451 ! ! ! BEGIN 41050 1473 452 ! ! ! ! semno:= params(1); 41060 1474 453 ! ! ! ! 41070 1475 454 ! ! ! ! IF noofparams >= 1 THEN 41080 1476 455 ! ! ! ! IF nil(cur) THEN 41090 1477 456 ! ! ! ! IF (1<=semno) AND (semno<=noofsemaphores) THEN 41100 1478 457 ! ! ! ! BEGIN 41110 1479 458 ! ! ! ! ! sensesem( cur, sem(semno).w^); 41120 1480 459 ! ! ! ! ! IF nil(cur) THEN 41130 1481 460 ! ! ! ! ! outstring20("semaphore not open ") 41140 1482 461 ! ! ! ! ! ELSE 41150 1483 462 ! ! ! ! ! BEGIN 41160 1484 463 ! ! ! ! ! ! get_curbuftype; 41170 1485 464 ! ! ! ! ! ! outstring10(" bufsize "); 41180 1486 465 ! ! ! ! ! ! outinteger(curbufsize, 5); 41190 1487 466 ! ! ! ! ! ! outinteger(cur^.size, 5) 41200 1488 467 ! ! ! ! ! END; 41210 1489 468 ! ! ! ! END 41220 1490 469 ! ! ! ! ELSE outstring10(illegalno) 41230 1491 470 ! ! ! ! ELSE outstring20("you already have one") 41240 1492 471 ! ! ! ! ELSE outstring10(noparam) 41250 1493 472 ! ! ! END (* wait *); 41260 1494 473 ! ! ! \f tstoslst 81.02.26. 13.07. page 54 42010 1495 474 ! ! ! "x": (* exchange pointer *) 42020 1496 475 ! ! ! BEGIN 42030 1497 476 ! ! ! ! IF noofparams >= 2 THEN 42040 1498 477 ! ! ! ! IF (params(1)>0) AND (params(1)<=noofsemaphores) THEN 42050 1499 478 ! ! ! ! IF (params(2)>0) AND (params(2)<=noofsemaphores) THEN 42060 1500 479 ! ! ! ! BEGIN 42070 1501 480 ! ! ! ! ! worksem:= sem(params(1)).w; 42080 1502 481 ! ! ! ! ! sem(params(1)).w:= sem(params(2)).w; 42090 1503 482 ! ! ! ! ! sem(params(2)).w:= worksem; 42100 1504 483 ! ! ! ! END 42110 1505 484 ! ! ! ! ELSE outstring10(valparam) 42120 1506 485 ! ! ! ! ELSE outstring10(valparam) 42130 1507 486 ! ! ! ! ELSE outstring10(noparam) 42140 1508 487 ! ! ! END (* exchange pointer *); 42150 1509 488 ! ! ! 42160 1510 489 ! ! ! 42170 1511 490 ! ! ! OTHERWISE (* error *) 42180 1512 491 ! ! ! outstring20 ("illegal comm. type h"); 42190 1513 492 ! ! END (* case *); 42200 1514 493 ! ! 42210 1515 494 ! ! IF command<>";" THEN 42220 1516 495 ! ! writenl; 42230 1517 496 ! ! 42240 1518 497 ! UNTIL false; 42250 1519 498 ! 42260 1520 499 END. 42270 1521 42280 1522 42290 1523 42300 1524 \f tstoslst 81.02.26. 13.07. page 55 0 38* 51* 75* 151* 151* 152* 312 322: 322 334 360 362 411 491 501 569* 592 601 611 617 624 636 647 648 648 675 678 683 693 698 699 798 804 806 822 869 891 898 954 1075 1103 1104 1105 1106 1223 1225 1305 1330 1344 1354: 1365 1382 1421 1453 1458 1459 1461 1463 1498 1499 1 35* 39* 50* 65* 66* 67* 68* 75* 78* 79* 100* 147* 148* 314 323: 375 378 387 443: 461 467 546 570* 583 586 600 601 606 611 619 631 633 636 640 641 655 670 674 696 700 702 708 712 727 735 744 760 762 867 876 893 908 909 963 1029 1036 1053 1063 1070 1094 1096 1098 1122 1129 1135 1143 1146 1148 1150 1169 1169 1176 1183: 1193 1224 1225 1225 1226 1226 1235 1236 1239 1280 1280 1280 1281 1282 1296: 1327 1327 1330 1337 1359: 1366 1371 1376 1379 1385 1403 1405 1406 1424 1430 1431 1458 1458 1473 1475 1477 1498 1498 1501 1502 2 316 324: 408 447: 469 509 621 622 624 625 633 634 636 637 643 644 647 648 654: 680 852: 880: 1036 1039 1129 1148 1166 1178 1185: 1284 1284 1285 1298: 1307 1324 1330 1338 1459 1459 1460 1497 1499 1499 1502 1503 3 34* 88* 318 325: 451: 509 511 660 673 949 967 981 1187: 1293 1300: 1349 1434 1461 1461 1462 4 153* 319 326: 455: 519 532 665 666 864 918 931 1152 1189: 1246 1252 1274 1275 1276 1277 1302: 1463 1463 1464 5 33* 152* 153* 417 459: 486 1110 1111 1486 1487 6 49* 465: 661 859 7 151* 152* 153* 463 471: 1310 8 480: 659: 672 857: 881: 1129 9 484: 690 10 78* 368 488: 557 588 727 807 820 1069 1071 1129 11 492: 12 90* 498: 735 13 502: 14 507: 15 513: 569* 619 631 641 678 16 36* 656 664: 803 827 854 862: 873 882: 1129 17 1308 20 79* 566* 744 40 457 50 147* 385 63 469 64 511 80 30* 48* 87 816 839 888 100 414 128 1362 1364 1380 1383 255 1345 1458 1459 1461 1463 256 1345 1347 1356 1364 1370 1383 1388 257 463 \f tstoslst 81.02.26. 13.07. page 56 512 491 501 1024 1068 2048 882 3276 830 4096 881 16384 880 32767 893 1366 1385 32768 832 892 1367 1384 a 83* 943= 944= abs 598 1356 alfa 60* 288* 397* 731* alfa10 78* 285* 721* alfa20 79* 291* 303* 739* 926* alfalength 49* alloc 1038 1051 1065 1100 alreadyexists <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 43* 406 533 al_env_version <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 1026 ap 156* 943 947 979 as 337: 343: 543: 756: 907: 1002: 1040: 1055: 1183: 1185: 1187: 1189: 1296: 1298: 1300: 1302: 1342: atbuffer 75* atconnector 186* 461 atcsem 189* atc_pri 464 atc_sem_no 461 461 atc_size 464 athsem 192* ath_pri 450 ath_sem_no 462 ath_size 450 at_handler 164* 449 base 122* 367 368= 381= 391= 556 557= 559= 588 598 599 653 672 803 807 820 827 838 839 851 873 879 886 888 1069= 1124= 1132= 1135= 1307 bit 569* bits 569* 621= 624= 633= 636= 643 644= 644 647 648= 648 680 boolean 144* 270* 358* 525* 580* 782* 912* 940* bp 156* 944 947 979 break 1242 byte 72* 75* 200* 217* ch 540* 547 787* 793= 800 801= 802 803 814 815 816 824= 826 827 830 837 838 839 853 858 863 871= 872 873 885 886 888 channelno 200* 217* \f tstoslst 81.02.26. 13.07. page 57 char 61* 78* 79* 118* 294* 540* 570* 751* 787* chr 598 691 692 command 118* 349= 351 364 379 1083 1241 1515 com_pool 463 469 476 495 511 1065 com_sem 195* 212* 228* controlinfo 72* countref 103* 957 958 962 970 971 countsem 94* 962 968 970 create 410 createchtype 70* createerror 46* 415 cur 106* 311 313 315 317 1065 1066 1097 1100 1101 1111 1172 1183: 1185: 1187: 1189: 1267 1274 1275 1276 1277 1289 1296: 1298: 1300: 1302: 1333 1340 1342: 1395 1397 1407 1408 1450 1456 1476 1479 1480 1487 curbufsize 135* 322= 323= 324= 325= 326= 1110 1180 1281 1284 1286 1287 1289 1486 curbuftype 136* 312= 314= 316= 318= 319= 321 1182 1295 curdigit 571* 670= 685 686 691 692 696 700= 700 784* 867= 876= 876 877 889 curpos 572* 673= 674= 681 699= 702= 702 data 61* 547= 759 1045= dcaddr 214* dcmodule 248* 494 dcsem 224* dc_addr 151* 167* 175* 197* 449 453 463 469 511 dc_int1 496 dc_int2 496 dc_int3 496 dc_sem_no 474 496 dc_sim_pri 497 dc_sim_size 497 digit 782* 794= 802= 804 812 822 826= 828 869 872= 874 digits 570* 586= 598= 605= 611= 686= 691= 692= 714 777* 802 814 826 837 872 885 doesntexist 44* done 264* driversem 193* external 162* 170* 178* 184* 201* 218* 235* 241* 246* 252* 257* 268* 271* false 372 382 534 695 791 794 809 833 920 959 1024 1518 first 57* 346 912* 915 1043= 1058= firstindex 49* 50* 61* 338 347 1003 1043 1045 1058 firstword 123* 1070= 1282= 1291 free 263* getinput 330* 1081 getparams 276* 353 356* get_curbuftype <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 309* 1108 1484 \f tstoslst 81.02.26. 13.07. page 58 h 573* 678= 680 h2f 1242 hexdigits 778* 803 827 873 i 124* 303* 573* 586= 586 590= 598 600= 600 601 605 606= 606 609 619= 621 631= 633 641= 643 644 644 712= 714 725* 727= 728 733* 735= 736 742* 744= 745 912* 915 915 918 926* 931 936* 943 944 945 949 957 971 977 981 1029= 1031 1031 1032 1032 1036= 1063= 1176= 1180 1184 1186 1188 1190 1193= 1193 1224= 1224 1224 1236= 1238 1291= 1293 1297 1299 1301 1303 1337= 1344 1345 1347 1351 1356 1364 1365 1366 1366 1367 1370 1371= 1371 1379 1382 1383 1384 1385 1385 1388 1424= 1425 1430= 1431 1431 1434 1438 illegalno 45* 520 917 1113 1153 1253 1410 1490 incharsleft 125* 346= 762= 762 798 804 822 869 898 909= 909 inc_name 397* 410 416 index 395* 405 410 412 424* 442 444 448 452 456 460 466 472 481 485 489 493 499 503 508 514 519 init_modul 424* 1156 init_proc 394* 444 448 452 456 460 466 472 481 485 489 493 499 503 508 514 inputsem 230* 240* int 279* 282* 551* 558 562* 592 598 599= 599 601 611 617 621 622= 622 624 625= 625 633 634= 634 636 637= 637 integer 59* 65* 66* 67* 68* 138* 147* 183* 199* 216* 239* 279* 282* 297* 303* 395* 400* 403* 424* 525* 551* 562* 578* 725* 733* 742* 768* 785* 912* 926* 936* j 126* 954= 963= 963 967 1178= 1184 1186 1188 1190 1297= 1299= 1301= 1303= 1305= 1308 1310 1338= 1353 1376= 1376 1379 k 127* 1349= 1357 1361 lam 237* 486 lamsem 210* 226* lam_pri 487 lam_sem_no 462 475 486 494 lam_size 487 last 58* 546= 546 547 912* 915 1003= 1059= lastchar 787* 792= 800= 808 lastindex 50* 61* 1059 lastword 128* 1071= 1285= 1286 1287= 1291 leftbyte 129* 1345= 1347= 1357= 1362 1364 1370 1380 1383 1388 level 239* linelength 48* 50* link 409 lock 337: 343: 543: 756: 907: 1002: 1040: 1055: 1183: 1185: 1187: 1189: 1296: 1298: 1300: 1302: 1342: locked 977 m 574* 640= 643 644 645= 647 648 649= \f tstoslst 81.02.26. 13.07. page 59 macroaddr 151* 151* 152* 152* 153* 153* 168* 176* 198* 215* main 262* max 183* maxbuf 1187: 1188= 1300: 1301 maxbufsize 34* 68* 315 325 maxbuftype 68* 1187 1300 maxpos 566* 570* 586 590 609 670 685 696 708 712 712 messbuf 1185: 1186= 1298: 1299 1342: 1344 1345 1347 1356 1364= 1365 1366= 1366 1367= 1370= 1382 1383= 1384= 1385= 1385 1388= messbufpool 91* 1065 messbufsize 32* 65* 313 324 1340 1351 1379 messbuftype 65* 91* 1185 1298 1342 messem 206* micaddr 216* minbuf 1183: 1184= 1296: 1297 minbufsize 35* 67* 311 323 minbuftype 67* 1183 1296 moduleno 130* 525* 529 532 1146= 1150 1150 1152 1156 1156 1238= 1239 1239 1240 1242 1243 1246 1252 moduleready 525* 529= 534= 1156 more 940* 951= 955 959= n1 426* 444 444 n10 435* 489 489 499 n11 436* 493 493 n13 437* 503 503 n14 438* 508 508 n15 439* 514 514 n16 440* n2 427* 448 448 n3 428* 452 452 n4 429* 456 456 n5 430* 460 460 n6 431* 466 466 n7 432* 472 472 n8 433* 481 481 n9 434* 485 485 name 60* 396* 409 1044= 1060= ncsem 225* ncsup 259* 504 ncsup_int1 504 ncsup_int2 504 nc_addr 152* nc_sem_no 475 504 nc_sup_size 506 \f tstoslst 81.02.26. 13.07. page 60 negative 580* 592= 603 782* 808= 809= 830 833= 844 853= 858= 863= 877 889 netc_sem_no 476 494 505 net_int1 477 net_int2 477 net_int3 478 net_int4 478 net_sem 266* newbase 358* 369= 372= 382= 389 newm 574* 643= 645 647= 649 next 59* 338= 346 347= 759 760= 760 908= 908 nl 998 noofdig 575* 656= 661= 666= 670 noofdigit 784* 854= 859= 864= 877 889 noofmodules 36* 148* 1150 1239 noofparams 131* 362= 375= 375 376 377 378 385 387= 387 408 1075= 1096 1122 1143 1148 1166 1178 1223 1235 1236 1280 1284 1324 1349 1405 1421 1430 1453 1459 1461 1463 1475 1497 noofpos 576* 655= 660= 665= 681 noofsemaphores <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 37* 1098 1224 1225 1406 1424 1431 1477 1498 1499 noparam 42* 1115 1125 1158 1411 1454 1492 1507 no_listen 91* 1063 nul 792 793 oflow 270* ok 51* 341 403* 410= 411 414= 414 417 okl 402* 409= 414 419= oldbase 132* 367= 381 391 556= 559 1124 1132 op 160* 165* 173* opbuf 337: 338 343: 344 543: 544 756: 757 907: 908 908 1002: 1003 1040: 1041 1055: 1056 opbufpool 88* 1038 1051 opbufsize 30* opbuftype 55* 88* 337 343 543 756 907 1002 1040 1055 open 945 968 operatorsem 1023 opinref 104* 337: 339 340 341 343: 756: 907: 1051 1053 1055: opoutref 105* 543: 996 999 1001 1002: 1038 1039 1040: 1047 opsem 110* 181* 187* 204* 221* 238* 244* 249* 255* 260* 339 445 449 453 457 461 467 473 482 486 490 494 500 504 509 515 999 1023= 1025 ord 351 598 691 692 815 815 816 838 838 839 886 886 888 outchar 540* 706 714 728 736 745 948 948 950 980 980 982 998 1271 1272 1294 outdecimal 279* 417 519 532 551* 949 967 981 1152 1246 1252 1293 1434 outinteger 282* 558 562* 918 931 1110 1111 1274 1275 1276 1277 1308 1310 1486 1487 \f tstoslst 81.02.26. 13.07. page 61 outstring10 285* 520 721* 917 983 1109 1113 1115 1125 1153 1158 1167 1173 1227 1247 1253 1257 1268 1325 1334 1396 1409 1410 1411 1451 1454 1485 1490 1492 1505 1506 1507 outstring12 288* 416 731* outstring20 291* 406 415 533 739* 930 1114 1131 1170 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1290 1328 1331 1341 1433 1481 1491 1512 ownaddr 199* p 398* 409 410 419 params 147* 376= 377 1094 1129 1135 1146 1148 1169 1176 1184 1186 1188 1190 1225 1225 1226 1226 1238 1280 1281 1282 1284 1285 1327 1330 1337 1338 1357 1361 1403 1431 1431 1434 1438 1458 1458 1459 1460 1461 1462 1463 1464 1473 1498 1498 1499 1499 1501 1502 1502 1503 point_rec 82* 156* pool 88* 90* 91* positions 279* 282* 551* 558 562* 706 708 709 710= 712 pr 39* prio 400* 412 process 4* 159* 164* 172* 180* 186* 203* 220* 237* 243* 248* 254* 259* processrec 398* processref 409 419 pu 38* 239* 486 quesem 190* 207* readchar 294* 349 751* 759= 801 824 871 readinteger 297* 376 768* 902= readok 141* 385 791= 817= ref 1031 reference 107* remove 1243 repeatchar 300* 900 905* res 577* 675= 680= 680 683 690 691 692 693 698= result 785* 806= 815= 816= 830 832= 838= 838 839= 839 844= 844 880= 880 881= 881 882= 882 886= 886 888= 888 891 892= 893= 893 902 return 1047 1066 1397 rightbyte 133* 1356= 1361= 1364 1370 1383 1388 s 462 462 462 468 468 468 473 474 475 475 475 494 494 495 505 505 510 510 510 943 1031= 1032 1065 1100 1224 1226 1408 sem 112* 245* 445 449 453 457 461 461 462 462 462 463 467 467 468 468 468 469 473 474 475 475 475 476 476 477 477 478 478 482 486 490 494 494 495 495 496 496 496 496 500 504 504 504 505 505 509 509 510 510 510 511 515 943 944 1031 1032 1032 1065 1100 1224 1224 1226 1226 1408 1479 1501 1502 1502 1503 sem1 250* sem2 250* \f tstoslst 81.02.26. 13.07. page 62 sem3 250* sem4 250* sem5 251* sem6 251* sem7 251* sem8 251* semaphore 99* 100* semint1 231* semint2 232* semint3 233* semint4 234* semno 134* 1094= 1098 1098 1100 1403= 1406 1406 1408 1473= 1477 1477 1479 sempointer 83* 110* 111* 160* 165* 173* 181* 187* 195* 204* 212* 221* 228* 238* 244* 249* 250* 255* 260* 267* semvector 4* 1023 sensesem 957 1479 setoflowmask 270* 1073 sh 148* 405 410 412 529 1240 1242 1243 shadow 148* signal 339 962 971 999 1408 signs 779* size 311 313 315 317 399* 408 1111 1289 1340 1487 size_listen 32* 33* 34* sp 586 706 st 137* 408= 410 1068= 1148= start 412 system_vector <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 4* tab_sem 256* tap 254* 490 500 tap1_sem_no 500 tap_sem_no 490 testbuf 1189: 1190= 1302: 1303 testbufpool 90* 1100 testbufsize 33* 66* 317 326 testbuftype 66* 90* 1189 1302 testinterval 912* 920= 923= 1458 1459 1461 1463 testmode 143* 928 1024= 1260= 1260 testmodeout 303* 334 351 360 377 926* testopen 1025 testout 1026 testsem 936* 1425 1438 text 285* 288* 291* 303* 721* 728 731* 736 739* 745 926* 930 ticklength 183* \f tstoslst 81.02.26. 13.07. page 63 timeout 72* 180* 457 timeoutsem 182* 211* 227* 267* timeout_sem_no <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 457 462 468 475 495 505 510 time_out_unit <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 457 timsem 194* tim_pri 458 tim_size 458 true 369 529 676 817 853 858 863 923 951 1073 tsaddr 215* tsconnector 220* 473 tsc_pri 479 tsc_size 479 tsopsys 4* tsssem 223* tssuper 159* 445 tssup_sem_no 473 tss_pri 446 506 tss_size 446 ts_addr 153* 168* 176* 198* 449 453 463 469 511 ts_pointer 182* 190* 207* 234* 240* 251* 256* 264* ts_pointer_vector <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 112* 161* 169* 177* 245* ts_sem 100* 161* 169* 177* 945 957 971 977 1031 ts_sem_total 37* 100* 1029 u1 1039= 1053= 1103= 1274 1458= u2 341 1104= 1275 1460= u3 1105= 1276 1462= u4 1106= 1277 1464= unlink 419 used 578* 583= 609= 696= 706 709 710 vac_size 470 vagt 243* 482 515 valparam 41* 1227 1505 1506 vas_sem_no 468 vas_size 483 vcc 203* 467 509 vcc_pri 470 512 vcc_sem_no 467 467 509 509 vchsem 209* vch_pri 454 vch_sem_no 468 510 vch_size 454 \f tstoslst 81.02.26. 13.07. page 64 vc_handler 172* 453 vc_sim_pri 483 516 version 25* 1026 vic_size 512 vis_sem_no 510 vis_size 516 w 463 469 476 495 511 944 1032= 1224= 1226= 1479 1501 1502= 1502 1503= wait 340 970 1001 worksem 111* 1501= 1503 writenl 306* 418 919 932 974 984 992* 1049 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1248 1254 1278 1311 1435 1516 wrsem 97* 340 1051 wsem 95* 1001 1038 z 115* 1025 1026 zeroes 580* 676= 683 693 695= zone 115* \f tstoslst 81.02.26. 13.07. page 65 AND 22 ARRAY 13 BEGIN 111 CASE 9 CONST 5 DIV 9 DO 47 DOWNTO 3 ELSE 69 END 123 FOR 19 FORWARD 11 FUNCTION 6 IF 110 IN 14 MOD 8 NIL 14 NOT 9 OF 25 OR 10 OTHERWISE 4 PROCEDURE 25 RECORD 3 REPEAT 5 THEN 110 TO 16 TYPE 1 UNTIL 5 VAR 31 WHILE 4 WITH 7 \f jg7 1981.02.26 13.09 tstos program 81.02.26. 13.10. pascal80 version 1981.02.09 name headline beginline endline appetite(words) get_curbufty 309 312 328 : 2 getinput 330 334 354 : 21 getparams 356 360 392 : 25 init_proc 400 406 422 : 29 init_modul 424 443 523 : 57 moduleready 525 529 536 : 19 outchar 540 543 549 : 9 outdecimal 551 556 560 : 10 outinteger 562 583 717 : 47 outstring10 721 727 729 : 17 outstring12 731 735 737 : 17 outstring20 739 744 746 : 17 readchar 751 756 763 : 11 readinteger 768 791 903 : 17 repeatchar 905 907 910 : 8 testinterval 912 916 924 : 13 testmodeout 926 929 934 : 18 testsem 936 943 986 : 15 writenl 992 997 1004 : 11 tsopsys 24 1023 1520 : 1176 code: 5 . 248 = 15248 bytes end of PASCAL80 compilation end blocksread = 53 «eof»