Clean up hexdump

db4
Slava Pestov 2008-11-02 02:12:12 -06:00
parent c5293819ce
commit 866f798c00
1 changed files with 17 additions and 17 deletions

View File

@ -1,36 +1,36 @@
! Copyright (C) 2008 Doug Coleman. ! Copyright (C) 2008 Doug Coleman.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: arrays io io.streams.string kernel math math.parser USING: arrays io io.streams.string kernel math math.parser
namespaces prettyprint sequences splitting grouping strings namespaces sequences splitting grouping strings ascii ;
ascii ;
IN: hexdump IN: hexdump
<PRIVATE <PRIVATE
: write-header ( len -- ) : write-header ( len -- )
"Length: " write "Length: " write
[ unparse write ", " write ] [ number>string write ", " write ]
[ >hex write "h" write nl ] bi ; [ >hex write "h" write nl ] bi ;
: write-offset ( lineno -- ) : write-offset ( lineno -- )
16 * >hex 8 CHAR: 0 pad-left write "h: " write ; 16 * >hex 8 CHAR: 0 pad-left write "h: " write ;
: write-hex-digit ( digit -- ) : >hex-digit ( digit -- str )
>hex 2 CHAR: 0 pad-left write ; >hex 2 CHAR: 0 pad-left " " append ;
: write-hex-line ( str n -- ) : >hex-digits ( bytes -- str )
write-offset [ >hex-digit ] { } map-as concat 48 CHAR: \s pad-right ;
dup [ write-hex-digit bl ] each
16 over length - 3 * CHAR: \s <string> write : >ascii ( bytes -- str )
[ dup printable? [ drop CHAR: . ] unless write1 ] each [ [ printable? ] keep CHAR: . ? ] map ;
nl ;
: write-hex-line ( str lineno -- )
write-offset [ >hex-digits write ] [ >ascii write ] bi nl ;
PRIVATE> PRIVATE>
: hexdump ( seq -- str ) : hexdump. ( seq -- )
[ [ length write-header ]
[ length write-header ] [ 16 <sliced-groups> [ write-hex-line ] each-index ] bi ;
[ 16 <sliced-groups> [ write-hex-line ] each-index ] bi
] with-string-writer ;
: hexdump. ( seq -- ) hexdump write ; : hexdump ( seq -- str )
[ hexdump. ] with-string-writer ;