+(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.")
+ (#\D "debug" (set opt-debug)
+ "Produce stack backtrace on error.")
+ "Timeout options"
+ (#\E "expire" (:arg "DURATION")
+ (dur *default-zone-expire*)
+ "Set default zone expiry period.")
+ (#\N "min-ttl" (:arg "DURATION")
+ (dur *default-zone-min-ttl*)
+ "Set default zone minimum/negative time-to-live.")
+ (#\R "refresh" (:arg "DURATION")
+ (dur *default-zone-refresh*)
+ "Set default zone refresh period.")
+ (#\T "ttl" (:arg "DURATION")
+ (dur *default-zone-ttl*)
+ "Set default zone time-to-live.")
+ (#\Y "retry" (:arg "DURATION")
+ (dur *default-zone-retry*)
+ "Set default zone retry period.")
+ "Output options"
+ (#\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
+ (append
+ (generic-function-methods
+ #'zone:zone-write)
+ (generic-function-methods
+ #'zone:zone-write-header))
+ for specs =
+ (method-specializers method)
+ if (typep (car specs)
+ 'eql-specializer)
+ collect
+ (eql-specializer-object
+ (car specs)))))
+ "Format to use for output.")
+ (#\z "zone" (:arg "NAME") (list opt-zones)
+ "Write information about zone NAME.")))