USING: io kernel math namespaces sequences strings ; ! String buffers support the stream output protocol. M: sbuf stream-write-attr nip sbuf-append ; M: sbuf stream-close drop ; M: sbuf stream-flush drop ; M: sbuf stream-auto-flush drop ; : string-out ( quot -- str ) [ 512 stdio set call stdio get >string ] with-scope ; ! Reversed string buffers support the stream input protocol. M: sbuf stream-read1 ( sbuf -- char/f ) dup empty? [ drop f ] [ pop ] ifte ; M: sbuf stream-read ( count sbuf -- string ) dup empty? [ 2drop f ] [ swap over length min empty-sbuf [ [ drop dup pop ] nmap drop ] keep ] ifte ; : ( string -- stream ) >sbuf dup nreverse ; : string-in ( str quot -- ) [ swap stdio set call ] with-scope ;