diff --git a/blk/427 b/blk/427 index f3eb716..a53ca85 100644 --- a/blk/427 +++ b/blk/427 @@ -1,10 +1,10 @@ ( handle backspace: go back one char in IN>, if possible, then - emit SPC + BS ) + emit BS + SPC + BS ) : (inbs) ( already at IN( ? ) IN> @ IN( = IF EXIT THEN IN> @ 1- IN> ! - SPC BS + BS SPC BS ; : KEY diff --git a/blk/428 b/blk/428 index 2412b93..f915b88 100644 --- a/blk/428 +++ b/blk/428 @@ -1,16 +1,16 @@ -: (rdlnc) ( -- f ) +: (rdlnc) ( -- c ) ( buffer overflow? same as if we typed a newline ) - IN> @ IN) = IF 0x0a ELSE KEY THEN ( c ) + 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 + ( echo back ) + DUP EMIT ( c ) ( write and advance ) - DUP ( keep as result ) ( c c ) + 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 ) + IN> @ ! 1 IN> +! ( c ) ( if newline, replace with zero to indicate EOL ) DUP 0xd = IF DROP 0 THEN ; diff --git a/emul/forth.bin b/emul/forth.bin index 04694fd..7b72c2f 100644 Binary files a/emul/forth.bin and b/emul/forth.bin differ