From 02e06427acae84ea2cbb0df1c991aa013dcb594b Mon Sep 17 00:00:00 2001
From: Rob Swindell <rob@synchro.net>
Date: Sun, 6 Sep 2020 13:16:30 -0700
Subject: [PATCH] Cosmetic fixes/improvements.

---
 src/sbbs3/scfg/scfgnet.c | 48 +++++++++++++++-------
 src/sbbs3/scfg/scfgsys.c | 87 +++++++++++++++++++++++-----------------
 2 files changed, 84 insertions(+), 51 deletions(-)

diff --git a/src/sbbs3/scfg/scfgnet.c b/src/sbbs3/scfg/scfgnet.c
index baac2a4787..eb7eb4f386 100644
--- a/src/sbbs3/scfg/scfgnet.c
+++ b/src/sbbs3/scfg/scfgnet.c
@@ -225,7 +225,7 @@ void net_cfg()
 								"`QWK Network Hubs:`\n"
 								"\n"
 								"This is a list of QWK network hubs that your system calls to exchange\n"
-								"packets with.\n"
+								"message packets with.\n"
 								"\n"
 								"To add a hub, select the desired location with the arrow keys and hit\n"
 								"~ INS ~.\n"
@@ -245,7 +245,7 @@ void net_cfg()
 									"`QWK Network Hub System ID:`\n"
 									"\n"
 									"This is the QWK System ID of this hub. It is used for incoming and\n"
-									"outgoing network packets and must be accurate.\n"
+									"outgoing network message packets and must be accurate.\n"
 								;
 								if(uifc.input(WIN_MID|WIN_SAV,0,0
 									,"System ID",str,LEN_QWKID,K_UPPER)<1)
@@ -444,6 +444,9 @@ void net_cfg()
 							"This is a filename that will be used as a semaphore (signal) to your\n"
 							"FidoNet front-end that new NetMail has been created and the messages\n"
 							"should be re-scanned.\n"
+							"\n"
+							"`Command-line specifiers may be included in the semaphore filename.`\n"
+							SCFG_CMDLINE_SPEC_HELP
 						;
 						uifc.input(WIN_MID|WIN_SAV,0,0,"NetMail Semaphore"
 							,cfg.netmail_sem,sizeof(cfg.netmail_sem)-1,K_EDIT);
@@ -455,6 +458,9 @@ void net_cfg()
 							"This is a filename that will be used as a semaphore (signal) to your\n"
 							"FidoNet front-end that new EchoMail has been created and the messages\n"
 							"should be re-scanned.\n"
+							"\n"
+							"`Command-line specifiers may be included in the semaphore filename.`\n"
+							SCFG_CMDLINE_SPEC_HELP
 						;
 						uifc.input(WIN_MID|WIN_SAV,0,0,"EchoMail Semaphore"
 							,cfg.echomail_sem,sizeof(cfg.echomail_sem)-1,K_EDIT);
@@ -470,7 +476,7 @@ void net_cfg()
 							,cfg.netmail_dir,sizeof(cfg.netmail_dir)-1,K_EDIT);
 						break;
 					case 5:
-						i=0;
+						i = (cfg.netmail_misc & NMAIL_ALLOW) ? 0 : 1;
 						uifc.helpbuf=
 							"`Allow Users to Send NetMail:`\n"
 							"\n"
@@ -489,7 +495,7 @@ void net_cfg()
 						}
 						break;
 					case 6:
-						i=0;
+						i = (cfg.netmail_misc & NMAIL_FILE) ? 0 : 1;
 						uifc.helpbuf=
 							"`Allow Users to Send NetMail File Attachments:`\n"
 							"\n"
@@ -508,7 +514,7 @@ void net_cfg()
 						}
 						break;
 					case 7:
-						i=1;
+						i = (cfg.netmail_misc & NMAIL_ALIAS) ? 0 : 1;
 						uifc.helpbuf=
 							"`Use Aliases in NetMail:`\n"
 							"\n"
@@ -529,7 +535,7 @@ void net_cfg()
 						}
 						break;
 					case 8:
-						i=1;
+						i = (cfg.netmail_misc & NMAIL_CRASH) ? 0 : 1;
 						uifc.helpbuf=
 							"`NetMail Defaults to Crash Status:`\n"
 							"\n"
@@ -548,7 +554,7 @@ void net_cfg()
 						}
 						break;
 					case 9:
-						i=1;
+						i = (cfg.netmail_misc & NMAIL_DIRECT) ? 0 : 1;
 						uifc.helpbuf=
 							"`NetMail Defaults to Direct Status:`\n"
 							"\n"
@@ -567,7 +573,7 @@ void net_cfg()
 						}
 						break;
 					case 10:
-						i=1;
+						i = (cfg.netmail_misc & NMAIL_HOLD) ? 0 : 1;
 						uifc.helpbuf=
 							"`NetMail Defaults to Hold Status:`\n"
 							"\n"
@@ -586,7 +592,7 @@ void net_cfg()
 						}
 						break;
 					case 11:
-						i=0;
+						i = (cfg.netmail_misc & NMAIL_KILL) ? 0 : 1;
 						uifc.helpbuf=
 							"`Kill NetMail After it is Sent:`\n"
 							"\n"
@@ -618,7 +624,7 @@ void net_cfg()
 						cfg.netmail_cost=atol(str);
 						break; 
 					case 13:
-						i=0;
+						i = (cfg.netmail_misc & NMAIL_CHSRCADDR) ? 0 : 1;
 						uifc.helpbuf=
 							"`Choose NetMail Source Address:`\n"
 							"\n"
@@ -694,6 +700,9 @@ void net_cfg()
 							"This is a filename that will be used as a semaphore (signal) to any\n"
 							"external Internet e-mail processors that new mail has been received\n"
 							"and the message base should be re-scanned.\n"
+							"\n"
+							"`Command-line specifiers may be included in the semaphore filename.`\n"
+							SCFG_CMDLINE_SPEC_HELP
 						;
 						uifc.input(WIN_MID|WIN_SAV,0,0,"Inbound Semaphore"
 							,cfg.smtpmail_sem,sizeof(cfg.smtpmail_sem)-1,K_EDIT);
@@ -705,12 +714,15 @@ void net_cfg()
 							"This is a filename that will be used as a semaphore (signal) to any\n"
 							"external Internet gateways (if supported) that new mail has been created\n"
 							"and the message base should be re-scanned.\n"
+							"\n"
+							"`Command-line specifiers may be included in the semaphore filename.`\n"
+							SCFG_CMDLINE_SPEC_HELP
 						;
 						uifc.input(WIN_MID|WIN_SAV,0,0,"Outbound Semaphore"
 							,cfg.inetmail_sem,sizeof(cfg.inetmail_sem)-1,K_EDIT);
 						break;
 					case 3:
-						i=0;
+						i = (cfg.inetmail_misc & NMAIL_ALLOW) ? 0 : 1;
 						uifc.helpbuf=
 							"`Allow Users to Send Internet E-mail:`\n"
 							"\n"
@@ -729,7 +741,7 @@ void net_cfg()
 						}
 						break;
 					case 4:
-						i=0;
+						i = (cfg.inetmail_misc & NMAIL_FILE) ? 0 : 1;
 						uifc.helpbuf=
 							"`Allow Users to Send Internet E-mail File Attachments:`\n"
 							"\n"
@@ -748,7 +760,7 @@ void net_cfg()
 						}
 						break;
 					case 5:
-						i=1;
+						i = (cfg.inetmail_misc & NMAIL_ALIAS) ? 0 : 1;
 						uifc.helpbuf=
 							"`Use Aliases in Internet E-mail:`\n"
 							"\n"
@@ -769,7 +781,7 @@ void net_cfg()
 						}
 						break;
 					case 6:
-						i=0;
+						i = (cfg.inetmail_misc & NMAIL_KILL) ? 0 : 1;
 						uifc.helpbuf=
 							"`Kill Internet E-mail After it is Sent:`\n"
 							"\n"
@@ -879,6 +891,11 @@ void qhub_edit(int num)
 			"found in Kludge Lines and also addresses the 25-character QWK field\n"
 			"length limits. HEADERS.DAT is supported in Synchronet v3.15 and later.\n"
 			"\n"
+			"Synchronet v3.18 and later supports `UTF-8` encoded messages within QWK\n"
+			"packets. If the hub is using Synchronet v3.18 or later, set this option\n"
+			"to `Yes`. This option also changes the QWK new-line sequence to the ASCII\n"
+			"LF (10) character instead of the traditional QWK newline byte (227).\n"
+			"\n"
 			"`Extended (QWKE) Packets` are not normally used in QWK Networking.\n"
 			"Setting this to `Yes` enables some QWKE-specific Kludge Lines that are\n"
 			"superfluous when the HEADERS.DAT file is supported and used.\n"
@@ -920,6 +937,7 @@ void qhub_edit(int num)
 					"\n"
 					"This is the command line to use to create (compress) REP packets for\n"
 					"this QWK network hub.\n"
+					SCFG_CMDLINE_SPEC_HELP
 				;
 				uifc.input(WIN_MID|WIN_SAV,0,0,""
 					,cfg.qhub[num]->pack,sizeof(cfg.qhub[num]->pack)-1,K_EDIT);
@@ -930,6 +948,7 @@ void qhub_edit(int num)
 					"\n"
 					"This is the command line to use to extract (decompress) QWK packets from\n"
 					"this QWK network hub.\n"
+					SCFG_CMDLINE_SPEC_HELP
 				;
 				uifc.input(WIN_MID|WIN_SAV,0,0,""
 					,cfg.qhub[num]->unpack,sizeof(cfg.qhub[num]->unpack)-1,K_EDIT);
@@ -940,6 +959,7 @@ void qhub_edit(int num)
 					"\n"
 					"This is the command line to use to initiate a call-out to this QWK\n"
 					"network hub.\n"
+					SCFG_CMDLINE_SPEC_HELP
 				;
 				uifc.input(WIN_MID|WIN_SAV,0,0,""
 					,cfg.qhub[num]->call,sizeof(cfg.qhub[num]->call)-1,K_EDIT);
diff --git a/src/sbbs3/scfg/scfgsys.c b/src/sbbs3/scfg/scfgsys.c
index c023a35b31..f2e009333c 100644
--- a/src/sbbs3/scfg/scfgsys.c
+++ b/src/sbbs3/scfg/scfgsys.c
@@ -410,7 +410,7 @@ void sys_cfg(void)
 				uifc.input(WIN_MID,0,0,"System Password",cfg.sys_pass,sizeof(cfg.sys_pass)-1,K_EDIT|K_UPPER);
 				break;
 			case 5:
-				i=1;
+				i = (cfg.sys_misc&SM_PWEDIT) ? 0 : 1;
 				uifc.helpbuf=
 					"`Allow Users to Change Their Password:`\n"
 					"\n"
@@ -428,26 +428,26 @@ void sys_cfg(void)
 					cfg.sys_misc&=~SM_PWEDIT;
 					uifc.changes=1; 
 				}
-				i=0;
+				i = cfg.sys_pwdays ? 0 : 1;
 				uifc.helpbuf=
-					"`Force Periodic Password uifc.changes:`\n"
+					"`Force Periodic New Password:`\n"
 					"\n"
-					"If you want your users to be forced to change their passwords\n"
-					"periodically, select `Yes`.\n"
+					"If you want your users to be forced to have a new password periodically,\n"
+					"select `Yes`.\n"
 				;
 				i=uifc.list(WIN_MID|WIN_SAV,0,0,0,&i,0
-					,"Force Periodic Password Changes",opt);
+					,"Force Periodic New Password",uifcYesNoOpts);
 				if(!i) {
 					ultoa(cfg.sys_pwdays,str,10);
 				uifc.helpbuf=
-					"`Maximum Days Between Password uifc.changes:`\n"
+					"`Maximum Days Between New Passwords:`\n"
 					"\n"
-					"Enter the maximum number of days allowed between password uifc.changes.\n"
+					"Enter the maximum number of days allowed between password changes.\n"
 					"If a user has not voluntarily changed his or her password in this\n"
 					"many days, he or she will be forced to change their password upon\n"
 					"logon.\n"
 				;
-					uifc.input(WIN_MID,0,0,"Maximum Days Between Password Changes"
+					uifc.input(WIN_MID,0,0,"Maximum Days Between New Password"
 						,str,5,K_NUMBER|K_EDIT);
 					cfg.sys_pwdays=atoi(str); 
 				}
@@ -476,7 +476,7 @@ void sys_cfg(void)
 				uifc.helpbuf=
 					"`Maximum Days of Inactivity Before Auto-Deletion:`\n"
 					"\n"
-					"If you want users that haven't logged on in certain period of time to\n"
+					"If you want users that have not logged-on in a certain period of time to\n"
 					"be automatically deleted, set this value to the maximum number of days\n"
 					"of inactivity before the user is deleted. Setting this value to `0`\n"
 					"disables this feature.\n"
@@ -491,9 +491,9 @@ void sys_cfg(void)
 				uifc.helpbuf=
 					"`New User Password:`\n"
 					"\n"
-					"If you want callers to only be able to logon as `New` if they know a\n"
-					"certain password, enter that password here. If you want any caller to\n"
-					"be able to logon as New, leave this option blank.\n"
+					"If you want callers to only be able to logon as `New` ~ only ~ if they know\n"
+					"a secret password, enter that password here.  If you prefer any caller\n"
+					"be able to logon as `New`, leave this option blank.\n"
 				;
 				uifc.input(WIN_MID,0,0,"New User Password",cfg.new_pass,sizeof(cfg.new_pass)-1
 					,K_EDIT|K_UPPER);
@@ -612,7 +612,8 @@ void sys_cfg(void)
 							uifc.helpbuf=
 								"`Allow Sysop Logins:`\n"
 								"\n"
-								"If you want to be able to login with sysop access, set this option to `Yes`.\n"
+								"If you want to be able to login with system operator access, set this\n"
+								"option to `Yes`.\n"
 							;
 							i=uifc.list(WIN_MID|WIN_SAV,0,0,0,&i,0
 								,"Allow Sysop Logins",uifcYesNoOpts);
@@ -952,6 +953,8 @@ void sys_cfg(void)
 								"`New User Exemption Flags:`\n"
 								"\n"
 								"These are the exemptions that are automatically given to new users.\n"
+								"\n"
+								"See `http://wiki.synchro.net/access:exemptions` for details.\n"
 							;
 							uifc.input(WIN_SAV|WIN_MID,0,0,"Exemption Flags",str,26
 								,K_EDIT|K_UPPER|K_ALPHA);
@@ -963,6 +966,8 @@ void sys_cfg(void)
 								"`New User Restriction Flags:`\n"
 								"\n"
 								"These are the restrictions that are automatically given to new users.\n"
+								"\n"
+								"See `http://wiki.synchro.net/access:restrictions` for details.\n"
 							;
 							uifc.input(WIN_SAV|WIN_MID,0,0,"Restriction Flags",str,26
 								,K_EDIT|K_UPPER|K_ALPHA);
@@ -1084,8 +1089,8 @@ void sys_cfg(void)
 								"settings on this menu. The user can then change them to his or her\n"
 								"liking.\n"
 								"\n"
-								"See the Synchronet User Manual for more information on the individual\n"
-								"options available.\n"
+								"See the Synchronet User Manual (`http://synchro.net/docs/user.html`)\n"
+								"for more information on the individual options available.\n"
 							;
 							j=0;
 							k=0;
@@ -1128,7 +1133,7 @@ void sys_cfg(void)
 									,"Auto Hang-up After Xfer"
 									,cfg.new_misc&AUTOHANG ? "Yes":"No");
 								opt[i][0]=0;
-								j=uifc.list(WIN_BOT|WIN_RHT,2,1,0,&j,&k
+								j=uifc.list(WIN_BOT|WIN_RHT|WIN_SAV,2,1,0,&j,&k
 									,"Default Toggle Options",opt);
 								if(j==-1)
 									break;
@@ -1240,7 +1245,7 @@ void sys_cfg(void)
 									,"Color Terminal"
 									,cfg.uq&UQ_COLORTERM ? "Yes":"No");
 								opt[i][0]=0;
-								j=uifc.list(WIN_BOT|WIN_RHT,2,1,0,&j,&k
+								j=uifc.list(WIN_BOT|WIN_RHT|WIN_SAV,2,1,0,&j,&k
 									,"New User Questions",opt);
 								if(j==-1)
 									break;
@@ -1374,7 +1379,7 @@ void sys_cfg(void)
 								"Think of it as a password to guarantee that new users read the text\n"
 								"displayed to them.\n"
 							;
-							uifc.input(WIN_MID,0,0,"New User Magic Word",cfg.new_magic,sizeof(cfg.new_magic)-1
+							uifc.input(WIN_MID|WIN_SAV,0,0,"New User Magic Word",cfg.new_magic,sizeof(cfg.new_magic)-1
 								,K_EDIT|K_UPPER);
 							break;
 						case 1:
@@ -1385,6 +1390,8 @@ void sys_cfg(void)
 								"This directory must be located where `ALL` nodes can access it and\n"
 								"`MUST NOT` be placed on a RAM disk or other volatile media.\n"
 								"\n"
+								"See `http://wiki.synchro.net/dir:data` for details.\n"
+								"\n"
 								"This option allows you to change the location of your data directory.\n"
 							;
 							strcpy(str,cfg.data_dir);
@@ -1399,6 +1406,8 @@ void sys_cfg(void)
 								"`Log File Directory:`\n"
 								"\n"
 								"Log files will be stored in this directory.\n"
+								"\n"
+								"By default, this is set to the same as your Data File directory.\n"
 							;
 							strcpy(str,cfg.logs_dir);
 							if(uifc.input(WIN_MID|WIN_SAV,0,9,"Logs Directory"
@@ -1411,12 +1420,15 @@ void sys_cfg(void)
 							uifc.helpbuf=
 								"`Executable/Module File Directory:`\n"
 								"\n"
-								"The Synchronet exec directory contains executable files that your BBS\n"
-								"executes. This directory does `not` need to be in your DOS search path.\n"
+								"The Synchronet exec directory contains program and script files that the\n"
+								"BBS executes. This directory does `not` need to be in your OS search path.\n"
+								"\n"
 								"If you place programs in this directory for the BBS to execute, you\n"
-								"should place the `%!` abbreviation for the exec directory at the\n"
+								"should place the `%!` specifier for the `exec` directory at the\n"
 								"beginning of the configured command-lines.\n"
 								"\n"
+								"See `http://wiki.synchro.net/dir:exec` for details.\n"
+								"\n"
 								"This option allows you to change the location of your exec directory.\n"
 							;
 							strcpy(str,cfg.exec_dir);
@@ -1431,12 +1443,17 @@ void sys_cfg(void)
 								"`Modified Modules Directory:`\n"
 								"\n"
 								"This optional directory can be used to specify a location where modified\n"
-								"module files are stored. These modified modules will take precedence over\n"
-								"stock modules with the same filename (in the exec directory) and will\n"
-								"not be overwritten by future updates/upgrades.\n"
+								"module files are stored. These modified modules will take precedence\n"
+								"over modules with the same filename (in the `exec` directory) and will\n"
+								"`not be overwritten` by future updates/upgrades.\n"
+								"\n"
+								"Sub-directory searches of this directory also take precedence\n"
+								"(e.g. `mods/load/*` overrides `exec/load/*`).\n"
 								"\n"
-								"If this directory is `blank`, then this feature is not used and all modules\n"
-								"are assumed to be located in the `exec` directory.\n"
+								"If this directory is `blank`, then this feature is not used and all\n"
+								"modules are assumed to be located in the `exec` directory.\n"
+								"\n"
+								"See `http://wiki.synchro.net/dir:mods` for details.\n"
 							;
 							strcpy(str,cfg.mods_dir);
 							if(uifc.input(WIN_MID|WIN_SAV,0,9,"Mods Directory"
@@ -1483,9 +1500,9 @@ void sys_cfg(void)
 								"\n"
 								"This is the monetary value of a credit (How many credits per dollar).\n"
 								"This value should be a power of 2 (1, 2, 4, 8, 16, 32, 64, 128, etc.)\n"
-								"since credits are usually converted by 100 kilobyte (102400) blocks.\n"
-								"To make a dollar worth two megabytes of credits, set this value to\n"
-								"2,097,152 (a megabyte is 1024*1024 or 1048576).\n"
+								"since credits are usually converted in 100 kibibyte (102400) blocks.\n"
+								"To make a dollar worth two mebibytes of credits, set this value to\n"
+								"2,097,152 (a mebibyte is 1024*1024 or 1048576).\n"
 							;
 							ultoa(cfg.cdt_per_dollar,str,10);
 							uifc.input(WIN_MID|WIN_SAV,0,0
@@ -1668,15 +1685,15 @@ void sys_cfg(void)
 						"`Scan Msgs`    Executed when a user reads or scans a message sub-board\n"
 						"`Scan Subs`    Executed when a user scans one or more sub-boards for msgs\n"
 						"`List Msgs`    Executed when a user lists msgs from the msg read prompt\n"
-						"`List Logons`  Executed when a user lists logons (i.e. '-y' for yesterday)\n"
+						"`List Logons`  Executed when a user lists logons ('-y' for yesterday)\n"
 						"`List Nodes`   Executed when a user lists all nodes\n"
 						"`Who's Online` Executed when a user lists the nodes in-use (e.g. `^U`)\n"
 						"`Private Msg`  Executed when a user sends a private node msg (e.g. `^P`)\n"
 						"\n"
 						"`Note:` JavaScript modules take precedence over Baja modules if both exist\n"
-						"in your `exec` or `mods` directories.\n"
+						"      in your `exec` or `mods` directories.\n"
 					;
-					switch(uifc.list(WIN_ACT|WIN_T2B|WIN_RHT,0,0,32,&k,0
+					switch(uifc.list(WIN_ACT|WIN_T2B|WIN_RHT,0,0,40,&k,0
 						,"Loadable Modules",opt)) {
 
 						case -1:
@@ -2060,10 +2077,6 @@ void sys_cfg(void)
 						"user's expiration date may be extended and additional credits may also\n"
 						"be added using quick-validation sets.\n"
 						"\n"
-						"Holding down ~ ALT ~ and one of the number keys (`1-9`) while a user\n"
-						"is online, automatically sets his or user security values to the\n"
-						"quick-validation set for that number key.\n"
-						"\n"
 						"From within the `User Edit` function, a sysop can use the `V`alidate\n"
 						"User command and select from this quick-validation list to change a\n"
 						"user's security values with very few key-strokes.\n"
-- 
GitLab