X-Git-Url: https://git.distorted.org.uk/~mdw/sod/blobdiff_plain/3a04cacb948350c09a467b7236fa6c8fbbbb80fe..92e590b029e3cffc62b2876149ab257f0e6d8eb3:/src/frontend.lisp diff --git a/src/frontend.lisp b/src/frontend.lisp index 06311a3..2d20fbc 100644 --- a/src/frontend.lisp +++ b/src/frontend.lisp @@ -77,6 +77,15 @@ (defun update-usage () (setf *usage* (simple-usage *options* "SOURCES..."))) +(export 'augment-options) +(defun augment-options (options) + "Add OPTIONS to the program's options list." + (asetf *options* (append it options)) + (setf (op-options *option-parser*) *options*) + (update-usage)) + +(use-package "SOD-FRONTEND" "SOD-USER") + (export 'main) (defun main () @@ -110,6 +119,32 @@ (#\d "directory" (:arg "DIR") ("Write output files to DIR.") (dirpath output-path)) + (#\e "eval" (:arg "LISP") + ("Evaluate raw Lisp code.") + (lambda (lisp) + (handler-case + (let ((*package* (find-package "SOD-USER"))) + (eval (read-from-string lisp))) + (error (error) + (option-parse-error "~A" error))))) + (#\l "load" (:arg "FILE") + ("Load a file of Lisp code.") + (lambda (file) + (let ((file (merge-pathnames file + (make-pathname + :type "LISP" + :case :common)))) + (handler-case + (let ((*package* (find-package "SOD-USER"))) + (find-file *default-pathname-defaults* file + "Lisp file" + (lambda (path true) + (declare (ignore path)) + (load true + :verbose nil + :print nil)))) + (error (error) + (option-parse-error "~A" error)))))) (#\p "stdout" ("Write output files to standard output.") (set stdoutp))