From 3e1b25e5ce85df490ab330846fa7f98db9c2759b Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Thu, 27 Feb 2003 03:10:27 +0000
Subject: [PATCH] Mods for external programs on Unix: Added seprate
 ExternalTermANSI and ExternalTermDumb (for non-ANSI users) .ini file keys.
 Added configurable dosemu/doscmd path in .ini file (DOSemuPath key).

---
 src/sbbs3/sbbs_ini.c | 23 +++++++++++++++++------
 src/sbbs3/startup.h  |  6 +++---
 src/sbbs3/xtrn.cpp   |  7 +++++--
 3 files changed, 25 insertions(+), 11 deletions(-)

diff --git a/src/sbbs3/sbbs_ini.c b/src/sbbs3/sbbs_ini.c
index 436c00e3a6..b5dcb2aa84 100644
--- a/src/sbbs3/sbbs_ini.c
+++ b/src/sbbs3/sbbs_ini.c
@@ -150,7 +150,7 @@ void sbbs_read_ini(
 	)
 {
 	const char*	section;
-	const char* default_term;
+	const char* default_term_ansi;
 	const char*	default_cgi_temp;
 	char*		ctrl_dir;
 	char		host_name[128];
@@ -183,7 +183,7 @@ void sbbs_read_ini(
 	bbs->rlogin_interface
 		=iniReadIpAddress(fp,section,"RLoginInterface",INADDR_ANY);
 	bbs->rlogin_port
-		=iniReadShortInt(fp,section,"RloginPort",513);
+		=iniReadShortInt(fp,section,"RLoginPort",513);
 
 	bbs->first_node
 		=iniReadShortInt(fp,section,"FirstNode",1);
@@ -197,16 +197,27 @@ void sbbs_read_ini(
 
 	/* Set default terminal type to "stock" termcap closest to "ansi-bbs" */
 #if defined(__FreeBSD__)
-	default_term="cons25";
+	default_term_ansi="cons25";
 #else
-	default_term="pc3";
+	default_term_ansi="pc3";
 #endif
 
 	SAFECOPY(bbs->host_name
 		,iniReadString(fp,section,"HostName",host_name));
 
-	SAFECOPY(bbs->xtrn_term
-		,iniReadString(fp,section,"ExternalTerm",default_term));
+	SAFECOPY(bbs->xtrn_term_ansi
+		,iniReadString(fp,section,"ExternalTermANSI",default_term_ansi));
+	SAFECOPY(bbs->xtrn_term_dumb
+		,iniReadString(fp,section,"ExternalTermDumb","dumb"));
+
+	SAFECOPY(bbs->dosemu_path
+		,iniReadString(fp,section,"DOSemuPath"
+#if defined(__FreeBSD__)
+		,"/usr/bin/doscmd"
+#else
+		,"/usr/bin/dosemu"
+#endif
+		);
 
 	SAFECOPY(bbs->answer_sound
 		,iniReadString(fp,section,"AnswerSound",nulstr));
diff --git a/src/sbbs3/startup.h b/src/sbbs3/startup.h
index fe0c832439..c945190a38 100644
--- a/src/sbbs3/startup.h
+++ b/src/sbbs3/startup.h
@@ -80,7 +80,7 @@ typedef struct {
     void	(*reserved_fptr2)(void);
     void	(*reserved_fptr1)(void);
     char    ctrl_dir[128];
-    char	reserved_path8[128];
+    char	dosemu_path[128];
     char	reserved_path7[128];
     char	reserved_path6[128];
     char	reserved_path5[128];
@@ -88,8 +88,8 @@ typedef struct {
     char	reserved_path3[128];
 	char	answer_sound[128];
 	char	hangup_sound[128];
-	char	xtrn_term[32];			/* external terminal type (e.g. "ansi-bbs") */
-	char	reserved_str2[32];
+	char	xtrn_term_ansi[32];		/* external ANSI terminal type (e.g. "ansi-bbs") */
+	char	xtrn_term_dumb[32];		/* external dumb terminal type (e.g. "dumb") */
     char	reserved_str1[64];
     char	host_name[128];
 	BOOL	recycle_now;
diff --git a/src/sbbs3/xtrn.cpp b/src/sbbs3/xtrn.cpp
index 9e26f900c9..5fb56b22cf 100644
--- a/src/sbbs3/xtrn.cpp
+++ b/src/sbbs3/xtrn.cpp
@@ -1166,7 +1166,7 @@ int sbbs_t::external(char* cmdline, long mode, char* startup_dir)
 
 		fclose(doscmdrc);
 		SAFECOPY(str,cmdline);
-		sprintf(cmdline,"/usr/bin/doscmd -F %s",str);
+		sprintf(cmdline,"%s -F %s",startup->dosemu_path,str);
 #endif
 	}
 
@@ -1222,7 +1222,10 @@ int sbbs_t::external(char* cmdline, long mode, char* startup_dir)
 		sigprocmask(SIG_UNBLOCK,&sigs,NULL);
 		if(!(mode&EX_BIN))  {
 			static char	term_env[256];
-			sprintf(term_env,"TERM=%s",startup->xtrn_term);
+			if(useron.misc&ANSI)
+				sprintf(term_env,"TERM=%s",startup->xtrn_term_ansi);
+			else
+				sprintf(term_env,"TERM=%s",startup->xtrn_term_dumb);
 			putenv(term_env);
 		}
 #ifdef __FreeBSD__
-- 
GitLab