: (rdlnc)                   ( -- f )
    ( buffer overflow? same as if we typed a newline )
    IN> @ IN) = IF 0x0a ELSE KEY THEN     ( c )
    DUP 0x7f = IF DROP 0x8 THEN ( del? same as backspace )
    DUP 0x0a = IF DROP 0xd THEN ( lf? same as cr )
    ( echo back )
    DUP EMIT                    ( c )
    ( bacspace? handle and exit )
    DUP 0x8 = IF (inbs) EXIT THEN
    ( write and advance )
    DUP     ( keep as result )  ( c c )
( We take advantage of the fact that c's MSB is always zero and
  thus ! automatically null-terminates our string )
    IN> @ ! 1 IN> +!            ( c )
    ( if newline, replace with zero to indicate EOL )
    DUP 0xd = IF DROP 0 THEN ;