begin ; !D (Directory operations)
include "inc:util.imp"
externalstring (255)fnspec FINFO(string (255)directory,integer number)
integer num=1,full=0,ruthless=0
string (255)whoever,file,new
integer sym
routine file info(integer num,full)
string (255)s
integer p
s = finfo(whoever, num)
stopif length(s)=0
p=1; p = p+1 while p<=length(s) and charno(s,p)#' '
file = substring(s,1,p-1)
printsymbol(13); printsymbol(27); printsymbol('K')
if full=0 then printstring(file) else printstring(s)
length(file) = length(file)-1 if charno(file,length(file)) = '?'
returnif whoever=""
file = whoever.":".file
end
routine readname(string (255)name s)
integer k
s = ""
readsymbol(k) until k#' '
while k#nl cycle
s = s.tostring(k); readsymbol(k)
repeat
end
routine show(string (255)name file)
integer line=0,pos=0
routine dhex(integer x)
x=x&15; x=x+7 if x>9; printsymbol(x+'0')
end
routine bhex(integer x)
dhex(x>>4); dhex(x)
end
routine sym
integer k
readsymbol(k)
if k=nl start
pos=0; line = line+1; newline
signal 9 if line>22
finishelseif ' '<=k<=126 start
pos = pos+1
if pos>=80 start
pos = 1; line = line+1; newline
signal 9 if line>22
finish
printsymbol(k)
finishelsestart
pos = pos+3
if pos>=78 start
pos = 3; line = line+1; newline
signal 9 if line>22
finish
space; bhex(k)
finish
end
onevent 3,9 start
closeinput; return
finish
selectinput(1); openinput(1,file); selectinput(1)
cycle
sym
repeat
end
routine get symbol (integer name sym)
on 3,9 start
newline
stop
finish
read symbol (sym)
end
predicate sensitive(string (255)file)
integer i,sym,x=0
for i=1,1,length(file) cycle
sym = charno(file,i); sym = sym-32 if sym>='a'-1
x = x<<8+sym if x#0 or sym='.'
repeat
i = ruthless
if nextsymbol = '!' start
skip symbol; i = 1
skip symbol and ruthless = 1 if nextsymbol = '!'
finish
if x=0 or x='.ASM' or x='.C' start
false if i # 0
printstring("Not unless you say 'd!'"); newline
true
finish
false
end
routine explain
printstring("
<return>, <cursor DOWN>, <cursor RIGHT>: Next file
<linefeed>, <cursor UP>, <cursor Left> : Previous file
F: Full Info S: Show File P: Permit file
C: Copy file R or N: Rename file D: Delete file
?: Help Q, E,X: Exit
")
end
onevent 3,9 start
newline
cycle
num = num+1; file info(num,0); newline
repeat
finish
whoever = cliparam
if whoever -> whoever.(":").file start
if file#"" start
Print string ("D only takes a directory as a parameter")
Newline
stop
finish
finish
prompt(" ")
file info(0,1); newline
printstring("Type '?' for Help"); newline
set terminalmode(nopage)
cycle
stopif num=0
file info(num,full); full=0
getsymbol(sym)
if sym=27 start ; !Escape
readsymbol(sym)
num = num-1 if sym='A' or sym='D'
num = num+1 if sym='B' or sym='C'
finishelseif sym=nl start ; !Return
num = num+1
finishelseif sym=13 start ; !LF
num = num-1
finishelsestart ; !Special function
sym = sym!32
signal 9 if sym='l'
if sym='f' start ; !Full information
full=1
elseif sym='d'; !Delete
delete(file) unless sensitive(file)
elseif sym='r' or sym='n';!Rename
readname(new); rename(file, new)
elseif sym='s'; !Show
show(file)
elseif sym='p'; !Permit
readname(new);permit(file, new)
elseif sym='c'; !Copy
readname(new);copy(file, new)
elseif sym = '?'; !Help
explain
else if sym='q' or sym='e' or sym='x'; ! Quit, Exit
exit
finish
selectinput(0)
readsymbol(sym) until sym=nl
finish
repeat
select input (0)
read symbol (sym) until sym=nl
endofprogram