|
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: 26880 (0x6900) Types: TextFile Names: »ltclist «
└─⟦9ccaf6601⟧ Bits:30008165 Bånd med SW8000 kildetekst/release værktøjer └─⟦f546e193b⟧ └─⟦this⟧ »ltclist «
ltctxt d.870112.0928 1 begin 2 <********************************************************************> 3 <* Utility LISTTASCAT til udskrift af tas katalog indgange. *> 4 <* *> 5 <* Kald: <out-file> = listtascat <out-spec.> *> 6 <* *> 7 <* user.<name> *> 8 <* terminal.<name> *> 9 <* <out-spec.> ::= type.<number> *> 10 <* size *> 11 <* all *> 12 <* *> 13 <* Compiler call: listtascat=algol ltctxt connect.no *> 14 <********************************************************************> 15 15 <**************************************************************> 16 <* Revision history *> 17 <* *> 18 <* 87.02.01 listtascat release 1.0 *> 19 <**************************************************************> 20 20 20 <* Globale variable *> 21 21 zone buf(128,1,std_error); <* Zone til message m.m. *> 22 integer array user_id(1:4); <* Bruger id fra terminal *> 23 long password; <* Password fra terminal *> 24 boolean file_out; <* True= connect to file *> 25 boolean no_found; <* Entry ikke fundet *> 26 integer array out_stack(1:4); <* out zone stack *> 27 integer array prog_name(1:4); <* Program navn *> 28 integer array conv(0:255); <* Tegn konverterings tabel *> 29 integer param; <* fp parameter tæller *> 30 integer user_size; <* Antal seg i user cat *> 31 integer term_size; <* Antal seg i term cat *> 32 integer type_size; <* Antal seg i type cat *> 33 integer user_hw; <* Antal hw i user entry *> 34 integer term_hw; <* Antal hw i term entry *> 35 integer type_hw; <* Antal hw i type entry *> 36 36 integer array field iaf; <* Work *> 37 real array field raf; <* Work *> 38 boolean array field baf; <* Work *> 39 long array field laf; <* Work *> 40 integer i; <* Work *> 41 41 <* Globale procedure *> 42 42 procedure get_userid; 43 <*-------------------------------------------------------------------*> 44 <* Set user id og password i de globale variable user_id og password *> 45 <* Id og password hentes fra terminalen tilknyttet prim. output *> 46 <*-------------------------------------------------------------------*> 47 begin 48 long array term_name(1:2); 49 integer i; 50 integer array ia(1:20); 51 51 system(7,0,term_name); 52 open(buf,0,term_name,0); 53 close(buf,false); 54 getzone6(buf,ia); 55 i:=ia(19); 56 getshare6(buf,ia,1); 57 ia(4):=131 shift 12; 58 ia(5):=i+1; 59 ia(6):=i+11; 60 ia(7):=0; 61 setshare6(buf,ia,1); 62 if monitor(16,buf,1,ia)=0 then 63 error(2); 64 if monitor(18,buf,1,ia)<>1 then 65 error(5); 66 if ia(1)<>0 then 67 error(5); 68 for i:=1,2,3,4 do 69 user_id(i):=buf.iaf(i); 70 password:=buf.laf(3); 71 end; 72 72 procedure error(err_nr); 73 <*-----------------------------------------------*> 74 <* Udskriv fejlmeddelelse på cur. output og stop *> 75 <*-----------------------------------------------*> 76 integer err_nr; 77 begin 78 close_output; 79 write(out,<:***:>,prog_name.laf,<: :>); 80 if err_nr<1 or err_nr>7 then 81 write(out,<:internal :>,err_nr) 82 else 83 write(out,case err_nr of ( 84 <:connect output:>,<:claims:>, 85 <:no system:>,<:no privilege:>, 86 <:not allowed:>,<:parameter:>, 87 <:not found:>)); 88 write(out,<:<10>:>); 89 goto stop; 90 end; 91 91 91 procedure set_output; 92 <*-----------------------------------------------*> 93 <* Set output zonen til enten cur. out eller fil *> 94 <*-----------------------------------------------*> 95 begin 96 integer seperator,result; 97 real array file_name(1:2); 98 98 seperator:=system(4,1,prog_name.raf); 99 if seperator shift (-12) = 6 then 100 begin 101 system(4,0,file_name); 102 fp_proc(29)stack_zone:(0,out,out_stack); 103 result:=2; 104 fp_proc(28)connect_output:(result,out,file_name); 105 if result=0 then 106 file_out:=true 107 else 108 error(1); 109 end 110 else 111 begin 112 system(4,0,prog_name.raf); 113 file_out:=false; 114 end; 115 end; 116 116 procedure close_output; 117 <*----------------------------------*> 118 <* Luk output zonen og unstack evt. *> 119 <*----------------------------------*> 120 begin 121 integer array ia(1:20); 122 integer size; 123 123 if file_out then 124 begin 125 fp_proc(34)close_up:(0,out,'em'); 126 fp_proc(79)terminate_zone:(0,out,0); 127 getzone6(out,ia); 128 size:=ia(9); 129 monitor(42,out,0,ia); 130 ia(1):=size; 131 ia(6):=systime(7,0,0.0); 132 monitor(44,out,0,ia); 133 fp_proc(30)unstack_zone:(0,out,out_stack); 134 end; 135 end; 136 136 procedure set_buf_zone; 137 <*-------------------------------------------*> 138 <* Sæt zonen buf klar til message til tas *> 139 <*-------------------------------------------*> 140 begin 141 open(buf,0,<:tas:>,0); 142 close(buf,false); 143 end; 144 144 procedure send_modify_mess(size,mode,func,result); 145 <*--------------------------------------------------------------*> 146 <* Send modify message til tas. Repeter hvis process stoppes *> 147 <* Message sendes via zonen buf *> 148 <* *> 149 <* size (call) : Antal hw der skal sendes/modtages i buf *> 150 <* mode (call) : 1=user, 2=terminal, 3=type *> 151 <* func (call) : 0=get, 1=modify, 2=set new, 3=delete *> 152 <* result (ret) : Resultat fra message, 0=OK *> 153 <*--------------------------------------------------------------*> 154 integer size,mode,func,result; 155 begin 156 integer array share(1:12),zone_ia(1:20); 157 boolean send; 158 integer i; 159 159 send:=false; 160 while not send do 161 begin 162 getshare6(buf,share,1); 163 getzone6(buf,zone_ia); 164 share(1):=0; 165 share(4):=(11 shift 12)+mode; 166 share(5):=zone_ia(19)+1; 167 share(6):=share(5)+size-2; 168 share(7):=func; 169 setshare6(buf,share,1); 170 for i:=1 step 1 until 4 do 171 buf.iaf(i):=user_id(i); 172 buf.iaf(5):=password shift (-24); 173 buf.iaf(6):=password extract 24; 174 if monitor(16,buf,1,share)=0 then 175 error(2); 176 if monitor(18,buf,1,share)<>1 then 177 error(3); 178 result:=share(1); 179 if result<>8 then 180 send:=true; 181 end; 182 end; 183 183 procedure get_cat_seg(cat_type,seg_nr,status,segments); 184 <*--------------------------------------------------------------*> 185 <* Send get catalog segment message til tas *> 186 <* Message sendes via zonen buf *> 187 <* Læst segment står i buf. *> 188 <* *> 189 <* cat_type (call) : 1=user, 2=terminal, 3=type *> 190 <* seg_nr (call) : Det segment der skal læses *> 191 <* status (ret) : Status bit ved retur (ingen sat = OK) *> 192 <* segments (ret) : Antal segmenter i angivet katalog *> 193 <*--------------------------------------------------------------*> 194 integer cat_type,seg_nr,status,segments; 195 begin 196 integer array share(1:12),zone_ia(1:20); 197 boolean send; 198 integer i; 199 199 send:=false; 200 while not send do 201 begin 202 getshare6(buf,share,1); 203 getzone6(buf,zone_ia); 204 share(1):=0; 205 share(4):=(3 shift 12); 206 share(5):=zone_ia(19)+1; 207 share(6):=share(5)+510; 208 share(7):=seg_nr; 209 share(8):=cat_type; 210 setshare6(buf,share,1); 211 for i:=1 step 1 until 4 do 212 buf.iaf(i):=user_id(i); 213 buf.iaf(5):=password shift (-24); 214 buf.iaf(6):=password extract 24; 215 if monitor(16,buf,1,share)=0 then 216 error(2); 217 if monitor(18,buf,1,share)<>1 then 218 error(3); 219 status:=share(1); 220 segments:=share(4); 221 if not (false add (status shift (-23))) then 222 send:=true; 223 end; 224 end; 225 225 procedure write_field_name(key); 226 <*--------------------------------------*> 227 <* Udskriv navnet på feltet på ny linie *> 228 <*--------------------------------------*> 229 integer key; 230 begin 231 write(out,<:<10>:>); 232 write(out,true,12,case key of ( 233 <:user:>,<:password:>,<:cpassword:>,<:monday:>,<:tuesday:>, 234 <:wednesday:>,<:thursday:>,<:friday:>,<:saturday:>,<:sunday:>, 235 <:sessions:>,<:privilege:>,<:mclname:>,<:base:>,<:groups:>, 236 <:mcltext:>,<:block:>,<:terminal:>,<:termtype:>,<:termgroup:>, 237 <:block:>,<:type:>,<:screentype:>,<:column:>,<:lines:>, 238 <:bypass:>,<:sbup:>,<:sbdown:>,<:sbleft:>,<:sbright:>, 239 <:sbhome:>,<:sbdelete:>,<:ceod:>,<:ceol:>, 240 <:home:>,<:left:>,<:right:>,<:up:>,<:down:>,<:xxxx:>, 241 <:xxxxx:>,<:invon:>,<:invoff:>,<:hlon:>,<:hloff:>, 242 <:delete:>,<:insert:>,<:cursor:>,<:init:>,<:freetext:>)); 243 end; 244 244 procedure write_field(key,field_value,field_type); 245 <*------------------------------------------------------------------*> 246 <* Udskriv en linie indholden keyword og parrametre *> 247 <* *> 248 <* key (call) : Feltets key *> 249 <* field_value (call) : Peger til første hw i buf hvor værdier står *> 250 <* field_type (call) : Typen af værdien i feltet *> 251 <*------------------------------------------------------------------*> 252 integer key,field_value,field_type; 253 begin 254 long array field llaf; 255 integer array field liaf; 256 long field lf; 257 integer field inf; 258 boolean array field baf; 259 integer pos,i,j,ch; 260 260 case field_type of 261 begin 262 begin <* 1 *> 263 write_field_name(key); 264 llaf:=field_value-1; 265 write(out,buf.llaf); 266 end; 267 begin <* 2 *> 268 llaf:=liaf:=field_value-1; 269 if (buf.liaf(1) shift (-4))<>0 then 270 begin 271 write_field_name(key); 272 buf.liaf(11):=0; 273 write(out,buf.llaf); 274 end; 275 end; 276 begin <* 3 *> 277 baf:=field_value; 278 if buf.baf(0) then 279 write_field_name(key); 280 end; 281 begin <* 4 *> 282 lf:=field_value+3; 283 if buf.lf<>0 then 284 begin 285 write_field_name(key); 286 write(out,<<dd>,buf.lf); 287 end; 288 end; 289 begin <* 5 *> 290 write_field_name(key); 291 inf:=field_value+1; 292 write(out,<<dd>,buf.inf); 293 end; 294 begin <* 6 *> 295 baf:=field_value; 296 i:=buf.baf(0) extract 12; 297 if i<>0 then 298 begin 299 write_field_name(key); 300 write(out,<<dd>,i); 301 end; 302 end; 303 begin <* 7 *> 304 llaf:=field_value-1; 305 if get_char(buf.llaf,1,conv,ch) extract 12<>0 then 306 begin 307 write_field_name(key); 308 pos:=1; 309 repeat 310 get_char(buf.llaf,pos,conv,ch); 311 if ch<>0 then 312 write(out,<<zdd >,ch); 313 until pos>6 or ch=0; 314 end; 315 end; 316 begin <* 8 *> 317 llaf:=field_value-1; 318 if get_char(buf.llaf,1,conv,ch) extract 12<>0 then 319 begin 320 write_field_name(key); 321 pos:=1; 322 repeat 323 get_char(buf.llaf,pos,conv,ch); 324 if ch<>0 then 325 write(out,<<zdd >,ch); 326 until pos>9 or ch=0; 327 end; 328 end; 329 begin <* 9 *> 330 llaf:=field_value-1; 331 if get_char(buf.llaf,1,conv,ch) extract 12<>0 then 332 begin 333 write_field_name(key); 334 pos:=1; 335 repeat 336 get_char(buf.llaf,pos,conv,ch); 337 if ch<>0 then 338 write(out,<<zdd >,ch); 339 until pos>75 or ch=0; 340 end; 341 end; 342 begin <* 10 *> 343 baf:=field_value; 344 i:=buf.baf(0) extract 12; 345 if i<>0 then 346 begin 347 write_field_name(key); 348 for pos:=11 step (-1) until 0 do 349 begin 350 if false add (i shift (-pos)) then 351 write(out,<<dd >,11-pos); 352 end; 353 end; 354 end; 355 begin <* 11 *> 356 write_field_name(key); 357 for j:=1 step 2 until 7 do 358 begin 359 inf:=field_value+j; 360 i:=buf.inf; 361 for pos:=23 step (-1) until 0 do 362 begin 363 if false add (i shift (-pos)) then 364 write(out,<<dd >,23-pos+((j-1)*12)); 365 end; 366 end; 367 end; 368 begin <* 12 *> 369 llaf:=field_value+1; 370 if buf.llaf(0) extract 12<>0 then 371 begin 372 write_field_name(key); 373 put_char(buf.llaf,(buf.llaf(0) extract 12)+1,0); 374 write(out,buf.llaf); 375 end; 376 end; 377 begin <* 13 *> 378 write_field_name(key); 379 inf:=field_value+1; 380 write(out,<<d>,buf.inf); 381 inf:=field_value+3; 382 write(out,<: :>,<<d>,buf.inf); 383 end; 384 begin <* 14 *> 385 baf:=field_value; 386 i:=buf.baf(0) extract 12; 387 if (i extract 2)<>0 then 388 begin 389 write_field_name(key); 390 write(out,<<dd >,i shift (-7),i shift (-2) extract 5); 391 end; 392 end; 393 end; 394 end; 395 395 procedure list_user; 396 <*--------------------------------------*> 397 <* Udskriv indholdet af en user indgang *> 398 <*--------------------------------------*> 399 begin 400 integer array u_id(1:4); 401 integer sep,i,result; 402 402 sep:=system(4,param,u_id.raf); 403 if sep=(8 shift 12 + 10) then 404 begin 405 param:=param+1; 406 for i:=1 step 1 until 4 do 407 buf.iaf(6+i):=u_id(i); 408 send_modify_mess(132,1,0,result); 409 if result=0 then 410 begin 411 for i:=1 step 1 until 17 do 412 write_field( case i of ( 413 1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,50), 414 case i of ( 415 13,21,25,26,27,28,29,30,31,33,34,35,43,47,55,32,111), 416 case i of ( 417 1,4,14,14,14,14,14,14,14,6,10,1,13,11,12,6,2)); 418 418 end 419 else 420 if result<>2 then 421 begin 422 if result=4 then 423 error(4) 424 else 425 if result=13 then 426 error(5) 427 else 428 error(8); 429 end 430 else 431 begin 432 no_found:=true; 433 write(out,<:<10>; user.:>,u_id.laf,<: entry not found:>); 434 end; 435 write(out,<:<10>:>); 436 end 437 else 438 error(6); 439 end; 440 440 procedure list_term; 441 <*------------------------------------------*> 442 <* Udskriv indholdet af en terminal indgang *> 443 <*------------------------------------------*> 444 begin 445 long array t_id(1:2); 446 integer sep,i,j,ch,result; 447 long array field llaf; 448 448 llaf:=12; 449 sep:=system(4,param,t_id.raf); 450 if sep=(8 shift 12 + 10) then 451 begin 452 param:=param+1; 453 j:=i:=1; 454 get_char(t_id,i,conv,ch); 455 if ch='t' then 456 get_char(t_id,i,conv,ch); 457 buf.llaf(2):=0; 458 while i<13 do 459 begin 460 put_char(buf.llaf,j,conv,ch); 461 get_char(t_id,i,conv,ch); 462 end; 463 send_modify_mess(46,2,0,result); 464 if result=0 then 465 begin 466 for i:=1 step 1 until 6 do 467 write_field( case i of (18,19,20,26,21,50), 468 case i of (13,21,24,23,22,25), 469 case i of (1,6,6,3,6,2)); 470 end 471 else 472 if result<>2 then 473 begin 474 if result=4 then 475 error(4) 476 else 477 if result=13 then 478 error(5) 479 else 480 error(9); 481 end 482 else 483 begin 484 no_found:=true; 485 write(out,<:<10>; terminal.:>,buf.llaf,<: entry not found:>); 486 end; 487 write(out,<:<10>:>); 488 end 489 else 490 error(6); 491 end; 492 492 procedure list_type; 493 <*--------------------------------------*> 494 <* Udskriv indholdet af en user indgang *> 495 <*--------------------------------------*> 496 begin 497 real array type(1:2); 498 integer sep,i,result; 499 499 sep:=system(4,param,type); 500 if sep=(8 shift 12 + 4) then 501 begin 502 param:=param+1; 503 buf.iaf(7):=type(1); 504 send_modify_mess(140,3,0,result); 505 if result=0 then 506 begin 507 for i:=1 step 1 until 26 do 508 write_field( case i of ( 509 22,23,24,25,27,28,29,30,31,32,33,34,35,36,37,38,39, 510 42,43,44,45,46,47,48,49,50), 511 case i of ( 512 13,15,17,18,19,20,21,22,23,24,25,29,67,65,66,63,64, 513 33,37,41,45,49,53,57,69,119), 514 case i of ( 515 5,10,6,6,6,6,6,6,6,6,7,7,6,6,6,6,6,7,7,7,7,7,7,8, 516 9,2)); 517 end 518 else 519 if result<>2 then 520 begin 521 if result=4 then 522 error(4) 523 else 524 if result=13 then 525 error(5) 526 else 527 error(5); 528 end 529 else 530 begin 531 no_found:=true; 532 write(out,<:<10>; type.:>,<<d>,entier type(1),<: entry not found:>); 533 end; 534 write(out,<:<10>:>); 535 end 536 else 537 error(6); 538 end; 539 539 procedure list_size; 540 <*-------------------------------------------------*> 541 <* Udskriv antallet af indgange i de tre kataloger *> 542 <*-------------------------------------------------*> 543 begin 544 integer user_ent,term_ent,type_ent,status; 545 545 get_cat_seg(1,0,status,user_size); 546 if status<>0 then 547 begin 548 if false add (status shift (-11)) then 549 error(4) 550 else 551 if false add (status shift (-10)) then 552 error(5) 553 else 554 error(11); 555 end; 556 user_hw:=buf.iaf(3); 557 user_ent:=(user_size-1)*(512//user_hw); 558 get_cat_seg(2,0,status,term_size); 559 if status<>0 then 560 begin 561 if false add (status shift (-11)) then 562 error(4) 563 else 564 if false add (status shift (-10)) then 565 error(5) 566 else 567 error(12); 568 end; 569 term_hw:=buf.iaf(3); 570 term_ent:=(term_size-1)*(512//term_hw); 571 get_cat_seg(3,0,status,type_size); 572 if status<>0 then 573 begin 574 if false add (status shift (-11)) then 575 error(4) 576 else 577 if false add (status shift (-10)) then 578 error(5) 579 else 580 error(13); 581 end; 582 type_hw:=buf.iaf(3); 583 type_ent:=(type_size-1)*(512//type_hw); 584 write(out,<:; Catalog generated at: :>); 585 outdate(out,entier systime(6,buf.iaf(4),0.0)); 586 write(out,<:<10>size :>,<<d>, 587 user_ent,<:,:>,term_ent,<:,:>,type_ent); 588 write(out,<: ; Max. entries (User,Terminal,Terminaltype)<10>:>); 589 end; 590 590 procedure list_all; 591 <*-----------------------------------------*> 592 <* Udskriv alle indgange i de 3 kataloger *> 593 <*-----------------------------------------*> 594 begin 595 integer array field base; 596 integer seg_nr,i; 597 597 list_size; 598 for seg_nr:=1 step 1 until user_size-1 do 599 begin 600 get_cat_seg(1,seg_nr,0,0); 601 for base:=4 step user_hw until ((512//user_hw)-1)*user_hw+4 do 602 begin 603 if buf.base(0)<>0 then 604 begin 605 for i:=1 step 1 until 17 do 606 write_field( case i of ( 607 1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,50), 608 base-12+(case i of ( 609 13,21,25,26,27,28,29,30,31,33,34,35,43,47,55,32,111)), 610 case i of ( 611 1,4,14,14,14,14,14,14,14,6,10,1,13,11,12,6,2)); 612 612 write(out,<:<10>:>); 613 end; 614 end; 615 end; 616 for seg_nr:=1 step 1 until term_size-1 do 617 begin 618 get_cat_seg(2,seg_nr,0,0); 619 for base:=4 step term_hw until ((512//term_hw)-1)*term_hw+4 do 620 begin 621 if buf.base(0)<>0 then 622 begin 623 for i:=1 step 1 until 6 do 624 write_field( case i of (18,19,20,26,21,50), 625 base-12+(case i of (13,21,24,23,22,25)), 626 case i of (1,6,6,3,6,2)); 627 write(out,<:<10>:>); 628 end; 629 end; 630 end; 631 for seg_nr:=1 step 1 until type_size-1 do 632 begin 633 get_cat_seg(3,seg_nr,0,0); 634 for base:=0 step type_hw until ((512//type_hw)-1)*type_hw do 635 begin 636 if buf.base(1)<>0 then 637 begin 638 for i:=1 step 1 until 26 do 639 write_field( case i of ( 640 22,23,24,25,27,28,29,30,31,32,33,34,35,36,37,38,39, 641 42,43,44,45,46,47,48,49,50), 642 base-12+(case i of ( 643 13,15,17,18,19,20,21,22,23,24,25,29,67,65,66,63,64, 644 33,37,41,45,49,53,57,69,119)), 645 case i of ( 646 5,10,6,6,6,6,6,6,6,6,7,7,6,6,6,6,6,7,7,7,7,7,7,8, 647 9,2)); 648 write(out,<:<10>:>); 649 end; 650 end; 651 end; 652 end; 653 653 procedure list; 654 <*-----------------------------------------------*> 655 <* Bestem hvilken type udskrift der skal udføres *> 656 <*-----------------------------------------------*> 657 begin 658 real array name(1:2); 659 659 param:=if file_out then 660 2 661 else 662 1; 663 while system(4,param,name)<>0 do 664 begin 665 param:=param+1; 666 if name.laf(1)= long <:user:> then 667 list_user 668 else 669 if name.laf(1)= long <:termi:> add 'n' then 670 list_term 671 else 672 if name.laf(1)= long <:type:> then 673 list_type 674 else 675 if name.laf(1)= long <:size:> then 676 list_size 677 else 678 if name.laf(1)= long <:all:> then 679 list_all 680 else 681 error(6); 682 end; 683 end; 684 684 <* Hoved program *> 685 trap(alarm); 686 trapmode:=1 shift 10; 687 raf:=laf:=iaf:=baf:=0; 688 no_found:=false; 689 for i:=0 step 1 until 255 do 690 conv(i):=i; 691 set_output; 692 get_userid; 693 set_buf_zone; 694 list; 695 if file_out and no_found then 696 error(7); 697 alarm: 698 close_output; 699 stop: 700 end;\f algol end 72 ▶EOF◀