DataMuseum.dk

Presents historical artifacts from the history of:

RC4000/8000/9000

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RC4000/8000/9000

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦71b6c40e5⟧ TextFile

    Length: 84480 (0x14a00)
    Types: TextFile
    Names: »utillist    «

Derivation

└─⟦9ccaf6601⟧ Bits:30008165 Bånd med SW8000 kildetekst/release værktøjer
    └─⟦39138f30b⟧ 
        └─⟦this⟧ »utillist    « 

TextFile

*algol mvmcltxt connect.no list.yes

mvmcltxt d.861121.1142
     1 begin
     2 <********************************************************************>
     3 <* Utility MOVEMCL til flytning af oversatte mcl programmer til     *>
     4 <* Tas mcl-database                                                 *>
     5 <*                                                                  *>
     6 <* Kald:              movemcl  <move spec.>                         *>
     7 <*                                                                  *>
     8 <*                    include.<name>                                *>
     9 <* <move spec.> ::=   get.<name>                                    *>
    10 <*                    lookup.<name>                                 *>
    11 <*                    lookup                                        *>
    12 <*                                                                  *>
    13 <* Henning Godske  A/S Regnecentralen 861121                        *>
    14 <* Compiler call: movemcl=algol mvmcltxt connect.no                 *>
    15 <********************************************************************>
    16 
    16 <**************************************************************>
    17 <* Revision history                                           *>
    18 <*                                                            *>
    19 <* 86.12.01   movemcl      release 1.0                        *>
    20 <**************************************************************>
    21 
    21 <* Globale variable *>
    22 
    22 zone buf(128,1,std_error);                       <* Zone til message m.m.    *>
    23 integer array user_id(1:4);                      <* Bruger id fra terminal   *>
    24 long password;                                   <* Password fra terminal    *>
    25 integer array prog_name(1:4);                    <* Program navn             *>
    26 integer param;                                   <* fp parameter tæller      *>
    27 integer array mcl_bases(1:2);                    <* Bases for mcl files      *>
    28 integer array user_bases(1:2);                   <* Egne bruger baser        *>
    29 integer array empty(1:4);                        <* Tomt navn                *>
    30 boolean eof;                                     <* End Of File              *>
    31 
    31 integer array arr(1:8);                          <* Work                     *>
    32 integer array field iaf;                         <* Work                     *>
    33 real array field raf;                            <* Work                     *>
    34 boolean array field baf;                         <* Work                     *>
    35 long array field laf;                            <* Work                     *>
    36 integer i;                                       <* Work                     *>
    37 
    37 <* Globale procedure *>
    38 
    38 procedure get_userid;
    39 <*-------------------------------------------------------------------*>
    40 <* Set user id og password i de globale variable user_id og password *>
    41 <* Id og password hentes fra terminalen tilknyttet prim. output      *>
    42 <*-------------------------------------------------------------------*>
    43 begin
    44   long array term_name(1:2);
    45   integer i;
    46   integer array ia(1:20);
    47   
    47   system(7,0,term_name);
    48   open(buf,0,term_name,0);
    49   close(buf,false);
    50   getzone6(buf,ia);
    51   i:=ia(19);
    52   getshare6(buf,ia,1);
    53   ia(4):=131 shift 12;
    54   ia(5):=i+1;
    55   ia(6):=i+11;
    56   ia(7):=0;
    57   setshare6(buf,ia,1);
    58   if monitor(16,buf,1,ia)=0 then
    59     error(8,empty);
    60   if monitor(18,buf,1,ia)<>1 then
    61     error(11,empty);
    62   if ia(1)<>0 then
    63     error(13,empty);
    64   for i:=1,2,3,4 do
    65     user_id(i):=buf.iaf(i);
    66   password:=buf.laf(3);
    67 end;
    68 
    68 procedure error(err_nr,name);
    69 <*-----------------------------------------------*>
    70 <* Udskriv fejlmeddelelse på cur. output og stop *>
    71 <*-----------------------------------------------*>
    72 integer err_nr;
    73 integer array name;
    74 begin
    75   write(out,<:<10>***:>,prog_name.laf,<:  :>,name.laf,<:  :>);
    76   if err_nr<1 or err_nr>13 then
    77     write(out,<:internal :>,err_nr)
    78   else
    79     write(out,case err_nr of (
    80               <:not found:>,<:error - not moved:>,
    81               <:exist allready:>,<:protected:>,
    82               <:in use:>,<:illegal name:>,
    83               <:no privilegie:>,<:claims:>,
    84               <:not a permanent file:>,<:parameter:>,
    85               <:no system:>,<:internal 12:>,
    86               <:not allowed:>));
    87   write(out,<:<10>:>);
    88   goto stop;
    89 end;
    90 
    90 procedure set_buf_zone;
    91 <*-------------------------------------------*>
    92 <* Sæt zonen buf klar til message til tas    *>
    93 <*-------------------------------------------*>
    94 begin
    95   open(buf,0,<:tas:>,0);
    96   close(buf,false);
    97 end;
    98 
    98 procedure send_move_mess(mode,name,bases,result);
    99 <*--------------------------------------------------------------*>
   100 <* Send move message til Tas.      Repeter hvis process stoppes *>
   101 <* Message sendes via zonen buf                                 *>
   102 <*                                                              *>
   103 <* mode (call)   : 0= Base, 1=To, 2=From                        *>
   104 <* name (call)   : Navn på fil der skal flyttes                 *>
   105 <* bases(call)   : Bruger baser hvor fil skal til/fra           *>
   106 <* result (ret)  : Resultat fra message, 0=OK                   *>
   107 <*--------------------------------------------------------------*>
   108 integer mode,result;
   109 integer array name,bases;
   110 begin
   111   integer array share(1:12),zone_ia(1:20);
   112   boolean send;
   113   integer i;
   114 
   114   send:=false;
   115   while not send do
   116   begin
   117     getshare6(buf,share,1);
   118     getzone6(buf,zone_ia);
   119     share(1):=0;
   120     share(4):=(15 shift 12)+mode;
   121     share(5):=zone_ia(19)+1;
   122     share(6):=share(5)+22;
   123     setshare6(buf,share,1);
   124     for i:=1 step 1 until 4 do
   125       buf.iaf(i):=user_id(i);
   126     buf.iaf(5):=password shift (-24);
   127     buf.iaf(6):=password extract 24;
   128     for i:=1,2,3,4 do
   129       buf.iaf(6+i):=name(i);
   130     buf.iaf(11):=bases(1);
   131     buf.iaf(12):=bases(2);
   132     if monitor(16,buf,1,share)=0 then
   133       error(8,empty);
   134     if monitor(18,buf,1,share)<>1 then
   135       error(11,empty);
   136     result:=share(1);
   137     mcl_bases(1):=share(4);
   138     mcl_bases(2):=share(5);
   139     if result<>8 then
   140       send:=true;
   141   end;
   142 end;
   143 
   143 procedure cat_error(z,s,b);
   144 <*------------------------------------------*>
   145 <* Catalog læsnings fejl procedure          *>
   146 <*------------------------------------------*>
   147 zone z;
   148 integer s,b;
   149 begin
   150   if false add (s shift (-18)) then
   151   begin
   152     b:=34;
   153     eof:=true;
   154   end
   155   else
   156     std_error(z,s,b);
   157 end;
   158 
   158 procedure lookup_entry(name);
   159 <*---------------------------------------------*>
   160 <* Find mcl-fil entry i katalog med givet navn *>
   161 <*---------------------------------------------*>
   162 integer array name;
   163 begin
   164   integer result;
   165   long array field llaf;
   166   real r;
   167 
   167   send_move_mess(0,name,mcl_bases,result);
   168   if result=0 then
   169   begin
   170     write(out,<:<10>:>,true,14,name.laf,<: :>);
   171     outdate(out,round systime(6,buf.iaf(11),r));
   172     write(out,<: :>);
   173     outdate(out,round r);
   174     llaf:=2;
   175     write(out,<:  :>,true,12,buf.llaf,<<ddddd>,buf.iaf(12));
   176   end
   177   else
   178     if result=1 then
   179       write(out,<:<10>***:>,prog_name.laf,<:  :>,name.laf,<: not found:>)
   180     else
   181       error(result,name);
   182 end;
   183 
   183 procedure lookup_all;
   184 <*---------------------------*>
   185 <* Find mcl-filer i catalog  *>
   186 <*---------------------------*>
   187 begin
   188   zone cat(128,1,cat_error);
   189   long array field llaf;
   190   real r;
   191   integer result;
   192 
   192   send_move_mess(0,prog_name,mcl_bases,result);
   193   if result>6 then
   194     error(result,empty);
   195   open(cat,4,<:catalog:>,1 shift 18);
   196   eof:=false;
   197   inrec6(cat,34);
   198   while not eof do
   199   begin
   200     if cat.iaf(1)<>-1 then
   201     begin
   202       if cat.iaf(2)=mcl_bases(1) and
   203          cat.iaf(3)=mcl_bases(2) and
   204          cat.iaf(16)=29 shift 12 then
   205       begin
   206         llaf:=6;
   207         write(out,<:<10>:>,true,14,cat.llaf,<: :>);
   208         outdate(out,round systime(6,cat.iaf(13),r));
   209         write(out,<: :>);
   210         outdate(out,round r);
   211         llaf:=16;
   212         write(out,<:  :>,true,12,cat.llaf,<<ddddd>,cat.iaf(17));
   213       end;
   214     end;
   215     inrec6(cat,34);
   216   end;
   217 end;
   218 
   218 procedure lookup_files;
   219 <*---------------------------*>
   220 <* Lookup parameter funktion *>
   221 <*---------------------------*>
   222 begin
   223   integer array name(1:4);
   224 
   224   if system(4,param,name.raf)<>(8 shift 12 + 10) then
   225     lookup_all
   226   else
   227     repeat
   228       param:=param+1;
   229       lookup_entry(name);
   230     until system(4,param,name.raf)<>(8 shift 12 + 10);
   231 end;
   232 
   232 procedure move_file(mode);
   233 <*---------------------------------*>
   234 <* Flyt filer til/fra system       *>
   235 <*                                 *>
   236 <* mode (call) : 1=To, 2=From      *>
   237 <*---------------------------------*>
   238 integer mode;
   239 begin
   240   integer array name(1:4);
   241   integer result;
   242 
   242   while system(4,param,name.raf)=(8 shift 12 + 10) do
   243   begin
   244     param:=param+1;
   245     send_move_mess(mode,name,user_bases,result);
   246     if result<>0 then
   247       error(result,name);
   248   end;
   249 end;
   250 
   250 procedure move;
   251 <*-----------------*>
   252 <* Hoved procedure *>
   253 <*-----------------*>
   254 begin
   255   integer array parameter(1:4);
   256 
   256   while system(4,param,parameter.raf)=(4 shift 12 + 10) do
   257   begin
   258     param:=param+1;
   259     if parameter.laf(1)=long <:inclu:> add 'd' then
   260       move_file(1)
   261     else
   262       if parameter.laf(1)=long <:get:> then
   263         move_file(2)
   264       else
   265         if parameter.laf(1)=long <:looku:> add 'p' then
   266           lookup_files
   267         else
   268           error(10,parameter);
   269   end;
   270   if system(4,param,parameter.raf)<>0 then
   271     error(10,parameter);
   272 end;
   273 
   273 <* Hoved program *>
   274   trapmode:=1 shift 10;
   275   raf:=laf:=iaf:=0;
   276   for i:=1,2,3,4 do empty(i):=0;
   277   if system(4,1,prog_name.raf)=(6 shift 12 + 10) then
   278     param:=2
   279   else
   280   begin
   281     system(4,0,prog_name.raf);
   282     param:=1;
   283   end;
   284   get_userid;
   285   set_buf_zone;
   286   system(11,0,arr);
   287   user_bases(1):=arr(5);
   288   user_bases(2):=arr(6);
   289   move;
   290   write(out,<:<10>:>);
   291 stop:
   292 end;\f


algol end 49
*head ▶7f◀1
\f

tasgen  1987.05.14  11.40
*algol dtctxt connect.no list.yes

dtctxt d.861121.1146
     1 begin
     2 <********************************************************************>
     3 <* Utility DELTASCAT til sletning af tas katalog indgange.          *>
     4 <*                                                                  *>
     5 <* Kald:              deltascat <del-spec.>                         *>
     6 <*                                                                  *>
     7 <*                    user.<name>                                   *>
     8 <* <del-spec.> ::=    terminal.<name>                               *>
     9 <*                    type.<number>                                 *>
    10 <*                                                                  *>
    11 <* Compiler call: deltascat=algol dtctxt connect.no                 *>
    12 <********************************************************************>
    13 
    13 <**************************************************************>
    14 <* Revision history                                           *>
    15 <*                                                            *>
    16 <* 86.12.01   deltascat    release 1.0                        *>
    17 <**************************************************************>
    18 
    18 <* Globale variable *>
    19 
    19 zone buf(128,1,std_error);                       <* Zone til message m.m.    *>
    20 integer array user_id(1:4);                      <* Bruger id fra terminal   *>
    21 long password;                                   <* Password fra terminal    *>
    22 integer array prog_name(1:4);                    <* Program navn             *>
    23 integer array conv(0:255);                       <* Tegn konverterings tabel *>
    24 integer param;                                   <* fp parameter tæller      *>
    25 
    25 integer array field iaf;                         <* Work                     *>
    26 real array field raf;                            <* Work                     *>
    27 long array field laf;                            <* Work                     *>
    28 integer i;                                       <* Work                     *>
    29 
    29 <* Globale procedure *>
    30 
    30 procedure get_userid;
    31 <*-------------------------------------------------------------------*>
    32 <* Set user id og password i de globale variable user_id og password *>
    33 <* Id og password hentes fra terminalen tilknyttet prim. output      *>
    34 <*-------------------------------------------------------------------*>
    35 begin
    36   long array term_name(1:2);
    37   integer i;
    38   integer array ia(1:20);
    39   
    39   system(7,0,term_name);
    40   open(buf,0,term_name,0);
    41   close(buf,false);
    42   getzone6(buf,ia);
    43   i:=ia(19);
    44   getshare6(buf,ia,1);
    45   ia(4):=131 shift 12;
    46   ia(5):=i+1;
    47   ia(6):=i+11;
    48   ia(7):=0;
    49   setshare6(buf,ia,1);
    50   if monitor(16,buf,1,ia)=0 then
    51     error(7);
    52   if monitor(18,buf,1,ia)<>1 then
    53     error(3);
    54   if ia(1)<>0 then
    55     error(3);
    56   for i:=1,2,3,4 do
    57     user_id(i):=buf.iaf(i);
    58   password:=buf.laf(3);
    59 end;
    60 
    60 procedure error(err_nr);
    61 <*-----------------------------------------------*>
    62 <* Udskriv fejlmeddelelse og stop hvis fatal     *>
    63 <*-----------------------------------------------*>
    64 integer err_nr;
    65 begin
    66   if err_nr>2 then
    67     write(out,<:***:>,prog_name.laf,<:  :>);
    68   if err_nr<1 or err_nr>7 then
    69     write(out,<:internal :>,err_nr)
    70   else
    71     write(out,case err_nr of (
    72               <:in use:>,<:not found:>,
    73               <:not allowed:>,<:no privilege:>,
    74               <:no system:>,<:parameter:>,
    75               <:claims:>));
    76   write(out,<:<10>:>);
    77   if err_nr>2 then
    78     goto stop;
    79 end;
    80 
    80 procedure set_buf_zone;
    81 <*-------------------------------------------*>
    82 <* Sæt zonen buf klar til message til tas    *>
    83 <*-------------------------------------------*>
    84 begin
    85   open(buf,0,<:tas:>,0);
    86   close(buf,false);
    87 end;
    88 
    88 procedure send_modify_mess(size,mode,func,result);
    89 <*--------------------------------------------------------------*>
    90 <* Send modify message til tas.    Repeter hvis process stoppes *>
    91 <* Message sendes via zonen buf                                 *>
    92 <*                                                              *>
    93 <* size (call)   : Antal hw der skal sendes/modtages i buf      *>
    94 <* mode (call)   : 1=user, 2=terminal, 3=type                   *>
    95 <* func (call)   : 0=get, 1=modify, 2=set new, 3=delete         *>
    96 <* result (ret)  : Resultat fra message, 0=OK                   *>
    97 <*--------------------------------------------------------------*>
    98 integer size,mode,func,result;
    99 begin
   100   integer array share(1:12),zone_ia(1:20);
   101   boolean send;
   102   integer i;
   103 
   103   send:=false;
   104   while not send do
   105   begin
   106     getshare6(buf,share,1);
   107     getzone6(buf,zone_ia);
   108     share(1):=0;
   109     share(4):=(11 shift 12)+mode;
   110     share(5):=zone_ia(19)+1;
   111     share(6):=share(5)+size-2;
   112     share(7):=func;
   113     setshare6(buf,share,1);
   114     for i:=1 step 1 until 4 do
   115       buf.iaf(i):=user_id(i);
   116     buf.iaf(5):=password shift (-24);
   117     buf.iaf(6):=password extract 24;
   118     if monitor(16,buf,1,share)=0 then
   119       error(2);
   120     if monitor(18,buf,1,share)<>1 then
   121       error(3);
   122     result:=share(1);
   123     if result<>8 then
   124       send:=true;
   125   end;
   126 end;
   127 
   127 procedure del_user;
   128 <*----------------------*>
   129 <* Slet en user indgang *>
   130 <*----------------------*>
   131 begin
   132   integer array u_id(1:4);
   133   integer sep,i,result;
   134 
   134   sep:=system(4,param,u_id.raf);
   135   if sep=(8 shift 12 + 10) then
   136   begin
   137     param:=param+1;
   138     for i:=1 step 1 until 4 do
   139       buf.iaf(6+i):=u_id(i);
   140     send_modify_mess(20,1,3,result);
   141     write(out,<:user.:>,u_id.laf,<: :>);
   142     if result<>0 then
   143     begin
   144       if result=13 then
   145         error(3)
   146       else
   147         error(result);
   148     end
   149     else
   150       write(out,<:deleted<10>:>);
   151   end
   152   else
   153     error(6);
   154 end;
   155 
   155 procedure del_term;
   156 <*--------------------------*>
   157 <* Slet en terminal indgang *>
   158 <*--------------------------*>
   159 begin
   160   long array t_id(1:2);
   161   integer sep,i,j,ch,result;
   162   long array field llaf;
   163   
   163   llaf:=12;
   164   sep:=system(4,param,t_id.raf);
   165   if sep=(8 shift 12 + 10) then
   166   begin
   167     param:=param+1;
   168     j:=i:=1;
   169     get_char(t_id,i,conv,ch);
   170     if ch='t' then
   171       get_char(t_id,i,conv,ch);
   172     buf.llaf(2):=0;
   173     while i<13 do
   174     begin
   175       put_char(buf.llaf,j,conv,ch);
   176       get_char(t_id,i,conv,ch);
   177     end;
   178     send_modify_mess(20,2,3,result);
   179     write(out,<:terminal.:>,buf.llaf,<: :>);
   180     if result<>0 then
   181     begin
   182       if result=13 then
   183         error(3)
   184       else
   185         error(result);
   186     end
   187     else
   188       write(out,<:deleted<10>:>);
   189   end
   190   else
   191     error(6);
   192 end;
   193 
   193 procedure del_type;
   194 <*----------------------*>
   195 <* Slet en type indgang *>
   196 <*----------------------*>
   197 begin
   198   real array type(1:2);
   199   integer sep,i,result;
   200 
   200   sep:=system(4,param,type);
   201   if sep=(8 shift 12 + 4) then
   202   begin
   203     param:=param+1;
   204     buf.iaf(7):=type(1);
   205     send_modify_mess(14,3,3,result);
   206     write(out,<:type.:>,<<d>,buf.iaf(7),<: :>);
   207     if result<>0 then
   208     begin
   209       if result=13 then
   210         error(3)
   211       else
   212         error(result);
   213     end
   214     else
   215       write(out,<:deleted<10>:>);
   216   end
   217   else
   218     error(6);
   219 end;
   220 
   220 procedure delete;
   221 <*-----------------------------------------------*>
   222 <* Bestem hvilken indgange der skal slettes      *>
   223 <*-----------------------------------------------*>
   224 begin
   225   real array name(1:2);
   226   
   226   while system(4,param,name)<>0 do
   227   begin
   228     param:=param+1;
   229     if name.laf(1)= long <:user:> then
   230       del_user
   231     else
   232       if name.laf(1)= long <:termi:> add 'n' then
   233         del_term
   234       else
   235         if name.laf(1)= long <:type:> then
   236           del_type
   237         else
   238           error(6);
   239   end;
   240 end;
   241 
   241 <* Hoved program *>
   242   trapmode:=1 shift 10;
   243   raf:=laf:=iaf:=0;
   244   for i:=0 step 1 until 255 do
   245     conv(i):=i;
   246   if system(4,1,prog_name.raf)=(6 shift 12 + 10) then
   247     param:=2
   248   else
   249   begin
   250     system(4,0,prog_name.raf);
   251     param:=1;
   252   end;
   253   get_userid;
   254   set_buf_zone;
   255   delete;
   256 stop:
   257 end;\f


algol end 49
*head ▶7f◀1
\f

tasgen  1987.05.14  11.41
*algol stctxt list.yes

stctxt d.861223.1340
     1 begin
     2 <********************************************************************>
     3 <* Utility SETTASCAT til indsættelse og opdatering af indgange      *>
     4 <*                                                                  *>
     5 <* Kald:              settascat  <in-spec.>                         *>
     6 <*                                                                  *>
     7 <*         <in-spec.> ::= current input or file                     *>
     8 <*                                                                  *>
     9 <* Compiler call: settascat=algol stctxt connect.yes                *>
    10 <*                                                                  *>
    11 <********************************************************************>
    12 
    12 <**************************************************************>
    13 <* Revision history                                           *>
    14 <*                                                            *>
    15 <* 86.12.01   settascat    release 1.0                        *>
    16 <**************************************************************>
    17 
    17 <* Globale variable *>
    18 
    18 zone buf(128,1,std_error);                       <* Zone til message m.m.    *>
    19 integer array user_id(1:4);                      <* Bruger id fra terminal   *>
    20 long password;                                   <* Password fra terminal    *>
    21 integer array prog_name(1:4);                    <* Program navn             *>
    22 integer array conv(0:255);                       <* Tegn konverterings tabel *>
    23 integer param;                                   <* fp parameter tæller      *>
    24 integer line_nr;                                 <* Input linie nummer       *>
    25 integer array mcl_bases(1:2);                    <* System mcl baser         *>
    26 integer num_keys;                                <* Antal keywords           *>
    27 long array keywords(0:60);                       <* Keywords array           *>
    28 
    28 integer array field iaf;                         <* Work                     *>
    29 real array field raf;                            <* Work                     *>
    30 boolean array field baf;                         <* Work                     *>
    31 long array field laf;                            <* Work                     *>
    32 integer i;                                       <* Work                     *>
    33 
    33 <* Procedure til afhjælpelse af fejl i externe procedure *>
    34 
    34 integer procedure put_ch(dest,pos,char,rep);
    35 long array dest;
    36 integer pos,char,rep;
    37 begin
    38   trap(local);
    39   put_ch:=putchar(dest,pos,char,rep);
    40   if false then
    41     local: put_ch:=-1;
    42 end;
    43 
    43 integer procedure put_txt(dest,pos,text,length);
    44 long array dest,text;
    45 integer pos,length;
    46 begin
    47   trap(local);
    48   put_txt:=puttext(dest,pos,text,length);
    49   if false then
    50     local: put_txt:=-1;
    51 end;
    52 
    52 <* Globale procedure *>
    53 
    53 procedure init_keywords;
    54 <*-------------------------------------------*>
    55 <* initialiser keywords                      *>
    56 <*-------------------------------------------*>
    57 begin
    58   integer i;
    59 
    59   num_keys:=50;
    60   for i:=1 step 1 until num_keys do
    61   begin
    62     keywords(i):=0;
    63     keywords(i):= long (case i of
    64     <*  1 *>  (<:end:>,<:size:>,<:user:>,<:passw:>,<:cpass:>,
    65     <*  6 *>   <:monda:>,<:tuesd:>,<:wedne:>,<:thurs:>,<:frida:>,
    66     <* 11 *>   <:satur:>,<:sunda:>,<:block:>,<:sessi:>,<:privi:>,
    67     <* 16 *>   <:mclna:>,<:base:>,<:group:>,<:mclte:>,<:freet:>,
    68     <* 21 *>   <:termi:>,<:termt:>,<:termg:>,<:bypas:>,<:type:>,
    69     <* 26 *>   <:scree:>,<:colum:>,<:lines:>,<:sbup:>,<:sbdow:>,
    70     <* 31 *>   <:sblef:>,<:sbrig:>,<:sbhom:>,<:sbdel:>,<:ceod:>,
    71     <* 36 *>   <:ceol:>,<:invon:>,<:invof:>,<:hlon:>,<:hloff:>,
    72     <* 41 *>   <:delet:>,<:inser:>,<:curso:>,<:up:>,<:down:>,
    73     <* 46 *>   <:left:>,<:right:>,<:home:>,<:xxxxx:>,<:init:>));
    74   end;
    75 end;
    76 
    76 integer procedure find_keyword_value(keyword);
    77 <*----------------------------------------------------------------*>
    78 <* Find 'token' værdien for det angivne keyword                   *>
    79 <*                                                                *>
    80 <* keyword (call) : Long indeholdende op til 5 tegn af keyword    *>
    81 <* Return         : Værdien for det angivne keyword eller         *>
    82 <*                  0 hvis keyword er ukendt                      *>
    83 <*----------------------------------------------------------------*>
    84 long keyword;
    85 begin
    86   integer i;
    87 
    87   i:=num_keys+1;
    88   keyword:=(keyword shift (-8)) shift 8;
    89   for i:=i-1 while not (keyword=keywords(i)) and (i<>0) do; <* nothing *>
    90   find_keyword_value:=i;
    91   if i=0 and keyword<>0 then
    92     write_mess(8,false);
    93 end;
    94 
    94 procedure next_line;
    95 <*-------------------------------------------------------*>
    96 <* Læs til starten af næste linie i input                *>
    97 <* Linier der starter med ; eller er blanke overspringes *>
    98 <* Linie tæller optælles med 1 for hver linie            *>
    99 <*                                                       *>
   100 <*-------------------------------------------------------*>
   101 begin
   102   integer i;
   103 
   103   repeatchar(in);
   104   readchar(in,i);
   105   while (i<>'nl') and (i<>'em') do
   106     readchar(in,i);
   107   line_nr:=line_nr+1;
   108   readchar(in,i);
   109   if i<>'em' then
   110   begin
   111     while i=' ' do
   112       readchar(in,i);
   113     if i='nl' or i='em' or i=';' then
   114     begin
   115       next_line;
   116       readchar(in,i);
   117     end;
   118   end;
   119   repeatchar(in);
   120 end;
   121 
   121 integer procedure read_start_key;
   122 <*-------------------------------------------------------------------*>
   123 <* Find værdien af nøgleordet i starten af tekst linien i input      *>
   124 <*                                                                   *>
   125 <* Return : -1  =  Sidste linie i fil er læst                        *>
   126 <*           0  =  Nøgleord er ikke fundet                           *>
   127 <*          >0  =  Nøgleordets værdi                                 *>
   128 <*-------------------------------------------------------------------*>
   129 begin
   130   long array key(1:5);
   131   integer i;
   132   
   132   readchar(in,i);
   133   if i<>'em' then
   134   begin
   135     while i=' ' do
   136       readchar(in,i);
   137     if i='nl' or i='em' or i=';' then
   138     begin
   139       next_line;
   140       readchar(in,i);
   141     end;
   142   end;
   143   repeatchar(in);
   144   read_start_key:=if readstring(in,key,1)>0 then
   145                     find_keyword_value(key(1))
   146                   else
   147                     -1;
   148   repeatchar(in);
   149 end;
   150 
   150 integer procedure read_text(text,max);
   151 <*---------------------------------------------------------------------*>
   152 <* Læs tekst fra input til text,   til slutning af linie eller til     *>
   153 <* maximalt antal tegn læst. Indledende blanktegn overspringes.        *>
   154 <*                                                                     *>
   155 <* text (ret)  : Den læste tekst                                       *>
   156 <* max  (call) : Det maximale antal tegn der læses                     *>
   157 <* Return      : Antal tegn læst til text                              *>
   158 <*                                                                     *>
   159 <*---------------------------------------------------------------------*>
   160 integer max;
   161 long array text;
   162 begin
   163   integer ch,pos;
   164   boolean first;
   165 
   165   pos:=1;
   166   first:=true;
   167   text(1):=0;
   168   repeatchar(in);
   169   readchar(in,ch);
   170   if (ch<>'nl') and (ch<>'em') then
   171   begin
   172     readchar(in,ch);
   173     while ch<>'nl' and ch<>'em' and pos<=max do
   174     begin
   175       if first and (ch<>' ') then
   176         first:=false;
   177       if -,first then
   178         put_ch(text,pos,ch,1);
   179       readchar(in,ch);
   180     end;
   181   end;
   182   read_text:=pos-1;
   183   if pos<=max then
   184     put_ch(text,pos,0,1);
   185   repeatchar(in);
   186 end;
   187 
   187 boolean procedure read_nr(nr);
   188 <*-----------------------------------------------------------------*>
   189 <* Læs et heltal fra input. Er der ikke flere tal på linien        *>
   190 <* returneres -1 ellers det læste tal. Er der angivet ulovligt     *>
   191 <* tal (eller andet end tal) sættes read_nr til false              *>
   192 <*                                                                 *>
   193 <* nr (ret)    : Læst tal eller -1 hvis ikke flere tal             *>
   194 <* Return      : True = ok  False = illegalt tal                   *>
   195 <*-----------------------------------------------------------------*>
   196 integer nr;
   197 begin
   198   integer ch,class;
   199 
   199   read_nr:=true;
   200   repeat
   201     class:=readchar(in,ch);
   202   until class<>7 or ch=';' ;
   203   if ch=';' or class=8 then
   204     nr:=-1
   205   else
   206     if class<2 or class>3 then
   207     begin
   208       nr:=-1;
   209       read_nr:=false;
   210     end
   211     else
   212     begin
   213       repeatchar(in);
   214       read(in,nr);
   215     end;
   216   repeatchar(in);
   217 end;
   218 
   218 boolean procedure read_name(name,ok);
   219 <*---------------------------------------------------------------------*>
   220 <* Læs et navn fra input   til name. Resterende tegn nulstilles        *>
   221 <* Indledende blanktegn overspringes. Der stoppes ved kommentar        *>
   222 <*                                                                     *>
   223 <* name (ret)  : Det læste navn i integer array name(1:4)              *>
   224 <* ok (ret)    : True hvis navnet starter med bogstav                  *>
   225 <*---------------------------------------------------------------------*>
   226 integer array name;
   227 boolean ok;
   228 begin
   229   integer ch,pos;
   230   
   230   ok:=false;
   231   for pos:=1,2,3,4 do
   232     name(pos):=0;
   233   pos:=1;
   234   repeatchar(in);
   235   readchar(in,ch);
   236   while ch=' ' do
   237     readchar(in,ch);
   238   if ch>='a' and ch<='å' then
   239     ok:=true;
   240   while ((ch>='0'and ch<='9') or (ch>='a' and ch<='å')) and pos<=11 do
   241   begin
   242     put_ch(name.laf,pos,ch,1);
   243     readchar(in,ch);
   244   end;
   245   repeatchar(in);
   246   read_name:=not name(1)=0;
   247 end;
   248 
   248 procedure clear_high(i);
   249 <*---------------------------*>
   250 <* Nulstil 12 high bit i ord *>
   251 <*---------------------------*>
   252 integer i;
   253 begin
   254   i:=(i shift 12) shift (-12);
   255 end;
   256 
   256 procedure clear_low(i);
   257 <*---------------------------*>
   258 <* Nulstil 12 low bit i ord  *>
   259 <*---------------------------*>
   260 integer i;
   261 begin
   262   i:=(i shift (-12)) shift 12;
   263 end;
   264 
   264 procedure set_entry;
   265 <*------------------------------------------------------*>
   266 <* Indsæt værdier læst fra input i indgange i kataloget *>
   267 <*------------------------------------------------------*>
   268 begin
   269     integer key,result,i,first,last,type;
   270     integer array id(1:4);
   271     integer array field entry;
   272     boolean exist,ok;
   273     long array password(1:8);
   274     
   274     line_nr:=1;
   275     key:=read_start_key;
   276     while key=0 or key=2 do
   277     begin
   278       if key=2 then
   279       begin
   280         write(out,<:Size field ignored<10>:>);
   281         setposition(out,0,0);
   282       end;
   283       next_line;
   284       key:=read_start_key;
   285     end;
   286     while (key<>1 <* end *>) and (key<>-1) do
   287     begin
   288       if key=3 then
   289       begin <* user entry *>
   290         if not read_name(id,ok) then
   291           write_mess(12,false);
   292         if not ok then
   293           write_mess(12,false);
   294         for i:=1,2,3,4 do
   295           buf.iaf(i+6):=id(i);
   296         send_modify_mess(132,1,0,result);
   297         if result=0 or result=2 then
   298         begin <* ok *>
   299           entry:=10;
   300           exist:=true;
   301           write(out,<:User :>,id.laf,<: :>);
   302           if result=2 then
   303           begin <* ny bruger *>
   304             <* init entry *>
   305             exist:=false;
   306             for i:=6 step 1 until 61 do
   307               buf.entry(i):=0;
   308             buf.entry(12):=1 shift 12; <* Max sessions          *>
   309             buf.entry(23):=2 shift 12; <* mcl def. text  empty  *>
   310             buf.entry(19):=1 shift 23;  <* term. group 0         *>
   311           end;
   312           next_line;
   313           key:=read_start_key;
   314           while (key>=4) and (key<=20) do
   315           begin
   316             <* indsæt i entry *>
   317             if (key>=6) and (key<=12) then
   318             begin <* læs first og last for login tid *>
   319               if not(read_nr(first) and read_nr(last)) then
   320                 write_mess(11,false);
   321               if first<0 or first>24 or last<0 or last>24 then
   322                 write_mess(11,false);
   323               type:=if first=0 and last=24 then
   324                       3
   325                     else
   326                       if first=last then
   327                         0
   328                       else
   329                         if first<last then
   330                           1
   331                         else
   332                           2;
   333             end;
   334             begin
   335               case key-3 of
   336               begin
   337                 begin <* password *>
   338                   for i:=1 step 1 until 8 do
   339                     password(i):=0;
   340                   buf.entry(6):=0;
   341                   buf.entry(7):=0;
   342                   if read_text(password,48)>0 then
   343                   begin <* kod password *>
   344                     for last:=1 step 1 until 31 do
   345                     begin
   346                       key:=password.baf(last) extract 12;
   347                       for i:=last+1 step 1 until 32 do
   348                         password.baf(i):=false add
   349                           ((password.baf(i) extract 12) + key);
   350                     end;
   351                     for i:=1 step 1 until 16 do
   352                     begin
   353                       buf.entry(6):=buf.entry(6)+
   354                         password.iaf(i);
   355                       buf.entry(7):=buf.entry(7)+
   356                         buf.entry(6);
   357                     end;
   358                   end;
   359                 end;
   360                 begin <* kodet password *>
   361                   read(in,password(1));
   362                   buf.entry(6):=password(1) shift (-24);
   363                   buf.entry(7):=password(1) extract 24;
   364                 end;
   365                 begin <* monday  *> 
   366                   clear_high(buf.entry(8));
   367                   buf.entry(8):=buf.entry(8)+
   368                      ((first shift 7)+(last shift 2) + type) shift 12; 
   369                 end;
   370                 begin <* tuesday *>
   371                   clear_low(buf.entry(8));
   372                   buf.entry(8):=buf.entry(8)+
   373                      ((first shift 7)+(last shift 2) + type); 
   374                 end;
   375                 begin <* wednesday *> 
   376                   clear_high(buf.entry(9));
   377                   buf.entry(9):=buf.entry(9)+
   378                      ((first shift 7)+(last shift 2) + type) shift 12; 
   379                 end;
   380                 begin <* thursday *>
   381                   clear_low(buf.entry(9));
   382                   buf.entry(9):=buf.entry(9)+
   383                      ((first shift 7)+(last shift 2) + type); 
   384                 end;
   385                 begin <* friday  *> 
   386                   clear_high(buf.entry(10));
   387                   buf.entry(10):=buf.entry(10)+
   388                      ((first shift 7)+(last shift 2) + type) shift 12; 
   389                 end;
   390                 begin <* saturday *>
   391                   clear_low(buf.entry(10));
   392                   buf.entry(10):=buf.entry(10)+
   393                      ((first shift 7)+(last shift 2) + type); 
   394                 end;
   395                 begin <* sunday  *> 
   396                   clear_high(buf.entry(11));
   397                   buf.entry(11):=buf.entry(11)+
   398                      ((first shift 7)+(last shift 2) + type) shift 12; 
   399                 end;
   400                 begin <* block *>
   401                   if not read_nr(i) or i<0 then
   402                     write_mess(11,false);
   403                   clear_low(buf.entry(11));
   404                   buf.entry(11):=buf.entry(11)+i;
   405                 end;
   406                 begin <* sessions *>
   407                   clear_high(buf.entry(12));
   408                   if not read_nr(i) or i>9 or i<1 then
   409                     write_mess(11,false);
   410                   buf.entry(12):=buf.entry(12)+(i shift 12);
   411                 end;
   412                 begin <* privilegier *>
   413                   type:=0;
   414                   clear_low(buf.entry(12));
   415                   if not read_nr(i) then
   416                     write_mess(11,false);
   417                   while (i>=0) do
   418                   begin
   419                     if i>11 then
   420                       write_mess(11,false);
   421                     type:=type+(1 shift (11-i));
   422                     if not read_nr(i) then
   423                       write_mess(11,false);
   424                   end;
   425                   buf.entry(12):=buf.entry(12)+type;
   426                 end;
   427                 begin <* mcl name *>
   428                   if not read_name(id,ok) then
   429                     write_mess(12,false);
   430                   if not ok then
   431                     write_mess(12,false);
   432                   for i:=1,2,3,4 do
   433                     buf.entry(i+12):=id(i);
   434                 end;
   435                 begin <* mcl bases *>
   436                   if not(read_nr(first) and read_nr(last)) then
   437                     write_mess(11,false);
   438                   if first>last then
   439                     write_mess(11,false);
   440                   buf.entry(17):=first;
   441                   buf.entry(18):=last;
   442                 end;
   443                 begin <* groups *>
   444                   for i:=1 step 1 until 4 do
   445                     id(i):=0;
   446                   if not read_nr(i) then
   447                     write_mess(11,false);
   448                   while i>=0 do
   449                   begin
   450                     if i>95 then
   451                       write_mess(11,false);
   452                     first:=(i//24)+1;
   453                     last:=23-(i mod 24);
   454                     if -,(false add (id(first) shift (-last))) then
   455                       id(first):=id(first)+(1 shift last);
   456                     if not read_nr(i) then
   457                       write_mess(11,false);
   458                   end;
   459                   for i:=1 step 1 until 4 do
   460                     buf.entry(18+i):=id(i);
   461                 end;
   462                 begin <* mcl text *>
   463                   laf:=46;
   464                   i:=read_text(buf.entry.laf,80);
   465                   buf.entry(23):=
   466                      ((((i+2)//3*2)+2) shift 12) + i;
   467                   laf:=0;
   468                 end;
   469                 begin <* free text *>
   470                   laf:=100;
   471                   read_text(buf.entry.laf,30);
   472                   laf:=0;
   473                 end;
   474               end;
   475             end;
   476             next_line;
   477             key:=read_start_key;
   478           end;
   479           if exist then
   480             send_modify_mess(132,1,1,result)
   481           else
   482             send_modify_mess(132,1,2,result);
   483           if result<>0 then
   484           begin
   485             if result=1 then
   486               write_mess(1,true)
   487             else
   488               write_mess(result,false);
   489           end
   490           else
   491             if exist then
   492               write_mess(3,true)
   493             else
   494               write_mess(2,true);
   495         end
   496         else
   497           write_mess(result,false);
   498       end
   499       else
   500         if key=21 then
   501         begin <* terminal entry *>
   502           if not read_name(id,ok) then
   503             write_mess(12,false);
   504           for i:=1,2,3,4 do
   505             buf.iaf(i+6):=id(i);
   506           send_modify_mess(46,2,0,result);
   507           if result=0 or result=2 then
   508           begin
   509             exist:=true;
   510             entry:=10;
   511             write(out,<:Terminal :>,id.laf,<: :>);
   512             if result=2 then
   513             begin
   514               <* init entry *>
   515               exist:=false;
   516               for i:=7 step 1 until 18 do
   517                 buf.entry(i):=0;
   518               buf.entry(6):=1 shift 12; <* terminal type *>
   519             end;
   520             next_line;
   521             key:=read_start_key;
   522             while (key>=22 and key<=24) or key=13 or key=20 do
   523             begin
   524               <* indsæt i entry *>
   525               if key=22 then
   526               begin <* Terminal type *>
   527                 if not read_nr(i) or i<0 or i>2047 then
   528                   write_mess(11,false);
   529                 clear_high(buf.entry(6));
   530                 buf.entry(6):=buf.entry(6)+
   531                    i shift 12;
   532               end;
   533               if key=23 then
   534               begin <* terminal group *>
   535                 if not read_nr(i) or i<0 or i>95 then
   536                   write_mess(11,false);
   537                 clear_low(buf.entry(7));
   538                 buf.entry(7):=buf.entry(7)+i;
   539               end;
   540               if key=20 then
   541               begin <* free text *>
   542                 laf:=14;
   543                 read_text(buf.entry.laf,30);
   544                 laf:=0;
   545               end;
   546               if key=13 then
   547               begin <* block *>
   548                 if not read_nr(i) or i<0 or i>4095 then
   549                   write_mess(11,false);
   550                 clear_low(buf.entry(6));
   551                 buf.entry(6):=buf.entry(6)+i;
   552               end;
   553               if key=24 then
   554               begin <* bypass *>
   555                 clear_high(buf.entry(7));
   556                 if not read_nr(i) or i<>0 then
   557                   buf.entry(7):=buf.entry(7)+(1 shift 12);
   558               end;
   559               next_line;
   560               key:=read_start_key;
   561             end;
   562             if exist then
   563               send_modify_mess(46,2,1,result)
   564             else
   565               send_modify_mess(46,2,2,result);
   566             if result<>0 then
   567             begin
   568               if result=1 then
   569                 write_mess(1,true)
   570               else
   571                 write_mess(result,false);
   572             end
   573             else
   574               if exist then
   575                 write_mess(3,true)
   576               else
   577                 write_mess(2,true);
   578           end
   579           else
   580             write_mess(result,false);
   581         end
   582         else
   583           if key=25 then
   584           begin <* type entry *>
   585             if not read_nr(type) or type<1 or key>2047 then
   586               write_mess(11,false);
   587             buf.iaf(7):=type;
   588             send_modify_mess(140,3,0,result);
   589             if result=0 or result=2 then
   590             begin
   591               exist:=true;
   592               entry:=12;
   593               write(out,<:Type :>,<<dd>,type,<: :>);
   594               if result=2 then
   595               begin
   596                 <* init entry *>
   597                 exist:=false;
   598                 for i:=2 step 1 until 64 do
   599                   buf.entry(i):=0;
   600                 buf.entry(1):=type; <* terminal type *>
   601                 buf.entry(3):=(80 shift 12)+24;
   602               end;
   603               next_line;
   604               key:=read_start_key;
   605               while ((key>=26) and (key<=50)) or (key=20) do
   606               begin
   607                 <* indsæt i entry *>
   608                 if key=26 then
   609                 begin <* screen type *>
   610                   type:=0;
   611                   if not read_nr(i) then
   612                     write_mess(11,false);
   613                   while (i>=0) do
   614                   begin
   615                     if i>23 then
   616                       write_mess(11,false);
   617                     type:=type+(1 shift (23-i));
   618                     if not read_nr(i) then
   619                       write_mess(11,false);
   620                   end;
   621                   buf.entry(2):=type;
   622                 end;
   623                 if (key>=27) and (key<=34) then
   624                 begin <* 'send by' værdier *>
   625                   boolean array field baf;
   626                   baf:=0;
   627                   if not read_nr(i) or i>255 or i<0 then
   628                     write_mess(11,false);
   629                   buf.entry.baf(key-22):=if i>0 then
   630                                            false add i
   631                                          else
   632                                            false;
   633                 end;
   634                 if (key>=44) and (key<=49) then
   635                 begin <* et tegns  værdier *>
   636                   boolean array field baf;
   637                   baf:=0;
   638                   if not read_nr(i) or i>255 or i<0 then
   639                     write_mess(11,false);
   640                   buf.entry.baf(key+7):=if i>0 then
   641                                           false add i
   642                                         else
   643                                           false;
   644                 end;
   645                 if (key>=35) and (key<=42) then
   646                 begin <* 6 tegns sekevnser *>
   647                   if not read_nr(i) or i>255 or i<0 then
   648                     write_mess(11,false);
   649                   first:=1;
   650                   laf:=case (key-34) of
   651                        (12,16,20,24,28,32,36,40);
   652                   buf.entry.laf(1):=0;
   653                   while (i<>-1) and (first<=6) do
   654                   begin
   655                     put_ch(buf.entry.laf,first,i,1);
   656                     if first<=6 then
   657                     begin
   658                       if not read_nr(i) or i>255 or i<-1 then
   659                         write_mess(11,false);
   660                     end;
   661                   end;
   662                   laf:=0;
   663                 end;
   664                 if key=43 then
   665                 begin <* cursor sekvens *>
   666                   if not read_nr(i) or i>255 or i<0 then
   667                     write_mess(11,false);
   668                   first:=1;
   669                   laf:=44;
   670                   buf.entry.laf(1):=0;
   671                   while (i<>-1) and (first<=9) do
   672                   begin
   673                     put_ch(buf.entry.laf,first,i,1);
   674                     if first<=9 then
   675                     begin
   676                       if not read_nr(i) or i>255 or i<-1 then
   677                         write_mess(11,false);
   678                     end;
   679                   end;
   680                   laf:=0;
   681                 end;
   682                 if key=50 then
   683                 begin <* initialiserings sekvens *>
   684                   laf:=56;
   685                   put_ch(buf.entry.laf,1,0,75);
   686                   if not read_nr(i) or i>255 or i<0 then
   687                     write_mess(11,false);
   688                   first:=1;
   689                   while (i<>-1) and (first<=75) do
   690                   begin
   691                     put_ch(buf.entry.laf,first,i,1);
   692                     if first<=75 then
   693                     begin
   694                       if not read_nr(i) or i>255 or i<-1 then
   695                         write_mess(11,false);
   696                     end;
   697                   end;
   698                   laf:=0;
   699                 end;
   700                 if key=20 then
   701                 begin <* free text *>
   702                   laf:=106;
   703                   read_text(buf.entry.laf,30);
   704                   laf:=0;
   705                 end;
   706                 next_line;
   707                 key:=read_start_key;
   708               end;
   709               if exist then
   710                 send_modify_mess(140,3,1,result)
   711               else
   712                 send_modify_mess(140,3,2,result);
   713               if result<>0 then
   714               begin
   715                 if result=1 then
   716                   write_mess(1,true)
   717                 else
   718                   write_mess(result,false);
   719               end
   720               else
   721                 if exist then
   722                   write_mess(3,true)
   723                 else
   724               write_mess(2,true);
   725             end
   726             else
   727               write_mess(result,false);
   728           end
   729           else
   730             write_mess(8,false);
   731         end;
   732     end;
   733 
   733 procedure get_userid;
   734 <*-------------------------------------------------------------------*>
   735 <* Set user id og password i de globale variable user_id og password *>
   736 <* Id og password hentes fra terminalen tilknyttet prim. output      *>
   737 <*-------------------------------------------------------------------*>
   738 begin
   739   long array term_name(1:2);
   740   integer i;
   741   integer array ia(1:20);
   742   
   742   system(7,0,term_name);
   743   open(buf,0,term_name,0);
   744   close(buf,false);
   745   getzone6(buf,ia);
   746   i:=ia(19);
   747   getshare6(buf,ia,1);
   748   ia(4):=131 shift 12;
   749   ia(5):=i+1;
   750   ia(6):=i+11;
   751   ia(7):=0;
   752   setshare6(buf,ia,1);
   753   if monitor(16,buf,1,ia)=0 then
   754     write_mess(5,false);
   755   if monitor(18,buf,1,ia)<>1 then
   756     write_mess(10,false);
   757   if ia(1)<>0 then
   758     write_mess(10,false);
   759   for i:=1,2,3,4 do
   760     user_id(i):=buf.iaf(i);
   761   password:=buf.laf(3);
   762 end;
   763 
   763 procedure write_mess(nr,cont);
   764 <*-------------------------------------------*>
   765 <* Udskriv meddelelse på current output      *>
   766 <*-------------------------------------------*>
   767 integer nr;
   768 boolean cont;
   769 begin
   770   if not cont then
   771     write(out,<:  error<10>***:>,prog_name.laf,<:  :>);
   772   if nr=13 then
   773     nr:=9;
   774   if nr>13 then
   775     write(out,<:internal :>,<<dd>,nr)
   776   else
   777     write(out,case nr of (
   778             <:in use:>,<:inserted:>,<:updated:>,<:no privilege:>,
   779             <:claims:>,<:catalog full:>,<:update conflict:>,
   780             <:unknown field name:>,<:not allowed:>,<:no system:>,
   781             <:illegal number:>,<:illegal name:>));
   782   if nr=11 or nr=12 or nr=8 or nr=1 or nr=6 or nr=7 then
   783     write(out,<: at line :>,<<dd>,line_nr);
   784   write(out,<:<10>:>);
   785   setposition(out,0,0);
   786   if (not cont) or nr>13 then
   787     goto stop;
   788 end;
   789 
   789 procedure set_buf_zone;
   790 <*-------------------------------------------*>
   791 <* Sæt zonen buf klar til message til tas    *>
   792 <*-------------------------------------------*>
   793 begin
   794   open(buf,0,<:tas:>,0);
   795   close(buf,false);
   796 end;
   797 
   797 procedure send_modify_mess(size,mode,func,result);
   798 <*--------------------------------------------------------------*>
   799 <* Send modify message til tas.    Repeter hvis process stoppes *>
   800 <* Message sendes via zonen buf                                 *>
   801 <*                                                              *>
   802 <* size (call)   : Antal hw der skal sendes/modtages i buf      *>
   803 <* mode (call)   : 1=user, 2=terminal, 3=type                   *>
   804 <* func (call)   : 0=get, 1=modify, 2=set new, 3=delete         *>
   805 <* result (ret)  : Resultat fra message, 0=OK                   *>
   806 <*--------------------------------------------------------------*>
   807 integer size,mode,func,result;
   808 begin
   809   integer array share(1:12),zone_ia(1:20);
   810   boolean send;
   811   integer i;
   812 
   812   send:=false;
   813   while not send do
   814   begin
   815     getshare6(buf,share,1);
   816     getzone6(buf,zone_ia);
   817     share(1):=0;
   818     share(4):=(11 shift 12)+mode;
   819     share(5):=zone_ia(19)+1;
   820     share(6):=share(5)+size-2;
   821     share(7):=func;
   822     setshare6(buf,share,1);
   823     for i:=1 step 1 until 4 do
   824       buf.iaf(i):=user_id(i);
   825     buf.iaf(5):=password shift (-24);
   826     buf.iaf(6):=password extract 24;
   827     if monitor(16,buf,1,share)=0 then
   828       write_mess(5,false);
   829     if monitor(18,buf,1,share)<>1 then
   830       write_mess(10,false);
   831     result:=share(1);
   832     if result<>8 then
   833       send:=true;
   834   end;
   835 end;
   836 
   836 <* Hoved program *>
   837   trapmode:=1 shift 10;
   838   raf:=laf:=iaf:=baf:=0;
   839   line_nr:=0;
   840   mcl_bases(1):=mcl_bases(2):=0;
   841   for i:=0 step 1 until 255 do
   842     conv(i):=i;
   843   if system(4,1,prog_name.raf)<>(6 shift 12 + 10) then
   844     system(4,0,prog_name.raf);
   845   init_keywords;
   846   get_userid;
   847   set_buf_zone;
   848   set_entry;
   849 stop:
   850 end;\f


algol end 78
*head ▶7f◀1
\f

tasgen  1987.05.14  11.41
*algol ltctxt connect.no list.yes

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 73
*o c
▶EOF◀