85 lines
1.5 KiB
Plaintext
Executable File

#!/usr/local/bin/klone
;;Skeleton of a typical klone script
;;(stack-dump-on-error t)
;;(kdb t)
(defvar ExpressionToFind '(bar-make ()))
(setq files (getopts "USAGE: find-bar-nils files...
prints usage of (bar-make ()) which will conflict with the new syntax"
("-v" () verbose "verbose operation")
))
(setq *quote-inlines* t)
(defun main (&aux
)
(dolist (file files)
(catch 'ALL
(process-file file)
)
)
)
(defun process-file (file &aux
(fd (open file))
expr
)
(catch 'EOF
(while t
(setq expr (read fd))
(setq is-in-expr:count 0)
(if (is-in-expr expr ExpressionToFind)
(print-format "%0:%1: %2 occurences in: %3\n"
file (file-lineno fd) is-in-expr:count (truncate-to expr 40)
)))))
;; find current line in file
(defun file-lineno (fd &aux
(cur-pos (file-position fd))
(line 0)
)
(file-position fd 0) ;rewind
(catch 'EOF
(while (< (file-position fd) cur-pos) ;count from start
(read-line fd)
(incf line)
))
(file-position fd cur-pos)
line
)
(defvar is-in-expr:count 0)
(defun is-in-expr (expr subexpr)
(if (= expr subexpr)
(incf is-in-expr:count)
(if (typep expr List)
(catch 'Found
(dolist (se expr)
(if (is-in-expr se subexpr)
(throw 'Found t)
))
()
)
()
)))
(defun truncate-to (expr N &aux
(s (print-format String "%0" expr))
)
(if (> (length s) N)
(subseq s 0 N)
s
)
)
(main)
;;; EMACS MODES
;;; Local Variables: ***
;;; mode:lisp ***
;;; End: ***