diff --git a/src/sbbs3/depends.mk b/src/sbbs3/depends.mk
new file mode 100644
index 0000000000000000000000000000000000000000..55c2e14bc8182931095255b9a18d91be5212c4c5
--- /dev/null
+++ b/src/sbbs3/depends.mk
@@ -0,0 +1,90 @@
+# depends.mk
+
+# Make 'include file' defining dependencies for Synchronet SBBS.DLL
+
+# $Id$
+
+# LIBODIR, EXEODIR, SLASH, and OFILE must be pre-defined
+
+$(LIBODIR)$(SLASH)answer.$(OFILE):		$(HEADERS)
+$(LIBODIR)$(SLASH)ars.$(OFILE):			$(HEADERS) ars_defs.h
+$(LIBODIR)$(SLASH)bat_xfer.$(OFILE):	$(HEADERS)
+$(LIBODIR)$(SLASH)bulkmail.$(OFILE):	$(HEADERS)
+$(LIBODIR)$(SLASH)chk_ar.$(OFILE):		$(HEADERS) ars_defs.h
+$(LIBODIR)$(SLASH)atcodes.$(OFILE):		$(HEADERS) cmdshell.h
+$(LIBODIR)$(SLASH)chat.$(OFILE):		$(HEADERS)
+$(LIBODIR)$(SLASH)comio.$(OFILE):		$(HEADERS)
+$(LIBODIR)$(SLASH)con_hi.$(OFILE):		$(HEADERS)
+$(LIBODIR)$(SLASH)con_out.$(OFILE):		$(HEADERS)
+$(LIBODIR)$(SLASH)data.$(OFILE):		$(HEADERS)
+$(LIBODIR)$(SLASH)data_ovl.$(OFILE):	$(HEADERS)
+$(LIBODIR)$(SLASH)date_str.$(OFILE):	$(HEADERS)
+$(LIBODIR)$(SLASH)download.$(OFILE):	$(HEADERS)
+$(LIBODIR)$(SLASH)email.$(OFILE):		$(HEADERS) cmdshell.h
+$(LIBODIR)$(SLASH)exec.$(OFILE):		$(HEADERS) cmdshell.h
+$(LIBODIR)$(SLASH)execfile.$(OFILE):	$(HEADERS) cmdshell.h
+$(LIBODIR)$(SLASH)execfunc.$(OFILE):	$(HEADERS) cmdshell.h
+$(LIBODIR)$(SLASH)execmisc.$(OFILE):	$(HEADERS) cmdshell.h
+$(LIBODIR)$(SLASH)execnet.$(OFILE):	$(HEADERS) cmdshell.h
+$(LIBODIR)$(SLASH)execmsg.$(OFILE):		$(HEADERS) cmdshell.h
+$(LIBODIR)$(SLASH)fido.$(OFILE):		$(HEADERS)
+$(LIBODIR)$(SLASH)file.$(OFILE):      	$(HEADERS)
+$(LIBODIR)$(SLASH)filedat.$(OFILE):		$(HEADERS)
+$(LIBODIR)$(SLASH)getkey.$(OFILE):    	$(HEADERS)
+$(LIBODIR)$(SLASH)getmsg.$(OFILE):    	$(HEADERS)
+$(LIBODIR)$(SLASH)getnode.$(OFILE):		$(HEADERS)
+$(LIBODIR)$(SLASH)getstr.$(OFILE):    	$(HEADERS)
+$(LIBODIR)$(SLASH)ident.$(OFILE):    	$(HEADERS) ident.h
+$(LIBODIR)$(SLASH)inkey.$(OFILE):    	$(HEADERS)
+$(LIBODIR)$(SLASH)listfile.$(OFILE):	$(HEADERS)
+$(LIBODIR)$(SLASH)load_cfg.$(OFILE):	$(HEADERS)
+$(LIBODIR)$(SLASH)logfile.$(OFILE):		$(HEADERS)
+$(LIBODIR)$(SLASH)login.$(OFILE):		$(HEADERS)
+$(LIBODIR)$(SLASH)logon.$(OFILE):    	$(HEADERS) cmdshell.h
+$(LIBODIR)$(SLASH)logout.$(OFILE):		$(HEADERS)
+$(LIBODIR)$(SLASH)lzh.$(OFILE):			$(HEADERS)
+$(LIBODIR)$(SLASH)mail.$(OFILE):	    $(HEADERS)
+$(LIBODIR)$(SLASH)main.$(OFILE):		$(HEADERS) cmdshell.h ident.h
+$(LIBODIR)$(SLASH)misc.$(OFILE):		$(HEADERS) ars_defs.h crc32.h
+$(LIBODIR)$(SLASH)msgtoqwk.$(OFILE):	$(HEADERS) qwk.h
+$(LIBODIR)$(SLASH)netmail.$(OFILE):		$(HEADERS) qwk.h
+$(LIBODIR)$(SLASH)newuser.$(OFILE):		$(HEADERS)
+$(LIBODIR)$(SLASH)pack_qwk.$(OFILE):	$(HEADERS) qwk.h post.h
+$(LIBODIR)$(SLASH)pack_rep.$(OFILE):	$(HEADERS) qwk.h post.h
+$(LIBODIR)$(SLASH)postmsg.$(OFILE):		$(HEADERS)
+$(LIBODIR)$(SLASH)prntfile.$(OFILE):	$(HEADERS)
+$(LIBODIR)$(SLASH)putmsg.$(OFILE):		$(HEADERS)
+$(LIBODIR)$(SLASH)putnode.$(OFILE):		$(HEADERS)
+$(LIBODIR)$(SLASH)qwk.$(OFILE):			$(HEADERS) qwk.h post.h
+$(LIBODIR)$(SLASH)qwktomsg.$(OFILE):	$(HEADERS) qwk.h
+$(LIBODIR)$(SLASH)readmail.$(OFILE):	$(HEADERS)
+$(LIBODIR)$(SLASH)readmsgs.$(OFILE):	$(HEADERS) post.h
+$(LIBODIR)$(SLASH)ringbuf.$(OFILE):		$(HEADERS)
+$(LIBODIR)$(SLASH)scandirs.$(OFILE):	$(HEADERS)
+$(LIBODIR)$(SLASH)scansubs.$(OFILE):	$(HEADERS)
+$(LIBODIR)$(SLASH)scfglib1.$(OFILE):	$(HEADERS) scfglib.h
+$(LIBODIR)$(SLASH)scfglib2.$(OFILE):	$(HEADERS) scfglib.h
+$(LIBODIR)$(SLASH)smblib.$(OFILE):    	smblib.h smbdefs.h
+$(EXEODIR)$(SLASH)smblib.$(OFILE):    	smblib.h smbdefs.h
+$(LIBODIR)$(SLASH)smbtxt.$(OFILE):   	smblib.h lzh.h
+$(EXEODIR)$(SLASH)smbtxt.$(OFILE):   	smblib.h lzh.h
+$(LIBODIR)$(SLASH)smbwrap.$(OFILE):   	smbwrap.h
+$(EXEODIR)$(SLASH)smbwrap.$(OFILE):   	smbwrap.h
+$(LIBODIR)$(SLASH)sortdir.$(OFILE):		$(HEADERS)
+$(LIBODIR)$(SLASH)str.$(OFILE):			$(HEADERS)
+$(LIBODIR)$(SLASH)telgate.$(OFILE):		$(HEADERS)
+$(LIBODIR)$(SLASH)telmet.$(OFILE):		$(HEADERS)
+$(LIBODIR)$(SLASH)text_sec.$(OFILE):	$(HEADERS)
+$(LIBODIR)$(SLASH)tmp_xfer.$(OFILE):	$(HEADERS)
+$(LIBODIR)$(SLASH)un_qwk.$(OFILE):		$(HEADERS) qwk.h
+$(LIBODIR)$(SLASH)un_rep.$(OFILE):		$(HEADERS) qwk.h
+$(LIBODIR)$(SLASH)upload.$(OFILE):		$(HEADERS)
+$(LIBODIR)$(SLASH)userdat.$(OFILE):		$(HEADERS)
+$(LIBODIR)$(SLASH)useredit.$(OFILE):	$(HEADERS)
+$(LIBODIR)$(SLASH)getuser.$(OFILE):		$(HEADERS)
+$(LIBODIR)$(SLASH)ver.$(OFILE):			$(HEADERS) $(OBJS)
+$(LIBODIR)$(SLASH)viewfile.$(OFILE):	$(HEADERS)
+$(LIBODIR)$(SLASH)wrappers.$(OFILE):	$(HEADERS)
+$(LIBODIR)$(SLASH)writemsg.$(OFILE):	$(HEADERS)
+$(LIBODIR)$(SLASH)xtrn.$(OFILE):		$(HEADERS) cmdshell.h
+$(LIBODIR)$(SLASH)xtrn_sec.$(OFILE):	$(HEADERS)
diff --git a/src/sbbs3/headers.mk b/src/sbbs3/headers.mk
new file mode 100644
index 0000000000000000000000000000000000000000..0fc7cccda08987e88f04b4b3db1dcc6bb369a0c2
--- /dev/null
+++ b/src/sbbs3/headers.mk
@@ -0,0 +1,9 @@
+# headers.mk
+
+# Make 'include file' for building Synchronet DLLs 
+# Used with GNU and Borland compilers
+
+# $Id$
+
+HEADERS =	sbbs.h sbbsdefs.h sbbswrap.h sbbsinet.h scfgdefs.h gen_defs.h \
+			nodedefs.h smblib.h smbdefs.h text.h
diff --git a/src/sbbs3/objects.mk b/src/sbbs3/objects.mk
new file mode 100644
index 0000000000000000000000000000000000000000..f0309d7910fe9a9df5bb54d202f56cb4313c5d03
--- /dev/null
+++ b/src/sbbs3/objects.mk
@@ -0,0 +1,100 @@
+# objects.mk
+
+# Make 'include file' listing object files for SBBS.DLL
+
+# $Id$
+
+# LIBODIR, SLASH, and OFILE must be pre-defined
+
+OBJS	=	$(LIBODIR)$(SLASH)ansiterm.$(OFILE)\
+			$(LIBODIR)$(SLASH)answer.$(OFILE)\
+			$(LIBODIR)$(SLASH)ars.$(OFILE)\
+			$(LIBODIR)$(SLASH)atcodes.$(OFILE)\
+			$(LIBODIR)$(SLASH)bat_xfer.$(OFILE)\
+			$(LIBODIR)$(SLASH)bulkmail.$(OFILE)\
+			$(LIBODIR)$(SLASH)chat.$(OFILE)\
+			$(LIBODIR)$(SLASH)chk_ar.$(OFILE)\
+			$(LIBODIR)$(SLASH)con_hi.$(OFILE)\
+			$(LIBODIR)$(SLASH)con_out.$(OFILE)\
+			$(LIBODIR)$(SLASH)crc32.$(OFILE)\
+			$(LIBODIR)$(SLASH)data.$(OFILE)\
+			$(LIBODIR)$(SLASH)data_ovl.$(OFILE)\
+			$(LIBODIR)$(SLASH)date_str.$(OFILE)\
+			$(LIBODIR)$(SLASH)download.$(OFILE)\
+			$(LIBODIR)$(SLASH)email.$(OFILE)\
+			$(LIBODIR)$(SLASH)exec.$(OFILE)\
+			$(LIBODIR)$(SLASH)execfile.$(OFILE)\
+			$(LIBODIR)$(SLASH)execfunc.$(OFILE)\
+			$(LIBODIR)$(SLASH)execmisc.$(OFILE)\
+			$(LIBODIR)$(SLASH)execmsg.$(OFILE)\
+			$(LIBODIR)$(SLASH)execnet.$(OFILE)\
+			$(LIBODIR)$(SLASH)fido.$(OFILE)\
+			$(LIBODIR)$(SLASH)file.$(OFILE)\
+			$(LIBODIR)$(SLASH)filedat.$(OFILE)\
+			$(LIBODIR)$(SLASH)getkey.$(OFILE)\
+			$(LIBODIR)$(SLASH)getmsg.$(OFILE)\
+			$(LIBODIR)$(SLASH)getnode.$(OFILE)\
+			$(LIBODIR)$(SLASH)getstr.$(OFILE)\
+			$(LIBODIR)$(SLASH)inkey.$(OFILE)\
+			$(LIBODIR)$(SLASH)ident.$(OFILE)\
+			$(LIBODIR)$(SLASH)js_bbs.$(OFILE)\
+			$(LIBODIR)$(SLASH)js_client.$(OFILE)\
+			$(LIBODIR)$(SLASH)js_console.$(OFILE)\
+			$(LIBODIR)$(SLASH)js_file.$(OFILE)\
+			$(LIBODIR)$(SLASH)js_file_area.$(OFILE)\
+			$(LIBODIR)$(SLASH)js_global.$(OFILE)\
+			$(LIBODIR)$(SLASH)js_msg_area.$(OFILE)\
+			$(LIBODIR)$(SLASH)js_msgbase.$(OFILE)\
+			$(LIBODIR)$(SLASH)js_socket.$(OFILE)\
+			$(LIBODIR)$(SLASH)js_system.$(OFILE)\
+			$(LIBODIR)$(SLASH)js_user.$(OFILE)\
+			$(LIBODIR)$(SLASH)listfile.$(OFILE)\
+			$(LIBODIR)$(SLASH)load_cfg.$(OFILE)\
+			$(LIBODIR)$(SLASH)logfile.$(OFILE)\
+			$(LIBODIR)$(SLASH)login.$(OFILE)\
+			$(LIBODIR)$(SLASH)logon.$(OFILE)\
+			$(LIBODIR)$(SLASH)logout.$(OFILE)\
+			$(LIBODIR)$(SLASH)lzh.$(OFILE)\
+			$(LIBODIR)$(SLASH)mail.$(OFILE)\
+			$(LIBODIR)$(SLASH)main.$(OFILE)\
+			$(LIBODIR)$(SLASH)misc.$(OFILE)\
+			$(LIBODIR)$(SLASH)msgtoqwk.$(OFILE)\
+			$(LIBODIR)$(SLASH)netmail.$(OFILE)\
+			$(LIBODIR)$(SLASH)newuser.$(OFILE)\
+			$(LIBODIR)$(SLASH)pack_qwk.$(OFILE)\
+			$(LIBODIR)$(SLASH)pack_rep.$(OFILE)\
+			$(LIBODIR)$(SLASH)postmsg.$(OFILE)\
+			$(LIBODIR)$(SLASH)prntfile.$(OFILE)\
+			$(LIBODIR)$(SLASH)putmsg.$(OFILE)\
+			$(LIBODIR)$(SLASH)putnode.$(OFILE)\
+			$(LIBODIR)$(SLASH)qwk.$(OFILE)\
+			$(LIBODIR)$(SLASH)qwktomsg.$(OFILE)\
+			$(LIBODIR)$(SLASH)readmail.$(OFILE)\
+			$(LIBODIR)$(SLASH)readmsgs.$(OFILE)\
+			$(LIBODIR)$(SLASH)ringbuf.$(OFILE)\
+			$(LIBODIR)$(SLASH)scandirs.$(OFILE)\
+			$(LIBODIR)$(SLASH)scansubs.$(OFILE)\
+			$(LIBODIR)$(SLASH)scfglib1.$(OFILE)\
+			$(LIBODIR)$(SLASH)scfglib2.$(OFILE)\
+			$(LIBODIR)$(SLASH)scfgsave.$(OFILE)\
+			$(LIBODIR)$(SLASH)smblib.$(OFILE)\
+			$(LIBODIR)$(SLASH)smbtxt.$(OFILE)\
+			$(LIBODIR)$(SLASH)sortdir.$(OFILE)\
+			$(LIBODIR)$(SLASH)str.$(OFILE)\
+			$(LIBODIR)$(SLASH)telgate.$(OFILE)\
+			$(LIBODIR)$(SLASH)telnet.$(OFILE)\
+			$(LIBODIR)$(SLASH)text_sec.$(OFILE)\
+			$(LIBODIR)$(SLASH)tmp_xfer.$(OFILE)\
+			$(LIBODIR)$(SLASH)un_qwk.$(OFILE)\
+			$(LIBODIR)$(SLASH)un_rep.$(OFILE)\
+			$(LIBODIR)$(SLASH)upload.$(OFILE)\
+			$(LIBODIR)$(SLASH)userdat.$(OFILE)\
+			$(LIBODIR)$(SLASH)useredit.$(OFILE)\
+			$(LIBODIR)$(SLASH)viewfile.$(OFILE)\
+			$(LIBODIR)$(SLASH)writemsg.$(OFILE)\
+			$(LIBODIR)$(SLASH)xtrn.$(OFILE)\
+			$(LIBODIR)$(SLASH)xtrn_sec.$(OFILE)\
+			$(LIBODIR)$(SLASH)genwrap.$(OFILE)\
+			$(LIBODIR)$(SLASH)dirwrap.$(OFILE)\
+			$(LIBODIR)$(SLASH)filewrap.$(OFILE)\
+			$(LIBODIR)$(SLASH)threadwrap.$(OFILE)
diff --git a/src/sbbs3/sbbsdefs.mk b/src/sbbs3/sbbsdefs.mk
new file mode 100644
index 0000000000000000000000000000000000000000..768a682243b3f15a7bfaf9d455249d5561ed8008
--- /dev/null
+++ b/src/sbbs3/sbbsdefs.mk
@@ -0,0 +1,7 @@
+# sbbsdefs.mk
+
+# C/C++ compiler preprocessor definitions for building SBBS.DLL
+
+# $Id$
+
+SBBSDEFS=	-DSBBS -DSBBS_EXPORTS -DSMBDLL -DSMB_EXPORTS -DWRAPPER_DLL
diff --git a/src/sbbs3/targets.mk b/src/sbbs3/targets.mk
new file mode 100644
index 0000000000000000000000000000000000000000..17c71478bfb6181ef8139b2faac3b62f12a95faa
--- /dev/null
+++ b/src/sbbs3/targets.mk
@@ -0,0 +1,34 @@
+# targets.mk
+
+# Make 'include file' defining targets for Synchronet project
+
+# $Id$
+
+# LIBODIR, EXEODIR, SLASH, LIBFILE, EXEFILE, and DELETE must be pre-defined
+
+SBBS	=	$(LIBODIR)$(SLASH)sbbs$(LIBFILE) 
+FTPSRVR	=	$(LIBODIR)$(SLASH)ftpsrvr$(LIBFILE)
+MAILSRVR=	$(LIBODIR)$(SLASH)mailsrvr$(LIBFILE)
+SERVICES=	$(LIBODIR)$(SLASH)services$(LIBFILE)
+SBBSCON	=	$(EXEODIR)$(SLASH)sbbscon$(EXEFILE)
+SBBSMONO=	$(EXEODIR)$(SLASH)sbbs$(EXEFILE)
+NODE	=	$(EXEODIR)$(SLASH)node$(EXEFILE)
+BAJA	=	$(EXEODIR)$(SLASH)baja$(EXEFILE)
+FIXSMB	=	$(EXEODIR)$(SLASH)fixsmb$(EXEFILE)
+CHKSMB	=	$(EXEODIR)$(SLASH)chksmb$(EXEFILE)
+SMBUTIL	=	$(EXEODIR)$(SLASH)smbutil$(EXEFILE)
+
+all:	$(LIBODIR) $(EXEODIR) $(SBBSMONO) \
+		$(FIXSMB) $(CHKSMB) $(SMBUTIL) $(BAJA) $(NODE)
+
+utils:	$(EXEODIR) \
+		$(FIXSMB) $(CHKSMB) $(SMBUTIL) $(BAJA) $(NODE)
+
+dlls:	$(LIBODIR) \
+		$(SBBS) $(FTPSRVR) $(MAILSRVR) $(SERVICES)
+
+mono:	$(LIBODIR) $(EXEODIR) $(SBBSMONO)
+
+clean:
+	@$(DELETE) $(LIBODIR)$(SLASH)*
+	@$(DELETE) $(EXEODIR)$(SLASH)*
\ No newline at end of file