From 5e03a6f9d1727f0c59fba5f15fa195773f5268ed Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Tue, 8 Jul 2003 03:44:52 +0000
Subject: [PATCH] Saves and restores console status and ctrlkey_passthru bit
 mask. Defaults to insert mode, handles insertion of blank lines.

---
 exec/sbbsedit.js | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/exec/sbbsedit.js b/exec/sbbsedit.js
index d69da9dd72..f0ea2afa58 100644
--- a/exec/sbbsedit.js
+++ b/exec/sbbsedit.js
@@ -6,7 +6,7 @@
 
 const REVISION = "$Revision$".split(' ')[1];
 
-const debug=false;
+const debug=true;
 
 // Message header display format
 var hdr_fmt	= "\1b\1h%-4s\1n\1b: \1h\1c%.60s\1>\r\n";
@@ -28,6 +28,7 @@ var row = 0;
 var rows = console.screen_rows;
 var fname = argv[0];
 var line = new Array();
+var console_status=console.status;
 var ctrlkey_passthru=console.ctrlkey_passthru;
 console.ctrlkey_passthru|=(1<<3);	// Ctrl-C
 console.ctrlkey_passthru|=(1<<11);	// Ctrl-K
@@ -68,6 +69,7 @@ if(line.length)
 update_status();
 
 console.getstr_offset=0;
+console.status|=CON_INSERT;	/* Default to insert mode */
 
 var getstr_mode = K_EDIT|K_MSG|K_WRAP|K_NOCRLF|K_LEFTEXIT;
 
@@ -128,7 +130,13 @@ while(bbs.online) {
 
 	line[l]=str;
 
-	if(console.status&(CON_UPARROW|CON_BACKSPACE|CON_LEFTARROW)) {
+	if(console.status&(CON_UPARROW|CON_BACKSPACE|CON_LEFTARROW|CON_DELETELINE)) {
+		if(console.status&CON_DELETELINE) {
+			/* Delete line */
+			line.splice(l,1);
+			show_text(0);	/* should be optimized */
+			continue;
+		}
 		if(console.status&CON_BACKSPACE && str.length==0) {
 			/* Delete line */
 			line.splice(l,1);
@@ -137,6 +145,7 @@ while(bbs.online) {
 				console.up();
 				row--;
 			}
+			show_text(0);
 			continue;
 		}
 		if(l) {
@@ -149,7 +158,13 @@ while(bbs.online) {
 		}
 		console.write("\r");
 	} else {
+		if(console.status&CON_DOWNARROW && l+1>=line.length)
+			continue;	/* Down allow arrow down past EOF */
 		l++;
+		if(console.status&CON_INSERT && !(console.status&CON_DOWNARROW)) {
+			line.splice(l,0,"");	/* Insert a blank line */
+			show_text(0);
+		}
 		if(row+1>=rows)
 			l=show_text(first_line(l,row));
 		else {
@@ -164,7 +179,8 @@ bail();
 function bail()
 {
 	console.clear();
-	console.ctrlkey_passthru|=(1<<19);	// Ctrl-T
+	console.ctrlkey_passthru=ctrlkey_passthru;
+	console.status=console_status;
 	exit();
 }
 
-- 
GitLab