|
|
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: 7680 (0x1e00)
Types: TextFile
Names: »dtctxt «
└─⟦9ccaf6601⟧ Bits:30008165 Bånd med SW8000 kildetekst/release værktøjer
└─⟦39138f30b⟧
└─⟦this⟧ »dtctxt «
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◀