base85: change to not pad encoding, fix output bug.

freebsd-work
John Benediktsson 2019-01-25 21:14:11 -08:00
parent 1ff2722b15
commit 4fbc726b1a
2 changed files with 19 additions and 7 deletions

View File

@ -3,5 +3,8 @@ USING: base85 kernel strings tools.test ;
{ t } [ "Hello, world" dup >base85 base85> >string = ] unit-test
{ t } [ "ready" dup >base85 base85> >string = ] unit-test
{ "NM!&3" } [ "He" >base85 >string ] unit-test
{ "NM!" } [ "He" >base85 >string ] unit-test
{ t } [ "He" dup >base85 base85> >string = ] unit-test
{ "00" } [ B{ 0 } >base85 >string ] unit-test
{ "\0" } [ "00" base85> >string ] unit-test

View File

@ -27,7 +27,12 @@ CONSTANT: alphabet
4 pick stream-read dup length {
{ 0 [ 3drop ] }
{ 4 [ encode4 write-lines (encode-base85) ] }
[ drop 4 0 pad-tail encode4 write-lines (encode-base85) ]
[
drop
[ 4 0 pad-tail encode4 ]
[ length neg 4 rem head-slice* write-lines ] bi
(encode-base85)
]
} case ;
PRIVATE>
@ -40,15 +45,19 @@ PRIVATE>
<PRIVATE
: decode5 ( seq -- )
0 [ [ 85 * ] [ base85>ch ] bi* + ] reduce 4 >be
[ zero? ] trim-tail-slice write ; inline
: decode5 ( seq -- seq' )
0 [ [ 85 * ] [ base85>ch ] bi* + ] reduce 4 >be ; inline
: (decode-base85) ( stream -- )
5 "\n\r" pick read-ignoring dup length {
{ 0 [ 2drop ] }
{ 5 [ decode5 (decode-base85) ] }
[ malformed-base85 ]
{ 5 [ decode5 write (decode-base85) ] }
[
drop
[ 5 CHAR: ~ pad-tail decode5 ]
[ length neg 5 rem head-slice* write ] bi
(decode-base85)
]
} case ;
PRIVATE>