! 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