summaryrefslogtreecommitdiffstats
path: root/paramlst.scm
diff options
context:
space:
mode:
authorBryan Newbold <bnewbold@robocracy.org>2017-02-20 00:05:27 -0800
committerBryan Newbold <bnewbold@robocracy.org>2017-02-20 00:05:27 -0800
commitfa3f23105ddcf07c5900de47f19af43d1db1b597 (patch)
treeb2c6cce6b97698098f50cbc78c23fdc0f8d401ab /paramlst.scm
parentf24b9140d6f74804d5599ec225717d38ca443813 (diff)
downloadslib-142a472fc4601d12b5913528ed42260464f65acf.tar.gz
slib-142a472fc4601d12b5913528ed42260464f65acf.zip
Import Upstream version 2c3upstream/2c3
Diffstat (limited to 'paramlst.scm')
-rw-r--r--paramlst.scm150
1 files changed, 8 insertions, 142 deletions
diff --git a/paramlst.scm b/paramlst.scm
index 706c91c..b4af55a 100644
--- a/paramlst.scm
+++ b/paramlst.scm
@@ -52,15 +52,14 @@
defaulters parameter-list))
(define (check-parameters checks parameter-list)
- (for-each (lambda (check parameter)
- (for-each
- (lambda (p)
- (cond ((and check (not (check p)))
- (slib:error (car parameter)
- "parameter is wrong type: " p))))
- (cdr parameter)))
- checks parameter-list)
- parameter-list)
+ (and (every (lambda (check parameter)
+ (every
+ (lambda (p)
+ (not (and check (not (check p)))))
+ ;;(slib:error (car parameter) "parameter is wrong type: " p)
+ (cdr parameter)))
+ checks parameter-list)
+ parameter-list))
(define (check-arities arity-specs parameter-list)
(and (every identity arity-specs)
@@ -128,136 +127,3 @@
(set-cdr! apair (cons #t (cdr apair)))))))
apairs parameters)
parameter-list)))
-
-(define (getopt->parameter-list argc argv optnames arities types aliases)
- (define (can-take-arg? opt)
- (not (eq? (list-ref arities (position opt optnames))
- 'boolean)))
- (define (coerce-val val curopt)
- (define ntyp (list-ref types (position curopt optnames)))
- (case ntyp
- ((expression) val)
- (else (coerce val ntyp))))
- (require 'getopt)
- (let ((starting-optind *optind*)
- (optlist '())
- (long-opt-list '())
- (optstring #f)
- (parameter-list (make-parameter-list optnames))
- (curopt '*unclaimed-argument*))
- (set! aliases (map (lambda (alias)
- (define str (string-copy (car alias)))
- (do ((i (+ -1 (string-length str)) (+ -1 i)))
- ((negative? i) (cons str (cdr alias)))
- (cond ((char=? #\ (string-ref str i))
- (string-set! str i #\-)))))
- aliases))
- (for-each
- (lambda (alias)
- (define opt (car alias))
- (cond ((not (string? opt)))
- ((< 1 (string-length opt))
- (set! long-opt-list (cons opt long-opt-list)))
- ((not (= 1 (string-length opt))))
- ((can-take-arg? (cadr alias))
- (set! optlist (cons (string-ref opt 0)
- (cons #\: optlist))))
- (else (set! optlist (cons (string-ref opt 0) optlist)))))
- aliases)
- (set! optstring (list->string (cons #\: optlist)))
- (let loop ()
- (let ((opt (getopt-- argc argv optstring)))
- (case opt
- ((#\: #\?)
- (let ((aliast (map list optnames))
- (strlen=1? (lambda (s) (= 1 (string-length s))))
- (cep (current-error-port)))
- (require 'printf)
- (require 'common-list-functions)
- (for-each (lambda (alias)
- (let ((apr (assq (cadr alias) aliast)))
- (set-cdr! apr (cons (car alias) (cdr apr)))))
- aliases)
- (fprintf cep "Usage: %s [OPTION ARGUMENT ...] ..."
- (list-ref argv (+ -1 starting-optind)))
- (newline cep) (newline cep)
- (for-each
- (lambda (optname arity aliat)
- (let loop ((initials (remove-if-not strlen=1? (cdr aliat)))
- (longname (remove-if strlen=1? (cdr aliat))))
- (cond ((and (null? initials) (null? longname)))
- (else
- (fprintf cep
- (case arity
- ((boolean) " %3s %s")
- (else " %3s %s<%s> %s"))
- (if (null? initials)
- ""
- (string-append
- "-" (car initials)
- (if (null? longname) " " ",")))
- (if (null? longname)
- " "
- (string-append
- "--" (car longname)
- (case arity
- ((boolean) " ")
- (else "="))))
- (case arity
- ((boolean) "")
- (else optname))
- (case arity
- ((nary nary1) "...")
- (else "")))
- (newline cep)
- (loop (if (null? initials) '() (cdr initials))
- (if (null? longname) '() (cdr longname)))))))
- optnames arities aliast))
- (slib:error 'getopt->parameter-list
- (case opt
- ((#\:) "argument missing after")
- ((#\?) "unrecognized option"))
- (string #\- getopt:opt)))
- ((#f)
- (cond ((and (< *optind* argc)
- (string=? "-" (list-ref argv *optind*)))
- (set! *optind* (+ 1 *optind*)))
- ((< *optind* argc)
- (cond ((and (member curopt optnames)
- (adjoin-parameters!
- parameter-list
- (list curopt
- (coerce-val (list-ref argv *optind*)
- curopt))))
- (set! *optind* (+ 1 *optind*))
- (loop))
- (else (slib:error 'getopt->parameter-list curopt
- (list-ref argv *optind*)
- "not supported"))))))
- (else
- (cond ((char? opt) (set! opt (string opt))))
- (let ((topt (assoc opt aliases)))
- (cond (topt (set! topt (cadr topt)))
- (else (slib:error "Option not recognized -" opt)))
- (cond
- ((not (can-take-arg? topt))
- (adjoin-parameters! parameter-list (list topt #t)))
- (*optarg*
- (set! curopt topt)
- (adjoin-parameters! parameter-list
- (list topt (coerce-val *optarg* curopt))))
- (else
- (set! curopt topt)
-;;; (slib:warn 'getopt->parameter-list
-;;; "= missing for option--" opt)
- )))
- (loop)))))
- parameter-list))
-
-(define (getopt->arglist argc argv optnames positions
- arities types defaulters checks aliases)
- (let* ((params (getopt->parameter-list
- argc argv optnames arities types aliases))
- (fparams (fill-empty-parameters defaulters params)))
- (and (list? params) (check-parameters checks fparams))
- (and (list? params) (parameter-list->arglist positions arities fparams))))