! Remove file {,file}*
! JGH  Dec 84
! Changed to accept ^Z to exit from confirm list RMM April 1986

%include "inc:util.imp"
%include "inc:fs.imp"
%include "inc:fsutil.imp"

%begin
%constinteger PATHSEP=':'
%string(255) parm,file,start,end,directory
%integer confirm=0, log=1

%routine OPEN DIRECTORY(%string(255)%name parm)
%integer i
%string (255) dir
  dir = Current Directory.to string (path sep)
  i = length(parm)
  i = i-1 %while i > 0 %and charno(parm,i) # pathsep
  %if i > 0 %start
    dir = substring(parm,1,i)
    parm = substring(parm,i+1,length(parm))
  %finish
  directory = dir
  dir = dir."DIRECTORY"
  open input(1,dir)
%end

%routine READ FILENAME(%string(255)%name s)
%integer k
  select input(1)
  s = ""
  read symbol(k) %until k > ' '
  %cycle
    s = s.tostring(k) %if k # '?'
    read symbol(k)
  %repeat %until k <= ' '
%end

%routine DELETE IF SURE(%string(255)file)
%bytename j
%integer i,k,kk, State = 0
  %on %event 3,9 %start
    %if State = 0 %start
       New Line
       %stop 
    %finish
    print line ("Failure - ".event_message)
    %return
  %finish
  %if Confirm#0 %start
    select input(0)
    prompt("Delete ".directory.file." ? ")
    read symbol(k) %until k > ' '
    read symbol(kk) %until kk < ' '
  %else
    k = 'y'
  %finish
  %if k!32 = 'y' %start
    State = 1
    delete(file)
    print line (directory.file." deleted") %if log#0
  %finish
%end

%predicate COVERS(%string(255) template,word)
%integer tl,wl
%predicate MATCHED(%integer ti,wi)
  %cycle
    %if ti = tl %start
      %true %if wi = wl
      %false
    %finish
    ti = ti+1
    %exit %if charno(parm,ti) = '*'
    %false %if wi = wl
    wi = wi+1
    %false %unless charno(template,ti) = '?' %c
           %or charno(template,ti)&95 = charno(word,wi)&95
  %repeat
  %cycle
    %true %if matched(ti,wi)
    %false %if wi = wl
    wi = wi+1
  %repeat
%end
  
  tl = length(template)
  wl = length(word)
  %true %if matched(0,0)
  %false
%end

%routine DELETE FILES(%string(255) s)
%integer i
%string(255) f
%on %event 3,9 %start
  %return
%finish
  directory = Current Directory. to string (path sep)
  %for i = 1,1,length(s) %cycle
    %if charno(s,i) = '*' %or charno(s,i) = '?' %start
      open directory(s)
      %cycle
        read filename(f)
        delete if sure(f) %if covers(s,f)
      %repeat
    %finish
  %repeat
  delete if sure(s)
%end

  parm = cliparam
%cycle
  %if parm = "" %or parm = " " %start
      Prompt ("Files to be deleted: ")
      read line (parm)
      %stop %if parm = ""
  %finish
  To lower (parm)
  parm = start." ".end %while parm -> start.(",").end
  %if parm -> start.("-c").end %or parm -> start.("- c").end %start
      confirm = 1
      parm = start." ".end
  %finish
  confirm = 1 %if parm -> ("*") %or parm -> ("?")
  %if parm -> start.("-n").end %or parm -> start.("- n").end %start
      confirm = 0
      parm = start." ".end
  %finish
  %if parm -> start.("-s").end %or parm -> start.("- s").end %start
      log = 0
      parm = start." ".end
  %finish
  parm = parm." "
  parm = start." ".end %while parm -> start.("  ").end
  %if parm#"" %and charno(parm, 1) = ' ' %then parm = sub string (parm, 2, length(parm))
  %exit %if parm # " "
%repeat
  To Upper (parm)
  delete files(file) %while parm -> file.(" ").parm
%endofprogram
