summaryrefslogtreecommitdiffstats
path: root/printf.scm
diff options
context:
space:
mode:
Diffstat (limited to 'printf.scm')
-rw-r--r--printf.scm25
1 files changed, 10 insertions, 15 deletions
diff --git a/printf.scm b/printf.scm
index dffe90d..aefab5c 100644
--- a/printf.scm
+++ b/printf.scm
@@ -56,7 +56,7 @@
(case fc
((#\n #\N) (out #\newline))
((#\t #\T) (out slib:tab))
- ((#\r #\R) (out #\return))
+ ;;((#\r #\R) (out #\return))
((#\f #\F) (out slib:form-feed))
((#\newline) #f)
(else (out fc)))
@@ -85,8 +85,12 @@
(string->number (string c)))))
((not (char-numeric? fc)) accum)
(must-advance)))))))
- (define integer-pad
+ (define integer-convert
(lambda (s radix)
+ (set! s (cond ((symbol? s) (symbol->string s))
+ ((number? s) (number->string s radix))
+ ((or (not s) (null? s)) "0")
+ (else "1")))
(cond ((not (negative? precision))
(set! leading-0s #f)))
(let* ((pre
@@ -216,24 +220,15 @@
(out (make-string (- width (string-length os)) #\ ))
(out os))))
(loop (cdr args)))
-
((#\d #\D #\i #\I #\u #\U)
- (out (integer-pad
- (cond ((symbol? (car args))
- (symbol->string (car args)))
- ((number? (car args))
- (number->string (car args)))
- ((not (car args)) "0")
- (else "1"))
- 10))
+ (out (integer-convert (car args) 10))
(loop (cdr args)))
((#\o #\O)
- (out (integer-pad (number->string (car args) 8) 8))
+ (out (integer-convert (car args) 8))
(loop (cdr args)))
((#\x #\X)
- (out
- ((if (char-upper-case? fc) string-upcase string-downcase)
- (integer-pad (number->string (car args) 16) 16)))
+ (out ((if (char-upper-case? fc) string-upcase string-downcase)
+ (integer-convert (car args) 16)))
(loop (cdr args)))
((#\%) (out #\%)
(loop args))