|
|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 9984 (0x2700)
Types: TextFile
Names: »mvmcltxt «
└─⟦9ccaf6601⟧ Bits:30008165 Bånd med SW8000 kildetekst/release værktøjer
└─⟦39138f30b⟧
└─⟦this⟧ »mvmcltxt «
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◀