diff --git a/ctrl/dosemu1.conf b/ctrl/dosemu1.conf new file mode 100644 index 0000000000000000000000000000000000000000..811ae914c64f82e620f87b5a64cf20fba650d27e --- /dev/null +++ b/ctrl/dosemu1.conf @@ -0,0 +1,20 @@ +$_cpu = "80486" +$_cpu_emu = "fullsim" +$_floppy_a = "" +$_cdrom = "" +$_xms = (1024) +$_ems = (1024) +$_ems_frame = (0xe000) +$_external_char_set = "cp437" +$_internal_char_set = "cp437" +$_term_updfreq = (8) +$_layout = "us" +$_rawkeyboard = (auto) +$_mouse_internal = (on) +$_mouse_dev = "" +$_joy_device = "" +$_lpt1 = "" +$_lp2 = "" +$_speaker = "" +$_sound = (off) +$_sb_dsp = "" diff --git a/ctrl/sbbs.ini b/ctrl/sbbs.ini index b83519c86805740880cea7947befd6ee790a052f..e1f4967a11017628b5d3d825ae3bd411e866ed93 100644 --- a/ctrl/sbbs.ini +++ b/ctrl/sbbs.ini @@ -98,8 +98,9 @@ ; Must install install/termcap or terminfo to use the following TERM setting: ; ExternalTermANSI = ansi-bbs ExternalTermDumb = dumb -; To change the default dosemu/doscmd path, uncomment and set: -; DOSemuPath = +; To setup the dosemu cmd path and ini: +;DOSemuPath = /usr/bin/dosemu.bin +;DOSemuConfPath = /etc/dosemu/dosemu.conf ; At what size to send the current output buffer regardless of timeout ; ie: Send output whenever there are at least this many bytes waiting. diff --git a/install/GNUmakefile b/install/GNUmakefile index 7b6abd6a4ce375d8e5642c4e61e1938533cfeff0..e10ce423e64b9b4aa82445d4f3296df610c4dc5a 100644 --- a/install/GNUmakefile +++ b/install/GNUmakefile @@ -28,7 +28,6 @@ # NO_X = Don't include build conio library (ciolib) for X # NO_GTK = Don't build GTK-based sysop tools # X_PATH = /path/to/X (if not /usr/X11R6) -# USE_DOSEMU = Set to 1 to enable Linux-DOSEMU support # the magic bit: MKFLAGS += MAKEFLAGS= @@ -131,10 +130,6 @@ ifdef X_PATH MKFLAGS += X_PATH=$(X_PATH) endif -ifdef USE_DOSEMU - MKFLAGS += USE_DOSEMU=$(USE_DOSEMU) -endif - # Check for GLADE ifndef NO_GTK ifeq ($(shell pkg-config libglade-2.0 --exists && echo YES),YES) diff --git a/src/sbbs3/CMakeLists.txt b/src/sbbs3/CMakeLists.txt index 88947d97ea87867411fabdda0c742540e437b116..a475dc78542ba9ff94e1b5baaad1a372edd5db61 100644 --- a/src/sbbs3/CMakeLists.txt +++ b/src/sbbs3/CMakeLists.txt @@ -5,11 +5,6 @@ cmake_minimum_required(VERSION 2.8.11) INCLUDE (../build/SynchronetMacros.cmake) INCLUDE (CheckFunctionExists) -if(UNIX) - set(SBBS_USE_DOSEMU FALSE - CACHE BOOL "Set if you intend on using dosemu on Linux" - ) -endif() set(SBBS_BUILD_JSDOCS FALSE CACHE INTERNAL "DEVELOPER ONLY - Build only to run jsdocs.js (not a BBS)" ) diff --git a/src/sbbs3/GNUmakefile b/src/sbbs3/GNUmakefile index b5446d7b7580efefb4df80e7601df0765e8ba507..6a7f6b068ae32e9b6563c16e78d44055276e309c 100644 --- a/src/sbbs3/GNUmakefile +++ b/src/sbbs3/GNUmakefile @@ -11,8 +11,6 @@ # Optional build targets: dlls, utils, mono, all (default) # ######################################################################### -# $Id: GNUmakefile,v 1.248 2020/04/03 19:54:31 rswindell Exp $ - PWD := $(shell pwd) SRC_ROOT ?= ${PWD}/.. include $(SRC_ROOT)/build/Common.gmake @@ -43,10 +41,6 @@ ifdef PREFIX CFLAGS += -DPREFIX=$(PREFIX) endif -ifdef USE_DOSEMU - CFLAGS += -DUSE_DOSEMU -endif - ifdef DONT_BLAME_SYNCHRONET CFLAGS += -DDONT_BLAME_SYNCHRONET endif diff --git a/src/sbbs3/chk_ar.cpp b/src/sbbs3/chk_ar.cpp index 88842c7a03ebd0af0f770366c6e0fb9f95976f7e..3cf9510822736f3c42a5f4da163e0a2cbe77fdfe 100644 --- a/src/sbbs3/chk_ar.cpp +++ b/src/sbbs3/chk_ar.cpp @@ -223,7 +223,7 @@ bool sbbs_t::ar_exp(const uchar **ptrptr, user_t* user, client_t* client) result=_not; if(startup->options&BBS_OPT_NO_DOS) break; - #if defined(_WIN32) || (defined(__linux__) && defined(USE_DOSEMU)) || defined(__FreeBSD__) + #if defined(_WIN32) || defined(__linux__) || defined(__FreeBSD__) result=!_not; #endif break; diff --git a/src/sbbs3/install/sbbsinst.c b/src/sbbs3/install/sbbsinst.c index 60fa9a9d79c35b0b52cb925bf207e1d1f2575331..9cdb03536f38491bcf04a58d8c3177c81c8bbd0d 100644 --- a/src/sbbs3/install/sbbsinst.c +++ b/src/sbbs3/install/sbbsinst.c @@ -121,9 +121,6 @@ struct { struct utsname name; char sbbsuser[9]; /* Historical UName limit of 8 chars */ char sbbsgroup[17]; /* Can't find historical limit for group names */ -#ifdef __linux__ - BOOL use_dosemu; -#endif } params; /* Build parameters */ #define MAKEFILE "/tmp/SBBSmakefile" @@ -230,9 +227,6 @@ int main(int argc, char **argv) SAFECOPY(params.sbbsuser,p); if((p=getenv("GROUP"))!=NULL) SAFECOPY(params.sbbsgroup,p); -#ifdef __linux__ - params.use_dosemu=FALSE; -#endif sscanf("$Revision: 1.100 $", "%*s %s", revision); umask(077); @@ -380,9 +374,7 @@ int main(int argc, char **argv) sprintf(mopt[i++],"%-27.27s%s","Make Command-line",params.make_cmdline); sprintf(mopt[i++],"%-27.27s%s","File Owner",params.sbbsuser); sprintf(mopt[i++],"%-27.27s%s","File Group",params.sbbsgroup); -#ifdef __linux__ - sprintf(mopt[i++],"%-27.27s%s","Integrate DOSEmu support",params.use_dosemu?"Yes":"No"); -#endif + sprintf(mopt[i++],"%-27.27s","Start Installation..."); mopt[i][0]=0; @@ -488,26 +480,8 @@ int main(int argc, char **argv) "\n"; uifc.input(WIN_MID,0,0,"",params.sbbsgroup,32,K_EDIT); break; -#ifdef __linux__ - case 11: - strcpy(opt[0],"Yes"); - strcpy(opt[1],"No"); - opt[2][0]=0; - i=params.use_dosemu?0:1; - uifc.helpbuf= "`Include DOSEmu Support`\n" - "\nToDo: Add help."; - i=uifc.list(WIN_MID|WIN_SAV,0,0,0,&i,0 - ,"Integrate DOSEmu support into Synchronet?",opt); - if(!i) - params.use_dosemu=TRUE; - else if(i==1) - params.use_dosemu=FALSE; - i=0; - break; - case 12: -#else + case 11: -#endif install_sbbs(distlist[dist],distlist[dist]->type==LOCAL_FILE?NULL:distlist[dist]->servers[server]); bail(0); break; @@ -754,11 +728,6 @@ void install_sbbs(dist_t *dist,struct server_ent_t *server) { sprintf(sbbsgroup,"SBBSGROUP=%s",params.sbbsgroup); putenv(sbbsgroup); } -#ifdef __linux__ - if(params.use_dosemu==TRUE) { - putenv("USE_DOSEMU=1"); - } -#endif if(params.usebcc) putenv("bcc=1"); diff --git a/src/sbbs3/sbbs_ini.c b/src/sbbs3/sbbs_ini.c index 0454ec9566fd1b7d286fcf3a209b98636ca787f8..f42808d34ee226f9c6725e3e6f40707f6d5e693f 100644 --- a/src/sbbs3/sbbs_ini.c +++ b/src/sbbs3/sbbs_ini.c @@ -251,6 +251,7 @@ void sbbs_read_ini( const char* section; const char* default_term_ansi; const char* default_dosemu_path; + const char* default_dosemuconf_path; char value[INI_MAX_VALUE_LEN]; str_list_t list; global_startup_t global_buf; @@ -366,10 +367,14 @@ void sbbs_read_ini( default_dosemu_path="/usr/local/bin/doscmd"; #else default_dosemu_path="/usr/bin/dosemu.bin"; + default_dosemuconf_path=""; #endif + bbs->usedosemu=iniGetBool(list,section,"UseDOSemu",TRUE); SAFECOPY(bbs->dosemu_path ,iniGetString(list,section,"DOSemuPath",default_dosemu_path,value)); + SAFECOPY(bbs->dosemuconf_path + ,iniGetString(list,section,"DOSemuConfPath",default_dosemuconf_path,value)); SAFECOPY(bbs->answer_sound ,iniGetString(list,section,strAnswerSound,nulstr,value)); @@ -839,7 +844,10 @@ BOOL sbbs_write_ini( break; if(!iniSetString(lp,section,"DOSemuPath",bbs->dosemu_path,&style)) break; - + if(!iniSetString(lp,section,"DOSemuConfPath",bbs->dosemuconf_path,&style)) + break; + if(!iniSetBool(lp,section,"UseDOSemu",bbs->usedosemu,&style)) + break; if(!iniSetString(lp,section,strAnswerSound,bbs->answer_sound,&style)) break; if(!iniSetString(lp,section,strHangupSound,bbs->hangup_sound,&style)) diff --git a/src/sbbs3/startup.h b/src/sbbs3/startup.h index ad869edfe8adf0e48dceca8fe219877d4ef4c1db..e4febaaa63fdb9c4628f96c14908248804de37dc 100644 --- a/src/sbbs3/startup.h +++ b/src/sbbs3/startup.h @@ -113,12 +113,14 @@ typedef struct { /* Paths */ char ctrl_dir[128]; char dosemu_path[128]; + char dosemuconf_path[128]; char temp_dir[128]; char answer_sound[128]; char hangup_sound[128]; char ini_fname[128]; /* Miscellaneous */ + BOOL usedosemu; 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 host_name[128]; diff --git a/src/sbbs3/userdat.c b/src/sbbs3/userdat.c index 1ffd3cd7cab783f7b5c538a18605fa5d1b835b16..883b5d7c1e6cb965f4116173f19f7ad8371264a3 100644 --- a/src/sbbs3/userdat.c +++ b/src/sbbs3/userdat.c @@ -1725,7 +1725,7 @@ static BOOL ar_exp(scfg_t* cfg, uchar **ptrptr, user_t* user, client_t* client) #endif break; case AR_DOS: - #if defined(_WIN32) || (defined(__linux__) && defined(USE_DOSEMU)) || defined(__FreeBSD__) + #if defined(_WIN32) || defined(__linux__) || defined(__FreeBSD__) result=!not; #else result=not; diff --git a/src/sbbs3/xtrn.cpp b/src/sbbs3/xtrn.cpp index bb057f967ee020f2fb597b1e84f47755353f96f8..eb044325be403221e6c64e43d8e2b5c1e0cbf84a 100644 --- a/src/sbbs3/xtrn.cpp +++ b/src/sbbs3/xtrn.cpp @@ -1174,7 +1174,7 @@ int sbbs_t::external(const char* cmdline, long mode, const char* startup_dir) SAFECOPY(str,fullcmdline); sprintf(fullcmdline,"%s -F %s",startup->dosemu_path,str); -#elif defined(__linux__) && defined(USE_DOSEMU) +#elif defined(__linux__) /* dosemu integration -- originally by Ryan Underwood, <nemesis @ icequake.net> */ @@ -1250,6 +1250,27 @@ int sbbs_t::external(const char* cmdline, long mode, const char* startup_dir) p=lastchar(nodedir_dos); if (*p=='\\') *p=0; + /* must have sbbs.ini bbs useDOSemu=1 (or empty), cannot be =0 */ + if (!startup->usedosemu) { + lprintf((mode&EX_OFFLINE) ? LOG_ERR : LOG_WARNING, "DOSEMU disabled, program not run"); + bprintf("Sorry, DOSEMU is not supported on this node.\r\n"); + return -1; + } + + /* must have sbbs.ini bbs DOSemuPath set to valid path */ + SAFECOPY(dosemubinloc,(cmdstr(startup->dosemu_path,nulstr,nulstr,tok))); + if (dosemubinloc[0] == '\0') { + lprintf((mode&EX_OFFLINE) ? LOG_ERR : LOG_WARNING, "DOSEMU invalid DOSEmuPath, program not run"); + bprintf("Sorry, DOSEMU is not supported on this node.\r\n"); + return -1; + } + + if (!fexist(dosemubinloc)) { + lprintf((mode&EX_OFFLINE) ? LOG_ERR : LOG_WARNING, "DOSEMU not found: %s", dosemubinloc); + bprintf("Sorry, DOSEMU is not supported on this node.\r\n"); + return -1; + } + /* check for existence of a dosemu.conf in the door directory. * It is a good idea to be able to use separate configs for each * door. @@ -1258,9 +1279,8 @@ int sbbs_t::external(const char* cmdline, long mode, const char* startup_dir) */ sprintf(str,"%sdosemu.conf",startup_dir); if (!fexist(str)) { - /* If we can't find it in the door dir, look for a global one - * in the ctrl dir. */ - sprintf(str,"%sdosemu.conf",cfg.ctrl_dir); + /* If we can't find it in the door dir, look for the configured one */ + SAFECOPY(str,(cmdstr(startup->dosemuconf_path,nulstr,nulstr,tok))); if (!fexist(str)) { /* If we couldn't find either, try for the system one, then * error out. */ @@ -1396,18 +1416,6 @@ int sbbs_t::external(const char* cmdline, long mode, const char* startup_dir) mode |= EX_STDIO; - /* See if we have the dosemu link in the door's dir. If so, use the dosemu - * that it points to as our command to execute. If not, use DOSemuPath. - */ - - sprintf(str,"%sdosemu.bin",startup_dir); - if (!fexist(str)) { - SAFECOPY(dosemubinloc,(cmdstr(startup->dosemu_path,nulstr,nulstr,tok))); - } - else { - SAFECOPY(dosemubinloc,str); - } - /* Attempt to keep dosemu from prompting for a disclaimer. */ sprintf(str, "%s/.dosemu", cfg.ctrl_dir); @@ -1928,7 +1936,7 @@ char* sbbs_t::cmdstr(const char *instr, const char *fpath, const char *fspec, ch strncat(cmd,ultoa((ulong)cur_cps*10,str,10), avail); break; case 'F': /* File path */ -#if defined(__linux__) && defined(USE_DOSEMU) +#if defined(__linux__) if(!native && strncmp(fpath, cfg.node_dir, strlen(cfg.node_dir)) == 0) { strncat(cmd, DOSEMU_NODE_DIR, avail); strncat(cmd, fpath + strlen(cfg.node_dir), avail); @@ -1938,7 +1946,7 @@ char* sbbs_t::cmdstr(const char *instr, const char *fpath, const char *fspec, ch strncat(cmd,QUOTED_STRING(instr[i],fpath,str,sizeof(str)), avail); break; case 'G': /* Temp directory */ -#if defined(__linux__) && defined(USE_DOSEMU) +#if defined(__linux__) if(!native) strncat(cmd, DOSEMU_TEMP_DIR, avail); else @@ -1952,7 +1960,7 @@ char* sbbs_t::cmdstr(const char *instr, const char *fpath, const char *fspec, ch strncat(cmd,cid, avail); break; case 'J': -#if defined(__linux__) && defined(USE_DOSEMU) +#if defined(__linux__) if(!native) strncat(cmd, DOSEMU_DATA_DIR, avail); else @@ -1960,7 +1968,7 @@ char* sbbs_t::cmdstr(const char *instr, const char *fpath, const char *fspec, ch strncat(cmd,cfg.data_dir, avail); break; case 'K': -#if defined(__linux__) && defined(USE_DOSEMU) +#if defined(__linux__) if(!native) strncat(cmd, DOSEMU_CTRL_DIR, avail); else @@ -1974,7 +1982,7 @@ char* sbbs_t::cmdstr(const char *instr, const char *fpath, const char *fspec, ch strncat(cmd,ultoa(useron.min,str,10), avail); break; case 'N': /* Node Directory (same as SBBSNODE environment var) */ -#if defined(__linux__) && defined(USE_DOSEMU) +#if defined(__linux__) if(!native) strncat(cmd, DOSEMU_NODE_DIR, avail); else @@ -2019,7 +2027,7 @@ char* sbbs_t::cmdstr(const char *instr, const char *fpath, const char *fspec, ch strncat(cmd,comspec, avail); break; case 'Z': -#if defined(__linux__) && defined(USE_DOSEMU) +#if defined(__linux__) if(!native) strncat(cmd, DOSEMU_TEXT_DIR, avail); else @@ -2037,7 +2045,7 @@ char* sbbs_t::cmdstr(const char *instr, const char *fpath, const char *fspec, ch #endif break; case '!': /* EXEC Directory */ -#if defined(__linux__) && defined(USE_DOSEMU) +#if defined(__linux__) if(!native) strncat(cmd, DOSEMU_EXEC_DIR, avail); else diff --git a/src/sbbs3/xtrn_sec.cpp b/src/sbbs3/xtrn_sec.cpp index 33cc509d4d54b3b5fb4738cfd54fb188850c44c8..60afb07da64bd285cc9eafbc6b26c1674dd03d5d 100644 --- a/src/sbbs3/xtrn_sec.cpp +++ b/src/sbbs3/xtrn_sec.cpp @@ -1594,7 +1594,7 @@ bool sbbs_t::exec_xtrn(uint xtrnnum) char drop_file[MAX_PATH + 1]; char startup_dir[MAX_PATH + 1]; -#if defined(__linux__) && defined(USE_DOSEMU) +#if defined(__linux__) if(cfg.xtrn[xtrnnum]->cmd[0] != '?' && cfg.xtrn[xtrnnum]->cmd[0] != '*' && !(cfg.xtrn[xtrnnum]->misc & XTRN_NATIVE)) { SAFEPRINTF2(startup_dir, "%s\\%s", DOSEMU_XTRN_DRIVE, getdirname(cfg.xtrn[xtrnnum]->path)); backslash(startup_dir);