From e75bb713c72a1f9e7240ce5e8eeacb2518fb0b04 Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Fri, 1 May 2020 19:42:31 +0000
Subject: [PATCH] Use/cache ansiterm_lib.js for sending the ANSI things.
 mouse_enable() pasted from minesweeper.js. Sanitize the mode flag check. Add
 the CVS Id keyword.

---
 exec/load/mouse_getkey.js | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/exec/load/mouse_getkey.js b/exec/load/mouse_getkey.js
index 4062e42f90..f76373f570 100644
--- a/exec/load/mouse_getkey.js
+++ b/exec/load/mouse_getkey.js
@@ -1,3 +1,5 @@
+// $Id$
+
 function mouse_getkey(mode, timeout, enabled)
 {
 	var key;
@@ -8,13 +10,24 @@ function mouse_getkey(mode, timeout, enabled)
 	var motion;
 	var mods;
 	var press;
+	var ansiterm = bbs.mods.ansiterm_lib;
+	if(!ansiterm)
+		ansiterm = bbs.mods.ansiterm_lib = load({}, "ansiterm_lib.js");
 
 	// TODO: Fake these modes...
 	var safe_mode = mode & ~(K_UPPER|K_UPRLWR|K_NUMBER|K_ALPHA|K_NOEXASC);
 
-	if (mode & (K_UPPER|K_UPRLWR|K_NUMBER|K_ALPHA|K_NOEXASC)) {
+	if (safe_mode != mode) {
 		throw("Invalid mode "+mode+" for mouse_getkey()");
 	}
+	
+	function mouse_enable(enable)
+	{
+		if(console.term_supports(USER_ANSI)) {
+			ansiterm.send('mouse', enable ? 'set' : 'clear', 'x10_compatible');
+			ansiterm.send('mouse', enable ? 'set' : 'clear', 'extended_coord');
+		}
+	}
 
 	function restuff()
 	{
@@ -26,7 +39,7 @@ function mouse_getkey(mode, timeout, enabled)
 		enabled = false;
 
 	if (!enabled) {
-		console.write("\x1b[?1006;9h");
+		mouse_enable(true);
 	}
 	do {
 		if(timeout !== undefined)
@@ -34,7 +47,7 @@ function mouse_getkey(mode, timeout, enabled)
 		else
 			key=console.getkey(mode);
 		if (!enabled)
-			console.write("\x1b[?9l");
+			mouse_enable(false);
 
 		if (key === '' || key === undefined || key === null) {
 			ansi += key;
-- 
GitLab