(Arne Babenhauserheide)
2013-12-03: base60 decode seems to work. base60 decode seems to work.
diff --git a/examples/kit-encode.w b/examples/kit-encode.w
old mode 100644
new mode 100755
--- a/examples/kit-encode.w
+++ b/examples/kit-encode.w
@@ -7,11 +7,44 @@ define base60chars
define : base60encode number
let moddown : (base60 "") (quotient number)
if : < quotient 60
- string-append (string-ref base60chars quotient) base60
- moddown
- string-append : string-ref base60chars : floor-remainder quotient 60
- floor-quotient quotient 60
+ string-append (substring base60chars quotient (+ 1 quotient)) base60
+ let : : remainder : floor-remainder quotient 60
+ moddown
+ string-append
+ substring base60chars remainder : + 1 remainder
+ . base60
+ floor-quotient quotient 60
define : base60decode string
- display string
+ let decode : (number 0) (rest string)
+ if : = 1 : string-length rest
+ + (* number 60) : string-index base60chars : string-ref rest 0
+ decode
+ + (* number 60) : string-index base60chars : string-ref rest 0
+ string-drop rest 1
+define testnumbers
+ let
+ : start : list 0 1 10 60 59 61 100 1000 1e4 1e5 1e6 1e7 1e8 1e9 64 128
+ multiplesof256 1000
+ let loop : (numbers start) (exponent 1)
+ if : > exponent multiplesof256
+ . numbers
+ loop
+ append numbers : list : expt 256 exponent
+ + 1 exponent
+
+
+define : displaywithnewline foo
+ display foo
+ newline
+; map displaywithnewline
+; map base60encode
+; map inexact->exact testnumbers
+; map displaywithnewline
+; map base60decode
+; map base60encode
+; map inexact->exact testnumbers
+
+displaywithnewline
+ base60encode : list-ref testnumbers : - (length testnumbers) 1