|
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: 22272 (0x5700) Types: TextFile Names: »ltctxt «
└─⟦9ccaf6601⟧ Bits:30008165 Bånd med SW8000 kildetekst/release værktøjer └─⟦39138f30b⟧ └─⟦this⟧ »ltctxt «
begin <********************************************************************> <* Utility LISTTASCAT til udskrift af tas katalog indgange. *> <* *> <* Kald: <out-file> = listtascat <out-spec.> *> <* *> <* user.<name> *> <* terminal.<name> *> <* <out-spec.> ::= type.<number> *> <* size *> <* all *> <* *> <* Compiler call: listtascat=algol ltctxt connect.no *> <********************************************************************> <**************************************************************> <* Revision history *> <* *> <* 87.02.01 listtascat release 1.0 *> <* 88.01.07 MODE parameter added release 1.1 *> <* 89.02.21 NOLOGIN parameter added, release 1.2 *> <**************************************************************> <* Globale variable *> zone buf(128,1,std_error); <* Zone til message m.m. *> integer array user_id(1:4); <* Bruger id fra terminal *> long password; <* Password fra terminal *> boolean file_out; <* True= connect to file *> boolean no_found; <* Entry ikke fundet *> integer array out_stack(1:4); <* out zone stack *> integer array prog_name(1:4); <* Program navn *> integer array conv(0:255); <* Tegn konverterings tabel *> integer param; <* fp parameter tæller *> integer user_size; <* Antal seg i user cat *> integer term_size; <* Antal seg i term cat *> integer type_size; <* Antal seg i type cat *> integer user_hw; <* Antal hw i user entry *> integer term_hw; <* Antal hw i term entry *> integer type_hw; <* Antal hw i type entry *> integer array field iaf; <* Work *> real array field raf; <* Work *> boolean array field baf; <* Work *> long array field laf; <* Work *> integer i; <* Work *> <* Globale procedure *> procedure get_userid; <*-------------------------------------------------------------------*> <* Set user id og password i de globale variable user_id og password *> <* Id og password hentes fra terminalen tilknyttet prim. output *> <*-------------------------------------------------------------------*> begin long array term_name(1:2); integer i; integer array ia(1:20); system(7,0,term_name); open(buf,0,term_name,0); close(buf,false); getzone6(buf,ia); i:=ia(19); getshare6(buf,ia,1); ia(4):=131 shift 12; ia(5):=i+1; ia(6):=i+11; ia(7):=0; setshare6(buf,ia,1); if monitor(16,buf,1,ia)=0 then error(2); if monitor(18,buf,1,ia)<>1 then error(5); if ia(1)<>0 then error(5); for i:=1,2,3,4 do user_id(i):=buf.iaf(i); password:=buf.laf(3); end; procedure error(err_nr); <*-----------------------------------------------*> <* Udskriv fejlmeddelelse på cur. output og stop *> <*-----------------------------------------------*> integer err_nr; begin close_output; write(out,<:***:>,prog_name.laf,<: :>); if err_nr<1 or err_nr>7 then write(out,<:internal :>,err_nr) else write(out,case err_nr of ( <:connect output:>,<:claims:>, <:no system:>,<:no privilege:>, <:not allowed:>,<:parameter:>, <:not found:>)); write(out,<:<10>:>); goto stop; end; procedure set_output; <*-----------------------------------------------*> <* Set output zonen til enten cur. out eller fil *> <*-----------------------------------------------*> begin integer seperator,result; real array file_name(1:2); seperator:=system(4,1,prog_name.raf); if seperator shift (-12) = 6 then begin system(4,0,file_name); fp_proc(29)stack_zone:(0,out,out_stack); result:=2; fp_proc(28)connect_output:(result,out,file_name); if result=0 then file_out:=true else error(1); end else begin system(4,0,prog_name.raf); file_out:=false; end; end; procedure close_output; <*----------------------------------*> <* Luk output zonen og unstack evt. *> <*----------------------------------*> begin integer array ia(1:20); integer size; if file_out then begin fp_proc(34)close_up:(0,out,'em'); fp_proc(79)terminate_zone:(0,out,0); getzone6(out,ia); size:=ia(9); monitor(42,out,0,ia); ia(1):=size; ia(6):=systime(7,0,0.0); monitor(44,out,0,ia); fp_proc(30)unstack_zone:(0,out,out_stack); end; end; procedure set_buf_zone; <*-------------------------------------------*> <* Sæt zonen buf klar til message til tas *> <*-------------------------------------------*> begin open(buf,0,<:tas:>,0); close(buf,false); end; procedure send_modify_mess(size,mode,func,result); <*--------------------------------------------------------------*> <* Send modify message til tas. Repeter hvis process stoppes *> <* Message sendes via zonen buf *> <* *> <* size (call) : Antal hw der skal sendes/modtages i buf *> <* mode (call) : 1=user, 2=terminal, 3=type *> <* func (call) : 0=get, 1=modify, 2=set new, 3=delete *> <* result (ret) : Resultat fra message, 0=OK *> <*--------------------------------------------------------------*> integer size,mode,func,result; begin integer array share(1:12),zone_ia(1:20); boolean send; integer i; send:=false; while not send do begin getshare6(buf,share,1); getzone6(buf,zone_ia); share(1):=0; share(4):=(11 shift 12)+mode; share(5):=zone_ia(19)+1; share(6):=share(5)+size-2; share(7):=func; setshare6(buf,share,1); for i:=1 step 1 until 4 do buf.iaf(i):=user_id(i); buf.iaf(5):=password shift (-24); buf.iaf(6):=password extract 24; if monitor(16,buf,1,share)=0 then error(2); if monitor(18,buf,1,share)<>1 then error(3); result:=share(1); if result<>8 then send:=true; end; end; procedure get_cat_seg(cat_type,seg_nr,status,segments); <*--------------------------------------------------------------*> <* Send get catalog segment message til tas *> <* Message sendes via zonen buf *> <* Læst segment står i buf. *> <* *> <* cat_type (call) : 1=user, 2=terminal, 3=type *> <* seg_nr (call) : Det segment der skal læses *> <* status (ret) : Status bit ved retur (ingen sat = OK) *> <* segments (ret) : Antal segmenter i angivet katalog *> <*--------------------------------------------------------------*> integer cat_type,seg_nr,status,segments; begin integer array share(1:12),zone_ia(1:20); boolean send; integer i; send:=false; while not send do begin getshare6(buf,share,1); getzone6(buf,zone_ia); share(1):=0; share(4):=(3 shift 12); share(5):=zone_ia(19)+1; share(6):=share(5)+510; share(7):=seg_nr; share(8):=cat_type; setshare6(buf,share,1); for i:=1 step 1 until 4 do buf.iaf(i):=user_id(i); buf.iaf(5):=password shift (-24); buf.iaf(6):=password extract 24; if monitor(16,buf,1,share)=0 then error(2); if monitor(18,buf,1,share)<>1 then error(3); status:=share(1); segments:=share(4); if not (false add (status shift (-23))) then send:=true; end; end; procedure write_field_name(key); <*--------------------------------------*> <* Udskriv navnet på feltet på ny linie *> <*--------------------------------------*> integer key; begin write(out,<:<10>:>); write(out,true,12,case key of ( <:user:>,<:password:>,<:cpassword:>,<:monday:>,<:tuesday:>, <:wednesday:>,<:thursday:>,<:friday:>,<:saturday:>,<:sunday:>, <:sessions:>,<:privilege:>,<:mclname:>,<:base:>,<:groups:>, <:mcltext:>,<:block:>,<:terminal:>,<:termtype:>,<:termgroup:>, <:block:>,<:type:>,<:screentype:>,<:column:>,<:lines:>, <:bypass:>,<:sbup:>,<:sbdown:>,<:sbleft:>,<:sbright:>, <:sbhome:>,<:sbdelete:>,<:ceod:>,<:ceol:>, <:home:>,<:left:>,<:right:>,<:up:>,<:down:>,<:mode:>, <:nologin:>,<:invon:>,<:invoff:>,<:hlon:>,<:hloff:>, <:delete:>,<:insert:>,<:cursor:>,<:init:>,<:freetext:>)); end; procedure write_field(key,field_value,field_type); <*------------------------------------------------------------------*> <* Udskriv en linie indholden keyword og parrametre *> <* *> <* key (call) : Feltets key *> <* field_value (call) : Peger til første hw i buf hvor værdier står *> <* field_type (call) : Typen af værdien i feltet *> <*------------------------------------------------------------------*> integer key,field_value,field_type; begin long array field llaf; integer array field liaf; long field lf; integer field inf; boolean array field baf; integer pos,i,j,ch; case field_type of begin begin <* 1 *> write_field_name(key); llaf:=field_value-1; write(out,buf.llaf); end; begin <* 2 *> llaf:=liaf:=field_value-1; if (buf.liaf(1) shift (-4))<>0 then begin write_field_name(key); buf.liaf(11):=0; write(out,buf.llaf); end; end; begin <* 3 *> baf:=field_value; if buf.baf(0) then write_field_name(key); end; begin <* 4 *> lf:=field_value+3; if buf.lf<>0 then begin write_field_name(key); write(out,<<dd>,buf.lf); end; end; begin <* 5 *> write_field_name(key); inf:=field_value+1; write(out,<<dd>,buf.inf); end; begin <* 6 *> baf:=field_value; i:=buf.baf(0) extract 12; if i<>0 then begin write_field_name(key); write(out,<<dd>,i); end; end; begin <* 7 *> llaf:=field_value-1; if get_char(buf.llaf,1,conv,ch) extract 12<>0 then begin write_field_name(key); pos:=1; repeat get_char(buf.llaf,pos,conv,ch); if ch<>0 then write(out,<<zdd >,ch); until pos>6 or ch=0; end; end; begin <* 8 *> llaf:=field_value-1; if get_char(buf.llaf,1,conv,ch) extract 12<>0 then begin write_field_name(key); pos:=1; repeat get_char(buf.llaf,pos,conv,ch); if ch<>0 then write(out,<<zdd >,ch); until pos>9 or ch=0; end; end; begin <* 9 *> llaf:=field_value-1; if get_char(buf.llaf,1,conv,ch) extract 12<>0 then begin write_field_name(key); pos:=1; repeat get_char(buf.llaf,pos,conv,ch); if ch<>0 then write(out,<<zdd >,ch); until pos>75 or ch=0; end; end; begin <* 10 *> baf:=field_value; i:=buf.baf(0) extract 12; if i<>0 then begin write_field_name(key); for pos:=11 step (-1) until 0 do begin if false add (i shift (-pos)) then write(out,<<dd >,11-pos); end; end; end; begin <* 11 *> write_field_name(key); for j:=1 step 2 until 7 do begin inf:=field_value+j; i:=buf.inf; for pos:=23 step (-1) until 0 do begin if false add (i shift (-pos)) then write(out,<<dd >,23-pos+((j-1)*12)); end; end; end; begin <* 12 *> llaf:=field_value+1; if buf.llaf(0) extract 12<>0 then begin write_field_name(key); put_char(buf.llaf,(buf.llaf(0) extract 12)+1,0); write(out,buf.llaf); end; end; begin <* 13 *> write_field_name(key); inf:=field_value+1; write(out,<<d>,buf.inf); inf:=field_value+3; write(out,<: :>,<<d>,buf.inf); end; begin <* 14 *> baf:=field_value; i:=buf.baf(0) extract 12; if (i extract 2)<>0 then begin write_field_name(key); write(out,<<dd >,i shift (-7),i shift (-2) extract 5); end; end; begin <* 15 *> baf:=field_value; i:=(buf.baf(0) extract 12) shift (-1); if i<>0 then begin write_field_name(key); write(out,<<dd>,i); end; end; end; end; procedure list_user; <*--------------------------------------*> <* Udskriv indholdet af en user indgang *> <*--------------------------------------*> begin integer array u_id(1:4); integer sep,i,result; sep:=system(4,param,u_id.raf); if sep=(8 shift 12 + 10) then begin param:=param+1; for i:=1 step 1 until 4 do buf.iaf(6+i):=u_id(i); send_modify_mess(132,1,0,result); if result=0 then begin for i:=1 step 1 until 17 do write_field( case i of ( 1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,50), case i of ( 13,21,25,26,27,28,29,30,31,33,34,35,43,47,55,32,111), case i of ( 1,4,14,14,14,14,14,14,14,6,10,1,13,11,12,6,2)); end else if result<>2 then begin if result=4 then error(4) else if result=13 then error(5) else error(8); end else begin no_found:=true; write(out,<:<10>; user.:>,u_id.laf,<: entry not found:>); end; write(out,<:<10>:>); end else error(6); end; procedure list_term; <*------------------------------------------*> <* Udskriv indholdet af en terminal indgang *> <*------------------------------------------*> begin long array t_id(1:2); integer sep,i,j,ch,result; long array field llaf; llaf:=12; sep:=system(4,param,t_id.raf); if sep=(8 shift 12 + 10) then begin param:=param+1; j:=i:=1; get_char(t_id,i,conv,ch); if ch='t' then get_char(t_id,i,conv,ch); buf.llaf(2):=0; while i<13 do begin put_char(buf.llaf,j,conv,ch); get_char(t_id,i,conv,ch); end; send_modify_mess(46,2,0,result); if result=0 then begin for i:=1 step 1 until 6 do write_field( case i of (18,19,20,26,41,21,50), case i of (13,21,24,23,23,22,25), case i of (1,6,6,3,15,6,2)); end else if result<>2 then begin if result=4 then error(4) else if result=13 then error(5) else error(9); end else begin no_found:=true; write(out,<:<10>; terminal.:>,buf.llaf,<: entry not found:>); end; write(out,<:<10>:>); end else error(6); end; procedure list_type; <*--------------------------------------*> <* Udskriv indholdet af en type indgang *> <*--------------------------------------*> begin real array type(1:2); integer sep,i,result; sep:=system(4,param,type); if sep=(8 shift 12 + 4) then begin param:=param+1; buf.iaf(7):=type(1); send_modify_mess(140,3,0,result); if result=0 then begin for i:=1 step 1 until 27 do write_field( case i of ( 22,23,40,24,25,27,28,29,30,31,32,33,34,35,36,37,38,39, 42,43,44,45,46,47,48,49,50), case i of ( 13,15,16,17,18,19,20,21,22,23,24,25,29,67,65,66,63,64, 33,37,41,45,49,53,57,69,119), case i of ( 5,10,6,6,6,6,6,6,6,6,6,7,7,6,6,6,6,6,7,7,7,7,7,7,8, 9,2)); end else if result<>2 then begin if result=4 then error(4) else if result=13 then error(5) else error(5); end else begin no_found:=true; write(out,<:<10>; type.:>,<<d>,entier type(1),<: entry not found:>); end; write(out,<:<10>:>); end else error(6); end; procedure list_size; <*-------------------------------------------------*> <* Udskriv antallet af indgange i de tre kataloger *> <*-------------------------------------------------*> begin integer user_ent,term_ent,type_ent,status; get_cat_seg(1,0,status,user_size); if status<>0 then begin if false add (status shift (-11)) then error(4) else if false add (status shift (-10)) then error(5) else error(11); end; user_hw:=buf.iaf(3); user_ent:=(user_size-1)*(512//user_hw); get_cat_seg(2,0,status,term_size); if status<>0 then begin if false add (status shift (-11)) then error(4) else if false add (status shift (-10)) then error(5) else error(12); end; term_hw:=buf.iaf(3); term_ent:=(term_size-1)*(512//term_hw); get_cat_seg(3,0,status,type_size); if status<>0 then begin if false add (status shift (-11)) then error(4) else if false add (status shift (-10)) then error(5) else error(13); end; type_hw:=buf.iaf(3); type_ent:=(type_size-1)*(512//type_hw); write(out,<:; Catalog generated at: :>); outdate(out,entier systime(6,buf.iaf(4),0.0)); write(out,<:<10>size :>,<<d>, user_ent,<:,:>,term_ent,<:,:>,type_ent); write(out,<: ; Max. entries (User,Terminal,Terminaltype)<10>:>); end; procedure list_all; <*-----------------------------------------*> <* Udskriv alle indgange i de 3 kataloger *> <*-----------------------------------------*> begin integer array field base; integer seg_nr,i; list_size; for seg_nr:=1 step 1 until user_size-1 do begin get_cat_seg(1,seg_nr,0,0); for base:=4 step user_hw until ((512//user_hw)-1)*user_hw+4 do begin if buf.base(0)<>0 then begin for i:=1 step 1 until 17 do write_field( case i of ( 1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,50), base-12+(case i of ( 13,21,25,26,27,28,29,30,31,33,34,35,43,47,55,32,111)), case i of ( 1,4,14,14,14,14,14,14,14,6,10,1,13,11,12,6,2)); write(out,<:<10>:>); end; end; end; for seg_nr:=1 step 1 until term_size-1 do begin get_cat_seg(2,seg_nr,0,0); for base:=4 step term_hw until ((512//term_hw)-1)*term_hw+4 do begin if buf.base(0)<>0 then begin for i:=1 step 1 until 6 do write_field( case i of (18,19,20,26,41,21,50), base-12+(case i of (13,21,24,23,23,22,25)), case i of (1,6,6,3,15,6,2)); write(out,<:<10>:>); end; end; end; for seg_nr:=1 step 1 until type_size-1 do begin get_cat_seg(3,seg_nr,0,0); for base:=0 step type_hw until ((512//type_hw)-1)*type_hw do begin if buf.base(1)<>0 then begin for i:=1 step 1 until 27 do write_field( case i of ( 22,23,40,24,25,27,28,29,30,31,32,33,34,35,36,37,38,39, 42,43,44,45,46,47,48,49,50), base-12+(case i of ( 13,15,16,17,18,19,20,21,22,23,24,25,29,67,65,66,63,64, 33,37,41,45,49,53,57,69,119)), case i of ( 5,10,6,6,6,6,6,6,6,6,6,7,7,6,6,6,6,6,7,7,7,7,7,7,8, 9,2)); write(out,<:<10>:>); end; end; end; end; procedure list; <*-----------------------------------------------*> <* Bestem hvilken type udskrift der skal udføres *> <*-----------------------------------------------*> begin real array name(1:2); param:=if file_out then 2 else 1; while system(4,param,name)<>0 do begin param:=param+1; if name.laf(1)= long <:user:> then list_user else if name.laf(1)= long <:termi:> add 'n' then list_term else if name.laf(1)= long <:type:> then list_type else if name.laf(1)= long <:size:> then list_size else if name.laf(1)= long <:all:> then list_all else error(6); end; end; <* Hoved program *> trap(alarm); trapmode:=1 shift 10; raf:=laf:=iaf:=baf:=0; no_found:=false; for i:=0 step 1 until 255 do conv(i):=i; set_output; get_userid; set_buf_zone; list; if file_out and no_found then error(7); alarm: close_output; stop: end; ▶EOF◀