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

⟦83c2de847⟧ TextFile

    Length: 9984 (0x2700)
    Types: TextFile
    Names: »mvmcltxt    «

Derivation

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

TextFile

begin
<********************************************************************>
<* Utility MOVEMCL til flytning af oversatte mcl programmer til     *>
<* Tas mcl-database                                                 *>
<*                                                                  *>
<* Kald:              movemcl  <move spec.>                         *>
<*                                                                  *>
<*                    include.<name>                                *>
<* <move spec.> ::=   get.<name>                                    *>
<*                    lookup.<name>                                 *>
<*                    lookup                                        *>
<*                                                                  *>
<* Henning Godske  A/S Regnecentralen 861121                        *>
<* Compiler call: movemcl=algol mvmcltxt connect.no                 *>
<********************************************************************>

<**************************************************************>
<* Revision history                                           *>
<*                                                            *>
<* 86.12.01   movemcl      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 param;                                   <* fp parameter tæller      *>
integer array mcl_bases(1:2);                    <* Bases for mcl files      *>
integer array user_bases(1:2);                   <* Egne bruger baser        *>
integer array empty(1:4);                        <* Tomt navn                *>
boolean eof;                                     <* End Of File              *>

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

procedure error(err_nr,name);
<*-----------------------------------------------*>
<* Udskriv fejlmeddelelse på cur. output og stop *>
<*-----------------------------------------------*>
integer err_nr;
integer array name;
begin
  write(out,<:<10>***:>,prog_name.laf,<:  :>,name.laf,<:  :>);
  if err_nr<1 or err_nr>13 then
    write(out,<:internal :>,err_nr)
  else
    write(out,case err_nr of (
              <:not found:>,<:error - not moved:>,
              <:exist allready:>,<:protected:>,
              <:in use:>,<:illegal name:>,
              <:no privilegie:>,<:claims:>,
              <:not a permanent file:>,<:parameter:>,
              <:no system:>,<:internal 12:>,
              <:not allowed:>));
  write(out,<:<10>:>);
  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_move_mess(mode,name,bases,result);
<*--------------------------------------------------------------*>
<* Send move message til Tas.      Repeter hvis process stoppes *>
<* Message sendes via zonen buf                                 *>
<*                                                              *>
<* mode (call)   : 0= Base, 1=To, 2=From                        *>
<* name (call)   : Navn på fil der skal flyttes                 *>
<* bases(call)   : Bruger baser hvor fil skal til/fra           *>
<* result (ret)  : Resultat fra message, 0=OK                   *>
<*--------------------------------------------------------------*>
integer mode,result;
integer array name,bases;
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):=(15 shift 12)+mode;
    share(5):=zone_ia(19)+1;
    share(6):=share(5)+22;
    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;
    for i:=1,2,3,4 do
      buf.iaf(6+i):=name(i);
    buf.iaf(11):=bases(1);
    buf.iaf(12):=bases(2);
    if monitor(16,buf,1,share)=0 then
      error(8,empty);
    if monitor(18,buf,1,share)<>1 then
      error(11,empty);
    result:=share(1);
    mcl_bases(1):=share(4);
    mcl_bases(2):=share(5);
    if result<>8 then
      send:=true;
  end;
end;

procedure cat_error(z,s,b);
<*------------------------------------------*>
<* Catalog læsnings fejl procedure          *>
<*------------------------------------------*>
zone z;
integer s,b;
begin
  if false add (s shift (-18)) then
  begin
    b:=34;
    eof:=true;
  end
  else
    std_error(z,s,b);
end;

procedure lookup_entry(name);
<*---------------------------------------------*>
<* Find mcl-fil entry i katalog med givet navn *>
<*---------------------------------------------*>
integer array name;
begin
  integer result;
  long array field llaf;
  real r;

  send_move_mess(0,name,mcl_bases,result);
  if result=0 then
  begin
    write(out,<:<10>:>,true,14,name.laf,<: :>);
    outdate(out,round systime(6,buf.iaf(11),r));
    write(out,<: :>);
    outdate(out,round r);
    llaf:=2;
    write(out,<:  :>,true,12,buf.llaf,<<ddddd>,buf.iaf(12));
  end
  else
    if result=1 then
      write(out,<:<10>***:>,prog_name.laf,<:  :>,name.laf,<: not found:>)
    else
      error(result,name);
end;

procedure lookup_all;
<*---------------------------*>
<* Find mcl-filer i catalog  *>
<*---------------------------*>
begin
  zone cat(128,1,cat_error);
  long array field llaf;
  real r;
  integer result;

  send_move_mess(0,prog_name,mcl_bases,result);
  if result>6 then
    error(result,empty);
  open(cat,4,<:catalog:>,1 shift 18);
  eof:=false;
  inrec6(cat,34);
  while not eof do
  begin
    if cat.iaf(1)<>-1 then
    begin
      if cat.iaf(2)=mcl_bases(1) and
         cat.iaf(3)=mcl_bases(2) and
         cat.iaf(16)=29 shift 12 then
      begin
        llaf:=6;
        write(out,<:<10>:>,true,14,cat.llaf,<: :>);
        outdate(out,round systime(6,cat.iaf(13),r));
        write(out,<: :>);
        outdate(out,round r);
        llaf:=16;
        write(out,<:  :>,true,12,cat.llaf,<<ddddd>,cat.iaf(17));
      end;
    end;
    inrec6(cat,34);
  end;
end;

procedure lookup_files;
<*---------------------------*>
<* Lookup parameter funktion *>
<*---------------------------*>
begin
  integer array name(1:4);

  if system(4,param,name.raf)<>(8 shift 12 + 10) then
    lookup_all
  else
    repeat
      param:=param+1;
      lookup_entry(name);
    until system(4,param,name.raf)<>(8 shift 12 + 10);
end;

procedure move_file(mode);
<*---------------------------------*>
<* Flyt filer til/fra system       *>
<*                                 *>
<* mode (call) : 1=To, 2=From      *>
<*---------------------------------*>
integer mode;
begin
  integer array name(1:4);
  integer result;

  while system(4,param,name.raf)=(8 shift 12 + 10) do
  begin
    param:=param+1;
    send_move_mess(mode,name,user_bases,result);
    if result<>0 then
      error(result,name);
  end;
end;

procedure move;
<*-----------------*>
<* Hoved procedure *>
<*-----------------*>
begin
  integer array parameter(1:4);

  while system(4,param,parameter.raf)=(4 shift 12 + 10) do
  begin
    param:=param+1;
    if parameter.laf(1)=long <:inclu:> add 'd' then
      move_file(1)
    else
      if parameter.laf(1)=long <:get:> then
        move_file(2)
      else
        if parameter.laf(1)=long <:looku:> add 'p' then
          lookup_files
        else
          error(10,parameter);
  end;
  if system(4,param,parameter.raf)<>0 then
    error(10,parameter);
end;

<* Hoved program *>
  trapmode:=1 shift 10;
  raf:=laf:=iaf:=0;
  for i:=1,2,3,4 do empty(i):=0;
  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;
  system(11,0,arr);
  user_bases(1):=arr(5);
  user_bases(2):=arr(6);
  move;
  write(out,<:<10>:>);
stop:
end;
▶EOF◀