1 ! Copyright (C) 2020 John Benediktsson
2 ! See http://factorcode.org/license.txt for BSD license
4 USING: ascii base64.private byte-arrays endian grouping
5 kernel kernel.private literals math sequences ;
9 ERROR: malformed-base24 ;
14 CONSTANT: alphabet $[ "ZAC2B3EF4GH5TK67P8RS9WXY" >byte-array ]
17 : ch>base24 ( ch -- ch )
20 : base24>ch ( ch -- ch )
21 $[ alphabet alphabet-inverse ] nth
22 [ malformed-base24 ] unless* { fixnum } declare ;
26 :: base24> ( base24 -- seq )
28 base24 [ "- " member? ] reject >upper
29 dup length 7 mod 0 assert=
31 0 [ base24>ch swap 24 * + ] reduce
36 :: >base24 ( seq -- base24 )
38 seq length 4 mod 0 assert=
41 24 /mod ch>base24 accum push
44 accum reverse! B{ } like ;