chiark / gitweb /
zone: Clean up the :cidr-delegation parser.
[zone] / frontend.lisp
index ef9c090536e8deeba55d4a1da9b5df870fcd5088..46c5a36ebec39b3f55a5bd4a773014507da43d9e 100644 (file)
@@ -30,6 +30,8 @@ (in-package #:zone.frontend)
 
 (defvar opt-zones nil
   "Which zones to be emitted.")
+(defvar opt-format :bind
+  "Which format to use on output.")
 
 (eval-when (:compile-toplevel :load-toplevel)
   (defopthandler dir (var arg) ()
@@ -54,6 +56,20 @@ (define-program
                      (#\d "directory" (:arg "DIRECTORY")
                           (dir *zone-output-path*)
                           "Write zone and serial files to DIRECTORY.")
+                     (#\F "format" (:arg "FORMAT")
+                          (keyword opt-format
+                                   (delete-duplicates
+                                    (loop for method in
+                                          (pcl:generic-function-methods
+                                           #'zone:zone-write)
+                                          for specs =
+                                          (pcl:method-specializers method)
+                                          if (typep (car specs)
+                                                    'pcl:eql-specializer)
+                                          collect
+                                          (pcl:eql-specializer-object
+                                           (car specs)))))
+                          "Format to use for output.")
                      (#\z "zone" (:arg "NAME") (list opt-zones)
                           "Write information about zone NAME.")))
 
@@ -72,6 +88,6 @@ (defun main ()
                                       :use '(#:common-lisp #:net #:zone))))
          (load f :verbose nil :print nil :if-does-not-exist :error)
          (delete-package *package*)))
-      (zone-save opt-zones))))
+      (zone-save opt-zones :format opt-format))))
 
 ;;;----- That's all, folks --------------------------------------------------