Basic: fix readline to work on C64 (Vice).
authorJoel Martin <github@martintribe.org>
Fri, 16 Sep 2016 06:38:44 +0000 (01:38 -0500)
committerJoel Martin <github@martintribe.org>
Fri, 16 Sep 2016 06:38:44 +0000 (01:38 -0500)
Also, add cbmbasic console patch that makes it work more like the C64
where GET does not echo.

basic/cbmbasic_console.patch [new file with mode: 0644]
basic/readline.in.bas

diff --git a/basic/cbmbasic_console.patch b/basic/cbmbasic_console.patch
new file mode 100644 (file)
index 0000000..d20dce1
--- /dev/null
@@ -0,0 +1,26 @@
+diff --git a/runtime.c b/runtime.c
+index 3066580..c635bd4 100644
+--- a/runtime.c
++++ b/runtime.c
+@@ -535,7 +535,8 @@ printf("CHROUT: %d @ %x,%x,%x,%x\n", A, a, b, c, d);
+                     left_cursor();\r
+                     break;\r
+                 case '"':\r
+-                    kernal_quote = 1;\r
++                    // jdm: this doesn't match C64 behavior\r
++                    //kernal_quote = 1;\r
+                     // fallthrough\r
+                 default:\r
+                     putchar(A);\r
+@@ -838,8 +839,10 @@ GETIN() {
+         /*Notice that EOF is also turned off in non-canonical mode*/\r
+         A = getchar();\r
+         if (A == 255) { A = 4; } // map actual EOF to 4\r
++\r
++        // jdm: this doesn't match C64 behavior\r
+         /* Simulate echo */\r
+-        if (A != 0 && A != 4) { putchar(A); }\r
++        //if (A != 0 && A != 4) { putchar(A); }\r
\r
+         /*restore the old settings*/\r
+         tcsetattr( STDIN_FILENO, TCSANOW, &oldt);\r
index 3d0999b..510bcb4 100644 (file)
@@ -9,10 +9,12 @@ READLINE:
   READCH:
     GET CH$: IF CH$="" THEN READCH
     CH=ASC(CH$)
+    REM PRINT CH
     IF (CH=4 OR CH=0) THEN EOF=1: GOTO RL_DONE: REM EOF
-    IF (CH=127) THEN GOSUB RL_BACKSPACE
-    IF (CH=127) THEN GOTO READCH
+    IF (CH=127) OR (CH=20) THEN GOSUB RL_BACKSPACE
+    IF (CH=127) OR (CH=20) THEN GOTO READCH
     IF (CH<32 OR CH>127) AND CH<>13 THEN READCH
+    PRINT CH$;
     IF LEN(LINE$)<255 AND CH$<>CHR$(13) THEN LINE$=LINE$+CH$
     IF LEN(LINE$)<255 AND CH$<>CHR$(13) THEN GOTO READCH
   RL_DONE:
@@ -21,10 +23,7 @@ READLINE:
 
   REM Assumes LINE$ has input buffer
   RL_BACKSPACE:
-  IF LEN(LINE$)=0 THEN RL_BACKSPACE_ONCE:
-    PRINT CHR$(157) + CHR$(157) + "  " + CHR$(157) + CHR$(157);
+    IF LEN(LINE$)=0 THEN RETURN
     LINE$=LEFT$(LINE$, LEN(LINE$)-1)
-    RETURN
-  RL_BACKSPACE_ONCE:
     PRINT CHR$(157) + " " + CHR$(157);
     RETURN