chiark / gitweb /
frontend: Track rename of `help-opts'.
[zone] / frontend.lisp
index bd00ff47a5af1098fed0d01ff300c99028ec3195..161e16d1ec10c94d236fa987660d788476792504 100644 (file)
 ;;; Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
 (defpackage #:zone.frontend
-  (:use #:common-lisp #:mdw.optparse #:zone)
+  (:use #:common-lisp #:optparse #:net #:zone)
   (:export #:main))
 (in-package #:zone.frontend)
 
-(defconstant version "1.0.0")
-
 (defvar opt-zones nil
   "Which zones to be emitted.")
 
-(defvar options nil)
-(defvar usage nil)
-(defun help (arg)
-  (declare (ignore arg))
-  (show-help *program-name* version usage options)
-  (exit 0))
-(defun version (arg)
-  (declare (ignore arg))
-  (format t "~A, version ~A~%" *program-name* version)
-  (exit 0))
-(defun do-usage (&optional (stream *standard-output*))
-  (show-usage *program-name* usage stream))
-(defun usage (arg)
-  (declare (ignore arg))
-  (do-usage)
-  (exit 0))
-(setf options
-      (options
-       "Help options"
-       (#\h "help" #'help
-           "Show this help message.")
-       (#\v "version" #'version
-           ("Show the `~A' program's version number." *program-name*))
-       (#\u "usage" #'usage
-           ("Show a very brief usage summary for `~A'." *program-name*))
-
-       "Output options"
-       (#\z "zone" (:arg "NAME") (list opt-zones)
-           "Write information about zone NAME.")))
-(setf usage (simple-usage options "ZONEDEF..."))
+(define-program
+    :version "1.0.0" :usage "ZONEDEF..."
+    :help "Generates BIND zone files from Lisp descriptions."
+    :options (options help-options
+                     "Output options"
+                     (#\z "zone" (:arg "NAME") (list opt-zones)
+                          "Write information about zone NAME.")))
 
 (defun main ()
   (with-unix-error-reporting ()
     (let ((seq 54)
-         (files nil)
-         (op (make-option-parser (cdr *command-line-strings*) options)))
+         (files nil))
       (unless (option-parse-try
-               (loop
-                  (multiple-value-bind (opt arg) (option-parse-next op)
-                    (declare (ignore arg))
-                    (unless opt
-                      (return))))
-               (setf files (option-parse-remainder op))
-               (when (zerop (length files))
-                 (option-parse-error "no files to read")))
-       (do-usage *error-output*)
-       (exit 1))
+               (do-options ()
+                 (nil (rest)
+                   (when (zerop (length rest))
+                     (option-parse-error "no files to read"))
+                   (setf files rest))))
+       (die-usage))
       (dolist (f files)
        (let ((*package* (make-package (format nil "zone.scratch-~A"
                                               (incf seq))
-                                      :use '(#:common-lisp #:zone))))
+                                      :use '(#:common-lisp #:net #:zone))))
          (load f :verbose nil :print nil :if-does-not-exist :error)))
       (zone-save opt-zones))))