chiark / gitweb /
zone: New macro preferred-subnet-case.
[zone] / frontend.lisp
index 5aaadf532c896184e4a3ec320bf1b710634e839b..ef9c090536e8deeba55d4a1da9b5df870fcd5088 100644 (file)
 ;;; it under the terms of the GNU General Public License as published by
 ;;; the Free Software Foundation; either version 2 of the License, or
 ;;; (at your option) any later version.
-;;; 
+;;;
 ;;; This program is distributed in the hope that it will be useful,
 ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;;; GNU General Public License for more details.
-;;; 
+;;;
 ;;; You should have received a copy of the GNU General Public License
 ;;; along with this program; if not, write to the Free Software Foundation,
 ;;; Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
@@ -31,11 +31,29 @@ (in-package #:zone.frontend)
 (defvar opt-zones nil
   "Which zones to be emitted.")
 
+(eval-when (:compile-toplevel :load-toplevel)
+  (defopthandler dir (var arg) ()
+    (let ((path (probe-file arg)))
+      (if (and path
+              (not (pathname-name path)))
+         (setf var path)
+         (option-parse-error "path `~A' doesn't name a directory." arg)))))
+
 (define-program
     :version "1.0.0" :usage "ZONEDEF..."
     :help "Generates BIND zone files from Lisp descriptions."
     :options (options help-options
+                     "Parsing options"
+                     (#\f "feature" (:arg "KEYWORD")
+                          (list *features* 'keyword)
+                          "Insert KEYWORD in *features* list.")
+                     (#\s "subnet" (:arg "NET")
+                          (list zone:*preferred-subnets*)
+                          "Designate NET as a preferred subnet.")
                      "Output options"
+                     (#\d "directory" (:arg "DIRECTORY")
+                          (dir *zone-output-path*)
+                          "Write zone and serial files to DIRECTORY.")
                      (#\z "zone" (:arg "NAME") (list opt-zones)
                           "Write information about zone NAME.")))