;;; 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-opts
+ "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))))