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

⟦ffff32f0b⟧ TextFile

    Length: 22272 (0x5700)
    Types: TextFile
    Names: »ltctxt      «

Derivation

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

TextFile

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◀