Don't emit BS when at beginning of input buffer

This commit is contained in:
Virgil Dupras 2020-05-15 20:51:09 -04:00
parent aad713c477
commit b6c039589f
3 changed files with 8 additions and 8 deletions

View File

@ -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

12
blk/428
View File

@ -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 ;

Binary file not shown.