From bb49272364ff587dbe404145fa7cd8befcf4b0a1 Mon Sep 17 00:00:00 2001
From: "Rob Swindell (on ChromeOS)" <rob@synchro.net>
Date: Sun, 24 Mar 2024 19:26:00 -0700
Subject: [PATCH] Move "spinning cursor at pause prompt" from node to system
 config

From SCFG->Nodes ... Toggle Options to SCFG->System->Toggle Options

And from a bit flag in node_misc to its own bool member of scfg_t.
---
 exec/upgrade_to_v320.js   |  1 +
 src/sbbs3/getkey.cpp      |  2 +-
 src/sbbs3/scfg/scfgnode.c | 21 ---------------------
 src/sbbs3/scfg/scfgsys.c  | 16 ++++++++++++++++
 src/sbbs3/scfgdefs.h      |  1 +
 src/sbbs3/scfglib1.c      |  1 +
 src/sbbs3/scfgsave.c      |  1 +
 7 files changed, 21 insertions(+), 22 deletions(-)

diff --git a/exec/upgrade_to_v320.js b/exec/upgrade_to_v320.js
index 415faa92d2..5e41102bf4 100755
--- a/exec/upgrade_to_v320.js
+++ b/exec/upgrade_to_v320.js
@@ -118,6 +118,7 @@ if(node_settings & NM_LOGON_P)
 	cnf.login |= LOGIN_PWPROMPT;
 if(!(node_settings & NM_NO_NUM))
 	cnf.login |= LOGIN_USERNUM;
+cnf.spinning_pause_prompt = (node_settings & NM_NOPAUSESPIN) ? "false" : "true";
 
 for(var i in cnf.validation_set)
 	ini.iniSetObject("valset:" + i, cnf.validation_set[i]);
diff --git a/src/sbbs3/getkey.cpp b/src/sbbs3/getkey.cpp
index b26f5a1ee0..fedcccd048 100644
--- a/src/sbbs3/getkey.cpp
+++ b/src/sbbs3/getkey.cpp
@@ -438,7 +438,7 @@ bool sbbs_t::pause(bool set_abort)
 	bputs(text[Pause]);
 	len = bstrlen(text[Pause]);
 	if(sys_status&SS_USERON && !(useron.misc&(HTML|WIP|NOPAUSESPIN))
-		&& !(cfg.node_misc&NM_NOPAUSESPIN))
+		&& cfg.spinning_pause_prompt)
 		l|=K_SPIN;
 	ch=getkey(l);
 	if(pause_hotspot) {
diff --git a/src/sbbs3/scfg/scfgnode.c b/src/sbbs3/scfg/scfgnode.c
index 94381f0b1f..5a0663517c 100644
--- a/src/sbbs3/scfg/scfgnode.c
+++ b/src/sbbs3/scfg/scfgnode.c
@@ -238,8 +238,6 @@ void node_cfg()
 				done=0;
 				while(!done) {
 					i=0;
-					snprintf(opt[i++], MAX_OPLN, "%-27.27s%s","Spinning Pause Prompt"
-						,cfg.node_misc&NM_NOPAUSESPIN ? "No":"Yes");
 					snprintf(opt[i++], MAX_OPLN, "%-27.27s%s","Keep Node File Open"
 						,cfg.node_misc&NM_CLOSENODEDAB ? "No":"Yes");
 
@@ -258,25 +256,6 @@ void node_cfg()
 							done=1;
 							break;
 						case 0:
-							i=cfg.node_misc&NM_NOPAUSESPIN ? 1:0;
-							uifc.helpbuf=
-								"`Spinning Pause Prompt:`\n"
-								"\n"
-								"If you want to display a spinning cursor at the [Hit a key] prompt,\n"
-								"set this option to `Yes`.\n"
-							;
-							i=uifc.list(WIN_MID|WIN_SAV,0,10,0,&i,0
-								,"Spinning Cursor at Pause Prompt",uifcYesNoOpts);
-							if(i==0 && cfg.node_misc&NM_NOPAUSESPIN) {
-								cfg.node_misc&=~NM_NOPAUSESPIN;
-								uifc.changes=1;
-							}
-							else if(i==1 && !(cfg.node_misc&NM_NOPAUSESPIN)) {
-								cfg.node_misc|=NM_NOPAUSESPIN;
-								uifc.changes=1;
-							}
-							break;
-						case 1:
 							i=cfg.node_misc&NM_CLOSENODEDAB ? 1:0;
 							uifc.helpbuf=
 								"`Keep Node File Open:`\n"
diff --git a/src/sbbs3/scfg/scfgsys.c b/src/sbbs3/scfg/scfgsys.c
index 82fcd82a01..29f95875dd 100644
--- a/src/sbbs3/scfg/scfgsys.c
+++ b/src/sbbs3/scfg/scfgsys.c
@@ -1755,6 +1755,8 @@ void sys_cfg(void)
 						,cfg.sys_misc&SM_NONODELIST ? "No" : "Yes");
 					snprintf(opt[i++], MAX_OPLN, "%-35s%s","Mouse Hot-spots in Menus/Prompts"
 						,cfg.sys_misc&SM_MOUSE_HOT ? "Yes" : "No");
+					snprintf(opt[i++], MAX_OPLN, "%-35s%s","Spinning Cursor at Pause Prompts"
+						,cfg.spinning_pause_prompt ? "Yes" : "No");
 					opt[i][0]=0;
 					uifc.helpbuf=
 						"`System Toggle Options:`\n"
@@ -1919,6 +1921,20 @@ void sys_cfg(void)
 								cfg.sys_misc |= SM_MOUSE_HOT;
 							}
 							break;
+						case 10:
+							i=cfg.spinning_pause_prompt ? 0:1;
+							uifc.helpbuf=
+								"`Spinning Cursor at Pause Prompts:`\n"
+								"\n"
+								"If you want to display a spinning cursor at the [Hit a key] prompt,\n"
+								"set this option to `Yes`.\n"
+							;
+							i=uifc.list(WIN_MID|WIN_SAV,0,10,0,&i,0
+								,"Spinning Cursor at Pause Prompts",uifcYesNoOpts);
+							if(i >= 0)
+								cfg.spinning_pause_prompt = !cfg.spinning_pause_prompt;
+							break;
+
 						}
 					}
 				break;
diff --git a/src/sbbs3/scfgdefs.h b/src/sbbs3/scfgdefs.h
index af782e7849..660f6acffe 100644
--- a/src/sbbs3/scfgdefs.h
+++ b/src/sbbs3/scfgdefs.h
@@ -488,6 +488,7 @@ typedef struct
 
 	char			node_daily[LEN_CMD+1];	/* Name of node's daily event */
 	uint32_t		node_misc;			/* Misc bits for node setup */
+	bool			spinning_pause_prompt;
 	uint16_t		valuser;			/* User validation mail goes to */
 	uint16_t		erruser;			/* User error messages goes to */
 	uchar			errlevel;			/* Log level threshold to notify user (erruser) */
diff --git a/src/sbbs3/scfglib1.c b/src/sbbs3/scfglib1.c
index cda1bbd196..90f724f6f1 100644
--- a/src/sbbs3/scfglib1.c
+++ b/src/sbbs3/scfglib1.c
@@ -123,6 +123,7 @@ bool read_main_cfg(scfg_t* cfg, char* error, size_t maxerrlen)
 	cfg->ctrlkey_passthru = iniGetInteger(ini, ROOT_SECTION, "ctrlkey_passthru", 0);
 	cfg->max_getkey_inactivity = (uint)iniGetDuration(ini, ROOT_SECTION, "max_getkey_inactivity", 300);
 	cfg->inactivity_warn = (uchar)iniGetUInteger(ini, ROOT_SECTION, "inactivity_warn", 75);
+	cfg->spinning_pause_prompt = iniGetBool(ini, ROOT_SECTION, "spinning_pause_prompt", true);
 
 	cfg->user_backup_level = iniGetUInteger(ini, ROOT_SECTION, "user_backup_level", 5);
 	cfg->mail_backup_level = iniGetUInteger(ini, ROOT_SECTION, "mail_backup_level", 5);
diff --git a/src/sbbs3/scfgsave.c b/src/sbbs3/scfgsave.c
index 6f7870e9d2..1541e7e482 100644
--- a/src/sbbs3/scfgsave.c
+++ b/src/sbbs3/scfgsave.c
@@ -143,6 +143,7 @@ bool write_main_cfg(scfg_t* cfg)
 	iniSetHexInt(&ini, ROOT_SECTION, "ctrlkey_passthru", cfg->ctrlkey_passthru, NULL);
 	iniSetDuration(&ini, ROOT_SECTION, "max_getkey_inactivity", cfg->max_getkey_inactivity, NULL);
 	iniSetUInteger(&ini, ROOT_SECTION, "inactivity_warn", cfg->inactivity_warn, NULL);
+	iniSetBool(&ini, ROOT_SECTION, "spinning_pause_prompt", cfg->spinning_pause_prompt, NULL);
 	iniSetUInteger(&ini, ROOT_SECTION, "user_backup_level", cfg->user_backup_level, NULL);
 	iniSetUInteger(&ini, ROOT_SECTION, "mail_backup_level", cfg->mail_backup_level, NULL);
 	iniSetUInteger(&ini, ROOT_SECTION, "config_backup_level", cfg->config_backup_level, NULL);
-- 
GitLab