X-Git-Url: https://git.distorted.org.uk/~mdw/lisp/blobdiff_plain/67b41ed338b6050f40bf9de24804502e96f84104..d6caa73bc6253f7a0461406a939865a207bad7c8:/optparse.lisp diff --git a/optparse.lisp b/optparse.lisp index 4207933..37d27de 100644 --- a/optparse.lisp +++ b/optparse.lisp @@ -13,12 +13,12 @@ ;;; 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. @@ -105,7 +105,7 @@ NEGATED-TAG As for TAG, but used if the negated form of the option is found. If this is nil (the default), the option cannot be - negated. + negated. SHORT-NAME The option's short name. This must be a single character, or nil if the option has no short name. @@ -702,7 +702,7 @@ Ambiguous long option `~A' -- could be any of:~{~% --~A~}" STRING A banner to print. SYMBOL or (SYMBOL STUFF...) - If SYMBOL is an optform macro, the result of invoking it. + If SYMBOL is an optform macro, the result of invoking it. (...) A full option-form. See below. @@ -849,15 +849,9 @@ Ambiguous long option `~A' -- could be any of:~{~% --~A~}" (format stream "~{~A ~:_~}" (listify u))) (pprint-newline :mandatory stream)))) -(defun show-help (prog ver usage opts &optional (stream *standard-output*)) - "Basic help-showing function. PROG is the program name, probably from - *command-line-strings*. VER is the program's version number. USAGE is a - list of the possible usages of the program, each of which may be a list of - items to be supplied. OPTS is the list of supported options, as provided - to the options parser. STREAM is the stream to write on." - (format stream "~A, version ~A~2%" prog ver) - (show-usage prog usage stream) - (terpri stream) +(defun show-options-help (opts &optional (stream *standard-output*)) + "Write help for OPTS to the STREAM. This is the core of the `show-help' + function." (let (newlinep) (dolist (o opts) (let ((doc (opt-documentation o))) @@ -885,6 +879,17 @@ Ambiguous long option `~A' -- could be any of:~{~% --~A~}" (print-text doc stream)) (terpri stream))))))) +(defun show-help (prog ver usage opts &optional (stream *standard-output*)) + "Basic help-showing function. PROG is the program name, probably from + *command-line-strings*. VER is the program's version number. USAGE is a + list of the possible usages of the program, each of which may be a list of + items to be supplied. OPTS is the list of supported options, as provided + to the options parser. STREAM is the stream to write on." + (format stream "~A, version ~A~2%" prog ver) + (show-usage prog usage stream) + (terpri stream) + (show-options-help opts stream)) + (defun sanity-check-option-list (opts) "Check the option list OPTS for basic sanity. Reused short and long option names are diagnosed. Maybe other problems will be reported later. @@ -926,6 +931,7 @@ Ambiguous long option `~A' -- could be any of:~{~% --~A~}" (show-help *program-name* *version* *usage* *options*) (typecase *help* (string (terpri) (write-string *help*)) + (null nil) ((or function symbol) (terpri) (funcall *help*))) (format t "~&") (exit 0))