From 15d7d85c19cf246b65e64a26897dea14d09521b5 Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Mon, 3 Nov 2014 09:52:31 -0600 Subject: [PATCH] BAS: Remove some code that I removed too aggressively --- interpreters/bas/fs.c | 44 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/interpreters/bas/fs.c b/interpreters/bas/fs.c index 12958240a..6fd731c20 100644 --- a/interpreters/bas/fs.c +++ b/interpreters/bas/fs.c @@ -78,6 +78,8 @@ #include #include +#include + #include "fs.h" /**************************************************************************** @@ -279,32 +281,68 @@ static int edit(int chn, int onl) return -1; } + /* Check for the backspace charactor */ + + if (ch == ASCII_BS) + { + if (f->inCapacity) + { #ifdef CONFIG_INTERPREPTER_BAS_VT100 - /* REVISIT: Use VT100 commands to erase */ + /* REVISIT: Use VT100 commands to erase: Move cursor back and erase to the end of the line */ #warning Missing Logic #else - if ((f->inCapacity + 1) < sizeof(f->inBuf)) + /* Use backspace to erase */ + + if (f->inBuf[f->inCapacity - 1] >= '\0' && + f->inBuf[f->inCapacity - 1] < ' ') + { + FS_putChars(chn, "\b\b \b\b"); + } + else + { + FS_putChars(chn, "\b \b"); + } +#endif + --f->inCapacity; + } + } + + /* Is there space for another character in the buffer? */ + + else if ((f->inCapacity + 1) < sizeof(f->inBuf)) { + /* Yes.. Was this a new line character? */ + if (ch != '\n') { + /* No.. was this an ASCII control character? */ + if (ch >= '\0' && ch < ' ') { + /* Yes.. Echo control characters as escape sequences */ + FS_putChar(chn, '^'); FS_putChar(chn, ch ? (ch + 'a' - 1) : '@'); } else { + /* No.. Just echo the character */ + FS_putChar(chn, ch); } } + + /* Should we echo newline characters? */ + else if (onl) { FS_putChar(chn, '\n'); } + /* Put the raw character into the buffer in any event */ + f->inBuf[f->inCapacity++] = ch; } -#endif } while (ch != '\n');