;;; -*- Mode:LISP; Package:USER; Readtable:CL; Base:10 -*- ;;;FILE-MATCHER.LISP ;;;FILE-MATCHER makes a closure that will be a function acceptable to k;$; aPe%fntoPs#a  iPemth^rP T#i u$ciPnwl $e h% sProPetp u$ciPn(.P.uRSO]EyFuLYS# pc)f nPeo)l "o a0hsHsH0 k;$;h$  aPe%fntoX ^eg ETuRv-|IEP) seiPyoc nPyfPrec]plvPldr$c"oPyecutrPdw$ehPrtPeflR mthRs n# hu0d k;$; o-&ee "iet)r n%o$n"ee' ht"e$ h iPe"$ac#eP"aPds%ol rc#se0.t'Ht'Ht'Ht'Ht'Ht'Ht'Ht'Ht'Ht'HtFt'Ht'H0 k;;Pe"po#es^d0 ;;; ;;;FILE-MATCHER options provide control over the default answer per k;;"iet)rX w$ehPr$iR mthRs\)$ h! u)r$ ie$u Pnscn\s nr#o$iPylv^ltqHtqHtqHtqHtqHtqHtqHtqHtqHtqHtFtqHtqHtqH0 k;&;"ebs)t &ee0. (defvar *file-match-list* nil P |"#iPto iPemthPsecutrRd0) `&tL(t"L(06060606060 (defvar *file-match-default* nil P t"e%a$l #nwPro$ ie$uY"0 `&t/L(t2L(06060 (defvar *file-match-timeout* (* 10 60.) P "ie$u PnscnRsY)0 `&tB0 (defvar *file-match-verbose* nil P y"Pfn]nyN\L& "ebs #esgPs"aPe"pitRd0) `&tL(tL(0606060606060 (let* ((file (first flist)) (dir (pathname-directory file)) (top (string (if (atom dir) dir (first dir))))) (if (rest (or (find top *file-match-list* :key #'first :test #'string-equal) (first (push (cons top (y-or-n-p-with-timeout (* *file-match-timeout* 60.) *file-match-default* "Process ~a directory?" top)) *file-match-list*)))) file ;;else (if *file-match-verbose* (format t "~&Skipping ~a" file))))) (eu i]emthXr&)einPl(e%a$lZ dr$c"o0 9 P (e%a$lZ fl-$ac-e%a$lY*fuZt0) `&rgL(rkL(06060 9 P $(ie$uZ fl-$ac$-ie$uY*m%oZtY)0 `&rL(rL(06060 9 P &("ebsZ fl-$ac&-"ebsY*)#oZeY))0 `&r&L(r)L(06060 (let((*file-match-list* nil) (*file-match-default* default) (*file-match-timeout* timeout) P X *i]emt]hvr#oZe& "ebsY)0 `&tGL(tIL(0606060606060 (closure '(*file-match-list* *file-match-default* *file-match-timeout* P *i]emt]hvr#oZe")bsY*0 `&rgL(rjL(060 'file-matcher2))) ,#0 (defun test() (let((fcn (file-matcher)) (fls '("joe;a" "joe;b" "joe;c" "keith;foo" "keith;stuff" "keith;more" "zozz;zozzle" "zozz.zizz;zozzle"))) (dolist (file fls) (setq file (fs:parse-pathname file si:local-host)) (format t "~%File ~s - ~:[skip it~;process it~]" file (funcall fcn (ncons file)))))) |#