Trailing-Edge
-
PDP-10 Archives
-
decuslib20-01
-
decus/20-0003/prune.pas
There are no other files named prune.pas in the archive.
program prune;
{Goes thru your files one by one and asks whether you want to delete
them. Actually DEC's REV is more useful.}
var
files:text;
retloc:integer;
resp:char;
gn,jfn:packed record case Boolean of
true:(ret:integer);
false:(bits:set of 0..35);
end;
group:packed array[1:200]of char;
next:integer;
function curjfn(var f:file):integer;extern;
procedure prfile;
(*this procedure prints a line showing all versions of the current
file, if it is the first in its group and there are more
than one version*)
var mult:Boolean; (* multiple versions *)
begin
if gn.bits and [13,14,15,16] = []
then write(tty,' '); (* if same group, indent *)
jsys(30B%jfns\;101B%.priou\,0:files,0);
if (gn.bits and [13,14,15,16] <> []) (* we are in a new group *)
and (5 in jfn.bits) (* we are wildcarding vers.*)
then begin
mult := false;
jsys(30B%jfns\;group,10000B:files,0); (* cur. file, with * for ver *)
jsys(20B%gtjfn\,2;[2,11,13,14,17],group;input);
while nextfile(input) <> 0 do
begin
mult := true;
write(tty, ',');
jsys(30B%jfns\;101B%.priou\,0:input,10B:0); (* vers. number *)
end;
if mult
then begin
writeln(tty);
write(tty,' ');
jsys(30B%jfns\;101B%.priou\,0:files,0);
end
end
end;
{Call this to delete a file, when user type Y}
procedure doit;
begin
write(tty,'es'); {complete the YES}
jsys(26B%delf\,2,retloc;400000B:files); {kill the file}
{tell him whether it worked}
if retloc = 2
then writeln(tty,' [OK]')
else begin
writeln(tty);
write(tty,'% '); jsys(11B%erstr\,3;101B%.priou\,400000B:-1,0);
writeln(tty);
end;
end;
{This if the user said N, don't delete the file}
procedure dont;
begin
writeln(tty,'o'); {complete the NO}
end;
{This if user did something other than Y or N}
procedure badcom;
begin
writeln(tty);
writeln(tty,'? Type Y to delete the file, N not to, S to see it before deciding');
end;
{Here if the user wants to see his file - just the first 4 lines}
procedure show;
var line:packed array[1:132]of char;lines,len:integer;
begin
writeln(tty,'ee it'); {complete the SEE IT}
reset(files);
lines := 0;
while (lines < 4) and not eof(files) do
begin
readln(files,line:len);
if len > 0
then begin
writeln(tty,line:len);
lines := lines+1;
end;
end;
close(files);
end;
begin
gn.bits := [13,14,15,16]; (* new file *)
reset(tty,'',0,0,0,1); (* map lower case *)
loop {loop until he gives you a valid file spec}
write(tty,'Files: ');
jsys(20B%gtjfn\,2,retloc;120123B:-3,100B:101B;files);
writeln(tty);
exit if retloc = 2;
write(tty,'% '); jsys(11B%erstr\,3;101B%.priou\,400000B:-1,0);
writeln(tty);
end;
jfn.ret := curjfn(files);
repeat {this is the main loop - over all files in the wildcard}
repeat (* until get a legal response*)
prfile; write(tty,'? ');
jsys(73B%pbin\;;resp);
if ord(resp) >= 140B
then resp := chr(ord(resp) - 40B);
case resp of
'Y': doit;
'N': dont;
'S': show;
others: badcom
end
until resp in ['Y','N'];
gn.ret := nextfile(files)
until gn.ret = 0
end.