         ] if*
     ] [
         drop
-    ] if ;
-
-: parse-tar-header ( seq -- obj )
+    ] if ; inline recursive
+
+: parse-tar-header ( seq -- header )
     dup checksum-header dup zero-checksum = [
         2drop
         tar-header new


ERROR: unknown-typeflag ch ;

M: unknown-typeflag summary ( obj -- str )
    ch>> [ "Unknown typeflag: " ] dip prefix ;

: read/write-blocks ( tar-header path -- )
    binary [ read-data-blocks ] with-file-writer ;

: prepend-current-directory ( path -- path' )

TYPED: checksum-header ( seq: byte-array -- n )
    148 cut-slice 8 tail-slice [ 0 [ + ] reduce ] bi@ + 256 + >fixnum ;

: read-data-blocks ( header -- )
    dup size>> 0 > [
        block-size read [
            over size>> dup block-size <= [
