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

⟦a6bd72187⟧ TextFile

    Length: 7680 (0x1e00)
    Types: TextFile
    Names: »dtctxt      «

Derivation

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

TextFile

begin
<********************************************************************>
<* Utility DELTASCAT til sletning af tas katalog indgange.          *>
<*                                                                  *>
<* Kald:              deltascat <del-spec.>                         *>
<*                                                                  *>
<*                    user.<name>                                   *>
<* <del-spec.> ::=    terminal.<name>                               *>
<*                    type.<number>                                 *>
<*                                                                  *>
<* Compiler call: deltascat=algol dtctxt connect.no                 *>
<********************************************************************>

<**************************************************************>
<* Revision history                                           *>
<*                                                            *>
<* 86.12.01   deltascat    release 1.0                        *>
<**************************************************************>

<* 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    *>
integer array prog_name(1:4);                    <* Program navn             *>
integer array conv(0:255);                       <* Tegn konverterings tabel *>
integer param;                                   <* fp parameter tæller      *>

integer array field iaf;                         <* Work                     *>
real array field raf;                            <* 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(7);
  if monitor(18,buf,1,ia)<>1 then
    error(3);
  if ia(1)<>0 then
    error(3);
  for i:=1,2,3,4 do
    user_id(i):=buf.iaf(i);
  password:=buf.laf(3);
end;

procedure error(err_nr);
<*-----------------------------------------------*>
<* Udskriv fejlmeddelelse og stop hvis fatal     *>
<*-----------------------------------------------*>
integer err_nr;
begin
  if err_nr>2 then
    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 (
              <:in use:>,<:not found:>,
              <:not allowed:>,<:no privilege:>,
              <:no system:>,<:parameter:>,
              <:claims:>));
  write(out,<:<10>:>);
  if err_nr>2 then
    goto stop;
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 del_user;
<*----------------------*>
<* Slet 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(20,1,3,result);
    write(out,<:user.:>,u_id.laf,<: :>);
    if result<>0 then
    begin
      if result=13 then
        error(3)
      else
        error(result);
    end
    else
      write(out,<:deleted<10>:>);
  end
  else
    error(6);
end;

procedure del_term;
<*--------------------------*>
<* Slet 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(20,2,3,result);
    write(out,<:terminal.:>,buf.llaf,<: :>);
    if result<>0 then
    begin
      if result=13 then
        error(3)
      else
        error(result);
    end
    else
      write(out,<:deleted<10>:>);
  end
  else
    error(6);
end;

procedure del_type;
<*----------------------*>
<* Slet 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(14,3,3,result);
    write(out,<:type.:>,<<d>,buf.iaf(7),<: :>);
    if result<>0 then
    begin
      if result=13 then
        error(3)
      else
        error(result);
    end
    else
      write(out,<:deleted<10>:>);
  end
  else
    error(6);
end;

procedure delete;
<*-----------------------------------------------*>
<* Bestem hvilken indgange der skal slettes      *>
<*-----------------------------------------------*>
begin
  real array name(1:2);
  
  while system(4,param,name)<>0 do
  begin
    param:=param+1;
    if name.laf(1)= long <:user:> then
      del_user
    else
      if name.laf(1)= long <:termi:> add 'n' then
        del_term
      else
        if name.laf(1)= long <:type:> then
          del_type
        else
          error(6);
  end;
end;

<* Hoved program *>
  trapmode:=1 shift 10;
  raf:=laf:=iaf:=0;
  for i:=0 step 1 until 255 do
    conv(i):=i;
  if system(4,1,prog_name.raf)=(6 shift 12 + 10) then
    param:=2
  else
  begin
    system(4,0,prog_name.raf);
    param:=1;
  end;
  get_userid;
  set_buf_zone;
  delete;
stop:
end;
▶EOF◀