: xreverse {: c-addr u -- c-addr2 u :} u allocate throw u + c-addr swap over u + >r begin ( from to r:end) over r@ u< while over r@ over - x-size dup >r - 2dup r@ cmove swap r> + swap repeat r> drop nip u ; \ example use s" ώщыē" xreverse type \ outputs "ēыщώ"